text-to-map 1.1.41 → 1.1.43

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.
@@ -1,7 +1,10 @@
1
1
  import { downloadAndImportStreets } from "../open-data-sync/streets";
2
2
  import { defaultBinOptions } from "./constants";
3
+ // Parse command line arguments
4
+ const args = process.argv.slice(2);
5
+ const noCache = args.includes('--no-cache');
3
6
  console.time("downloadAndImportAllStreets");
4
- downloadAndImportStreets(defaultBinOptions)
7
+ downloadAndImportStreets(defaultBinOptions, noCache)
5
8
  .then(() => {
6
9
  console.timeEnd("downloadAndImportAllStreets");
7
10
  })
@@ -13,4 +16,4 @@ downloadAndImportStreets(defaultBinOptions)
13
16
  console.log(error);
14
17
  }
15
18
  });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vc3RyZWV0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDO0tBQ3hDLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDVCxPQUFPLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUM7QUFDakQsQ0FBQyxDQUFDO0tBQ0QsS0FBSyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7SUFDcEIsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNqQztTQUFNO1FBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNwQjtBQUNILENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZG93bmxvYWRBbmRJbXBvcnRTdHJlZXRzIH0gZnJvbSBcIi4uL29wZW4tZGF0YS1zeW5jL3N0cmVldHNcIjtcclxuaW1wb3J0IHsgZGVmYXVsdEJpbk9wdGlvbnMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuXHJcbmNvbnNvbGUudGltZShcImRvd25sb2FkQW5kSW1wb3J0QWxsU3RyZWV0c1wiKTtcclxuZG93bmxvYWRBbmRJbXBvcnRTdHJlZXRzKGRlZmF1bHRCaW5PcHRpb25zKVxyXG4gIC50aGVuKCgpID0+IHtcclxuICAgIGNvbnNvbGUudGltZUVuZChcImRvd25sb2FkQW5kSW1wb3J0QWxsU3RyZWV0c1wiKTtcclxuICB9KVxyXG4gIC5jYXRjaCgoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgaWYgKGVycm9yLmhhc093blByb3BlcnR5KFwic3RhY2tcIikpIHtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IsIGVycm9yLnN0YWNrKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgIH1cclxuICB9KTtcclxuIl19
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vc3RyZWV0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsK0JBQStCO0FBQy9CLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFNUMsT0FBTyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQztLQUNqRCxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQ1QsT0FBTyxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBQ2pELENBQUMsQ0FBQztLQUNELEtBQUssQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO0lBQ3BCLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDakM7U0FBTTtRQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDcEI7QUFDSCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRvd25sb2FkQW5kSW1wb3J0U3RyZWV0cyB9IGZyb20gXCIuLi9vcGVuLWRhdGEtc3luYy9zdHJlZXRzXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRCaW5PcHRpb25zIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XHJcblxyXG4vLyBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzXHJcbmNvbnN0IGFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XHJcbmNvbnN0IG5vQ2FjaGUgPSBhcmdzLmluY2x1ZGVzKCctLW5vLWNhY2hlJyk7XHJcblxyXG5jb25zb2xlLnRpbWUoXCJkb3dubG9hZEFuZEltcG9ydEFsbFN0cmVldHNcIik7XHJcbmRvd25sb2FkQW5kSW1wb3J0U3RyZWV0cyhkZWZhdWx0QmluT3B0aW9ucywgbm9DYWNoZSlcclxuICAudGhlbigoKSA9PiB7XHJcbiAgICBjb25zb2xlLnRpbWVFbmQoXCJkb3dubG9hZEFuZEltcG9ydEFsbFN0cmVldHNcIik7XHJcbiAgfSlcclxuICAuY2F0Y2goKGVycm9yOiBhbnkpID0+IHtcclxuICAgIGlmIChlcnJvci5oYXNPd25Qcm9wZXJ0eShcInN0YWNrXCIpKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yLCBlcnJvci5zdGFjayk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICB9XHJcbiAgfSk7XHJcbiJdfQ==
@@ -5,6 +5,16 @@ import { getKnexDb, insertAutoincrementRow, insertMultipleRows } from "./db";
5
5
  import { MunicipalityType, } from "./types";
6
6
  const cityTypeCode = 261;
7
7
  const cityDistrictTypeCode = 263;
8
+ const schoolsOutsideTheirFounderMunicipality = [
9
+ "181042096",
10
+ "107516306",
11
+ "181147246",
12
+ "150076924",
13
+ "107583992",
14
+ "181024161",
15
+ "181064588",
16
+ "107629062",
17
+ ];
8
18
  export const insertFounders = async (founders) => {
9
19
  let insertedFounders = 0;
10
20
  const schoolFounderConnectionData = [];
@@ -28,8 +38,11 @@ export const insertFounders = async (founders) => {
28
38
  else {
29
39
  const { name, code } = result;
30
40
  if (name !== extractedMunicipalityName) {
31
- console.log(`izo: ${school.izo}, extracted: ${extractedMunicipalityName}, RUIAN: ${name}`);
32
- differingSchools.push(school);
41
+ // also filter out known exceptions
42
+ if (!schoolsOutsideTheirFounderMunicipality.includes(school.izo)) {
43
+ console.log(`izo: ${school.izo}, extracted: ${extractedMunicipalityName}, RUIAN: ${name}`);
44
+ differingSchools.push(school);
45
+ }
33
46
  }
34
47
  // store municipalityCode even if the names don't match, we will use it later
35
48
  municipalityCode = parseInt(code);
@@ -445,4 +458,4 @@ const getAllMunicipalityPartNames = async (cityCode) => {
445
458
  code: row.code,
446
459
  }));
447
460
  };
448
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm91bmRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvZm91bmRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBTXhELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLHdCQUF3QixHQUN6QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUVMLGdCQUFnQixHQUtqQixNQUFNLFNBQVMsQ0FBQztBQUVqQixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFFakMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEtBQUssRUFBRSxRQUFtQixFQUFtQixFQUFFO0lBQzNFLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sMkJBQTJCLEdBQUcsRUFBRSxDQUFDO0lBRXZDLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFO1FBQzlCLElBQ0UsT0FBTyxDQUFDLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLElBQUk7WUFDbEQsT0FBTyxDQUFDLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLFFBQVEsRUFDdEQ7WUFDQSxTQUFTO1NBQ1Y7UUFDRCxNQUFNLHlCQUF5QixHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5FLHdGQUF3RjtRQUN4RixJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTFCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUNwQyxNQUFNLE1B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TixDQUFDLENBQUM7QUFFRixNQUFNLDJCQUEyQixHQUFHLEtBQUssRUFDdkMsUUFBZ0IsRUFDMkIsRUFBRTtJQUM3QyxPQUFPLENBQ0wsTUFBTSxTQUFTLEVBQUU7U0FDZCxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztTQUN0QixJQUFJLENBQUMsbUJBQW1CLENBQUM7U0FDekIsS0FBSyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FDaEMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7UUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7S0FDZixDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkaXN0YW5jZSBmcm9tIFwiQHR1cmYvZGlzdGFuY2VcIjtcclxuaW1wb3J0IHsgd2hvbGVMaW5lRXJyb3IgfSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3NtZFwiO1xyXG5pbXBvcnQge1xyXG4gIERiTXVuaWNpcGFsaXR5UmVzdWx0LFxyXG4gIE11bmljaXBhbGl0eVBhcnRSZXN1bHQsXHJcbiAgU21kRXJyb3IsXHJcbn0gZnJvbSBcIi4uL3N0cmVldC1tYXJrZG93bi90eXBlc1wiO1xyXG5pbXBvcnQge1xyXG4gIGV4dHJhY3RNdW5pY2lwYWxpdHlOYW1lLFxyXG4gIGZpbmRDbG9zZXN0U3RyaW5nLFxyXG4gIHNhbml0aXplTXVuaWNpcGFsaXR5TmFtZSxcclxufSBmcm9tIFwiLi4vdXRpbHMvaGVscGVyc1wiO1xyXG5pbXBvcnQgeyBnZXRLbmV4RGIsIGluc2VydEF1dG9pbmNyZW1lbnRSb3csIGluc2VydE11bHRpcGxlUm93cyB9IGZyb20gXCIuL2RiXCI7XHJcbmltcG9ydCB7XHJcbiAgRm91bmRlcixcclxuICBNdW5pY2lwYWxpdHlUeXBlLFxyXG4gIE11bmljaXBhbGl0eVdpdGhQb3NpdGlvbixcclxuICBQbGFjZVdpdGhQb3NpdGlvbixcclxuICBTY2hvb2wsXHJcbiAgU2Nob29sVHlwZSxcclxufSBmcm9tIFwiLi90eXBlc1wiO1xyXG5cclxuY29uc3QgY2l0eVR5cGVDb2RlID0gMjYxO1xyXG5jb25zdCBjaXR5RGlzdHJpY3RUeXBlQ29kZSA9IDI2MztcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRGb3VuZGVycyA9IGFzeW5jIChmb3VuZGVyczogRm91bmRlcltdKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICBsZXQgaW5zZXJ0ZWRGb3VuZGVycyA9IDA7XHJcbiAgY29uc3Qgc2Nob29sRm91bmRlckNvbm5lY3Rpb25EYXRhID0gW107XHJcblxyXG4gIGZvciAoY29uc3QgZm91bmRlciBvZiBmb3VuZGVycykge1xyXG4gICAgaWYgKFxyXG4gICAgICBmb3VuZGVyLm11bmljaXBhbGl0eVR5cGUgIT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eSAmJlxyXG4gICAgICBmb3VuZGVyLm11bmljaXBhbGl0eVR5cGUgIT09IE11bmljaXBhbGl0eVR5cGUuRGlzdHJpY3RcclxuICAgICkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGV4dHJhY3RlZE11bmljaXBhbGl0eU5hbWUgPSBleHRyYWN0TXVuaWNpcGFsaXR5TmFtZShmb3VuZGVyKTtcclxuXHJcbiAgICAvLyBjaGVjayBpZiB0aGUgZXh0cmFjdGVkIG11bmljaXBhbGl0eSBuYW1lIGlzIHRoZSBzYW1lIGFzIGluIGFsbCB0aGUgc2Nob29scycgbG9jYXRpb25zXHJcbiAgICBsZXQgZGlmZmVyaW5nU2Nob29scyA9IFtdO1xyXG4gICAgbGV0IG11bmljaXBhbGl0eUNvZGUgPSAtMTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHNjaG9vbCBvZiBmb3VuZGVyLnNjaG9vbHMpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgKGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5XHJcbiAgICAgICAgPyBnZXRDaXR5T2ZTY2hvb2woc2Nob29sLml6bylcclxuICAgICAgICA6IGdldERpc3RyaWN0T2ZTY2hvb2woc2Nob29sLml6bykpO1xyXG4gICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgYGl6bzogJHtzY2hvb2wuaXpvfSwgZXh0cmFjdGVkOiAke2V4dHJhY3RlZE11bmljaXBhbGl0eU5hbWV9LCBSVUlBTjogVU5ERUZJTkVEYFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZGlmZmVyaW5nU2Nob29scy5wdXNoKHNjaG9vbCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgeyBuYW1lLCBjb2RlIH0gPSByZXN1bHQ7XHJcbiAgICAgICAgaWYgKG5hbWUgIT09IGV4dHJhY3RlZE11bmljaXBhbGl0eU5hbWUpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICBgaXpvOiAke3NjaG9vbC5pem99LCBleHRyYWN0ZWQ6ICR7ZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZX0sIFJVSUFOOiAke25hbWV9YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGRpZmZlcmluZ1NjaG9vbHMucHVzaChzY2hvb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzdG9yZSBtdW5pY2lwYWxpdHlDb2RlIGV2ZW4gaWYgdGhlIG5hbWVzIGRvbid0IG1hdGNoLCB3ZSB3aWxsIHVzZSBpdCBsYXRlclxyXG4gICAgICAgIG11bmljaXBhbGl0eUNvZGUgPSBwYXJzZUludChjb2RlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG11bmljaXBhbGl0eUNvZGUgPSBhd2FpdCBmaXhGb3VuZGVyUHJvYmxlbXMoXHJcbiAgICAgIGZvdW5kZXIsXHJcbiAgICAgIG11bmljaXBhbGl0eUNvZGUsXHJcbiAgICAgIGRpZmZlcmluZ1NjaG9vbHMsXHJcbiAgICAgIGV4dHJhY3RlZE11bmljaXBhbGl0eU5hbWVcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgY2l0eURpc3RyaWN0Q29kZSA9XHJcbiAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5EaXN0cmljdFxyXG4gICAgICAgID8gbXVuaWNpcGFsaXR5Q29kZS50b1N0cmluZygpXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgbGV0IGNpdHlDb2RlID0gbnVsbDtcclxuICAgIGlmIChmb3VuZGVyLm11bmljaXBhbGl0eVR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eSkge1xyXG4gICAgICBjaXR5Q29kZSA9IG11bmljaXBhbGl0eUNvZGU/LnRvU3RyaW5nKCkgPz8gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNpdHlDb2RlID0gYXdhaXQgZ2V0Q2l0eUNvZGVCeURpc3RyaWN0Q29kZShtdW5pY2lwYWxpdHlDb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgIC5zZWxlY3QoXCIqXCIpXHJcbiAgICAgIC5mcm9tKFwiZm91bmRlclwiKVxyXG4gICAgICAud2hlcmUoe1xyXG4gICAgICAgIG5hbWU6IHNhbml0aXplTXVuaWNpcGFsaXR5TmFtZShmb3VuZGVyLm5hbWUpLFxyXG4gICAgICAgIGljbzogZm91bmRlci5pY28sXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGxldCBmb3VuZGVySWQgPSBleGlzdGluZ1swXT8uaWQgPz8gbnVsbDtcclxuXHJcbiAgICBpZiAoZXhpc3RpbmcubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGZvdW5kZXJJZCA9IGF3YWl0IGluc2VydEF1dG9pbmNyZW1lbnRSb3coXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgc2FuaXRpemVNdW5pY2lwYWxpdHlOYW1lKGZvdW5kZXIubmFtZSksXHJcbiAgICAgICAgICBzYW5pdGl6ZU11bmljaXBhbGl0eU5hbWUoZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZSksXHJcbiAgICAgICAgICBmb3VuZGVyLmljbyxcclxuICAgICAgICAgIFN0cmluZyhmb3VuZGVyLm9yaWdpbmFsVHlwZSksXHJcbiAgICAgICAgICBjaXR5Q29kZSxcclxuICAgICAgICAgIGNpdHlEaXN0cmljdENvZGUsXHJcbiAgICAgICAgXSxcclxuICAgICAgICBcImZvdW5kZXJcIixcclxuICAgICAgICBbXHJcbiAgICAgICAgICBcIm5hbWVcIixcclxuICAgICAgICAgIFwic2hvcnRfbmFtZVwiLFxyXG4gICAgICAgICAgXCJpY29cIixcclxuICAgICAgICAgIFwiZm91bmRlcl90eXBlX2NvZGVcIixcclxuICAgICAgICAgIFwiY2l0eV9jb2RlXCIsXHJcbiAgICAgICAgICBcImNpdHlfZGlzdHJpY3RfY29kZVwiLFxyXG4gICAgICAgIF1cclxuICAgICAgKTtcclxuICAgICAgaW5zZXJ0ZWRGb3VuZGVycysrO1xyXG4gICAgfVxyXG5cclxuICAgIGZvdW5kZXIuc2Nob29scy5mb3JFYWNoKChzY2hvb2wpID0+IHtcclxuICAgICAgc2Nob29sRm91bmRlckNvbm5lY3Rpb25EYXRhLnB1c2goW3NjaG9vbC5pem8sIGZvdW5kZXJJZF0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBpbnNlcnRlZENvbm5lY3Rpb25zID0gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgc2Nob29sRm91bmRlckNvbm5lY3Rpb25EYXRhLFxyXG4gICAgXCJzY2hvb2xfZm91bmRlclwiLFxyXG4gICAgW1wic2Nob29sX2l6b1wiLCBcImZvdW5kZXJfaWRcIl0sXHJcbiAgICB0cnVlXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIGluc2VydGVkRm91bmRlcnMgKyBpbnNlcnRlZENvbm5lY3Rpb25zO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0Q2l0eU9mU2Nob29sID0gYXN5bmMgKGl6bzogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICByZXR1cm4gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXCJjLm5hbWVcIiwgXCJjLmNvZGVcIilcclxuICAgIC5mcm9tKFwic2Nob29sIGFzIHNcIilcclxuICAgIC5qb2luKFwic2Nob29sX2xvY2F0aW9uIGFzIGxcIiwgXCJzLml6b1wiLCBcImwuc2Nob29sX2l6b1wiKVxyXG4gICAgLmpvaW4oXCJhZGRyZXNzX3BvaW50IGFzIGFcIiwgXCJsLmFkZHJlc3NfcG9pbnRfaWRcIiwgXCJhLmlkXCIpXHJcbiAgICAuam9pbihcImNpdHkgYXMgY1wiLCBcImEuY2l0eV9jb2RlXCIsIFwiYy5jb2RlXCIpXHJcbiAgICAud2hlcmUoXCJzLml6b1wiLCBpem8pXHJcbiAgICAubGltaXQoMSlcclxuICAgIC5maXJzdCgpO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0RGlzdHJpY3RPZlNjaG9vbCA9IGFzeW5jIChpem86IHN0cmluZyk6IFByb21pc2U8YW55PiA9PiB7XHJcbiAgcmV0dXJuIGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAuc2VsZWN0KFwiZC5uYW1lXCIsIFwiZC5jb2RlXCIpXHJcbiAgICAuZnJvbShcInNjaG9vbCBhcyBzXCIpXHJcbiAgICAuam9pbihcInNjaG9vbF9sb2NhdGlvbiBhcyBsXCIsIFwicy5pem9cIiwgXCJsLnNjaG9vbF9pem9cIilcclxuICAgIC5qb2luKFwiYWRkcmVzc19wb2ludCBhcyBhXCIsIFwibC5hZGRyZXNzX3BvaW50X2lkXCIsIFwiYS5pZFwiKVxyXG4gICAgLmpvaW4oXCJjaXR5X2Rpc3RyaWN0IGFzIGRcIiwgXCJhLmNpdHlfZGlzdHJpY3RfY29kZVwiLCBcImQuY29kZVwiKVxyXG4gICAgLndoZXJlKFwicy5pem9cIiwgaXpvKVxyXG4gICAgLmxpbWl0KDEpXHJcbiAgICAuZmlyc3QoKTtcclxufTtcclxuXHJcbmNvbnN0IGZpeEZvdW5kZXJQcm9ibGVtcyA9IGFzeW5jIChcclxuICBmb3VuZGVyOiBGb3VuZGVyLFxyXG4gIG11bmljaXBhbGl0eUNvZGU6IG51bWJlcixcclxuICBkaWZmZXJpbmdTY2hvb2xzOiBTY2hvb2xbXSxcclxuICBleHRyYWN0ZWRNdW5pY2lwYWxpdHlOYW1lOiBzdHJpbmdcclxuKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiA9PiB7XHJcbiAgaWYgKFxyXG4gICAgZGlmZmVyaW5nU2Nob29scy5sZW5ndGggPT09IDAgfHxcclxuICAgIGRpZmZlcmluZ1NjaG9vbHMubGVuZ3RoIDwgZm91bmRlci5zY2hvb2xzLmxlbmd0aFxyXG4gICkge1xyXG4gICAgcmV0dXJuIG11bmljaXBhbGl0eUNvZGU7XHJcbiAgfVxyXG5cclxuICAvLyBlaXRoZXIgdGhlIHNjaG9vbCBkb2VzIG5vdCBoYXZlIGEgcG9zaXRpb24gKGludmFsaWQgUlVJQU4gb3IgbWlzc2luZyBidWlsZGluZylcclxuICAvLyBvciB0aGUgc2Nob29sIGlzIG5vdCBpbiB0aGUgc2FtZSBtdW5pY2lwYWxpdHkgYXMgdGhlIGZvdW5kZXJcclxuXHJcbiAgLy8gZmluZCBhbGwgY2l0aWVzIGFuZCB0aGVpciBwb3NpdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgbXVuaWNpcGFsaXR5TmFtZVxyXG4gIGNvbnN0IG11bmljaXBhbGl0aWVzID0gYXdhaXQgZmluZE11bmljaXBhbGl0aWVzQW5kUG9zaXRpb25zQnlOYW1lQW5kVHlwZShcclxuICAgIGV4dHJhY3RlZE11bmljaXBhbGl0eU5hbWUsXHJcbiAgICBmb3VuZGVyLm11bmljaXBhbGl0eVR5cGVcclxuICApO1xyXG5cclxuICAvLyBnZXQgb25lIHNjaG9vbCBwb3NpdGlvbiAoaWYgdGhlcmUgYXJlIG1vcmUgc2Nob29scywgdGhleSBzaG91bGQgYmUgY2xvc2UgdG8gZWFjaCBvdGhlcilcclxuICBjb25zdCBzY2hvb2xQb3NpdGlvbjpcclxuICAgIHwgeyB3Z3M4NF9sYXRpdHVkZTogbnVtYmVyOyB3Z3M4NF9sb25naXR1ZGU6IG51bWJlciB9XHJcbiAgICB8IHVuZGVmaW5lZCA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAuc2VsZWN0KFwiYWRkcmVzc19wb2ludC53Z3M4NF9sYXRpdHVkZVwiLCBcImFkZHJlc3NfcG9pbnQud2dzODRfbG9uZ2l0dWRlXCIpXHJcbiAgICAuZnJvbShcInNjaG9vbFwiKVxyXG4gICAgLmpvaW4oXCJzY2hvb2xfbG9jYXRpb25cIiwgXCJzY2hvb2wuaXpvXCIsIFwic2Nob29sX2xvY2F0aW9uLnNjaG9vbF9pem9cIilcclxuICAgIC5qb2luKFxyXG4gICAgICBcImFkZHJlc3NfcG9pbnRcIixcclxuICAgICAgXCJzY2hvb2xfbG9jYXRpb24uYWRkcmVzc19wb2ludF9pZFwiLFxyXG4gICAgICBcImFkZHJlc3NfcG9pbnQuaWRcIlxyXG4gICAgKVxyXG4gICAgLndoZXJlSW4oXHJcbiAgICAgIFwic2Nob29sLml6b1wiLFxyXG4gICAgICBkaWZmZXJpbmdTY2hvb2xzLm1hcCgoc2Nob29sKSA9PiBzY2hvb2wuaXpvKVxyXG4gICAgKVxyXG4gICAgLmxpbWl0KDEpXHJcbiAgICAuZmlyc3QoKTtcclxuXHJcbiAgaWYgKHNjaG9vbFBvc2l0aW9uKSB7XHJcbiAgICBpZiAobXVuaWNpcGFsaXRpZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGlmIChtdW5pY2lwYWxpdHlDb2RlID09PSAtMSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgYG5vIG11bmljaXBhbGl0eSBieSBuYW1lIG9yIGJ5IGxvY2F0aW9uIGZvdW5kIGZvciAke2ZvdW5kZXIubmFtZX1gXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgIFwibm8gbXVuaWNpcGFsaXR5IG1hdGNoaW5nIHRoZSBleHRyYWN0ZWQgbmFtZSwgdXNpbmcgdGhlIG11bmljaXBhbGl0eSBmcm9tIFJVSUFOIGNvZGVcIlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAobXVuaWNpcGFsaXRpZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgIFwidXNpbmcgdGhlIG9ubHkgbXVuaWNpcGFsaXR5IGZvdW5kIG1hdGNoaW5nIHRoZSBleHRyYWN0ZWQgbmFtZVwiXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBtdW5pY2lwYWxpdGllc1swXS5jb2RlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coXCJ1c2luZyB0aGUgY2xvc2VzdCBtdW5pY2lwYWxpdHkgbWF0Y2hpbmcgdGhlIGV4dHJhY3RlZCBuYW1lXCIpO1xyXG4gICAgICByZXR1cm4gZ2V0Q2xvc2VzdENvZGUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29kZTogMSxcclxuICAgICAgICAgIGxhdDogc2Nob29sUG9zaXRpb24ud2dzODRfbGF0aXR1ZGUsXHJcbiAgICAgICAgICBsbmc6IHNjaG9vbFBvc2l0aW9uLndnczg0X2xvbmdpdHVkZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIG11bmljaXBhbGl0aWVzLm1hcCgobXVuaWNpcGFsaXR5KSA9PiAoe1xyXG4gICAgICAgICAgY29kZTogbXVuaWNpcGFsaXR5LmNvZGUsXHJcbiAgICAgICAgICBsYXQ6IG11bmljaXBhbGl0eS5sYXQsXHJcbiAgICAgICAgICBsbmc6IG11bmljaXBhbGl0eS5sbmcsXHJcbiAgICAgICAgfSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChtdW5pY2lwYWxpdGllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmIChtdW5pY2lwYWxpdGllcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICBgdXNpbmcgdGhlIGZpcnN0IG11bmljaXBhbGl0eSBtYXRjaGluZyB0aGUgZXh0cmFjdGVkIG5hbWUgKCR7bXVuaWNpcGFsaXRpZXMubGVuZ3RofSBtYXRjaGVzKSAtIHBvc3NpYmx5IGluY29ycmVjdCFgXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgIFwidXNpbmcgdGhlIG9ubHkgbXVuaWNpcGFsaXR5IGZvdW5kIG1hdGNoaW5nIHRoZSBleHRyYWN0ZWQgbmFtZVwiXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbXVuaWNpcGFsaXRpZXNbMF0uY29kZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgIGBubyBtdW5pY2lwYWxpdHkgYnkgbmFtZSBvciBieSBsb2NhdGlvbiBmb3VuZCBmb3IgJHtmb3VuZGVyLm5hbWV9YFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBnZXRDbG9zZXN0Q29kZSA9IGFzeW5jIChcclxuICBmcm9tOiBQbGFjZVdpdGhQb3NpdGlvbixcclxuICB0b0xpc3Q6IFBsYWNlV2l0aFBvc2l0aW9uW11cclxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICBsZXQgbG93ZXN0RGlzdGFuY2UgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcclxuICBsZXQgY29kZTogbnVtYmVyID0gbnVsbDtcclxuICBmb3IgKGNvbnN0IHBsYWNlIG9mIHRvTGlzdCkge1xyXG4gICAgbGV0IG11bmljaXBhbGl0eURpc3RhbmNlID0gZGlzdGFuY2UoXHJcbiAgICAgIFtwbGFjZS5sYXQsIHBsYWNlLmxuZ10sXHJcbiAgICAgIFtmcm9tLmxhdCwgZnJvbS5sbmddXHJcbiAgICApO1xyXG4gICAgaWYgKG11bmljaXBhbGl0eURpc3RhbmNlIDwgbG93ZXN0RGlzdGFuY2UpIHtcclxuICAgICAgbG93ZXN0RGlzdGFuY2UgPSBtdW5pY2lwYWxpdHlEaXN0YW5jZTtcclxuICAgICAgY29kZSA9IHBsYWNlLmNvZGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBjb2RlO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0Q2l0eUNvZGVCeURpc3RyaWN0Q29kZSA9IGFzeW5jIChcclxuICBkaXN0cmljdENvZGU6IG51bWJlclxyXG4pOiBQcm9taXNlPG51bWJlciB8IG51bGw+ID0+IHtcclxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLmZpcnN0KFwiY2l0eS5jb2RlXCIpXHJcbiAgICAuZnJvbShcImNpdHlfZGlzdHJpY3RcIilcclxuICAgIC5qb2luKFwiY2l0eVwiLCBcImNpdHlfZGlzdHJpY3QuY2l0eV9jb2RlXCIsIFwiY2l0eS5jb2RlXCIpXHJcbiAgICAud2hlcmUoXCJjaXR5X2Rpc3RyaWN0LmNvZGVcIiwgZGlzdHJpY3RDb2RlKVxyXG4gICAgLmxpbWl0KDEpO1xyXG4gIHJldHVybiByZXN1bHQ/LmNvZGUgPz8gbnVsbDtcclxufTtcclxuXHJcbmNvbnN0IGZpbmRNdW5pY2lwYWxpdGllc0FuZFBvc2l0aW9uc0J5TmFtZUFuZFR5cGUgPSBhc3luYyAoXHJcbiAgbmFtZTogc3RyaW5nLFxyXG4gIHR5cGU6IE11bmljaXBhbGl0eVR5cGVcclxuKTogUHJvbWlzZTxNdW5pY2lwYWxpdHlXaXRoUG9zaXRpb25bXT4gPT4ge1xyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcclxuICByZXR1cm4gKFxyXG4gICAgdHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5XHJcbiAgICAgID8gYXdhaXQga25leFxyXG4gICAgICAgICAgLnNlbGVjdChcclxuICAgICAgICAgICAgXCJjaXR5Lm5hbWVcIixcclxuICAgICAgICAgICAgXCJjaXR5LmNvZGVcIixcclxuICAgICAgICAgICAgXCJhZGRyZXNzX3BvaW50Lndnczg0X2xhdGl0dWRlXCIsXHJcbiAgICAgICAgICAgIFwiYWRkcmVzc19wb2ludC53Z3M4NF9sb25naXR1ZGVcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLmZyb20oXCJjaXR5XCIpXHJcbiAgICAgICAgICAuam9pbihcImFkZHJlc3NfcG9pbnRcIiwgXCJjaXR5LmNvZGVcIiwgXCJhZGRyZXNzX3BvaW50LmNpdHlfY29kZVwiKVxyXG4gICAgICAgICAgLndoZXJlKFwiY2l0eS5uYW1lXCIsIG5hbWUpXHJcbiAgICAgICAgICAuZ3JvdXBCeShcImNpdHkuY29kZVwiKVxyXG4gICAgICA6IGF3YWl0IGtuZXhcclxuICAgICAgICAgIC5zZWxlY3QoXHJcbiAgICAgICAgICAgIFwiY2l0eV9kaXN0cmljdC5uYW1lXCIsXHJcbiAgICAgICAgICAgIFwiY2l0eV9kaXN0cmljdC5jb2RlXCIsXHJcbiAgICAgICAgICAgIFwiYWRkcmVzc19wb2ludC53Z3M4NF9sYXRpdHVkZVwiLFxyXG4gICAgICAgICAgICBcImFkZHJlc3NfcG9pbnQud2dzODRfbG9uZ2l0dWRlXCJcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5mcm9tKFwiY2l0eV9kaXN0cmljdFwiKVxyXG4gICAgICAgICAgLmpvaW4oXHJcbiAgICAgICAgICAgIFwiYWRkcmVzc19wb2ludFwiLFxyXG4gICAgICAgICAgICBcImNpdHlfZGlzdHJpY3QuY29kZVwiLFxyXG4gICAgICAgICAgICBcImFkZHJlc3NfcG9pbnQuY2l0eV9kaXN0cmljdF9jb2RlXCJcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC53aGVyZShcImNpdHlfZGlzdHJpY3QubmFtZVwiLCBuYW1lKVxyXG4gICAgICAgICAgLmdyb3VwQnkoXCJjaXR5X2Rpc3RyaWN0LmNvZGVcIilcclxuICApLm1hcCgocm93KSA9PiAoe1xyXG4gICAgY29kZTogcm93LmNvZGUsXHJcbiAgICB0eXBlLFxyXG4gICAgbGF0OiByb3cud2dzODRfbGF0aXR1ZGUsXHJcbiAgICBsbmc6IHJvdy53Z3M4NF9sb25naXR1ZGUsXHJcbiAgfSkpO1xyXG59O1xyXG5cclxuY29uc3QgZXh0cmFjdEZvdW5kZXJOYW1lID0gKGxpbmU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKGxpbmVbMF0gPT09IFwiI1wiKSB7XHJcbiAgICByZXR1cm4gbGluZS5zdWJzdHJpbmcoMSkudHJpbSgpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gbGluZS50cmltKCk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgZ2V0QmFzZUZvdW5kZXJRdWVyeSA9ICgpID0+IHtcclxuICByZXR1cm4gZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXHJcbiAgICAgIFwiZi5pZFwiLFxyXG4gICAgICBcImYubmFtZVwiLFxyXG4gICAgICBcImYuaWNvXCIsXHJcbiAgICAgIFwiZi5mb3VuZGVyX3R5cGVfY29kZVwiLFxyXG4gICAgICBcImYuY2l0eV9jb2RlXCIsXHJcbiAgICAgIFwiZi5jaXR5X2Rpc3RyaWN0X2NvZGVcIlxyXG4gICAgKVxyXG4gICAgLmZyb20oXCJmb3VuZGVyIGFzIGZcIilcclxuICAgIC5sZWZ0Sm9pbihcImNpdHkgYXMgY1wiLCBcImMuY29kZVwiLCBcImYuY2l0eV9jb2RlXCIpXHJcbiAgICAubGVmdEpvaW4oXCJjaXR5X2Rpc3RyaWN0IGFzIGRcIiwgXCJkLmNvZGVcIiwgXCJmLmNpdHlfZGlzdHJpY3RfY29kZVwiKVxyXG4gICAgLm9yZGVyQnkoXCJmLmZvdW5kZXJfdHlwZV9jb2RlXCIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZvdW5kZXJCeUlkID0gYXN5bmMgKFxyXG4gIGlkOiBudW1iZXIsXHJcbiAgc2Nob29sVHlwZTogU2Nob29sVHlwZVxyXG4pOiBQcm9taXNlPHsgZm91bmRlcjogRm91bmRlcjsgZXJyb3JzOiBTbWRFcnJvcltdIH0+ID0+IHtcclxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRCYXNlRm91bmRlclF1ZXJ5KCkud2hlcmUoXCJmLmlkXCIsIGlkKS5maXJzdCgpO1xyXG4gIGNvbnN0IGZvdW5kZXIgPSBhd2FpdCByZXN1bHRUb0ZvdW5kZXIocmVzdWx0LCBzY2hvb2xUeXBlKTtcclxuICByZXR1cm4ge1xyXG4gICAgZm91bmRlcjogZm91bmRlciA/PyBudWxsLFxyXG4gICAgZXJyb3JzOiBmb3VuZGVyXHJcbiAgICAgID8gW11cclxuICAgICAgOiBbd2hvbGVMaW5lRXJyb3IoYFrFmWl6b3ZhdGVsIHMgaWQgJHtpZH0gbmVleGlzdHVqZS5gLCBcIlwiKV0sXHJcbiAgfTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBmaW5kRm91bmRlciA9IGFzeW5jIChcclxuICBuYW1lV2l0aEhhc2h0YWc6IHN0cmluZyxcclxuICBzY2hvb2xUeXBlOiBTY2hvb2xUeXBlXHJcbik6IFByb21pc2U8eyBmb3VuZGVyOiBGb3VuZGVyOyBlcnJvcnM6IFNtZEVycm9yW10gfT4gPT4ge1xyXG4gIGNvbnN0IGVycm9yczogU21kRXJyb3JbXSA9IFtdO1xyXG5cclxuICAvLyBzcGVjaWFsIGNhc2Ugd2hlcmUgd2Ugc2VhcmNoIGZvciBhIGNpdHkgaW5zdGVhZCBvZiBhIGZvdW5kZXJcclxuICBpZiAobmFtZVdpdGhIYXNodGFnWzFdID09PSBcIiNcIikge1xyXG4gICAgY29uc3QgY2l0eU5hbWUgPSBuYW1lV2l0aEhhc2h0YWcuc3Vic3RyaW5nKDIpLnRyaW0oKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgIC5zZWxlY3QoXCJjb2RlXCIpXHJcbiAgICAgIC5mcm9tKFwiY2l0eVwiKVxyXG4gICAgICAud2hlcmUoXCJuYW1lXCIsIGNpdHlOYW1lKVxyXG4gICAgICAuZmlyc3QoKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb3VuZGVyOiB7XHJcbiAgICAgICAgbmFtZTogY2l0eU5hbWUsXHJcbiAgICAgICAgaWNvOiBcIjAwMDAwMDAwXCIsXHJcbiAgICAgICAgb3JpZ2luYWxUeXBlOiBjaXR5VHlwZUNvZGUsXHJcbiAgICAgICAgbXVuaWNpcGFsaXR5VHlwZTogTXVuaWNpcGFsaXR5VHlwZS5DaXR5LFxyXG4gICAgICAgIG11bmljaXBhbGl0eUNvZGU6IHJlc3VsdC5jb2RlLFxyXG4gICAgICAgIHNjaG9vbHM6IGF3YWl0IGdldFNjaG9vbHNCeUNpdHlDb2RlKHJlc3VsdC5jb2RlLCBzY2hvb2xUeXBlKSxcclxuICAgICAgfSxcclxuICAgICAgZXJyb3JzLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbnN0IG5hbWUgPSBleHRyYWN0Rm91bmRlck5hbWUobmFtZVdpdGhIYXNodGFnKTtcclxuXHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0QmFzZUZvdW5kZXJRdWVyeSgpXHJcbiAgICAud2hlcmUoXCJmLm5hbWVcIiwgbmFtZSlcclxuICAgIC5vcldoZXJlKFwiYy5uYW1lXCIsIG5hbWUpXHJcbiAgICAub3JXaGVyZShcImQubmFtZVwiLCBuYW1lKVxyXG4gICAgLmZpcnN0KCk7XHJcbiAgaWYgKHJlc3VsdCkge1xyXG4gICAgcmV0dXJuIHsgZm91bmRlcjogYXdhaXQgcmVzdWx0VG9Gb3VuZGVyKHJlc3VsdCwgc2Nob29sVHlwZSksIGVycm9ycyB9O1xyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBhbGxGb3VuZGVyTmFtZXMgPSBhd2FpdCBnZXRBbGxGb3VuZGVyTmFtZXMoKTtcclxuICAgIGNvbnN0IG5hbWVzTGlzdCA9IGFsbEZvdW5kZXJOYW1lc1xyXG4gICAgICAubWFwKChyb3cpID0+IHJvdy5mb3VuZGVyTmFtZSlcclxuICAgICAgLmNvbmNhdChhbGxGb3VuZGVyTmFtZXMubWFwKChyb3cpID0+IHJvdy5tdW5pY2lwYWxpdHlOYW1lKSk7XHJcbiAgICBjb25zdCBiZXN0TWF0Y2ggPSBmaW5kQ2xvc2VzdFN0cmluZyhuYW1lLCBuYW1lc0xpc3QpO1xyXG4gICAgY29uc3QgYmVzdE1hdGNoUm93ID0gYWxsRm91bmRlck5hbWVzLmZpbmQoXHJcbiAgICAgIChmb3VuZGVyc05hbWVzKSA9PlxyXG4gICAgICAgIGZvdW5kZXJzTmFtZXMuZm91bmRlck5hbWUgPT09IGJlc3RNYXRjaCB8fFxyXG4gICAgICAgIGZvdW5kZXJzTmFtZXMubXVuaWNpcGFsaXR5TmFtZSA9PT0gYmVzdE1hdGNoXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghYmVzdE1hdGNoUm93KSB7XHJcbiAgICAgIGVycm9ycy5wdXNoKFxyXG4gICAgICAgIHdob2xlTGluZUVycm9yKFxyXG4gICAgICAgICAgYE5lbmHFoWxpIGpzbWUgxb7DoWRuw6kgesWZaXpvdmF0ZWxlLCBuZWpzcMOtxaEganN0ZSB6YXBvbW7Em2xpIGluaWNpYWxpem92YXQgZGF0YWLDoXppLmAsXHJcbiAgICAgICAgICBuYW1lV2l0aEhhc2h0YWdcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZm91bmRlcjogbnVsbCxcclxuICAgICAgICBlcnJvcnMsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZXJyb3JzLnB1c2goXHJcbiAgICAgIHdob2xlTGluZUVycm9yKFxyXG4gICAgICAgIGBaxZlpem92YXRlbCAnJHtuYW1lfScgbmVleGlzdHVqZSwgbXlzbGVsaSBqc3RlICcke2Jlc3RNYXRjaH0nP2AsXHJcbiAgICAgICAgbmFtZVdpdGhIYXNodGFnXHJcbiAgICAgIClcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZm91bmRlciA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgIC5zZWxlY3QoXHJcbiAgICAgICAgXCJpZFwiLFxyXG4gICAgICAgIFwibmFtZVwiLFxyXG4gICAgICAgIFwiaWNvXCIsXHJcbiAgICAgICAgXCJmb3VuZGVyX3R5cGVfY29kZVwiLFxyXG4gICAgICAgIFwiY2l0eV9jb2RlXCIsXHJcbiAgICAgICAgXCJjaXR5X2Rpc3RyaWN0X2NvZGVcIlxyXG4gICAgICApXHJcbiAgICAgIC5mcm9tKFwiZm91bmRlclwiKVxyXG4gICAgICAud2hlcmUoXCJpZFwiLCBiZXN0TWF0Y2hSb3cuaWQpXHJcbiAgICAgIC5maXJzdCgpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZm91bmRlcjogYXdhaXQgcmVzdWx0VG9Gb3VuZGVyKGZvdW5kZXIsIHNjaG9vbFR5cGUpLFxyXG4gICAgICBlcnJvcnMsXHJcbiAgICB9O1xyXG4gIH1cclxufTtcclxuXHJcbmxldCBjYWNoZWRDaXR5Q29kZTogbnVtYmVyID0gbnVsbDtcclxubGV0IGxhc3RDb2RlOiBudW1iZXIgPSBudWxsO1xyXG5leHBvcnQgY29uc3QgZ2V0Rm91bmRlckNpdHlDb2RlID0gYXN5bmMgKFxyXG4gIHR5cGU6IE11bmljaXBhbGl0eVR5cGUsXHJcbiAgY29kZTogbnVtYmVyXHJcbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgaWYgKHR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuRGlzdHJpY3QpIHtcclxuICAgIGlmIChsYXN0Q29kZSAhPT0gY29kZSkge1xyXG4gICAgICBsYXN0Q29kZSA9IGNvZGU7XHJcbiAgICAgIGNhY2hlZENpdHlDb2RlID0gKFxyXG4gICAgICAgIGF3YWl0IGdldEtuZXhEYigpLmZyb20oXCJjaXR5X2Rpc3RyaWN0XCIpLndoZXJlKFwiY29kZVwiLCBjb2RlKS5maXJzdCgpXHJcbiAgICAgICkuY2l0eV9jb2RlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhY2hlZENpdHlDb2RlO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gY29kZTtcclxuICB9XHJcbn07XHJcblxyXG5pbnRlcmZhY2UgRm91bmRlck5hbWVzIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIGZvdW5kZXJOYW1lOiBzdHJpbmc7XHJcbiAgbXVuaWNpcGFsaXR5TmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG5jb25zdCByZXN1bHRUb0ZvdW5kZXIgPSBhc3luYyAoXHJcbiAgcmVzdWx0OiBhbnksXHJcbiAgc2Nob29sVHlwZTogU2Nob29sVHlwZVxyXG4pOiBQcm9taXNlPEZvdW5kZXI+ID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICBpY286IHJlc3VsdC5pY28sXHJcbiAgICBvcmlnaW5hbFR5cGU6IHJlc3VsdC5mb3VuZGVyX3R5cGVfY29kZSxcclxuICAgIG11bmljaXBhbGl0eVR5cGU6XHJcbiAgICAgIHJlc3VsdC5mb3VuZGVyX3R5cGVfY29kZSA9PT0gY2l0eVR5cGVDb2RlXHJcbiAgICAgICAgPyBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcclxuICAgICAgICA6IE11bmljaXBhbGl0eVR5cGUuRGlzdHJpY3QsXHJcbiAgICBtdW5pY2lwYWxpdHlDb2RlOlxyXG4gICAgICByZXN1bHQuZm91bmRlcl90eXBlX2NvZGUgPT09IGNpdHlUeXBlQ29kZVxyXG4gICAgICAgID8gcmVzdWx0LmNpdHlfY29kZVxyXG4gICAgICAgIDogcmVzdWx0LmNpdHlfZGlzdHJpY3RfY29kZSxcclxuICAgIHNjaG9vbHM6IGF3YWl0IGdldFNjaG9vbHNCeUNpdHlDb2RlKHJlc3VsdC5jaXR5X2NvZGUsIHNjaG9vbFR5cGUpLFxyXG4gIH07XHJcbn07XHJcblxyXG4vLyBpbiBjYXNlIG9mIGNpdGllcywgbG9hZCBhbGwgc2Nob29scyBpbiB0aGUgY2l0eSwgbm90IGp1c3QgdGhlIG9uZXMgY29ubmVjdGVkIHRvIHRoZSBmb3VuZGVyXHJcbmNvbnN0IGdldFNjaG9vbHNCeUNpdHlDb2RlID0gYXN5bmMgKFxyXG4gIGNpdHlDb2RlOiBudW1iZXIsXHJcbiAgc2Nob29sVHlwZTogU2Nob29sVHlwZVxyXG4pOiBQcm9taXNlPFNjaG9vbFtdPiA9PiB7XHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXCJzLml6b1wiLCBcInMucmVkaXpvXCIsIFwicy5uYW1lXCIsIFwicy5jYXBhY2l0eVwiLCBcInNsLmFkZHJlc3NfcG9pbnRfaWRcIilcclxuICAgIC5mcm9tKFwic2Nob29sIGFzIHNcIilcclxuICAgIC5qb2luKFwic2Nob29sX2ZvdW5kZXIgYXMgc2ZcIiwgXCJzLml6b1wiLCBcInNmLnNjaG9vbF9pem9cIilcclxuICAgIC5qb2luKFwic2Nob29sX2xvY2F0aW9uIGFzIHNsXCIsIFwicy5pem9cIiwgXCJzbC5zY2hvb2xfaXpvXCIpXHJcbiAgICAuam9pbihcImZvdW5kZXIgYXMgZlwiLCBcInNmLmZvdW5kZXJfaWRcIiwgXCJmLmlkXCIpXHJcbiAgICAud2hlcmUoXCJmLmNpdHlfY29kZVwiLCBjaXR5Q29kZSlcclxuICAgIC53aGVyZShcInMudHlwZVwiLCBzY2hvb2xUeXBlKTtcclxuXHJcbiAgcmV0dXJuIHJlc3VsdC5tYXAoKHJvdykgPT4gKHtcclxuICAgIGl6bzogU3RyaW5nKHJvdy5pem8pLFxyXG4gICAgcmVkaXpvOiBTdHJpbmcocm93LnJlZGl6byksXHJcbiAgICBuYW1lOiBTdHJpbmcocm93Lm5hbWUpLFxyXG4gICAgY2FwYWNpdHk6IHBhcnNlSW50KHJvdy5jYXBhY2l0eSksXHJcbiAgICBsb2NhdGlvbnM6IFtcclxuICAgICAge1xyXG4gICAgICAgIGFkZHJlc3NQb2ludElkOiBwYXJzZUludChyb3cuYWRkcmVzc19wb2ludF9pZCksXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gICAgdHlwZTogc2Nob29sVHlwZSxcclxuICB9KSk7XHJcbn07XHJcblxyXG5jb25zdCBnZXRBbGxGb3VuZGVyTmFtZXMgPSBhc3luYyAoKTogUHJvbWlzZTxGb3VuZGVyTmFtZXNbXT4gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAuc2VsZWN0KFxyXG4gICAgICBcImYuaWRcIixcclxuICAgICAgXCJmLm5hbWUgYXMgZm91bmRlcl9uYW1lXCIsXHJcbiAgICAgIFwiYy5uYW1lIGFzIGNpdHlfbmFtZVwiLFxyXG4gICAgICBcImQubmFtZSBhcyBjaXR5X2Rpc3RyaWN0X25hbWVcIlxyXG4gICAgKVxyXG4gICAgLmZyb20oXCJmb3VuZGVyIGFzIGZcIilcclxuICAgIC5sZWZ0Sm9pbihcImNpdHkgYXMgY1wiLCBcImMuY29kZVwiLCBcImYuY2l0eV9jb2RlXCIpXHJcbiAgICAubGVmdEpvaW4oXCJjaXR5X2Rpc3RyaWN0IGFzIGRcIiwgXCJkLmNvZGVcIiwgXCJmLmNpdHlfZGlzdHJpY3RfY29kZVwiKTtcclxuICByZXR1cm4gcmVzdWx0Lm1hcCgocm93KSA9PiAoe1xyXG4gICAgaWQ6IHBhcnNlSW50KHJvdy5pZCksXHJcbiAgICBmb3VuZGVyTmFtZTogU3RyaW5nKHJvdy5mb3VuZGVyX25hbWUpLFxyXG4gICAgbXVuaWNpcGFsaXR5TmFtZTogU3RyaW5nKFxyXG4gICAgICByb3cuY2l0eV9uYW1lID8gcm93LmNpdHlfbmFtZSA6IHJvdy5jaXR5X2Rpc3RyaWN0X25hbWVcclxuICAgICksXHJcbiAgfSkpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbmRNdW5pY2lwYWxpdHlQYXJ0QnlOYW1lID0gYXN5bmMgKFxyXG4gIG5hbWU6IHN0cmluZyxcclxuICBjaXR5Q29kZTogbnVtYmVyXHJcbik6IFByb21pc2U8TXVuaWNpcGFsaXR5UGFydFJlc3VsdD4gPT4ge1xyXG4gIGNvbnN0IGVycm9yczogU21kRXJyb3JbXSA9IFtdO1xyXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAuZmlyc3QoXCJjb2RlXCIpXHJcbiAgICAuZnJvbShcIm11bmljaXBhbGl0eV9wYXJ0XCIpXHJcbiAgICAud2hlcmUoeyBuYW1lLCBjaXR5X2NvZGU6IGNpdHlDb2RlIH0pO1xyXG5cclxuICBpZiAocmVzdWx0KSB7XHJcbiAgICByZXR1cm4geyBtdW5pY2lwYWxpdHlQYXJ0Q29kZTogcmVzdWx0LmNvZGUsIGVycm9ycyB9O1xyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBhbGxOYW1lcyA9IGF3YWl0IGdldEFsbE11bmljaXBhbGl0eVBhcnROYW1lcyhjaXR5Q29kZSk7XHJcbiAgICBjb25zdCBuYW1lc0xpc3QgPSBhbGxOYW1lcy5tYXAoKHJvdykgPT4gcm93Lm5hbWUpO1xyXG4gICAgY29uc3QgYmVzdE1hdGNoID0gZmluZENsb3Nlc3RTdHJpbmcobmFtZSwgbmFtZXNMaXN0KTtcclxuXHJcbiAgICBlcnJvcnMucHVzaCh7XHJcbiAgICAgIG1lc3NhZ2U6IGBPYmVjIGFuaSBtxJtzdHNrw6EgxI3DoXN0ICcke25hbWV9JyBuZWV4aXN0dWplLCBteXNsZWxpIGpzdGUgJyR7YmVzdE1hdGNofSc/YCxcclxuICAgICAgc3RhcnRPZmZzZXQ6IDAsXHJcbiAgICAgIGVuZE9mZnNldDogMCxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIG11bmljaXBhbGl0eVBhcnRDb2RlOiBudWxsLFxyXG4gICAgICBlcnJvcnMsXHJcbiAgICB9O1xyXG4gIH1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBmaW5kTXVuaWNpcGFsaXR5QnlOYW1lQW5kVHlwZSA9IGFzeW5jIChcclxuICBuYW1lOiBzdHJpbmcsXHJcbiAgdHlwZTogTXVuaWNpcGFsaXR5VHlwZSxcclxuICBmb3VuZGVyOiBGb3VuZGVyXHJcbik6IFByb21pc2U8RGJNdW5pY2lwYWxpdHlSZXN1bHQ+ID0+IHtcclxuICBjb25zdCBlcnJvcnM6IFNtZEVycm9yW10gPSBbXTtcclxuXHJcbiAgY29uc3QgcmVzdWx0ID1cclxuICAgIHR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eVxyXG4gICAgICA/IGF3YWl0IGdldEtuZXhEYigpLnNlbGVjdChcImNvZGVcIikuZnJvbShcImNpdHlcIikud2hlcmUoXCJuYW1lXCIsIG5hbWUpXHJcbiAgICAgIDogYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgICAgIC5zZWxlY3QoXCJjb2RlXCIpXHJcbiAgICAgICAgICAuZnJvbShcImNpdHlfZGlzdHJpY3RcIilcclxuICAgICAgICAgIC53aGVyZShcIm5hbWVcIiwgbmFtZSlcclxuICAgICAgICAgIC5hbmRXaGVyZShcclxuICAgICAgICAgICAgXCJjaXR5X2NvZGVcIixcclxuICAgICAgICAgICAgYXdhaXQgZ2V0Rm91bmRlckNpdHlDb2RlKFxyXG4gICAgICAgICAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSxcclxuICAgICAgICAgICAgICBmb3VuZGVyLm11bmljaXBhbGl0eUNvZGVcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XHJcbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgY29uc3QgY2l0eUNvZGUgPSBhd2FpdCBnZXRGb3VuZGVyQ2l0eUNvZGUoXHJcbiAgICAgICAgZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlLFxyXG4gICAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBwb3NpdGlvbnMgPSBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgICAgIC5zZWxlY3QoXCJjaXR5X2NvZGVcIiwgXCJ3Z3M4NF9sYXRpdHVkZVwiLCBcIndnczg0X2xvbmdpdHVkZVwiKVxyXG4gICAgICAgIC5mcm9tKFwiYWRkcmVzc19wb2ludFwiKVxyXG4gICAgICAgIC5ncm91cEJ5KFwiY2l0eV9jb2RlXCIpXHJcbiAgICAgICAgLndoZXJlSW4oXHJcbiAgICAgICAgICBcImNpdHlfY29kZVwiLFxyXG4gICAgICAgICAgcmVzdWx0Lm1hcCgocm93KSA9PiByb3cuY29kZSlcclxuICAgICAgICApO1xyXG4gICAgICBjb25zdCBmb3VuZGVyUG9zaXRpb24gPSBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgICAgIC5maXJzdChcIndnczg0X2xhdGl0dWRlXCIsIFwid2dzODRfbG9uZ2l0dWRlXCIpXHJcbiAgICAgICAgLmZyb20oXCJhZGRyZXNzX3BvaW50XCIpXHJcbiAgICAgICAgLmdyb3VwQnkoXCJjaXR5X2NvZGVcIilcclxuICAgICAgICAud2hlcmUoXCJjaXR5X2NvZGVcIiwgY2l0eUNvZGUpO1xyXG4gICAgICBjb25zdCBjbG9zZXN0Q29kZSA9IGF3YWl0IGdldENsb3Nlc3RDb2RlKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvZGU6IGNpdHlDb2RlLFxyXG4gICAgICAgICAgbGF0OiBmb3VuZGVyUG9zaXRpb24ud2dzODRfbGF0aXR1ZGUsXHJcbiAgICAgICAgICBsbmc6IGZvdW5kZXJQb3NpdGlvbi53Z3M4NF9sb25naXR1ZGUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwb3NpdGlvbnMubWFwKChyb3cpID0+ICh7XHJcbiAgICAgICAgICBjb2RlOiByb3cuY2l0eV9jb2RlLFxyXG4gICAgICAgICAgbGF0OiByb3cud2dzODRfbGF0aXR1ZGUsXHJcbiAgICAgICAgICBsbmc6IHJvdy53Z3M4NF9sb25naXR1ZGUsXHJcbiAgICAgICAgfSkpXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiB7IG11bmljaXBhbGl0eTogeyBjb2RlOiBjbG9zZXN0Q29kZSwgdHlwZSB9LCBlcnJvcnMgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IG11bmljaXBhbGl0eTogeyBjb2RlOiByZXN1bHRbMF0uY29kZSwgdHlwZSB9LCBlcnJvcnMgfTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgYWxsTmFtZXMgPSBhd2FpdCBnZXRBbGxNdW5pY2lwYWxpdHlOYW1lcyh0eXBlKTtcclxuICAgIGNvbnN0IG5hbWVzTGlzdCA9IGFsbE5hbWVzLm1hcCgocm93KSA9PiByb3cubmFtZSk7XHJcbiAgICBjb25zdCBiZXN0TWF0Y2ggPSBmaW5kQ2xvc2VzdFN0cmluZyhuYW1lLCBuYW1lc0xpc3QpO1xyXG4gICAgY29uc3QgYmVzdE1hdGNoUm93ID0gYWxsTmFtZXMuZmluZChcclxuICAgICAgKG11bmljaXBhbGl0eSkgPT4gbXVuaWNpcGFsaXR5Lm5hbWUgPT09IGJlc3RNYXRjaFxyXG4gICAgKTtcclxuXHJcbiAgICBlcnJvcnMucHVzaCh7XHJcbiAgICAgIG1lc3NhZ2U6IGBPYmVjIGFuaSBtxJtzdHNrw6EgxI3DoXN0ICcke25hbWV9JyBuZWV4aXN0dWplLCBteXNsZWxpIGpzdGUgJyR7YmVzdE1hdGNofSc/YCxcclxuICAgICAgc3RhcnRPZmZzZXQ6IDAsXHJcbiAgICAgIGVuZE9mZnNldDogMCxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIG11bmljaXBhbGl0eTogeyBjb2RlOiBiZXN0TWF0Y2hSb3cuY29kZSwgdHlwZSB9LFxyXG4gICAgICBlcnJvcnMsXHJcbiAgICB9O1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGdldEFsbE11bmljaXBhbGl0eU5hbWVzID0gYXN5bmMgKFxyXG4gIHR5cGU6IE11bmljaXBhbGl0eVR5cGVcclxuKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgY29kZTogbnVtYmVyIH1bXT4gPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgICAuc2VsZWN0KFwibmFtZVwiLCBcImNvZGVcIilcclxuICAgICAgLmZyb20odHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5ID8gXCJjaXR5XCIgOiBcImNpdHlfZGlzdHJpY3RcIilcclxuICApLm1hcCgocm93KSA9PiAoe1xyXG4gICAgbmFtZTogcm93Lm5hbWUsXHJcbiAgICBjb2RlOiByb3cuY29kZSxcclxuICB9KSk7XHJcbn07XHJcblxyXG5jb25zdCBnZXRBbGxNdW5pY2lwYWxpdHlQYXJ0TmFtZXMgPSBhc3luYyAoXHJcbiAgY2l0eUNvZGU6IG51bWJlclxyXG4pOiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyBjb2RlOiBudW1iZXIgfVtdPiA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgIC5zZWxlY3QoXCJuYW1lXCIsIFwiY29kZVwiKVxyXG4gICAgICAuZnJvbShcIm11bmljaXBhbGl0eV9wYXJ0XCIpXHJcbiAgICAgIC53aGVyZShcImNpdHlfY29kZVwiLCBjaXR5Q29kZSlcclxuICApLm1hcCgocm93KSA9PiAoe1xyXG4gICAgbmFtZTogcm93Lm5hbWUsXHJcbiAgICBjb2RlOiByb3cuY29kZSxcclxuICB9KSk7XHJcbn07XHJcbiJdfQ==
461
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm91bmRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvZm91bmRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBTXhELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLHdCQUF3QixHQUN6QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUVMLGdCQUFnQixHQUtqQixNQUFNLFNBQVMsQ0FBQztBQUVqQixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFFakMsTUFBTSxzQ0FBc0MsR0FBRztJQUM3QyxXQUFXO0lBQ1gsV0FBVztJQUNYLFdBQVc7SUFDWCxXQUFXO0lBQ1gsV0FBVztJQUNYLFdBQVc7SUFDWCxXQUFXO0lBQ1gsV0FBVztDQUNaLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUFFLFFBQW1CLEVBQW1CLEVBQUU7SUFDM0UsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDekIsTUFBTSwyQkFBMkIsR0FBRyxFQUFFLENBQUM7SUFFdkMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7UUFDOUIsSUFDRSxPQUFPLENBQUMsZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtZQUNsRCxPQUFPLENBQUMsZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsUUFBUSxFQUN0RDtZQUNBLFNBQVM7U0FDVjtRQUNELE1BQU0seUJBQXlCLEdBQUcsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkUsd0ZBQXdGO1FBQ3hGLElBQUksZ0JBQWdC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LGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FDbkUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7UUFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7S0FDZixDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0sMkJBQTJCLEdBQUcsS0FBSyxFQUN2QyxRQUFnQixFQUMyQixFQUFFO0lBQzdDLE9BQU8sQ0FDTCxNQUFNLFNBQVMsRUFBRTtTQUNkLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO1NBQ3RCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztTQUN6QixLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUNoQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNkLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtLQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRpc3RhbmNlIGZyb20gXCJAdHVyZi9kaXN0YW5jZVwiO1xyXG5pbXBvcnQgeyB3aG9sZUxpbmVFcnJvciB9IGZyb20gXCIuLi9zdHJlZXQtbWFya2Rvd24vc21kXCI7XHJcbmltcG9ydCB7XHJcbiAgRGJNdW5pY2lwYWxpdHlSZXN1bHQsXHJcbiAgTXVuaWNpcGFsaXR5UGFydFJlc3VsdCxcclxuICBTbWRFcnJvcixcclxufSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3R5cGVzXCI7XHJcbmltcG9ydCB7XHJcbiAgZXh0cmFjdE11bmljaXBhbGl0eU5hbWUsXHJcbiAgZmluZENsb3Nlc3RTdHJpbmcsXHJcbiAgc2FuaXRpemVNdW5pY2lwYWxpdHlOYW1lLFxyXG59IGZyb20gXCIuLi91dGlscy9oZWxwZXJzXCI7XHJcbmltcG9ydCB7IGdldEtuZXhEYiwgaW5zZXJ0QXV0b2luY3JlbWVudFJvdywgaW5zZXJ0TXVsdGlwbGVSb3dzIH0gZnJvbSBcIi4vZGJcIjtcclxuaW1wb3J0IHtcclxuICBGb3VuZGVyLFxyXG4gIE11bmljaXBhbGl0eVR5cGUsXHJcbiAgTXVuaWNpcGFsaXR5V2l0aFBvc2l0aW9uLFxyXG4gIFBsYWNlV2l0aFBvc2l0aW9uLFxyXG4gIFNjaG9vbCxcclxuICBTY2hvb2xUeXBlLFxyXG59IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5jb25zdCBjaXR5VHlwZUNvZGUgPSAyNjE7XHJcbmNvbnN0IGNpdHlEaXN0cmljdFR5cGVDb2RlID0gMjYzO1xyXG5cclxuY29uc3Qgc2Nob29sc091dHNpZGVUaGVpckZvdW5kZXJNdW5pY2lwYWxpdHkgPSBbXHJcbiAgXCIxODEwNDIwOTZcIixcclxuICBcIjEwNzUxNjMwNlwiLFxyXG4gIFwiMTgxMTQ3MjQ2XCIsXHJcbiAgXCIxNTAwNzY5MjRcIixcclxuICBcIjEwNzU4Mzk5MlwiLFxyXG4gIFwiMTgxMDI0MTYxXCIsXHJcbiAgXCIxODEwNjQ1ODhcIixcclxuICBcIjEwNzYyOTA2MlwiLFxyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydEZvdW5kZXJzID0gYXN5bmMgKGZvdW5kZXJzOiBGb3VuZGVyW10pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIGxldCBpbnNlcnRlZEZvdW5kZXJzID0gMDtcclxuICBjb25zdCBzY2hvb2xGb3VuZGVyQ29ubmVjdGlvbkRhdGEgPSBbXTtcclxuXHJcbiAgZm9yIChjb25zdCBmb3VuZGVyIG9mIGZvdW5kZXJzKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSAhPT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5ICYmXHJcbiAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSAhPT0gTXVuaWNpcGFsaXR5VHlwZS5EaXN0cmljdFxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZSA9IGV4dHJhY3RNdW5pY2lwYWxpdHlOYW1lKGZvdW5kZXIpO1xyXG5cclxuICAgIC8vIGNoZWNrIGlmIHRoZSBleHRyYWN0ZWQgbXVuaWNpcGFsaXR5IG5hbWUgaXMgdGhlIHNhbWUgYXMgaW4gYWxsIHRoZSBzY2hvb2xzJyBsb2NhdGlvbnNcclxuICAgIGxldCBkaWZmZXJpbmdTY2hvb2xzID0gW107XHJcbiAgICBsZXQgbXVuaWNpcGFsaXR5Q29kZSA9IC0xO1xyXG5cclxuICAgIGZvciAoY29uc3Qgc2Nob29sIG9mIGZvdW5kZXIuc2Nob29scykge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcclxuICAgICAgICA/IGdldENpdHlPZlNjaG9vbChzY2hvb2wuaXpvKVxyXG4gICAgICAgIDogZ2V0RGlzdHJpY3RPZlNjaG9vbChzY2hvb2wuaXpvKSk7XHJcbiAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICBgaXpvOiAke3NjaG9vbC5pem99LCBleHRyYWN0ZWQ6ICR7ZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZX0sIFJVSUFOOiBVTkRFRklORURgXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkaWZmZXJpbmdTY2hvb2xzLnB1c2goc2Nob29sKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCB7IG5hbWUsIGNvZGUgfSA9IHJlc3VsdDtcclxuICAgICAgICBpZiAobmFtZSAhPT0gZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZSkge1xyXG4gICAgICAgICAgLy8gYWxzbyBmaWx0ZXIgb3V0IGtub3duIGV4Y2VwdGlvbnNcclxuICAgICAgICAgIGlmICghc2Nob29sc091dHNpZGVUaGVpckZvdW5kZXJNdW5pY2lwYWxpdHkuaW5jbHVkZXMoc2Nob29sLml6bykpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgYGl6bzogJHtzY2hvb2wuaXpvfSwgZXh0cmFjdGVkOiAke2V4dHJhY3RlZE11bmljaXBhbGl0eU5hbWV9LCBSVUlBTjogJHtuYW1lfWBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgZGlmZmVyaW5nU2Nob29scy5wdXNoKHNjaG9vbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0b3JlIG11bmljaXBhbGl0eUNvZGUgZXZlbiBpZiB0aGUgbmFtZXMgZG9uJ3QgbWF0Y2gsIHdlIHdpbGwgdXNlIGl0IGxhdGVyXHJcbiAgICAgICAgbXVuaWNpcGFsaXR5Q29kZSA9IHBhcnNlSW50KGNvZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbXVuaWNpcGFsaXR5Q29kZSA9IGF3YWl0IGZpeEZvdW5kZXJQcm9ibGVtcyhcclxuICAgICAgZm91bmRlcixcclxuICAgICAgbXVuaWNpcGFsaXR5Q29kZSxcclxuICAgICAgZGlmZmVyaW5nU2Nob29scyxcclxuICAgICAgZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjaXR5RGlzdHJpY3RDb2RlID1cclxuICAgICAgZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkRpc3RyaWN0XHJcbiAgICAgICAgPyBtdW5pY2lwYWxpdHlDb2RlLnRvU3RyaW5nKClcclxuICAgICAgICA6IG51bGw7XHJcbiAgICBsZXQgY2l0eUNvZGUgPSBudWxsO1xyXG4gICAgaWYgKGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5KSB7XHJcbiAgICAgIGNpdHlDb2RlID0gbXVuaWNpcGFsaXR5Q29kZT8udG9TdHJpbmcoKSA/PyBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2l0eUNvZGUgPSBhd2FpdCBnZXRDaXR5Q29kZUJ5RGlzdHJpY3RDb2RlKG11bmljaXBhbGl0eUNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgLnNlbGVjdChcIipcIilcclxuICAgICAgLmZyb20oXCJmb3VuZGVyXCIpXHJcbiAgICAgIC53aGVyZSh7XHJcbiAgICAgICAgbmFtZTogc2FuaXRpemVNdW5pY2lwYWxpdHlOYW1lKGZvdW5kZXIubmFtZSksXHJcbiAgICAgICAgaWNvOiBmb3VuZGVyLmljbyxcclxuICAgICAgfSk7XHJcblxyXG4gICAgbGV0IGZvdW5kZXJJZCA9IGV4aXN0aW5nWzBdPy5pZCA/PyBudWxsO1xyXG5cclxuICAgIGlmIChleGlzdGluZy5sZW5ndGggPT09IDApIHtcclxuICAgICAgZm91bmRlcklkID0gYXdhaXQgaW5zZXJ0QXV0b2luY3JlbWVudFJvdyhcclxuICAgICAgICBbXHJcbiAgICAgICAgICBzYW5pdGl6ZU11bmljaXBhbGl0eU5hbWUoZm91bmRlci5uYW1lKSxcclxuICAgICAgICAgIHNhbml0aXplTXVuaWNpcGFsaXR5TmFtZShleHRyYWN0ZWRNdW5pY2lwYWxpdHlOYW1lKSxcclxuICAgICAgICAgIGZvdW5kZXIuaWNvLFxyXG4gICAgICAgICAgU3RyaW5nKGZvdW5kZXIub3JpZ2luYWxUeXBlKSxcclxuICAgICAgICAgIGNpdHlDb2RlLFxyXG4gICAgICAgICAgY2l0eURpc3RyaWN0Q29kZSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIFwiZm91bmRlclwiLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIFwibmFtZVwiLFxyXG4gICAgICAgICAgXCJzaG9ydF9uYW1lXCIsXHJcbiAgICAgICAgICBcImljb1wiLFxyXG4gICAgICAgICAgXCJmb3VuZGVyX3R5cGVfY29kZVwiLFxyXG4gICAgICAgICAgXCJjaXR5X2NvZGVcIixcclxuICAgICAgICAgIFwiY2l0eV9kaXN0cmljdF9jb2RlXCIsXHJcbiAgICAgICAgXVxyXG4gICAgICApO1xyXG4gICAgICBpbnNlcnRlZEZvdW5kZXJzKys7XHJcbiAgICB9XHJcblxyXG4gICAgZm91bmRlci5zY2hvb2xzLmZvckVhY2goKHNjaG9vbCkgPT4ge1xyXG4gICAgICBzY2hvb2xGb3VuZGVyQ29ubmVjdGlvbkRhdGEucHVzaChbc2Nob29sLml6bywgZm91bmRlcklkXSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGluc2VydGVkQ29ubmVjdGlvbnMgPSBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXHJcbiAgICBzY2hvb2xGb3VuZGVyQ29ubmVjdGlvbkRhdGEsXHJcbiAgICBcInNjaG9vbF9mb3VuZGVyXCIsXHJcbiAgICBbXCJzY2hvb2xfaXpvXCIsIFwiZm91bmRlcl9pZFwiXSxcclxuICAgIHRydWVcclxuICApO1xyXG5cclxuICByZXR1cm4gaW5zZXJ0ZWRGb3VuZGVycyArIGluc2VydGVkQ29ubmVjdGlvbnM7XHJcbn07XHJcblxyXG5jb25zdCBnZXRDaXR5T2ZTY2hvb2wgPSBhc3luYyAoaXpvOiBzdHJpbmcpOiBQcm9taXNlPGFueT4gPT4ge1xyXG4gIHJldHVybiBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLnNlbGVjdChcImMubmFtZVwiLCBcImMuY29kZVwiKVxyXG4gICAgLmZyb20oXCJzY2hvb2wgYXMgc1wiKVxyXG4gICAgLmpvaW4oXCJzY2hvb2xfbG9jYXRpb24gYXMgbFwiLCBcInMuaXpvXCIsIFwibC5zY2hvb2xfaXpvXCIpXHJcbiAgICAuam9pbihcImFkZHJlc3NfcG9pbnQgYXMgYVwiLCBcImwuYWRkcmVzc19wb2ludF9pZFwiLCBcImEuaWRcIilcclxuICAgIC5qb2luKFwiY2l0eSBhcyBjXCIsIFwiYS5jaXR5X2NvZGVcIiwgXCJjLmNvZGVcIilcclxuICAgIC53aGVyZShcInMuaXpvXCIsIGl6bylcclxuICAgIC5saW1pdCgxKVxyXG4gICAgLmZpcnN0KCk7XHJcbn07XHJcblxyXG5jb25zdCBnZXREaXN0cmljdE9mU2Nob29sID0gYXN5bmMgKGl6bzogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICByZXR1cm4gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXCJkLm5hbWVcIiwgXCJkLmNvZGVcIilcclxuICAgIC5mcm9tKFwic2Nob29sIGFzIHNcIilcclxuICAgIC5qb2luKFwic2Nob29sX2xvY2F0aW9uIGFzIGxcIiwgXCJzLml6b1wiLCBcImwuc2Nob29sX2l6b1wiKVxyXG4gICAgLmpvaW4oXCJhZGRyZXNzX3BvaW50IGFzIGFcIiwgXCJsLmFkZHJlc3NfcG9pbnRfaWRcIiwgXCJhLmlkXCIpXHJcbiAgICAuam9pbihcImNpdHlfZGlzdHJpY3QgYXMgZFwiLCBcImEuY2l0eV9kaXN0cmljdF9jb2RlXCIsIFwiZC5jb2RlXCIpXHJcbiAgICAud2hlcmUoXCJzLml6b1wiLCBpem8pXHJcbiAgICAubGltaXQoMSlcclxuICAgIC5maXJzdCgpO1xyXG59O1xyXG5cclxuY29uc3QgZml4Rm91bmRlclByb2JsZW1zID0gYXN5bmMgKFxyXG4gIGZvdW5kZXI6IEZvdW5kZXIsXHJcbiAgbXVuaWNpcGFsaXR5Q29kZTogbnVtYmVyLFxyXG4gIGRpZmZlcmluZ1NjaG9vbHM6IFNjaG9vbFtdLFxyXG4gIGV4dHJhY3RlZE11bmljaXBhbGl0eU5hbWU6IHN0cmluZ1xyXG4pOiBQcm9taXNlPG51bWJlciB8IG51bGw+ID0+IHtcclxuICBpZiAoXHJcbiAgICBkaWZmZXJpbmdTY2hvb2xzLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgZGlmZmVyaW5nU2Nob29scy5sZW5ndGggPCBmb3VuZGVyLnNjaG9vbHMubGVuZ3RoXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gbXVuaWNpcGFsaXR5Q29kZTtcclxuICB9XHJcblxyXG4gIC8vIGVpdGhlciB0aGUgc2Nob29sIGRvZXMgbm90IGhhdmUgYSBwb3NpdGlvbiAoaW52YWxpZCBSVUlBTiBvciBtaXNzaW5nIGJ1aWxkaW5nKVxyXG4gIC8vIG9yIHRoZSBzY2hvb2wgaXMgbm90IGluIHRoZSBzYW1lIG11bmljaXBhbGl0eSBhcyB0aGUgZm91bmRlclxyXG5cclxuICAvLyBmaW5kIGFsbCBjaXRpZXMgYW5kIHRoZWlyIHBvc2l0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBtdW5pY2lwYWxpdHlOYW1lXHJcbiAgY29uc3QgbXVuaWNpcGFsaXRpZXMgPSBhd2FpdCBmaW5kTXVuaWNpcGFsaXRpZXNBbmRQb3NpdGlvbnNCeU5hbWVBbmRUeXBlKFxyXG4gICAgZXh0cmFjdGVkTXVuaWNpcGFsaXR5TmFtZSxcclxuICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZVxyXG4gICk7XHJcblxyXG4gIC8vIGdldCBvbmUgc2Nob29sIHBvc2l0aW9uIChpZiB0aGVyZSBhcmUgbW9yZSBzY2hvb2xzLCB0aGV5IHNob3VsZCBiZSBjbG9zZSB0byBlYWNoIG90aGVyKVxyXG4gIGNvbnN0IHNjaG9vbFBvc2l0aW9uOlxyXG4gICAgfCB7IHdnczg0X2xhdGl0dWRlOiBudW1iZXI7IHdnczg0X2xvbmdpdHVkZTogbnVtYmVyIH1cclxuICAgIHwgdW5kZWZpbmVkID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXCJhZGRyZXNzX3BvaW50Lndnczg0X2xhdGl0dWRlXCIsIFwiYWRkcmVzc19wb2ludC53Z3M4NF9sb25naXR1ZGVcIilcclxuICAgIC5mcm9tKFwic2Nob29sXCIpXHJcbiAgICAuam9pbihcInNjaG9vbF9sb2NhdGlvblwiLCBcInNjaG9vbC5pem9cIiwgXCJzY2hvb2xfbG9jYXRpb24uc2Nob29sX2l6b1wiKVxyXG4gICAgLmpvaW4oXHJcbiAgICAgIFwiYWRkcmVzc19wb2ludFwiLFxyXG4gICAgICBcInNjaG9vbF9sb2NhdGlvbi5hZGRyZXNzX3BvaW50X2lkXCIsXHJcbiAgICAgIFwiYWRkcmVzc19wb2ludC5pZFwiXHJcbiAgICApXHJcbiAgICAud2hlcmVJbihcclxuICAgICAgXCJzY2hvb2wuaXpvXCIsXHJcbiAgICAgIGRpZmZlcmluZ1NjaG9vbHMubWFwKChzY2hvb2wpID0+IHNjaG9vbC5pem8pXHJcbiAgICApXHJcbiAgICAubGltaXQoMSlcclxuICAgIC5maXJzdCgpO1xyXG5cclxuICBpZiAoc2Nob29sUG9zaXRpb24pIHtcclxuICAgIGlmIChtdW5pY2lwYWxpdGllcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgaWYgKG11bmljaXBhbGl0eUNvZGUgPT09IC0xKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICBgbm8gbXVuaWNpcGFsaXR5IGJ5IG5hbWUgb3IgYnkgbG9jYXRpb24gZm91bmQgZm9yICR7Zm91bmRlci5uYW1lfWBcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgXCJubyBtdW5pY2lwYWxpdHkgbWF0Y2hpbmcgdGhlIGV4dHJhY3RlZCBuYW1lLCB1c2luZyB0aGUgbXVuaWNpcGFsaXR5IGZyb20gUlVJQU4gY29kZVwiXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChtdW5pY2lwYWxpdGllcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgXCJ1c2luZyB0aGUgb25seSBtdW5pY2lwYWxpdHkgZm91bmQgbWF0Y2hpbmcgdGhlIGV4dHJhY3RlZCBuYW1lXCJcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIG11bmljaXBhbGl0aWVzWzBdLmNvZGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZyhcInVzaW5nIHRoZSBjbG9zZXN0IG11bmljaXBhbGl0eSBtYXRjaGluZyB0aGUgZXh0cmFjdGVkIG5hbWVcIik7XHJcbiAgICAgIHJldHVybiBnZXRDbG9zZXN0Q29kZShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb2RlOiAxLFxyXG4gICAgICAgICAgbGF0OiBzY2hvb2xQb3NpdGlvbi53Z3M4NF9sYXRpdHVkZSxcclxuICAgICAgICAgIGxuZzogc2Nob29sUG9zaXRpb24ud2dzODRfbG9uZ2l0dWRlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbXVuaWNpcGFsaXRpZXMubWFwKChtdW5pY2lwYWxpdHkpID0+ICh7XHJcbiAgICAgICAgICBjb2RlOiBtdW5pY2lwYWxpdHkuY29kZSxcclxuICAgICAgICAgIGxhdDogbXVuaWNpcGFsaXR5LmxhdCxcclxuICAgICAgICAgIGxuZzogbXVuaWNpcGFsaXR5LmxuZyxcclxuICAgICAgICB9KSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKG11bmljaXBhbGl0aWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKG11bmljaXBhbGl0aWVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgIGB1c2luZyB0aGUgZmlyc3QgbXVuaWNpcGFsaXR5IG1hdGNoaW5nIHRoZSBleHRyYWN0ZWQgbmFtZSAoJHttdW5pY2lwYWxpdGllcy5sZW5ndGh9IG1hdGNoZXMpIC0gcG9zc2libHkgaW5jb3JyZWN0IWBcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgXCJ1c2luZyB0aGUgb25seSBtdW5pY2lwYWxpdHkgZm91bmQgbWF0Y2hpbmcgdGhlIGV4dHJhY3RlZCBuYW1lXCJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBtdW5pY2lwYWxpdGllc1swXS5jb2RlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgYG5vIG11bmljaXBhbGl0eSBieSBuYW1lIG9yIGJ5IGxvY2F0aW9uIGZvdW5kIGZvciAke2ZvdW5kZXIubmFtZX1gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGdldENsb3Nlc3RDb2RlID0gYXN5bmMgKFxyXG4gIGZyb206IFBsYWNlV2l0aFBvc2l0aW9uLFxyXG4gIHRvTGlzdDogUGxhY2VXaXRoUG9zaXRpb25bXVxyXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIGxldCBsb3dlc3REaXN0YW5jZSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG4gIGxldCBjb2RlOiBudW1iZXIgPSBudWxsO1xyXG4gIGZvciAoY29uc3QgcGxhY2Ugb2YgdG9MaXN0KSB7XHJcbiAgICBsZXQgbXVuaWNpcGFsaXR5RGlzdGFuY2UgPSBkaXN0YW5jZShcclxuICAgICAgW3BsYWNlLmxhdCwgcGxhY2UubG5nXSxcclxuICAgICAgW2Zyb20ubGF0LCBmcm9tLmxuZ11cclxuICAgICk7XHJcbiAgICBpZiAobXVuaWNpcGFsaXR5RGlzdGFuY2UgPCBsb3dlc3REaXN0YW5jZSkge1xyXG4gICAgICBsb3dlc3REaXN0YW5jZSA9IG11bmljaXBhbGl0eURpc3RhbmNlO1xyXG4gICAgICBjb2RlID0gcGxhY2UuY29kZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGNvZGU7XHJcbn07XHJcblxyXG5jb25zdCBnZXRDaXR5Q29kZUJ5RGlzdHJpY3RDb2RlID0gYXN5bmMgKFxyXG4gIGRpc3RyaWN0Q29kZTogbnVtYmVyXHJcbik6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAuZmlyc3QoXCJjaXR5LmNvZGVcIilcclxuICAgIC5mcm9tKFwiY2l0eV9kaXN0cmljdFwiKVxyXG4gICAgLmpvaW4oXCJjaXR5XCIsIFwiY2l0eV9kaXN0cmljdC5jaXR5X2NvZGVcIiwgXCJjaXR5LmNvZGVcIilcclxuICAgIC53aGVyZShcImNpdHlfZGlzdHJpY3QuY29kZVwiLCBkaXN0cmljdENvZGUpXHJcbiAgICAubGltaXQoMSk7XHJcbiAgcmV0dXJuIHJlc3VsdD8uY29kZSA/PyBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgZmluZE11bmljaXBhbGl0aWVzQW5kUG9zaXRpb25zQnlOYW1lQW5kVHlwZSA9IGFzeW5jIChcclxuICBuYW1lOiBzdHJpbmcsXHJcbiAgdHlwZTogTXVuaWNpcGFsaXR5VHlwZVxyXG4pOiBQcm9taXNlPE11bmljaXBhbGl0eVdpdGhQb3NpdGlvbltdPiA9PiB7XHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xyXG4gIHJldHVybiAoXHJcbiAgICB0eXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcclxuICAgICAgPyBhd2FpdCBrbmV4XHJcbiAgICAgICAgICAuc2VsZWN0KFxyXG4gICAgICAgICAgICBcImNpdHkubmFtZVwiLFxyXG4gICAgICAgICAgICBcImNpdHkuY29kZVwiLFxyXG4gICAgICAgICAgICBcImFkZHJlc3NfcG9pbnQud2dzODRfbGF0aXR1ZGVcIixcclxuICAgICAgICAgICAgXCJhZGRyZXNzX3BvaW50Lndnczg0X2xvbmdpdHVkZVwiXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuZnJvbShcImNpdHlcIilcclxuICAgICAgICAgIC5qb2luKFwiYWRkcmVzc19wb2ludFwiLCBcImNpdHkuY29kZVwiLCBcImFkZHJlc3NfcG9pbnQuY2l0eV9jb2RlXCIpXHJcbiAgICAgICAgICAud2hlcmUoXCJjaXR5Lm5hbWVcIiwgbmFtZSlcclxuICAgICAgICAgIC5ncm91cEJ5KFwiY2l0eS5jb2RlXCIpXHJcbiAgICAgIDogYXdhaXQga25leFxyXG4gICAgICAgICAgLnNlbGVjdChcclxuICAgICAgICAgICAgXCJjaXR5X2Rpc3RyaWN0Lm5hbWVcIixcclxuICAgICAgICAgICAgXCJjaXR5X2Rpc3RyaWN0LmNvZGVcIixcclxuICAgICAgICAgICAgXCJhZGRyZXNzX3BvaW50Lndnczg0X2xhdGl0dWRlXCIsXHJcbiAgICAgICAgICAgIFwiYWRkcmVzc19wb2ludC53Z3M4NF9sb25naXR1ZGVcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLmZyb20oXCJjaXR5X2Rpc3RyaWN0XCIpXHJcbiAgICAgICAgICAuam9pbihcclxuICAgICAgICAgICAgXCJhZGRyZXNzX3BvaW50XCIsXHJcbiAgICAgICAgICAgIFwiY2l0eV9kaXN0cmljdC5jb2RlXCIsXHJcbiAgICAgICAgICAgIFwiYWRkcmVzc19wb2ludC5jaXR5X2Rpc3RyaWN0X2NvZGVcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLndoZXJlKFwiY2l0eV9kaXN0cmljdC5uYW1lXCIsIG5hbWUpXHJcbiAgICAgICAgICAuZ3JvdXBCeShcImNpdHlfZGlzdHJpY3QuY29kZVwiKVxyXG4gICkubWFwKChyb3cpID0+ICh7XHJcbiAgICBjb2RlOiByb3cuY29kZSxcclxuICAgIHR5cGUsXHJcbiAgICBsYXQ6IHJvdy53Z3M4NF9sYXRpdHVkZSxcclxuICAgIGxuZzogcm93Lndnczg0X2xvbmdpdHVkZSxcclxuICB9KSk7XHJcbn07XHJcblxyXG5jb25zdCBleHRyYWN0Rm91bmRlck5hbWUgPSAobGluZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBpZiAobGluZVswXSA9PT0gXCIjXCIpIHtcclxuICAgIHJldHVybiBsaW5lLnN1YnN0cmluZygxKS50cmltKCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBsaW5lLnRyaW0oKTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBnZXRCYXNlRm91bmRlclF1ZXJ5ID0gKCkgPT4ge1xyXG4gIHJldHVybiBnZXRLbmV4RGIoKVxyXG4gICAgLnNlbGVjdChcclxuICAgICAgXCJmLmlkXCIsXHJcbiAgICAgIFwiZi5uYW1lXCIsXHJcbiAgICAgIFwiZi5pY29cIixcclxuICAgICAgXCJmLmZvdW5kZXJfdHlwZV9jb2RlXCIsXHJcbiAgICAgIFwiZi5jaXR5X2NvZGVcIixcclxuICAgICAgXCJmLmNpdHlfZGlzdHJpY3RfY29kZVwiXHJcbiAgICApXHJcbiAgICAuZnJvbShcImZvdW5kZXIgYXMgZlwiKVxyXG4gICAgLmxlZnRKb2luKFwiY2l0eSBhcyBjXCIsIFwiYy5jb2RlXCIsIFwiZi5jaXR5X2NvZGVcIilcclxuICAgIC5sZWZ0Sm9pbihcImNpdHlfZGlzdHJpY3QgYXMgZFwiLCBcImQuY29kZVwiLCBcImYuY2l0eV9kaXN0cmljdF9jb2RlXCIpXHJcbiAgICAub3JkZXJCeShcImYuZm91bmRlcl90eXBlX2NvZGVcIik7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0Rm91bmRlckJ5SWQgPSBhc3luYyAoXHJcbiAgaWQ6IG51bWJlcixcclxuICBzY2hvb2xUeXBlOiBTY2hvb2xUeXBlXHJcbik6IFByb21pc2U8eyBmb3VuZGVyOiBGb3VuZGVyOyBlcnJvcnM6IFNtZEVycm9yW10gfT4gPT4ge1xyXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEJhc2VGb3VuZGVyUXVlcnkoKS53aGVyZShcImYuaWRcIiwgaWQpLmZpcnN0KCk7XHJcbiAgY29uc3QgZm91bmRlciA9IGF3YWl0IHJlc3VsdFRvRm91bmRlcihyZXN1bHQsIHNjaG9vbFR5cGUpO1xyXG4gIHJldHVybiB7XHJcbiAgICBmb3VuZGVyOiBmb3VuZGVyID8/IG51bGwsXHJcbiAgICBlcnJvcnM6IGZvdW5kZXJcclxuICAgICAgPyBbXVxyXG4gICAgICA6IFt3aG9sZUxpbmVFcnJvcihgWsWZaXpvdmF0ZWwgcyBpZCAke2lkfSBuZWV4aXN0dWplLmAsIFwiXCIpXSxcclxuICB9O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbmRGb3VuZGVyID0gYXN5bmMgKFxyXG4gIG5hbWVXaXRoSGFzaHRhZzogc3RyaW5nLFxyXG4gIHNjaG9vbFR5cGU6IFNjaG9vbFR5cGVcclxuKTogUHJvbWlzZTx7IGZvdW5kZXI6IEZvdW5kZXI7IGVycm9yczogU21kRXJyb3JbXSB9PiA9PiB7XHJcbiAgY29uc3QgZXJyb3JzOiBTbWRFcnJvcltdID0gW107XHJcblxyXG4gIC8vIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBzZWFyY2ggZm9yIGEgY2l0eSBpbnN0ZWFkIG9mIGEgZm91bmRlclxyXG4gIGlmIChuYW1lV2l0aEhhc2h0YWdbMV0gPT09IFwiI1wiKSB7XHJcbiAgICBjb25zdCBjaXR5TmFtZSA9IG5hbWVXaXRoSGFzaHRhZy5zdWJzdHJpbmcoMikudHJpbSgpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgLnNlbGVjdChcImNvZGVcIilcclxuICAgICAgLmZyb20oXCJjaXR5XCIpXHJcbiAgICAgIC53aGVyZShcIm5hbWVcIiwgY2l0eU5hbWUpXHJcbiAgICAgIC5maXJzdCgpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZvdW5kZXI6IHtcclxuICAgICAgICBuYW1lOiBjaXR5TmFtZSxcclxuICAgICAgICBpY286IFwiMDAwMDAwMDBcIixcclxuICAgICAgICBvcmlnaW5hbFR5cGU6IGNpdHlUeXBlQ29kZSxcclxuICAgICAgICBtdW5pY2lwYWxpdHlUeXBlOiBNdW5pY2lwYWxpdHlUeXBlLkNpdHksXHJcbiAgICAgICAgbXVuaWNpcGFsaXR5Q29kZTogcmVzdWx0LmNvZGUsXHJcbiAgICAgICAgc2Nob29sczogYXdhaXQgZ2V0U2Nob29sc0J5Q2l0eUNvZGUocmVzdWx0LmNvZGUsIHNjaG9vbFR5cGUpLFxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcnMsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29uc3QgbmFtZSA9IGV4dHJhY3RGb3VuZGVyTmFtZShuYW1lV2l0aEhhc2h0YWcpO1xyXG5cclxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRCYXNlRm91bmRlclF1ZXJ5KClcclxuICAgIC53aGVyZShcImYubmFtZVwiLCBuYW1lKVxyXG4gICAgLm9yV2hlcmUoXCJjLm5hbWVcIiwgbmFtZSlcclxuICAgIC5vcldoZXJlKFwiZC5uYW1lXCIsIG5hbWUpXHJcbiAgICAuZmlyc3QoKTtcclxuICBpZiAocmVzdWx0KSB7XHJcbiAgICByZXR1cm4geyBmb3VuZGVyOiBhd2FpdCByZXN1bHRUb0ZvdW5kZXIocmVzdWx0LCBzY2hvb2xUeXBlKSwgZXJyb3JzIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnN0IGFsbEZvdW5kZXJOYW1lcyA9IGF3YWl0IGdldEFsbEZvdW5kZXJOYW1lcygpO1xyXG4gICAgY29uc3QgbmFtZXNMaXN0ID0gYWxsRm91bmRlck5hbWVzXHJcbiAgICAgIC5tYXAoKHJvdykgPT4gcm93LmZvdW5kZXJOYW1lKVxyXG4gICAgICAuY29uY2F0KGFsbEZvdW5kZXJOYW1lcy5tYXAoKHJvdykgPT4gcm93Lm11bmljaXBhbGl0eU5hbWUpKTtcclxuICAgIGNvbnN0IGJlc3RNYXRjaCA9IGZpbmRDbG9zZXN0U3RyaW5nKG5hbWUsIG5hbWVzTGlzdCk7XHJcbiAgICBjb25zdCBiZXN0TWF0Y2hSb3cgPSBhbGxGb3VuZGVyTmFtZXMuZmluZChcclxuICAgICAgKGZvdW5kZXJzTmFtZXMpID0+XHJcbiAgICAgICAgZm91bmRlcnNOYW1lcy5mb3VuZGVyTmFtZSA9PT0gYmVzdE1hdGNoIHx8XHJcbiAgICAgICAgZm91bmRlcnNOYW1lcy5tdW5pY2lwYWxpdHlOYW1lID09PSBiZXN0TWF0Y2hcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFiZXN0TWF0Y2hSb3cpIHtcclxuICAgICAgZXJyb3JzLnB1c2goXHJcbiAgICAgICAgd2hvbGVMaW5lRXJyb3IoXHJcbiAgICAgICAgICBgTmVuYcWhbGkganNtZSDFvsOhZG7DqSB6xZlpem92YXRlbGUsIG5lanNww63FoSBqc3RlIHphcG9tbsSbbGkgaW5pY2lhbGl6b3ZhdCBkYXRhYsOhemkuYCxcclxuICAgICAgICAgIG5hbWVXaXRoSGFzaHRhZ1xyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBmb3VuZGVyOiBudWxsLFxyXG4gICAgICAgIGVycm9ycyxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBlcnJvcnMucHVzaChcclxuICAgICAgd2hvbGVMaW5lRXJyb3IoXHJcbiAgICAgICAgYFrFmWl6b3ZhdGVsICcke25hbWV9JyBuZWV4aXN0dWplLCBteXNsZWxpIGpzdGUgJyR7YmVzdE1hdGNofSc/YCxcclxuICAgICAgICBuYW1lV2l0aEhhc2h0YWdcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBmb3VuZGVyID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgLnNlbGVjdChcclxuICAgICAgICBcImlkXCIsXHJcbiAgICAgICAgXCJuYW1lXCIsXHJcbiAgICAgICAgXCJpY29cIixcclxuICAgICAgICBcImZvdW5kZXJfdHlwZV9jb2RlXCIsXHJcbiAgICAgICAgXCJjaXR5X2NvZGVcIixcclxuICAgICAgICBcImNpdHlfZGlzdHJpY3RfY29kZVwiXHJcbiAgICAgIClcclxuICAgICAgLmZyb20oXCJmb3VuZGVyXCIpXHJcbiAgICAgIC53aGVyZShcImlkXCIsIGJlc3RNYXRjaFJvdy5pZClcclxuICAgICAgLmZpcnN0KCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb3VuZGVyOiBhd2FpdCByZXN1bHRUb0ZvdW5kZXIoZm91bmRlciwgc2Nob29sVHlwZSksXHJcbiAgICAgIGVycm9ycyxcclxuICAgIH07XHJcbiAgfVxyXG59O1xyXG5cclxubGV0IGNhY2hlZENpdHlDb2RlOiBudW1iZXIgPSBudWxsO1xyXG5sZXQgbGFzdENvZGU6IG51bWJlciA9IG51bGw7XHJcbmV4cG9ydCBjb25zdCBnZXRGb3VuZGVyQ2l0eUNvZGUgPSBhc3luYyAoXHJcbiAgdHlwZTogTXVuaWNpcGFsaXR5VHlwZSxcclxuICBjb2RlOiBudW1iZXJcclxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICBpZiAodHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5EaXN0cmljdCkge1xyXG4gICAgaWYgKGxhc3RDb2RlICE9PSBjb2RlKSB7XHJcbiAgICAgIGxhc3RDb2RlID0gY29kZTtcclxuICAgICAgY2FjaGVkQ2l0eUNvZGUgPSAoXHJcbiAgICAgICAgYXdhaXQgZ2V0S25leERiKCkuZnJvbShcImNpdHlfZGlzdHJpY3RcIikud2hlcmUoXCJjb2RlXCIsIGNvZGUpLmZpcnN0KClcclxuICAgICAgKS5jaXR5X2NvZGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FjaGVkQ2l0eUNvZGU7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBjb2RlO1xyXG4gIH1cclxufTtcclxuXHJcbmludGVyZmFjZSBGb3VuZGVyTmFtZXMge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgZm91bmRlck5hbWU6IHN0cmluZztcclxuICBtdW5pY2lwYWxpdHlOYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmNvbnN0IHJlc3VsdFRvRm91bmRlciA9IGFzeW5jIChcclxuICByZXN1bHQ6IGFueSxcclxuICBzY2hvb2xUeXBlOiBTY2hvb2xUeXBlXHJcbik6IFByb21pc2U8Rm91bmRlcj4gPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICBuYW1lOiByZXN1bHQubmFtZSxcclxuICAgIGljbzogcmVzdWx0LmljbyxcclxuICAgIG9yaWdpbmFsVHlwZTogcmVzdWx0LmZvdW5kZXJfdHlwZV9jb2RlLFxyXG4gICAgbXVuaWNpcGFsaXR5VHlwZTpcclxuICAgICAgcmVzdWx0LmZvdW5kZXJfdHlwZV9jb2RlID09PSBjaXR5VHlwZUNvZGVcclxuICAgICAgICA/IE11bmljaXBhbGl0eVR5cGUuQ2l0eVxyXG4gICAgICAgIDogTXVuaWNpcGFsaXR5VHlwZS5EaXN0cmljdCxcclxuICAgIG11bmljaXBhbGl0eUNvZGU6XHJcbiAgICAgIHJlc3VsdC5mb3VuZGVyX3R5cGVfY29kZSA9PT0gY2l0eVR5cGVDb2RlXHJcbiAgICAgICAgPyByZXN1bHQuY2l0eV9jb2RlXHJcbiAgICAgICAgOiByZXN1bHQuY2l0eV9kaXN0cmljdF9jb2RlLFxyXG4gICAgc2Nob29sczogYXdhaXQgZ2V0U2Nob29sc0J5Q2l0eUNvZGUocmVzdWx0LmNpdHlfY29kZSwgc2Nob29sVHlwZSksXHJcbiAgfTtcclxufTtcclxuXHJcbi8vIGluIGNhc2Ugb2YgY2l0aWVzLCBsb2FkIGFsbCBzY2hvb2xzIGluIHRoZSBjaXR5LCBub3QganVzdCB0aGUgb25lcyBjb25uZWN0ZWQgdG8gdGhlIGZvdW5kZXJcclxuY29uc3QgZ2V0U2Nob29sc0J5Q2l0eUNvZGUgPSBhc3luYyAoXHJcbiAgY2l0eUNvZGU6IG51bWJlcixcclxuICBzY2hvb2xUeXBlOiBTY2hvb2xUeXBlXHJcbik6IFByb21pc2U8U2Nob29sW10+ID0+IHtcclxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLnNlbGVjdChcInMuaXpvXCIsIFwicy5yZWRpem9cIiwgXCJzLm5hbWVcIiwgXCJzLmNhcGFjaXR5XCIsIFwic2wuYWRkcmVzc19wb2ludF9pZFwiKVxyXG4gICAgLmZyb20oXCJzY2hvb2wgYXMgc1wiKVxyXG4gICAgLmpvaW4oXCJzY2hvb2xfZm91bmRlciBhcyBzZlwiLCBcInMuaXpvXCIsIFwic2Yuc2Nob29sX2l6b1wiKVxyXG4gICAgLmpvaW4oXCJzY2hvb2xfbG9jYXRpb24gYXMgc2xcIiwgXCJzLml6b1wiLCBcInNsLnNjaG9vbF9pem9cIilcclxuICAgIC5qb2luKFwiZm91bmRlciBhcyBmXCIsIFwic2YuZm91bmRlcl9pZFwiLCBcImYuaWRcIilcclxuICAgIC53aGVyZShcImYuY2l0eV9jb2RlXCIsIGNpdHlDb2RlKVxyXG4gICAgLndoZXJlKFwicy50eXBlXCIsIHNjaG9vbFR5cGUpO1xyXG5cclxuICByZXR1cm4gcmVzdWx0Lm1hcCgocm93KSA9PiAoe1xyXG4gICAgaXpvOiBTdHJpbmcocm93Lml6byksXHJcbiAgICByZWRpem86IFN0cmluZyhyb3cucmVkaXpvKSxcclxuICAgIG5hbWU6IFN0cmluZyhyb3cubmFtZSksXHJcbiAgICBjYXBhY2l0eTogcGFyc2VJbnQocm93LmNhcGFjaXR5KSxcclxuICAgIGxvY2F0aW9uczogW1xyXG4gICAgICB7XHJcbiAgICAgICAgYWRkcmVzc1BvaW50SWQ6IHBhcnNlSW50KHJvdy5hZGRyZXNzX3BvaW50X2lkKSxcclxuICAgICAgfSxcclxuICAgIF0sXHJcbiAgICB0eXBlOiBzY2hvb2xUeXBlLFxyXG4gIH0pKTtcclxufTtcclxuXHJcbmNvbnN0IGdldEFsbEZvdW5kZXJOYW1lcyA9IGFzeW5jICgpOiBQcm9taXNlPEZvdW5kZXJOYW1lc1tdPiA9PiB7XHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5zZWxlY3QoXHJcbiAgICAgIFwiZi5pZFwiLFxyXG4gICAgICBcImYubmFtZSBhcyBmb3VuZGVyX25hbWVcIixcclxuICAgICAgXCJjLm5hbWUgYXMgY2l0eV9uYW1lXCIsXHJcbiAgICAgIFwiZC5uYW1lIGFzIGNpdHlfZGlzdHJpY3RfbmFtZVwiXHJcbiAgICApXHJcbiAgICAuZnJvbShcImZvdW5kZXIgYXMgZlwiKVxyXG4gICAgLmxlZnRKb2luKFwiY2l0eSBhcyBjXCIsIFwiYy5jb2RlXCIsIFwiZi5jaXR5X2NvZGVcIilcclxuICAgIC5sZWZ0Sm9pbihcImNpdHlfZGlzdHJpY3QgYXMgZFwiLCBcImQuY29kZVwiLCBcImYuY2l0eV9kaXN0cmljdF9jb2RlXCIpO1xyXG4gIHJldHVybiByZXN1bHQubWFwKChyb3cpID0+ICh7XHJcbiAgICBpZDogcGFyc2VJbnQocm93LmlkKSxcclxuICAgIGZvdW5kZXJOYW1lOiBTdHJpbmcocm93LmZvdW5kZXJfbmFtZSksXHJcbiAgICBtdW5pY2lwYWxpdHlOYW1lOiBTdHJpbmcoXHJcbiAgICAgIHJvdy5jaXR5X25hbWUgPyByb3cuY2l0eV9uYW1lIDogcm93LmNpdHlfZGlzdHJpY3RfbmFtZVxyXG4gICAgKSxcclxuICB9KSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZmluZE11bmljaXBhbGl0eVBhcnRCeU5hbWUgPSBhc3luYyAoXHJcbiAgbmFtZTogc3RyaW5nLFxyXG4gIGNpdHlDb2RlOiBudW1iZXJcclxuKTogUHJvbWlzZTxNdW5pY2lwYWxpdHlQYXJ0UmVzdWx0PiA9PiB7XHJcbiAgY29uc3QgZXJyb3JzOiBTbWRFcnJvcltdID0gW107XHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0S25leERiKClcclxuICAgIC5maXJzdChcImNvZGVcIilcclxuICAgIC5mcm9tKFwibXVuaWNpcGFsaXR5X3BhcnRcIilcclxuICAgIC53aGVyZSh7IG5hbWUsIGNpdHlfY29kZTogY2l0eUNvZGUgfSk7XHJcblxyXG4gIGlmIChyZXN1bHQpIHtcclxuICAgIHJldHVybiB7IG11bmljaXBhbGl0eVBhcnRDb2RlOiByZXN1bHQuY29kZSwgZXJyb3JzIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnN0IGFsbE5hbWVzID0gYXdhaXQgZ2V0QWxsTXVuaWNpcGFsaXR5UGFydE5hbWVzKGNpdHlDb2RlKTtcclxuICAgIGNvbnN0IG5hbWVzTGlzdCA9IGFsbE5hbWVzLm1hcCgocm93KSA9PiByb3cubmFtZSk7XHJcbiAgICBjb25zdCBiZXN0TWF0Y2ggPSBmaW5kQ2xvc2VzdFN0cmluZyhuYW1lLCBuYW1lc0xpc3QpO1xyXG5cclxuICAgIGVycm9ycy5wdXNoKHtcclxuICAgICAgbWVzc2FnZTogYE9iZWMgYW5pIG3Em3N0c2vDoSDEjcOhc3QgJyR7bmFtZX0nIG5lZXhpc3R1amUsIG15c2xlbGkganN0ZSAnJHtiZXN0TWF0Y2h9Jz9gLFxyXG4gICAgICBzdGFydE9mZnNldDogMCxcclxuICAgICAgZW5kT2Zmc2V0OiAwLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbXVuaWNpcGFsaXR5UGFydENvZGU6IG51bGwsXHJcbiAgICAgIGVycm9ycyxcclxuICAgIH07XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbmRNdW5pY2lwYWxpdHlCeU5hbWVBbmRUeXBlID0gYXN5bmMgKFxyXG4gIG5hbWU6IHN0cmluZyxcclxuICB0eXBlOiBNdW5pY2lwYWxpdHlUeXBlLFxyXG4gIGZvdW5kZXI6IEZvdW5kZXJcclxuKTogUHJvbWlzZTxEYk11bmljaXBhbGl0eVJlc3VsdD4gPT4ge1xyXG4gIGNvbnN0IGVycm9yczogU21kRXJyb3JbXSA9IFtdO1xyXG5cclxuICBjb25zdCByZXN1bHQgPVxyXG4gICAgdHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5XHJcbiAgICAgID8gYXdhaXQgZ2V0S25leERiKCkuc2VsZWN0KFwiY29kZVwiKS5mcm9tKFwiY2l0eVwiKS53aGVyZShcIm5hbWVcIiwgbmFtZSlcclxuICAgICAgOiBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgICAgICAgLnNlbGVjdChcImNvZGVcIilcclxuICAgICAgICAgIC5mcm9tKFwiY2l0eV9kaXN0cmljdFwiKVxyXG4gICAgICAgICAgLndoZXJlKFwibmFtZVwiLCBuYW1lKVxyXG4gICAgICAgICAgLmFuZFdoZXJlKFxyXG4gICAgICAgICAgICBcImNpdHlfY29kZVwiLFxyXG4gICAgICAgICAgICBhd2FpdCBnZXRGb3VuZGVyQ2l0eUNvZGUoXHJcbiAgICAgICAgICAgICAgZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlLFxyXG4gICAgICAgICAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG5cclxuICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMSkge1xyXG4gICAgICBjb25zdCBjaXR5Q29kZSA9IGF3YWl0IGdldEZvdW5kZXJDaXR5Q29kZShcclxuICAgICAgICBmb3VuZGVyLm11bmljaXBhbGl0eVR5cGUsXHJcbiAgICAgICAgZm91bmRlci5tdW5pY2lwYWxpdHlDb2RlXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgICAgLnNlbGVjdChcImNpdHlfY29kZVwiLCBcIndnczg0X2xhdGl0dWRlXCIsIFwid2dzODRfbG9uZ2l0dWRlXCIpXHJcbiAgICAgICAgLmZyb20oXCJhZGRyZXNzX3BvaW50XCIpXHJcbiAgICAgICAgLmdyb3VwQnkoXCJjaXR5X2NvZGVcIilcclxuICAgICAgICAud2hlcmVJbihcclxuICAgICAgICAgIFwiY2l0eV9jb2RlXCIsXHJcbiAgICAgICAgICByZXN1bHQubWFwKChyb3cpID0+IHJvdy5jb2RlKVxyXG4gICAgICAgICk7XHJcbiAgICAgIGNvbnN0IGZvdW5kZXJQb3NpdGlvbiA9IGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgICAgLmZpcnN0KFwid2dzODRfbGF0aXR1ZGVcIiwgXCJ3Z3M4NF9sb25naXR1ZGVcIilcclxuICAgICAgICAuZnJvbShcImFkZHJlc3NfcG9pbnRcIilcclxuICAgICAgICAuZ3JvdXBCeShcImNpdHlfY29kZVwiKVxyXG4gICAgICAgIC53aGVyZShcImNpdHlfY29kZVwiLCBjaXR5Q29kZSk7XHJcbiAgICAgIGNvbnN0IGNsb3Nlc3RDb2RlID0gYXdhaXQgZ2V0Q2xvc2VzdENvZGUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29kZTogY2l0eUNvZGUsXHJcbiAgICAgICAgICBsYXQ6IGZvdW5kZXJQb3NpdGlvbi53Z3M4NF9sYXRpdHVkZSxcclxuICAgICAgICAgIGxuZzogZm91bmRlclBvc2l0aW9uLndnczg0X2xvbmdpdHVkZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9ucy5tYXAoKHJvdykgPT4gKHtcclxuICAgICAgICAgIGNvZGU6IHJvdy5jaXR5X2NvZGUsXHJcbiAgICAgICAgICBsYXQ6IHJvdy53Z3M4NF9sYXRpdHVkZSxcclxuICAgICAgICAgIGxuZzogcm93Lndnczg0X2xvbmdpdHVkZSxcclxuICAgICAgICB9KSlcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHsgbXVuaWNpcGFsaXR5OiB7IGNvZGU6IGNsb3Nlc3RDb2RlLCB0eXBlIH0sIGVycm9ycyB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgbXVuaWNpcGFsaXR5OiB7IGNvZGU6IHJlc3VsdFswXS5jb2RlLCB0eXBlIH0sIGVycm9ycyB9O1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBhbGxOYW1lcyA9IGF3YWl0IGdldEFsbE11bmljaXBhbGl0eU5hbWVzKHR5cGUpO1xyXG4gICAgY29uc3QgbmFtZXNMaXN0ID0gYWxsTmFtZXMubWFwKChyb3cpID0+IHJvdy5uYW1lKTtcclxuICAgIGNvbnN0IGJlc3RNYXRjaCA9IGZpbmRDbG9zZXN0U3RyaW5nKG5hbWUsIG5hbWVzTGlzdCk7XHJcbiAgICBjb25zdCBiZXN0TWF0Y2hSb3cgPSBhbGxOYW1lcy5maW5kKFxyXG4gICAgICAobXVuaWNpcGFsaXR5KSA9PiBtdW5pY2lwYWxpdHkubmFtZSA9PT0gYmVzdE1hdGNoXHJcbiAgICApO1xyXG5cclxuICAgIGVycm9ycy5wdXNoKHtcclxuICAgICAgbWVzc2FnZTogYE9iZWMgYW5pIG3Em3N0c2vDoSDEjcOhc3QgJyR7bmFtZX0nIG5lZXhpc3R1amUsIG15c2xlbGkganN0ZSAnJHtiZXN0TWF0Y2h9Jz9gLFxyXG4gICAgICBzdGFydE9mZnNldDogMCxcclxuICAgICAgZW5kT2Zmc2V0OiAwLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbXVuaWNpcGFsaXR5OiB7IGNvZGU6IGJlc3RNYXRjaFJvdy5jb2RlLCB0eXBlIH0sXHJcbiAgICAgIGVycm9ycyxcclxuICAgIH07XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgZ2V0QWxsTXVuaWNpcGFsaXR5TmFtZXMgPSBhc3luYyAoXHJcbiAgdHlwZTogTXVuaWNpcGFsaXR5VHlwZVxyXG4pOiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyBjb2RlOiBudW1iZXIgfVtdPiA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIGF3YWl0IGdldEtuZXhEYigpXHJcbiAgICAgIC5zZWxlY3QoXCJuYW1lXCIsIFwiY29kZVwiKVxyXG4gICAgICAuZnJvbSh0eXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHkgPyBcImNpdHlcIiA6IFwiY2l0eV9kaXN0cmljdFwiKVxyXG4gICkubWFwKChyb3cpID0+ICh7XHJcbiAgICBuYW1lOiByb3cubmFtZSxcclxuICAgIGNvZGU6IHJvdy5jb2RlLFxyXG4gIH0pKTtcclxufTtcclxuXHJcbmNvbnN0IGdldEFsbE11bmljaXBhbGl0eVBhcnROYW1lcyA9IGFzeW5jIChcclxuICBjaXR5Q29kZTogbnVtYmVyXHJcbik6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IGNvZGU6IG51bWJlciB9W10+ID0+IHtcclxuICByZXR1cm4gKFxyXG4gICAgYXdhaXQgZ2V0S25leERiKClcclxuICAgICAgLnNlbGVjdChcIm5hbWVcIiwgXCJjb2RlXCIpXHJcbiAgICAgIC5mcm9tKFwibXVuaWNpcGFsaXR5X3BhcnRcIilcclxuICAgICAgLndoZXJlKFwiY2l0eV9jb2RlXCIsIGNpdHlDb2RlKVxyXG4gICkubWFwKChyb3cpID0+ICh7XHJcbiAgICBuYW1lOiByb3cubmFtZSxcclxuICAgIGNvZGU6IHJvdy5jb2RlLFxyXG4gIH0pKTtcclxufTtcclxuIl19
@@ -5,8 +5,16 @@ export const insertSchools = async (schools) => {
5
5
  const knex = getKnexDb();
6
6
  const uniqueSchools = filterOutDuplicates(schools);
7
7
  const existingIzo = (await knex.select("izo").from("school")).map((row) => row.izo);
8
+ const schoolsWithoutLocationIzos = (await knex("school")
9
+ .leftJoin("school_location", "school.izo", "school_location.school_izo")
10
+ .whereNull("school_location.school_izo")
11
+ .select("school.izo")).map((row) => row.izo);
8
12
  const toInsert = uniqueSchools.filter((school) => !existingIzo.includes(school.izo));
9
13
  const toUpdate = uniqueSchools.filter((school) => existingIzo.includes(school.izo));
14
+ const toInsertLocation = [
15
+ ...toInsert,
16
+ ...toUpdate.filter((school) => schoolsWithoutLocationIzos.includes(school.izo)),
17
+ ];
10
18
  for (const school of toUpdate) {
11
19
  await knex.from("school").where("izo", school.izo).update({
12
20
  name: school.name,
@@ -20,7 +28,7 @@ export const insertSchools = async (schools) => {
20
28
  school.capacity.toString(),
21
29
  school.type.toString(),
22
30
  ]), "school", ["izo", "redizo", "name", "capacity", "type"]);
23
- const locations = toInsert
31
+ const locations = toInsertLocation
24
32
  .filter((school) => school.locations.length > 0)
25
33
  .map((school) => [
26
34
  school.izo,
@@ -68,4 +76,4 @@ const filterOutDuplicates = (schools) => {
68
76
  return !duplicate;
69
77
  });
70
78
  };
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nob29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYi9zY2hvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3JELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQUUsT0FBaUIsRUFBbUIsRUFBRTtJQUN4RSxNQUFNLElBQUksR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUV6QixNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQy9ELENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUNqQixDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQzlDLENBQUM7SUFDRixNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDL0MsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQ2pDLENBQUM7SUFFRixLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsRUFBRTtRQUM3QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3hELElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7U0FDMUIsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxNQUFNLGVBQWUsR0FBRyxNQUFNLGtCQUFrQixDQUM5QyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUN2QixNQUFNLENBQUMsR0FBRztRQUNWLE1BQU0sQ0FBQyxNQUFNO1FBQ2IsTUFBTSxDQUFDLElBQUk7UUFDWCxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtRQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtLQUN2QixDQUFDLEVBQ0YsUUFBUSxFQUNSLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUM5QyxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsUUFBUTtTQUN2QixNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUMvQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLEdBQUc7UUFDVixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRSwwQkFBMEI7S0FDMUUsQ0FBQyxDQUFDO0lBRUwsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFFMUIsOERBQThEO0lBQzlELEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFO1FBQ2hDLElBQUk7WUFDRixpQkFBaUIsSUFBSSxNQUFNLGtCQUFrQixDQUMzQyxDQUFDLFFBQVEsQ0FBQyxFQUNWLGlCQUFpQixFQUNqQixDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxFQUNsQyxJQUFJLENBQ0wsQ0FBQztTQUNIO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUNULHVDQUF1QyxRQUFRLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixRQUFRLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUN6RyxDQUFDO1NBQ0g7S0FDRjtJQUVELE9BQU8sZUFBZSxHQUFHLGlCQUFpQixDQUFDO0FBQzdDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUN4QixJQUFZLEVBQ1osT0FBaUIsRUFDakIsV0FBb0IsRUFDMkIsRUFBRTtJQUNqRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSTtZQUNaLE1BQU0sRUFBRSxDQUFDLGNBQWMsQ0FBQyx1Q0FBdUMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN4RSxDQUFDO0tBQ0g7SUFFRCxNQUFNLE1BQU0sR0FBZSxFQUFFLENBQUM7SUFFOUIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNuRSxJQUFJLFdBQVcsRUFBRTtRQUNmLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO0tBQ3hDO0lBRUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbEUsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO1FBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixJQUFJLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0tBQ2pDO0lBQ0QsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUUxRSxNQUFNLENBQUMsSUFBSSxDQUNULGNBQWMsQ0FDWixtQkFBbUIsSUFBSSwrQkFBK0IsU0FBUyxJQUFJLEVBQ25FLElBQUksQ0FDTCxDQUNGLENBQUM7SUFFRixPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMzQyxDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsT0FBaUIsRUFBWSxFQUFFO0lBQzFELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDekIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDL0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdob2xlTGluZUVycm9yIH0gZnJvbSBcIi4uL3N0cmVldC1tYXJrZG93bi9zbWRcIjtcclxuaW1wb3J0IHsgU21kRXJyb3IgfSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3R5cGVzXCI7XHJcbmltcG9ydCB7IGZpbmRDbG9zZXN0U3RyaW5nIH0gZnJvbSBcIi4uL3V0aWxzL2hlbHBlcnNcIjtcclxuaW1wb3J0IHsgZ2V0S25leERiLCBpbnNlcnRNdWx0aXBsZVJvd3MgfSBmcm9tIFwiLi9kYlwiO1xyXG5pbXBvcnQgeyBTY2hvb2wgfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydFNjaG9vbHMgPSBhc3luYyAoc2Nob29sczogU2Nob29sW10pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcclxuXHJcbiAgY29uc3QgdW5pcXVlU2Nob29scyA9IGZpbHRlck91dER1cGxpY2F0ZXMoc2Nob29scyk7XHJcbiAgY29uc3QgZXhpc3RpbmdJem8gPSAoYXdhaXQga25leC5zZWxlY3QoXCJpem9cIikuZnJvbShcInNjaG9vbFwiKSkubWFwKFxyXG4gICAgKHJvdykgPT4gcm93Lml6b1xyXG4gICk7XHJcblxyXG4gIGNvbnN0IHRvSW5zZXJ0ID0gdW5pcXVlU2Nob29scy5maWx0ZXIoXHJcbiAgICAoc2Nob29sKSA9PiAhZXhpc3RpbmdJem8uaW5jbHVkZXMoc2Nob29sLml6bylcclxuICApO1xyXG4gIGNvbnN0IHRvVXBkYXRlID0gdW5pcXVlU2Nob29scy5maWx0ZXIoKHNjaG9vbCkgPT5cclxuICAgIGV4aXN0aW5nSXpvLmluY2x1ZGVzKHNjaG9vbC5pem8pXHJcbiAgKTtcclxuXHJcbiAgZm9yIChjb25zdCBzY2hvb2wgb2YgdG9VcGRhdGUpIHtcclxuICAgIGF3YWl0IGtuZXguZnJvbShcInNjaG9vbFwiKS53aGVyZShcIml6b1wiLCBzY2hvb2wuaXpvKS51cGRhdGUoe1xyXG4gICAgICBuYW1lOiBzY2hvb2wubmFtZSxcclxuICAgICAgY2FwYWNpdHk6IHNjaG9vbC5jYXBhY2l0eSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgaW5zZXJ0ZWRTY2hvb2xzID0gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgdG9JbnNlcnQubWFwKChzY2hvb2wpID0+IFtcclxuICAgICAgc2Nob29sLml6byxcclxuICAgICAgc2Nob29sLnJlZGl6byxcclxuICAgICAgc2Nob29sLm5hbWUsXHJcbiAgICAgIHNjaG9vbC5jYXBhY2l0eS50b1N0cmluZygpLFxyXG4gICAgICBzY2hvb2wudHlwZS50b1N0cmluZygpLFxyXG4gICAgXSksXHJcbiAgICBcInNjaG9vbFwiLFxyXG4gICAgW1wiaXpvXCIsIFwicmVkaXpvXCIsIFwibmFtZVwiLCBcImNhcGFjaXR5XCIsIFwidHlwZVwiXVxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGxvY2F0aW9ucyA9IHRvSW5zZXJ0XHJcbiAgICAuZmlsdGVyKChzY2hvb2wpID0+IHNjaG9vbC5sb2NhdGlvbnMubGVuZ3RoID4gMClcclxuICAgIC5tYXAoKHNjaG9vbCkgPT4gW1xyXG4gICAgICBzY2hvb2wuaXpvLFxyXG4gICAgICBzY2hvb2wubG9jYXRpb25zWzBdLmFkZHJlc3NQb2ludElkLnRvU3RyaW5nKCksIC8vIGFkZCBvbmx5IGZpcnN0IGxvY2F0aW9uXHJcbiAgICBdKTtcclxuXHJcbiAgbGV0IGluc2VydGVkTG9jYXRpb25zID0gMDtcclxuXHJcbiAgLy8gcGx1cyBmaWx0ZXIgb3V0IGR1cGxpY2F0ZSBsb2NhdGlvbnMgKHNhbWUgYWRkcmVzcyBpZCArIGl6bylcclxuICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaW5zZXJ0ZWRMb2NhdGlvbnMgKz0gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgICAgIFtsb2NhdGlvbl0sXHJcbiAgICAgICAgXCJzY2hvb2xfbG9jYXRpb25cIixcclxuICAgICAgICBbXCJzY2hvb2xfaXpvXCIsIFwiYWRkcmVzc19wb2ludF9pZFwiXSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBgQ2Fubm90IGFkZCBsb2NhdGlvbiB3aXRoIFJVSUFOIGNvZGUgJHtsb2NhdGlvblsxXX0gKHNjaG9vbCBJWk8gPSAke2xvY2F0aW9uWzBdfSk6IGNvZGUgZG9lcyBub3QgZXhpc3QuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGluc2VydGVkU2Nob29scyArIGluc2VydGVkTG9jYXRpb25zO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbmRTY2hvb2wgPSAoXHJcbiAgbmFtZTogc3RyaW5nLFxyXG4gIHNjaG9vbHM6IFNjaG9vbFtdLFxyXG4gIG1heERpc3RhbmNlPzogbnVtYmVyXHJcbik6IHsgc2Nob29sOiBTY2hvb2wgfCBudWxsOyBlcnJvcnM6IFNtZEVycm9yW10gfSA9PiB7XHJcbiAgaWYgKHNjaG9vbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzY2hvb2w6IG51bGwsXHJcbiAgICAgIGVycm9yczogW3dob2xlTGluZUVycm9yKFwiQWt0dcOhbG7DrSB6xZlpem92YXRlbCBuZW3DoSDFvsOhZG7DqSDFoWtvbHkuXCIsIG5hbWUpXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb25zdCBlcnJvcnM6IFNtZEVycm9yW10gPSBbXTtcclxuXHJcbiAgY29uc3QgZXhhY3RTY2hvb2wgPSBzY2hvb2xzLmZpbmQoKHNjaG9vbCkgPT4gc2Nob29sLm5hbWUgPT09IG5hbWUpO1xyXG4gIGlmIChleGFjdFNjaG9vbCkge1xyXG4gICAgcmV0dXJuIHsgc2Nob29sOiBleGFjdFNjaG9vbCwgZXJyb3JzIH07XHJcbiAgfVxyXG5cclxuICBjb25zdCBuYW1lc0xpc3QgPSBzY2hvb2xzLm1hcCgoc2Nob29sKSA9PiBzY2hvb2wubmFtZSk7XHJcbiAgY29uc3QgYmVzdE1hdGNoID0gZmluZENsb3Nlc3RTdHJpbmcobmFtZSwgbmFtZXNMaXN0LCBtYXhEaXN0YW5jZSk7XHJcbiAgaWYgKGJlc3RNYXRjaCA9PT0gbnVsbCkge1xyXG4gICAgZXJyb3JzLnB1c2god2hvbGVMaW5lRXJyb3IoYMWga29sYSBzIG7DoXp2ZW0gJyR7bmFtZX0nIG5lZXhpc3R1amUuYCwgbmFtZSkpO1xyXG4gICAgcmV0dXJuIHsgc2Nob29sOiBudWxsLCBlcnJvcnMgfTtcclxuICB9XHJcbiAgY29uc3QgY2xvc2VzdFNjaG9vbCA9IHNjaG9vbHMuZmluZCgoc2Nob29sKSA9PiBiZXN0TWF0Y2ggPT09IHNjaG9vbC5uYW1lKTtcclxuXHJcbiAgZXJyb3JzLnB1c2goXHJcbiAgICB3aG9sZUxpbmVFcnJvcihcclxuICAgICAgYMWga29sYSBzIG7DoXp2ZW0gJyR7bmFtZX0nIG5lZXhpc3R1amUsIG15c2xlbGkganN0ZSAnJHtiZXN0TWF0Y2h9Jz9gLFxyXG4gICAgICBuYW1lXHJcbiAgICApXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIHsgc2Nob29sOiBjbG9zZXN0U2Nob29sLCBlcnJvcnMgfTtcclxufTtcclxuXHJcbmNvbnN0IGZpbHRlck91dER1cGxpY2F0ZXMgPSAoc2Nob29sczogU2Nob29sW10pOiBTY2hvb2xbXSA9PiB7XHJcbiAgY29uc3QgaXpvU2V0ID0gbmV3IFNldCgpO1xyXG4gIHJldHVybiBzY2hvb2xzLmZpbHRlcigoc2Nob29sKSA9PiB7XHJcbiAgICBjb25zdCBkdXBsaWNhdGUgPSBpem9TZXQuaGFzKHNjaG9vbC5pem8pO1xyXG4gICAgaXpvU2V0LmFkZChzY2hvb2wuaXpvKTtcclxuICAgIHJldHVybiAhZHVwbGljYXRlO1xyXG4gIH0pO1xyXG59O1xyXG4iXX0=
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nob29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYi9zY2hvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3JELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQUUsT0FBaUIsRUFBbUIsRUFBRTtJQUN4RSxNQUFNLElBQUksR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUV6QixNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQy9ELENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUNqQixDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsR0FBRyxDQUNqQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDakIsUUFBUSxDQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSw0QkFBNEIsQ0FBQztTQUN2RSxTQUFTLENBQUMsNEJBQTRCLENBQUM7U0FDdkMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUN4QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXhCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQ25DLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUM5QyxDQUFD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QztRQUN2QixPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2hvbGVMaW5lRXJyb3IgfSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3NtZFwiO1xyXG5pbXBvcnQgeyBTbWRFcnJvciB9IGZyb20gXCIuLi9zdHJlZXQtbWFya2Rvd24vdHlwZXNcIjtcclxuaW1wb3J0IHsgZmluZENsb3Nlc3RTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbHMvaGVscGVyc1wiO1xyXG5pbXBvcnQgeyBnZXRLbmV4RGIsIGluc2VydE11bHRpcGxlUm93cyB9IGZyb20gXCIuL2RiXCI7XHJcbmltcG9ydCB7IFNjaG9vbCB9IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgaW5zZXJ0U2Nob29scyA9IGFzeW5jIChzY2hvb2xzOiBTY2hvb2xbXSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xyXG5cclxuICBjb25zdCB1bmlxdWVTY2hvb2xzID0gZmlsdGVyT3V0RHVwbGljYXRlcyhzY2hvb2xzKTtcclxuICBjb25zdCBleGlzdGluZ0l6byA9IChhd2FpdCBrbmV4LnNlbGVjdChcIml6b1wiKS5mcm9tKFwic2Nob29sXCIpKS5tYXAoXHJcbiAgICAocm93KSA9PiByb3cuaXpvXHJcbiAgKTtcclxuICBjb25zdCBzY2hvb2xzV2l0aG91dExvY2F0aW9uSXpvcyA9IChcclxuICAgIGF3YWl0IGtuZXgoXCJzY2hvb2xcIilcclxuICAgICAgLmxlZnRKb2luKFwic2Nob29sX2xvY2F0aW9uXCIsIFwic2Nob29sLml6b1wiLCBcInNjaG9vbF9sb2NhdGlvbi5zY2hvb2xfaXpvXCIpXHJcbiAgICAgIC53aGVyZU51bGwoXCJzY2hvb2xfbG9jYXRpb24uc2Nob29sX2l6b1wiKVxyXG4gICAgICAuc2VsZWN0KFwic2Nob29sLml6b1wiKVxyXG4gICkubWFwKChyb3cpID0+IHJvdy5pem8pO1xyXG5cclxuICBjb25zdCB0b0luc2VydCA9IHVuaXF1ZVNjaG9vbHMuZmlsdGVyKFxyXG4gICAgKHNjaG9vbCkgPT4gIWV4aXN0aW5nSXpvLmluY2x1ZGVzKHNjaG9vbC5pem8pXHJcbiAgKTtcclxuICBjb25zdCB0b1VwZGF0ZSA9IHVuaXF1ZVNjaG9vbHMuZmlsdGVyKChzY2hvb2wpID0+XHJcbiAgICBleGlzdGluZ0l6by5pbmNsdWRlcyhzY2hvb2wuaXpvKVxyXG4gICk7XHJcbiAgY29uc3QgdG9JbnNlcnRMb2NhdGlvbiA9IFtcclxuICAgIC4uLnRvSW5zZXJ0LFxyXG4gICAgLi4udG9VcGRhdGUuZmlsdGVyKChzY2hvb2wpID0+XHJcbiAgICAgIHNjaG9vbHNXaXRob3V0TG9jYXRpb25Jem9zLmluY2x1ZGVzKHNjaG9vbC5pem8pXHJcbiAgICApLFxyXG4gIF07XHJcblxyXG4gIGZvciAoY29uc3Qgc2Nob29sIG9mIHRvVXBkYXRlKSB7XHJcbiAgICBhd2FpdCBrbmV4LmZyb20oXCJzY2hvb2xcIikud2hlcmUoXCJpem9cIiwgc2Nob29sLml6bykudXBkYXRlKHtcclxuICAgICAgbmFtZTogc2Nob29sLm5hbWUsXHJcbiAgICAgIGNhcGFjaXR5OiBzY2hvb2wuY2FwYWNpdHksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGluc2VydGVkU2Nob29scyA9IGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcclxuICAgIHRvSW5zZXJ0Lm1hcCgoc2Nob29sKSA9PiBbXHJcbiAgICAgIHNjaG9vbC5pem8sXHJcbiAgICAgIHNjaG9vbC5yZWRpem8sXHJcbiAgICAgIHNjaG9vbC5uYW1lLFxyXG4gICAgICBzY2hvb2wuY2FwYWNpdHkudG9TdHJpbmcoKSxcclxuICAgICAgc2Nob29sLnR5cGUudG9TdHJpbmcoKSxcclxuICAgIF0pLFxyXG4gICAgXCJzY2hvb2xcIixcclxuICAgIFtcIml6b1wiLCBcInJlZGl6b1wiLCBcIm5hbWVcIiwgXCJjYXBhY2l0eVwiLCBcInR5cGVcIl1cclxuICApO1xyXG5cclxuICBjb25zdCBsb2NhdGlvbnMgPSB0b0luc2VydExvY2F0aW9uXHJcbiAgICAuZmlsdGVyKChzY2hvb2wpID0+IHNjaG9vbC5sb2NhdGlvbnMubGVuZ3RoID4gMClcclxuICAgIC5tYXAoKHNjaG9vbCkgPT4gW1xyXG4gICAgICBzY2hvb2wuaXpvLFxyXG4gICAgICBzY2hvb2wubG9jYXRpb25zWzBdLmFkZHJlc3NQb2ludElkLnRvU3RyaW5nKCksIC8vIGFkZCBvbmx5IGZpcnN0IGxvY2F0aW9uXHJcbiAgICBdKTtcclxuXHJcbiAgbGV0IGluc2VydGVkTG9jYXRpb25zID0gMDtcclxuXHJcbiAgLy8gcGx1cyBmaWx0ZXIgb3V0IGR1cGxpY2F0ZSBsb2NhdGlvbnMgKHNhbWUgYWRkcmVzcyBpZCArIGl6bylcclxuICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaW5zZXJ0ZWRMb2NhdGlvbnMgKz0gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgICAgIFtsb2NhdGlvbl0sXHJcbiAgICAgICAgXCJzY2hvb2xfbG9jYXRpb25cIixcclxuICAgICAgICBbXCJzY2hvb2xfaXpvXCIsIFwiYWRkcmVzc19wb2ludF9pZFwiXSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBgQ2Fubm90IGFkZCBsb2NhdGlvbiB3aXRoIFJVSUFOIGNvZGUgJHtsb2NhdGlvblsxXX0gKHNjaG9vbCBJWk8gPSAke2xvY2F0aW9uWzBdfSk6IGNvZGUgZG9lcyBub3QgZXhpc3QuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGluc2VydGVkU2Nob29scyArIGluc2VydGVkTG9jYXRpb25zO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbmRTY2hvb2wgPSAoXHJcbiAgbmFtZTogc3RyaW5nLFxyXG4gIHNjaG9vbHM6IFNjaG9vbFtdLFxyXG4gIG1heERpc3RhbmNlPzogbnVtYmVyXHJcbik6IHsgc2Nob29sOiBTY2hvb2wgfCBudWxsOyBlcnJvcnM6IFNtZEVycm9yW10gfSA9PiB7XHJcbiAgaWYgKHNjaG9vbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzY2hvb2w6IG51bGwsXHJcbiAgICAgIGVycm9yczogW3dob2xlTGluZUVycm9yKFwiQWt0dcOhbG7DrSB6xZlpem92YXRlbCBuZW3DoSDFvsOhZG7DqSDFoWtvbHkuXCIsIG5hbWUpXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb25zdCBlcnJvcnM6IFNtZEVycm9yW10gPSBbXTtcclxuXHJcbiAgY29uc3QgZXhhY3RTY2hvb2wgPSBzY2hvb2xzLmZpbmQoKHNjaG9vbCkgPT4gc2Nob29sLm5hbWUgPT09IG5hbWUpO1xyXG4gIGlmIChleGFjdFNjaG9vbCkge1xyXG4gICAgcmV0dXJuIHsgc2Nob29sOiBleGFjdFNjaG9vbCwgZXJyb3JzIH07XHJcbiAgfVxyXG5cclxuICBjb25zdCBuYW1lc0xpc3QgPSBzY2hvb2xzLm1hcCgoc2Nob29sKSA9PiBzY2hvb2wubmFtZSk7XHJcbiAgY29uc3QgYmVzdE1hdGNoID0gZmluZENsb3Nlc3RTdHJpbmcobmFtZSwgbmFtZXNMaXN0LCBtYXhEaXN0YW5jZSk7XHJcbiAgaWYgKGJlc3RNYXRjaCA9PT0gbnVsbCkge1xyXG4gICAgZXJyb3JzLnB1c2god2hvbGVMaW5lRXJyb3IoYMWga29sYSBzIG7DoXp2ZW0gJyR7bmFtZX0nIG5lZXhpc3R1amUuYCwgbmFtZSkpO1xyXG4gICAgcmV0dXJuIHsgc2Nob29sOiBudWxsLCBlcnJvcnMgfTtcclxuICB9XHJcbiAgY29uc3QgY2xvc2VzdFNjaG9vbCA9IHNjaG9vbHMuZmluZCgoc2Nob29sKSA9PiBiZXN0TWF0Y2ggPT09IHNjaG9vbC5uYW1lKTtcclxuXHJcbiAgZXJyb3JzLnB1c2goXHJcbiAgICB3aG9sZUxpbmVFcnJvcihcclxuICAgICAgYMWga29sYSBzIG7DoXp2ZW0gJyR7bmFtZX0nIG5lZXhpc3R1amUsIG15c2xlbGkganN0ZSAnJHtiZXN0TWF0Y2h9Jz9gLFxyXG4gICAgICBuYW1lXHJcbiAgICApXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIHsgc2Nob29sOiBjbG9zZXN0U2Nob29sLCBlcnJvcnMgfTtcclxufTtcclxuXHJcbmNvbnN0IGZpbHRlck91dER1cGxpY2F0ZXMgPSAoc2Nob29sczogU2Nob29sW10pOiBTY2hvb2xbXSA9PiB7XHJcbiAgY29uc3QgaXpvU2V0ID0gbmV3IFNldCgpO1xyXG4gIHJldHVybiBzY2hvb2xzLmZpbHRlcigoc2Nob29sKSA9PiB7XHJcbiAgICBjb25zdCBkdXBsaWNhdGUgPSBpem9TZXQuaGFzKHNjaG9vbC5pem8pO1xyXG4gICAgaXpvU2V0LmFkZChzY2hvb2wuaXpvKTtcclxuICAgIHJldHVybiAhZHVwbGljYXRlO1xyXG4gIH0pO1xyXG59O1xyXG4iXX0=
@@ -3,3 +3,4 @@ export declare const setStreetAsSynced: (streetFeedUrl: string) => Promise<void>
3
3
  export declare const getAllSyncedStreets: () => Promise<Set<string>>;
4
4
  export declare const deleteStreets: (streetUrls: string[]) => Promise<void>;
5
5
  export declare const insertStreetsFromDbf: (data: DbfStreet[]) => Promise<number>;
6
+ export declare const clearStreetSyncTable: () => Promise<void>;
@@ -16,4 +16,7 @@ export const deleteStreets = async (streetUrls) => {
16
16
  export const insertStreetsFromDbf = async (data) => {
17
17
  return await insertMultipleRows(data.map((street) => [street.KOD, street.OBEC_KOD, street.NAZEV]), "street", ["code", "city_code", "name"]);
18
18
  };
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWV0LXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvc3RyZWV0LXN5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ25CLE1BQU0sTUFBTSxDQUFDO0FBR2QsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxFQUNwQyxhQUFxQixFQUNOLEVBQUU7SUFDakIsTUFBTSxTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUM7U0FDN0IsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDO1NBQ25DLFVBQVUsQ0FBQyxVQUFVLENBQUM7U0FDdEIsTUFBTSxFQUFFLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLElBQTBCLEVBQUU7SUFDbEUsT0FBTyxJQUFJLEdBQUcsQ0FDWixNQUFNLFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQztTQUM3QixNQUFNLENBQUMsVUFBVSxDQUFDO1NBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ25ELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLFVBQW9CLEVBQWlCLEVBQUU7SUFDekUsTUFBTSxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFDdkMsSUFBaUIsRUFDQSxFQUFFO0lBQ25CLE9BQU8sTUFBTSxrQkFBa0IsQ0FDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ2pFLFFBQVEsRUFDUixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQzlCLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGRlbGV0ZU11bHRpcGxlUm93c0tuZXgsXHJcbiAgZ2V0S25leERiLFxyXG4gIGluc2VydE11bHRpcGxlUm93c1xyXG59IGZyb20gXCIuL2RiXCI7XHJcbmltcG9ydCB7IERiZlN0cmVldCB9IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0U3RyZWV0QXNTeW5jZWQgPSBhc3luYyAoXHJcbiAgc3RyZWV0RmVlZFVybDogc3RyaW5nXHJcbik6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGF3YWl0IGdldEtuZXhEYigpKFwic3RyZWV0X3N5bmNcIilcclxuICAgIC5pbnNlcnQoeyBmZWVkX3VybDogc3RyZWV0RmVlZFVybCB9KVxyXG4gICAgLm9uQ29uZmxpY3QoXCJmZWVkX3VybFwiKVxyXG4gICAgLmlnbm9yZSgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldEFsbFN5bmNlZFN0cmVldHMgPSBhc3luYyAoKTogUHJvbWlzZTxTZXQ8c3RyaW5nPj4gPT4ge1xyXG4gIHJldHVybiBuZXcgU2V0PHN0cmluZz4oXHJcbiAgICBhd2FpdCBnZXRLbmV4RGIoKShcInN0cmVldF9zeW5jXCIpXHJcbiAgICAgIC5zZWxlY3QoXCJmZWVkX3VybFwiKVxyXG4gICAgICAudGhlbigocm93cykgPT4gcm93cy5tYXAoKHJvdykgPT4gcm93LmZlZWRfdXJsKSlcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlbGV0ZVN0cmVldHMgPSBhc3luYyAoc3RyZWV0VXJsczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICBhd2FpdCBkZWxldGVNdWx0aXBsZVJvd3NLbmV4KHN0cmVldFVybHMsIFwic3RyZWV0X3N5bmNcIiwgXCJmZWVkX3VybFwiKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRTdHJlZXRzRnJvbURiZiA9IGFzeW5jIChcclxuICBkYXRhOiBEYmZTdHJlZXRbXVxyXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIHJldHVybiBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXHJcbiAgICBkYXRhLm1hcCgoc3RyZWV0KSA9PiBbc3RyZWV0LktPRCwgc3RyZWV0Lk9CRUNfS09ELCBzdHJlZXQuTkFaRVZdKSxcclxuICAgIFwic3RyZWV0XCIsXHJcbiAgICBbXCJjb2RlXCIsIFwiY2l0eV9jb2RlXCIsIFwibmFtZVwiXVxyXG4gICk7XHJcbn07XHJcbiJdfQ==
19
+ export const clearStreetSyncTable = async () => {
20
+ await getKnexDb()("street_sync").del();
21
+ };
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWV0LXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvc3RyZWV0LXN5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ25CLE1BQU0sTUFBTSxDQUFDO0FBR2QsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxFQUNwQyxhQUFxQixFQUNOLEVBQUU7SUFDakIsTUFBTSxTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUM7U0FDN0IsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDO1NBQ25DLFVBQVUsQ0FBQyxVQUFVLENBQUM7U0FDdEIsTUFBTSxFQUFFLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLElBQTBCLEVBQUU7SUFDbEUsT0FBTyxJQUFJLEdBQUcsQ0FDWixNQUFNLFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQztTQUM3QixNQUFNLENBQUMsVUFBVSxDQUFDO1NBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ25ELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLFVBQW9CLEVBQWlCLEVBQUU7SUFDekUsTUFBTSxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFDdkMsSUFBaUIsRUFDQSxFQUFFO0lBQ25CLE9BQU8sTUFBTSxrQkFBa0IsQ0FDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ2pFLFFBQVEsRUFDUixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQzlCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLElBQW1CLEVBQUU7SUFDNUQsTUFBTSxTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGRlbGV0ZU11bHRpcGxlUm93c0tuZXgsXHJcbiAgZ2V0S25leERiLFxyXG4gIGluc2VydE11bHRpcGxlUm93c1xyXG59IGZyb20gXCIuL2RiXCI7XHJcbmltcG9ydCB7IERiZlN0cmVldCB9IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0U3RyZWV0QXNTeW5jZWQgPSBhc3luYyAoXHJcbiAgc3RyZWV0RmVlZFVybDogc3RyaW5nXHJcbik6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGF3YWl0IGdldEtuZXhEYigpKFwic3RyZWV0X3N5bmNcIilcclxuICAgIC5pbnNlcnQoeyBmZWVkX3VybDogc3RyZWV0RmVlZFVybCB9KVxyXG4gICAgLm9uQ29uZmxpY3QoXCJmZWVkX3VybFwiKVxyXG4gICAgLmlnbm9yZSgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldEFsbFN5bmNlZFN0cmVldHMgPSBhc3luYyAoKTogUHJvbWlzZTxTZXQ8c3RyaW5nPj4gPT4ge1xyXG4gIHJldHVybiBuZXcgU2V0PHN0cmluZz4oXHJcbiAgICBhd2FpdCBnZXRLbmV4RGIoKShcInN0cmVldF9zeW5jXCIpXHJcbiAgICAgIC5zZWxlY3QoXCJmZWVkX3VybFwiKVxyXG4gICAgICAudGhlbigocm93cykgPT4gcm93cy5tYXAoKHJvdykgPT4gcm93LmZlZWRfdXJsKSlcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlbGV0ZVN0cmVldHMgPSBhc3luYyAoc3RyZWV0VXJsczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICBhd2FpdCBkZWxldGVNdWx0aXBsZVJvd3NLbmV4KHN0cmVldFVybHMsIFwic3RyZWV0X3N5bmNcIiwgXCJmZWVkX3VybFwiKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRTdHJlZXRzRnJvbURiZiA9IGFzeW5jIChcclxuICBkYXRhOiBEYmZTdHJlZXRbXVxyXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIHJldHVybiBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXHJcbiAgICBkYXRhLm1hcCgoc3RyZWV0KSA9PiBbc3RyZWV0LktPRCwgc3RyZWV0Lk9CRUNfS09ELCBzdHJlZXQuTkFaRVZdKSxcclxuICAgIFwic3RyZWV0XCIsXHJcbiAgICBbXCJjb2RlXCIsIFwiY2l0eV9jb2RlXCIsIFwibmFtZVwiXVxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY2xlYXJTdHJlZXRTeW5jVGFibGUgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgYXdhaXQgZ2V0S25leERiKCkoXCJzdHJlZXRfc3luY1wiKS5kZWwoKTtcclxufTtcclxuIl19
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ import { downloadAndImportAddressPoints } from "./open-data-sync/address-points"
3
3
  import { importCities } from "./open-data-sync/cities";
4
4
  import { downloadAndImportRegions } from "./open-data-sync/regions";
5
5
  import { downloadAndImportSchools } from "./open-data-sync/schools";
6
+ import { downloadAndImportStreets } from "./open-data-sync/streets";
6
7
  import { municipalitiesToPolygons } from "./street-markdown/polygons";
7
8
  import { OpenDataSyncOptionsPartial } from "./utils/helpers";
8
9
  export * from "./street-markdown/smd";
@@ -19,4 +20,4 @@ export * from "./street-markdown/types";
19
20
  * ```
20
21
  */
21
22
  export declare function downloadAndImportEverything(options?: OpenDataSyncOptionsPartial, syncStreets?: boolean): Promise<void>;
22
- export { clearDb, downloadAndImportAddressPoints, downloadAndImportRegions, downloadAndImportSchools, importCities, municipalitiesToPolygons, initDb, };
23
+ export { clearDb, downloadAndImportAddressPoints, downloadAndImportRegions, downloadAndImportSchools, downloadAndImportStreets, importCities, municipalitiesToPolygons, initDb, };
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import { downloadAndImportAddressPoints } from "./open-data-sync/address-points"
3
3
  import { importCities } from "./open-data-sync/cities";
4
4
  import { downloadAndImportRegions } from "./open-data-sync/regions";
5
5
  import { downloadAndImportSchools } from "./open-data-sync/schools";
6
- // import { downloadAndImportStreets } from "./open-data-sync/streets";
6
+ import { downloadAndImportStreets } from "./open-data-sync/streets";
7
7
  import { municipalitiesToPolygons } from "./street-markdown/polygons";
8
8
  export * from "./street-markdown/smd";
9
9
  export * from "./street-markdown/types";
@@ -25,10 +25,8 @@ export async function downloadAndImportEverything(options = {}, syncStreets = tr
25
25
  await downloadAndImportRegions(options);
26
26
  await importCities(options);
27
27
  if (syncStreets) {
28
- // await downloadAndImportStreets(options);
28
+ await downloadAndImportStreets(options);
29
29
  }
30
30
  }
31
- export { clearDb, downloadAndImportAddressPoints, downloadAndImportRegions, downloadAndImportSchools,
32
- // downloadAndImportStreets,
33
- importCities, municipalitiesToPolygons, initDb, };
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLHVFQUF1RTtBQUN2RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUd0RSxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMseUJBQXlCLENBQUM7QUFFeEM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsMkJBQTJCLENBQy9DLFVBQXNDLEVBQUUsRUFDeEMsY0FBdUIsSUFBSTtJQUUzQixNQUFNLE1BQU0sRUFBRSxDQUFDO0lBQ2YsTUFBTSw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxNQUFNLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsTUFBTSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsSUFBSSxXQUFXLEVBQUU7UUFDZiwyQ0FBMkM7S0FDNUM7QUFDSCxDQUFDO0FBRUQsT0FBTyxFQUNMLE9BQU8sRUFDUCw4QkFBOEIsRUFDOUIsd0JBQXdCLEVBQ3hCLHdCQUF3QjtBQUN4Qiw0QkFBNEI7QUFDNUIsWUFBWSxFQUNaLHdCQUF3QixFQUN4QixNQUFNLEdBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsZWFyRGIsIGluaXREYiB9IGZyb20gXCIuL2RiL2RiXCI7XHJcbmltcG9ydCB7IGRvd25sb2FkQW5kSW1wb3J0QWRkcmVzc1BvaW50cyB9IGZyb20gXCIuL29wZW4tZGF0YS1zeW5jL2FkZHJlc3MtcG9pbnRzXCI7XHJcbmltcG9ydCB7IGltcG9ydENpdGllcyB9IGZyb20gXCIuL29wZW4tZGF0YS1zeW5jL2NpdGllc1wiO1xyXG5pbXBvcnQgeyBkb3dubG9hZEFuZEltcG9ydFJlZ2lvbnMgfSBmcm9tIFwiLi9vcGVuLWRhdGEtc3luYy9yZWdpb25zXCI7XHJcbmltcG9ydCB7IGRvd25sb2FkQW5kSW1wb3J0U2Nob29scyB9IGZyb20gXCIuL29wZW4tZGF0YS1zeW5jL3NjaG9vbHNcIjtcclxuLy8gaW1wb3J0IHsgZG93bmxvYWRBbmRJbXBvcnRTdHJlZXRzIH0gZnJvbSBcIi4vb3Blbi1kYXRhLXN5bmMvc3RyZWV0c1wiO1xyXG5pbXBvcnQgeyBtdW5pY2lwYWxpdGllc1RvUG9seWdvbnMgfSBmcm9tIFwiLi9zdHJlZXQtbWFya2Rvd24vcG9seWdvbnNcIjtcclxuaW1wb3J0IHsgT3BlbkRhdGFTeW5jT3B0aW9uc1BhcnRpYWwgfSBmcm9tIFwiLi91dGlscy9oZWxwZXJzXCI7XHJcblxyXG5leHBvcnQgKiBmcm9tIFwiLi9zdHJlZXQtbWFya2Rvd24vc21kXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmVldC1tYXJrZG93bi90eXBlc1wiO1xyXG5cclxuLyoqXHJcbiAqIERvd25sb2FkIGFuZCBpbXBvcnQgYWxsIG9wZW4gZGF0YSB0byBTUUxpdGUgREIuIFRoZSBEQiBmaWxlIHdpbGwgYmUgbG9jYXRlZFxyXG4gKiBpbiB0aGUgYGRhdGFEaXJgIGZvbGRlci5cclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHN5bmNcclxuICogQHBhcmFtIHN5bmNTdHJlZXRzIFN0cmVldHMgc3luYyB0YWtlcyBhcm91bmQgMSBob3VyLCBzbyBpdCBtaWdodCBiZSBza2lwcGVkLlxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IGRvd25sb2FkQW5kSW1wb3J0RXZlcnl0aGluZyB9IGZyb20gXCJ0ZXh0LXRvLW1hcFwiO1xyXG4gKlxyXG4gKiBhd2FpdCBkb3dubG9hZEFuZEltcG9ydEV2ZXJ5dGhpbmcoeyB0bXBEaXI6IFwiLi90bXBcIiwgZGF0YURpcjogXCIuL2RhdGFcIiB9KTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRBbmRJbXBvcnRFdmVyeXRoaW5nKFxyXG4gIG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNQYXJ0aWFsID0ge30sXHJcbiAgc3luY1N0cmVldHM6IGJvb2xlYW4gPSB0cnVlXHJcbikge1xyXG4gIGF3YWl0IGluaXREYigpO1xyXG4gIGF3YWl0IGRvd25sb2FkQW5kSW1wb3J0QWRkcmVzc1BvaW50cyhvcHRpb25zKTtcclxuICBhd2FpdCBkb3dubG9hZEFuZEltcG9ydFNjaG9vbHMob3B0aW9ucyk7XHJcbiAgYXdhaXQgZG93bmxvYWRBbmRJbXBvcnRSZWdpb25zKG9wdGlvbnMpO1xyXG4gIGF3YWl0IGltcG9ydENpdGllcyhvcHRpb25zKTtcclxuICBpZiAoc3luY1N0cmVldHMpIHtcclxuICAgIC8vIGF3YWl0IGRvd25sb2FkQW5kSW1wb3J0U3RyZWV0cyhvcHRpb25zKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgY2xlYXJEYixcclxuICBkb3dubG9hZEFuZEltcG9ydEFkZHJlc3NQb2ludHMsXHJcbiAgZG93bmxvYWRBbmRJbXBvcnRSZWdpb25zLFxyXG4gIGRvd25sb2FkQW5kSW1wb3J0U2Nob29scyxcclxuICAvLyBkb3dubG9hZEFuZEltcG9ydFN0cmVldHMsXHJcbiAgaW1wb3J0Q2l0aWVzLFxyXG4gIG11bmljaXBhbGl0aWVzVG9Qb2x5Z29ucyxcclxuICBpbml0RGIsXHJcbn07XHJcbiJdfQ==
31
+ export { clearDb, downloadAndImportAddressPoints, downloadAndImportRegions, downloadAndImportSchools, downloadAndImportStreets, importCities, municipalitiesToPolygons, initDb, };
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR3RFLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx5QkFBeUIsQ0FBQztBQUV4Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwyQkFBMkIsQ0FDL0MsVUFBc0MsRUFBRSxFQUN4QyxjQUF1QixJQUFJO0lBRTNCLE1BQU0sTUFBTSxFQUFFLENBQUM7SUFDZixNQUFNLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLE1BQU0sd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsTUFBTSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QixJQUFJLFdBQVcsRUFBRTtRQUNmLE1BQU0sd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDekM7QUFDSCxDQUFDO0FBRUQsT0FBTyxFQUNMLE9BQU8sRUFDUCw4QkFBOEIsRUFDOUIsd0JBQXdCLEVBQ3hCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsWUFBWSxFQUNaLHdCQUF3QixFQUN4QixNQUFNLEdBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsZWFyRGIsIGluaXREYiB9IGZyb20gXCIuL2RiL2RiXCI7XHJcbmltcG9ydCB7IGRvd25sb2FkQW5kSW1wb3J0QWRkcmVzc1BvaW50cyB9IGZyb20gXCIuL29wZW4tZGF0YS1zeW5jL2FkZHJlc3MtcG9pbnRzXCI7XHJcbmltcG9ydCB7IGltcG9ydENpdGllcyB9IGZyb20gXCIuL29wZW4tZGF0YS1zeW5jL2NpdGllc1wiO1xyXG5pbXBvcnQgeyBkb3dubG9hZEFuZEltcG9ydFJlZ2lvbnMgfSBmcm9tIFwiLi9vcGVuLWRhdGEtc3luYy9yZWdpb25zXCI7XHJcbmltcG9ydCB7IGRvd25sb2FkQW5kSW1wb3J0U2Nob29scyB9IGZyb20gXCIuL29wZW4tZGF0YS1zeW5jL3NjaG9vbHNcIjtcclxuaW1wb3J0IHsgZG93bmxvYWRBbmRJbXBvcnRTdHJlZXRzIH0gZnJvbSBcIi4vb3Blbi1kYXRhLXN5bmMvc3RyZWV0c1wiO1xyXG5pbXBvcnQgeyBtdW5pY2lwYWxpdGllc1RvUG9seWdvbnMgfSBmcm9tIFwiLi9zdHJlZXQtbWFya2Rvd24vcG9seWdvbnNcIjtcclxuaW1wb3J0IHsgT3BlbkRhdGFTeW5jT3B0aW9uc1BhcnRpYWwgfSBmcm9tIFwiLi91dGlscy9oZWxwZXJzXCI7XHJcblxyXG5leHBvcnQgKiBmcm9tIFwiLi9zdHJlZXQtbWFya2Rvd24vc21kXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmVldC1tYXJrZG93bi90eXBlc1wiO1xyXG5cclxuLyoqXHJcbiAqIERvd25sb2FkIGFuZCBpbXBvcnQgYWxsIG9wZW4gZGF0YSB0byBTUUxpdGUgREIuIFRoZSBEQiBmaWxlIHdpbGwgYmUgbG9jYXRlZFxyXG4gKiBpbiB0aGUgYGRhdGFEaXJgIGZvbGRlci5cclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHN5bmNcclxuICogQHBhcmFtIHN5bmNTdHJlZXRzIFN0cmVldHMgc3luYyB0YWtlcyBhcm91bmQgMSBob3VyLCBzbyBpdCBtaWdodCBiZSBza2lwcGVkLlxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IGRvd25sb2FkQW5kSW1wb3J0RXZlcnl0aGluZyB9IGZyb20gXCJ0ZXh0LXRvLW1hcFwiO1xyXG4gKlxyXG4gKiBhd2FpdCBkb3dubG9hZEFuZEltcG9ydEV2ZXJ5dGhpbmcoeyB0bXBEaXI6IFwiLi90bXBcIiwgZGF0YURpcjogXCIuL2RhdGFcIiB9KTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRBbmRJbXBvcnRFdmVyeXRoaW5nKFxyXG4gIG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNQYXJ0aWFsID0ge30sXHJcbiAgc3luY1N0cmVldHM6IGJvb2xlYW4gPSB0cnVlXHJcbikge1xyXG4gIGF3YWl0IGluaXREYigpO1xyXG4gIGF3YWl0IGRvd25sb2FkQW5kSW1wb3J0QWRkcmVzc1BvaW50cyhvcHRpb25zKTtcclxuICBhd2FpdCBkb3dubG9hZEFuZEltcG9ydFNjaG9vbHMob3B0aW9ucyk7XHJcbiAgYXdhaXQgZG93bmxvYWRBbmRJbXBvcnRSZWdpb25zKG9wdGlvbnMpO1xyXG4gIGF3YWl0IGltcG9ydENpdGllcyhvcHRpb25zKTtcclxuICBpZiAoc3luY1N0cmVldHMpIHtcclxuICAgIGF3YWl0IGRvd25sb2FkQW5kSW1wb3J0U3RyZWV0cyhvcHRpb25zKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgY2xlYXJEYixcclxuICBkb3dubG9hZEFuZEltcG9ydEFkZHJlc3NQb2ludHMsXHJcbiAgZG93bmxvYWRBbmRJbXBvcnRSZWdpb25zLFxyXG4gIGRvd25sb2FkQW5kSW1wb3J0U2Nob29scyxcclxuICBkb3dubG9hZEFuZEltcG9ydFN0cmVldHMsXHJcbiAgaW1wb3J0Q2l0aWVzLFxyXG4gIG11bmljaXBhbGl0aWVzVG9Qb2x5Z29ucyxcclxuICBpbml0RGIsXHJcbn07XHJcbiJdfQ==
@@ -61,8 +61,8 @@ export const downloadAndImportAddressPoints = async (options = {}) => {
61
61
  const completeOptions = prepareOptions(options);
62
62
  const datasetFeedLink = await getLatestUrlFromAtomFeed(completeOptions.addressPointsAtomUrl);
63
63
  const zipUrl = await getLatestUrlFromAtomFeed(datasetFeedLink);
64
- // await downloadAndUnzip(zipUrl, completeOptions);
64
+ await downloadAndUnzip(zipUrl, completeOptions);
65
65
  await importDataToDb(completeOptions);
66
66
  });
67
67
  };
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1wb2ludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3Blbi1kYXRhLXN5bmMvYWRkcmVzcy1wb2ludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDOUUsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEtBQUssTUFBTSxjQUFjLENBQUM7QUFDakMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQiw2QkFBNkIsR0FDOUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBR0wsY0FBYyxHQUNmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFFM0IsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLEVBQzVCLEdBQVcsRUFDWCxPQUE0QixFQUNiLEVBQUU7SUFDakIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFFM0UsT0FBTyxDQUFDLEdBQUcsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO0lB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QUMsTUFBTSxDQUFDLENBQUM7SUFFNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNqRSxDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsT0FBNEIsRUFBRSxFQUFFLENBQzNELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLEtBQUssRUFDakQsVUFBc0MsRUFBRSxFQUN6QixFQUFFO0lBQ2pCLE1BQU0sV0FBVyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3ZELE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxNQUFNLGVBQWUsR0FBRyxNQUFNLHdCQUF3QixDQUNwRCxlQUFlLENBQUMsb0JBQW9CLENBQ3JDLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLHdCQUF3QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9ELG1EQUFtRDtRQUNuRCxNQUFNLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBZG1aaXAgZnJvbSBcImFkbS16aXBcIjtcclxuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiY3N2LXBhcnNlXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0sIGNyZWF0ZVdyaXRlU3RyZWFtLCByZWFkZGlyU3luYywgcm1TeW5jIH0gZnJvbSBcImZzXCI7XHJcbmltcG9ydCBpY29udiBmcm9tIFwiaWNvbnYtbGl0ZVwiO1xyXG5pbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIjtcclxuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IHBpcGVsaW5lIH0gZnJvbSBcInN0cmVhbS9wcm9taXNlc1wiO1xyXG5pbXBvcnQgY2h1bmsgZnJvbSBcImxvZGFzaC9jaHVua1wiO1xyXG5pbXBvcnQge1xyXG4gIGNvbW1pdEFkZHJlc3NQb2ludHMsXHJcbiAgcmVtb3ZlRGVwcmVjYXRlZEFkZHJlc3NQb2ludHMsXHJcbn0gZnJvbSBcIi4uL2RiL2FkZHJlc3MtcG9pbnRzXCI7XHJcbmltcG9ydCB7IFN5bmNQYXJ0IH0gZnJvbSBcIi4uL2RiL3R5cGVzXCI7XHJcbmltcG9ydCB7IGdldExhdGVzdFVybEZyb21BdG9tRmVlZCB9IGZyb20gXCIuLi91dGlscy9hdG9tXCI7XHJcbmltcG9ydCB7XHJcbiAgT3BlbkRhdGFTeW5jT3B0aW9ucyxcclxuICBPcGVuRGF0YVN5bmNPcHRpb25zUGFydGlhbCxcclxuICBwcmVwYXJlT3B0aW9ucyxcclxufSBmcm9tIFwiLi4vdXRpbHMvaGVscGVyc1wiO1xyXG5pbXBvcnQgeyBydW5TeW5jUGFydCB9IGZyb20gXCIuL2NvbW1vblwiO1xyXG5cclxuY29uc3QgbWF4QnVmZmVyU2l6ZSA9IDEwMDA7XHJcblxyXG5jb25zdCBkb3dubG9hZEFuZFVuemlwID0gYXN5bmMgKFxyXG4gIHVybDogc3RyaW5nLFxyXG4gIG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNcclxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgY29uc3QgemlwRmlsZVBhdGggPSBqb2luKG9wdGlvbnMudG1wRGlyLCBvcHRpb25zLmFkZHJlc3NQb2ludHNaaXBGaWxlTmFtZSk7XHJcblxyXG4gIGNvbnNvbGUubG9nKFwiRG93bmxvYWRpbmcgYSBsYXJnZSBaSVAgZmlsZSB3aXRoIFJVSUFOIGRhdGEgKH42NSBNQikuLi5cIik7XHJcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xyXG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICBgVGhlIFpJUCBmaWxlIGNvdWxkIG5vdCBiZSBkb3dubG9hZGVkLiBIVFRQIENvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfWBcclxuICAgICk7XHJcbiAgfVxyXG4gIGF3YWl0IHBpcGVsaW5lKHJlc3BvbnNlLmJvZHksIGNyZWF0ZVdyaXRlU3RyZWFtKHppcEZpbGVQYXRoKSk7XHJcblxyXG4gIGNvbnNvbGUubG9nKFwiRmluaXNoZWQgZG93bmxvYWRpbmcuXCIpO1xyXG4gIGNvbnN0IHppcCA9IG5ldyBBZG1aaXAoemlwRmlsZVBhdGgpO1xyXG5cclxuICBjb25zb2xlLmxvZyhgU3RhcnRpbmcgdG8gdW56aXAgQ1NWIGZpbGVzIHRvICcke29wdGlvbnMudG1wRGlyfSdgKTtcclxuICB6aXAuZXh0cmFjdEFsbFRvKG9wdGlvbnMudG1wRGlyLCB0cnVlKTtcclxuICBjb25zb2xlLmxvZyhcIlVuemlwIGNvbXBsZXRlZC5cIik7XHJcblxyXG4gIHJtU3luYyh6aXBGaWxlUGF0aCk7XHJcbiAgY29uc29sZS5sb2coXCJSZW1vdmVkIHRoZSBaSVAgZmlsZS5cIik7XHJcbn07XHJcblxyXG5jb25zdCBpbXBvcnREYXRhVG9EYiA9IGFzeW5jIChvcHRpb25zOiBPcGVuRGF0YVN5bmNPcHRpb25zKSA9PiB7XHJcbiAgY29uc3QgZXh0cmFjdGlvbkZvbGRlciA9IGdldEV4dHJhY3Rpb25Gb2xkZXIob3B0aW9ucyk7XHJcblxyXG4gIGNvbnN0IGZpbGVzID0gcmVhZGRpclN5bmMoZXh0cmFjdGlvbkZvbGRlcik7XHJcblxyXG4gIGxldCB0b3RhbCA9IDA7XHJcbiAgbGV0IG5leHQgPSAwO1xyXG5cclxuICBjb25zb2xlLmxvZyhcclxuICAgIFwiSW5pdGlhdGluZyBpbXBvcnQgb2YgUlVJQU4gZGF0YSB0byBzZWFyY2ggREIgKH4zIG1pbGxpb24gcm93cyB0byBiZSBpbXBvcnRlZCkuXCJcclxuICApO1xyXG5cclxuICBjb25zdCBhbGxJZHMgPSBuZXcgU2V0PG51bWJlcj4oKTtcclxuXHJcbiAgZm9yIChjb25zdCBbaSwgZmlsZV0gb2YgZmlsZXMuZW50cmllcygpKSB7XHJcbiAgICBjb25zdCByb3dzOiBzdHJpbmdbXVtdID0gW107XHJcbiAgICBjb25zdCBwYXJzZVN0cmVhbSA9IHBhcnNlKHsgZGVsaW1pdGVyOiBcIjtcIiwgZnJvbUxpbmU6IDIgfSkub24oXHJcbiAgICAgIFwiZGF0YVwiLFxyXG4gICAgICBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgIHJvd3MucHVzaChkYXRhKTtcclxuICAgICAgICBhbGxJZHMuYWRkKHBhcnNlSW50KGRhdGFbMF0pKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBhd2FpdCBwaXBlbGluZShcclxuICAgICAgY3JlYXRlUmVhZFN0cmVhbShqb2luKGV4dHJhY3Rpb25Gb2xkZXIsIGZpbGUpKSxcclxuICAgICAgaWNvbnYuZGVjb2RlU3RyZWFtKFwid2luMTI1MFwiKSxcclxuICAgICAgcGFyc2VTdHJlYW1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgY2h1bmtzID0gY2h1bmsocm93cywgbWF4QnVmZmVyU2l6ZSk7XHJcblxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIGNodW5rcy5tYXAoYXN5bmMgKGNodW5rKSA9PiB7XHJcbiAgICAgICAgdG90YWwgKz0gYXdhaXQgY29tbWl0QWRkcmVzc1BvaW50cyhjaHVuayk7XHJcblxyXG4gICAgICAgIGlmICh0b3RhbCAtIG5leHQgPj0gMTAwMDAwKSB7XHJcbiAgICAgICAgICBuZXh0ICs9IDEwMDAwMDtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGBUb3RhbCBpbXBvcnRlZCByb3dzOiAke25leHR9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhgJHtpICsgMX0vJHtmaWxlcy5sZW5ndGh9IGZpbGVzIGltcG9ydGVkLmApO1xyXG4gIH1cclxuXHJcbiAgYXdhaXQgcmVtb3ZlRGVwcmVjYXRlZEFkZHJlc3NQb2ludHMoYWxsSWRzKTtcclxuXHJcbiAgY29uc29sZS5sb2coYEltcG9ydCBjb21wbGV0ZWQuIFRvdGFsIGltcG9ydGVkIHJvd3M6ICR7dG90YWx9YCk7XHJcbn07XHJcblxyXG5jb25zdCBnZXRFeHRyYWN0aW9uRm9sZGVyID0gKG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnMpID0+XHJcbiAgam9pbihvcHRpb25zLnRtcERpciwgb3B0aW9ucy5hZGRyZXNzUG9pbnRzQ3N2Rm9sZGVyTmFtZSk7XHJcblxyXG5leHBvcnQgY29uc3QgZG93bmxvYWRBbmRJbXBvcnRBZGRyZXNzUG9pbnRzID0gYXN5bmMgKFxyXG4gIG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNQYXJ0aWFsID0ge31cclxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgYXdhaXQgcnVuU3luY1BhcnQoU3luY1BhcnQuQWRkcmVzc1BvaW50cywgW10sIGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IGNvbXBsZXRlT3B0aW9ucyA9IHByZXBhcmVPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgY29uc3QgZGF0YXNldEZlZWRMaW5rID0gYXdhaXQgZ2V0TGF0ZXN0VXJsRnJvbUF0b21GZWVkKFxyXG4gICAgICBjb21wbGV0ZU9wdGlvbnMuYWRkcmVzc1BvaW50c0F0b21VcmxcclxuICAgICk7XHJcbiAgICBjb25zdCB6aXBVcmwgPSBhd2FpdCBnZXRMYXRlc3RVcmxGcm9tQXRvbUZlZWQoZGF0YXNldEZlZWRMaW5rKTtcclxuICAgIC8vIGF3YWl0IGRvd25sb2FkQW5kVW56aXAoemlwVXJsLCBjb21wbGV0ZU9wdGlvbnMpO1xyXG4gICAgYXdhaXQgaW1wb3J0RGF0YVRvRGIoY29tcGxldGVPcHRpb25zKTtcclxuICB9KTtcclxufTtcclxuIl19
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1wb2ludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3Blbi1kYXRhLXN5bmMvYWRkcmVzcy1wb2ludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDOUUsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEtBQUssTUFBTSxjQUFjLENBQUM7QUFDakMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQiw2QkFBNkIsR0FDOUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBR0wsY0FBYyxHQUNmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFFM0IsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLEVBQzVCLEdBQVcsRUFDWCxPQUE0QixFQUNiLEVBQUU7SUFDakIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFFM0UsT0FBTyxDQUFDLEdBQUcsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO0lB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QUMsTUFBTSxDQUFDLENBQUM7SUFFNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNqRSxDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsT0FBNEIsRUFBRSxFQUFFLENBQzNELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLEtBQUssRUFDakQsVUFBc0MsRUFBRSxFQUN6QixFQUFFO0lBQ2pCLE1BQU0sV0FBVyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3ZELE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxNQUFNLGVBQWUsR0FBRyxNQUFNLHdCQUF3QixDQUNwRCxlQUFlLENBQUMsb0JBQW9CLENBQ3JDLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLHdCQUF3QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sZ0JBQWdCLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3hDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEFkbVppcCBmcm9tIFwiYWRtLXppcFwiO1xyXG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gXCJjc3YtcGFyc2VcIjtcclxuaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSwgY3JlYXRlV3JpdGVTdHJlYW0sIHJlYWRkaXJTeW5jLCBybVN5bmMgfSBmcm9tIFwiZnNcIjtcclxuaW1wb3J0IGljb252IGZyb20gXCJpY29udi1saXRlXCI7XHJcbmltcG9ydCBmZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiO1xyXG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcclxuaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tIFwic3RyZWFtL3Byb21pc2VzXCI7XHJcbmltcG9ydCBjaHVuayBmcm9tIFwibG9kYXNoL2NodW5rXCI7XHJcbmltcG9ydCB7XHJcbiAgY29tbWl0QWRkcmVzc1BvaW50cyxcclxuICByZW1vdmVEZXByZWNhdGVkQWRkcmVzc1BvaW50cyxcclxufSBmcm9tIFwiLi4vZGIvYWRkcmVzcy1wb2ludHNcIjtcclxuaW1wb3J0IHsgU3luY1BhcnQgfSBmcm9tIFwiLi4vZGIvdHlwZXNcIjtcclxuaW1wb3J0IHsgZ2V0TGF0ZXN0VXJsRnJvbUF0b21GZWVkIH0gZnJvbSBcIi4uL3V0aWxzL2F0b21cIjtcclxuaW1wb3J0IHtcclxuICBPcGVuRGF0YVN5bmNPcHRpb25zLFxyXG4gIE9wZW5EYXRhU3luY09wdGlvbnNQYXJ0aWFsLFxyXG4gIHByZXBhcmVPcHRpb25zLFxyXG59IGZyb20gXCIuLi91dGlscy9oZWxwZXJzXCI7XHJcbmltcG9ydCB7IHJ1blN5bmNQYXJ0IH0gZnJvbSBcIi4vY29tbW9uXCI7XHJcblxyXG5jb25zdCBtYXhCdWZmZXJTaXplID0gMTAwMDtcclxuXHJcbmNvbnN0IGRvd25sb2FkQW5kVW56aXAgPSBhc3luYyAoXHJcbiAgdXJsOiBzdHJpbmcsXHJcbiAgb3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9uc1xyXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICBjb25zdCB6aXBGaWxlUGF0aCA9IGpvaW4ob3B0aW9ucy50bXBEaXIsIG9wdGlvbnMuYWRkcmVzc1BvaW50c1ppcEZpbGVOYW1lKTtcclxuXHJcbiAgY29uc29sZS5sb2coXCJEb3dubG9hZGluZyBhIGxhcmdlIFpJUCBmaWxlIHdpdGggUlVJQU4gZGF0YSAofjY1IE1CKS4uLlwiKTtcclxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XHJcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgIGBUaGUgWklQIGZpbGUgY291bGQgbm90IGJlIGRvd25sb2FkZWQuIEhUVFAgQ29kZTogJHtyZXNwb25zZS5zdGF0dXN9YFxyXG4gICAgKTtcclxuICB9XHJcbiAgYXdhaXQgcGlwZWxpbmUocmVzcG9uc2UuYm9keSwgY3JlYXRlV3JpdGVTdHJlYW0oemlwRmlsZVBhdGgpKTtcclxuXHJcbiAgY29uc29sZS5sb2coXCJGaW5pc2hlZCBkb3dubG9hZGluZy5cIik7XHJcbiAgY29uc3QgemlwID0gbmV3IEFkbVppcCh6aXBGaWxlUGF0aCk7XHJcblxyXG4gIGNvbnNvbGUubG9nKGBTdGFydGluZyB0byB1bnppcCBDU1YgZmlsZXMgdG8gJyR7b3B0aW9ucy50bXBEaXJ9J2ApO1xyXG4gIHppcC5leHRyYWN0QWxsVG8ob3B0aW9ucy50bXBEaXIsIHRydWUpO1xyXG4gIGNvbnNvbGUubG9nKFwiVW56aXAgY29tcGxldGVkLlwiKTtcclxuXHJcbiAgcm1TeW5jKHppcEZpbGVQYXRoKTtcclxuICBjb25zb2xlLmxvZyhcIlJlbW92ZWQgdGhlIFpJUCBmaWxlLlwiKTtcclxufTtcclxuXHJcbmNvbnN0IGltcG9ydERhdGFUb0RiID0gYXN5bmMgKG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnMpID0+IHtcclxuICBjb25zdCBleHRyYWN0aW9uRm9sZGVyID0gZ2V0RXh0cmFjdGlvbkZvbGRlcihvcHRpb25zKTtcclxuXHJcbiAgY29uc3QgZmlsZXMgPSByZWFkZGlyU3luYyhleHRyYWN0aW9uRm9sZGVyKTtcclxuXHJcbiAgbGV0IHRvdGFsID0gMDtcclxuICBsZXQgbmV4dCA9IDA7XHJcblxyXG4gIGNvbnNvbGUubG9nKFxyXG4gICAgXCJJbml0aWF0aW5nIGltcG9ydCBvZiBSVUlBTiBkYXRhIHRvIHNlYXJjaCBEQiAofjMgbWlsbGlvbiByb3dzIHRvIGJlIGltcG9ydGVkKS5cIlxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGFsbElkcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG5cclxuICBmb3IgKGNvbnN0IFtpLCBmaWxlXSBvZiBmaWxlcy5lbnRyaWVzKCkpIHtcclxuICAgIGNvbnN0IHJvd3M6IHN0cmluZ1tdW10gPSBbXTtcclxuICAgIGNvbnN0IHBhcnNlU3RyZWFtID0gcGFyc2UoeyBkZWxpbWl0ZXI6IFwiO1wiLCBmcm9tTGluZTogMiB9KS5vbihcclxuICAgICAgXCJkYXRhXCIsXHJcbiAgICAgIGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgcm93cy5wdXNoKGRhdGEpO1xyXG4gICAgICAgIGFsbElkcy5hZGQocGFyc2VJbnQoZGF0YVswXSkpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGF3YWl0IHBpcGVsaW5lKFxyXG4gICAgICBjcmVhdGVSZWFkU3RyZWFtKGpvaW4oZXh0cmFjdGlvbkZvbGRlciwgZmlsZSkpLFxyXG4gICAgICBpY29udi5kZWNvZGVTdHJlYW0oXCJ3aW4xMjUwXCIpLFxyXG4gICAgICBwYXJzZVN0cmVhbVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjaHVua3MgPSBjaHVuayhyb3dzLCBtYXhCdWZmZXJTaXplKTtcclxuXHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgY2h1bmtzLm1hcChhc3luYyAoY2h1bmspID0+IHtcclxuICAgICAgICB0b3RhbCArPSBhd2FpdCBjb21taXRBZGRyZXNzUG9pbnRzKGNodW5rKTtcclxuXHJcbiAgICAgICAgaWYgKHRvdGFsIC0gbmV4dCA+PSAxMDAwMDApIHtcclxuICAgICAgICAgIG5leHQgKz0gMTAwMDAwO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYFRvdGFsIGltcG9ydGVkIHJvd3M6ICR7bmV4dH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKGAke2kgKyAxfS8ke2ZpbGVzLmxlbmd0aH0gZmlsZXMgaW1wb3J0ZWQuYCk7XHJcbiAgfVxyXG5cclxuICBhd2FpdCByZW1vdmVEZXByZWNhdGVkQWRkcmVzc1BvaW50cyhhbGxJZHMpO1xyXG5cclxuICBjb25zb2xlLmxvZyhgSW1wb3J0IGNvbXBsZXRlZC4gVG90YWwgaW1wb3J0ZWQgcm93czogJHt0b3RhbH1gKTtcclxufTtcclxuXHJcbmNvbnN0IGdldEV4dHJhY3Rpb25Gb2xkZXIgPSAob3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9ucykgPT5cclxuICBqb2luKG9wdGlvbnMudG1wRGlyLCBvcHRpb25zLmFkZHJlc3NQb2ludHNDc3ZGb2xkZXJOYW1lKTtcclxuXHJcbmV4cG9ydCBjb25zdCBkb3dubG9hZEFuZEltcG9ydEFkZHJlc3NQb2ludHMgPSBhc3luYyAoXHJcbiAgb3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9uc1BhcnRpYWwgPSB7fVxyXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICBhd2FpdCBydW5TeW5jUGFydChTeW5jUGFydC5BZGRyZXNzUG9pbnRzLCBbXSwgYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc3QgY29tcGxldGVPcHRpb25zID0gcHJlcGFyZU9wdGlvbnMob3B0aW9ucyk7XHJcbiAgICBjb25zdCBkYXRhc2V0RmVlZExpbmsgPSBhd2FpdCBnZXRMYXRlc3RVcmxGcm9tQXRvbUZlZWQoXHJcbiAgICAgIGNvbXBsZXRlT3B0aW9ucy5hZGRyZXNzUG9pbnRzQXRvbVVybFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHppcFVybCA9IGF3YWl0IGdldExhdGVzdFVybEZyb21BdG9tRmVlZChkYXRhc2V0RmVlZExpbmspO1xyXG4gICAgYXdhaXQgZG93bmxvYWRBbmRVbnppcCh6aXBVcmwsIGNvbXBsZXRlT3B0aW9ucyk7XHJcbiAgICBhd2FpdCBpbXBvcnREYXRhVG9EYihjb21wbGV0ZU9wdGlvbnMpO1xyXG4gIH0pO1xyXG59O1xyXG4iXX0=
@@ -1,2 +1,2 @@
1
1
  import { OpenDataSyncOptionsPartial } from "../utils/helpers";
2
- export declare const downloadAndImportStreets: (options?: OpenDataSyncOptionsPartial) => Promise<void>;
2
+ export declare const downloadAndImportStreets: (options?: OpenDataSyncOptionsPartial, noCache?: boolean) => Promise<void>;
@@ -7,7 +7,7 @@ import ShpToGeoJson from "shp-to-geojson";
7
7
  import { pipeline } from "stream/promises";
8
8
  import { coordEach } from "@turf/meta";
9
9
  import { setCityPolygonGeojson } from "../db/cities";
10
- import { deleteStreets, getAllSyncedStreets, insertStreetsFromDbf, setStreetAsSynced, } from "../db/street-sync";
10
+ import { clearStreetSyncTable, deleteStreets, getAllSyncedStreets, insertStreetsFromDbf, setStreetAsSynced, } from "../db/street-sync";
11
11
  import { SyncPart } from "../db/types";
12
12
  import { getAllUrlsFromAtomFeed, getLatestUrlFromAtomFeed, } from "../utils/atom";
13
13
  import { prepareOptions, } from "../utils/helpers";
@@ -70,11 +70,16 @@ const importDataToDb = async ({ streetData, cityCode, polygonData, districtsPoly
70
70
  await setCityPolygonGeojson(cityCode, polygonData, districtsPolygonData);
71
71
  };
72
72
  const attempts = 5;
73
- export const downloadAndImportStreets = async (options = {}) => {
73
+ export const downloadAndImportStreets = async (options = {}, noCache = false) => {
74
74
  await runSyncPart(SyncPart.Streets, [SyncPart.AddressPoints], async () => {
75
75
  console.log("Starting to download and import streets. This takes up to 1 hour.");
76
76
  const completeOptions = prepareOptions(options);
77
77
  prepareFolders(completeOptions);
78
+ // Clear street sync table if no-cache flag is set
79
+ if (noCache) {
80
+ console.log("Clearing street sync cache...");
81
+ await clearStreetSyncTable();
82
+ }
78
83
  const allDatasetFeedLinks = await getAllUrlsFromAtomFeed(completeOptions.streetsAtomUrl);
79
84
  console.log(`Total of ${allDatasetFeedLinks.length} links to ZIP files.`);
80
85
  const syncedStreetLinks = await getAllSyncedStreets();
@@ -124,4 +129,4 @@ export const downloadAndImportStreets = async (options = {}) => {
124
129
  const wait = async (ms) => {
125
130
  await new Promise((resolve) => setTimeout(resolve, ms));
126
131
  };
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuLWRhdGEtc3luYy9zdHJlZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUU3QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDdEUsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUczQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsaUJBQWlCLEdBQ2xCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFhLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHdCQUF3QixHQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsY0FBYyxHQUNmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2QyxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQTRCLEVBQUUsRUFBRTtJQUN0RCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxV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QUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEFkbVppcCBmcm9tIFwiYWRtLXppcFwiO1xyXG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tIFwiYnVmZmVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtLCBleGlzdHNTeW5jLCBta2RpclN5bmMsIHJtU3luYyB9IGZyb20gXCJmc1wiO1xyXG5pbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIjtcclxuaW1wb3J0IHBhcnNlREJGIGZyb20gXCJwYXJzZWRiZlwiO1xyXG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcclxuaW1wb3J0IFNocFRvR2VvSnNvbiBmcm9tIFwic2hwLXRvLWdlb2pzb25cIjtcclxuaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tIFwic3RyZWFtL3Byb21pc2VzXCI7XHJcblxyXG5pbXBvcnQgeyBGZWF0dXJlQ29sbGVjdGlvbiB9IGZyb20gXCJAdHVyZi9oZWxwZXJzXCI7XHJcbmltcG9ydCB7IGNvb3JkRWFjaCB9IGZyb20gXCJAdHVyZi9tZXRhXCI7XHJcbmltcG9ydCB7IHNldENpdHlQb2x5Z29uR2VvanNvbiB9IGZyb20gXCIuLi9kYi9jaXRpZXNcIjtcclxuaW1wb3J0IHtcclxuICBkZWxldGVTdHJlZXRzLFxyXG4gIGdldEFsbFN5bmNlZFN0cmVldHMsXHJcbiAgaW5zZXJ0U3RyZWV0c0Zyb21EYmYsXHJcbiAgc2V0U3RyZWV0QXNTeW5jZWQsXHJcbn0gZnJvbSBcIi4uL2RiL3N0cmVldC1zeW5jXCI7XHJcbmltcG9ydCB7IERiZlN0cmVldCwgU3luY1BhcnQgfSBmcm9tIFwiLi4vZGIvdHlwZXNcIjtcclxuaW1wb3J0IHtcclxuICBnZXRBbGxVcmxzRnJvbUF0b21GZWVkLFxyXG4gIGdldExhdGVzdFVybEZyb21BdG9tRmVlZCxcclxufSBmcm9tIFwiLi4vdXRpbHMvYXRvbVwiO1xyXG5pbXBvcnQge1xyXG4gIE9wZW5EYXRhU3luY09wdGlvbnMsXHJcbiAgT3BlbkRhdGFTeW5jT3B0aW9uc1BhcnRpYWwsXHJcbiAgcHJlcGFyZU9wdGlvbnMsXHJcbn0gZnJvbSBcIi4uL3V0aWxzL2hlbHBlcnNcIjtcclxuaW1wb3J0IGp0c2syd2dzODQgZnJvbSBcIi4uL3V0aWxzL2p0c2syd2dzODRcIjtcclxuaW1wb3J0IHsgcnVuU3luY1BhcnQgfSBmcm9tIFwiLi9jb21tb25cIjtcclxuXHJcbmNvbnN0IHByZXBhcmVGb2xkZXJzID0gKG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnMpID0+IHtcclxuICBjb25zdCB0ZW1wRm9sZGVyID0gZ2V0VGVtcEZvbGRlcihvcHRpb25zKTtcclxuICBpZiAoIWV4aXN0c1N5bmModGVtcEZvbGRlcikpIHtcclxuICAgIG1rZGlyU3luYyh0ZW1wRm9sZGVyKTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBnZXRUZW1wRm9sZGVyID0gKG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnMpID0+IHtcclxuICByZXR1cm4gam9pbihvcHRpb25zLnRtcERpciwgb3B0aW9ucy5zdHJlZXRaaXBGb2xkZXJOYW1lKTtcclxufTtcclxuXHJcbmNvbnN0IGRvd25sb2FkWmlwQW5kUGFyc2VGaWxlcyA9IGFzeW5jIChcclxuICB1cmw6IHN0cmluZyxcclxuICBpbmRleDogbnVtYmVyLFxyXG4gIG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNcclxuKTogUHJvbWlzZTx7XHJcbiAgc3RyZWV0RGF0YTogRGJmU3RyZWV0W107XHJcbiAgcG9seWdvbkRhdGE6IEZlYXR1cmVDb2xsZWN0aW9uO1xyXG4gIGRpc3RyaWN0c1BvbHlnb25EYXRhPzogRmVhdHVyZUNvbGxlY3Rpb247XHJcbiAgY2l0eUNvZGU6IHN0cmluZztcclxufT4gPT4ge1xyXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcclxuICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgYFRoZSBaSVAgZmlsZSBmcm9tICcke3VybH0nIGNvdWxkIG5vdCBiZSBkb3dubG9hZGVkLiBIVFRQIENvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfWBcclxuICAgICk7XHJcbiAgfVxyXG4gIGNvbnN0IHppcEZpbGVQYXRoID0gam9pbihnZXRUZW1wRm9sZGVyKG9wdGlvbnMpLCBgc3RyZWV0JHtpbmRleH0uemlwYCk7XHJcbiAgYXdhaXQgcGlwZWxpbmUocmVzcG9uc2UuYm9keSwgY3JlYXRlV3JpdGVTdHJlYW0oemlwRmlsZVBhdGgpKTtcclxuXHJcbiAgY29uc3QgemlwID0gbmV3IEFkbVppcCh6aXBGaWxlUGF0aCk7XHJcbiAgY29uc3QgZm9sZGVyTmFtZSA9IHppcC5nZXRFbnRyaWVzKClbMF0uZW50cnlOYW1lO1xyXG4gIGNvbnN0IGNpdHlDb2RlID0gZm9sZGVyTmFtZS5zdWJzdHJpbmcoMCwgNik7XHJcbiAgY29uc3QgZGJmRW50cnlOYW1lID0gYCR7Zm9sZGVyTmFtZX0ke29wdGlvbnMuc3RyZWV0RGJmRmlsZU5hbWV9YDtcclxuICBjb25zdCBzdHJlZXREYXRhID0gcGFyc2VEQkYoemlwLmdldEVudHJ5KGRiZkVudHJ5TmFtZSkuZ2V0RGF0YSgpLCBcIndpbjEyNTBcIik7XHJcblxyXG4gIGNvbnN0IHNocEVudHJ5TmFtZSA9IGAke2ZvbGRlck5hbWV9JHtvcHRpb25zLnBvbHlnb25TaHBGaWxlTmFtZX1gO1xyXG4gIGNvbnN0IHBvbHlnb25EYXRhID0gY29udmVydFNocFRvR2VvSnNvbih6aXAuZ2V0RW50cnkoc2hwRW50cnlOYW1lKS5nZXREYXRhKCkpO1xyXG5cclxuICBjb25zdCBkaXN0cmljdFNocEVudHJ5TmFtZSA9IGAke2ZvbGRlck5hbWV9JHtvcHRpb25zLmRpc3RyaWN0UG9seWdvblNocEZpbGVOYW1lfWA7XHJcbiAgY29uc3QgZGlzdHJpY3RTaHBFbnRyeSA9IHppcC5nZXRFbnRyeShkaXN0cmljdFNocEVudHJ5TmFtZSk7XHJcblxyXG4gIGxldCBkaXN0cmljdHNQb2x5Z29uRGF0YTogRmVhdHVyZUNvbGxlY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgaWYgKGRpc3RyaWN0U2hwRW50cnkgIT09IG51bGwpIHtcclxuICAgIGNvbnN0IGRpc3RyaWN0RGJmRW50cnlOYW1lID0gYCR7Zm9sZGVyTmFtZX0ke29wdGlvbnMuZGlzdHJpY3RQb2x5Z29uRGJmRmlsZU5hbWV9YDtcclxuICAgIGRpc3RyaWN0c1BvbHlnb25EYXRhID0gY29udmVydFNocFRvR2VvSnNvbihcclxuICAgICAgZGlzdHJpY3RTaHBFbnRyeS5nZXREYXRhKCksXHJcbiAgICAgIHppcC5nZXRFbnRyeShkaXN0cmljdERiZkVudHJ5TmFtZSkuZ2V0RGF0YSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcm1TeW5jKHppcEZpbGVQYXRoKTtcclxuICByZXR1cm4geyBzdHJlZXREYXRhLCBwb2x5Z29uRGF0YSwgZGlzdHJpY3RzUG9seWdvbkRhdGEsIGNpdHlDb2RlIH07XHJcbn07XHJcblxyXG5jb25zdCBjb252ZXJ0U2hwVG9HZW9Kc29uID0gKFxyXG4gIHNocEJ1ZmZlcjogQnVmZmVyLFxyXG4gIGRiZkJ1ZmZlcj86IEJ1ZmZlclxyXG4pOiBGZWF0dXJlQ29sbGVjdGlvbiA9PiB7XHJcbiAgY29uc3Qgc2hwID0gbmV3IFNocFRvR2VvSnNvbih7XHJcbiAgICBhcnJheWJ1ZmZlcnM6IHtcclxuICAgICAgc2hwQnVmZmVyLFxyXG4gICAgICAuLi4oZGJmQnVmZmVyID8geyBkYmZCdWZmZXIgfSA6IHt9KSxcclxuICAgIH0sXHJcbiAgfSk7XHJcbiAgY29uc3QgZ2VvSnNvbiA9IHNocC5nZXRHZW9Kc29uKCk7XHJcbiAgZGVsZXRlIGdlb0pzb24uYmJveDtcclxuXHJcbiAgY29vcmRFYWNoKGdlb0pzb24sIChjdXJyZW50Q29vcmQpID0+IHtcclxuICAgIGNvbnN0IFt5LCB4XSA9IGN1cnJlbnRDb29yZDtcclxuICAgIGNvbnN0IHsgbGF0LCBsb24gfSA9IGp0c2syd2dzODQoLXgsIC15KTtcclxuICAgIGN1cnJlbnRDb29yZFswXSA9IGxvbjtcclxuICAgIGN1cnJlbnRDb29yZFsxXSA9IGxhdDtcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIGdlb0pzb247XHJcbn07XHJcblxyXG5jb25zdCBpbXBvcnREYXRhVG9EYiA9IGFzeW5jICh7XHJcbiAgc3RyZWV0RGF0YSxcclxuICBjaXR5Q29kZSxcclxuICBwb2x5Z29uRGF0YSxcclxuICBkaXN0cmljdHNQb2x5Z29uRGF0YSxcclxufToge1xyXG4gIHN0cmVldERhdGE6IERiZlN0cmVldFtdO1xyXG4gIGNpdHlDb2RlOiBzdHJpbmc7XHJcbiAgcG9seWdvbkRhdGE6IEZlYXR1cmVDb2xsZWN0aW9uO1xyXG4gIGRpc3RyaWN0c1BvbHlnb25EYXRhPzogRmVhdHVyZUNvbGxlY3Rpb247XHJcbn0pID0+IHtcclxuICBpZiAoc3RyZWV0RGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICBhd2FpdCBpbnNlcnRTdHJlZXRzRnJvbURiZihzdHJlZXREYXRhKTtcclxuICB9XHJcbiAgYXdhaXQgc2V0Q2l0eVBvbHlnb25HZW9qc29uKGNpdHlDb2RlLCBwb2x5Z29uRGF0YSwgZGlzdHJpY3RzUG9seWdvbkRhdGEpO1xyXG59O1xyXG5cclxuY29uc3QgYXR0ZW1wdHMgPSA1O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRvd25sb2FkQW5kSW1wb3J0U3RyZWV0cyA9IGFzeW5jIChcclxuICBvcHRpb25zOiBPcGVuRGF0YVN5bmNPcHRpb25zUGFydGlhbCA9IHt9XHJcbik6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGF3YWl0IHJ1blN5bmNQYXJ0KFN5bmNQYXJ0LlN0cmVldHMsIFtTeW5jUGFydC5BZGRyZXNzUG9pbnRzXSwgYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc29sZS5sb2coXHJcbiAgICAgIFwiU3RhcnRpbmcgdG8gZG93bmxvYWQgYW5kIGltcG9ydCBzdHJlZXRzLiBUaGlzIHRha2VzIHVwIHRvIDEgaG91ci5cIlxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjb21wbGV0ZU9wdGlvbnMgPSBwcmVwYXJlT3B0aW9ucyhvcHRpb25zKTtcclxuICAgIHByZXBhcmVGb2xkZXJzKGNvbXBsZXRlT3B0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgYWxsRGF0YXNldEZlZWRMaW5rcyA9IGF3YWl0IGdldEFsbFVybHNGcm9tQXRvbUZlZWQoXHJcbiAgICAgIGNvbXBsZXRlT3B0aW9ucy5zdHJlZXRzQXRvbVVybFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhgVG90YWwgb2YgJHthbGxEYXRhc2V0RmVlZExpbmtzLmxlbmd0aH0gbGlua3MgdG8gWklQIGZpbGVzLmApO1xyXG5cclxuICAgIGNvbnN0IHN5bmNlZFN0cmVldExpbmtzID0gYXdhaXQgZ2V0QWxsU3luY2VkU3RyZWV0cygpO1xyXG5cclxuICAgIGNvbnN0IHRvRGVsZXRlOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgLy8gcmVtb3ZlIGFsbCBkZXByZWNhdGVkIGxpbmtzIChub3QgaW4gdGhlIG5ldyBsaXN0KVxyXG4gICAgc3luY2VkU3RyZWV0TGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xyXG4gICAgICBpZiAoIWFsbERhdGFzZXRGZWVkTGlua3MuaW5jbHVkZXMobGluaykpIHtcclxuICAgICAgICB0b0RlbGV0ZS5wdXNoKGxpbmspO1xyXG4gICAgICAgIGRlbGV0ZSBzeW5jZWRTdHJlZXRMaW5rc1tsaW5rXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgYXdhaXQgZGVsZXRlU3RyZWV0cyh0b0RlbGV0ZSk7XHJcblxyXG4gICAgbGV0IGRvbmUgPSBzeW5jZWRTdHJlZXRMaW5rcy5zaXplO1xyXG4gICAgY29uc29sZS5sb2coYFRvdGFsIG9mICR7ZG9uZX0gbGlua3MgdG8gWklQIGZpbGVzIGFscmVhZHkgc3RvcmVkLmApO1xyXG5cclxuICAgIC8vIGdldCBhbGwgbGlua3Mgbm90IHlldCBzdG9yZWRcclxuICAgIGNvbnN0IG5ld0xpbmtzID0gYWxsRGF0YXNldEZlZWRMaW5rcy5maWx0ZXIoXHJcbiAgICAgIChsaW5rKSA9PiAhc3luY2VkU3RyZWV0TGlua3MuaGFzKGxpbmspXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBkZWxheSA9IDA7XHJcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyAke25ld0xpbmtzLmxlbmd0aH0gbmV3IGxpbmtzIHRvIFpJUCBmaWxlcy5gKTtcclxuICAgIGZvciAoY29uc3QgbGluayBvZiBuZXdMaW5rcykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dGVtcHRzOyBpKyspIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgemlwTGluayA9IGF3YWl0IGdldExhdGVzdFVybEZyb21BdG9tRmVlZChsaW5rKTtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBkb3dubG9hZFppcEFuZFBhcnNlRmlsZXMoXHJcbiAgICAgICAgICAgIHppcExpbmssXHJcbiAgICAgICAgICAgIGRvbmUsXHJcbiAgICAgICAgICAgIGNvbXBsZXRlT3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGF3YWl0IGltcG9ydERhdGFUb0RiKGRhdGEpO1xyXG4gICAgICAgICAgYXdhaXQgc2V0U3RyZWV0QXNTeW5jZWQobGluayk7XHJcblxyXG4gICAgICAgICAgZG9uZSsrO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRlZCBsaW5rczogJHtkb25lfS8ke2FsbERhdGFzZXRGZWVkTGlua3MubGVuZ3RofWApO1xyXG4gICAgICAgICAgYXdhaXQgd2FpdChkZWxheSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgaWYgKGkgPCBhdHRlbXB0cyAtIDEpIHtcclxuICAgICAgICAgICAgZGVsYXkgKz0gMTAwOyAvLyBpZiBlcnJvciBvY2N1cmVkLCBpdCBpcyBsaWtlbHkgdG8gcmVwZWF0IHNvIHdlIHdhaXQgYSBiaXQgbG9uZ2VyXHJcbiAgICAgICAgICAgIGNvbnN0IHdhaXRUaW1lID0gKGkgKyAxKSAqIDM7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgYEVycm9yIGNvbm5lY3RpbmcgdG8gQ1VaSyBzZXJ2ZXJzLCByZXRyeWluZyBpbiAke3dhaXRUaW1lfSBzZWNvbmRzLi4uYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIGF3YWl0IHdhaXQod2FpdFRpbWUgKiAxMDAwKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59O1xyXG5cclxuY29uc3Qgd2FpdCA9IGFzeW5jIChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxufTtcclxuIl19
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVuLWRhdGEtc3luYy9zdHJlZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUU3QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDdEUsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUczQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLGlCQUFpQixHQUNsQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBYSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix3QkFBd0IsR0FDekIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGNBQWMsR0FDZixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFdkMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUE0QixFQUFFLEVBQUU7SUFDdEQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FB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QyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBVSxFQUFpQixFQUFFO0lBQy9DLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQWRtWmlwIGZyb20gXCJhZG0temlwXCI7XHJcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCJidWZmZXJcIjtcclxuaW1wb3J0IHsgY3JlYXRlV3JpdGVTdHJlYW0sIGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcm1TeW5jIH0gZnJvbSBcImZzXCI7XHJcbmltcG9ydCBmZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiO1xyXG5pbXBvcnQgcGFyc2VEQkYgZnJvbSBcInBhcnNlZGJmXCI7XHJcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xyXG5pbXBvcnQgU2hwVG9HZW9Kc29uIGZyb20gXCJzaHAtdG8tZ2VvanNvblwiO1xyXG5pbXBvcnQgeyBwaXBlbGluZSB9IGZyb20gXCJzdHJlYW0vcHJvbWlzZXNcIjtcclxuXHJcbmltcG9ydCB7IEZlYXR1cmVDb2xsZWN0aW9uIH0gZnJvbSBcIkB0dXJmL2hlbHBlcnNcIjtcclxuaW1wb3J0IHsgY29vcmRFYWNoIH0gZnJvbSBcIkB0dXJmL21ldGFcIjtcclxuaW1wb3J0IHsgc2V0Q2l0eVBvbHlnb25HZW9qc29uIH0gZnJvbSBcIi4uL2RiL2NpdGllc1wiO1xyXG5pbXBvcnQge1xyXG4gIGNsZWFyU3RyZWV0U3luY1RhYmxlLFxyXG4gIGRlbGV0ZVN0cmVldHMsXHJcbiAgZ2V0QWxsU3luY2VkU3RyZWV0cyxcclxuICBpbnNlcnRTdHJlZXRzRnJvbURiZixcclxuICBzZXRTdHJlZXRBc1N5bmNlZCxcclxufSBmcm9tIFwiLi4vZGIvc3RyZWV0LXN5bmNcIjtcclxuaW1wb3J0IHsgRGJmU3RyZWV0LCBTeW5jUGFydCB9IGZyb20gXCIuLi9kYi90eXBlc1wiO1xyXG5pbXBvcnQge1xyXG4gIGdldEFsbFVybHNGcm9tQXRvbUZlZWQsXHJcbiAgZ2V0TGF0ZXN0VXJsRnJvbUF0b21GZWVkLFxyXG59IGZyb20gXCIuLi91dGlscy9hdG9tXCI7XHJcbmltcG9ydCB7XHJcbiAgT3BlbkRhdGFTeW5jT3B0aW9ucyxcclxuICBPcGVuRGF0YVN5bmNPcHRpb25zUGFydGlhbCxcclxuICBwcmVwYXJlT3B0aW9ucyxcclxufSBmcm9tIFwiLi4vdXRpbHMvaGVscGVyc1wiO1xyXG5pbXBvcnQganRzazJ3Z3M4NCBmcm9tIFwiLi4vdXRpbHMvanRzazJ3Z3M4NFwiO1xyXG5pbXBvcnQgeyBydW5TeW5jUGFydCB9IGZyb20gXCIuL2NvbW1vblwiO1xyXG5cclxuY29uc3QgcHJlcGFyZUZvbGRlcnMgPSAob3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9ucykgPT4ge1xyXG4gIGNvbnN0IHRlbXBGb2xkZXIgPSBnZXRUZW1wRm9sZGVyKG9wdGlvbnMpO1xyXG4gIGlmICghZXhpc3RzU3luYyh0ZW1wRm9sZGVyKSkge1xyXG4gICAgbWtkaXJTeW5jKHRlbXBGb2xkZXIpO1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGdldFRlbXBGb2xkZXIgPSAob3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9ucykgPT4ge1xyXG4gIHJldHVybiBqb2luKG9wdGlvbnMudG1wRGlyLCBvcHRpb25zLnN0cmVldFppcEZvbGRlck5hbWUpO1xyXG59O1xyXG5cclxuY29uc3QgZG93bmxvYWRaaXBBbmRQYXJzZUZpbGVzID0gYXN5bmMgKFxyXG4gIHVybDogc3RyaW5nLFxyXG4gIGluZGV4OiBudW1iZXIsXHJcbiAgb3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9uc1xyXG4pOiBQcm9taXNlPHtcclxuICBzdHJlZXREYXRhOiBEYmZTdHJlZXRbXTtcclxuICBwb2x5Z29uRGF0YTogRmVhdHVyZUNvbGxlY3Rpb247XHJcbiAgZGlzdHJpY3RzUG9seWdvbkRhdGE/OiBGZWF0dXJlQ29sbGVjdGlvbjtcclxuICBjaXR5Q29kZTogc3RyaW5nO1xyXG59PiA9PiB7XHJcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xyXG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICBgVGhlIFpJUCBmaWxlIGZyb20gJyR7dXJsfScgY291bGQgbm90IGJlIGRvd25sb2FkZWQuIEhUVFAgQ29kZTogJHtyZXNwb25zZS5zdGF0dXN9YFxyXG4gICAgKTtcclxuICB9XHJcbiAgY29uc3QgemlwRmlsZVBhdGggPSBqb2luKGdldFRlbXBGb2xkZXIob3B0aW9ucyksIGBzdHJlZXQke2luZGV4fS56aXBgKTtcclxuICBhd2FpdCBwaXBlbGluZShyZXNwb25zZS5ib2R5LCBjcmVhdGVXcml0ZVN0cmVhbSh6aXBGaWxlUGF0aCkpO1xyXG5cclxuICBjb25zdCB6aXAgPSBuZXcgQWRtWmlwKHppcEZpbGVQYXRoKTtcclxuICBjb25zdCBmb2xkZXJOYW1lID0gemlwLmdldEVudHJpZXMoKVswXS5lbnRyeU5hbWU7XHJcbiAgY29uc3QgY2l0eUNvZGUgPSBmb2xkZXJOYW1lLnN1YnN0cmluZygwLCA2KTtcclxuICBjb25zdCBkYmZFbnRyeU5hbWUgPSBgJHtmb2xkZXJOYW1lfSR7b3B0aW9ucy5zdHJlZXREYmZGaWxlTmFtZX1gO1xyXG4gIGNvbnN0IHN0cmVldERhdGEgPSBwYXJzZURCRjxEYmZTdHJlZXQ+KFxyXG4gICAgemlwLmdldEVudHJ5KGRiZkVudHJ5TmFtZSkuZ2V0RGF0YSgpLFxyXG4gICAgXCJ3aW4xMjUwXCJcclxuICApO1xyXG5cclxuICBjb25zdCBzaHBFbnRyeU5hbWUgPSBgJHtmb2xkZXJOYW1lfSR7b3B0aW9ucy5wb2x5Z29uU2hwRmlsZU5hbWV9YDtcclxuICBjb25zdCBwb2x5Z29uRGF0YSA9IGNvbnZlcnRTaHBUb0dlb0pzb24oemlwLmdldEVudHJ5KHNocEVudHJ5TmFtZSkuZ2V0RGF0YSgpKTtcclxuXHJcbiAgY29uc3QgZGlzdHJpY3RTaHBFbnRyeU5hbWUgPSBgJHtmb2xkZXJOYW1lfSR7b3B0aW9ucy5kaXN0cmljdFBvbHlnb25TaHBGaWxlTmFtZX1gO1xyXG4gIGNvbnN0IGRpc3RyaWN0U2hwRW50cnkgPSB6aXAuZ2V0RW50cnkoZGlzdHJpY3RTaHBFbnRyeU5hbWUpO1xyXG5cclxuICBsZXQgZGlzdHJpY3RzUG9seWdvbkRhdGE6IEZlYXR1cmVDb2xsZWN0aW9uID0gdW5kZWZpbmVkO1xyXG4gIGlmIChkaXN0cmljdFNocEVudHJ5ICE9PSBudWxsKSB7XHJcbiAgICBjb25zdCBkaXN0cmljdERiZkVudHJ5TmFtZSA9IGAke2ZvbGRlck5hbWV9JHtvcHRpb25zLmRpc3RyaWN0UG9seWdvbkRiZkZpbGVOYW1lfWA7XHJcbiAgICBkaXN0cmljdHNQb2x5Z29uRGF0YSA9IGNvbnZlcnRTaHBUb0dlb0pzb24oXHJcbiAgICAgIGRpc3RyaWN0U2hwRW50cnkuZ2V0RGF0YSgpLFxyXG4gICAgICB6aXAuZ2V0RW50cnkoZGlzdHJpY3REYmZFbnRyeU5hbWUpLmdldERhdGEoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJtU3luYyh6aXBGaWxlUGF0aCk7XHJcbiAgcmV0dXJuIHsgc3RyZWV0RGF0YSwgcG9seWdvbkRhdGEsIGRpc3RyaWN0c1BvbHlnb25EYXRhLCBjaXR5Q29kZSB9O1xyXG59O1xyXG5cclxuY29uc3QgY29udmVydFNocFRvR2VvSnNvbiA9IChcclxuICBzaHBCdWZmZXI6IEJ1ZmZlcixcclxuICBkYmZCdWZmZXI/OiBCdWZmZXJcclxuKTogRmVhdHVyZUNvbGxlY3Rpb24gPT4ge1xyXG4gIGNvbnN0IHNocCA9IG5ldyBTaHBUb0dlb0pzb24oe1xyXG4gICAgYXJyYXlidWZmZXJzOiB7XHJcbiAgICAgIHNocEJ1ZmZlcixcclxuICAgICAgLi4uKGRiZkJ1ZmZlciA/IHsgZGJmQnVmZmVyIH0gOiB7fSksXHJcbiAgICB9LFxyXG4gIH0pO1xyXG4gIGNvbnN0IGdlb0pzb24gPSBzaHAuZ2V0R2VvSnNvbigpO1xyXG4gIGRlbGV0ZSBnZW9Kc29uLmJib3g7XHJcblxyXG4gIGNvb3JkRWFjaChnZW9Kc29uIGFzIGFueSwgKGN1cnJlbnRDb29yZCkgPT4ge1xyXG4gICAgY29uc3QgW3ksIHhdID0gY3VycmVudENvb3JkO1xyXG4gICAgY29uc3QgeyBsYXQsIGxvbiB9ID0ganRzazJ3Z3M4NCgteCwgLXkpO1xyXG4gICAgY3VycmVudENvb3JkWzBdID0gbG9uO1xyXG4gICAgY3VycmVudENvb3JkWzFdID0gbGF0O1xyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gZ2VvSnNvbiBhcyBGZWF0dXJlQ29sbGVjdGlvbjtcclxufTtcclxuXHJcbmNvbnN0IGltcG9ydERhdGFUb0RiID0gYXN5bmMgKHtcclxuICBzdHJlZXREYXRhLFxyXG4gIGNpdHlDb2RlLFxyXG4gIHBvbHlnb25EYXRhLFxyXG4gIGRpc3RyaWN0c1BvbHlnb25EYXRhLFxyXG59OiB7XHJcbiAgc3RyZWV0RGF0YTogRGJmU3RyZWV0W107XHJcbiAgY2l0eUNvZGU6IHN0cmluZztcclxuICBwb2x5Z29uRGF0YTogRmVhdHVyZUNvbGxlY3Rpb247XHJcbiAgZGlzdHJpY3RzUG9seWdvbkRhdGE/OiBGZWF0dXJlQ29sbGVjdGlvbjtcclxufSkgPT4ge1xyXG4gIGlmIChzdHJlZXREYXRhLmxlbmd0aCA+IDApIHtcclxuICAgIGF3YWl0IGluc2VydFN0cmVldHNGcm9tRGJmKHN0cmVldERhdGEpO1xyXG4gIH1cclxuICBhd2FpdCBzZXRDaXR5UG9seWdvbkdlb2pzb24oY2l0eUNvZGUsIHBvbHlnb25EYXRhLCBkaXN0cmljdHNQb2x5Z29uRGF0YSk7XHJcbn07XHJcblxyXG5jb25zdCBhdHRlbXB0cyA9IDU7XHJcblxyXG5leHBvcnQgY29uc3QgZG93bmxvYWRBbmRJbXBvcnRTdHJlZXRzID0gYXN5bmMgKFxyXG4gIG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNQYXJ0aWFsID0ge30sXHJcbiAgbm9DYWNoZTogYm9vbGVhbiA9IGZhbHNlXHJcbik6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGF3YWl0IHJ1blN5bmNQYXJ0KFN5bmNQYXJ0LlN0cmVldHMsIFtTeW5jUGFydC5BZGRyZXNzUG9pbnRzXSwgYXN5bmMgKCkgPT4ge1xyXG4gICAgY29uc29sZS5sb2coXHJcbiAgICAgIFwiU3RhcnRpbmcgdG8gZG93bmxvYWQgYW5kIGltcG9ydCBzdHJlZXRzLiBUaGlzIHRha2VzIHVwIHRvIDEgaG91ci5cIlxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjb21wbGV0ZU9wdGlvbnMgPSBwcmVwYXJlT3B0aW9ucyhvcHRpb25zKTtcclxuICAgIHByZXBhcmVGb2xkZXJzKGNvbXBsZXRlT3B0aW9ucyk7XHJcblxyXG4gICAgLy8gQ2xlYXIgc3RyZWV0IHN5bmMgdGFibGUgaWYgbm8tY2FjaGUgZmxhZyBpcyBzZXRcclxuICAgIGlmIChub0NhY2hlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQ2xlYXJpbmcgc3RyZWV0IHN5bmMgY2FjaGUuLi5cIik7XHJcbiAgICAgIGF3YWl0IGNsZWFyU3RyZWV0U3luY1RhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWxsRGF0YXNldEZlZWRMaW5rcyA9IGF3YWl0IGdldEFsbFVybHNGcm9tQXRvbUZlZWQoXHJcbiAgICAgIGNvbXBsZXRlT3B0aW9ucy5zdHJlZXRzQXRvbVVybFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhgVG90YWwgb2YgJHthbGxEYXRhc2V0RmVlZExpbmtzLmxlbmd0aH0gbGlua3MgdG8gWklQIGZpbGVzLmApO1xyXG5cclxuICAgIGNvbnN0IHN5bmNlZFN0cmVldExpbmtzID0gYXdhaXQgZ2V0QWxsU3luY2VkU3RyZWV0cygpO1xyXG5cclxuICAgIGNvbnN0IHRvRGVsZXRlOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgLy8gcmVtb3ZlIGFsbCBkZXByZWNhdGVkIGxpbmtzIChub3QgaW4gdGhlIG5ldyBsaXN0KVxyXG4gICAgc3luY2VkU3RyZWV0TGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xyXG4gICAgICBpZiAoIWFsbERhdGFzZXRGZWVkTGlua3MuaW5jbHVkZXMobGluaykpIHtcclxuICAgICAgICB0b0RlbGV0ZS5wdXNoKGxpbmspO1xyXG4gICAgICAgIGRlbGV0ZSBzeW5jZWRTdHJlZXRMaW5rc1tsaW5rXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgYXdhaXQgZGVsZXRlU3RyZWV0cyh0b0RlbGV0ZSk7XHJcblxyXG4gICAgbGV0IGRvbmUgPSBzeW5jZWRTdHJlZXRMaW5rcy5zaXplO1xyXG4gICAgY29uc29sZS5sb2coYFRvdGFsIG9mICR7ZG9uZX0gbGlua3MgdG8gWklQIGZpbGVzIGFscmVhZHkgc3RvcmVkLmApO1xyXG5cclxuICAgIC8vIGdldCBhbGwgbGlua3Mgbm90IHlldCBzdG9yZWRcclxuICAgIGNvbnN0IG5ld0xpbmtzID0gYWxsRGF0YXNldEZlZWRMaW5rcy5maWx0ZXIoXHJcbiAgICAgIChsaW5rKSA9PiAhc3luY2VkU3RyZWV0TGlua3MuaGFzKGxpbmspXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBkZWxheSA9IDA7XHJcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyAke25ld0xpbmtzLmxlbmd0aH0gbmV3IGxpbmtzIHRvIFpJUCBmaWxlcy5gKTtcclxuICAgIGZvciAoY29uc3QgbGluayBvZiBuZXdMaW5rcykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dGVtcHRzOyBpKyspIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgemlwTGluayA9IGF3YWl0IGdldExhdGVzdFVybEZyb21BdG9tRmVlZChsaW5rKTtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBkb3dubG9hZFppcEFuZFBhcnNlRmlsZXMoXHJcbiAgICAgICAgICAgIHppcExpbmssXHJcbiAgICAgICAgICAgIGRvbmUsXHJcbiAgICAgICAgICAgIGNvbXBsZXRlT3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGF3YWl0IGltcG9ydERhdGFUb0RiKGRhdGEpO1xyXG4gICAgICAgICAgYXdhaXQgc2V0U3RyZWV0QXNTeW5jZWQobGluayk7XHJcblxyXG4gICAgICAgICAgZG9uZSsrO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRlZCBsaW5rczogJHtkb25lfS8ke2FsbERhdGFzZXRGZWVkTGlua3MubGVuZ3RofWApO1xyXG4gICAgICAgICAgYXdhaXQgd2FpdChkZWxheSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgaWYgKGkgPCBhdHRlbXB0cyAtIDEpIHtcclxuICAgICAgICAgICAgZGVsYXkgKz0gMTAwOyAvLyBpZiBlcnJvciBvY2N1cmVkLCBpdCBpcyBsaWtlbHkgdG8gcmVwZWF0IHNvIHdlIHdhaXQgYSBiaXQgbG9uZ2VyXHJcbiAgICAgICAgICAgIGNvbnN0IHdhaXRUaW1lID0gKGkgKyAxKSAqIDM7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgYEVycm9yIGNvbm5lY3RpbmcgdG8gQ1VaSyBzZXJ2ZXJzLCByZXRyeWluZyBpbiAke3dhaXRUaW1lfSBzZWNvbmRzLi4uYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIGF3YWl0IHdhaXQod2FpdFRpbWUgKiAxMDAwKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59O1xyXG5cclxuY29uc3Qgd2FpdCA9IGFzeW5jIChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxufTtcclxuIl19
@@ -47,12 +47,17 @@ export const municipalitiesToPolygons = async (municipalities) => {
47
47
  return result;
48
48
  };
49
49
  const findColoring = (collectionMap) => {
50
- // here do the coloring
51
50
  // put all the features in one array
52
51
  const allFeatures = Array.from(collectionMap.values()).reduce((acc, collection) => {
53
52
  acc.push(...collection.features);
54
53
  return acc;
55
54
  }, []);
55
+ if (allFeatures.length <= 5) {
56
+ allFeatures.forEach((feature, index) => {
57
+ feature.properties.colorIndex = index;
58
+ });
59
+ return;
60
+ }
56
61
  const graph = new Graph();
57
62
  allFeatures.forEach((feature) => {
58
63
  graph.addNode(feature.properties.areaIndex);
@@ -253,4 +258,4 @@ const extractMunicipalityCodes = (municipalities) => {
253
258
  }, { cityCodes: new Set(), districtCodes: new Set() });
254
259
  };
255
260
  const extractPolygonFromCollection = (collection) => collection.features.length > 1 ? union(collection) : collection.features[0];
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWdvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RyZWV0LW1hcmtkb3duL3BvbHlnb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHdkMsT0FBTyxFQU1MLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEUsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFRMUMsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsS0FBSyxFQUMzQyxjQUE4QixFQUNjLEVBQUU7SUFDOUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5RSxNQUFNLFlBQVksR0FBRyxNQUFNLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFbEUsSUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FB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QztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sNEJBQTRCLEdBQUcsQ0FDbkMsVUFBcUQsRUFDcEIsRUFBRSxDQUNuQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlbGF1bmF5IH0gZnJvbSBcImQzLWRlbGF1bmF5XCI7XHJcbmltcG9ydCB7IEFyZWEsIEV4cG9ydEFkZHJlc3NQb2ludCwgTXVuaWNpcGFsaXR5IH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgRmVhdHVyZSxcclxuICBGZWF0dXJlQ29sbGVjdGlvbixcclxuICBNdWx0aVBvbHlnb24sXHJcbiAgUG9pbnQsXHJcbiAgUG9seWdvbixcclxuICBmZWF0dXJlQ29sbGVjdGlvbixcclxufSBmcm9tIFwiQHR1cmYvaGVscGVyc1wiO1xyXG5pbXBvcnQgaW50ZXJzZWN0IGZyb20gXCJAdHVyZi9pbnRlcnNlY3RcIjtcclxuaW1wb3J0IHsgYm9vbGVhbkludGVyc2VjdHMgfSBmcm9tIFwiQHR1cmYvYm9vbGVhbi1pbnRlcnNlY3RzXCI7XHJcbmltcG9ydCBHcmFwaCBmcm9tIFwiZ3JhcGhvbG9neVwiO1xyXG5pbXBvcnQgeyBjb2xvciB9IGZyb20gXCJncmFwaG9sb2d5LWNvbG9yXCI7XHJcbmltcG9ydCB7IHRvTWVyY2F0b3IsIHRvV2dzODQgfSBmcm9tIFwiQHR1cmYvcHJvamVjdGlvblwiO1xyXG5pbXBvcnQgdW5pb24gZnJvbSBcIkB0dXJmL3VuaW9uXCI7XHJcbmltcG9ydCB7IGdldENpdHlQb2x5Z29ucywgZ2V0RGlzdHJpY3RQb2x5Z29ucyB9IGZyb20gXCIuLi9kYi9jaXRpZXNcIjtcclxuaW1wb3J0IHRydW5jYXRlIGZyb20gXCJAdHVyZi90cnVuY2F0ZVwiO1xyXG5pbXBvcnQgeyBQb2x5Z29uc0J5Q29kZXMgfSBmcm9tIFwiLi4vZGIvdHlwZXNcIjtcclxuaW1wb3J0IGRpZmZlcmVuY2UgZnJvbSBcIkB0dXJmL2RpZmZlcmVuY2VcIjtcclxuXHJcbnR5cGUgUG9seWdvblByb3BzID0ge1xyXG4gIGFyZWFJbmRleGVzOiBudW1iZXJbXTtcclxuICBpbmRleDogbnVtYmVyO1xyXG4gIG5laWdoYm9yczogU2V0PG51bWJlcj47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgbXVuaWNpcGFsaXRpZXNUb1BvbHlnb25zID0gYXN5bmMgKFxyXG4gIG11bmljaXBhbGl0aWVzOiBNdW5pY2lwYWxpdHlbXVxyXG4pOiBQcm9taXNlPFJlY29yZDxudW1iZXIsIEZlYXR1cmVDb2xsZWN0aW9uPj4gPT4ge1xyXG4gIGNvbnN0IHsgY2l0eUNvZGVzLCBkaXN0cmljdENvZGVzIH0gPSBleHRyYWN0TXVuaWNpcGFsaXR5Q29kZXMobXVuaWNpcGFsaXRpZXMpO1xyXG4gIGNvbnN0IGNpdHlQb2x5Z29ucyA9IGF3YWl0IGdldENpdHlQb2x5Z29ucyhjaXR5Q29kZXMpO1xyXG4gIGNvbnN0IGRpc3RyaWN0UG9seWdvbnMgPSBhd2FpdCBnZXREaXN0cmljdFBvbHlnb25zKGRpc3RyaWN0Q29kZXMpO1xyXG5cclxuICBpZiAoXHJcbiAgICBPYmplY3Qua2V5cyhjaXR5UG9seWdvbnMpLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgT2JqZWN0LmtleXMoZGlzdHJpY3RQb2x5Z29ucykubGVuZ3RoID09PSAwXHJcbiAgKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIk5vIHBvbHlnb25zIGZvdW5kIGZvciBnaXZlbiBtdW5pY2lwYWxpdGllcy5cIik7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvLyBtdW5pY2lwYWxpdHlDb2RlIC0+IGFyZWFzXHJcbiAgY29uc3QgZXh0cmFBcmVhcyA9IGdldEV4dHJhQXJlYXMobXVuaWNpcGFsaXRpZXMpO1xyXG5cclxuICBjb25zdCBjb2xsZWN0aW9uTWFwID0gbmV3IE1hcDxcclxuICAgIG51bWJlcixcclxuICAgIEZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+XHJcbiAgPigpO1xyXG4gIC8vIGFyZWFJbmRleCAtPiBwb2x5Z29uXHJcbiAgY29uc3QgZXh0cmFQb2x5Z29uc01hcCA9IG5ldyBNYXA8bnVtYmVyLCBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+W10+KCk7XHJcblxyXG4gIGZvciAoY29uc3QgbXVuaWNpcGFsaXR5IG9mIG11bmljaXBhbGl0aWVzKSB7XHJcbiAgICBpZiAobXVuaWNpcGFsaXR5LmFyZWFzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgZmVhdHVyZUNvbGxlY3Rpb24sIGV4dHJhUG9seWdvbnMgfSA9IGNyZWF0ZVBvbHlnb25zKFxyXG4gICAgICBtdW5pY2lwYWxpdHksXHJcbiAgICAgIGV4dHJhQXJlYXMuZ2V0KG11bmljaXBhbGl0eS5jb2RlKSA/PyBbXSxcclxuICAgICAgZ2V0TXVuaWNpcGFsaXR5UG9seWdvbnMobXVuaWNpcGFsaXR5LCBjaXR5UG9seWdvbnMsIGRpc3RyaWN0UG9seWdvbnMpXHJcbiAgICApO1xyXG4gICAgY29sbGVjdGlvbk1hcC5zZXQobXVuaWNpcGFsaXR5LmNvZGUsIGZlYXR1cmVDb2xsZWN0aW9uKTtcclxuICAgIGlmIChleHRyYUFyZWFzLmhhcyhtdW5pY2lwYWxpdHkuY29kZSkpIHtcclxuICAgICAgZm9yIChjb25zdCBbYXJlYUluZGV4LCBleHRyYVBvbHlnb25dIG9mIGV4dHJhUG9seWdvbnMpIHtcclxuICAgICAgICBpZiAoIWV4dHJhUG9seWdvbnNNYXAuaGFzKGFyZWFJbmRleCkpIHtcclxuICAgICAgICAgIGV4dHJhUG9seWdvbnNNYXAuc2V0KGFyZWFJbmRleCwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBleHRyYVBvbHlnb25zTWFwLmdldChhcmVhSW5kZXgpLnB1c2goZXh0cmFQb2x5Z29uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkRXh0cmFQb2x5Z29ucyhjb2xsZWN0aW9uTWFwLCBleHRyYVBvbHlnb25zTWFwKTtcclxuXHJcbiAgZmluZENvbG9yaW5nKGNvbGxlY3Rpb25NYXApO1xyXG5cclxuICBjb25zdCByZXN1bHQ6IFJlY29yZDxudW1iZXIsIEZlYXR1cmVDb2xsZWN0aW9uPiA9IHt9O1xyXG4gIGZvciAoY29uc3QgW211bmljaXBhbGl0eUNvZGUsIGNvbGxlY3Rpb25dIG9mIGNvbGxlY3Rpb25NYXApIHtcclxuICAgIHJlc3VsdFttdW5pY2lwYWxpdHlDb2RlXSA9IGNvbGxlY3Rpb247XHJcbiAgfVxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQ29sb3JpbmcgPSAoY29sbGVjdGlvbk1hcDogTWFwPG51bWJlciwgRmVhdHVyZUNvbGxlY3Rpb24+KSA9PiB7XHJcbiAgLy8gaGVyZSBkbyB0aGUgY29sb3JpbmdcclxuICAvLyBwdXQgYWxsIHRoZSBmZWF0dXJlcyBpbiBvbmUgYXJyYXlcclxuICBjb25zdCBhbGxGZWF0dXJlcyA9IEFycmF5LmZyb20oY29sbGVjdGlvbk1hcC52YWx1ZXMoKSkucmVkdWNlKFxyXG4gICAgKGFjYywgY29sbGVjdGlvbikgPT4ge1xyXG4gICAgICBhY2MucHVzaCguLi5jb2xsZWN0aW9uLmZlYXR1cmVzKTtcclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sXHJcbiAgICBbXVxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGdyYXBoID0gbmV3IEdyYXBoKCk7XHJcbiAgYWxsRmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xyXG4gICAgZ3JhcGguYWRkTm9kZShmZWF0dXJlLnByb3BlcnRpZXMuYXJlYUluZGV4KTtcclxuICB9KTtcclxuXHJcbiAgZm9yIChjb25zdCBmZWF0dXJlMSBvZiBhbGxGZWF0dXJlcykge1xyXG4gICAgZm9yIChjb25zdCBmZWF0dXJlMiBvZiBhbGxGZWF0dXJlcykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZmVhdHVyZTEucHJvcGVydGllcy5hcmVhSW5kZXggIT09IGZlYXR1cmUyLnByb3BlcnRpZXMuYXJlYUluZGV4ICYmXHJcbiAgICAgICAgYm9vbGVhbkludGVyc2VjdHMoZmVhdHVyZTEsIGZlYXR1cmUyKVxyXG4gICAgICApIHtcclxuICAgICAgICBncmFwaC5hZGRFZGdlKFxyXG4gICAgICAgICAgZmVhdHVyZTEucHJvcGVydGllcy5hcmVhSW5kZXgsXHJcbiAgICAgICAgICBmZWF0dXJlMi5wcm9wZXJ0aWVzLmFyZWFJbmRleFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbG9yKGdyYXBoKTtcclxuXHJcbiAgYWxsRmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xyXG4gICAgZmVhdHVyZS5wcm9wZXJ0aWVzLmNvbG9ySW5kZXggPSBncmFwaC5nZXROb2RlQXR0cmlidXRlKFxyXG4gICAgICBmZWF0dXJlLnByb3BlcnRpZXMuYXJlYUluZGV4LFxyXG4gICAgICBcImNvbG9yXCJcclxuICAgICk7XHJcbiAgfSk7XHJcbn07XHJcblxyXG5jb25zdCBnZXRFeHRyYUFyZWFzID0gKG11bmljaXBhbGl0aWVzOiBNdW5pY2lwYWxpdHlbXSk6IE1hcDxudW1iZXIsIEFyZWFbXT4gPT4ge1xyXG4gIC8vIG11bmljaXBhbGl0eUNvZGUgLT4gYXJlYXNcclxuICBjb25zdCBleHRyYUFyZWFzID0gbmV3IE1hcDxudW1iZXIsIEFyZWFbXT4oKTtcclxuXHJcbiAgZm9yIChjb25zdCBtdW5pY2lwYWxpdHkgb2YgbXVuaWNpcGFsaXRpZXMpIHtcclxuICAgIGZvciAoY29uc3QgYXJlYSBvZiBtdW5pY2lwYWxpdHkuYXJlYXMpIHtcclxuICAgICAgLy8gbXVuaWNpcGFsaXR5Q29kZSAtPiBwb2ludHNcclxuICAgICAgY29uc3QgZXh0cmFQb2ludHMgPSBuZXcgTWFwPG51bWJlciwgRXhwb3J0QWRkcmVzc1BvaW50W10+KCk7XHJcbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgYXJlYS5hZGRyZXNzZXMpIHtcclxuICAgICAgICBpZiAocG9pbnQubXVuaWNpcGFsaXR5Q29kZSkge1xyXG4gICAgICAgICAgaWYgKCFleHRyYVBvaW50cy5oYXMocG9pbnQubXVuaWNpcGFsaXR5Q29kZSkpIHtcclxuICAgICAgICAgICAgZXh0cmFQb2ludHMuc2V0KHBvaW50Lm11bmljaXBhbGl0eUNvZGUsIFtdKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBleHRyYVBvaW50cy5nZXQocG9pbnQubXVuaWNpcGFsaXR5Q29kZSkucHVzaChwb2ludCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IFttdW5pY2lwYWxpdHlDb2RlLCBwb2ludHNdIG9mIGV4dHJhUG9pbnRzKSB7XHJcbiAgICAgICAgaWYgKCFleHRyYUFyZWFzLmhhcyhtdW5pY2lwYWxpdHlDb2RlKSkge1xyXG4gICAgICAgICAgZXh0cmFBcmVhcy5zZXQobXVuaWNpcGFsaXR5Q29kZSwgW10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXh0cmFBcmVhcy5nZXQobXVuaWNpcGFsaXR5Q29kZSkucHVzaCh7XHJcbiAgICAgICAgICAuLi5hcmVhLFxyXG4gICAgICAgICAgYWRkcmVzc2VzOiBwb2ludHMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGV4dHJhQXJlYXM7XHJcbn07XHJcblxyXG5jb25zdCBhZGRFeHRyYVBvbHlnb25zID0gKFxyXG4gIGNvbGxlY3Rpb25NYXA6IE1hcDxudW1iZXIsIEZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+PixcclxuICBleHRyYVBvbHlnb25zTWFwOiBNYXA8bnVtYmVyLCBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+W10+XHJcbikgPT4ge1xyXG4gIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uTWFwLnZhbHVlcygpKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbGxlY3Rpb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZmVhdHVyZSA9IGNvbGxlY3Rpb24uZmVhdHVyZXNbaV07XHJcbiAgICAgIGlmIChleHRyYVBvbHlnb25zTWFwLmhhcyhmZWF0dXJlLnByb3BlcnRpZXMuYXJlYUluZGV4KSkge1xyXG4gICAgICAgIGNvbnN0IHBvbHlnb25zID0gZXh0cmFQb2x5Z29uc01hcC5nZXQoZmVhdHVyZS5wcm9wZXJ0aWVzLmFyZWFJbmRleCk7XHJcbiAgICAgICAgY29uc3QgbmV3UG9seWdvbiA9IHVuaW9uKGZlYXR1cmVDb2xsZWN0aW9uKFsuLi5wb2x5Z29ucywgZmVhdHVyZV0pKTtcclxuICAgICAgICBjb25zdCBuZXdGZWF0dXJlID0ge1xyXG4gICAgICAgICAgLi4ubmV3UG9seWdvbixcclxuICAgICAgICAgIHByb3BlcnRpZXM6IHsgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2xsZWN0aW9uLmZlYXR1cmVzW2ldID0gbmV3RmVhdHVyZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGdldE11bmljaXBhbGl0eVBvbHlnb25zID0gKFxyXG4gIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5LFxyXG4gIGNpdHlQb2x5Z29uczogUG9seWdvbnNCeUNvZGVzLFxyXG4gIGRpc3RyaWN0UG9seWdvbnM6IFBvbHlnb25zQnlDb2Rlc1xyXG4pOiBQb2x5Z29uc0J5Q29kZXMgPT4ge1xyXG4gIGNvbnN0IHBvbHlnb25zOiBQb2x5Z29uc0J5Q29kZXMgPSB7fTtcclxuXHJcbiAgZm9yIChjb25zdCBjaXR5Q29kZSBvZiBtdW5pY2lwYWxpdHkuY2l0eUNvZGVzKSB7XHJcbiAgICBpZiAoY2l0eVBvbHlnb25zW2NpdHlDb2RlXSkge1xyXG4gICAgICBwb2x5Z29uc1tjaXR5Q29kZV0gPSBjaXR5UG9seWdvbnNbY2l0eUNvZGVdO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIG11bmljaXBhbGl0eS5tdW5pY2lwYWxpdHlUeXBlID09PSBcImNpdHlcIiAmJlxyXG4gICAgICAgIE9iamVjdC5rZXlzKGRpc3RyaWN0UG9seWdvbnMpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICBtdW5pY2lwYWxpdHkubXVuaWNpcGFsaXR5TmFtZSAhPT0gXCJCcm5vXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IGNpdHlQb2x5Z29uID0gZXh0cmFjdFBvbHlnb25Gcm9tQ29sbGVjdGlvbihjaXR5UG9seWdvbnNbY2l0eUNvZGVdKTtcclxuICAgICAgICAvLyBzdWJ0cmFjdCBhbGwgZGlzdHJpY3QgcG9seWdvbnMgZnJvbSBjaXR5IHBvbHlnb25cclxuICAgICAgICBmb3IgKGNvbnN0IFtkaXN0cmljdENvZGUsIGRpc3RyaWN0UG9seWdvbl0gb2YgT2JqZWN0LmVudHJpZXMoXHJcbiAgICAgICAgICBkaXN0cmljdFBvbHlnb25zXHJcbiAgICAgICAgKSkge1xyXG4gICAgICAgICAgaWYgKG11bmljaXBhbGl0eS5kaXN0cmljdENvZGVzLmluY2x1ZGVzKHBhcnNlSW50KGRpc3RyaWN0Q29kZSkpKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2l0eVBvbHlnb24gPSBkaWZmZXJlbmNlKFxyXG4gICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbihbXHJcbiAgICAgICAgICAgICAgY2l0eVBvbHlnb24sXHJcbiAgICAgICAgICAgICAgZXh0cmFjdFBvbHlnb25Gcm9tQ29sbGVjdGlvbihkaXN0cmljdFBvbHlnb24pLFxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9seWdvbnNbY2l0eUNvZGVdID0gZmVhdHVyZUNvbGxlY3Rpb24oW2NpdHlQb2x5Z29uXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvciAoY29uc3QgZGlzdHJpY3RDb2RlIG9mIG11bmljaXBhbGl0eS5kaXN0cmljdENvZGVzKSB7XHJcbiAgICBpZiAoZGlzdHJpY3RQb2x5Z29uc1tkaXN0cmljdENvZGVdKSB7XHJcbiAgICAgIHBvbHlnb25zW2Rpc3RyaWN0Q29kZV0gPSBkaXN0cmljdFBvbHlnb25zW2Rpc3RyaWN0Q29kZV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcG9seWdvbnM7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlUG9seWdvbnMgPSAoXHJcbiAgbXVuaWNpcGFsaXR5OiBNdW5pY2lwYWxpdHksXHJcbiAgZXh0cmFBcmVhczogQXJlYVtdLFxyXG4gIG11bmljaXBhbGl0eVBvbHlnb25zOiBSZWNvcmQ8XHJcbiAgICBudW1iZXIsXHJcbiAgICBGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPlxyXG4gID5cclxuKToge1xyXG4gIGZlYXR1cmVDb2xsZWN0aW9uOiBGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPjtcclxuICBleHRyYVBvbHlnb25zOiBNYXA8bnVtYmVyLCBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+PjtcclxufSA9PiB7XHJcbiAgY29uc3QgbXVuaWNpcGFsaXRpZXNNdWx0aXBvbHlnb24gPSBjcmVhdGVNdW5pY2lwYWxpdGllc011bHRpcG9seWdvbihcclxuICAgIE9iamVjdC52YWx1ZXMobXVuaWNpcGFsaXR5UG9seWdvbnMpXHJcbiAgKTtcclxuICBjb25zdCB1bmlxdWVQb2ludHMgPSBuZXcgTWFwPHN0cmluZywgRmVhdHVyZT4oKTtcclxuICBjb25zdCBhbGxBcmVhcyA9IFsuLi5tdW5pY2lwYWxpdHkuYXJlYXMsIC4uLmV4dHJhQXJlYXNdO1xyXG4gIGNvbnN0IGV4dHJhQXJlYXNJbmRleGVzID0gbmV3IFNldChleHRyYUFyZWFzLm1hcCgoYXJlYSkgPT4gYXJlYS5pbmRleCkpO1xyXG5cclxuICBmb3IgKGNvbnN0IGFyZWEgb2YgYWxsQXJlYXMpIHtcclxuICAgIGNvbnN0IHBvaW50cyA9IFsuLi5hcmVhLmFkZHJlc3Nlc107XHJcblxyXG4gICAgZm9yIChjb25zdCBwb2ludCBvZiBwb2ludHMpIHtcclxuICAgICAgaWYgKCF1bmlxdWVQb2ludHMuaGFzKHBvaW50LmFkZHJlc3MpKSB7XHJcbiAgICAgICAgYWRkUG9pbnQodW5pcXVlUG9pbnRzLCBwb2ludCwgYXJlYS5pbmRleCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdW5pcXVlUG9pbnRzLmdldChwb2ludC5hZGRyZXNzKS5wcm9wZXJ0aWVzLmFyZWFJbmRleGVzLnB1c2goYXJlYS5pbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IHBvaW50cyA9IHtcclxuICAgIHR5cGU6IFwiRmVhdHVyZUNvbGxlY3Rpb25cIixcclxuICAgIGZlYXR1cmVzOiBBcnJheS5mcm9tKHVuaXF1ZVBvaW50cy52YWx1ZXMoKSksXHJcbiAgfSBhcyBGZWF0dXJlQ29sbGVjdGlvbjxQb2ludD47XHJcblxyXG4gIGNvbnN0IHBvbHlnb25zID0gZDNEZWxhdW5heVZvcm9ub2kocG9pbnRzKTtcclxuXHJcbiAgY29uc3QgdW5pdGVkUG9seWdvbnM6IEZlYXR1cmU8UG9seWdvbiB8IE11bHRpUG9seWdvbj5bXSA9IFtdO1xyXG4gIGNvbnN0IGV4dHJhUG9seWdvbnMgPSBuZXcgTWFwPG51bWJlciwgRmVhdHVyZTxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPj4oKTtcclxuICBsZXQgY29sb3JJbmRleCA9IDA7XHJcblxyXG4gIGZvciAoY29uc3QgYXJlYSBvZiBhbGxBcmVhcykge1xyXG4gICAgY29uc3Qgc2Nob29sUG9seWdvbnM6IEZlYXR1cmU8UG9seWdvbiB8IE11bHRpUG9seWdvbj5bXSA9XHJcbiAgICAgIHBvbHlnb25zLmZlYXR1cmVzLmZpbHRlcigocG9seWdvbikgPT5cclxuICAgICAgICBwb2x5Z29uLnByb3BlcnRpZXMuYXJlYUluZGV4ZXMuaW5jbHVkZXMoYXJlYS5pbmRleClcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoc2Nob29sUG9seWdvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNjaG9vbFBvbHlnb24gPSBpbnRlcnNlY3QoXHJcbiAgICAgIHNjaG9vbFBvbHlnb25zLmxlbmd0aCA+IDFcclxuICAgICAgICA/IHVuaW9uKGZlYXR1cmVDb2xsZWN0aW9uKHNjaG9vbFBvbHlnb25zKSlcclxuICAgICAgICA6IHNjaG9vbFBvbHlnb25zWzBdLFxyXG4gICAgICBtdW5pY2lwYWxpdGllc011bHRpcG9seWdvblxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBmZWF0dXJlID0ge1xyXG4gICAgICAuLi5zY2hvb2xQb2x5Z29uLFxyXG4gICAgICBwcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgYXJlYUluZGV4OiBhcmVhLmluZGV4LFxyXG4gICAgICAgIHNjaG9vbEl6b3M6IGFyZWEuc2Nob29scy5tYXAoKHNjaG9vbCkgPT4gc2Nob29sLml6byksXHJcbiAgICAgICAgY29sb3JJbmRleCxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICBpZiAoZXh0cmFBcmVhc0luZGV4ZXMuaGFzKGFyZWEuaW5kZXgpKSB7XHJcbiAgICAgIGV4dHJhUG9seWdvbnMuc2V0KGFyZWEuaW5kZXgsIGZlYXR1cmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdW5pdGVkUG9seWdvbnMucHVzaChmZWF0dXJlKTtcclxuICAgIH1cclxuICAgIGNvbG9ySW5kZXgrKztcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBmZWF0dXJlQ29sbGVjdGlvbjogdHJ1bmNhdGUoe1xyXG4gICAgICB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXHJcbiAgICAgIGZlYXR1cmVzOiBbLi4udW5pdGVkUG9seWdvbnNdLFxyXG4gICAgfSksXHJcbiAgICBleHRyYVBvbHlnb25zLFxyXG4gIH07XHJcbn07XHJcblxyXG5jb25zdCBhZGRQb2ludCA9IChcclxuICB1bmlxdWVQb2ludHM6IE1hcDxzdHJpbmcsIEZlYXR1cmU+LFxyXG4gIHBvaW50OiBFeHBvcnRBZGRyZXNzUG9pbnQsXHJcbiAgYXJlYUluZGV4OiBudW1iZXJcclxuKSA9PiB7XHJcbiAgaWYgKHBvaW50LmxhdCA9PT0gbnVsbCB8fCBwb2ludC5sbmcgPT09IG51bGwpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgdW5pcXVlUG9pbnRzLnNldChwb2ludC5hZGRyZXNzLCB7XHJcbiAgICB0eXBlOiBcIkZlYXR1cmVcIixcclxuICAgIGdlb21ldHJ5OiB7XHJcbiAgICAgIHR5cGU6IFwiUG9pbnRcIixcclxuICAgICAgY29vcmRpbmF0ZXM6IFtwb2ludC5sbmcsIHBvaW50LmxhdF0sXHJcbiAgICB9LFxyXG4gICAgcHJvcGVydGllczoge1xyXG4gICAgICBhcmVhSW5kZXhlczogW2FyZWFJbmRleF0sXHJcbiAgICB9LFxyXG4gIH0pO1xyXG59O1xyXG5cclxuY29uc3QgZDNEZWxhdW5heVZvcm9ub2kgPSAoXHJcbiAgcG9pbnRzOiBGZWF0dXJlQ29sbGVjdGlvbjxQb2ludD5cclxuKTogRmVhdHVyZUNvbGxlY3Rpb248UG9seWdvbiwgUG9seWdvblByb3BzPiA9PiB7XHJcbiAgY29uc3QgY29udmVydGVkID0gcG9pbnRzLmZlYXR1cmVzLm1hcCgocCkgPT4ge1xyXG4gICAgcmV0dXJuIHRvTWVyY2F0b3IoW3AuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sIHAuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV1dKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgYmJveCA9IFsuLi50b01lcmNhdG9yKFstMTgwLCAtODVdKSwgLi4udG9NZXJjYXRvcihbMTgwLCA4NV0pXSBhcyBbXHJcbiAgICBudW1iZXIsXHJcbiAgICBudW1iZXIsXHJcbiAgICBudW1iZXIsXHJcbiAgICBudW1iZXJcclxuICBdO1xyXG5cclxuICBjb25zdCBkZWxhdW5heSA9IG5ldyBEZWxhdW5heShGbG9hdDY0QXJyYXkub2YoLi4uY29udmVydGVkLmZsYXQoKSkpO1xyXG4gIGNvbnN0IHZvcm9ub2kgPSBkZWxhdW5heS52b3Jvbm9pKGJib3gpO1xyXG4gIHJldHVybiB7XHJcbiAgICB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXHJcbiAgICBmZWF0dXJlczogQXJyYXkuZnJvbSh2b3Jvbm9pLmNlbGxQb2x5Z29ucygpKS5tYXAoKHBvbHlnb24pID0+ICh7XHJcbiAgICAgIHR5cGU6IFwiRmVhdHVyZVwiLFxyXG4gICAgICBnZW9tZXRyeToge1xyXG4gICAgICAgIHR5cGU6IFwiUG9seWdvblwiLFxyXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbcG9seWdvbi5tYXAoKHApID0+IHRvV2dzODQocCkpXSxcclxuICAgICAgfSxcclxuICAgICAgcHJvcGVydGllczoge1xyXG4gICAgICAgIGFyZWFJbmRleGVzOiBwb2ludHMuZmVhdHVyZXNbcG9seWdvbi5pbmRleF0ucHJvcGVydGllcy5hcmVhSW5kZXhlcyxcclxuICAgICAgICBpbmRleDogcG9seWdvbi5pbmRleCxcclxuICAgICAgICBuZWlnaGJvcnM6IG5ldyBTZXQodm9yb25vaS5uZWlnaGJvcnMocG9seWdvbi5pbmRleCkpLFxyXG4gICAgICB9LFxyXG4gICAgfSkpLFxyXG4gIH07XHJcbn07XHJcblxyXG5jb25zdCBjcmVhdGVNdW5pY2lwYWxpdGllc011bHRpcG9seWdvbiA9IChcclxuICBtdW5pY2lwYWxpdHlQb2x5Z29uczogRmVhdHVyZUNvbGxlY3Rpb25bXVxyXG4pOiBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+ID0+IHtcclxuICBjb25zdCBtdW5pY2lwYWxpdHlQb2x5Z29uRmVhdHVyZXMgPSBtdW5pY2lwYWxpdHlQb2x5Z29ucy5yZWR1Y2UoXHJcbiAgICAoYWNjLCBtdW5pY2lwYWxpdHlQb2x5Z29uKSA9PiB7XHJcbiAgICAgIGFjYy5wdXNoKFxyXG4gICAgICAgIC4uLm11bmljaXBhbGl0eVBvbHlnb24uZmVhdHVyZXMuZmlsdGVyKFxyXG4gICAgICAgICAgKGYpID0+XHJcbiAgICAgICAgICAgIGYuZ2VvbWV0cnkudHlwZSA9PT0gXCJQb2x5Z29uXCIgfHwgZi5nZW9tZXRyeS50eXBlID09PSBcIk11bHRpUG9seWdvblwiXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSxcclxuICAgIFtdXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIGV4dHJhY3RQb2x5Z29uRnJvbUNvbGxlY3Rpb24oXHJcbiAgICBmZWF0dXJlQ29sbGVjdGlvbihtdW5pY2lwYWxpdHlQb2x5Z29uRmVhdHVyZXMpXHJcbiAgKTtcclxufTtcclxuXHJcbmNvbnN0IGV4dHJhY3RNdW5pY2lwYWxpdHlDb2RlcyA9IChtdW5pY2lwYWxpdGllczogTXVuaWNpcGFsaXR5W10pID0+IHtcclxuICByZXR1cm4gbXVuaWNpcGFsaXRpZXMucmVkdWNlKFxyXG4gICAgKGFjYywgbXVuaWNpcGFsaXR5KSA9PiB7XHJcbiAgICAgIG11bmljaXBhbGl0eS5jaXR5Q29kZXMuZm9yRWFjaCgoY2l0eUNvZGUpID0+IGFjYy5jaXR5Q29kZXMuYWRkKGNpdHlDb2RlKSk7XHJcbiAgICAgIG11bmljaXBhbGl0eS5kaXN0cmljdENvZGVzLmZvckVhY2goKGRpc3RyaWN0Q29kZSkgPT5cclxuICAgICAgICBhY2MuZGlzdHJpY3RDb2Rlcy5hZGQoZGlzdHJpY3RDb2RlKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSxcclxuICAgIHsgY2l0eUNvZGVzOiBuZXcgU2V0PG51bWJlcj4oKSwgZGlzdHJpY3RDb2RlczogbmV3IFNldDxudW1iZXI+KCkgfVxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBleHRyYWN0UG9seWdvbkZyb21Db2xsZWN0aW9uID0gKFxyXG4gIGNvbGxlY3Rpb246IEZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+XHJcbik6IEZlYXR1cmU8UG9seWdvbiB8IE11bHRpUG9seWdvbj4gPT5cclxuICBjb2xsZWN0aW9uLmZlYXR1cmVzLmxlbmd0aCA+IDEgPyB1bmlvbihjb2xsZWN0aW9uKSA6IGNvbGxlY3Rpb24uZmVhdHVyZXNbMF07XHJcbiJdfQ==
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWdvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RyZWV0LW1hcmtkb3duL3BvbHlnb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHdkMsT0FBTyxFQU1MLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEUsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFRMUMsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsS0FBSyxFQUMzQyxjQUE4QixFQUNjLEVBQUU7SUFDOUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5RSxNQUFNLFlBQVksR0FBRyxNQUFNLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFbEUsSUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FB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QUNsRCxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FDcEMsQ0FBQztRQUNGLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUNELEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRyxFQUFVLEVBQUUsYUFBYSxFQUFFLElBQUksR0FBRyxFQUFVLEVBQUUsQ0FDbkUsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sNEJBQTRCLEdBQUcsQ0FDbkMsVUFBcUQsRUFDcEIsRUFBRSxDQUNuQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlbGF1bmF5IH0gZnJvbSBcImQzLWRlbGF1bmF5XCI7XHJcbmltcG9ydCB7IEFyZWEsIEV4cG9ydEFkZHJlc3NQb2ludCwgTXVuaWNpcGFsaXR5IH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgRmVhdHVyZSxcclxuICBGZWF0dXJlQ29sbGVjdGlvbixcclxuICBNdWx0aVBvbHlnb24sXHJcbiAgUG9pbnQsXHJcbiAgUG9seWdvbixcclxuICBmZWF0dXJlQ29sbGVjdGlvbixcclxufSBmcm9tIFwiQHR1cmYvaGVscGVyc1wiO1xyXG5pbXBvcnQgaW50ZXJzZWN0IGZyb20gXCJAdHVyZi9pbnRlcnNlY3RcIjtcclxuaW1wb3J0IHsgYm9vbGVhbkludGVyc2VjdHMgfSBmcm9tIFwiQHR1cmYvYm9vbGVhbi1pbnRlcnNlY3RzXCI7XHJcbmltcG9ydCBHcmFwaCBmcm9tIFwiZ3JhcGhvbG9neVwiO1xyXG5pbXBvcnQgeyBjb2xvciB9IGZyb20gXCJncmFwaG9sb2d5LWNvbG9yXCI7XHJcbmltcG9ydCB7IHRvTWVyY2F0b3IsIHRvV2dzODQgfSBmcm9tIFwiQHR1cmYvcHJvamVjdGlvblwiO1xyXG5pbXBvcnQgdW5pb24gZnJvbSBcIkB0dXJmL3VuaW9uXCI7XHJcbmltcG9ydCB7IGdldENpdHlQb2x5Z29ucywgZ2V0RGlzdHJpY3RQb2x5Z29ucyB9IGZyb20gXCIuLi9kYi9jaXRpZXNcIjtcclxuaW1wb3J0IHRydW5jYXRlIGZyb20gXCJAdHVyZi90cnVuY2F0ZVwiO1xyXG5pbXBvcnQgeyBQb2x5Z29uc0J5Q29kZXMgfSBmcm9tIFwiLi4vZGIvdHlwZXNcIjtcclxuaW1wb3J0IGRpZmZlcmVuY2UgZnJvbSBcIkB0dXJmL2RpZmZlcmVuY2VcIjtcclxuXHJcbnR5cGUgUG9seWdvblByb3BzID0ge1xyXG4gIGFyZWFJbmRleGVzOiBudW1iZXJbXTtcclxuICBpbmRleDogbnVtYmVyO1xyXG4gIG5laWdoYm9yczogU2V0PG51bWJlcj47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgbXVuaWNpcGFsaXRpZXNUb1BvbHlnb25zID0gYXN5bmMgKFxyXG4gIG11bmljaXBhbGl0aWVzOiBNdW5pY2lwYWxpdHlbXVxyXG4pOiBQcm9taXNlPFJlY29yZDxudW1iZXIsIEZlYXR1cmVDb2xsZWN0aW9uPj4gPT4ge1xyXG4gIGNvbnN0IHsgY2l0eUNvZGVzLCBkaXN0cmljdENvZGVzIH0gPSBleHRyYWN0TXVuaWNpcGFsaXR5Q29kZXMobXVuaWNpcGFsaXRpZXMpO1xyXG4gIGNvbnN0IGNpdHlQb2x5Z29ucyA9IGF3YWl0IGdldENpdHlQb2x5Z29ucyhjaXR5Q29kZXMpO1xyXG4gIGNvbnN0IGRpc3RyaWN0UG9seWdvbnMgPSBhd2FpdCBnZXREaXN0cmljdFBvbHlnb25zKGRpc3RyaWN0Q29kZXMpO1xyXG5cclxuICBpZiAoXHJcbiAgICBPYmplY3Qua2V5cyhjaXR5UG9seWdvbnMpLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgT2JqZWN0LmtleXMoZGlzdHJpY3RQb2x5Z29ucykubGVuZ3RoID09PSAwXHJcbiAgKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIk5vIHBvbHlnb25zIGZvdW5kIGZvciBnaXZlbiBtdW5pY2lwYWxpdGllcy5cIik7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvLyBtdW5pY2lwYWxpdHlDb2RlIC0+IGFyZWFzXHJcbiAgY29uc3QgZXh0cmFBcmVhcyA9IGdldEV4dHJhQXJlYXMobXVuaWNpcGFsaXRpZXMpO1xyXG5cclxuICBjb25zdCBjb2xsZWN0aW9uTWFwID0gbmV3IE1hcDxcclxuICAgIG51bWJlcixcclxuICAgIEZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+XHJcbiAgPigpO1xyXG4gIC8vIGFyZWFJbmRleCAtPiBwb2x5Z29uXHJcbiAgY29uc3QgZXh0cmFQb2x5Z29uc01hcCA9IG5ldyBNYXA8bnVtYmVyLCBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+W10+KCk7XHJcblxyXG4gIGZvciAoY29uc3QgbXVuaWNpcGFsaXR5IG9mIG11bmljaXBhbGl0aWVzKSB7XHJcbiAgICBpZiAobXVuaWNpcGFsaXR5LmFyZWFzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgZmVhdHVyZUNvbGxlY3Rpb24sIGV4dHJhUG9seWdvbnMgfSA9IGNyZWF0ZVBvbHlnb25zKFxyXG4gICAgICBtdW5pY2lwYWxpdHksXHJcbiAgICAgIGV4dHJhQXJlYXMuZ2V0KG11bmljaXBhbGl0eS5jb2RlKSA/PyBbXSxcclxuICAgICAgZ2V0TXVuaWNpcGFsaXR5UG9seWdvbnMobXVuaWNpcGFsaXR5LCBjaXR5UG9seWdvbnMsIGRpc3RyaWN0UG9seWdvbnMpXHJcbiAgICApO1xyXG4gICAgY29sbGVjdGlvbk1hcC5zZXQobXVuaWNpcGFsaXR5LmNvZGUsIGZlYXR1cmVDb2xsZWN0aW9uKTtcclxuICAgIGlmIChleHRyYUFyZWFzLmhhcyhtdW5pY2lwYWxpdHkuY29kZSkpIHtcclxuICAgICAgZm9yIChjb25zdCBbYXJlYUluZGV4LCBleHRyYVBvbHlnb25dIG9mIGV4dHJhUG9seWdvbnMpIHtcclxuICAgICAgICBpZiAoIWV4dHJhUG9seWdvbnNNYXAuaGFzKGFyZWFJbmRleCkpIHtcclxuICAgICAgICAgIGV4dHJhUG9seWdvbnNNYXAuc2V0KGFyZWFJbmRleCwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBleHRyYVBvbHlnb25zTWFwLmdldChhcmVhSW5kZXgpLnB1c2goZXh0cmFQb2x5Z29uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkRXh0cmFQb2x5Z29ucyhjb2xsZWN0aW9uTWFwLCBleHRyYVBvbHlnb25zTWFwKTtcclxuXHJcbiAgZmluZENvbG9yaW5nKGNvbGxlY3Rpb25NYXApO1xyXG5cclxuICBjb25zdCByZXN1bHQ6IFJlY29yZDxudW1iZXIsIEZlYXR1cmVDb2xsZWN0aW9uPiA9IHt9O1xyXG4gIGZvciAoY29uc3QgW211bmljaXBhbGl0eUNvZGUsIGNvbGxlY3Rpb25dIG9mIGNvbGxlY3Rpb25NYXApIHtcclxuICAgIHJlc3VsdFttdW5pY2lwYWxpdHlDb2RlXSA9IGNvbGxlY3Rpb247XHJcbiAgfVxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQ29sb3JpbmcgPSAoY29sbGVjdGlvbk1hcDogTWFwPG51bWJlciwgRmVhdHVyZUNvbGxlY3Rpb24+KSA9PiB7XHJcbiAgLy8gcHV0IGFsbCB0aGUgZmVhdHVyZXMgaW4gb25lIGFycmF5XHJcbiAgY29uc3QgYWxsRmVhdHVyZXMgPSBBcnJheS5mcm9tKGNvbGxlY3Rpb25NYXAudmFsdWVzKCkpLnJlZHVjZShcclxuICAgIChhY2MsIGNvbGxlY3Rpb24pID0+IHtcclxuICAgICAgYWNjLnB1c2goLi4uY29sbGVjdGlvbi5mZWF0dXJlcyk7XHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LFxyXG4gICAgW11cclxuICApO1xyXG5cclxuICBpZiAoYWxsRmVhdHVyZXMubGVuZ3RoIDw9IDUpIHtcclxuICAgIGFsbEZlYXR1cmVzLmZvckVhY2goKGZlYXR1cmUsIGluZGV4KSA9PiB7XHJcbiAgICAgIGZlYXR1cmUucHJvcGVydGllcy5jb2xvckluZGV4ID0gaW5kZXg7XHJcbiAgICB9KTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGNvbnN0IGdyYXBoID0gbmV3IEdyYXBoKCk7XHJcbiAgYWxsRmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xyXG4gICAgZ3JhcGguYWRkTm9kZShmZWF0dXJlLnByb3BlcnRpZXMuYXJlYUluZGV4KTtcclxuICB9KTtcclxuXHJcbiAgZm9yIChjb25zdCBmZWF0dXJlMSBvZiBhbGxGZWF0dXJlcykge1xyXG4gICAgZm9yIChjb25zdCBmZWF0dXJlMiBvZiBhbGxGZWF0dXJlcykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZmVhdHVyZTEucHJvcGVydGllcy5hcmVhSW5kZXggIT09IGZlYXR1cmUyLnByb3BlcnRpZXMuYXJlYUluZGV4ICYmXHJcbiAgICAgICAgYm9vbGVhbkludGVyc2VjdHMoZmVhdHVyZTEsIGZlYXR1cmUyKVxyXG4gICAgICApIHtcclxuICAgICAgICBncmFwaC5hZGRFZGdlKFxyXG4gICAgICAgICAgZmVhdHVyZTEucHJvcGVydGllcy5hcmVhSW5kZXgsXHJcbiAgICAgICAgICBmZWF0dXJlMi5wcm9wZXJ0aWVzLmFyZWFJbmRleFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbG9yKGdyYXBoKTtcclxuXHJcbiAgYWxsRmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xyXG4gICAgZmVhdHVyZS5wcm9wZXJ0aWVzLmNvbG9ySW5kZXggPSBncmFwaC5nZXROb2RlQXR0cmlidXRlKFxyXG4gICAgICBmZWF0dXJlLnByb3BlcnRpZXMuYXJlYUluZGV4LFxyXG4gICAgICBcImNvbG9yXCJcclxuICAgICk7XHJcbiAgfSk7XHJcbn07XHJcblxyXG5jb25zdCBnZXRFeHRyYUFyZWFzID0gKG11bmljaXBhbGl0aWVzOiBNdW5pY2lwYWxpdHlbXSk6IE1hcDxudW1iZXIsIEFyZWFbXT4gPT4ge1xyXG4gIC8vIG11bmljaXBhbGl0eUNvZGUgLT4gYXJlYXNcclxuICBjb25zdCBleHRyYUFyZWFzID0gbmV3IE1hcDxudW1iZXIsIEFyZWFbXT4oKTtcclxuXHJcbiAgZm9yIChjb25zdCBtdW5pY2lwYWxpdHkgb2YgbXVuaWNpcGFsaXRpZXMpIHtcclxuICAgIGZvciAoY29uc3QgYXJlYSBvZiBtdW5pY2lwYWxpdHkuYXJlYXMpIHtcclxuICAgICAgLy8gbXVuaWNpcGFsaXR5Q29kZSAtPiBwb2ludHNcclxuICAgICAgY29uc3QgZXh0cmFQb2ludHMgPSBuZXcgTWFwPG51bWJlciwgRXhwb3J0QWRkcmVzc1BvaW50W10+KCk7XHJcbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgYXJlYS5hZGRyZXNzZXMpIHtcclxuICAgICAgICBpZiAocG9pbnQubXVuaWNpcGFsaXR5Q29kZSkge1xyXG4gICAgICAgICAgaWYgKCFleHRyYVBvaW50cy5oYXMocG9pbnQubXVuaWNpcGFsaXR5Q29kZSkpIHtcclxuICAgICAgICAgICAgZXh0cmFQb2ludHMuc2V0KHBvaW50Lm11bmljaXBhbGl0eUNvZGUsIFtdKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBleHRyYVBvaW50cy5nZXQocG9pbnQubXVuaWNpcGFsaXR5Q29kZSkucHVzaChwb2ludCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IFttdW5pY2lwYWxpdHlDb2RlLCBwb2ludHNdIG9mIGV4dHJhUG9pbnRzKSB7XHJcbiAgICAgICAgaWYgKCFleHRyYUFyZWFzLmhhcyhtdW5pY2lwYWxpdHlDb2RlKSkge1xyXG4gICAgICAgICAgZXh0cmFBcmVhcy5zZXQobXVuaWNpcGFsaXR5Q29kZSwgW10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXh0cmFBcmVhcy5nZXQobXVuaWNpcGFsaXR5Q29kZSkucHVzaCh7XHJcbiAgICAgICAgICAuLi5hcmVhLFxyXG4gICAgICAgICAgYWRkcmVzc2VzOiBwb2ludHMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGV4dHJhQXJlYXM7XHJcbn07XHJcblxyXG5jb25zdCBhZGRFeHRyYVBvbHlnb25zID0gKFxyXG4gIGNvbGxlY3Rpb25NYXA6IE1hcDxudW1iZXIsIEZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+PixcclxuICBleHRyYVBvbHlnb25zTWFwOiBNYXA8bnVtYmVyLCBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+W10+XHJcbikgPT4ge1xyXG4gIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uTWFwLnZhbHVlcygpKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbGxlY3Rpb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZmVhdHVyZSA9IGNvbGxlY3Rpb24uZmVhdHVyZXNbaV07XHJcbiAgICAgIGlmIChleHRyYVBvbHlnb25zTWFwLmhhcyhmZWF0dXJlLnByb3BlcnRpZXMuYXJlYUluZGV4KSkge1xyXG4gICAgICAgIGNvbnN0IHBvbHlnb25zID0gZXh0cmFQb2x5Z29uc01hcC5nZXQoZmVhdHVyZS5wcm9wZXJ0aWVzLmFyZWFJbmRleCk7XHJcbiAgICAgICAgY29uc3QgbmV3UG9seWdvbiA9IHVuaW9uKGZlYXR1cmVDb2xsZWN0aW9uKFsuLi5wb2x5Z29ucywgZmVhdHVyZV0pKTtcclxuICAgICAgICBjb25zdCBuZXdGZWF0dXJlID0ge1xyXG4gICAgICAgICAgLi4ubmV3UG9seWdvbixcclxuICAgICAgICAgIHByb3BlcnRpZXM6IHsgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2xsZWN0aW9uLmZlYXR1cmVzW2ldID0gbmV3RmVhdHVyZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGdldE11bmljaXBhbGl0eVBvbHlnb25zID0gKFxyXG4gIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5LFxyXG4gIGNpdHlQb2x5Z29uczogUG9seWdvbnNCeUNvZGVzLFxyXG4gIGRpc3RyaWN0UG9seWdvbnM6IFBvbHlnb25zQnlDb2Rlc1xyXG4pOiBQb2x5Z29uc0J5Q29kZXMgPT4ge1xyXG4gIGNvbnN0IHBvbHlnb25zOiBQb2x5Z29uc0J5Q29kZXMgPSB7fTtcclxuXHJcbiAgZm9yIChjb25zdCBjaXR5Q29kZSBvZiBtdW5pY2lwYWxpdHkuY2l0eUNvZGVzKSB7XHJcbiAgICBpZiAoY2l0eVBvbHlnb25zW2NpdHlDb2RlXSkge1xyXG4gICAgICBwb2x5Z29uc1tjaXR5Q29kZV0gPSBjaXR5UG9seWdvbnNbY2l0eUNvZGVdO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIG11bmljaXBhbGl0eS5tdW5pY2lwYWxpdHlUeXBlID09PSBcImNpdHlcIiAmJlxyXG4gICAgICAgIE9iamVjdC5rZXlzKGRpc3RyaWN0UG9seWdvbnMpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICBtdW5pY2lwYWxpdHkubXVuaWNpcGFsaXR5TmFtZSAhPT0gXCJCcm5vXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IGNpdHlQb2x5Z29uID0gZXh0cmFjdFBvbHlnb25Gcm9tQ29sbGVjdGlvbihjaXR5UG9seWdvbnNbY2l0eUNvZGVdKTtcclxuICAgICAgICAvLyBzdWJ0cmFjdCBhbGwgZGlzdHJpY3QgcG9seWdvbnMgZnJvbSBjaXR5IHBvbHlnb25cclxuICAgICAgICBmb3IgKGNvbnN0IFtkaXN0cmljdENvZGUsIGRpc3RyaWN0UG9seWdvbl0gb2YgT2JqZWN0LmVudHJpZXMoXHJcbiAgICAgICAgICBkaXN0cmljdFBvbHlnb25zXHJcbiAgICAgICAgKSkge1xyXG4gICAgICAgICAgaWYgKG11bmljaXBhbGl0eS5kaXN0cmljdENvZGVzLmluY2x1ZGVzKHBhcnNlSW50KGRpc3RyaWN0Q29kZSkpKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2l0eVBvbHlnb24gPSBkaWZmZXJlbmNlKFxyXG4gICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbihbXHJcbiAgICAgICAgICAgICAgY2l0eVBvbHlnb24sXHJcbiAgICAgICAgICAgICAgZXh0cmFjdFBvbHlnb25Gcm9tQ29sbGVjdGlvbihkaXN0cmljdFBvbHlnb24pLFxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9seWdvbnNbY2l0eUNvZGVdID0gZmVhdHVyZUNvbGxlY3Rpb24oW2NpdHlQb2x5Z29uXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvciAoY29uc3QgZGlzdHJpY3RDb2RlIG9mIG11bmljaXBhbGl0eS5kaXN0cmljdENvZGVzKSB7XHJcbiAgICBpZiAoZGlzdHJpY3RQb2x5Z29uc1tkaXN0cmljdENvZGVdKSB7XHJcbiAgICAgIHBvbHlnb25zW2Rpc3RyaWN0Q29kZV0gPSBkaXN0cmljdFBvbHlnb25zW2Rpc3RyaWN0Q29kZV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcG9seWdvbnM7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlUG9seWdvbnMgPSAoXHJcbiAgbXVuaWNpcGFsaXR5OiBNdW5pY2lwYWxpdHksXHJcbiAgZXh0cmFBcmVhczogQXJlYVtdLFxyXG4gIG11bmljaXBhbGl0eVBvbHlnb25zOiBSZWNvcmQ8XHJcbiAgICBudW1iZXIsXHJcbiAgICBGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPlxyXG4gID5cclxuKToge1xyXG4gIGZlYXR1cmVDb2xsZWN0aW9uOiBGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPjtcclxuICBleHRyYVBvbHlnb25zOiBNYXA8bnVtYmVyLCBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+PjtcclxufSA9PiB7XHJcbiAgY29uc3QgbXVuaWNpcGFsaXRpZXNNdWx0aXBvbHlnb24gPSBjcmVhdGVNdW5pY2lwYWxpdGllc011bHRpcG9seWdvbihcclxuICAgIE9iamVjdC52YWx1ZXMobXVuaWNpcGFsaXR5UG9seWdvbnMpXHJcbiAgKTtcclxuICBjb25zdCB1bmlxdWVQb2ludHMgPSBuZXcgTWFwPHN0cmluZywgRmVhdHVyZT4oKTtcclxuICBjb25zdCBhbGxBcmVhcyA9IFsuLi5tdW5pY2lwYWxpdHkuYXJlYXMsIC4uLmV4dHJhQXJlYXNdO1xyXG4gIGNvbnN0IGV4dHJhQXJlYXNJbmRleGVzID0gbmV3IFNldChleHRyYUFyZWFzLm1hcCgoYXJlYSkgPT4gYXJlYS5pbmRleCkpO1xyXG5cclxuICBmb3IgKGNvbnN0IGFyZWEgb2YgYWxsQXJlYXMpIHtcclxuICAgIGNvbnN0IHBvaW50cyA9IFsuLi5hcmVhLmFkZHJlc3Nlc107XHJcblxyXG4gICAgZm9yIChjb25zdCBwb2ludCBvZiBwb2ludHMpIHtcclxuICAgICAgaWYgKCF1bmlxdWVQb2ludHMuaGFzKHBvaW50LmFkZHJlc3MpKSB7XHJcbiAgICAgICAgYWRkUG9pbnQodW5pcXVlUG9pbnRzLCBwb2ludCwgYXJlYS5pbmRleCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdW5pcXVlUG9pbnRzLmdldChwb2ludC5hZGRyZXNzKS5wcm9wZXJ0aWVzLmFyZWFJbmRleGVzLnB1c2goYXJlYS5pbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IHBvaW50cyA9IHtcclxuICAgIHR5cGU6IFwiRmVhdHVyZUNvbGxlY3Rpb25cIixcclxuICAgIGZlYXR1cmVzOiBBcnJheS5mcm9tKHVuaXF1ZVBvaW50cy52YWx1ZXMoKSksXHJcbiAgfSBhcyBGZWF0dXJlQ29sbGVjdGlvbjxQb2ludD47XHJcblxyXG4gIGNvbnN0IHBvbHlnb25zID0gZDNEZWxhdW5heVZvcm9ub2kocG9pbnRzKTtcclxuXHJcbiAgY29uc3QgdW5pdGVkUG9seWdvbnM6IEZlYXR1cmU8UG9seWdvbiB8IE11bHRpUG9seWdvbj5bXSA9IFtdO1xyXG4gIGNvbnN0IGV4dHJhUG9seWdvbnMgPSBuZXcgTWFwPG51bWJlciwgRmVhdHVyZTxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPj4oKTtcclxuICBsZXQgY29sb3JJbmRleCA9IDA7XHJcblxyXG4gIGZvciAoY29uc3QgYXJlYSBvZiBhbGxBcmVhcykge1xyXG4gICAgY29uc3Qgc2Nob29sUG9seWdvbnM6IEZlYXR1cmU8UG9seWdvbiB8IE11bHRpUG9seWdvbj5bXSA9XHJcbiAgICAgIHBvbHlnb25zLmZlYXR1cmVzLmZpbHRlcigocG9seWdvbikgPT5cclxuICAgICAgICBwb2x5Z29uLnByb3BlcnRpZXMuYXJlYUluZGV4ZXMuaW5jbHVkZXMoYXJlYS5pbmRleClcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoc2Nob29sUG9seWdvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNjaG9vbFBvbHlnb24gPSBpbnRlcnNlY3QoXHJcbiAgICAgIHNjaG9vbFBvbHlnb25zLmxlbmd0aCA+IDFcclxuICAgICAgICA/IHVuaW9uKGZlYXR1cmVDb2xsZWN0aW9uKHNjaG9vbFBvbHlnb25zKSlcclxuICAgICAgICA6IHNjaG9vbFBvbHlnb25zWzBdLFxyXG4gICAgICBtdW5pY2lwYWxpdGllc011bHRpcG9seWdvblxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBmZWF0dXJlID0ge1xyXG4gICAgICAuLi5zY2hvb2xQb2x5Z29uLFxyXG4gICAgICBwcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgYXJlYUluZGV4OiBhcmVhLmluZGV4LFxyXG4gICAgICAgIHNjaG9vbEl6b3M6IGFyZWEuc2Nob29scy5tYXAoKHNjaG9vbCkgPT4gc2Nob29sLml6byksXHJcbiAgICAgICAgY29sb3JJbmRleCxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICBpZiAoZXh0cmFBcmVhc0luZGV4ZXMuaGFzKGFyZWEuaW5kZXgpKSB7XHJcbiAgICAgIGV4dHJhUG9seWdvbnMuc2V0KGFyZWEuaW5kZXgsIGZlYXR1cmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdW5pdGVkUG9seWdvbnMucHVzaChmZWF0dXJlKTtcclxuICAgIH1cclxuICAgIGNvbG9ySW5kZXgrKztcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBmZWF0dXJlQ29sbGVjdGlvbjogdHJ1bmNhdGUoe1xyXG4gICAgICB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXHJcbiAgICAgIGZlYXR1cmVzOiBbLi4udW5pdGVkUG9seWdvbnNdLFxyXG4gICAgfSksXHJcbiAgICBleHRyYVBvbHlnb25zLFxyXG4gIH07XHJcbn07XHJcblxyXG5jb25zdCBhZGRQb2ludCA9IChcclxuICB1bmlxdWVQb2ludHM6IE1hcDxzdHJpbmcsIEZlYXR1cmU+LFxyXG4gIHBvaW50OiBFeHBvcnRBZGRyZXNzUG9pbnQsXHJcbiAgYXJlYUluZGV4OiBudW1iZXJcclxuKSA9PiB7XHJcbiAgaWYgKHBvaW50LmxhdCA9PT0gbnVsbCB8fCBwb2ludC5sbmcgPT09IG51bGwpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgdW5pcXVlUG9pbnRzLnNldChwb2ludC5hZGRyZXNzLCB7XHJcbiAgICB0eXBlOiBcIkZlYXR1cmVcIixcclxuICAgIGdlb21ldHJ5OiB7XHJcbiAgICAgIHR5cGU6IFwiUG9pbnRcIixcclxuICAgICAgY29vcmRpbmF0ZXM6IFtwb2ludC5sbmcsIHBvaW50LmxhdF0sXHJcbiAgICB9LFxyXG4gICAgcHJvcGVydGllczoge1xyXG4gICAgICBhcmVhSW5kZXhlczogW2FyZWFJbmRleF0sXHJcbiAgICB9LFxyXG4gIH0pO1xyXG59O1xyXG5cclxuY29uc3QgZDNEZWxhdW5heVZvcm9ub2kgPSAoXHJcbiAgcG9pbnRzOiBGZWF0dXJlQ29sbGVjdGlvbjxQb2ludD5cclxuKTogRmVhdHVyZUNvbGxlY3Rpb248UG9seWdvbiwgUG9seWdvblByb3BzPiA9PiB7XHJcbiAgY29uc3QgY29udmVydGVkID0gcG9pbnRzLmZlYXR1cmVzLm1hcCgocCkgPT4ge1xyXG4gICAgcmV0dXJuIHRvTWVyY2F0b3IoW3AuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF0sIHAuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV1dKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgYmJveCA9IFsuLi50b01lcmNhdG9yKFstMTgwLCAtODVdKSwgLi4udG9NZXJjYXRvcihbMTgwLCA4NV0pXSBhcyBbXHJcbiAgICBudW1iZXIsXHJcbiAgICBudW1iZXIsXHJcbiAgICBudW1iZXIsXHJcbiAgICBudW1iZXJcclxuICBdO1xyXG5cclxuICBjb25zdCBkZWxhdW5heSA9IG5ldyBEZWxhdW5heShGbG9hdDY0QXJyYXkub2YoLi4uY29udmVydGVkLmZsYXQoKSkpO1xyXG4gIGNvbnN0IHZvcm9ub2kgPSBkZWxhdW5heS52b3Jvbm9pKGJib3gpO1xyXG4gIHJldHVybiB7XHJcbiAgICB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXHJcbiAgICBmZWF0dXJlczogQXJyYXkuZnJvbSh2b3Jvbm9pLmNlbGxQb2x5Z29ucygpKS5tYXAoKHBvbHlnb24pID0+ICh7XHJcbiAgICAgIHR5cGU6IFwiRmVhdHVyZVwiLFxyXG4gICAgICBnZW9tZXRyeToge1xyXG4gICAgICAgIHR5cGU6IFwiUG9seWdvblwiLFxyXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbcG9seWdvbi5tYXAoKHApID0+IHRvV2dzODQocCkpXSxcclxuICAgICAgfSxcclxuICAgICAgcHJvcGVydGllczoge1xyXG4gICAgICAgIGFyZWFJbmRleGVzOiBwb2ludHMuZmVhdHVyZXNbcG9seWdvbi5pbmRleF0ucHJvcGVydGllcy5hcmVhSW5kZXhlcyxcclxuICAgICAgICBpbmRleDogcG9seWdvbi5pbmRleCxcclxuICAgICAgICBuZWlnaGJvcnM6IG5ldyBTZXQodm9yb25vaS5uZWlnaGJvcnMocG9seWdvbi5pbmRleCkpLFxyXG4gICAgICB9LFxyXG4gICAgfSkpLFxyXG4gIH07XHJcbn07XHJcblxyXG5jb25zdCBjcmVhdGVNdW5pY2lwYWxpdGllc011bHRpcG9seWdvbiA9IChcclxuICBtdW5pY2lwYWxpdHlQb2x5Z29uczogRmVhdHVyZUNvbGxlY3Rpb25bXVxyXG4pOiBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+ID0+IHtcclxuICBjb25zdCBtdW5pY2lwYWxpdHlQb2x5Z29uRmVhdHVyZXMgPSBtdW5pY2lwYWxpdHlQb2x5Z29ucy5yZWR1Y2UoXHJcbiAgICAoYWNjLCBtdW5pY2lwYWxpdHlQb2x5Z29uKSA9PiB7XHJcbiAgICAgIGFjYy5wdXNoKFxyXG4gICAgICAgIC4uLm11bmljaXBhbGl0eVBvbHlnb24uZmVhdHVyZXMuZmlsdGVyKFxyXG4gICAgICAgICAgKGYpID0+XHJcbiAgICAgICAgICAgIGYuZ2VvbWV0cnkudHlwZSA9PT0gXCJQb2x5Z29uXCIgfHwgZi5nZW9tZXRyeS50eXBlID09PSBcIk11bHRpUG9seWdvblwiXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSxcclxuICAgIFtdXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIGV4dHJhY3RQb2x5Z29uRnJvbUNvbGxlY3Rpb24oXHJcbiAgICBmZWF0dXJlQ29sbGVjdGlvbihtdW5pY2lwYWxpdHlQb2x5Z29uRmVhdHVyZXMpXHJcbiAgKTtcclxufTtcclxuXHJcbmNvbnN0IGV4dHJhY3RNdW5pY2lwYWxpdHlDb2RlcyA9IChtdW5pY2lwYWxpdGllczogTXVuaWNpcGFsaXR5W10pID0+IHtcclxuICByZXR1cm4gbXVuaWNpcGFsaXRpZXMucmVkdWNlKFxyXG4gICAgKGFjYywgbXVuaWNpcGFsaXR5KSA9PiB7XHJcbiAgICAgIG11bmljaXBhbGl0eS5jaXR5Q29kZXMuZm9yRWFjaCgoY2l0eUNvZGUpID0+IGFjYy5jaXR5Q29kZXMuYWRkKGNpdHlDb2RlKSk7XHJcbiAgICAgIG11bmljaXBhbGl0eS5kaXN0cmljdENvZGVzLmZvckVhY2goKGRpc3RyaWN0Q29kZSkgPT5cclxuICAgICAgICBhY2MuZGlzdHJpY3RDb2Rlcy5hZGQoZGlzdHJpY3RDb2RlKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSxcclxuICAgIHsgY2l0eUNvZGVzOiBuZXcgU2V0PG51bWJlcj4oKSwgZGlzdHJpY3RDb2RlczogbmV3IFNldDxudW1iZXI+KCkgfVxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBleHRyYWN0UG9seWdvbkZyb21Db2xsZWN0aW9uID0gKFxyXG4gIGNvbGxlY3Rpb246IEZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+XHJcbik6IEZlYXR1cmU8UG9seWdvbiB8IE11bHRpUG9seWdvbj4gPT5cclxuICBjb2xsZWN0aW9uLmZlYXR1cmVzLmxlbmd0aCA+IDEgPyB1bmlvbihjb2xsZWN0aW9uKSA6IGNvbGxlY3Rpb24uZmVhdHVyZXNbMF07XHJcbiJdfQ==
@@ -37,4 +37,4 @@ export const parseLine = (text, showDebug = false) => {
37
37
  }
38
38
  return { smdLines, errors };
39
39
  };
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21kLWxpbmUtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVldC1tYXJrZG93bi9zbWQtbGluZS1wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxlQUFlLEVBQ2YsV0FBVyxHQUNaLE1BQU0sb0JBQW9CLENBQUM7QUFHNUIsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFlBQTJCLEVBQUUsRUFBRTtJQUM1RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDcEMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxHQUFHLENBQ2xFLENBQUM7SUFDRixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDMUUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUN2QixJQUFZLEVBQ1osU0FBUyxHQUFHLEtBQUssRUFDRSxFQUFFO0lBQ3JCLGVBQWUsRUFBRSxDQUFDLENBQUMsd0RBQXdEO0lBQzNFLE1BQU0sTUFBTSxHQUFlLEVBQUUsQ0FBQztJQUU5QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTFELElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQ1QsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyQyxPQUFPLEVBQUUsa0NBQWtDO1lBQzNDLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTTtZQUN6QixTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7U0FDM0MsQ0FBQyxDQUFDLENBQ0osQ0FBQztRQUNGLElBQUksU0FBUyxFQUFFO1lBQ2IscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckM7UUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQztLQUNqQztJQUVELFNBQVMsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUN0QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFcEMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDL0IsTUFBTSxDQUFDLElBQUksQ0FDVCxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sRUFBRSxtREFBbUQ7WUFDNUQsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVztZQUNwQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU07U0FDaEQsQ0FBQyxDQUFDLENBQ0osQ0FBQztRQUNGLElBQUksU0FBUyxFQUFFO1lBQ2IscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckM7UUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQztLQUNqQztJQUVELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDOUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUxleGluZ1Jlc3VsdCwgTGV4ZXIgfSBmcm9tIFwiY2hldnJvdGFpblwiO1xyXG5pbXBvcnQgeyBTbWRQYXJzZXIgfSBmcm9tIFwiLi9zbWQtcGFyc2VyXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIHRva2VuVm9jYWJ1bGFyeSxcclxuICBzbWRUb2tlbnMsXHJcbiAgcmVzZXRUb2tlblN0YXRlLFxyXG4gIHByZXBhcmVMaW5lLFxyXG59IGZyb20gXCIuL3Rva2VuLWRlZmluaXRpb25cIjtcclxuaW1wb3J0IHsgUHJvY2Vzc2VkU21kTGluZXMsIFNtZEVycm9yLCBTbWRMaW5lIH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmNvbnN0IHByaW50TGV4aW5nUmVzdWx0SW5mbyA9IChsZXhpbmdSZXN1bHQ6IElMZXhpbmdSZXN1bHQpID0+IHtcclxuICBjb25zdCB0b2tlbnMgPSBsZXhpbmdSZXN1bHQudG9rZW5zLm1hcChcclxuICAgICh0b2tlbikgPT4gXCInXCIgKyB0b2tlbi5pbWFnZSArIFwiJyAoXCIgKyB0b2tlbi50b2tlblR5cGUubmFtZSArIFwiKVwiXHJcbiAgKTtcclxuICBjb25zb2xlLmVycm9yKHRva2Vucyk7XHJcbn07XHJcblxyXG5jb25zdCBzbWRMZXhlciA9IG5ldyBMZXhlcihzbWRUb2tlbnMsIHsgcG9zaXRpb25UcmFja2luZzogXCJvbmx5T2Zmc2V0XCIgfSk7XHJcbmV4cG9ydCBjb25zdCBzbWRQYXJzZXIgPSBuZXcgU21kUGFyc2VyKHRva2VuVm9jYWJ1bGFyeSk7XHJcblxyXG5leHBvcnQgY29uc3QgcGFyc2VMaW5lID0gKFxyXG4gIHRleHQ6IHN0cmluZyxcclxuICBzaG93RGVidWcgPSBmYWxzZVxyXG4pOiBQcm9jZXNzZWRTbWRMaW5lcyA9PiB7XHJcbiAgcmVzZXRUb2tlblN0YXRlKCk7IC8vIHRoaXMgaXMgbmVlZGVkIHRvIHJlc2V0IHRoZSB0b2tlbiBzdGF0ZSBiZXR3ZWVuIGxpbmVzXHJcbiAgY29uc3QgZXJyb3JzOiBTbWRFcnJvcltdID0gW107XHJcblxyXG4gIGNvbnN0IGxleGluZ1Jlc3VsdCA9IHNtZExleGVyLnRva2VuaXplKHByZXBhcmVMaW5lKHRleHQpKTtcclxuXHJcbiAgaWYgKGxleGluZ1Jlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgZXJyb3JzLnB1c2goXHJcbiAgICAgIC4uLmxleGluZ1Jlc3VsdC5lcnJvcnMubWFwKChlcnJvcikgPT4gKHtcclxuICAgICAgICBtZXNzYWdlOiBgTmVvxI1la8OhdmFuw70gem5hayBuYSB0b210byBtw61zdMSbLmAsXHJcbiAgICAgICAgc3RhcnRPZmZzZXQ6IGVycm9yLm9mZnNldCxcclxuICAgICAgICBlbmRPZmZzZXQ6IGVycm9yLm9mZnNldCArIGVycm9yLmxlbmd0aCArIDEsXHJcbiAgICAgIH0pKVxyXG4gICAgKTtcclxuICAgIGlmIChzaG93RGVidWcpIHtcclxuICAgICAgcHJpbnRMZXhpbmdSZXN1bHRJbmZvKGxleGluZ1Jlc3VsdCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBzbWRMaW5lczogW10sIGVycm9ycyB9O1xyXG4gIH1cclxuXHJcbiAgc21kUGFyc2VyLmlucHV0ID0gbGV4aW5nUmVzdWx0LnRva2VucztcclxuICBjb25zdCBzbWRMaW5lcyA9IHNtZFBhcnNlci5zdHJlZXQoKTtcclxuXHJcbiAgaWYgKHNtZFBhcnNlci5lcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgZXJyb3JzLnB1c2goXHJcbiAgICAgIC4uLnNtZFBhcnNlci5lcnJvcnMubWFwKChlcnJvcikgPT4gKHtcclxuICAgICAgICBtZXNzYWdlOiBgTmVzcHLDoXZuw70gesOhcGlzIHByYXZpZGxhIC0gbmV2eW5lY2hhbGkganN0ZSBuxJtjbz9gLFxyXG4gICAgICAgIHN0YXJ0T2Zmc2V0OiBlcnJvci50b2tlbi5zdGFydE9mZnNldCxcclxuICAgICAgICBlbmRPZmZzZXQ6IGVycm9yLnRva2VuLmVuZE9mZnNldCA/PyB0ZXh0Lmxlbmd0aCxcclxuICAgICAgfSkpXHJcbiAgICApO1xyXG4gICAgaWYgKHNob3dEZWJ1Zykge1xyXG4gICAgICBwcmludExleGluZ1Jlc3VsdEluZm8obGV4aW5nUmVzdWx0KTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IHNtZExpbmVzOiBbXSwgZXJyb3JzIH07XHJcbiAgfVxyXG5cclxuICByZXR1cm4geyBzbWRMaW5lcywgZXJyb3JzIH07XHJcbn07XHJcbiJdfQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21kLWxpbmUtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVldC1tYXJrZG93bi9zbWQtbGluZS1wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxlQUFlLEVBQ2YsV0FBVyxHQUNaLE1BQU0sb0JBQW9CLENBQUM7QUFHNUIsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFlBQTJCLEVBQUUsRUFBRTtJQUM1RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDcEMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxHQUFHLENBQ2xFLENBQUM7SUFDRixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDMUUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUN2QixJQUFZLEVBQ1osU0FBUyxHQUFHLEtBQUssRUFDRSxFQUFFO0lBQ3JCLGVBQWUsRUFBRSxDQUFDLENBQUMsd0RBQXdEO0lBQzNFLE1BQU0sTUFBTSxHQUFlLEVBQUUsQ0FBQztJQUU5QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTFELElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQ1QsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyQyxPQUFPLEVBQUUsa0NBQWtDO1lBQzNDLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTTtZQUN6QixTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7U0FDM0MsQ0FBQyxDQUFDLENBQ0osQ0FBQztRQUNGLElBQUksU0FBUyxFQUFFO1lBQ2IscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckM7UUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQztLQUNqQztJQUVELFNBQVMsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUN0QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFcEMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDL0IsTUFBTSxDQUFDLElBQUksQ0FDVCxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sRUFBRSxtREFBbUQ7WUFDNUQsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVztZQUNwQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU07U0FDaEQsQ0FBQyxDQUFDLENBQ0osQ0FBQztRQUNGLElBQUksU0FBUyxFQUFFO1lBQ2IscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckM7UUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQztLQUNqQztJQUVELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDOUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUxleGluZ1Jlc3VsdCwgTGV4ZXIgfSBmcm9tIFwiY2hldnJvdGFpblwiO1xyXG5pbXBvcnQgeyBTbWRQYXJzZXIgfSBmcm9tIFwiLi9zbWQtcGFyc2VyXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIHRva2VuVm9jYWJ1bGFyeSxcclxuICBzbWRUb2tlbnMsXHJcbiAgcmVzZXRUb2tlblN0YXRlLFxyXG4gIHByZXBhcmVMaW5lLFxyXG59IGZyb20gXCIuL3Rva2VuLWRlZmluaXRpb25cIjtcclxuaW1wb3J0IHsgUHJvY2Vzc2VkU21kTGluZXMsIFNtZEVycm9yIH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmNvbnN0IHByaW50TGV4aW5nUmVzdWx0SW5mbyA9IChsZXhpbmdSZXN1bHQ6IElMZXhpbmdSZXN1bHQpID0+IHtcclxuICBjb25zdCB0b2tlbnMgPSBsZXhpbmdSZXN1bHQudG9rZW5zLm1hcChcclxuICAgICh0b2tlbikgPT4gXCInXCIgKyB0b2tlbi5pbWFnZSArIFwiJyAoXCIgKyB0b2tlbi50b2tlblR5cGUubmFtZSArIFwiKVwiXHJcbiAgKTtcclxuICBjb25zb2xlLmVycm9yKHRva2Vucyk7XHJcbn07XHJcblxyXG5jb25zdCBzbWRMZXhlciA9IG5ldyBMZXhlcihzbWRUb2tlbnMsIHsgcG9zaXRpb25UcmFja2luZzogXCJvbmx5T2Zmc2V0XCIgfSk7XHJcbmV4cG9ydCBjb25zdCBzbWRQYXJzZXIgPSBuZXcgU21kUGFyc2VyKHRva2VuVm9jYWJ1bGFyeSk7XHJcblxyXG5leHBvcnQgY29uc3QgcGFyc2VMaW5lID0gKFxyXG4gIHRleHQ6IHN0cmluZyxcclxuICBzaG93RGVidWcgPSBmYWxzZVxyXG4pOiBQcm9jZXNzZWRTbWRMaW5lcyA9PiB7XHJcbiAgcmVzZXRUb2tlblN0YXRlKCk7IC8vIHRoaXMgaXMgbmVlZGVkIHRvIHJlc2V0IHRoZSB0b2tlbiBzdGF0ZSBiZXR3ZWVuIGxpbmVzXHJcbiAgY29uc3QgZXJyb3JzOiBTbWRFcnJvcltdID0gW107XHJcblxyXG4gIGNvbnN0IGxleGluZ1Jlc3VsdCA9IHNtZExleGVyLnRva2VuaXplKHByZXBhcmVMaW5lKHRleHQpKTtcclxuXHJcbiAgaWYgKGxleGluZ1Jlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgZXJyb3JzLnB1c2goXHJcbiAgICAgIC4uLmxleGluZ1Jlc3VsdC5lcnJvcnMubWFwKChlcnJvcikgPT4gKHtcclxuICAgICAgICBtZXNzYWdlOiBgTmVvxI1la8OhdmFuw70gem5hayBuYSB0b210byBtw61zdMSbLmAsXHJcbiAgICAgICAgc3RhcnRPZmZzZXQ6IGVycm9yLm9mZnNldCxcclxuICAgICAgICBlbmRPZmZzZXQ6IGVycm9yLm9mZnNldCArIGVycm9yLmxlbmd0aCArIDEsXHJcbiAgICAgIH0pKVxyXG4gICAgKTtcclxuICAgIGlmIChzaG93RGVidWcpIHtcclxuICAgICAgcHJpbnRMZXhpbmdSZXN1bHRJbmZvKGxleGluZ1Jlc3VsdCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBzbWRMaW5lczogW10sIGVycm9ycyB9O1xyXG4gIH1cclxuXHJcbiAgc21kUGFyc2VyLmlucHV0ID0gbGV4aW5nUmVzdWx0LnRva2VucztcclxuICBjb25zdCBzbWRMaW5lcyA9IHNtZFBhcnNlci5zdHJlZXQoKTtcclxuXHJcbiAgaWYgKHNtZFBhcnNlci5lcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgZXJyb3JzLnB1c2goXHJcbiAgICAgIC4uLnNtZFBhcnNlci5lcnJvcnMubWFwKChlcnJvcikgPT4gKHtcclxuICAgICAgICBtZXNzYWdlOiBgTmVzcHLDoXZuw70gesOhcGlzIHByYXZpZGxhIC0gbmV2eW5lY2hhbGkganN0ZSBuxJtjbz9gLFxyXG4gICAgICAgIHN0YXJ0T2Zmc2V0OiBlcnJvci50b2tlbi5zdGFydE9mZnNldCxcclxuICAgICAgICBlbmRPZmZzZXQ6IGVycm9yLnRva2VuLmVuZE9mZnNldCA/PyB0ZXh0Lmxlbmd0aCxcclxuICAgICAgfSkpXHJcbiAgICApO1xyXG4gICAgaWYgKHNob3dEZWJ1Zykge1xyXG4gICAgICBwcmludExleGluZ1Jlc3VsdEluZm8obGV4aW5nUmVzdWx0KTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IHNtZExpbmVzOiBbXSwgZXJyb3JzIH07XHJcbiAgfVxyXG5cclxuICByZXR1cm4geyBzbWRMaW5lcywgZXJyb3JzIH07XHJcbn07XHJcbiJdfQ==
package/package.json CHANGED
@@ -57,6 +57,7 @@
57
57
  "polygons": "tsx src/bin/polygons.ts",
58
58
  "schools": "tsx src/bin/schools.ts",
59
59
  "streets": "tsx src/bin/streets.ts",
60
+ "streets:no-cache": "tsx src/bin/streets.ts --no-cache",
60
61
  "diagrams": "tsx src/bin/generate-syntax-diagrams.ts",
61
62
  "clear-all": "tsx src/bin/clear-all.ts",
62
63
  "init-db": "tsx src/bin/init-db.ts",
@@ -73,7 +74,7 @@
73
74
  },
74
75
  "name": "text-to-map",
75
76
  "description": "Text To Map usiluje o lepší, strojově zpracovatelné využití částí vyhlášek s výčtem ulic a dalších lokací. Jde o rozšiřitelnou sadu konceptů a nástrojů, které zajistí hladký převod výčtu ulic a jejich rozsahů v lidsky srozumitelném jazyce do strojově zpracovatelného, uchopitelného formátu.",
76
- "version": "1.1.41",
77
+ "version": "1.1.43",
77
78
  "main": "dist/index.js",
78
79
  "types": "dist/index.d.ts",
79
80
  "files": [