text-to-map 1.1.32 → 1.1.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/db/address-points.d.ts +1 -0
- package/dist/db/address-points.js +61 -5
- package/dist/open-data-sync/address-points.js +8 -4
- package/dist/street-markdown/polygons.js +4 -1
- package/dist/street-markdown/smd.js +6 -5
- package/dist/street-markdown/types.d.ts +1 -0
- package/dist/street-markdown/types.js +1 -1
- package/dist/utils/helpers.d.ts +1 -0
- package/dist/utils/helpers.js +5 -1
- package/dist/utils/jtsk2wgs84.js +2 -5
- package/package.json +1 -1
|
@@ -22,6 +22,7 @@ export declare const Column: {
|
|
|
22
22
|
validFrom: number;
|
|
23
23
|
};
|
|
24
24
|
export declare const commitAddressPoints: (buffer: string[][]) => Promise<number>;
|
|
25
|
+
export declare function removeDeprecatedAddressPoints(allIds: Set<number>): Promise<void>;
|
|
25
26
|
export declare const insertCities: (buffer: string[][]) => Promise<number>;
|
|
26
27
|
export declare const insertDistricts: (buffer: string[][]) => Promise<number>;
|
|
27
28
|
export declare const insertMunicipalityParts: (buffer: string[][]) => Promise<number>;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { AddressPointType, createSingleLineAddress } from "czech-address";
|
|
2
2
|
import { SeriesType, isNegativeSeriesSpec, isRange, isSeriesSpecArray, } from "../street-markdown/types";
|
|
3
|
-
import { findClosestString } from "../utils/helpers";
|
|
3
|
+
import { findClosestString, roundToNDecimalPlaces } from "../utils/helpers";
|
|
4
4
|
import jtsk2wgs84 from "../utils/jtsk2wgs84";
|
|
5
5
|
import { extractKeyValuesPairs, generate2DPlaceholders, getKnexDb, insertMultipleRows, isMysql, isSqlite, nonEmptyOrNull, rawQuery, } from "./db";
|
|
6
6
|
import { getFounderCityCode } from "./founders";
|
|
7
7
|
import { MunicipalityType } from "./types";
|
|
8
|
+
import chunk from "lodash/chunk";
|
|
8
9
|
const DescriptiveType = "č.p.";
|
|
9
10
|
const RegistrationType = "č.ev.";
|
|
10
11
|
const ObjectTypes = {
|
|
@@ -58,7 +59,7 @@ export const commitAddressPoints = async (buffer) => {
|
|
|
58
59
|
await insertMunicipalityParts(buffer);
|
|
59
60
|
await insertStreets(buffer);
|
|
60
61
|
await insertPragueDistricts(buffer);
|
|
61
|
-
const params =
|
|
62
|
+
const params = {};
|
|
62
63
|
buffer.forEach((data) => {
|
|
63
64
|
let latOrNull, lonOrNull;
|
|
64
65
|
latOrNull = null;
|
|
@@ -67,13 +68,68 @@ export const commitAddressPoints = async (buffer) => {
|
|
|
67
68
|
const { lat, lon } = jtsk2wgs84(parseFloat(data[Column.xCoordinate]), parseFloat(data[Column.yCoordinate]));
|
|
68
69
|
[latOrNull, lonOrNull] = [lat.toString(), lon.toString()];
|
|
69
70
|
}
|
|
70
|
-
params
|
|
71
|
+
params[data[Column.admCode]] = [
|
|
72
|
+
data[Column.admCode],
|
|
73
|
+
nonEmptyOrNull(data[Column.streetCode]),
|
|
74
|
+
ObjectTypes[data[Column.objectType]],
|
|
75
|
+
nonEmptyOrNull(data[Column.houseNumber]),
|
|
76
|
+
nonEmptyOrNull(data[Column.orientationalNumber]),
|
|
77
|
+
nonEmptyOrNull(data[Column.orientationalNumberLetter]),
|
|
78
|
+
data[Column.cityCode],
|
|
79
|
+
nonEmptyOrNull(data[Column.districtCode]),
|
|
80
|
+
nonEmptyOrNull(data[Column.municipalityPartCode]),
|
|
81
|
+
nonEmptyOrNull(data[Column.pragueDistrictCode]),
|
|
82
|
+
data[Column.postalCode],
|
|
83
|
+
nonEmptyOrNull(data[Column.xCoordinate]),
|
|
84
|
+
nonEmptyOrNull(data[Column.yCoordinate]),
|
|
85
|
+
latOrNull,
|
|
86
|
+
lonOrNull,
|
|
87
|
+
];
|
|
71
88
|
});
|
|
89
|
+
// find already existing rows
|
|
90
|
+
const existingRows = await rawQuery(`SELECT * FROM address_point WHERE id IN (${buffer
|
|
91
|
+
.map((data) => data[Column.admCode])
|
|
92
|
+
.join(",")})`);
|
|
93
|
+
const queries = [];
|
|
94
|
+
for (const row of existingRows) {
|
|
95
|
+
const toInsert = params[row.id];
|
|
96
|
+
const values = Object.values(row);
|
|
97
|
+
if (!toInsert.every((v, i) => valuesEqual(v, values[i]))) {
|
|
98
|
+
// update those whose values differ
|
|
99
|
+
queries.push(rawQuery(`UPDATE address_point SET ${columnNames
|
|
100
|
+
.map((c) => `${c} = ?`)
|
|
101
|
+
.join(", ")} WHERE id = ?`, [...toInsert, row.id]));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
await Promise.all(queries);
|
|
72
105
|
const placeHolders = generate2DPlaceholders(columnNames.length, buffer.length);
|
|
73
106
|
const knex = getKnexDb();
|
|
74
|
-
await rawQuery(`INSERT ${isMysql(knex) ? "IGNORE" : ""} INTO address_point (${columnNames.join(",")}) VALUES ${placeHolders} ${!isMysql(knex) ? "ON CONFLICT (id) DO NOTHING" : ""}`, params);
|
|
107
|
+
await rawQuery(`INSERT ${isMysql(knex) ? "IGNORE" : ""} INTO address_point (${columnNames.join(",")}) VALUES ${placeHolders} ${!isMysql(knex) ? "ON CONFLICT (id) DO NOTHING" : ""}`, Object.values(params).flat());
|
|
75
108
|
return buffer.length;
|
|
76
109
|
};
|
|
110
|
+
export async function removeDeprecatedAddressPoints(allIds) {
|
|
111
|
+
const knex = getKnexDb();
|
|
112
|
+
const existingIds = await knex.pluck("id").from("address_point");
|
|
113
|
+
const toRemove = existingIds.filter((id) => !allIds.has(id));
|
|
114
|
+
const chunks = chunk(toRemove, 1000);
|
|
115
|
+
for (const chunk of chunks) {
|
|
116
|
+
await knex("address_point").whereIn("id", chunk).delete();
|
|
117
|
+
}
|
|
118
|
+
console.log(`Removed ${toRemove.length} deprecated address points.`);
|
|
119
|
+
}
|
|
120
|
+
function valuesEqual(a, b) {
|
|
121
|
+
return sanitizeValue(a) === sanitizeValue(b);
|
|
122
|
+
}
|
|
123
|
+
function sanitizeValue(value) {
|
|
124
|
+
if (value === null) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
value = value.toString();
|
|
128
|
+
if (/\d+\.\d+/.test(value)) {
|
|
129
|
+
return roundToNDecimalPlaces(parseFloat(value), 6).toString();
|
|
130
|
+
}
|
|
131
|
+
return value;
|
|
132
|
+
}
|
|
77
133
|
export const insertCities = async (buffer) => {
|
|
78
134
|
return await insertMultipleRows(extractKeyValuesPairs(buffer, Column.cityCode, [Column.cityName]), "city", ["code", "name"]);
|
|
79
135
|
};
|
|
@@ -340,4 +396,4 @@ const rowToAddressPoint = (row) => {
|
|
|
340
396
|
point.address = createSingleLineAddress(point);
|
|
341
397
|
return point;
|
|
342
398
|
};
|
|
343
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1wb2ludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvYWRkcmVzcy1wb2ludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFLTCxVQUFVLEVBR1Ysb0JBQW9CLEVBQ3BCLE9BQU8sRUFDUCxpQkFBaUIsR0FDbEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLE9BQU8sRUFDUCxRQUFRLEVBQ1IsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBQXlCLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWxFLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUMvQixNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQztBQUVqQyxNQUFNLFdBQVcsR0FBRztJQUNsQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7SUFDcEIsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7Q0FDdEIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRztJQUNwQixPQUFPLEVBQUUsQ0FBQztJQUNWLFFBQVEsRUFBRSxDQUFDO0lBQ1gsUUFBUSxFQUFFLENBQUM7SUFDWCxZQUFZLEVBQUUsQ0FBQztJQUNmLFlBQVksRUFBRSxDQUFDO0lBQ2Ysa0JBQWtCLEVBQUUsQ0FBQztJQUNyQixrQkFBa0IsRUFBRSxDQUFDO0lBQ3JCLG9CQUFvQixFQUFFLENBQUM7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LG9CQUFvQixLQUFLLElBQUksRUFBRTtRQUNyQyxLQUFLLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztLQUNqRDtJQUNELEtBQUssQ0FBQyxPQUFPLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZGRyZXNzUG9pbnRUeXBlLCBjcmVhdGVTaW5nbGVMaW5lQWRkcmVzcyB9IGZyb20gXCJjemVjaC1hZGRyZXNzXCI7XHJcbmltcG9ydCB7XHJcbiAgQWRkcmVzc1BvaW50LFxyXG4gIEZ1bGxTdHJlZXROdW1iZXIsXHJcbiAgUmFuZ2VTcGVjLFxyXG4gIFNlcmllc1NwZWMsXHJcbiAgU2VyaWVzVHlwZSxcclxuICBTbWRFcnJvcixcclxuICBTbWRMaW5lLFxyXG4gIGlzTmVnYXRpdmVTZXJpZXNTcGVjLFxyXG4gIGlzUmFuZ2UsXHJcbiAgaXNTZXJpZXNTcGVjQXJyYXksXHJcbn0gZnJvbSBcIi4uL3N0cmVldC1tYXJrZG93bi90eXBlc1wiO1xyXG5pbXBvcnQgeyBmaW5kQ2xvc2VzdFN0cmluZyB9IGZyb20gXCIuLi91dGlscy9oZWxwZXJzXCI7XHJcbmltcG9ydCBqdHNrMndnczg0IGZyb20gXCIuLi91dGlscy9qdHNrMndnczg0XCI7XHJcbmltcG9ydCB7XHJcbiAgZXh0cmFjdEtleVZhbHVlc1BhaXJzLFxyXG4gIGdlbmVyYXRlMkRQbGFjZWhvbGRlcnMsXHJcbiAgZ2V0S25leERiLFxyXG4gIGluc2VydE11bHRpcGxlUm93cyxcclxuICBpc015c3FsLFxyXG4gIGlzU3FsaXRlLFxyXG4gIG5vbkVtcHR5T3JOdWxsLFxyXG4gIHJhd1F1ZXJ5LFxyXG59IGZyb20gXCIuL2RiXCI7XHJcbmltcG9ydCB7IGdldEZvdW5kZXJDaXR5Q29kZSB9IGZyb20gXCIuL2ZvdW5kZXJzXCI7XHJcbmltcG9ydCB7IEZvdW5kZXIsIE11bmljaXBhbGl0eSwgTXVuaWNpcGFsaXR5VHlwZSB9IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5jb25zdCBEZXNjcmlwdGl2ZVR5cGUgPSBcIsSNLnAuXCI7XHJcbmNvbnN0IFJlZ2lzdHJhdGlvblR5cGUgPSBcIsSNLmV2LlwiO1xyXG5cclxuY29uc3QgT2JqZWN0VHlwZXMgPSB7XHJcbiAgW0Rlc2NyaXB0aXZlVHlwZV06IDEsXHJcbiAgW1JlZ2lzdHJhdGlvblR5cGVdOiAyLFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IENvbHVtbiA9IHtcclxuICBhZG1Db2RlOiAwLFxyXG4gIGNpdHlDb2RlOiAxLFxyXG4gIGNpdHlOYW1lOiAyLFxyXG4gIGRpc3RyaWN0Q29kZTogMyxcclxuICBkaXN0cmljdE5hbWU6IDQsXHJcbiAgcHJhZ3VlRGlzdHJpY3RDb2RlOiA1LFxyXG4gIHByYWd1ZURpc3RyaWN0TmFtZTogNixcclxuICBtdW5pY2lwYWxpdHlQYXJ0Q29kZTogNyxcclxuICBtdW5pY2lwYWxpdHlQYXJ0TmFtZTogOCxcclxuICBzdHJlZXRDb2RlOiA5LFxyXG4gIHN0cmVldE5hbWU6IDEwLFxyXG4gIG9iamVjdFR5cGU6IDExLFxyXG4gIGhvdXNlTnVtYmVyOiAxMixcclxuICBvcmllbnRhdGlvbmFsTnVtYmVyOiAxMyxcclxuICBvcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyOiAxNCxcclxuICBwb3N0YWxDb2RlOiAxNSxcclxuICB5Q29vcmRpbmF0ZTogMTYsXHJcbiAgeENvb3JkaW5hdGU6IDE3LFxyXG4gIHZhbGlkRnJvbTogMTgsXHJcbn07XHJcblxyXG5jb25zdCBjb2x1bW5OYW1lcyA9IFtcclxuICBcImlkXCIsXHJcbiAgXCJzdHJlZXRfY29kZVwiLFxyXG4gIFwib2JqZWN0X3R5cGVfaWRcIixcclxuICBcImRlc2NyaXB0aXZlX251bWJlclwiLFxyXG4gIFwib3JpZW50YXRpb25hbF9udW1iZXJcIixcclxuICBcIm9yaWVudGF0aW9uYWxfbnVtYmVyX2xldHRlclwiLFxyXG4gIFwiY2l0eV9jb2RlXCIsXHJcbiAgXCJjaXR5X2Rpc3RyaWN0X2NvZGVcIixcclxuICBcIm11bmljaXBhbGl0eV9wYXJ0X2NvZGVcIixcclxuICBcInByYWd1ZV9kaXN0cmljdF9jb2RlXCIsXHJcbiAgXCJwb3N0YWxfY29kZVwiLFxyXG4gIFwianRza194XCIsXHJcbiAgXCJqdHNrX3lcIixcclxuICBcIndnczg0X2xhdGl0dWRlXCIsXHJcbiAgXCJ3Z3M4NF9sb25naXR1ZGVcIixcclxuXTtcclxuXHJcbmV4cG9ydCBjb25zdCBjb21taXRBZGRyZXNzUG9pbnRzID0gYXN5bmMgKFxyXG4gIGJ1ZmZlcjogc3RyaW5nW11bXVxyXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcbiAgYXdhaXQgaW5zZXJ0Q2l0aWVzKGJ1ZmZlcik7XHJcbiAgYXdhaXQgaW5zZXJ0RGlzdHJpY3RzKGJ1ZmZlcik7XHJcbiAgYXdhaXQgaW5zZXJ0TXVuaWNpcGFsaXR5UGFydHMoYnVmZmVyKTtcclxuICBhd2FpdCBpbnNlcnRTdHJlZXRzKGJ1ZmZlcik7XHJcbiAgYXdhaXQgaW5zZXJ0UHJhZ3VlRGlzdHJpY3RzKGJ1ZmZlcik7XHJcblxyXG4gIGNvbnN0IHBhcmFtczogKHN0cmluZyB8IG51bGwpW10gPSBbXTtcclxuICBidWZmZXIuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG4gICAgbGV0IGxhdE9yTnVsbDogc3RyaW5nLCBsb25Pck51bGw6IHN0cmluZztcclxuICAgIGxhdE9yTnVsbCA9IG51bGw7XHJcbiAgICBsb25Pck51bGwgPSBudWxsO1xyXG4gICAgaWYgKGRhdGFbQ29sdW1uLnhDb29yZGluYXRlXSAmJiBkYXRhW0NvbHVtbi55Q29vcmRpbmF0ZV0pIHtcclxuICAgICAgY29uc3QgeyBsYXQsIGxvbiB9ID0ganRzazJ3Z3M4NChcclxuICAgICAgICBwYXJzZUZsb2F0KGRhdGFbQ29sdW1uLnhDb29yZGluYXRlXSksXHJcbiAgICAgICAgcGFyc2VGbG9hdChkYXRhW0NvbHVtbi55Q29vcmRpbmF0ZV0pXHJcbiAgICAgICk7XHJcbiAgICAgIFtsYXRPck51bGwsIGxvbk9yTnVsbF0gPSBbbGF0LnRvU3RyaW5nKCksIGxvbi50b1N0cmluZygpXTtcclxuICAgIH1cclxuICAgIHBhcmFtcy5wdXNoKFxyXG4gICAgICBkYXRhW0NvbHVtbi5hZG1Db2RlXSxcclxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4uc3RyZWV0Q29kZV0pLFxyXG4gICAgICBPYmplY3RUeXBlc1tkYXRhW0NvbHVtbi5vYmplY3RUeXBlXV0sXHJcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLmhvdXNlTnVtYmVyXSksXHJcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLm9yaWVudGF0aW9uYWxOdW1iZXJdKSxcclxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4ub3JpZW50YXRpb25hbE51bWJlckxldHRlcl0pLFxyXG4gICAgICBkYXRhW0NvbHVtbi5jaXR5Q29kZV0sXHJcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLmRpc3RyaWN0Q29kZV0pLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5tdW5pY2lwYWxpdHlQYXJ0Q29kZV0pLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5wcmFndWVEaXN0cmljdENvZGVdKSxcclxuICAgICAgZGF0YVtDb2x1bW4ucG9zdGFsQ29kZV0sXHJcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLnhDb29yZGluYXRlXSksXHJcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLnlDb29yZGluYXRlXSksXHJcbiAgICAgIGxhdE9yTnVsbCxcclxuICAgICAgbG9uT3JOdWxsXHJcbiAgICApO1xyXG4gIH0pO1xyXG5cclxuICBjb25zdCBwbGFjZUhvbGRlcnMgPSBnZW5lcmF0ZTJEUGxhY2Vob2xkZXJzKFxyXG4gICAgY29sdW1uTmFtZXMubGVuZ3RoLFxyXG4gICAgYnVmZmVyLmxlbmd0aFxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcclxuICBhd2FpdCByYXdRdWVyeShcclxuICAgIGBJTlNFUlQgJHtcclxuICAgICAgaXNNeXNxbChrbmV4KSA/IFwiSUdOT1JFXCIgOiBcIlwiXHJcbiAgICB9IElOVE8gYWRkcmVzc19wb2ludCAoJHtjb2x1bW5OYW1lcy5qb2luKFwiLFwiKX0pIFZBTFVFUyAke3BsYWNlSG9sZGVyc30gJHtcclxuICAgICAgIWlzTXlzcWwoa25leCkgPyBcIk9OIENPTkZMSUNUIChpZCkgRE8gTk9USElOR1wiIDogXCJcIlxyXG4gICAgfWAsXHJcbiAgICBwYXJhbXNcclxuICApO1xyXG5cclxuICByZXR1cm4gYnVmZmVyLmxlbmd0aDtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRDaXRpZXMgPSBhc3luYyAoYnVmZmVyOiBzdHJpbmdbXVtdKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICByZXR1cm4gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgZXh0cmFjdEtleVZhbHVlc1BhaXJzKGJ1ZmZlciwgQ29sdW1uLmNpdHlDb2RlLCBbQ29sdW1uLmNpdHlOYW1lXSksXHJcbiAgICBcImNpdHlcIixcclxuICAgIFtcImNvZGVcIiwgXCJuYW1lXCJdXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnREaXN0cmljdHMgPSBhc3luYyAoYnVmZmVyOiBzdHJpbmdbXVtdKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICByZXR1cm4gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgZXh0cmFjdEtleVZhbHVlc1BhaXJzKGJ1ZmZlciwgQ29sdW1uLmRpc3RyaWN0Q29kZSwgW1xyXG4gICAgICBDb2x1bW4uY2l0eUNvZGUsXHJcbiAgICAgIENvbHVtbi5kaXN0cmljdE5hbWUsXHJcbiAgICBdKSxcclxuICAgIFwiY2l0eV9kaXN0cmljdFwiLFxyXG4gICAgW1wiY29kZVwiLCBcImNpdHlfY29kZVwiLCBcIm5hbWVcIl1cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydE11bmljaXBhbGl0eVBhcnRzID0gYXN5bmMgKFxyXG4gIGJ1ZmZlcjogc3RyaW5nW11bXVxyXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIHJldHVybiBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXHJcbiAgICBleHRyYWN0S2V5VmFsdWVzUGFpcnMoYnVmZmVyLCBDb2x1bW4ubXVuaWNpcGFsaXR5UGFydENvZGUsIFtcclxuICAgICAgQ29sdW1uLm11bmljaXBhbGl0eVBhcnROYW1lLFxyXG4gICAgICBDb2x1bW4uY2l0eUNvZGUsXHJcbiAgICBdKSxcclxuICAgIFwibXVuaWNpcGFsaXR5X3BhcnRcIixcclxuICAgIFtcImNvZGVcIiwgXCJuYW1lXCIsIFwiY2l0eV9jb2RlXCJdXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRQcmFndWVEaXN0cmljdHMgPSBhc3luYyAoXHJcbiAgYnVmZmVyOiBzdHJpbmdbXVtdXHJcbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgcmV0dXJuIGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcclxuICAgIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyhidWZmZXIsIENvbHVtbi5wcmFndWVEaXN0cmljdENvZGUsIFtcclxuICAgICAgQ29sdW1uLnByYWd1ZURpc3RyaWN0TmFtZSxcclxuICAgIF0pLFxyXG4gICAgXCJwcmFndWVfZGlzdHJpY3RcIixcclxuICAgIFtcImNvZGVcIiwgXCJuYW1lXCJdXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRTdHJlZXRzID0gYXN5bmMgKGJ1ZmZlcjogc3RyaW5nW11bXSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgcmV0dXJuIGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcclxuICAgIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyhidWZmZXIsIENvbHVtbi5zdHJlZXRDb2RlLCBbXHJcbiAgICAgIENvbHVtbi5jaXR5Q29kZSxcclxuICAgICAgQ29sdW1uLnN0cmVldE5hbWUsXHJcbiAgICBdKSxcclxuICAgIFwic3RyZWV0XCIsXHJcbiAgICBbXCJjb2RlXCIsIFwiY2l0eV9jb2RlXCIsIFwibmFtZVwiXVxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgYXJlQWRkcmVzc1BvaW50c1N5bmNlZCA9IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcclxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLmNvdW50KFwiKlwiLCB7IGFzOiBcImNvdW50QWxsXCIgfSlcclxuICAgIC5mcm9tKFwiYWRkcmVzc19wb2ludFwiKVxyXG4gICAgLmZpcnN0KCk7XHJcbiAgcmV0dXJuIE51bWJlcihyZXN1bHQuY291bnRBbGwpID49IDI5MDAwMDA7IC8vIHRvdGFsIGlzIGFsbW9zdCAzIG1pbGxpb25cclxufTtcclxuXHJcbmNvbnN0IGFkZHJlc3NQb2ludFNlbGVjdCA9IGBcclxuICBTRUxFQ1QgYS5pZCwgcy5uYW1lIEFTIHN0cmVldF9uYW1lLCBvLm5hbWUgQVMgb2JqZWN0X3R5cGVfbmFtZSwgYS5kZXNjcmlwdGl2ZV9udW1iZXIsXHJcbiAgICAgICAgYS5vcmllbnRhdGlvbmFsX251bWJlciwgYS5vcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXIsIGMubmFtZSBBUyBjaXR5X25hbWUsXHJcbiAgICAgICAgbS5uYW1lIEFTIG11bmljaXBhbGl0eV9wYXJ0X25hbWUsIHAubmFtZSBBUyBwcmFndWVfZGlzdHJpY3RfbmFtZSxcclxuICAgICAgICBkLm5hbWUgQVMgZGlzdHJpY3RfbmFtZSwgYS5wb3N0YWxfY29kZSwgYS53Z3M4NF9sYXRpdHVkZSwgYS53Z3M4NF9sb25naXR1ZGVcclxuICBGUk9NIGFkZHJlc3NfcG9pbnQgYVxyXG4gIExFRlQgSk9JTiBzdHJlZXQgcyBPTiBhLnN0cmVldF9jb2RlID0gcy5jb2RlXHJcbiAgSU5ORVIgSk9JTiBvYmplY3RfdHlwZSBvIE9OIG8uaWQgPSBhLm9iamVjdF90eXBlX2lkXHJcbiAgSU5ORVIgSk9JTiBjaXR5IGMgT04gYy5jb2RlID0gYS5jaXR5X2NvZGVcclxuICBMRUZUIEpPSU4gY2l0eV9kaXN0cmljdCBkIE9OIGEuY2l0eV9kaXN0cmljdF9jb2RlID0gZC5jb2RlXHJcbiAgTEVGVCBKT0lOIHByYWd1ZV9kaXN0cmljdCBwIE9OIGEucHJhZ3VlX2Rpc3RyaWN0X2NvZGUgPSBwLmNvZGVcclxuICBMRUZUIEpPSU4gbXVuaWNpcGFsaXR5X3BhcnQgbSBPTiBhLm11bmljaXBhbGl0eV9wYXJ0X2NvZGUgPSBtLmNvZGVgO1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldEFkZHJlc3NQb2ludEJ5SWQgPSBhc3luYyAoXHJcbiAgYWRkcmVzc1BvaW50SWQ6IG51bWJlclxyXG4pOiBQcm9taXNlPEFkZHJlc3NQb2ludCB8IG51bGw+ID0+IHtcclxuICBjb25zdCByb3cgPSBhd2FpdCByYXdRdWVyeShcclxuICAgIGAke2FkZHJlc3NQb2ludFNlbGVjdH1cclxuICAgICAgV0hFUkUgYS5pZCA9ID9gLFxyXG4gICAgW2FkZHJlc3NQb2ludElkXVxyXG4gICk7XHJcbiAgaWYgKHJvdy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICByZXR1cm4gcm93VG9BZGRyZXNzUG9pbnQocm93WzBdKTtcclxufTtcclxuXHJcbmxldCBsYXN0Rm91bmRlcjogRm91bmRlciB8IG51bGwgPSBudWxsO1xyXG5sZXQgYWxsU3RyZWV0czogc3RyaW5nW10gPSBbXTtcclxuXHJcbmV4cG9ydCBjb25zdCBjaGVja1N0cmVldEV4aXN0cyA9IGFzeW5jIChcclxuICBzdHJlZXROYW1lOiBzdHJpbmcsXHJcbiAgZm91bmRlcjogRm91bmRlclxyXG4pOiBQcm9taXNlPHsgZXhpc3RzOiBib29sZWFuOyBlcnJvcnM6IFNtZEVycm9yW10gfT4gPT4ge1xyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcclxuICBjb25zdCBlcnJvcnM6IFNtZEVycm9yW10gPSBbXTtcclxuXHJcbiAgLy8gd2UgY2hlY2sgdGhlIHdob2xlIGNpdHlcclxuICBjb25zdCBjaXR5Q29kZSA9IGF3YWl0IGdldEZvdW5kZXJDaXR5Q29kZShmb3VuZGVyKTtcclxuICBjb25zdCByb3dMaXN0ID0gYXdhaXQgcmF3UXVlcnkoXHJcbiAgICBgU0VMRUNUIG5hbWUgQVMgc3RyZWV0X25hbWVcclxuICAgIEZST00gc3RyZWV0XHJcbiAgICBXSEVSRSBjaXR5X2NvZGUgPSA/IEFORCBuYW1lID0gPyAgJHtcclxuICAgICAgaXNTcWxpdGUoa25leCkgPyBcIkNPTExBVEUgTk9DQVNFXCIgOiBcIlwiXHJcbiAgICB9YCxcclxuICAgIFtjaXR5Q29kZSwgc3RyZWV0TmFtZV1cclxuICApO1xyXG5cclxuICBpZiAocm93TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICBjb25zdCByb3cgPSByb3dMaXN0WzBdO1xyXG4gICAgaWYgKHJvdy5zdHJlZXRfbmFtZSAhPT0gc3RyZWV0TmFtZSkge1xyXG4gICAgICAvLyBlcnJvcnMucHVzaChcclxuICAgICAgLy8gICBgU3RyZWV0ICcke3N0cmVldE5hbWV9JyBoYXMgd3JvbmcgY2FzZSwgY29ycmVjdCBjYXNlOiAnJHtyb3cuc3RyZWV0X25hbWV9Jy5gXHJcbiAgICAgIC8vICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBleGlzdHM6IHRydWUsIGVycm9ycyB9O1xyXG4gIH1cclxuXHJcbiAgaWYgKGxhc3RGb3VuZGVyICE9PSBmb3VuZGVyKSB7XHJcbiAgICBhbGxTdHJlZXRzID0gYXdhaXQgZ2V0QWxsU3RyZWV0cyhjaXR5Q29kZSk7XHJcbiAgICBsYXN0Rm91bmRlciA9IGZvdW5kZXI7XHJcbiAgfVxyXG5cclxuICBjb25zdCBtYXRjaCA9IGFsbFN0cmVldHMuZmluZChcclxuICAgIChzKSA9PlxyXG4gICAgICBzLnRvTG9jYWxlTG93ZXJDYXNlKFwiY3MtQ1pcIikgPT09IHN0cmVldE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoXCJjcy1DWlwiKVxyXG4gICk7XHJcbiAgbGV0IGV4aXN0cyA9IGZhbHNlO1xyXG4gIGlmIChtYXRjaCkge1xyXG4gICAgZXhpc3RzID0gdHJ1ZTtcclxuICAgIGlmIChzdHJlZXROYW1lICE9PSBtYXRjaCkge1xyXG4gICAgICAvLyBlcnJvcnMucHVzaChcclxuICAgICAgLy8gICBgU3RyZWV0ICcke3N0cmVldE5hbWV9JyBoYXMgd3JvbmcgY2FzZSwgY29ycmVjdCBjYXNlOiAnJHttYXRjaH0nLmBcclxuICAgICAgLy8gKTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgY2xvc2VzdCA9IGZpbmRDbG9zZXN0U3RyaW5nKHN0cmVldE5hbWUsIGFsbFN0cmVldHMpO1xyXG4gICAgZXJyb3JzLnB1c2goe1xyXG4gICAgICBtZXNzYWdlOiBgVWxpY2UgJyR7c3RyZWV0TmFtZX0nIHYgdMOpdG8gb2JjaSBuZWV4aXN0dWplLCBteXNsZWxpIGpzdGUgJyR7Y2xvc2VzdH0nP2AsXHJcbiAgICAgIHN0YXJ0T2Zmc2V0OiAwLFxyXG4gICAgICBlbmRPZmZzZXQ6IHN0cmVldE5hbWUubGVuZ3RoICsgMSxcclxuICAgIH0pO1xyXG4gIH1cclxuICByZXR1cm4geyBleGlzdHM6IGZhbHNlLCBlcnJvcnMgfTtcclxufTtcclxuXHJcbmNvbnN0IGdldEFsbFN0cmVldHMgPSBhc3luYyAoY2l0eUNvZGU6IG51bWJlcik6IFByb21pc2U8c3RyaW5nW10+ID0+IHtcclxuICBjb25zdCBrbmV4ID0gZ2V0S25leERiKCk7XHJcbiAgcmV0dXJuIGF3YWl0IGtuZXgucGx1Y2soXCJuYW1lXCIpLmZyb20oXCJzdHJlZXRcIikud2hlcmUoXCJjaXR5X2NvZGVcIiwgY2l0eUNvZGUpO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgRmluZEFkZHJlc3NQb2ludHNQYXJhbXMgPVxyXG4gIHwge1xyXG4gICAgICB0eXBlOiBcInNtZExpbmVcIjtcclxuICAgICAgc21kTGluZTogU21kTGluZTtcclxuICAgICAgbXVuaWNpcGFsaXR5OiBNdW5pY2lwYWxpdHk7XHJcbiAgICAgIG11bmljaXBhbGl0eVBhcnRDb2RlPzogbnVtYmVyO1xyXG4gICAgfVxyXG4gIHwge1xyXG4gICAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5UGFydFwiO1xyXG4gICAgICBtdW5pY2lwYWxpdHlQYXJ0Q29kZTogbnVtYmVyO1xyXG4gICAgfVxyXG4gIHwge1xyXG4gICAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5XCI7XHJcbiAgICAgIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5O1xyXG4gICAgfVxyXG4gIHwge1xyXG4gICAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5Tm9TdHJlZXROYW1lXCI7XHJcbiAgICAgIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5O1xyXG4gICAgfTtcclxuXHJcbmV4cG9ydCBjb25zdCBmaW5kQWRkcmVzc1BvaW50cyA9IGFzeW5jIChcclxuICBwYXJhbXM6IEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zXHJcbik6IFByb21pc2U8QWRkcmVzc1BvaW50W10+ID0+IHtcclxuICBjb25zdCBxdWVyeVBhcmFtcyA9IGdldFF1ZXJ5UGFyYW1zKHBhcmFtcyk7XHJcbiAgY29uc3Qgc3RyZWV0Sm9pbkNvbmRpdGlvbiA9IGdldFN0cmVldEpvaW5Db25kaXRpb24ocGFyYW1zKTtcclxuXHJcbiAgY29uc3Qgd2hlcmVDb25kaXRpb24gPSBnZXRXaGVyZUNvbmRpdGlvbihwYXJhbXMpO1xyXG5cclxuICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHJhd1F1ZXJ5KFxyXG4gICAgYFNFTEVDVCBhLmlkLCBzLm5hbWUgQVMgc3RyZWV0X25hbWUsIG8ubmFtZSBBUyBvYmplY3RfdHlwZV9uYW1lLCBhLmRlc2NyaXB0aXZlX251bWJlcixcclxuICAgICAgYS5vcmllbnRhdGlvbmFsX251bWJlciwgYS5vcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXIsIGMubmFtZSBBUyBjaXR5X25hbWUsXHJcbiAgICAgIGQubmFtZSBBUyBkaXN0cmljdF9uYW1lLCBtLm5hbWUgQVMgbXVuaWNpcGFsaXR5X3BhcnRfbmFtZSwgcC5uYW1lIEFTIHByYWd1ZV9kaXN0cmljdF9uYW1lLFxyXG4gICAgICBhLnBvc3RhbF9jb2RlLCBhLndnczg0X2xhdGl0dWRlLCBhLndnczg0X2xvbmdpdHVkZVxyXG4gICAgRlJPTSBhZGRyZXNzX3BvaW50IGFcclxuICAgICR7c3RyZWV0Sm9pbkNvbmRpdGlvbn1cclxuICAgIElOTkVSIEpPSU4gb2JqZWN0X3R5cGUgbyBPTiBvLmlkID0gYS5vYmplY3RfdHlwZV9pZFxyXG4gICAgSU5ORVIgSk9JTiBjaXR5IGMgT04gYy5jb2RlID0gYS5jaXR5X2NvZGVcclxuICAgIExFRlQgSk9JTiBjaXR5X2Rpc3RyaWN0IGQgT04gYS5jaXR5X2Rpc3RyaWN0X2NvZGUgPSBkLmNvZGVcclxuICAgIExFRlQgSk9JTiBtdW5pY2lwYWxpdHlfcGFydCBtIE9OIGEubXVuaWNpcGFsaXR5X3BhcnRfY29kZSA9IG0uY29kZVxyXG4gICAgTEVGVCBKT0lOIHByYWd1ZV9kaXN0cmljdCBwIE9OIGEucHJhZ3VlX2Rpc3RyaWN0X2NvZGUgPSBwLmNvZGVcclxuICAgIFdIRVJFICR7d2hlcmVDb25kaXRpb259YCxcclxuICAgIHF1ZXJ5UGFyYW1zXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIGZpbHRlckFkZHJlc3NQb2ludHMocXVlcnlSZXN1bHQubWFwKHJvd1RvQWRkcmVzc1BvaW50KSwgcGFyYW1zKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBmaWx0ZXJBZGRyZXNzUG9pbnRzID0gKFxyXG4gIGFkZHJlc3NQb2ludHM6IEFkZHJlc3NQb2ludFtdLFxyXG4gIHBhcmFtczogRmluZEFkZHJlc3NQb2ludHNQYXJhbXNcclxuKTogQWRkcmVzc1BvaW50W10gPT4ge1xyXG4gIGlmIChcclxuICAgIHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5XCIgfHxcclxuICAgIHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5Tm9TdHJlZXROYW1lXCIgfHxcclxuICAgIHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5UGFydFwiXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gYWRkcmVzc1BvaW50cztcclxuICB9XHJcblxyXG4gIGNvbnN0IHJlc3VsdDogQWRkcmVzc1BvaW50W10gPSBbXTtcclxuICBjb25zdCBudW1iZXJTcGVjID0gcGFyYW1zLnNtZExpbmUubnVtYmVyU3BlYztcclxuICBpZiAoaXNTZXJpZXNTcGVjQXJyYXkobnVtYmVyU3BlYykpIHtcclxuICAgIG51bWJlclNwZWMuZm9yRWFjaCgoc2VyaWVzU3BlYykgPT4ge1xyXG4gICAgICByZXN1bHQucHVzaCguLi5maWx0ZXJBZGRyZXNzUG9pbnRzQnlSYW5nZXMoYWRkcmVzc1BvaW50cywgc2VyaWVzU3BlYykpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gd2hlbiBubyBudW1iZXIgc3BlY3MgYXJlIHByZXNlbnQsIHdlIHRha2UgZXZlcnl0aGluZ1xyXG4gICAgaWYgKG51bWJlclNwZWMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJlc3VsdC5wdXNoKC4uLmFkZHJlc3NQb2ludHMpO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoaXNOZWdhdGl2ZVNlcmllc1NwZWMobnVtYmVyU3BlYykpIHtcclxuICAgIC8vIG5lZ2F0aXZlIG51bWJlciBzcGVjIChlLmcuIG9kZCBudW1iZXJzIGV4Y2VwdCAxMy0xNylcclxuICAgIGNvbnN0IHRvRXhjbHVkZSA9IGZpbHRlckFkZHJlc3NQb2ludHNCeVJhbmdlcyhhZGRyZXNzUG9pbnRzLCBudW1iZXJTcGVjKTtcclxuICAgIHJlc3VsdC5wdXNoKFxyXG4gICAgICAuLi5hZGRyZXNzUG9pbnRzLmZpbHRlcihcclxuICAgICAgICAoYWRkcmVzc1BvaW50KSA9PiAhdG9FeGNsdWRlLmluY2x1ZGVzKGFkZHJlc3NQb2ludClcclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG5jb25zdCBmaWx0ZXJBZGRyZXNzUG9pbnRzQnlSYW5nZXMgPSAoXHJcbiAgYWRkcmVzc1BvaW50czogQWRkcmVzc1BvaW50W10sXHJcbiAgc2VyaWVzU3BlYzogU2VyaWVzU3BlY1xyXG4pOiBBZGRyZXNzUG9pbnRbXSA9PiB7XHJcbiAgY29uc3QgcmVzdWx0OiBBZGRyZXNzUG9pbnRbXSA9IFtdO1xyXG4gIHNlcmllc1NwZWMucmFuZ2VzLmZvckVhY2goKHJhbmdlKSA9PiB7XHJcbiAgICByZXN1bHQucHVzaChcclxuICAgICAgLi4uYWRkcmVzc1BvaW50cy5maWx0ZXIoKGFkZHJlc3NQb2ludCkgPT4ge1xyXG4gICAgICAgIGlmIChpc1JhbmdlKHJhbmdlKSkge1xyXG4gICAgICAgICAgY29uc3QgbnVtYmVyID0gZ2V0TnVtYmVyQnlUeXBlKHNlcmllc1NwZWMudHlwZSwgYWRkcmVzc1BvaW50KTtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGlzSW5SYW5nZShcclxuICAgICAgICAgICAgICBudW1iZXIsXHJcbiAgICAgICAgICAgICAgc2VyaWVzU3BlYy50eXBlICE9PSBTZXJpZXNUeXBlLkRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgICA/IGFkZHJlc3NQb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyID8/IG51bGxcclxuICAgICAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgICAgICByYW5nZVxyXG4gICAgICAgICAgICApICYmIGZpdHNUeXBlKG51bWJlciwgc2VyaWVzU3BlYy50eXBlKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgZnVsbFN0cmVldE51bWJlcjogRnVsbFN0cmVldE51bWJlciA9IHJhbmdlO1xyXG4gICAgICAgICAgcmV0dXJuIGVxdWFsc0Z1bGxTdHJlZXROdW1iZXIoZnVsbFN0cmVldE51bWJlciwgYWRkcmVzc1BvaW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH0pO1xyXG5cclxuICAvLyB3aGVuIG5vIHNlcmllcyBzcGVjcyBhcmUgcHJlc2VudCwgd2UgdGFrZSBldmVyeXRoaW5nIHRoYXQgZml0cyB0aGUgdHlwZVxyXG4gIGlmIChzZXJpZXNTcGVjLnJhbmdlcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJlc3VsdC5wdXNoKFxyXG4gICAgICAuLi5hZGRyZXNzUG9pbnRzLmZpbHRlcigoYWRkcmVzc1BvaW50KSA9PlxyXG4gICAgICAgIGZpdHNUeXBlKFxyXG4gICAgICAgICAgZ2V0TnVtYmVyQnlUeXBlKHNlcmllc1NwZWMudHlwZSwgYWRkcmVzc1BvaW50KSxcclxuICAgICAgICAgIHNlcmllc1NwZWMudHlwZVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlQYXJhbXMgPSAoXHJcbiAgcGFyYW1zOiBGaW5kQWRkcmVzc1BvaW50c1BhcmFtc1xyXG4pOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcclxuICBpZiAocGFyYW1zLnR5cGUgPT09IFwic21kTGluZVwiICYmIHBhcmFtcy5zbWRMaW5lLnR5cGUgPT09IFwic3RyZWV0XCIpIHtcclxuICAgIHJldHVybiBbcGFyYW1zLnNtZExpbmUuc3RyZWV0LCBwYXJhbXMubXVuaWNpcGFsaXR5LmNvZGVdO1xyXG4gIH1cclxuXHJcbiAgaWYgKFxyXG4gICAgKHBhcmFtcy50eXBlID09PSBcInNtZExpbmVcIiAmJiBwYXJhbXMuc21kTGluZS50eXBlID09PSBcIm11bmljaXBhbGl0eVBhcnRcIikgfHxcclxuICAgIHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5UGFydFwiXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gW3BhcmFtcy5tdW5pY2lwYWxpdHlQYXJ0Q29kZV07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gW3BhcmFtcy5tdW5pY2lwYWxpdHkuY29kZV07XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0U3RyZWV0Sm9pbkNvbmRpdGlvbiA9IChcclxuICBwYXJhbXM6IEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zXHJcbik6IHN0cmluZyA9PiB7XHJcbiAgaWYgKHBhcmFtcy50eXBlID09PSBcInNtZExpbmVcIiAmJiBwYXJhbXMuc21kTGluZS50eXBlID09PSBcInN0cmVldFwiKSB7XHJcbiAgICByZXR1cm4gYEpPSU4gc3RyZWV0IHMgT04gYS5zdHJlZXRfY29kZSA9IHMuY29kZSBBTkQgcy5uYW1lID0gPyAke1xyXG4gICAgICBpc1NxbGl0ZShnZXRLbmV4RGIoKSkgPyBcIkNPTExBVEUgTk9DQVNFXCIgOiBcIlwiXHJcbiAgICB9YDtcclxuICB9XHJcbiAgcmV0dXJuIFwiTEVGVCBKT0lOIHN0cmVldCBzIE9OIGEuc3RyZWV0X2NvZGUgPSBzLmNvZGVcIjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRXaGVyZUNvbmRpdGlvbiA9IChwYXJhbXM6IEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zKTogc3RyaW5nID0+IHtcclxuICBpZiAoXHJcbiAgICAocGFyYW1zLnR5cGUgPT09IFwic21kTGluZVwiICYmIHBhcmFtcy5zbWRMaW5lLnR5cGUgPT09IFwibXVuaWNpcGFsaXR5UGFydFwiKSB8fFxyXG4gICAgcGFyYW1zLnR5cGUgPT09IFwid2hvbGVNdW5pY2lwYWxpdHlQYXJ0XCJcclxuICApIHtcclxuICAgIHJldHVybiBcImEubXVuaWNpcGFsaXR5X3BhcnRfY29kZSA9ID9cIjtcclxuICB9XHJcblxyXG4gIGlmIChwYXJhbXMudHlwZSA9PT0gXCJ3aG9sZU11bmljaXBhbGl0eU5vU3RyZWV0TmFtZVwiKSB7XHJcbiAgICByZXR1cm4gYCR7Z2V0TXVuaWNpcGFsaXR5V2hlcmUoXHJcbiAgICAgIFwiYVwiLFxyXG4gICAgICBwYXJhbXMubXVuaWNpcGFsaXR5XHJcbiAgICApfSBBTkQgYS5zdHJlZXRfY29kZSBJUyBOVUxMYDtcclxuICB9XHJcblxyXG4gIHJldHVybiBnZXRNdW5pY2lwYWxpdHlXaGVyZShcImFcIiwgcGFyYW1zLm11bmljaXBhbGl0eSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNJblJhbmdlID0gKFxyXG4gIG51bWJlcjogbnVtYmVyIHwgbnVsbCxcclxuICBsZXR0ZXI6IHN0cmluZyB8IG51bGwsXHJcbiAgcmFuZ2U6IFJhbmdlU3BlY1xyXG4pOiBib29sZWFuID0+IHtcclxuICBpZiAobnVtYmVyID09PSBudWxsKSB7XHJcbiAgICByZXR1cm4gIXJhbmdlLmZyb20gJiYgIXJhbmdlLnRvO1xyXG4gIH1cclxuXHJcbiAgLy8gZXhwbGFpbmVyOiBlaXRoZXIgdGhlIGxvd2VyIGJvdW5kIGlzIG5vdCBzZXQsIG9yIGl0IGlzIGxvd2VyIHRoYW4gdGhlIG51bWJlclxyXG4gIC8vIGlmIGl0J3MgZXF1YWwgdG8gdGhlIG51bWJlciwgd2UgYWxzbyBoYXZlIHRvIGNoZWNrIHRoZSBsZXR0ZXIgLSBpZiBpdCdzIG5vdCBzZXQsIHdlIGRvbid0IGNhcmVcclxuICAvLyBpZiBmcm9tLmxldHRlciBpcyBzZXQsIHdlIG5lZWQgdG8gaGF2ZSBhIGxldHRlciBzZXQgYW5kIGl0IGhhcyB0byBiZSBncmVhdGVyIG9yIGVxdWFsOlxyXG4gIC8vIG51bWJlciB3aXRob3V0IGxldHRlciBjb3VudHMgbG93ZXIgdGhhbiBudW1iZXIgd2l0aCBsZXR0ZXIgJ2EnIChlLmcuIDIzIDwgMjNhKVxyXG4gIGNvbnN0IHNhdGlzZmllc0Zyb20gPVxyXG4gICAgIXJhbmdlLmZyb20gfHxcclxuICAgIG51bWJlciA+IHJhbmdlLmZyb20ubnVtYmVyIHx8XHJcbiAgICAobnVtYmVyID09PSByYW5nZS5mcm9tLm51bWJlciAmJlxyXG4gICAgICAoIXJhbmdlLmZyb20ubGV0dGVyIHx8ICghIWxldHRlciAmJiBsZXR0ZXIgPj0gcmFuZ2UuZnJvbS5sZXR0ZXIpKSk7XHJcblxyXG4gIGNvbnN0IHNhdGlzZmllc1RvID1cclxuICAgICFyYW5nZS50byB8fFxyXG4gICAgbnVtYmVyIDwgcmFuZ2UudG8ubnVtYmVyIHx8XHJcbiAgICAobnVtYmVyID09PSByYW5nZS50by5udW1iZXIgJiZcclxuICAgICAgKCFsZXR0ZXIgfHxcclxuICAgICAgICAoISFyYW5nZS50by5sZXR0ZXIgJiYgISFsZXR0ZXIgJiYgbGV0dGVyIDw9IHJhbmdlLnRvLmxldHRlcikpKTtcclxuXHJcbiAgcmV0dXJuIHNhdGlzZmllc0Zyb20gJiYgc2F0aXNmaWVzVG87XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZml0c1R5cGUgPSAobnVtYmVyOiBudW1iZXIgfCBudWxsLCB0eXBlOiBTZXJpZXNUeXBlKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIHR5cGUgPT09IFNlcmllc1R5cGUuRGVzY3JpcHRpb24gfHxcclxuICAgIHR5cGUgPT09IFNlcmllc1R5cGUuQWxsIHx8XHJcbiAgICAodHlwZSA9PT0gU2VyaWVzVHlwZS5PZGQgJiYgbnVtYmVyICUgMiA9PT0gMSkgfHxcclxuICAgICh0eXBlID09PSBTZXJpZXNUeXBlLkV2ZW4gJiYgbnVtYmVyICUgMiA9PT0gMClcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVxdWFsc0Z1bGxTdHJlZXROdW1iZXIgPSAoXHJcbiAgZnVsbFN0cmVldE51bWJlcjogRnVsbFN0cmVldE51bWJlcixcclxuICBhZGRyZXNzUG9pbnQ6IEFkZHJlc3NQb2ludFxyXG4pOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gKFxyXG4gICAgZnVsbFN0cmVldE51bWJlci5kZXNjcmlwdGlvbk51bWJlci5udW1iZXIgPT09IGFkZHJlc3NQb2ludC5ob3VzZU51bWJlciAmJlxyXG4gICAgZnVsbFN0cmVldE51bWJlci5vcmllbnRhdGlvbmFsTnVtYmVyLm51bWJlciA9PT1cclxuICAgICAgYWRkcmVzc1BvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXIgJiZcclxuICAgICgoIWZ1bGxTdHJlZXROdW1iZXIub3JpZW50YXRpb25hbE51bWJlci5sZXR0ZXIgJiZcclxuICAgICAgIWFkZHJlc3NQb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyKSB8fFxyXG4gICAgICBmdWxsU3RyZWV0TnVtYmVyLm9yaWVudGF0aW9uYWxOdW1iZXIubGV0dGVyID09PVxyXG4gICAgICAgIGFkZHJlc3NQb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyKVxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBnZXROdW1iZXJCeVR5cGUgPSAoXHJcbiAgdHlwZTogU2VyaWVzVHlwZSxcclxuICBhZGRyZXNzUG9pbnQ6IEFkZHJlc3NQb2ludFxyXG4pOiBudW1iZXIgfCBudWxsID0+IHtcclxuICByZXR1cm4gdHlwZSA9PT0gU2VyaWVzVHlwZS5EZXNjcmlwdGlvblxyXG4gICAgPyBhZGRyZXNzUG9pbnQuaG91c2VOdW1iZXJcclxuICAgIDogYWRkcmVzc1BvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXIgPz8gbnVsbDtcclxufTtcclxuXHJcbmNvbnN0IGdldE11bmljaXBhbGl0eVdoZXJlID0gKFxyXG4gIGFsaWFzOiBzdHJpbmcsXHJcbiAgbXVuaWNpcGFsaXR5OiBNdW5pY2lwYWxpdHlcclxuKTogc3RyaW5nID0+IHtcclxuICByZXR1cm4gbXVuaWNpcGFsaXR5LnR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eVxyXG4gICAgPyBgJHthbGlhc30uY2l0eV9jb2RlID0gP2BcclxuICAgIDogYCR7YWxpYXN9LmNpdHlfZGlzdHJpY3RfY29kZSA9ID9gO1xyXG59O1xyXG5cclxuY29uc3Qgcm93VG9BZGRyZXNzUG9pbnQgPSAocm93OiBhbnkpOiBBZGRyZXNzUG9pbnQgPT4ge1xyXG4gIGNvbnN0IHBvaW50OiBBZGRyZXNzUG9pbnQgPSB7XHJcbiAgICBpZDogcm93LmlkLFxyXG4gICAgYWRkcmVzczogXCJcIixcclxuICAgIHR5cGU6XHJcbiAgICAgIHJvdy5vYmplY3RfdHlwZV9uYW1lID09PSBEZXNjcmlwdGl2ZVR5cGVcclxuICAgICAgICA/IEFkZHJlc3NQb2ludFR5cGUuRGVzY3JpcHRpb25cclxuICAgICAgICA6IEFkZHJlc3NQb2ludFR5cGUuUmVnaXN0cmF0aW9uLFxyXG4gICAgaG91c2VOdW1iZXI6IHJvdy5kZXNjcmlwdGl2ZV9udW1iZXIsXHJcbiAgICBjaXR5OiByb3cuY2l0eV9uYW1lLFxyXG4gICAgbXVuaWNpcGFsaXR5UGFydDogcm93Lm11bmljaXBhbGl0eV9wYXJ0X25hbWUsXHJcbiAgICBwb3N0YWxDb2RlOiByb3cucG9zdGFsX2NvZGUsXHJcbiAgICBsYXQ6IHJvdy53Z3M4NF9sYXRpdHVkZSxcclxuICAgIGxuZzogcm93Lndnczg0X2xvbmdpdHVkZSxcclxuICB9O1xyXG4gIGlmIChyb3cuc3RyZWV0X25hbWUgIT09IG51bGwpIHtcclxuICAgIHBvaW50LnN0cmVldCA9IHJvdy5zdHJlZXRfbmFtZTtcclxuICB9XHJcbiAgaWYgKHJvdy5vcmllbnRhdGlvbmFsX251bWJlciAhPT0gbnVsbCkge1xyXG4gICAgcG9pbnQub3JpZW50YXRpb25hbE51bWJlciA9IHJvdy5vcmllbnRhdGlvbmFsX251bWJlcjtcclxuICB9XHJcbiAgaWYgKHJvdy5vcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXIgIT09IG51bGwpIHtcclxuICAgIHBvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXJMZXR0ZXIgPSByb3cub3JpZW50YXRpb25hbF9udW1iZXJfbGV0dGVyO1xyXG4gIH1cclxuICBpZiAocm93LmRpc3RyaWN0X25hbWUgIT09IG51bGwpIHtcclxuICAgIHBvaW50LmRpc3RyaWN0ID0gcm93LmRpc3RyaWN0X25hbWU7XHJcbiAgfVxyXG4gIGlmIChyb3cucHJhZ3VlX2Rpc3RyaWN0X25hbWUgIT09IG51bGwpIHtcclxuICAgIHBvaW50LnByYWd1ZURpc3RyaWN0ID0gcm93LnByYWd1ZV9kaXN0cmljdF9uYW1lO1xyXG4gIH1cclxuICBwb2ludC5hZGRyZXNzID0gY3JlYXRlU2luZ2xlTGluZUFkZHJlc3MocG9pbnQpO1xyXG4gIHJldHVybiBwb2ludDtcclxufTtcclxuIl19
|
|
399
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1wb2ludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvYWRkcmVzcy1wb2ludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFLTCxVQUFVLEVBR1Ysb0JBQW9CLEVBQ3BCLE9BQU8sRUFDUCxpQkFBaUIsR0FDbEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RSxPQUFPLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLE9BQU8sRUFDUCxRQUFRLEVBQ1IsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBQXlCLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xFLE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQztBQUVqQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFDL0IsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7QUFFakMsTUFBTSxXQUFXLEdBQUc7SUFDbEIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO0lBQ3BCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO0NBQ3RCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUc7SUFDcEIsT0FBTyxFQUFFLENBQUM7SUFDVixRQUFRLEVBQUUsQ0FBQztJQUNYLFFBQVEsRUFBRSxDQUFDO0lBQ1gsWUFBWSxFQUFFLENBQUM7SUFDZixZQUFZLEVBQUUsQ0FBQztJQUNmLGtCQUFrQixFQUFFLENBQUM7SUFD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b0JBQW9CLEtBQUssSUFBSSxFQUFFO1FBQ3JDLEtBQUssQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLG9CQUFvQixDQUFDO0tBQ2pEO0lBQ0QsS0FBSyxDQUFDLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZHJlc3NQb2ludFR5cGUsIGNyZWF0ZVNpbmdsZUxpbmVBZGRyZXNzIH0gZnJvbSBcImN6ZWNoLWFkZHJlc3NcIjtcclxuaW1wb3J0IHtcclxuICBBZGRyZXNzUG9pbnQsXHJcbiAgRnVsbFN0cmVldE51bWJlcixcclxuICBSYW5nZVNwZWMsXHJcbiAgU2VyaWVzU3BlYyxcclxuICBTZXJpZXNUeXBlLFxyXG4gIFNtZEVycm9yLFxyXG4gIFNtZExpbmUsXHJcbiAgaXNOZWdhdGl2ZVNlcmllc1NwZWMsXHJcbiAgaXNSYW5nZSxcclxuICBpc1Nlcmllc1NwZWNBcnJheSxcclxufSBmcm9tIFwiLi4vc3RyZWV0LW1hcmtkb3duL3R5cGVzXCI7XHJcbmltcG9ydCB7IGZpbmRDbG9zZXN0U3RyaW5nLCByb3VuZFRvTkRlY2ltYWxQbGFjZXMgfSBmcm9tIFwiLi4vdXRpbHMvaGVscGVyc1wiO1xyXG5pbXBvcnQganRzazJ3Z3M4NCBmcm9tIFwiLi4vdXRpbHMvanRzazJ3Z3M4NFwiO1xyXG5pbXBvcnQge1xyXG4gIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyxcclxuICBnZW5lcmF0ZTJEUGxhY2Vob2xkZXJzLFxyXG4gIGdldEtuZXhEYixcclxuICBpbnNlcnRNdWx0aXBsZVJvd3MsXHJcbiAgaXNNeXNxbCxcclxuICBpc1NxbGl0ZSxcclxuICBub25FbXB0eU9yTnVsbCxcclxuICByYXdRdWVyeSxcclxufSBmcm9tIFwiLi9kYlwiO1xyXG5pbXBvcnQgeyBnZXRGb3VuZGVyQ2l0eUNvZGUgfSBmcm9tIFwiLi9mb3VuZGVyc1wiO1xyXG5pbXBvcnQgeyBGb3VuZGVyLCBNdW5pY2lwYWxpdHksIE11bmljaXBhbGl0eVR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5pbXBvcnQgY2h1bmsgZnJvbSBcImxvZGFzaC9jaHVua1wiO1xyXG5cclxuY29uc3QgRGVzY3JpcHRpdmVUeXBlID0gXCLEjS5wLlwiO1xyXG5jb25zdCBSZWdpc3RyYXRpb25UeXBlID0gXCLEjS5ldi5cIjtcclxuXHJcbmNvbnN0IE9iamVjdFR5cGVzID0ge1xyXG4gIFtEZXNjcmlwdGl2ZVR5cGVdOiAxLFxyXG4gIFtSZWdpc3RyYXRpb25UeXBlXTogMixcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBDb2x1bW4gPSB7XHJcbiAgYWRtQ29kZTogMCxcclxuICBjaXR5Q29kZTogMSxcclxuICBjaXR5TmFtZTogMixcclxuICBkaXN0cmljdENvZGU6IDMsXHJcbiAgZGlzdHJpY3ROYW1lOiA0LFxyXG4gIHByYWd1ZURpc3RyaWN0Q29kZTogNSxcclxuICBwcmFndWVEaXN0cmljdE5hbWU6IDYsXHJcbiAgbXVuaWNpcGFsaXR5UGFydENvZGU6IDcsXHJcbiAgbXVuaWNpcGFsaXR5UGFydE5hbWU6IDgsXHJcbiAgc3RyZWV0Q29kZTogOSxcclxuICBzdHJlZXROYW1lOiAxMCxcclxuICBvYmplY3RUeXBlOiAxMSxcclxuICBob3VzZU51bWJlcjogMTIsXHJcbiAgb3JpZW50YXRpb25hbE51bWJlcjogMTMsXHJcbiAgb3JpZW50YXRpb25hbE51bWJlckxldHRlcjogMTQsXHJcbiAgcG9zdGFsQ29kZTogMTUsXHJcbiAgeUNvb3JkaW5hdGU6IDE2LFxyXG4gIHhDb29yZGluYXRlOiAxNyxcclxuICB2YWxpZEZyb206IDE4LFxyXG59O1xyXG5cclxuY29uc3QgY29sdW1uTmFtZXMgPSBbXHJcbiAgXCJpZFwiLFxyXG4gIFwic3RyZWV0X2NvZGVcIixcclxuICBcIm9iamVjdF90eXBlX2lkXCIsXHJcbiAgXCJkZXNjcmlwdGl2ZV9udW1iZXJcIixcclxuICBcIm9yaWVudGF0aW9uYWxfbnVtYmVyXCIsXHJcbiAgXCJvcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXJcIixcclxuICBcImNpdHlfY29kZVwiLFxyXG4gIFwiY2l0eV9kaXN0cmljdF9jb2RlXCIsXHJcbiAgXCJtdW5pY2lwYWxpdHlfcGFydF9jb2RlXCIsXHJcbiAgXCJwcmFndWVfZGlzdHJpY3RfY29kZVwiLFxyXG4gIFwicG9zdGFsX2NvZGVcIixcclxuICBcImp0c2tfeFwiLFxyXG4gIFwianRza195XCIsXHJcbiAgXCJ3Z3M4NF9sYXRpdHVkZVwiLFxyXG4gIFwid2dzODRfbG9uZ2l0dWRlXCIsXHJcbl07XHJcblxyXG5leHBvcnQgY29uc3QgY29tbWl0QWRkcmVzc1BvaW50cyA9IGFzeW5jIChcclxuICBidWZmZXI6IHN0cmluZ1tdW11cclxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG4gIGF3YWl0IGluc2VydENpdGllcyhidWZmZXIpO1xyXG4gIGF3YWl0IGluc2VydERpc3RyaWN0cyhidWZmZXIpO1xyXG4gIGF3YWl0IGluc2VydE11bmljaXBhbGl0eVBhcnRzKGJ1ZmZlcik7XHJcbiAgYXdhaXQgaW5zZXJ0U3RyZWV0cyhidWZmZXIpO1xyXG4gIGF3YWl0IGluc2VydFByYWd1ZURpc3RyaWN0cyhidWZmZXIpO1xyXG5cclxuICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIChzdHJpbmcgfCBudWxsKVtdPiA9IHt9O1xyXG4gIGJ1ZmZlci5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICBsZXQgbGF0T3JOdWxsOiBzdHJpbmcsIGxvbk9yTnVsbDogc3RyaW5nO1xyXG4gICAgbGF0T3JOdWxsID0gbnVsbDtcclxuICAgIGxvbk9yTnVsbCA9IG51bGw7XHJcbiAgICBpZiAoZGF0YVtDb2x1bW4ueENvb3JkaW5hdGVdICYmIGRhdGFbQ29sdW1uLnlDb29yZGluYXRlXSkge1xyXG4gICAgICBjb25zdCB7IGxhdCwgbG9uIH0gPSBqdHNrMndnczg0KFxyXG4gICAgICAgIHBhcnNlRmxvYXQoZGF0YVtDb2x1bW4ueENvb3JkaW5hdGVdKSxcclxuICAgICAgICBwYXJzZUZsb2F0KGRhdGFbQ29sdW1uLnlDb29yZGluYXRlXSlcclxuICAgICAgKTtcclxuICAgICAgW2xhdE9yTnVsbCwgbG9uT3JOdWxsXSA9IFtsYXQudG9TdHJpbmcoKSwgbG9uLnRvU3RyaW5nKCldO1xyXG4gICAgfVxyXG4gICAgcGFyYW1zW2RhdGFbQ29sdW1uLmFkbUNvZGVdXSA9IFtcclxuICAgICAgZGF0YVtDb2x1bW4uYWRtQ29kZV0sXHJcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLnN0cmVldENvZGVdKSxcclxuICAgICAgT2JqZWN0VHlwZXNbZGF0YVtDb2x1bW4ub2JqZWN0VHlwZV1dLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5ob3VzZU51bWJlcl0pLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5vcmllbnRhdGlvbmFsTnVtYmVyXSksXHJcbiAgICAgIG5vbkVtcHR5T3JOdWxsKGRhdGFbQ29sdW1uLm9yaWVudGF0aW9uYWxOdW1iZXJMZXR0ZXJdKSxcclxuICAgICAgZGF0YVtDb2x1bW4uY2l0eUNvZGVdLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi5kaXN0cmljdENvZGVdKSxcclxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4ubXVuaWNpcGFsaXR5UGFydENvZGVdKSxcclxuICAgICAgbm9uRW1wdHlPck51bGwoZGF0YVtDb2x1bW4ucHJhZ3VlRGlzdHJpY3RDb2RlXSksXHJcbiAgICAgIGRhdGFbQ29sdW1uLnBvc3RhbENvZGVdLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi54Q29vcmRpbmF0ZV0pLFxyXG4gICAgICBub25FbXB0eU9yTnVsbChkYXRhW0NvbHVtbi55Q29vcmRpbmF0ZV0pLFxyXG4gICAgICBsYXRPck51bGwsXHJcbiAgICAgIGxvbk9yTnVsbCxcclxuICAgIF07XHJcbiAgfSk7XHJcblxyXG4gIC8vIGZpbmQgYWxyZWFkeSBleGlzdGluZyByb3dzXHJcbiAgY29uc3QgZXhpc3RpbmdSb3dzID0gYXdhaXQgcmF3UXVlcnkoXHJcbiAgICBgU0VMRUNUICogRlJPTSBhZGRyZXNzX3BvaW50IFdIRVJFIGlkIElOICgke2J1ZmZlclxyXG4gICAgICAubWFwKChkYXRhKSA9PiBkYXRhW0NvbHVtbi5hZG1Db2RlXSlcclxuICAgICAgLmpvaW4oXCIsXCIpfSlgXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgcXVlcmllcyA9IFtdO1xyXG4gIGZvciAoY29uc3Qgcm93IG9mIGV4aXN0aW5nUm93cykge1xyXG4gICAgY29uc3QgdG9JbnNlcnQgPSBwYXJhbXNbcm93LmlkXTtcclxuICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMocm93KTtcclxuICAgIGlmICghdG9JbnNlcnQuZXZlcnkoKHYsIGkpID0+IHZhbHVlc0VxdWFsKHYsIHZhbHVlc1tpXSkpKSB7XHJcbiAgICAgIC8vIHVwZGF0ZSB0aG9zZSB3aG9zZSB2YWx1ZXMgZGlmZmVyXHJcbiAgICAgIHF1ZXJpZXMucHVzaChcclxuICAgICAgICByYXdRdWVyeShcclxuICAgICAgICAgIGBVUERBVEUgYWRkcmVzc19wb2ludCBTRVQgJHtjb2x1bW5OYW1lc1xyXG4gICAgICAgICAgICAubWFwKChjKSA9PiBgJHtjfSA9ID9gKVxyXG4gICAgICAgICAgICAuam9pbihcIiwgXCIpfSBXSEVSRSBpZCA9ID9gLFxyXG4gICAgICAgICAgWy4uLnRvSW5zZXJ0LCByb3cuaWRdXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXdhaXQgUHJvbWlzZS5hbGwocXVlcmllcyk7XHJcblxyXG4gIGNvbnN0IHBsYWNlSG9sZGVycyA9IGdlbmVyYXRlMkRQbGFjZWhvbGRlcnMoXHJcbiAgICBjb2x1bW5OYW1lcy5sZW5ndGgsXHJcbiAgICBidWZmZXIubGVuZ3RoXHJcbiAgKTtcclxuXHJcbiAgY29uc3Qga25leCA9IGdldEtuZXhEYigpO1xyXG4gIGF3YWl0IHJhd1F1ZXJ5KFxyXG4gICAgYElOU0VSVCAke1xyXG4gICAgICBpc015c3FsKGtuZXgpID8gXCJJR05PUkVcIiA6IFwiXCJcclxuICAgIH0gSU5UTyBhZGRyZXNzX3BvaW50ICgke2NvbHVtbk5hbWVzLmpvaW4oXCIsXCIpfSkgVkFMVUVTICR7cGxhY2VIb2xkZXJzfSAke1xyXG4gICAgICAhaXNNeXNxbChrbmV4KSA/IFwiT04gQ09ORkxJQ1QgKGlkKSBETyBOT1RISU5HXCIgOiBcIlwiXHJcbiAgICB9YCxcclxuICAgIE9iamVjdC52YWx1ZXMocGFyYW1zKS5mbGF0KClcclxuICApO1xyXG5cclxuICByZXR1cm4gYnVmZmVyLmxlbmd0aDtcclxufTtcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW1vdmVEZXByZWNhdGVkQWRkcmVzc1BvaW50cyhcclxuICBhbGxJZHM6IFNldDxudW1iZXI+XHJcbik6IFByb21pc2U8dm9pZD4ge1xyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcclxuICBjb25zdCBleGlzdGluZ0lkcyA9IGF3YWl0IGtuZXgucGx1Y2soXCJpZFwiKS5mcm9tKFwiYWRkcmVzc19wb2ludFwiKTtcclxuICBjb25zdCB0b1JlbW92ZSA9IGV4aXN0aW5nSWRzLmZpbHRlcigoaWQpID0+ICFhbGxJZHMuaGFzKGlkKSk7XHJcbiAgY29uc3QgY2h1bmtzID0gY2h1bmsodG9SZW1vdmUsIDEwMDApO1xyXG4gIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XHJcbiAgICBhd2FpdCBrbmV4KFwiYWRkcmVzc19wb2ludFwiKS53aGVyZUluKFwiaWRcIiwgY2h1bmspLmRlbGV0ZSgpO1xyXG4gIH1cclxuICBjb25zb2xlLmxvZyhgUmVtb3ZlZCAke3RvUmVtb3ZlLmxlbmd0aH0gZGVwcmVjYXRlZCBhZGRyZXNzIHBvaW50cy5gKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdmFsdWVzRXF1YWwoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcclxuICByZXR1cm4gc2FuaXRpemVWYWx1ZShhKSA9PT0gc2FuaXRpemVWYWx1ZShiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2FuaXRpemVWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcclxuICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XHJcblxyXG4gIGlmICgvXFxkK1xcLlxcZCsvLnRlc3QodmFsdWUpKSB7XHJcbiAgICByZXR1cm4gcm91bmRUb05EZWNpbWFsUGxhY2VzKHBhcnNlRmxvYXQodmFsdWUpLCA2KS50b1N0cmluZygpO1xyXG4gIH1cclxuICByZXR1cm4gdmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRDaXRpZXMgPSBhc3luYyAoYnVmZmVyOiBzdHJpbmdbXVtdKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICByZXR1cm4gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgZXh0cmFjdEtleVZhbHVlc1BhaXJzKGJ1ZmZlciwgQ29sdW1uLmNpdHlDb2RlLCBbQ29sdW1uLmNpdHlOYW1lXSksXHJcbiAgICBcImNpdHlcIixcclxuICAgIFtcImNvZGVcIiwgXCJuYW1lXCJdXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnREaXN0cmljdHMgPSBhc3luYyAoYnVmZmVyOiBzdHJpbmdbXVtdKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcclxuICByZXR1cm4gYXdhaXQgaW5zZXJ0TXVsdGlwbGVSb3dzKFxyXG4gICAgZXh0cmFjdEtleVZhbHVlc1BhaXJzKGJ1ZmZlciwgQ29sdW1uLmRpc3RyaWN0Q29kZSwgW1xyXG4gICAgICBDb2x1bW4uY2l0eUNvZGUsXHJcbiAgICAgIENvbHVtbi5kaXN0cmljdE5hbWUsXHJcbiAgICBdKSxcclxuICAgIFwiY2l0eV9kaXN0cmljdFwiLFxyXG4gICAgW1wiY29kZVwiLCBcImNpdHlfY29kZVwiLCBcIm5hbWVcIl1cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydE11bmljaXBhbGl0eVBhcnRzID0gYXN5bmMgKFxyXG4gIGJ1ZmZlcjogc3RyaW5nW11bXVxyXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xyXG4gIHJldHVybiBhd2FpdCBpbnNlcnRNdWx0aXBsZVJvd3MoXHJcbiAgICBleHRyYWN0S2V5VmFsdWVzUGFpcnMoYnVmZmVyLCBDb2x1bW4ubXVuaWNpcGFsaXR5UGFydENvZGUsIFtcclxuICAgICAgQ29sdW1uLm11bmljaXBhbGl0eVBhcnROYW1lLFxyXG4gICAgICBDb2x1bW4uY2l0eUNvZGUsXHJcbiAgICBdKSxcclxuICAgIFwibXVuaWNpcGFsaXR5X3BhcnRcIixcclxuICAgIFtcImNvZGVcIiwgXCJuYW1lXCIsIFwiY2l0eV9jb2RlXCJdXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRQcmFndWVEaXN0cmljdHMgPSBhc3luYyAoXHJcbiAgYnVmZmVyOiBzdHJpbmdbXVtdXHJcbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgcmV0dXJuIGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcclxuICAgIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyhidWZmZXIsIENvbHVtbi5wcmFndWVEaXN0cmljdENvZGUsIFtcclxuICAgICAgQ29sdW1uLnByYWd1ZURpc3RyaWN0TmFtZSxcclxuICAgIF0pLFxyXG4gICAgXCJwcmFndWVfZGlzdHJpY3RcIixcclxuICAgIFtcImNvZGVcIiwgXCJuYW1lXCJdXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbnNlcnRTdHJlZXRzID0gYXN5bmMgKGJ1ZmZlcjogc3RyaW5nW11bXSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XHJcbiAgcmV0dXJuIGF3YWl0IGluc2VydE11bHRpcGxlUm93cyhcclxuICAgIGV4dHJhY3RLZXlWYWx1ZXNQYWlycyhidWZmZXIsIENvbHVtbi5zdHJlZXRDb2RlLCBbXHJcbiAgICAgIENvbHVtbi5jaXR5Q29kZSxcclxuICAgICAgQ29sdW1uLnN0cmVldE5hbWUsXHJcbiAgICBdKSxcclxuICAgIFwic3RyZWV0XCIsXHJcbiAgICBbXCJjb2RlXCIsIFwiY2l0eV9jb2RlXCIsIFwibmFtZVwiXVxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgYXJlQWRkcmVzc1BvaW50c1N5bmNlZCA9IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcclxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRLbmV4RGIoKVxyXG4gICAgLmNvdW50KFwiKlwiLCB7IGFzOiBcImNvdW50QWxsXCIgfSlcclxuICAgIC5mcm9tKFwiYWRkcmVzc19wb2ludFwiKVxyXG4gICAgLmZpcnN0KCk7XHJcbiAgcmV0dXJuIE51bWJlcihyZXN1bHQuY291bnRBbGwpID49IDI5MDAwMDA7IC8vIHRvdGFsIGlzIGFsbW9zdCAzIG1pbGxpb25cclxufTtcclxuXHJcbmNvbnN0IGFkZHJlc3NQb2ludFNlbGVjdCA9IGBcclxuICBTRUxFQ1QgYS5pZCwgcy5uYW1lIEFTIHN0cmVldF9uYW1lLCBvLm5hbWUgQVMgb2JqZWN0X3R5cGVfbmFtZSwgYS5kZXNjcmlwdGl2ZV9udW1iZXIsXHJcbiAgICAgICAgYS5vcmllbnRhdGlvbmFsX251bWJlciwgYS5vcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXIsIGMubmFtZSBBUyBjaXR5X25hbWUsXHJcbiAgICAgICAgbS5uYW1lIEFTIG11bmljaXBhbGl0eV9wYXJ0X25hbWUsIHAubmFtZSBBUyBwcmFndWVfZGlzdHJpY3RfbmFtZSxcclxuICAgICAgICBkLm5hbWUgQVMgZGlzdHJpY3RfbmFtZSwgYS5wb3N0YWxfY29kZSwgYS53Z3M4NF9sYXRpdHVkZSwgYS53Z3M4NF9sb25naXR1ZGVcclxuICBGUk9NIGFkZHJlc3NfcG9pbnQgYVxyXG4gIExFRlQgSk9JTiBzdHJlZXQgcyBPTiBhLnN0cmVldF9jb2RlID0gcy5jb2RlXHJcbiAgSU5ORVIgSk9JTiBvYmplY3RfdHlwZSBvIE9OIG8uaWQgPSBhLm9iamVjdF90eXBlX2lkXHJcbiAgSU5ORVIgSk9JTiBjaXR5IGMgT04gYy5jb2RlID0gYS5jaXR5X2NvZGVcclxuICBMRUZUIEpPSU4gY2l0eV9kaXN0cmljdCBkIE9OIGEuY2l0eV9kaXN0cmljdF9jb2RlID0gZC5jb2RlXHJcbiAgTEVGVCBKT0lOIHByYWd1ZV9kaXN0cmljdCBwIE9OIGEucHJhZ3VlX2Rpc3RyaWN0X2NvZGUgPSBwLmNvZGVcclxuICBMRUZUIEpPSU4gbXVuaWNpcGFsaXR5X3BhcnQgbSBPTiBhLm11bmljaXBhbGl0eV9wYXJ0X2NvZGUgPSBtLmNvZGVgO1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldEFkZHJlc3NQb2ludEJ5SWQgPSBhc3luYyAoXHJcbiAgYWRkcmVzc1BvaW50SWQ6IG51bWJlclxyXG4pOiBQcm9taXNlPEFkZHJlc3NQb2ludCB8IG51bGw+ID0+IHtcclxuICBjb25zdCByb3cgPSBhd2FpdCByYXdRdWVyeShcclxuICAgIGAke2FkZHJlc3NQb2ludFNlbGVjdH1cclxuICAgICAgV0hFUkUgYS5pZCA9ID9gLFxyXG4gICAgW2FkZHJlc3NQb2ludElkXVxyXG4gICk7XHJcbiAgaWYgKHJvdy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICByZXR1cm4gcm93VG9BZGRyZXNzUG9pbnQocm93WzBdKTtcclxufTtcclxuXHJcbmxldCBsYXN0Rm91bmRlcjogRm91bmRlciB8IG51bGwgPSBudWxsO1xyXG5sZXQgYWxsU3RyZWV0czogc3RyaW5nW10gPSBbXTtcclxuXHJcbmV4cG9ydCBjb25zdCBjaGVja1N0cmVldEV4aXN0cyA9IGFzeW5jIChcclxuICBzdHJlZXROYW1lOiBzdHJpbmcsXHJcbiAgZm91bmRlcjogRm91bmRlclxyXG4pOiBQcm9taXNlPHsgZXhpc3RzOiBib29sZWFuOyBlcnJvcnM6IFNtZEVycm9yW10gfT4gPT4ge1xyXG4gIGNvbnN0IGtuZXggPSBnZXRLbmV4RGIoKTtcclxuICBjb25zdCBlcnJvcnM6IFNtZEVycm9yW10gPSBbXTtcclxuXHJcbiAgLy8gd2UgY2hlY2sgdGhlIHdob2xlIGNpdHlcclxuICBjb25zdCBjaXR5Q29kZSA9IGF3YWl0IGdldEZvdW5kZXJDaXR5Q29kZShmb3VuZGVyKTtcclxuICBjb25zdCByb3dMaXN0ID0gYXdhaXQgcmF3UXVlcnkoXHJcbiAgICBgU0VMRUNUIG5hbWUgQVMgc3RyZWV0X25hbWVcclxuICAgIEZST00gc3RyZWV0XHJcbiAgICBXSEVSRSBjaXR5X2NvZGUgPSA/IEFORCBuYW1lID0gPyAgJHtcclxuICAgICAgaXNTcWxpdGUoa25leCkgPyBcIkNPTExBVEUgTk9DQVNFXCIgOiBcIlwiXHJcbiAgICB9YCxcclxuICAgIFtjaXR5Q29kZSwgc3RyZWV0TmFtZV1cclxuICApO1xyXG5cclxuICBpZiAocm93TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICBjb25zdCByb3cgPSByb3dMaXN0WzBdO1xyXG4gICAgaWYgKHJvdy5zdHJlZXRfbmFtZSAhPT0gc3RyZWV0TmFtZSkge1xyXG4gICAgICAvLyBlcnJvcnMucHVzaChcclxuICAgICAgLy8gICBgU3RyZWV0ICcke3N0cmVldE5hbWV9JyBoYXMgd3JvbmcgY2FzZSwgY29ycmVjdCBjYXNlOiAnJHtyb3cuc3RyZWV0X25hbWV9Jy5gXHJcbiAgICAgIC8vICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBleGlzdHM6IHRydWUsIGVycm9ycyB9O1xyXG4gIH1cclxuXHJcbiAgaWYgKGxhc3RGb3VuZGVyICE9PSBmb3VuZGVyKSB7XHJcbiAgICBhbGxTdHJlZXRzID0gYXdhaXQgZ2V0QWxsU3RyZWV0cyhjaXR5Q29kZSk7XHJcbiAgICBsYXN0Rm91bmRlciA9IGZvdW5kZXI7XHJcbiAgfVxyXG5cclxuICBjb25zdCBtYXRjaCA9IGFsbFN0cmVldHMuZmluZChcclxuICAgIChzKSA9PlxyXG4gICAgICBzLnRvTG9jYWxlTG93ZXJDYXNlKFwiY3MtQ1pcIikgPT09IHN0cmVldE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoXCJjcy1DWlwiKVxyXG4gICk7XHJcbiAgbGV0IGV4aXN0cyA9IGZhbHNlO1xyXG4gIGlmIChtYXRjaCkge1xyXG4gICAgZXhpc3RzID0gdHJ1ZTtcclxuICAgIGlmIChzdHJlZXROYW1lICE9PSBtYXRjaCkge1xyXG4gICAgICAvLyBlcnJvcnMucHVzaChcclxuICAgICAgLy8gICBgU3RyZWV0ICcke3N0cmVldE5hbWV9JyBoYXMgd3JvbmcgY2FzZSwgY29ycmVjdCBjYXNlOiAnJHttYXRjaH0nLmBcclxuICAgICAgLy8gKTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgY2xvc2VzdCA9IGZpbmRDbG9zZXN0U3RyaW5nKHN0cmVldE5hbWUsIGFsbFN0cmVldHMpO1xyXG4gICAgZXJyb3JzLnB1c2goe1xyXG4gICAgICBtZXNzYWdlOiBgVWxpY2UgJyR7c3RyZWV0TmFtZX0nIHYgdMOpdG8gb2JjaSBuZWV4aXN0dWplLCBteXNsZWxpIGpzdGUgJyR7Y2xvc2VzdH0nP2AsXHJcbiAgICAgIHN0YXJ0T2Zmc2V0OiAwLFxyXG4gICAgICBlbmRPZmZzZXQ6IHN0cmVldE5hbWUubGVuZ3RoICsgMSxcclxuICAgIH0pO1xyXG4gIH1cclxuICByZXR1cm4geyBleGlzdHM6IGZhbHNlLCBlcnJvcnMgfTtcclxufTtcclxuXHJcbmNvbnN0IGdldEFsbFN0cmVldHMgPSBhc3luYyAoY2l0eUNvZGU6IG51bWJlcik6IFByb21pc2U8c3RyaW5nW10+ID0+IHtcclxuICBjb25zdCBrbmV4ID0gZ2V0S25leERiKCk7XHJcbiAgcmV0dXJuIGF3YWl0IGtuZXgucGx1Y2soXCJuYW1lXCIpLmZyb20oXCJzdHJlZXRcIikud2hlcmUoXCJjaXR5X2NvZGVcIiwgY2l0eUNvZGUpO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgRmluZEFkZHJlc3NQb2ludHNQYXJhbXMgPVxyXG4gIHwge1xyXG4gICAgICB0eXBlOiBcInNtZExpbmVcIjtcclxuICAgICAgc21kTGluZTogU21kTGluZTtcclxuICAgICAgbXVuaWNpcGFsaXR5OiBNdW5pY2lwYWxpdHk7XHJcbiAgICAgIG11bmljaXBhbGl0eVBhcnRDb2RlPzogbnVtYmVyO1xyXG4gICAgfVxyXG4gIHwge1xyXG4gICAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5UGFydFwiO1xyXG4gICAgICBtdW5pY2lwYWxpdHlQYXJ0Q29kZTogbnVtYmVyO1xyXG4gICAgfVxyXG4gIHwge1xyXG4gICAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5XCI7XHJcbiAgICAgIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5O1xyXG4gICAgfVxyXG4gIHwge1xyXG4gICAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5Tm9TdHJlZXROYW1lXCI7XHJcbiAgICAgIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5O1xyXG4gICAgfTtcclxuXHJcbmV4cG9ydCBjb25zdCBmaW5kQWRkcmVzc1BvaW50cyA9IGFzeW5jIChcclxuICBwYXJhbXM6IEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zXHJcbik6IFByb21pc2U8QWRkcmVzc1BvaW50W10+ID0+IHtcclxuICBjb25zdCBxdWVyeVBhcmFtcyA9IGdldFF1ZXJ5UGFyYW1zKHBhcmFtcyk7XHJcbiAgY29uc3Qgc3RyZWV0Sm9pbkNvbmRpdGlvbiA9IGdldFN0cmVldEpvaW5Db25kaXRpb24ocGFyYW1zKTtcclxuXHJcbiAgY29uc3Qgd2hlcmVDb25kaXRpb24gPSBnZXRXaGVyZUNvbmRpdGlvbihwYXJhbXMpO1xyXG5cclxuICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHJhd1F1ZXJ5KFxyXG4gICAgYFNFTEVDVCBhLmlkLCBzLm5hbWUgQVMgc3RyZWV0X25hbWUsIG8ubmFtZSBBUyBvYmplY3RfdHlwZV9uYW1lLCBhLmRlc2NyaXB0aXZlX251bWJlcixcclxuICAgICAgYS5vcmllbnRhdGlvbmFsX251bWJlciwgYS5vcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXIsIGMubmFtZSBBUyBjaXR5X25hbWUsXHJcbiAgICAgIGQubmFtZSBBUyBkaXN0cmljdF9uYW1lLCBtLm5hbWUgQVMgbXVuaWNpcGFsaXR5X3BhcnRfbmFtZSwgcC5uYW1lIEFTIHByYWd1ZV9kaXN0cmljdF9uYW1lLFxyXG4gICAgICBhLnBvc3RhbF9jb2RlLCBhLndnczg0X2xhdGl0dWRlLCBhLndnczg0X2xvbmdpdHVkZVxyXG4gICAgRlJPTSBhZGRyZXNzX3BvaW50IGFcclxuICAgICR7c3RyZWV0Sm9pbkNvbmRpdGlvbn1cclxuICAgIElOTkVSIEpPSU4gb2JqZWN0X3R5cGUgbyBPTiBvLmlkID0gYS5vYmplY3RfdHlwZV9pZFxyXG4gICAgSU5ORVIgSk9JTiBjaXR5IGMgT04gYy5jb2RlID0gYS5jaXR5X2NvZGVcclxuICAgIExFRlQgSk9JTiBjaXR5X2Rpc3RyaWN0IGQgT04gYS5jaXR5X2Rpc3RyaWN0X2NvZGUgPSBkLmNvZGVcclxuICAgIExFRlQgSk9JTiBtdW5pY2lwYWxpdHlfcGFydCBtIE9OIGEubXVuaWNpcGFsaXR5X3BhcnRfY29kZSA9IG0uY29kZVxyXG4gICAgTEVGVCBKT0lOIHByYWd1ZV9kaXN0cmljdCBwIE9OIGEucHJhZ3VlX2Rpc3RyaWN0X2NvZGUgPSBwLmNvZGVcclxuICAgIFdIRVJFICR7d2hlcmVDb25kaXRpb259YCxcclxuICAgIHF1ZXJ5UGFyYW1zXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIGZpbHRlckFkZHJlc3NQb2ludHMocXVlcnlSZXN1bHQubWFwKHJvd1RvQWRkcmVzc1BvaW50KSwgcGFyYW1zKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBmaWx0ZXJBZGRyZXNzUG9pbnRzID0gKFxyXG4gIGFkZHJlc3NQb2ludHM6IEFkZHJlc3NQb2ludFtdLFxyXG4gIHBhcmFtczogRmluZEFkZHJlc3NQb2ludHNQYXJhbXNcclxuKTogQWRkcmVzc1BvaW50W10gPT4ge1xyXG4gIGlmIChcclxuICAgIHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5XCIgfHxcclxuICAgIHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5Tm9TdHJlZXROYW1lXCIgfHxcclxuICAgIHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5UGFydFwiXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gYWRkcmVzc1BvaW50cztcclxuICB9XHJcblxyXG4gIGNvbnN0IHJlc3VsdDogQWRkcmVzc1BvaW50W10gPSBbXTtcclxuICBjb25zdCBudW1iZXJTcGVjID0gcGFyYW1zLnNtZExpbmUubnVtYmVyU3BlYztcclxuICBpZiAoaXNTZXJpZXNTcGVjQXJyYXkobnVtYmVyU3BlYykpIHtcclxuICAgIG51bWJlclNwZWMuZm9yRWFjaCgoc2VyaWVzU3BlYykgPT4ge1xyXG4gICAgICByZXN1bHQucHVzaCguLi5maWx0ZXJBZGRyZXNzUG9pbnRzQnlSYW5nZXMoYWRkcmVzc1BvaW50cywgc2VyaWVzU3BlYykpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gd2hlbiBubyBudW1iZXIgc3BlY3MgYXJlIHByZXNlbnQsIHdlIHRha2UgZXZlcnl0aGluZ1xyXG4gICAgaWYgKG51bWJlclNwZWMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJlc3VsdC5wdXNoKC4uLmFkZHJlc3NQb2ludHMpO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoaXNOZWdhdGl2ZVNlcmllc1NwZWMobnVtYmVyU3BlYykpIHtcclxuICAgIC8vIG5lZ2F0aXZlIG51bWJlciBzcGVjIChlLmcuIG9kZCBudW1iZXJzIGV4Y2VwdCAxMy0xNylcclxuICAgIGNvbnN0IHRvRXhjbHVkZSA9IGZpbHRlckFkZHJlc3NQb2ludHNCeVJhbmdlcyhhZGRyZXNzUG9pbnRzLCBudW1iZXJTcGVjKTtcclxuICAgIHJlc3VsdC5wdXNoKFxyXG4gICAgICAuLi5hZGRyZXNzUG9pbnRzLmZpbHRlcihcclxuICAgICAgICAoYWRkcmVzc1BvaW50KSA9PiAhdG9FeGNsdWRlLmluY2x1ZGVzKGFkZHJlc3NQb2ludClcclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG5jb25zdCBmaWx0ZXJBZGRyZXNzUG9pbnRzQnlSYW5nZXMgPSAoXHJcbiAgYWRkcmVzc1BvaW50czogQWRkcmVzc1BvaW50W10sXHJcbiAgc2VyaWVzU3BlYzogU2VyaWVzU3BlY1xyXG4pOiBBZGRyZXNzUG9pbnRbXSA9PiB7XHJcbiAgY29uc3QgcmVzdWx0OiBBZGRyZXNzUG9pbnRbXSA9IFtdO1xyXG4gIHNlcmllc1NwZWMucmFuZ2VzLmZvckVhY2goKHJhbmdlKSA9PiB7XHJcbiAgICByZXN1bHQucHVzaChcclxuICAgICAgLi4uYWRkcmVzc1BvaW50cy5maWx0ZXIoKGFkZHJlc3NQb2ludCkgPT4ge1xyXG4gICAgICAgIGlmIChpc1JhbmdlKHJhbmdlKSkge1xyXG4gICAgICAgICAgY29uc3QgbnVtYmVyID0gZ2V0TnVtYmVyQnlUeXBlKHNlcmllc1NwZWMudHlwZSwgYWRkcmVzc1BvaW50KTtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGlzSW5SYW5nZShcclxuICAgICAgICAgICAgICBudW1iZXIsXHJcbiAgICAgICAgICAgICAgc2VyaWVzU3BlYy50eXBlICE9PSBTZXJpZXNUeXBlLkRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgICA/IGFkZHJlc3NQb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyID8/IG51bGxcclxuICAgICAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAgICAgICByYW5nZVxyXG4gICAgICAgICAgICApICYmIGZpdHNUeXBlKG51bWJlciwgc2VyaWVzU3BlYy50eXBlKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgZnVsbFN0cmVldE51bWJlcjogRnVsbFN0cmVldE51bWJlciA9IHJhbmdlO1xyXG4gICAgICAgICAgcmV0dXJuIGVxdWFsc0Z1bGxTdHJlZXROdW1iZXIoZnVsbFN0cmVldE51bWJlciwgYWRkcmVzc1BvaW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH0pO1xyXG5cclxuICAvLyB3aGVuIG5vIHNlcmllcyBzcGVjcyBhcmUgcHJlc2VudCwgd2UgdGFrZSBldmVyeXRoaW5nIHRoYXQgZml0cyB0aGUgdHlwZVxyXG4gIGlmIChzZXJpZXNTcGVjLnJhbmdlcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJlc3VsdC5wdXNoKFxyXG4gICAgICAuLi5hZGRyZXNzUG9pbnRzLmZpbHRlcigoYWRkcmVzc1BvaW50KSA9PlxyXG4gICAgICAgIGZpdHNUeXBlKFxyXG4gICAgICAgICAgZ2V0TnVtYmVyQnlUeXBlKHNlcmllc1NwZWMudHlwZSwgYWRkcmVzc1BvaW50KSxcclxuICAgICAgICAgIHNlcmllc1NwZWMudHlwZVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlQYXJhbXMgPSAoXHJcbiAgcGFyYW1zOiBGaW5kQWRkcmVzc1BvaW50c1BhcmFtc1xyXG4pOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcclxuICBpZiAocGFyYW1zLnR5cGUgPT09IFwic21kTGluZVwiICYmIHBhcmFtcy5zbWRMaW5lLnR5cGUgPT09IFwic3RyZWV0XCIpIHtcclxuICAgIHJldHVybiBbcGFyYW1zLnNtZExpbmUuc3RyZWV0LCBwYXJhbXMubXVuaWNpcGFsaXR5LmNvZGVdO1xyXG4gIH1cclxuXHJcbiAgaWYgKFxyXG4gICAgKHBhcmFtcy50eXBlID09PSBcInNtZExpbmVcIiAmJiBwYXJhbXMuc21kTGluZS50eXBlID09PSBcIm11bmljaXBhbGl0eVBhcnRcIikgfHxcclxuICAgIHBhcmFtcy50eXBlID09PSBcIndob2xlTXVuaWNpcGFsaXR5UGFydFwiXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gW3BhcmFtcy5tdW5pY2lwYWxpdHlQYXJ0Q29kZV07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gW3BhcmFtcy5tdW5pY2lwYWxpdHkuY29kZV07XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0U3RyZWV0Sm9pbkNvbmRpdGlvbiA9IChcclxuICBwYXJhbXM6IEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zXHJcbik6IHN0cmluZyA9PiB7XHJcbiAgaWYgKHBhcmFtcy50eXBlID09PSBcInNtZExpbmVcIiAmJiBwYXJhbXMuc21kTGluZS50eXBlID09PSBcInN0cmVldFwiKSB7XHJcbiAgICByZXR1cm4gYEpPSU4gc3RyZWV0IHMgT04gYS5zdHJlZXRfY29kZSA9IHMuY29kZSBBTkQgcy5uYW1lID0gPyAke1xyXG4gICAgICBpc1NxbGl0ZShnZXRLbmV4RGIoKSkgPyBcIkNPTExBVEUgTk9DQVNFXCIgOiBcIlwiXHJcbiAgICB9YDtcclxuICB9XHJcbiAgcmV0dXJuIFwiTEVGVCBKT0lOIHN0cmVldCBzIE9OIGEuc3RyZWV0X2NvZGUgPSBzLmNvZGVcIjtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRXaGVyZUNvbmRpdGlvbiA9IChwYXJhbXM6IEZpbmRBZGRyZXNzUG9pbnRzUGFyYW1zKTogc3RyaW5nID0+IHtcclxuICBpZiAoXHJcbiAgICAocGFyYW1zLnR5cGUgPT09IFwic21kTGluZVwiICYmIHBhcmFtcy5zbWRMaW5lLnR5cGUgPT09IFwibXVuaWNpcGFsaXR5UGFydFwiKSB8fFxyXG4gICAgcGFyYW1zLnR5cGUgPT09IFwid2hvbGVNdW5pY2lwYWxpdHlQYXJ0XCJcclxuICApIHtcclxuICAgIHJldHVybiBcImEubXVuaWNpcGFsaXR5X3BhcnRfY29kZSA9ID9cIjtcclxuICB9XHJcblxyXG4gIGlmIChwYXJhbXMudHlwZSA9PT0gXCJ3aG9sZU11bmljaXBhbGl0eU5vU3RyZWV0TmFtZVwiKSB7XHJcbiAgICByZXR1cm4gYCR7Z2V0TXVuaWNpcGFsaXR5V2hlcmUoXHJcbiAgICAgIFwiYVwiLFxyXG4gICAgICBwYXJhbXMubXVuaWNpcGFsaXR5XHJcbiAgICApfSBBTkQgYS5zdHJlZXRfY29kZSBJUyBOVUxMYDtcclxuICB9XHJcblxyXG4gIHJldHVybiBnZXRNdW5pY2lwYWxpdHlXaGVyZShcImFcIiwgcGFyYW1zLm11bmljaXBhbGl0eSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNJblJhbmdlID0gKFxyXG4gIG51bWJlcjogbnVtYmVyIHwgbnVsbCxcclxuICBsZXR0ZXI6IHN0cmluZyB8IG51bGwsXHJcbiAgcmFuZ2U6IFJhbmdlU3BlY1xyXG4pOiBib29sZWFuID0+IHtcclxuICBpZiAobnVtYmVyID09PSBudWxsKSB7XHJcbiAgICByZXR1cm4gIXJhbmdlLmZyb20gJiYgIXJhbmdlLnRvO1xyXG4gIH1cclxuXHJcbiAgLy8gZXhwbGFpbmVyOiBlaXRoZXIgdGhlIGxvd2VyIGJvdW5kIGlzIG5vdCBzZXQsIG9yIGl0IGlzIGxvd2VyIHRoYW4gdGhlIG51bWJlclxyXG4gIC8vIGlmIGl0J3MgZXF1YWwgdG8gdGhlIG51bWJlciwgd2UgYWxzbyBoYXZlIHRvIGNoZWNrIHRoZSBsZXR0ZXIgLSBpZiBpdCdzIG5vdCBzZXQsIHdlIGRvbid0IGNhcmVcclxuICAvLyBpZiBmcm9tLmxldHRlciBpcyBzZXQsIHdlIG5lZWQgdG8gaGF2ZSBhIGxldHRlciBzZXQgYW5kIGl0IGhhcyB0byBiZSBncmVhdGVyIG9yIGVxdWFsOlxyXG4gIC8vIG51bWJlciB3aXRob3V0IGxldHRlciBjb3VudHMgbG93ZXIgdGhhbiBudW1iZXIgd2l0aCBsZXR0ZXIgJ2EnIChlLmcuIDIzIDwgMjNhKVxyXG4gIGNvbnN0IHNhdGlzZmllc0Zyb20gPVxyXG4gICAgIXJhbmdlLmZyb20gfHxcclxuICAgIG51bWJlciA+IHJhbmdlLmZyb20ubnVtYmVyIHx8XHJcbiAgICAobnVtYmVyID09PSByYW5nZS5mcm9tLm51bWJlciAmJlxyXG4gICAgICAoIXJhbmdlLmZyb20ubGV0dGVyIHx8ICghIWxldHRlciAmJiBsZXR0ZXIgPj0gcmFuZ2UuZnJvbS5sZXR0ZXIpKSk7XHJcblxyXG4gIGNvbnN0IHNhdGlzZmllc1RvID1cclxuICAgICFyYW5nZS50byB8fFxyXG4gICAgbnVtYmVyIDwgcmFuZ2UudG8ubnVtYmVyIHx8XHJcbiAgICAobnVtYmVyID09PSByYW5nZS50by5udW1iZXIgJiZcclxuICAgICAgKCFsZXR0ZXIgfHxcclxuICAgICAgICAoISFyYW5nZS50by5sZXR0ZXIgJiYgISFsZXR0ZXIgJiYgbGV0dGVyIDw9IHJhbmdlLnRvLmxldHRlcikpKTtcclxuXHJcbiAgcmV0dXJuIHNhdGlzZmllc0Zyb20gJiYgc2F0aXNmaWVzVG87XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZml0c1R5cGUgPSAobnVtYmVyOiBudW1iZXIgfCBudWxsLCB0eXBlOiBTZXJpZXNUeXBlKTogYm9vbGVhbiA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIHR5cGUgPT09IFNlcmllc1R5cGUuRGVzY3JpcHRpb24gfHxcclxuICAgIHR5cGUgPT09IFNlcmllc1R5cGUuQWxsIHx8XHJcbiAgICAodHlwZSA9PT0gU2VyaWVzVHlwZS5PZGQgJiYgbnVtYmVyICUgMiA9PT0gMSkgfHxcclxuICAgICh0eXBlID09PSBTZXJpZXNUeXBlLkV2ZW4gJiYgbnVtYmVyICUgMiA9PT0gMClcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVxdWFsc0Z1bGxTdHJlZXROdW1iZXIgPSAoXHJcbiAgZnVsbFN0cmVldE51bWJlcjogRnVsbFN0cmVldE51bWJlcixcclxuICBhZGRyZXNzUG9pbnQ6IEFkZHJlc3NQb2ludFxyXG4pOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gKFxyXG4gICAgZnVsbFN0cmVldE51bWJlci5kZXNjcmlwdGlvbk51bWJlci5udW1iZXIgPT09IGFkZHJlc3NQb2ludC5ob3VzZU51bWJlciAmJlxyXG4gICAgZnVsbFN0cmVldE51bWJlci5vcmllbnRhdGlvbmFsTnVtYmVyLm51bWJlciA9PT1cclxuICAgICAgYWRkcmVzc1BvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXIgJiZcclxuICAgICgoIWZ1bGxTdHJlZXROdW1iZXIub3JpZW50YXRpb25hbE51bWJlci5sZXR0ZXIgJiZcclxuICAgICAgIWFkZHJlc3NQb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyKSB8fFxyXG4gICAgICBmdWxsU3RyZWV0TnVtYmVyLm9yaWVudGF0aW9uYWxOdW1iZXIubGV0dGVyID09PVxyXG4gICAgICAgIGFkZHJlc3NQb2ludC5vcmllbnRhdGlvbmFsTnVtYmVyTGV0dGVyKVxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBnZXROdW1iZXJCeVR5cGUgPSAoXHJcbiAgdHlwZTogU2VyaWVzVHlwZSxcclxuICBhZGRyZXNzUG9pbnQ6IEFkZHJlc3NQb2ludFxyXG4pOiBudW1iZXIgfCBudWxsID0+IHtcclxuICByZXR1cm4gdHlwZSA9PT0gU2VyaWVzVHlwZS5EZXNjcmlwdGlvblxyXG4gICAgPyBhZGRyZXNzUG9pbnQuaG91c2VOdW1iZXJcclxuICAgIDogYWRkcmVzc1BvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXIgPz8gbnVsbDtcclxufTtcclxuXHJcbmNvbnN0IGdldE11bmljaXBhbGl0eVdoZXJlID0gKFxyXG4gIGFsaWFzOiBzdHJpbmcsXHJcbiAgbXVuaWNpcGFsaXR5OiBNdW5pY2lwYWxpdHlcclxuKTogc3RyaW5nID0+IHtcclxuICByZXR1cm4gbXVuaWNpcGFsaXR5LnR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eVxyXG4gICAgPyBgJHthbGlhc30uY2l0eV9jb2RlID0gP2BcclxuICAgIDogYCR7YWxpYXN9LmNpdHlfZGlzdHJpY3RfY29kZSA9ID9gO1xyXG59O1xyXG5cclxuY29uc3Qgcm93VG9BZGRyZXNzUG9pbnQgPSAocm93OiBhbnkpOiBBZGRyZXNzUG9pbnQgPT4ge1xyXG4gIGNvbnN0IHBvaW50OiBBZGRyZXNzUG9pbnQgPSB7XHJcbiAgICBpZDogcm93LmlkLFxyXG4gICAgYWRkcmVzczogXCJcIixcclxuICAgIHR5cGU6XHJcbiAgICAgIHJvdy5vYmplY3RfdHlwZV9uYW1lID09PSBEZXNjcmlwdGl2ZVR5cGVcclxuICAgICAgICA/IEFkZHJlc3NQb2ludFR5cGUuRGVzY3JpcHRpb25cclxuICAgICAgICA6IEFkZHJlc3NQb2ludFR5cGUuUmVnaXN0cmF0aW9uLFxyXG4gICAgaG91c2VOdW1iZXI6IHJvdy5kZXNjcmlwdGl2ZV9udW1iZXIsXHJcbiAgICBjaXR5OiByb3cuY2l0eV9uYW1lLFxyXG4gICAgbXVuaWNpcGFsaXR5UGFydDogcm93Lm11bmljaXBhbGl0eV9wYXJ0X25hbWUsXHJcbiAgICBwb3N0YWxDb2RlOiByb3cucG9zdGFsX2NvZGUsXHJcbiAgICBsYXQ6IHJvdy53Z3M4NF9sYXRpdHVkZSxcclxuICAgIGxuZzogcm93Lndnczg0X2xvbmdpdHVkZSxcclxuICB9O1xyXG4gIGlmIChyb3cuc3RyZWV0X25hbWUgIT09IG51bGwpIHtcclxuICAgIHBvaW50LnN0cmVldCA9IHJvdy5zdHJlZXRfbmFtZTtcclxuICB9XHJcbiAgaWYgKHJvdy5vcmllbnRhdGlvbmFsX251bWJlciAhPT0gbnVsbCkge1xyXG4gICAgcG9pbnQub3JpZW50YXRpb25hbE51bWJlciA9IHJvdy5vcmllbnRhdGlvbmFsX251bWJlcjtcclxuICB9XHJcbiAgaWYgKHJvdy5vcmllbnRhdGlvbmFsX251bWJlcl9sZXR0ZXIgIT09IG51bGwpIHtcclxuICAgIHBvaW50Lm9yaWVudGF0aW9uYWxOdW1iZXJMZXR0ZXIgPSByb3cub3JpZW50YXRpb25hbF9udW1iZXJfbGV0dGVyO1xyXG4gIH1cclxuICBpZiAocm93LmRpc3RyaWN0X25hbWUgIT09IG51bGwpIHtcclxuICAgIHBvaW50LmRpc3RyaWN0ID0gcm93LmRpc3RyaWN0X25hbWU7XHJcbiAgfVxyXG4gIGlmIChyb3cucHJhZ3VlX2Rpc3RyaWN0X25hbWUgIT09IG51bGwpIHtcclxuICAgIHBvaW50LnByYWd1ZURpc3RyaWN0ID0gcm93LnByYWd1ZV9kaXN0cmljdF9uYW1lO1xyXG4gIH1cclxuICBwb2ludC5hZGRyZXNzID0gY3JlYXRlU2luZ2xlTGluZUFkZHJlc3MocG9pbnQpO1xyXG4gIHJldHVybiBwb2ludDtcclxufTtcclxuIl19
|
|
@@ -6,7 +6,7 @@ import fetch from "node-fetch";
|
|
|
6
6
|
import { join } from "path";
|
|
7
7
|
import { pipeline } from "stream/promises";
|
|
8
8
|
import chunk from "lodash/chunk";
|
|
9
|
-
import { commitAddressPoints } from "../db/address-points";
|
|
9
|
+
import { commitAddressPoints, removeDeprecatedAddressPoints, } from "../db/address-points";
|
|
10
10
|
import { SyncPart } from "../db/types";
|
|
11
11
|
import { getLatestUrlFromAtomFeed } from "../utils/atom";
|
|
12
12
|
import { prepareOptions, } from "../utils/helpers";
|
|
@@ -34,10 +34,12 @@ const importDataToDb = async (options) => {
|
|
|
34
34
|
let total = 0;
|
|
35
35
|
let next = 0;
|
|
36
36
|
console.log("Initiating import of RUIAN data to search DB (~3 million rows to be imported).");
|
|
37
|
-
|
|
37
|
+
const allIds = new Set();
|
|
38
|
+
for (const [i, file] of files.entries()) {
|
|
38
39
|
const rows = [];
|
|
39
40
|
const parseStream = parse({ delimiter: ";", fromLine: 2 }).on("data", async (data) => {
|
|
40
41
|
rows.push(data);
|
|
42
|
+
allIds.add(parseInt(data[0]));
|
|
41
43
|
});
|
|
42
44
|
await pipeline(createReadStream(join(extractionFolder, file)), iconv.decodeStream("win1250"), parseStream);
|
|
43
45
|
const chunks = chunk(rows, maxBufferSize);
|
|
@@ -48,7 +50,9 @@ const importDataToDb = async (options) => {
|
|
|
48
50
|
console.log(`Total imported rows: ${next}`);
|
|
49
51
|
}
|
|
50
52
|
}));
|
|
53
|
+
console.log(`${i + 1}/${files.length} files imported.`);
|
|
51
54
|
}
|
|
55
|
+
await removeDeprecatedAddressPoints(allIds);
|
|
52
56
|
console.log(`Import completed. Total imported rows: ${total}`);
|
|
53
57
|
};
|
|
54
58
|
const getExtractionFolder = (options) => join(options.tmpDir, options.addressPointsCsvFolderName);
|
|
@@ -57,8 +61,8 @@ export const downloadAndImportAddressPoints = async (options = {}) => {
|
|
|
57
61
|
const completeOptions = prepareOptions(options);
|
|
58
62
|
const datasetFeedLink = await getLatestUrlFromAtomFeed(completeOptions.addressPointsAtomUrl);
|
|
59
63
|
const zipUrl = await getLatestUrlFromAtomFeed(datasetFeedLink);
|
|
60
|
-
await downloadAndUnzip(zipUrl, completeOptions);
|
|
64
|
+
// await downloadAndUnzip(zipUrl, completeOptions);
|
|
61
65
|
await importDataToDb(completeOptions);
|
|
62
66
|
});
|
|
63
67
|
};
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1wb2ludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3Blbi1kYXRhLXN5bmMvYWRkcmVzcy1wb2ludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDOUUsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sS0FBSyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEtBQUssTUFBTSxjQUFjLENBQUM7QUFDakMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQiw2QkFBNkIsR0FDOUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBR0wsY0FBYyxHQUNmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFFM0IsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLEVBQzVCLEdBQVcsRUFDWCxPQUE0QixFQUNiLEVBQUU7SUFDakIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFFM0UsT0FBTyxDQUFDLEdBQUcsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO0lB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QUMsTUFBTSxDQUFDLENBQUM7SUFFNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNqRSxDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsT0FBNEIsRUFBRSxFQUFFLENBQzNELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLEtBQUssRUFDakQsVUFBc0MsRUFBRSxFQUN6QixFQUFFO0lBQ2pCLE1BQU0sV0FBVyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3ZELE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxNQUFNLGVBQWUsR0FBRyxNQUFNLHdCQUF3QixDQUNwRCxlQUFlLENBQUMsb0JBQW9CLENBQ3JDLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLHdCQUF3QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9ELG1EQUFtRDtRQUNuRCxNQUFNLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBZG1aaXAgZnJvbSBcImFkbS16aXBcIjtcclxuaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiY3N2LXBhcnNlXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0sIGNyZWF0ZVdyaXRlU3RyZWFtLCByZWFkZGlyU3luYywgcm1TeW5jIH0gZnJvbSBcImZzXCI7XHJcbmltcG9ydCBpY29udiBmcm9tIFwiaWNvbnYtbGl0ZVwiO1xyXG5pbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIjtcclxuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IHBpcGVsaW5lIH0gZnJvbSBcInN0cmVhbS9wcm9taXNlc1wiO1xyXG5pbXBvcnQgY2h1bmsgZnJvbSBcImxvZGFzaC9jaHVua1wiO1xyXG5pbXBvcnQge1xyXG4gIGNvbW1pdEFkZHJlc3NQb2ludHMsXHJcbiAgcmVtb3ZlRGVwcmVjYXRlZEFkZHJlc3NQb2ludHMsXHJcbn0gZnJvbSBcIi4uL2RiL2FkZHJlc3MtcG9pbnRzXCI7XHJcbmltcG9ydCB7IFN5bmNQYXJ0IH0gZnJvbSBcIi4uL2RiL3R5cGVzXCI7XHJcbmltcG9ydCB7IGdldExhdGVzdFVybEZyb21BdG9tRmVlZCB9IGZyb20gXCIuLi91dGlscy9hdG9tXCI7XHJcbmltcG9ydCB7XHJcbiAgT3BlbkRhdGFTeW5jT3B0aW9ucyxcclxuICBPcGVuRGF0YVN5bmNPcHRpb25zUGFydGlhbCxcclxuICBwcmVwYXJlT3B0aW9ucyxcclxufSBmcm9tIFwiLi4vdXRpbHMvaGVscGVyc1wiO1xyXG5pbXBvcnQgeyBydW5TeW5jUGFydCB9IGZyb20gXCIuL2NvbW1vblwiO1xyXG5cclxuY29uc3QgbWF4QnVmZmVyU2l6ZSA9IDEwMDA7XHJcblxyXG5jb25zdCBkb3dubG9hZEFuZFVuemlwID0gYXN5bmMgKFxyXG4gIHVybDogc3RyaW5nLFxyXG4gIG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNcclxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgY29uc3QgemlwRmlsZVBhdGggPSBqb2luKG9wdGlvbnMudG1wRGlyLCBvcHRpb25zLmFkZHJlc3NQb2ludHNaaXBGaWxlTmFtZSk7XHJcblxyXG4gIGNvbnNvbGUubG9nKFwiRG93bmxvYWRpbmcgYSBsYXJnZSBaSVAgZmlsZSB3aXRoIFJVSUFOIGRhdGEgKH42NSBNQikuLi5cIik7XHJcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xyXG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICBgVGhlIFpJUCBmaWxlIGNvdWxkIG5vdCBiZSBkb3dubG9hZGVkLiBIVFRQIENvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfWBcclxuICAgICk7XHJcbiAgfVxyXG4gIGF3YWl0IHBpcGVsaW5lKHJlc3BvbnNlLmJvZHksIGNyZWF0ZVdyaXRlU3RyZWFtKHppcEZpbGVQYXRoKSk7XHJcblxyXG4gIGNvbnNvbGUubG9nKFwiRmluaXNoZWQgZG93bmxvYWRpbmcuXCIpO1xyXG4gIGNvbnN0IHppcCA9IG5ldyBBZG1aaXAoemlwRmlsZVBhdGgpO1xyXG5cclxuICBjb25zb2xlLmxvZyhgU3RhcnRpbmcgdG8gdW56aXAgQ1NWIGZpbGVzIHRvICcke29wdGlvbnMudG1wRGlyfSdgKTtcclxuICB6aXAuZXh0cmFjdEFsbFRvKG9wdGlvbnMudG1wRGlyLCB0cnVlKTtcclxuICBjb25zb2xlLmxvZyhcIlVuemlwIGNvbXBsZXRlZC5cIik7XHJcblxyXG4gIHJtU3luYyh6aXBGaWxlUGF0aCk7XHJcbiAgY29uc29sZS5sb2coXCJSZW1vdmVkIHRoZSBaSVAgZmlsZS5cIik7XHJcbn07XHJcblxyXG5jb25zdCBpbXBvcnREYXRhVG9EYiA9IGFzeW5jIChvcHRpb25zOiBPcGVuRGF0YVN5bmNPcHRpb25zKSA9PiB7XHJcbiAgY29uc3QgZXh0cmFjdGlvbkZvbGRlciA9IGdldEV4dHJhY3Rpb25Gb2xkZXIob3B0aW9ucyk7XHJcblxyXG4gIGNvbnN0IGZpbGVzID0gcmVhZGRpclN5bmMoZXh0cmFjdGlvbkZvbGRlcik7XHJcblxyXG4gIGxldCB0b3RhbCA9IDA7XHJcbiAgbGV0IG5leHQgPSAwO1xyXG5cclxuICBjb25zb2xlLmxvZyhcclxuICAgIFwiSW5pdGlhdGluZyBpbXBvcnQgb2YgUlVJQU4gZGF0YSB0byBzZWFyY2ggREIgKH4zIG1pbGxpb24gcm93cyB0byBiZSBpbXBvcnRlZCkuXCJcclxuICApO1xyXG5cclxuICBjb25zdCBhbGxJZHMgPSBuZXcgU2V0PG51bWJlcj4oKTtcclxuXHJcbiAgZm9yIChjb25zdCBbaSwgZmlsZV0gb2YgZmlsZXMuZW50cmllcygpKSB7XHJcbiAgICBjb25zdCByb3dzOiBzdHJpbmdbXVtdID0gW107XHJcbiAgICBjb25zdCBwYXJzZVN0cmVhbSA9IHBhcnNlKHsgZGVsaW1pdGVyOiBcIjtcIiwgZnJvbUxpbmU6IDIgfSkub24oXHJcbiAgICAgIFwiZGF0YVwiLFxyXG4gICAgICBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgIHJvd3MucHVzaChkYXRhKTtcclxuICAgICAgICBhbGxJZHMuYWRkKHBhcnNlSW50KGRhdGFbMF0pKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBhd2FpdCBwaXBlbGluZShcclxuICAgICAgY3JlYXRlUmVhZFN0cmVhbShqb2luKGV4dHJhY3Rpb25Gb2xkZXIsIGZpbGUpKSxcclxuICAgICAgaWNvbnYuZGVjb2RlU3RyZWFtKFwid2luMTI1MFwiKSxcclxuICAgICAgcGFyc2VTdHJlYW1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgY2h1bmtzID0gY2h1bmsocm93cywgbWF4QnVmZmVyU2l6ZSk7XHJcblxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIGNodW5rcy5tYXAoYXN5bmMgKGNodW5rKSA9PiB7XHJcbiAgICAgICAgdG90YWwgKz0gYXdhaXQgY29tbWl0QWRkcmVzc1BvaW50cyhjaHVuayk7XHJcblxyXG4gICAgICAgIGlmICh0b3RhbCAtIG5leHQgPj0gMTAwMDAwKSB7XHJcbiAgICAgICAgICBuZXh0ICs9IDEwMDAwMDtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGBUb3RhbCBpbXBvcnRlZCByb3dzOiAke25leHR9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhgJHtpICsgMX0vJHtmaWxlcy5sZW5ndGh9IGZpbGVzIGltcG9ydGVkLmApO1xyXG4gIH1cclxuXHJcbiAgYXdhaXQgcmVtb3ZlRGVwcmVjYXRlZEFkZHJlc3NQb2ludHMoYWxsSWRzKTtcclxuXHJcbiAgY29uc29sZS5sb2coYEltcG9ydCBjb21wbGV0ZWQuIFRvdGFsIGltcG9ydGVkIHJvd3M6ICR7dG90YWx9YCk7XHJcbn07XHJcblxyXG5jb25zdCBnZXRFeHRyYWN0aW9uRm9sZGVyID0gKG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnMpID0+XHJcbiAgam9pbihvcHRpb25zLnRtcERpciwgb3B0aW9ucy5hZGRyZXNzUG9pbnRzQ3N2Rm9sZGVyTmFtZSk7XHJcblxyXG5leHBvcnQgY29uc3QgZG93bmxvYWRBbmRJbXBvcnRBZGRyZXNzUG9pbnRzID0gYXN5bmMgKFxyXG4gIG9wdGlvbnM6IE9wZW5EYXRhU3luY09wdGlvbnNQYXJ0aWFsID0ge31cclxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgYXdhaXQgcnVuU3luY1BhcnQoU3luY1BhcnQuQWRkcmVzc1BvaW50cywgW10sIGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IGNvbXBsZXRlT3B0aW9ucyA9IHByZXBhcmVPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgY29uc3QgZGF0YXNldEZlZWRMaW5rID0gYXdhaXQgZ2V0TGF0ZXN0VXJsRnJvbUF0b21GZWVkKFxyXG4gICAgICBjb21wbGV0ZU9wdGlvbnMuYWRkcmVzc1BvaW50c0F0b21VcmxcclxuICAgICk7XHJcbiAgICBjb25zdCB6aXBVcmwgPSBhd2FpdCBnZXRMYXRlc3RVcmxGcm9tQXRvbUZlZWQoZGF0YXNldEZlZWRMaW5rKTtcclxuICAgIC8vIGF3YWl0IGRvd25sb2FkQW5kVW56aXAoemlwVXJsLCBjb21wbGV0ZU9wdGlvbnMpO1xyXG4gICAgYXdhaXQgaW1wb3J0RGF0YVRvRGIoY29tcGxldGVPcHRpb25zKTtcclxuICB9KTtcclxufTtcclxuIl19
|
|
@@ -24,6 +24,9 @@ export const municipalitiesToPolygons = async (municipalities) => {
|
|
|
24
24
|
// areaIndex -> polygon
|
|
25
25
|
const extraPolygonsMap = new Map();
|
|
26
26
|
for (const municipality of municipalities) {
|
|
27
|
+
if (municipality.areas.length === 0) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
27
30
|
const { featureCollection, extraPolygons } = createPolygons(municipality, extraAreas.get(municipality.code) ?? [], getMunicipalityPolygons(municipality, cityPolygons, districtPolygons));
|
|
28
31
|
collectionMap.set(municipality.code, featureCollection);
|
|
29
32
|
if (extraAreas.has(municipality.code)) {
|
|
@@ -250,4 +253,4 @@ const extractMunicipalityCodes = (municipalities) => {
|
|
|
250
253
|
}, { cityCodes: new Set(), districtCodes: new Set() });
|
|
251
254
|
};
|
|
252
255
|
const extractPolygonFromCollection = (collection) => collection.features.length > 1 ? union(collection) : collection.features[0];
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWdvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RyZWV0LW1hcmtkb3duL3BvbHlnb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHdkMsT0FBTyxFQU1MLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEUsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFRMUMsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsS0FBSyxFQUMzQyxjQUE4QixFQUNjLEVBQUU7SUFDOUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5RSxNQUFNLFlBQVksR0FBRyxNQUFNLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFbEUsSUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FB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QyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlbGF1bmF5IH0gZnJvbSBcImQzLWRlbGF1bmF5XCI7XHJcbmltcG9ydCB7IEFyZWEsIEV4cG9ydEFkZHJlc3NQb2ludCwgTXVuaWNpcGFsaXR5IH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgRmVhdHVyZSxcclxuICBGZWF0dXJlQ29sbGVjdGlvbixcclxuICBNdWx0aVBvbHlnb24sXHJcbiAgUG9pbnQsXHJcbiAgUG9seWdvbixcclxuICBmZWF0dXJlQ29sbGVjdGlvbixcclxufSBmcm9tIFwiQHR1cmYvaGVscGVyc1wiO1xyXG5pbXBvcnQgaW50ZXJzZWN0IGZyb20gXCJAdHVyZi9pbnRlcnNlY3RcIjtcclxuaW1wb3J0IHsgYm9vbGVhbkludGVyc2VjdHMgfSBmcm9tIFwiQHR1cmYvYm9vbGVhbi1pbnRlcnNlY3RzXCI7XHJcbmltcG9ydCBHcmFwaCBmcm9tIFwiZ3JhcGhvbG9neVwiO1xyXG5pbXBvcnQgeyBjb2xvciB9IGZyb20gXCJncmFwaG9sb2d5LWNvbG9yXCI7XHJcbmltcG9ydCB7IHRvTWVyY2F0b3IsIHRvV2dzODQgfSBmcm9tIFwiQHR1cmYvcHJvamVjdGlvblwiO1xyXG5pbXBvcnQgdW5pb24gZnJvbSBcIkB0dXJmL3VuaW9uXCI7XHJcbmltcG9ydCB7IGdldENpdHlQb2x5Z29ucywgZ2V0RGlzdHJpY3RQb2x5Z29ucyB9IGZyb20gXCIuLi9kYi9jaXRpZXNcIjtcclxuaW1wb3J0IHRydW5jYXRlIGZyb20gXCJAdHVyZi90cnVuY2F0ZVwiO1xyXG5pbXBvcnQgeyBQb2x5Z29uc0J5Q29kZXMgfSBmcm9tIFwiLi4vZGIvdHlwZXNcIjtcclxuaW1wb3J0IGRpZmZlcmVuY2UgZnJvbSBcIkB0dXJmL2RpZmZlcmVuY2VcIjtcclxuXHJcbnR5cGUgUG9seWdvblByb3BzID0ge1xyXG4gIGFyZWFJbmRleGVzOiBudW1iZXJbXTtcclxuICBpbmRleDogbnVtYmVyO1xyXG4gIG5laWdoYm9yczogU2V0PG51bWJlcj47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgbXVuaWNpcGFsaXRpZXNUb1BvbHlnb25zID0gYXN5bmMgKFxyXG4gIG11bmljaXBhbGl0aWVzOiBNdW5pY2lwYWxpdHlbXVxyXG4pOiBQcm9taXNlPFJlY29yZDxudW1iZXIsIEZlYXR1cmVDb2xsZWN0aW9uPj4gPT4ge1xyXG4gIGNvbnN0IHsgY2l0eUNvZGVzLCBkaXN0cmljdENvZGVzIH0gPSBleHRyYWN0TXVuaWNpcGFsaXR5Q29kZXMobXVuaWNpcGFsaXRpZXMpO1xyXG4gIGNvbnN0IGNpdHlQb2x5Z29ucyA9IGF3YWl0IGdldENpdHlQb2x5Z29ucyhjaXR5Q29kZXMpO1xyXG4gIGNvbnN0IGRpc3RyaWN0UG9seWdvbnMgPSBhd2FpdCBnZXREaXN0cmljdFBvbHlnb25zKGRpc3RyaWN0Q29kZXMpO1xyXG5cclxuICBpZiAoXHJcbiAgICBPYmplY3Qua2V5cyhjaXR5UG9seWdvbnMpLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgT2JqZWN0LmtleXMoZGlzdHJpY3RQb2x5Z29ucykubGVuZ3RoID09PSAwXHJcbiAgKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIk5vIHBvbHlnb25zIGZvdW5kIGZvciBnaXZlbiBtdW5pY2lwYWxpdGllcy5cIik7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvLyBtdW5pY2lwYWxpdHlDb2RlIC0+IGFyZWFzXHJcbiAgY29uc3QgZXh0cmFBcmVhcyA9IGdldEV4dHJhQXJlYXMobXVuaWNpcGFsaXRpZXMpO1xyXG5cclxuICBjb25zdCBjb2xsZWN0aW9uTWFwID0gbmV3IE1hcDxcclxuICAgIG51bWJlcixcclxuICAgIEZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+XHJcbiAgPigpO1xyXG4gIC8vIGFyZWFJbmRleCAtPiBwb2x5Z29uXHJcbiAgY29uc3QgZXh0cmFQb2x5Z29uc01hcCA9IG5ldyBNYXA8bnVtYmVyLCBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+W10+KCk7XHJcblxyXG4gIGZvciAoY29uc3QgbXVuaWNpcGFsaXR5IG9mIG11bmljaXBhbGl0aWVzKSB7XHJcbiAgICBjb25zdCB7IGZlYXR1cmVDb2xsZWN0aW9uLCBleHRyYVBvbHlnb25zIH0gPSBjcmVhdGVQb2x5Z29ucyhcclxuICAgICAgbXVuaWNpcGFsaXR5LFxyXG4gICAgICBleHRyYUFyZWFzLmdldChtdW5pY2lwYWxpdHkuY29kZSkgPz8gW10sXHJcbiAgICAgIGdldE11bmljaXBhbGl0eVBvbHlnb25zKG11bmljaXBhbGl0eSwgY2l0eVBvbHlnb25zLCBkaXN0cmljdFBvbHlnb25zKVxyXG4gICAgKTtcclxuICAgIGNvbGxlY3Rpb25NYXAuc2V0KG11bmljaXBhbGl0eS5jb2RlLCBmZWF0dXJlQ29sbGVjdGlvbik7XHJcbiAgICBpZiAoZXh0cmFBcmVhcy5oYXMobXVuaWNpcGFsaXR5LmNvZGUpKSB7XHJcbiAgICAgIGZvciAoY29uc3QgW2FyZWFJbmRleCwgZXh0cmFQb2x5Z29uXSBvZiBleHRyYVBvbHlnb25zKSB7XHJcbiAgICAgICAgaWYgKCFleHRyYVBvbHlnb25zTWFwLmhhcyhhcmVhSW5kZXgpKSB7XHJcbiAgICAgICAgICBleHRyYVBvbHlnb25zTWFwLnNldChhcmVhSW5kZXgsIFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZXh0cmFQb2x5Z29uc01hcC5nZXQoYXJlYUluZGV4KS5wdXNoKGV4dHJhUG9seWdvbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEV4dHJhUG9seWdvbnMoY29sbGVjdGlvbk1hcCwgZXh0cmFQb2x5Z29uc01hcCk7XHJcblxyXG4gIGZpbmRDb2xvcmluZyhjb2xsZWN0aW9uTWFwKTtcclxuXHJcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8bnVtYmVyLCBGZWF0dXJlQ29sbGVjdGlvbj4gPSB7fTtcclxuICBmb3IgKGNvbnN0IFttdW5pY2lwYWxpdHlDb2RlLCBjb2xsZWN0aW9uXSBvZiBjb2xsZWN0aW9uTWFwKSB7XHJcbiAgICByZXN1bHRbbXVuaWNpcGFsaXR5Q29kZV0gPSBjb2xsZWN0aW9uO1xyXG4gIH1cclxuICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5cclxuY29uc3QgZmluZENvbG9yaW5nID0gKGNvbGxlY3Rpb25NYXA6IE1hcDxudW1iZXIsIEZlYXR1cmVDb2xsZWN0aW9uPikgPT4ge1xyXG4gIC8vIGhlcmUgZG8gdGhlIGNvbG9yaW5nXHJcbiAgLy8gcHV0IGFsbCB0aGUgZmVhdHVyZXMgaW4gb25lIGFycmF5XHJcbiAgY29uc3QgYWxsRmVhdHVyZXMgPSBBcnJheS5mcm9tKGNvbGxlY3Rpb25NYXAudmFsdWVzKCkpLnJlZHVjZShcclxuICAgIChhY2MsIGNvbGxlY3Rpb24pID0+IHtcclxuICAgICAgYWNjLnB1c2goLi4uY29sbGVjdGlvbi5mZWF0dXJlcyk7XHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LFxyXG4gICAgW11cclxuICApO1xyXG5cclxuICBjb25zdCBncmFwaCA9IG5ldyBHcmFwaCgpO1xyXG4gIGFsbEZlYXR1cmVzLmZvckVhY2goKGZlYXR1cmUpID0+IHtcclxuICAgIGdyYXBoLmFkZE5vZGUoZmVhdHVyZS5wcm9wZXJ0aWVzLmFyZWFJbmRleCk7XHJcbiAgfSk7XHJcblxyXG4gIGZvciAoY29uc3QgZmVhdHVyZTEgb2YgYWxsRmVhdHVyZXMpIHtcclxuICAgIGZvciAoY29uc3QgZmVhdHVyZTIgb2YgYWxsRmVhdHVyZXMpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGZlYXR1cmUxLnByb3BlcnRpZXMuYXJlYUluZGV4ICE9PSBmZWF0dXJlMi5wcm9wZXJ0aWVzLmFyZWFJbmRleCAmJlxyXG4gICAgICAgIGJvb2xlYW5JbnRlcnNlY3RzKGZlYXR1cmUxLCBmZWF0dXJlMilcclxuICAgICAgKSB7XHJcbiAgICAgICAgZ3JhcGguYWRkRWRnZShcclxuICAgICAgICAgIGZlYXR1cmUxLnByb3BlcnRpZXMuYXJlYUluZGV4LFxyXG4gICAgICAgICAgZmVhdHVyZTIucHJvcGVydGllcy5hcmVhSW5kZXhcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb2xvcihncmFwaCk7XHJcblxyXG4gIGFsbEZlYXR1cmVzLmZvckVhY2goKGZlYXR1cmUpID0+IHtcclxuICAgIGZlYXR1cmUucHJvcGVydGllcy5jb2xvckluZGV4ID0gZ3JhcGguZ2V0Tm9kZUF0dHJpYnV0ZShcclxuICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLmFyZWFJbmRleCxcclxuICAgICAgXCJjb2xvclwiXHJcbiAgICApO1xyXG4gIH0pO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0RXh0cmFBcmVhcyA9IChtdW5pY2lwYWxpdGllczogTXVuaWNpcGFsaXR5W10pOiBNYXA8bnVtYmVyLCBBcmVhW10+ID0+IHtcclxuICAvLyBtdW5pY2lwYWxpdHlDb2RlIC0+IGFyZWFzXHJcbiAgY29uc3QgZXh0cmFBcmVhcyA9IG5ldyBNYXA8bnVtYmVyLCBBcmVhW10+KCk7XHJcblxyXG4gIGZvciAoY29uc3QgbXVuaWNpcGFsaXR5IG9mIG11bmljaXBhbGl0aWVzKSB7XHJcbiAgICBmb3IgKGNvbnN0IGFyZWEgb2YgbXVuaWNpcGFsaXR5LmFyZWFzKSB7XHJcbiAgICAgIC8vIG11bmljaXBhbGl0eUNvZGUgLT4gcG9pbnRzXHJcbiAgICAgIGNvbnN0IGV4dHJhUG9pbnRzID0gbmV3IE1hcDxudW1iZXIsIEV4cG9ydEFkZHJlc3NQb2ludFtdPigpO1xyXG4gICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIGFyZWEuYWRkcmVzc2VzKSB7XHJcbiAgICAgICAgaWYgKHBvaW50Lm11bmljaXBhbGl0eUNvZGUpIHtcclxuICAgICAgICAgIGlmICghZXh0cmFQb2ludHMuaGFzKHBvaW50Lm11bmljaXBhbGl0eUNvZGUpKSB7XHJcbiAgICAgICAgICAgIGV4dHJhUG9pbnRzLnNldChwb2ludC5tdW5pY2lwYWxpdHlDb2RlLCBbXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZXh0cmFQb2ludHMuZ2V0KHBvaW50Lm11bmljaXBhbGl0eUNvZGUpLnB1c2gocG9pbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChjb25zdCBbbXVuaWNpcGFsaXR5Q29kZSwgcG9pbnRzXSBvZiBleHRyYVBvaW50cykge1xyXG4gICAgICAgIGlmICghZXh0cmFBcmVhcy5oYXMobXVuaWNpcGFsaXR5Q29kZSkpIHtcclxuICAgICAgICAgIGV4dHJhQXJlYXMuc2V0KG11bmljaXBhbGl0eUNvZGUsIFtdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4dHJhQXJlYXMuZ2V0KG11bmljaXBhbGl0eUNvZGUpLnB1c2goe1xyXG4gICAgICAgICAgLi4uYXJlYSxcclxuICAgICAgICAgIGFkZHJlc3NlczogcG9pbnRzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBleHRyYUFyZWFzO1xyXG59O1xyXG5cclxuY29uc3QgYWRkRXh0cmFQb2x5Z29ucyA9IChcclxuICBjb2xsZWN0aW9uTWFwOiBNYXA8bnVtYmVyLCBGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPj4sXHJcbiAgZXh0cmFQb2x5Z29uc01hcDogTWFwPG51bWJlciwgRmVhdHVyZTxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPltdPlxyXG4pID0+IHtcclxuICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbk1hcC52YWx1ZXMoKSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xsZWN0aW9uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGZlYXR1cmUgPSBjb2xsZWN0aW9uLmZlYXR1cmVzW2ldO1xyXG4gICAgICBpZiAoZXh0cmFQb2x5Z29uc01hcC5oYXMoZmVhdHVyZS5wcm9wZXJ0aWVzLmFyZWFJbmRleCkpIHtcclxuICAgICAgICBjb25zdCBwb2x5Z29ucyA9IGV4dHJhUG9seWdvbnNNYXAuZ2V0KGZlYXR1cmUucHJvcGVydGllcy5hcmVhSW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IG5ld1BvbHlnb24gPSB1bmlvbihmZWF0dXJlQ29sbGVjdGlvbihbLi4ucG9seWdvbnMsIGZlYXR1cmVdKSk7XHJcbiAgICAgICAgY29uc3QgbmV3RmVhdHVyZSA9IHtcclxuICAgICAgICAgIC4uLm5ld1BvbHlnb24sXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7IC4uLmZlYXR1cmUucHJvcGVydGllcyB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sbGVjdGlvbi5mZWF0dXJlc1tpXSA9IG5ld0ZlYXR1cmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBnZXRNdW5pY2lwYWxpdHlQb2x5Z29ucyA9IChcclxuICBtdW5pY2lwYWxpdHk6IE11bmljaXBhbGl0eSxcclxuICBjaXR5UG9seWdvbnM6IFBvbHlnb25zQnlDb2RlcyxcclxuICBkaXN0cmljdFBvbHlnb25zOiBQb2x5Z29uc0J5Q29kZXNcclxuKTogUG9seWdvbnNCeUNvZGVzID0+IHtcclxuICBjb25zdCBwb2x5Z29uczogUG9seWdvbnNCeUNvZGVzID0ge307XHJcblxyXG4gIGZvciAoY29uc3QgY2l0eUNvZGUgb2YgbXVuaWNpcGFsaXR5LmNpdHlDb2Rlcykge1xyXG4gICAgaWYgKGNpdHlQb2x5Z29uc1tjaXR5Q29kZV0pIHtcclxuICAgICAgcG9seWdvbnNbY2l0eUNvZGVdID0gY2l0eVBvbHlnb25zW2NpdHlDb2RlXTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBtdW5pY2lwYWxpdHkubXVuaWNpcGFsaXR5VHlwZSA9PT0gXCJjaXR5XCIgJiZcclxuICAgICAgICBPYmplY3Qua2V5cyhkaXN0cmljdFBvbHlnb25zKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgbXVuaWNpcGFsaXR5Lm11bmljaXBhbGl0eU5hbWUgIT09IFwiQnJub1wiXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBjaXR5UG9seWdvbiA9IGV4dHJhY3RQb2x5Z29uRnJvbUNvbGxlY3Rpb24oY2l0eVBvbHlnb25zW2NpdHlDb2RlXSk7XHJcbiAgICAgICAgLy8gc3VidHJhY3QgYWxsIGRpc3RyaWN0IHBvbHlnb25zIGZyb20gY2l0eSBwb2x5Z29uXHJcbiAgICAgICAgZm9yIChjb25zdCBbZGlzdHJpY3RDb2RlLCBkaXN0cmljdFBvbHlnb25dIG9mIE9iamVjdC5lbnRyaWVzKFxyXG4gICAgICAgICAgZGlzdHJpY3RQb2x5Z29uc1xyXG4gICAgICAgICkpIHtcclxuICAgICAgICAgIGlmIChtdW5pY2lwYWxpdHkuZGlzdHJpY3RDb2Rlcy5pbmNsdWRlcyhwYXJzZUludChkaXN0cmljdENvZGUpKSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNpdHlQb2x5Z29uID0gZGlmZmVyZW5jZShcclxuICAgICAgICAgICAgZmVhdHVyZUNvbGxlY3Rpb24oW1xyXG4gICAgICAgICAgICAgIGNpdHlQb2x5Z29uLFxyXG4gICAgICAgICAgICAgIGV4dHJhY3RQb2x5Z29uRnJvbUNvbGxlY3Rpb24oZGlzdHJpY3RQb2x5Z29uKSxcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBvbHlnb25zW2NpdHlDb2RlXSA9IGZlYXR1cmVDb2xsZWN0aW9uKFtjaXR5UG9seWdvbl0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3IgKGNvbnN0IGRpc3RyaWN0Q29kZSBvZiBtdW5pY2lwYWxpdHkuZGlzdHJpY3RDb2Rlcykge1xyXG4gICAgaWYgKGRpc3RyaWN0UG9seWdvbnNbZGlzdHJpY3RDb2RlXSkge1xyXG4gICAgICBwb2x5Z29uc1tkaXN0cmljdENvZGVdID0gZGlzdHJpY3RQb2x5Z29uc1tkaXN0cmljdENvZGVdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBvbHlnb25zO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBvbHlnb25zID0gKFxyXG4gIG11bmljaXBhbGl0eTogTXVuaWNpcGFsaXR5LFxyXG4gIGV4dHJhQXJlYXM6IEFyZWFbXSxcclxuICBtdW5pY2lwYWxpdHlQb2x5Z29uczogUmVjb3JkPFxyXG4gICAgbnVtYmVyLFxyXG4gICAgRmVhdHVyZUNvbGxlY3Rpb248UG9seWdvbiB8IE11bHRpUG9seWdvbj5cclxuICA+XHJcbik6IHtcclxuICBmZWF0dXJlQ29sbGVjdGlvbjogRmVhdHVyZUNvbGxlY3Rpb248UG9seWdvbiB8IE11bHRpUG9seWdvbj47XHJcbiAgZXh0cmFQb2x5Z29uczogTWFwPG51bWJlciwgRmVhdHVyZTxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPj47XHJcbn0gPT4ge1xyXG4gIGNvbnN0IG11bmljaXBhbGl0aWVzTXVsdGlwb2x5Z29uID0gY3JlYXRlTXVuaWNpcGFsaXRpZXNNdWx0aXBvbHlnb24oXHJcbiAgICBPYmplY3QudmFsdWVzKG11bmljaXBhbGl0eVBvbHlnb25zKVxyXG4gICk7XHJcbiAgY29uc3QgdW5pcXVlUG9pbnRzID0gbmV3IE1hcDxzdHJpbmcsIEZlYXR1cmU+KCk7XHJcbiAgY29uc3QgYWxsQXJlYXMgPSBbLi4ubXVuaWNpcGFsaXR5LmFyZWFzLCAuLi5leHRyYUFyZWFzXTtcclxuICBjb25zdCBleHRyYUFyZWFzSW5kZXhlcyA9IG5ldyBTZXQoZXh0cmFBcmVhcy5tYXAoKGFyZWEpID0+IGFyZWEuaW5kZXgpKTtcclxuXHJcbiAgZm9yIChjb25zdCBhcmVhIG9mIGFsbEFyZWFzKSB7XHJcbiAgICBjb25zdCBwb2ludHMgPSBbLi4uYXJlYS5hZGRyZXNzZXNdO1xyXG5cclxuICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKSB7XHJcbiAgICAgIGlmICghdW5pcXVlUG9pbnRzLmhhcyhwb2ludC5hZGRyZXNzKSkge1xyXG4gICAgICAgIGFkZFBvaW50KHVuaXF1ZVBvaW50cywgcG9pbnQsIGFyZWEuaW5kZXgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVuaXF1ZVBvaW50cy5nZXQocG9pbnQuYWRkcmVzcykucHJvcGVydGllcy5hcmVhSW5kZXhlcy5wdXNoKGFyZWEuaW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdCBwb2ludHMgPSB7XHJcbiAgICB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXHJcbiAgICBmZWF0dXJlczogQXJyYXkuZnJvbSh1bmlxdWVQb2ludHMudmFsdWVzKCkpLFxyXG4gIH0gYXMgRmVhdHVyZUNvbGxlY3Rpb248UG9pbnQ+O1xyXG5cclxuICBjb25zdCBwb2x5Z29ucyA9IGQzRGVsYXVuYXlWb3Jvbm9pKHBvaW50cyk7XHJcblxyXG4gIGNvbnN0IHVuaXRlZFBvbHlnb25zOiBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+W10gPSBbXTtcclxuICBjb25zdCBleHRyYVBvbHlnb25zID0gbmV3IE1hcDxudW1iZXIsIEZlYXR1cmU8UG9seWdvbiB8IE11bHRpUG9seWdvbj4+KCk7XHJcbiAgbGV0IGNvbG9ySW5kZXggPSAwO1xyXG5cclxuICBmb3IgKGNvbnN0IGFyZWEgb2YgYWxsQXJlYXMpIHtcclxuICAgIGNvbnN0IHNjaG9vbFBvbHlnb25zOiBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+W10gPVxyXG4gICAgICBwb2x5Z29ucy5mZWF0dXJlcy5maWx0ZXIoKHBvbHlnb24pID0+XHJcbiAgICAgICAgcG9seWdvbi5wcm9wZXJ0aWVzLmFyZWFJbmRleGVzLmluY2x1ZGVzKGFyZWEuaW5kZXgpXHJcbiAgICAgICk7XHJcblxyXG4gICAgaWYgKHNjaG9vbFBvbHlnb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzY2hvb2xQb2x5Z29uID0gaW50ZXJzZWN0KFxyXG4gICAgICBzY2hvb2xQb2x5Z29ucy5sZW5ndGggPiAxXHJcbiAgICAgICAgPyB1bmlvbihmZWF0dXJlQ29sbGVjdGlvbihzY2hvb2xQb2x5Z29ucykpXHJcbiAgICAgICAgOiBzY2hvb2xQb2x5Z29uc1swXSxcclxuICAgICAgbXVuaWNpcGFsaXRpZXNNdWx0aXBvbHlnb25cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZmVhdHVyZSA9IHtcclxuICAgICAgLi4uc2Nob29sUG9seWdvbixcclxuICAgICAgcHJvcGVydGllczoge1xyXG4gICAgICAgIGFyZWFJbmRleDogYXJlYS5pbmRleCxcclxuICAgICAgICBzY2hvb2xJem9zOiBhcmVhLnNjaG9vbHMubWFwKChzY2hvb2wpID0+IHNjaG9vbC5pem8pLFxyXG4gICAgICAgIGNvbG9ySW5kZXgsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgaWYgKGV4dHJhQXJlYXNJbmRleGVzLmhhcyhhcmVhLmluZGV4KSkge1xyXG4gICAgICBleHRyYVBvbHlnb25zLnNldChhcmVhLmluZGV4LCBmZWF0dXJlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVuaXRlZFBvbHlnb25zLnB1c2goZmVhdHVyZSk7XHJcbiAgICB9XHJcbiAgICBjb2xvckluZGV4Kys7XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgZmVhdHVyZUNvbGxlY3Rpb246IHRydW5jYXRlKHtcclxuICAgICAgdHlwZTogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxyXG4gICAgICBmZWF0dXJlczogWy4uLnVuaXRlZFBvbHlnb25zXSxcclxuICAgIH0pLFxyXG4gICAgZXh0cmFQb2x5Z29ucyxcclxuICB9O1xyXG59O1xyXG5cclxuY29uc3QgYWRkUG9pbnQgPSAoXHJcbiAgdW5pcXVlUG9pbnRzOiBNYXA8c3RyaW5nLCBGZWF0dXJlPixcclxuICBwb2ludDogRXhwb3J0QWRkcmVzc1BvaW50LFxyXG4gIGFyZWFJbmRleDogbnVtYmVyXHJcbikgPT4ge1xyXG4gIGlmIChwb2ludC5sYXQgPT09IG51bGwgfHwgcG9pbnQubG5nID09PSBudWxsKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gIHVuaXF1ZVBvaW50cy5zZXQocG9pbnQuYWRkcmVzcywge1xyXG4gICAgdHlwZTogXCJGZWF0dXJlXCIsXHJcbiAgICBnZW9tZXRyeToge1xyXG4gICAgICB0eXBlOiBcIlBvaW50XCIsXHJcbiAgICAgIGNvb3JkaW5hdGVzOiBbcG9pbnQubG5nLCBwb2ludC5sYXRdLFxyXG4gICAgfSxcclxuICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgYXJlYUluZGV4ZXM6IFthcmVhSW5kZXhdLFxyXG4gICAgfSxcclxuICB9KTtcclxufTtcclxuXHJcbmNvbnN0IGQzRGVsYXVuYXlWb3Jvbm9pID0gKFxyXG4gIHBvaW50czogRmVhdHVyZUNvbGxlY3Rpb248UG9pbnQ+XHJcbik6IEZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24sIFBvbHlnb25Qcm9wcz4gPT4ge1xyXG4gIGNvbnN0IGNvbnZlcnRlZCA9IHBvaW50cy5mZWF0dXJlcy5tYXAoKHApID0+IHtcclxuICAgIHJldHVybiB0b01lcmNhdG9yKFtwLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdLCBwLmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdXSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGJib3ggPSBbLi4udG9NZXJjYXRvcihbLTE4MCwgLTg1XSksIC4uLnRvTWVyY2F0b3IoWzE4MCwgODVdKV0gYXMgW1xyXG4gICAgbnVtYmVyLFxyXG4gICAgbnVtYmVyLFxyXG4gICAgbnVtYmVyLFxyXG4gICAgbnVtYmVyXHJcbiAgXTtcclxuXHJcbiAgY29uc3QgZGVsYXVuYXkgPSBuZXcgRGVsYXVuYXkoRmxvYXQ2NEFycmF5Lm9mKC4uLmNvbnZlcnRlZC5mbGF0KCkpKTtcclxuICBjb25zdCB2b3Jvbm9pID0gZGVsYXVuYXkudm9yb25vaShiYm94KTtcclxuICByZXR1cm4ge1xyXG4gICAgdHlwZTogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxyXG4gICAgZmVhdHVyZXM6IEFycmF5LmZyb20odm9yb25vaS5jZWxsUG9seWdvbnMoKSkubWFwKChwb2x5Z29uKSA9PiAoe1xyXG4gICAgICB0eXBlOiBcIkZlYXR1cmVcIixcclxuICAgICAgZ2VvbWV0cnk6IHtcclxuICAgICAgICB0eXBlOiBcIlBvbHlnb25cIixcclxuICAgICAgICBjb29yZGluYXRlczogW3BvbHlnb24ubWFwKChwKSA9PiB0b1dnczg0KHApKV0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICBhcmVhSW5kZXhlczogcG9pbnRzLmZlYXR1cmVzW3BvbHlnb24uaW5kZXhdLnByb3BlcnRpZXMuYXJlYUluZGV4ZXMsXHJcbiAgICAgICAgaW5kZXg6IHBvbHlnb24uaW5kZXgsXHJcbiAgICAgICAgbmVpZ2hib3JzOiBuZXcgU2V0KHZvcm9ub2kubmVpZ2hib3JzKHBvbHlnb24uaW5kZXgpKSxcclxuICAgICAgfSxcclxuICAgIH0pKSxcclxuICB9O1xyXG59O1xyXG5cclxuY29uc3QgY3JlYXRlTXVuaWNpcGFsaXRpZXNNdWx0aXBvbHlnb24gPSAoXHJcbiAgbXVuaWNpcGFsaXR5UG9seWdvbnM6IEZlYXR1cmVDb2xsZWN0aW9uW11cclxuKTogRmVhdHVyZTxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPiA9PiB7XHJcbiAgY29uc3QgbXVuaWNpcGFsaXR5UG9seWdvbkZlYXR1cmVzID0gbXVuaWNpcGFsaXR5UG9seWdvbnMucmVkdWNlKFxyXG4gICAgKGFjYywgbXVuaWNpcGFsaXR5UG9seWdvbikgPT4ge1xyXG4gICAgICBhY2MucHVzaChcclxuICAgICAgICAuLi5tdW5pY2lwYWxpdHlQb2x5Z29uLmZlYXR1cmVzLmZpbHRlcihcclxuICAgICAgICAgIChmKSA9PlxyXG4gICAgICAgICAgICBmLmdlb21ldHJ5LnR5cGUgPT09IFwiUG9seWdvblwiIHx8IGYuZ2VvbWV0cnkudHlwZSA9PT0gXCJNdWx0aVBvbHlnb25cIlxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sXHJcbiAgICBbXVxyXG4gICk7XHJcblxyXG4gIHJldHVybiBleHRyYWN0UG9seWdvbkZyb21Db2xsZWN0aW9uKFxyXG4gICAgZmVhdHVyZUNvbGxlY3Rpb24obXVuaWNpcGFsaXR5UG9seWdvbkZlYXR1cmVzKVxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBleHRyYWN0TXVuaWNpcGFsaXR5Q29kZXMgPSAobXVuaWNpcGFsaXRpZXM6IE11bmljaXBhbGl0eVtdKSA9PiB7XHJcbiAgcmV0dXJuIG11bmljaXBhbGl0aWVzLnJlZHVjZShcclxuICAgIChhY2MsIG11bmljaXBhbGl0eSkgPT4ge1xyXG4gICAgICBtdW5pY2lwYWxpdHkuY2l0eUNvZGVzLmZvckVhY2goKGNpdHlDb2RlKSA9PiBhY2MuY2l0eUNvZGVzLmFkZChjaXR5Q29kZSkpO1xyXG4gICAgICBtdW5pY2lwYWxpdHkuZGlzdHJpY3RDb2Rlcy5mb3JFYWNoKChkaXN0cmljdENvZGUpID0+XHJcbiAgICAgICAgYWNjLmRpc3RyaWN0Q29kZXMuYWRkKGRpc3RyaWN0Q29kZSlcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sXHJcbiAgICB7IGNpdHlDb2RlczogbmV3IFNldDxudW1iZXI+KCksIGRpc3RyaWN0Q29kZXM6IG5ldyBTZXQ8bnVtYmVyPigpIH1cclxuICApO1xyXG59O1xyXG5cclxuY29uc3QgZXh0cmFjdFBvbHlnb25Gcm9tQ29sbGVjdGlvbiA9IChcclxuICBjb2xsZWN0aW9uOiBGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uIHwgTXVsdGlQb2x5Z29uPlxyXG4pOiBGZWF0dXJlPFBvbHlnb24gfCBNdWx0aVBvbHlnb24+ID0+XHJcbiAgY29sbGVjdGlvbi5mZWF0dXJlcy5sZW5ndGggPiAxID8gdW5pb24oY29sbGVjdGlvbikgOiBjb2xsZWN0aW9uLmZlYXR1cmVzWzBdO1xyXG4iXX0=
|
|
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==
|
|
@@ -33,6 +33,7 @@ export const parseOrdinanceToAddressPoints = async ({ lines, initialState = {},
|
|
|
33
33
|
const line = cleanLine(rawLine);
|
|
34
34
|
await processOneLine({
|
|
35
35
|
line,
|
|
36
|
+
rawLine: rawLine.trim(),
|
|
36
37
|
state,
|
|
37
38
|
lineNumber,
|
|
38
39
|
onError,
|
|
@@ -162,13 +163,13 @@ const processEmptyLine = ({ state }) => {
|
|
|
162
163
|
state.currentArea = null;
|
|
163
164
|
}
|
|
164
165
|
};
|
|
165
|
-
const processFirstSchoolLine = async ({
|
|
166
|
+
const processFirstSchoolLine = async ({ rawLine, lineNumber, state, onError, }) => {
|
|
166
167
|
if (state.currentMunicipality === null) {
|
|
167
168
|
onError({
|
|
168
169
|
lineNumber,
|
|
169
|
-
line,
|
|
170
|
+
line: rawLine,
|
|
170
171
|
errors: [
|
|
171
|
-
wholeLineError("Definici školy musí předcházet definice zřizovatele (uvozená '#', např. '# Strakonice').",
|
|
172
|
+
wholeLineError("Definici školy musí předcházet definice zřizovatele (uvozená '#', např. '# Strakonice').", rawLine),
|
|
172
173
|
],
|
|
173
174
|
});
|
|
174
175
|
return;
|
|
@@ -177,7 +178,7 @@ const processFirstSchoolLine = async ({ line, lineNumber, state, onError, }) =>
|
|
|
177
178
|
index: state.areaCount++,
|
|
178
179
|
schools: [
|
|
179
180
|
await getNewSchool({
|
|
180
|
-
name:
|
|
181
|
+
name: rawLine,
|
|
181
182
|
founder: state.currentMunicipality.founder,
|
|
182
183
|
lineNumber,
|
|
183
184
|
required: true,
|
|
@@ -435,4 +436,4 @@ const roundToNDecimalPlaces = (toRound, decimalPlaces) => {
|
|
|
435
436
|
return (Math.round(toRound * Math.pow(10, decimalPlaces)) /
|
|
436
437
|
Math.pow(10, decimalPlaces));
|
|
437
438
|
};
|
|
438
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVldC1tYXJrZG93bi9zbWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsbUJBQW1CLEdBQ3BCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFXLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9FLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLHdCQUF3QixFQUN4Qiw0QkFBNEIsRUFDNUIsMEJBQTBCLEVBQzFCLG1CQUFtQixHQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQTBCOUMsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsS0FBSyxFQUFFLEVBQ2xELEtBQUssRUFDTCxZQUFZLEdBQUcsRUFBRSxFQUNqQixPQUFPLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUNsQixTQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUNwQixlQUFlLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUMxQiw0QkFBNEIsR0FBRyxLQUFLLEdBQ2hCLEVBQTJCLEVBQUU7SUFDakQsSUFBSTtRQUNGLE1BQU0sS0FBSyxHQUFhO1lBQ3RCLG1CQUFtQixFQUFFLElBQUk7WUFDekIseUJBQXlCLEVBQUUsSUFBSTtZQUMvQixXQUFXLEVBQUUsSUFBSTtZQUNqQixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLFNBQVMsRUFBRSxDQUFDO1lBQ1osS0FBSyxFQUFFO2dCQUNMLGdCQUFnQixFQUFFO29CQUNoQixTQUFTLEVBQUUsSUFBSTtvQkFDZixVQUFVLEVBQUUsSUFBSTtpQkFDakI7Z0JBQ0QsaUJBQWlCLEVBQUUsRUFBRTtnQkFDckIscUJBQXFCLEVBQUU7b0JBQ3JCLFNBQVMsRUFBRSxJQUFJO29CQUNmLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjtnQkFDRCw0QkFBNEI7YUFDN0I7WUFDRCxjQUFjLEVBQUUsRUFBRTtZQUNsQixHQUFHLFlBQVk7U0FDaEIsQ0FBQztRQUVGLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUVuQixLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUssRUFBRTtZQUMzQixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEMsTUFBTSxjQUFjLENBQUM7Z0JBQ25CLElBQUk7Z0JBQ0osS0FBSztnQkFDTCxVQUFVO2dCQUNWLE9BQU87Z0JBQ1AsU0FBUzthQUNWLENBQUMsQ0FBQztZQUNILGVBQWUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLFVBQVUsRUFBRSxDQUFDO1NBQ2Q7UUFFRCxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO1lBQzdCLElBQUksS0FBSyxDQUFDLG1CQUFtQixJQUFJLElBQUksRUFBRTtnQkFDckMsT0FBTyxFQUFFLENBQUM7YUFDWDtZQUNELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzNFO1FBRUQsTUFBTSwyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6QyxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUM7S0FDN0I7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdEI7WUFBUztRQUNSLE1BQU0sY0FBYyxFQUFFLENBQUM7S0FDeEI7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQ2pDLFlBQXNDLEVBQ3hCLEVBQUU7SUFDaEIsT0FBTztRQUNMLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxnQkFBZ0I7UUFDL0MsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FDcEQsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUM5QztTQUNGLENBQUMsQ0FBQztRQUNILElBQUksRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQjtRQUMzQyxnQkFBZ0IsRUFDZCxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLElBQUk7WUFDN0QsQ0FBQyxDQUFDLE1BQU07WUFDUixDQUFDLENBQUMsVUFBVTtRQUNoQixTQUFTLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RCxjQUFjLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQ2hELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FDOUM7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUFFLE1BQXlCLEVBQUUsRUFBRTtJQUN6RCxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFM0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ25CLE1BQU0sdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsT0FBTztLQUNSO0lBRUQsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO1FBQ2YsZ0JBQWdCO1FBQ2hCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLE9BQU87S0FDUjtJQUVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUNuQixPQUFPO0tBQ1I7SUFFRCxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFO1FBQzlCLE1BQU0sc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsT0FBTztLQUNSO0lBRUQsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEtBQUssS0FBSyxFQUFFO1FBQ3BDLE1BQU0sZUFBZSxHQUFHLE1BQU0scUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsSUFBSSxlQUFlLEVBQUU7WUFDbkIsT0FBTztTQUNSO2FBQU07WUFDTCxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1NBQy9CO0tBQ0Y7SUFFRCxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzlCLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3ZDO1NBQU0sSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNwQyxNQUFNLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzVDO1NBQU0sSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMzQyxLQUFLLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHO1lBQzdCLFNBQVMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUs7WUFDbEMsVUFBVTtTQUNYLENBQUM7S0FDSDtTQUFNLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDekMsS0FBSyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsR0FBRztZQUNsQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLO1lBQ2xDLFVBQVU7U0FDWCxDQUFDO0tBQ0g7U0FBTSxJQUFJLDRCQUE0QixDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzdDLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLHlCQUF5QixDQUN0RSxJQUFJLEVBQ0osS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FDbEMsQ0FBQztRQUNGLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDMUQ7YUFBTTtZQUNMLEtBQUssQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxvQkFBb0I7Z0JBQ3BCLFNBQVMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUs7Z0JBQ2xDLFVBQVUsRUFBRSxVQUFVO2FBQ3ZCLENBQUMsQ0FBQztTQUNKO0tBQ0Y7U0FBTTtRQUNMLE1BQU0sdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDdkM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLHVCQUF1QixHQUFHLEtBQUssRUFBRSxFQUNyQyxJQUFJLEVBQ0osVUFBVSxFQUNWLEtBQUssRUFDTCxPQUFPLEdBQ1csRUFBRSxFQUFFO0lBQ3RCLElBQUksS0FBSyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7UUFDOUIsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ3pEO0lBRUQsTUFBTSwyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV6QyxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEUsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNyQixPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7S0FDdkM7SUFDRCxLQUFLLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxDQUFDO0lBQ3pDLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyxxQkFBcUIsQ0FDckQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FDbEMsQ0FBQztJQUVGLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzNCLENBQUMsQ0FBQztBQUVGLE1BQU0sMkJBQTJCLEdBQUcsS0FBSyxFQUFFLEtBQWUsRUFBRSxFQUFFO0lBQzVELElBQUksS0FBSyxDQUFDLG1CQUFtQixLQUFLLElBQUksRUFBRTtRQUN0QyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0tBQzNFO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFxQixFQUFFLEVBQUU7SUFDeEQsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtRQUM5QixLQUFLLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEQsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7S0FDMUI7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLHNCQUFzQixHQUFHLEtBQUssRUFBRSxFQUNwQyxJQUFJLEVBQ0osVUFBVSxFQUNWLEtBQUssRUFDTCxPQUFPLEdBQ1csRUFBRSxFQUFFO0lBQ3RCLElBQUksS0FBSyxDQUFDLG1CQUFtQixLQUFLLElBQUksRUFBRTtRQUN0QyxPQUFPLENBQUM7WUFDTixVQUFVO1lBQ1YsSUFBSTtZQUNKLE1BQU0sRUFBRTtnQkFDTixjQUFjLENBQ1osMEZBQTBGLEVBQzFGLElBQUksQ0FDTDthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsT0FBTztLQUNSO0lBQ0QsS0FBSyxDQUFDLFdBQVcsR0FBRztRQUNsQixLQUFLLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRTtRQUN4QixPQUFPLEVBQUU7WUFDUCxNQUFNLFlBQVksQ0FBQztnQkFDakIsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPO2dCQUMxQyxVQUFVO2dCQUNWLFFBQVEsRUFBRSxJQUFJO2dCQUNkLE9BQU87YUFDUixDQUFDO1NBQ0g7UUFDRCxTQUFTLEVBQUUsRUFBRTtRQUNiLFVBQVUsRUFBRSxJQUFJLEdBQUcsRUFBOEI7UUFDakQsZUFBZSxFQUFFLEtBQUs7S0FDdkIsQ0FBQztJQUNGLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDL0IsS0FBSyxDQUFDLHlCQUF5QixHQUFHLHFCQUFxQixDQUNyRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUNsQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLEVBQUUsRUFDbkMsSUFBSSxFQUNKLFVBQVUsRUFDVixLQUFLLEdBQ2EsRUFBb0IsRUFBRTtJQUN4QyxNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQVksQ0FBQztRQUNoQyxJQUFJLEVBQUUsSUFBSTtRQUNWLE9BQU8sRUFBRSxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBTztRQUMxQyxVQUFVO1FBQ1YsUUFBUSxFQUFFLEtBQUs7UUFDZixPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztLQUNsQixDQUFDLENBQUM7SUFFSCxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7UUFDbkIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGLE1BQU0sNkJBQTZCLEdBQUcsS0FBSyxFQUFFLEVBQzNDLElBQUksRUFDSixLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sR0FDVyxFQUFFLEVBQUU7SUFDdEIsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLHFCQUFxQixDQUMxRCxJQUFJLEVBQ0osS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FDbEMsQ0FBQztJQUNGLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDckIsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZDO1NBQU07UUFDTCxLQUFLLENBQUMseUJBQXlCLEdBQUcsWUFBWSxDQUFDO0tBQ2hEO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSw0QkFBNEIsR0FBRyxLQUFLLEVBQUUsRUFDMUMsSUFBSSxFQUNKLEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxHQUNXLEVBQUUsRUFBRTtJQUN0QixNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sb0JBQW9CLENBQ3pELElBQUksRUFDSixLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUNsQyxDQUFDO0lBQ0YsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNyQixPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7S0FDdkM7U0FBTTtRQUNMLElBQUksWUFBWSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7WUFDL0MsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdEO2FBQU07WUFDTCxLQUFLLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakU7UUFFRCxNQUFNLGFBQWEsR0FBRyxNQUFNLGlCQUFpQixDQUFDO1lBQzVDLElBQUksRUFBRSxtQkFBbUI7WUFDekIsWUFBWTtTQUNiLENBQUMsQ0FBQztRQUNILHNCQUFzQixDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQ3RFO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxzQkFBc0IsR0FBRyxDQUM3QixJQUFzQixFQUN0QixhQUE2QixFQUM3QixVQUFrQixFQUNsQixnQkFBeUIsRUFDekIsRUFBRTtJQUNGLEtBQUssTUFBTSxLQUFLLElBQUksYUFBYSxFQUFFO1FBQ2pDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNoRTthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQ2pCLEtBQUssQ0FBQyxFQUFFLEVBQ1Isd0JBQXdCLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUM5RCxDQUFDO1NBQ0g7S0FDRjtBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxFQUFFLEVBQ3JDLElBQUksRUFDSixLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFDUCxTQUFTLEdBQ1MsRUFBRSxFQUFFO0lBQ3RCLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDckIsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZDO1NBQU07UUFDTCxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRTtZQUM5QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUM3QixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0saUJBQWlCLENBQ2hELE9BQU8sQ0FBQyxNQUFNLEVBQ2QsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FDbEMsQ0FBQztnQkFDRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNyQixTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7aUJBQ3pDO2dCQUNELElBQUksTUFBTSxFQUFFO29CQUNWLE1BQU0sYUFBYSxHQUFHLE1BQU0saUJBQWlCLENBQUM7d0JBQzVDLElBQUksRUFBRSxTQUFTO3dCQUNmLE9BQU87d0JBQ1AsWUFBWSxFQUFFLEtBQUssQ0FBQyx5QkFBeUI7cUJBQzlDLENBQUMsQ0FBQztvQkFFSCxzQkFBc0IsQ0FDcEIsS0FBSyxDQUFDLFdBQVcsRUFDakIsYUFBYSxFQUNiLFVBQVUsRUFDVixLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSTt3QkFDNUIsS0FBSyxDQUFDLHlCQUF5QixDQUFDLElBQUk7d0JBQ3BDLENBQUMsQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsSUFBSTt3QkFDdEMsQ0FBQyxDQUFDLFNBQVMsQ0FDZCxDQUFDO2lCQUNIO2FBQ0Y7aUJBQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGtCQUFrQixFQUFFO2dCQUM5QyxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQ3BDLE1BQU0seUJBQXlCLENBQzdCLE9BQU8sQ0FBQyxnQkFBZ0IsRUFDeEIsSUFBSSxFQUNKLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQ2xDLENBQUM7Z0JBQ0osSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDckIsU0FBUyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2lCQUN6QztxQkFBTTtvQkFDTCxNQUFNLGFBQWEsR0FBRyxNQUFNLGlCQUFpQixDQUFDO3dCQUM1QyxJQUFJLEVBQUUsU0FBUzt3QkFDZixPQUFPO3dCQUNQLFlBQVksRUFBRSxLQUFLLENBQUMseUJBQXlCO3dCQUM3QyxvQkFBb0I7cUJBQ3JCLENBQUMsQ0FBQztvQkFFSCxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztpQkFDdEU7YUFDRjtTQUNGO0tBQ0Y7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUNwQixVQUEwQixFQUMxQixTQUFpQixFQUNqQixVQUFrQixFQUNsQixLQUFlLEVBQ2YsRUFBRTtJQUNGLE1BQU0sZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFM0UsNENBQTRDO0lBQzVDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQ3ZDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQzNDLENBQUM7SUFFRixzQkFBc0IsQ0FDcEIsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEVBQ3hFLGVBQWUsRUFDZixVQUFVLENBQ1gsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxLQUFlLEVBQUUsRUFBRTtJQUN6QyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRTtRQUNuRCxNQUFNLCtCQUErQixDQUNuQyxLQUFLLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFDdkMsS0FBSyxDQUNOLENBQUM7S0FDSDtJQUVELElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFO1FBQ3hELE1BQU0scUJBQXFCLENBQ3pCLEtBQUssQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUM1QyxLQUFLLENBQ04sQ0FBQztLQUNIO0lBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFO1FBQ2hELE1BQU0seUJBQXlCLENBQzdCLEtBQUssRUFDTCxJQUFJLENBQUMsb0JBQW9CLEVBQ3pCLElBQUksQ0FBQyxTQUFTLEVBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztLQUNIO0lBRUQsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFO1FBQzVDLE1BQU0scUNBQXFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDcEQ7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDOUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ25ELEtBQUssQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUVGLE1BQU0sK0JBQStCLEdBQUcsS0FBSyxFQUMzQyxVQUFrQixFQUNsQixLQUFlLEVBQ2YsRUFBRTtJQUNGLHNFQUFzRTtJQUN0RSxNQUFNLGtCQUFrQixHQUFHLE1BQU0saUJBQWlCLENBQUM7UUFDakQsSUFBSSxFQUFFLCtCQUErQjtRQUNyQyxZQUFZLEVBQUU7WUFDWixJQUFJLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxnQkFBZ0I7WUFDeEQsSUFBSSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCO1NBQ3pEO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsYUFBYSxDQUNYLGtCQUFrQixFQUNsQixLQUFLLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFDdEMsVUFBVSxFQUNWLEtBQUssQ0FDTixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLEVBQUUsVUFBa0IsRUFBRSxLQUFlLEVBQUUsRUFBRTtJQUMxRSxhQUFhLENBQ1gsTUFBTSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFDbEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQzNDLFVBQVUsRUFDVixLQUFLLENBQ04sQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0scUNBQXFDLEdBQUcsS0FBSyxFQUFFLEtBQWUsRUFBRSxFQUFFO0lBQ3RFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEdBQUcsQ0FDekMsTUFBTSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FDbkMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLEVBQ2pDLEtBQWUsRUFDVSxFQUFFO0lBQzNCLGtEQUFrRDtJQUNsRCxNQUFNLFNBQVMsR0FBRyxNQUFNLGlCQUFpQixDQUFDO1FBQ3hDLElBQUksRUFBRSxtQkFBbUI7UUFDekIsWUFBWSxFQUFFO1lBQ1osSUFBSSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCO1lBQ3hELElBQUksRUFBRSxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLGdCQUFnQjtTQUN6RDtLQUNGLENBQUMsQ0FBQztJQUVILDRDQUE0QztJQUM1QyxNQUFNLGdCQUFnQixHQUFHLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNFLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSx5QkFBeUIsR0FBRyxLQUFLLEVBQ3JDLEtBQWUsRUFDZixvQkFBNEIsRUFDNUIsU0FBaUIsRUFDakIsVUFBa0IsRUFDbEIsRUFBRTtJQUNGLE1BQU0sU0FBUyxHQUFHLE1BQU0saUJBQWlCLENBQUM7UUFDeEMsSUFBSSxFQUFFLHVCQUF1QjtRQUM3QixvQkFBb0I7S0FDckIsQ0FBQyxDQUFDO0lBQ0gsYUFBYSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLEtBQUssRUFDM0MsSUFBWSxFQUM2QixFQUFFO0lBQzNDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEQsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0MsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsS0FBSyxFQUNoRCxTQUFpQixFQUN3QixFQUFFO0lBQzNDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUQsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0MsQ0FBQyxDQUFDO0FBRUYsTUFBTSxrQkFBa0IsR0FBRyxDQUN6QixPQUFnQixFQUNoQixNQUFrQixFQUNjLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLFlBQVksRUFBRTtRQUNaLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYztRQUN6RCxPQUFPO1FBQ1AsS0FBSyxFQUFFLEVBQUU7UUFDVCxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsZ0JBQWdCLEVBQ2QsT0FBTyxDQUFDLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVO1FBQzFFLFNBQVMsRUFDUCxPQUFPLENBQUMsZ0JBQWdCLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtZQUNoRCxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7WUFDNUIsQ0FBQyxDQUFDLEVBQUU7UUFDUixhQUFhLEVBQ1gsT0FBTyxDQUFDLGdCQUFnQixLQUFLLGdCQUFnQixDQUFDLFFBQVE7WUFDcEQsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1lBQzVCLENBQUMsQ0FBQyxFQUFFO1FBQ1IsY0FBYyxFQUFFLEVBQUU7S0FDbkI7SUFDRCxNQUFNO0NBQ1AsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxFQUNqQyxJQUFJLEVBQ0osT0FBTyxFQUNQLFVBQVUsRUFDVixRQUFRLEVBQ1IsT0FBTyxHQU9SLEVBQXNDLEVBQUU7SUFDdkMsSUFBSSxZQUFZLEdBQVc7UUFDekIsSUFBSTtRQUNKLEdBQUcsRUFBRSxFQUFFO0tBQ1IsQ0FBQztJQUNGLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtRQUNwQixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FDbkMsSUFBSSxFQUNKLE9BQU8sQ0FBQyxPQUFPLEVBQ2YsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDMUIsQ0FBQztRQUNGLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckIsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUM3QztRQUNELElBQUksTUFBTSxFQUFFO1lBQ1YsWUFBWSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2hDLFlBQVksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDcEMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQy9CLE1BQU0sUUFBUSxHQUFHLE1BQU0sbUJBQW1CLENBQ3hDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUNuQyxDQUFDO2dCQUNGLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtvQkFDckIsWUFBWSxDQUFDLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDNUQ7YUFDRjtTQUNGO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQztTQUNiO0tBQ0Y7SUFDRCxPQUFPLEVBQUUsR0FBRyxZQUFZLEVBQUUsVUFBVSxFQUFFLElBQUksR0FBRyxFQUE4QixFQUFFLENBQUM7QUFDaEYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxzQkFBc0IsR0FBRyxDQUM3QixZQUFzQyxFQUN6QixFQUFFO0lBQ2YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRTNDLEtBQUssTUFBTSxJQUFJLElBQUksWUFBWSxDQUFDLEtBQUssRUFBRTtRQUNyQyxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdkMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzFCO0tBQ0Y7SUFDRCxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUMsQ0FBQztBQUVGLE1BQU0sd0JBQXdCLEdBQUcsQ0FDL0IsWUFBK0MsRUFDL0MsVUFBbUIsRUFDbkIsZ0JBQXlCLEVBQ0wsRUFBRTtJQUN0QixPQUFPO1FBQ0wsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPO1FBQzdCLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMvQyxHQUFHLEVBQUUscUJBQXFCLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDL0MsR0FBRyxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0RSxHQUFHLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNoRSxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLElBQXNCLEVBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLEdBQUcsSUFBSTtJQUNQLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyQyxHQUFHLE1BQU07UUFDVCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDdkIsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDM0MsQ0FBQyxDQUFDLElBQUk7S0FDVCxDQUFDLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO0lBQ2pDLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBZSxFQUFFLElBQVksRUFBWSxFQUFFLENBQUMsQ0FBQztJQUMxRSxPQUFPO0lBQ1AsV0FBVyxFQUFFLENBQUM7SUFDZCxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0NBQzNCLENBQUMsQ0FBQztBQUVILE1BQU0scUJBQXFCLEdBQUcsQ0FDNUIsT0FBZSxFQUNmLGFBQXFCLEVBQ2IsRUFBRTtJQUNWLE9BQU8sQ0FDTCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FDNUIsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgY2hlY2tTdHJlZXRFeGlzdHMsXHJcbiAgZmluZEFkZHJlc3NQb2ludHMsXHJcbiAgZ2V0QWRkcmVzc1BvaW50QnlJZCxcclxufSBmcm9tIFwiLi4vZGIvYWRkcmVzcy1wb2ludHNcIjtcclxuaW1wb3J0IHsgZGlzY29ubmVjdEtuZXggfSBmcm9tIFwiLi4vZGIvZGJcIjtcclxuaW1wb3J0IHsgZmluZEZvdW5kZXIsIGdldEZvdW5kZXJCeUlkIH0gZnJvbSBcIi4uL2RiL2ZvdW5kZXJzXCI7XHJcbmltcG9ydCB7IGZpbmRTY2hvb2wgfSBmcm9tIFwiLi4vZGIvc2Nob29sc1wiO1xyXG5pbXBvcnQgeyBGb3VuZGVyLCBNdW5pY2lwYWxpdHlUeXBlLCBmb3VuZGVyVG9NdW5pY2lwYWxpdHkgfSBmcm9tIFwiLi4vZGIvdHlwZXNcIjtcclxuaW1wb3J0IHtcclxuICBnZXRNdW5pY2lwYWxpdHlQYXJ0UmVzdWx0LFxyXG4gIGdldFJlc3RPZk11bmljaXBhbGl0eVBhcnQsXHJcbiAgZ2V0U3dpdGNoTXVuaWNpcGFsaXR5LFxyXG4gIGdldFdob2xlTXVuaWNpcGFsaXR5LFxyXG4gIGlzTXVuaWNpcGFsaXR5U3dpdGNoLFxyXG4gIGlzUmVzdE9mTXVuaWNpcGFsaXR5TGluZSxcclxuICBpc1Jlc3RPZk11bmljaXBhbGl0eVBhcnRMaW5lLFxyXG4gIGlzUmVzdFdpdGhOb1N0cmVldE5hbWVMaW5lLFxyXG4gIGlzV2hvbGVNdW5pY2lwYWxpdHksXHJcbn0gZnJvbSBcIi4vbXVuaWNpcGFsaXR5XCI7XHJcbmltcG9ydCB7IHBhcnNlTGluZSB9IGZyb20gXCIuL3NtZC1saW5lLXBhcnNlclwiO1xyXG5pbXBvcnQge1xyXG4gIEFkZHJlc3NQb2ludCxcclxuICBFcnJvckNhbGxiYWNrUGFyYW1zLFxyXG4gIEV4cG9ydEFkZHJlc3NQb2ludCxcclxuICBJbnRlcm1lZGlhdGVBcmVhLFxyXG4gIEludGVybWVkaWF0ZU11bmljaXBhbGl0eSxcclxuICBJbnRlcm1lZGlhdGVNdW5pY2lwYWxpdHlSZXN1bHQsXHJcbiAgSW50ZXJtZWRpYXRlU2Nob29sLFxyXG4gIE11bmljaXBhbGl0eSxcclxuICBQcm9jZXNzTGluZUNhbGxiYWNrUGFyYW1zLFxyXG4gIFByb2Nlc3NMaW5lUGFyYW1zLFxyXG4gIFNjaG9vbCxcclxuICBTbWRFcnJvcixcclxuICBTbWRTdGF0ZSxcclxufSBmcm9tIFwiLi90eXBlc1wiO1xyXG5cclxuaW50ZXJmYWNlIFBhcnNlT3JkaW5hbmNlUHJvcHMge1xyXG4gIGxpbmVzOiBzdHJpbmdbXTtcclxuICBpbml0aWFsU3RhdGU/OiBQYXJ0aWFsPFNtZFN0YXRlPjtcclxuICBvbkVycm9yPzogKHBhcmFtczogRXJyb3JDYWxsYmFja1BhcmFtcykgPT4gdm9pZDtcclxuICBvbldhcm5pbmc/OiAocGFyYW1zOiBFcnJvckNhbGxiYWNrUGFyYW1zKSA9PiB2b2lkO1xyXG4gIG9uUHJvY2Vzc2VkTGluZT86IChwYXJhbXM6IFByb2Nlc3NMaW5lQ2FsbGJhY2tQYXJhbXMpID0+IHZvaWQ7XHJcbiAgaW5jbHVkZVVubWFwcGVkQWRkcmVzc1BvaW50czogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHBhcnNlT3JkaW5hbmNlVG9BZGRyZXNzUG9pbnRzID0gYXN5bmMgKHtcclxuICBsaW5lcyxcclxuICBpbml0aWFsU3RhdGUgPSB7fSxcclxuICBvbkVycm9yID0gKCkgPT4ge30sXHJcbiAgb25XYXJuaW5nID0gKCkgPT4ge30sXHJcbiAgb25Qcm9jZXNzZWRMaW5lID0gKCkgPT4ge30sXHJcbiAgaW5jbHVkZVVubWFwcGVkQWRkcmVzc1BvaW50cyA9IGZhbHNlLFxyXG59OiBQYXJzZU9yZGluYW5jZVByb3BzKTogUHJvbWlzZTxNdW5pY2lwYWxpdHlbXT4gPT4ge1xyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBzdGF0ZTogU21kU3RhdGUgPSB7XHJcbiAgICAgIGN1cnJlbnRNdW5pY2lwYWxpdHk6IG51bGwsXHJcbiAgICAgIGN1cnJlbnRGaWx0ZXJNdW5pY2lwYWxpdHk6IG51bGwsXHJcbiAgICAgIGN1cnJlbnRBcmVhOiBudWxsLFxyXG4gICAgICBzY2hvb2xzQ29tcGxldGVkOiBmYWxzZSxcclxuICAgICAgYXJlYUNvdW50OiAwLFxyXG4gICAgICByZXN0czoge1xyXG4gICAgICAgIG5vU3RyZWV0TmFtZUFyZWE6IHtcclxuICAgICAgICAgIGFyZWFJbmRleDogbnVsbCxcclxuICAgICAgICAgIGxpbmVOdW1iZXI6IG51bGwsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtdW5pY2lwYWxpdHlQYXJ0czogW10sXHJcbiAgICAgICAgd2hvbGVNdW5pY2lwYWxpdHlBcmVhOiB7XHJcbiAgICAgICAgICBhcmVhSW5kZXg6IG51bGwsXHJcbiAgICAgICAgICBsaW5lTnVtYmVyOiBudWxsLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW5jbHVkZVVubWFwcGVkQWRkcmVzc1BvaW50cyxcclxuICAgICAgfSxcclxuICAgICAgbXVuaWNpcGFsaXRpZXM6IFtdLFxyXG4gICAgICAuLi5pbml0aWFsU3RhdGUsXHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBsaW5lTnVtYmVyID0gMTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHJhd0xpbmUgb2YgbGluZXMpIHtcclxuICAgICAgY29uc3QgbGluZSA9IGNsZWFuTGluZShyYXdMaW5lKTtcclxuICAgICAgYXdhaXQgcHJvY2Vzc09uZUxpbmUoe1xyXG4gICAgICAgIGxpbmUsXHJcbiAgICAgICAgc3RhdGUsXHJcbiAgICAgICAgbGluZU51bWJlcixcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG9uV2FybmluZyxcclxuICAgICAgfSk7XHJcbiAgICAgIG9uUHJvY2Vzc2VkTGluZSh7IGxpbmVOdW1iZXIsIGxpbmUgfSk7XHJcbiAgICAgIGxpbmVOdW1iZXIrKztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhdGUuY3VycmVudEFyZWEgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoc3RhdGUuY3VycmVudE11bmljaXBhbGl0eSA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuYXJlYXMucHVzaChtYXBBcmVhRm9yRXhwb3J0KHN0YXRlLmN1cnJlbnRBcmVhKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgY29tcGxldGVDdXJyZW50TXVuaWNpcGFsaXR5KHN0YXRlKTtcclxuXHJcbiAgICByZXR1cm4gc3RhdGUubXVuaWNpcGFsaXRpZXM7XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gIH0gZmluYWxseSB7XHJcbiAgICBhd2FpdCBkaXNjb25uZWN0S25leCgpO1xyXG4gIH1cclxuICByZXR1cm4gW107XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY29udmVydE11bmljaXBhbGl0eSA9IChcclxuICBtdW5pY2lwYWxpdHk6IEludGVybWVkaWF0ZU11bmljaXBhbGl0eVxyXG4pOiBNdW5pY2lwYWxpdHkgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICBtdW5pY2lwYWxpdHlOYW1lOiBtdW5pY2lwYWxpdHkubXVuaWNpcGFsaXR5TmFtZSxcclxuICAgIGFyZWFzOiBtdW5pY2lwYWxpdHkuYXJlYXMubWFwKChhcmVhKSA9PiAoe1xyXG4gICAgICBpbmRleDogYXJlYS5pbmRleCxcclxuICAgICAgc2Nob29sczogYXJlYS5zY2hvb2xzLFxyXG4gICAgICBhZGRyZXNzZXM6IEFycmF5LmZyb20oYXJlYS5hZGRyZXNzTWFwLnZhbHVlcygpKS5maWx0ZXIoXHJcbiAgICAgICAgKHBvaW50KSA9PiBwb2ludC5sYXQgIT09IDAgJiYgcG9pbnQubG5nICE9PSAwXHJcbiAgICAgICksXHJcbiAgICB9KSksXHJcbiAgICBjb2RlOiBtdW5pY2lwYWxpdHkuZm91bmRlci5tdW5pY2lwYWxpdHlDb2RlLFxyXG4gICAgbXVuaWNpcGFsaXR5VHlwZTpcclxuICAgICAgbXVuaWNpcGFsaXR5LmZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5XHJcbiAgICAgICAgPyBcImNpdHlcIlxyXG4gICAgICAgIDogXCJkaXN0cmljdFwiLFxyXG4gICAgY2l0eUNvZGVzOiBbLi4ubmV3IFNldChtdW5pY2lwYWxpdHkuY2l0eUNvZGVzKV0sXHJcbiAgICBkaXN0cmljdENvZGVzOiBbLi4ubmV3IFNldChtdW5pY2lwYWxpdHkuZGlzdHJpY3RDb2RlcyldLFxyXG4gICAgdW5tYXBwZWRQb2ludHM6IG11bmljaXBhbGl0eS51bm1hcHBlZFBvaW50cy5maWx0ZXIoXHJcbiAgICAgIChwb2ludCkgPT4gcG9pbnQubGF0ICE9PSAwICYmIHBvaW50LmxuZyAhPT0gMFxyXG4gICAgKSxcclxuICB9O1xyXG59O1xyXG5cclxuY29uc3QgcHJvY2Vzc09uZUxpbmUgPSBhc3luYyAocGFyYW1zOiBQcm9jZXNzTGluZVBhcmFtcykgPT4ge1xyXG4gIGNvbnN0IHsgbGluZSwgbGluZU51bWJlciwgc3RhdGUgfSA9IHBhcmFtcztcclxuXHJcbiAgaWYgKGxpbmVbMF0gPT09IFwiI1wiKSB7XHJcbiAgICBhd2FpdCBwcm9jZXNzTXVuaWNpcGFsaXR5TGluZShwYXJhbXMpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKGxpbmUgPT09IFwiXCIpIHtcclxuICAgIC8vIGVuZCBvZiBzY2hvb2xcclxuICAgIHByb2Nlc3NFbXB0eUxpbmUocGFyYW1zKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChsaW5lWzBdID09PSBcIiFcIikge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKHN0YXRlLmN1cnJlbnRBcmVhID09PSBudWxsKSB7XHJcbiAgICBhd2FpdCBwcm9jZXNzRmlyc3RTY2hvb2xMaW5lKHBhcmFtcyk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAoc3RhdGUuc2Nob29sc0NvbXBsZXRlZCA9PT0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGZvdW5kTmV4dFNjaG9vbCA9IGF3YWl0IHByb2Nlc3NOZXh0U2Nob29sTGluZShwYXJhbXMpO1xyXG4gICAgaWYgKGZvdW5kTmV4dFNjaG9vbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdGF0ZS5zY2hvb2xzQ29tcGxldGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChpc011bmljaXBhbGl0eVN3aXRjaChsaW5lKSkge1xyXG4gICAgcHJvY2Vzc011bmljaXBhbGl0eVN3aXRjaExpbmUocGFyYW1zKTtcclxuICB9IGVsc2UgaWYgKGlzV2hvbGVNdW5pY2lwYWxpdHkobGluZSkpIHtcclxuICAgIGF3YWl0IHByb2Nlc3NXaG9sZU11bmljaXBhbGl0eUxpbmUocGFyYW1zKTtcclxuICB9IGVsc2UgaWYgKGlzUmVzdFdpdGhOb1N0cmVldE5hbWVMaW5lKGxpbmUpKSB7XHJcbiAgICBzdGF0ZS5yZXN0cy5ub1N0cmVldE5hbWVBcmVhID0ge1xyXG4gICAgICBhcmVhSW5kZXg6IHN0YXRlLmN1cnJlbnRBcmVhLmluZGV4LFxyXG4gICAgICBsaW5lTnVtYmVyLFxyXG4gICAgfTtcclxuICB9IGVsc2UgaWYgKGlzUmVzdE9mTXVuaWNpcGFsaXR5TGluZShsaW5lKSkge1xyXG4gICAgc3RhdGUucmVzdHMud2hvbGVNdW5pY2lwYWxpdHlBcmVhID0ge1xyXG4gICAgICBhcmVhSW5kZXg6IHN0YXRlLmN1cnJlbnRBcmVhLmluZGV4LFxyXG4gICAgICBsaW5lTnVtYmVyLFxyXG4gICAgfTtcclxuICB9IGVsc2UgaWYgKGlzUmVzdE9mTXVuaWNpcGFsaXR5UGFydExpbmUobGluZSkpIHtcclxuICAgIGNvbnN0IHsgbXVuaWNpcGFsaXR5UGFydENvZGUsIGVycm9ycyB9ID0gYXdhaXQgZ2V0UmVzdE9mTXVuaWNpcGFsaXR5UGFydChcclxuICAgICAgbGluZSxcclxuICAgICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyXHJcbiAgICApO1xyXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHBhcmFtcy5vbkVycm9yKHsgbGluZU51bWJlcjogbGluZU51bWJlciwgbGluZSwgZXJyb3JzIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3RhdGUucmVzdHMubXVuaWNpcGFsaXR5UGFydHMucHVzaCh7XHJcbiAgICAgICAgbXVuaWNpcGFsaXR5UGFydENvZGUsXHJcbiAgICAgICAgYXJlYUluZGV4OiBzdGF0ZS5jdXJyZW50QXJlYS5pbmRleCxcclxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgYXdhaXQgcHJvY2Vzc0FkZHJlc3NQb2ludExpbmUocGFyYW1zKTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBwcm9jZXNzTXVuaWNpcGFsaXR5TGluZSA9IGFzeW5jICh7XHJcbiAgbGluZSxcclxuICBsaW5lTnVtYmVyLFxyXG4gIHN0YXRlLFxyXG4gIG9uRXJyb3IsXHJcbn06IFByb2Nlc3NMaW5lUGFyYW1zKSA9PiB7XHJcbiAgaWYgKHN0YXRlLmN1cnJlbnRBcmVhICE9PSBudWxsKSB7XHJcbiAgICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmFyZWFzLnB1c2goc3RhdGUuY3VycmVudEFyZWEpO1xyXG4gIH1cclxuXHJcbiAgYXdhaXQgY29tcGxldGVDdXJyZW50TXVuaWNpcGFsaXR5KHN0YXRlKTtcclxuXHJcbiAgY29uc3QgeyBtdW5pY2lwYWxpdHksIGVycm9ycyB9ID0gYXdhaXQgZ2V0TmV3TXVuaWNpcGFsaXR5QnlOYW1lKGxpbmUpO1xyXG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgb25FcnJvcih7IGxpbmVOdW1iZXIsIGxpbmUsIGVycm9ycyB9KTtcclxuICB9XHJcbiAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eSA9IG11bmljaXBhbGl0eTtcclxuICBzdGF0ZS5jdXJyZW50RmlsdGVyTXVuaWNpcGFsaXR5ID0gZm91bmRlclRvTXVuaWNpcGFsaXR5KFxyXG4gICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyXHJcbiAgKTtcclxuXHJcbiAgc3RhdGUuY3VycmVudEFyZWEgPSBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgY29tcGxldGVDdXJyZW50TXVuaWNpcGFsaXR5ID0gYXN5bmMgKHN0YXRlOiBTbWRTdGF0ZSkgPT4ge1xyXG4gIGlmIChzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5ICE9PSBudWxsKSB7XHJcbiAgICBhd2FpdCBhZGRSZXN0cyhzdGF0ZSk7XHJcbiAgICBzdGF0ZS5tdW5pY2lwYWxpdGllcy5wdXNoKGNvbnZlcnRNdW5pY2lwYWxpdHkoc3RhdGUuY3VycmVudE11bmljaXBhbGl0eSkpO1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IHByb2Nlc3NFbXB0eUxpbmUgPSAoeyBzdGF0ZSB9OiBQcm9jZXNzTGluZVBhcmFtcykgPT4ge1xyXG4gIGlmIChzdGF0ZS5jdXJyZW50QXJlYSAhPT0gbnVsbCkge1xyXG4gICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5hcmVhcy5wdXNoKHN0YXRlLmN1cnJlbnRBcmVhKTtcclxuICAgIHN0YXRlLmN1cnJlbnRBcmVhID0gbnVsbDtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBwcm9jZXNzRmlyc3RTY2hvb2xMaW5lID0gYXN5bmMgKHtcclxuICBsaW5lLFxyXG4gIGxpbmVOdW1iZXIsXHJcbiAgc3RhdGUsXHJcbiAgb25FcnJvcixcclxufTogUHJvY2Vzc0xpbmVQYXJhbXMpID0+IHtcclxuICBpZiAoc3RhdGUuY3VycmVudE11bmljaXBhbGl0eSA9PT0gbnVsbCkge1xyXG4gICAgb25FcnJvcih7XHJcbiAgICAgIGxpbmVOdW1iZXIsXHJcbiAgICAgIGxpbmUsXHJcbiAgICAgIGVycm9yczogW1xyXG4gICAgICAgIHdob2xlTGluZUVycm9yKFxyXG4gICAgICAgICAgXCJEZWZpbmljaSDFoWtvbHkgbXVzw60gcMWZZWRjaMOhemV0IGRlZmluaWNlIHrFmWl6b3ZhdGVsZSAodXZvemVuw6EgJyMnLCBuYXDFmS4gJyMgU3RyYWtvbmljZScpLlwiLFxyXG4gICAgICAgICAgbGluZVxyXG4gICAgICAgICksXHJcbiAgICAgIF0sXHJcbiAgICB9KTtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgc3RhdGUuY3VycmVudEFyZWEgPSB7XHJcbiAgICBpbmRleDogc3RhdGUuYXJlYUNvdW50KyssXHJcbiAgICBzY2hvb2xzOiBbXHJcbiAgICAgIGF3YWl0IGdldE5ld1NjaG9vbCh7XHJcbiAgICAgICAgbmFtZTogbGluZSxcclxuICAgICAgICBmb3VuZGVyOiBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmZvdW5kZXIsXHJcbiAgICAgICAgbGluZU51bWJlcixcclxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICB9KSxcclxuICAgIF0sXHJcbiAgICBhZGRyZXNzZXM6IFtdLFxyXG4gICAgYWRkcmVzc01hcDogbmV3IE1hcDxudW1iZXIsIEV4cG9ydEFkZHJlc3NQb2ludD4oKSxcclxuICAgIGFsbFNjaG9vbHNBZGRlZDogZmFsc2UsXHJcbiAgfTtcclxuICBzdGF0ZS5zY2hvb2xzQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgc3RhdGUuY3VycmVudEZpbHRlck11bmljaXBhbGl0eSA9IGZvdW5kZXJUb011bmljaXBhbGl0eShcclxuICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlclxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBwcm9jZXNzTmV4dFNjaG9vbExpbmUgPSBhc3luYyAoe1xyXG4gIGxpbmUsXHJcbiAgbGluZU51bWJlcixcclxuICBzdGF0ZSxcclxufTogUHJvY2Vzc0xpbmVQYXJhbXMpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcclxuICBjb25zdCBzY2hvb2wgPSBhd2FpdCBnZXROZXdTY2hvb2woe1xyXG4gICAgbmFtZTogbGluZSxcclxuICAgIGZvdW5kZXI6IHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlcixcclxuICAgIGxpbmVOdW1iZXIsXHJcbiAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICBvbkVycm9yOiAoKSA9PiB7fSxcclxuICB9KTtcclxuXHJcbiAgaWYgKHNjaG9vbCA9PT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc3RhdGUuY3VycmVudEFyZWEuc2Nob29scy5wdXNoKHNjaG9vbCk7XHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5jb25zdCBwcm9jZXNzTXVuaWNpcGFsaXR5U3dpdGNoTGluZSA9IGFzeW5jICh7XHJcbiAgbGluZSxcclxuICBzdGF0ZSxcclxuICBsaW5lTnVtYmVyLFxyXG4gIG9uRXJyb3IsXHJcbn06IFByb2Nlc3NMaW5lUGFyYW1zKSA9PiB7XHJcbiAgY29uc3QgeyBtdW5pY2lwYWxpdHksIGVycm9ycyB9ID0gYXdhaXQgZ2V0U3dpdGNoTXVuaWNpcGFsaXR5KFxyXG4gICAgbGluZSxcclxuICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlclxyXG4gICk7XHJcbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICBvbkVycm9yKHsgbGluZU51bWJlciwgbGluZSwgZXJyb3JzIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBzdGF0ZS5jdXJyZW50RmlsdGVyTXVuaWNpcGFsaXR5ID0gbXVuaWNpcGFsaXR5O1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IHByb2Nlc3NXaG9sZU11bmljaXBhbGl0eUxpbmUgPSBhc3luYyAoe1xyXG4gIGxpbmUsXHJcbiAgc3RhdGUsXHJcbiAgbGluZU51bWJlcixcclxuICBvbkVycm9yLFxyXG59OiBQcm9jZXNzTGluZVBhcmFtcykgPT4ge1xyXG4gIGNvbnN0IHsgbXVuaWNpcGFsaXR5LCBlcnJvcnMgfSA9IGF3YWl0IGdldFdob2xlTXVuaWNpcGFsaXR5KFxyXG4gICAgbGluZSxcclxuICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlclxyXG4gICk7XHJcbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICBvbkVycm9yKHsgbGluZU51bWJlciwgbGluZSwgZXJyb3JzIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAobXVuaWNpcGFsaXR5LnR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eSkge1xyXG4gICAgICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmNpdHlDb2Rlcy5wdXNoKG11bmljaXBhbGl0eS5jb2RlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZGlzdHJpY3RDb2Rlcy5wdXNoKG11bmljaXBhbGl0eS5jb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhZGRyZXNzUG9pbnRzID0gYXdhaXQgZmluZEFkZHJlc3NQb2ludHMoe1xyXG4gICAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5XCIsXHJcbiAgICAgIG11bmljaXBhbGl0eSxcclxuICAgIH0pO1xyXG4gICAgYWRkQWRkcmVzc1BvaW50c1RvQXJlYShzdGF0ZS5jdXJyZW50QXJlYSwgYWRkcmVzc1BvaW50cywgbGluZU51bWJlcik7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgYWRkQWRkcmVzc1BvaW50c1RvQXJlYSA9IChcclxuICBhcmVhOiBJbnRlcm1lZGlhdGVBcmVhLFxyXG4gIGFkZHJlc3NQb2ludHM6IEFkZHJlc3NQb2ludFtdLFxyXG4gIGxpbmVOdW1iZXI6IG51bWJlcixcclxuICBtdW5pY2lwYWxpdHlDb2RlPzogbnVtYmVyXHJcbikgPT4ge1xyXG4gIGZvciAoY29uc3QgcG9pbnQgb2YgYWRkcmVzc1BvaW50cykge1xyXG4gICAgaWYgKGFyZWEuYWRkcmVzc01hcC5oYXMocG9pbnQuaWQpKSB7XHJcbiAgICAgIGFyZWEuYWRkcmVzc01hcC5nZXQocG9pbnQuaWQpLmxpbmVOdW1iZXJzLnB1c2gobGluZU51bWJlciAtIDEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXJlYS5hZGRyZXNzTWFwLnNldChcclxuICAgICAgICBwb2ludC5pZCxcclxuICAgICAgICBtYXBBZGRyZXNzUG9pbnRGb3JFeHBvcnQocG9pbnQsIGxpbmVOdW1iZXIsIG11bmljaXBhbGl0eUNvZGUpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgcHJvY2Vzc0FkZHJlc3NQb2ludExpbmUgPSBhc3luYyAoe1xyXG4gIGxpbmUsXHJcbiAgc3RhdGUsXHJcbiAgbGluZU51bWJlcixcclxuICBvbkVycm9yLFxyXG4gIG9uV2FybmluZyxcclxufTogUHJvY2Vzc0xpbmVQYXJhbXMpID0+IHtcclxuICBjb25zdCB7IHNtZExpbmVzLCBlcnJvcnMgfSA9IHBhcnNlTGluZShsaW5lKTtcclxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgIG9uRXJyb3IoeyBsaW5lTnVtYmVyLCBsaW5lLCBlcnJvcnMgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGZvciAoY29uc3Qgc21kTGluZSBvZiBzbWRMaW5lcykge1xyXG4gICAgICBpZiAoc21kTGluZS50eXBlID09PSBcInN0cmVldFwiKSB7XHJcbiAgICAgICAgY29uc3QgeyBleGlzdHMsIGVycm9ycyB9ID0gYXdhaXQgY2hlY2tTdHJlZXRFeGlzdHMoXHJcbiAgICAgICAgICBzbWRMaW5lLnN0cmVldCxcclxuICAgICAgICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBvbldhcm5pbmcoeyBsaW5lTnVtYmVyLCBsaW5lLCBlcnJvcnMgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleGlzdHMpIHtcclxuICAgICAgICAgIGNvbnN0IGFkZHJlc3NQb2ludHMgPSBhd2FpdCBmaW5kQWRkcmVzc1BvaW50cyh7XHJcbiAgICAgICAgICAgIHR5cGU6IFwic21kTGluZVwiLFxyXG4gICAgICAgICAgICBzbWRMaW5lLFxyXG4gICAgICAgICAgICBtdW5pY2lwYWxpdHk6IHN0YXRlLmN1cnJlbnRGaWx0ZXJNdW5pY2lwYWxpdHksXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBhZGRBZGRyZXNzUG9pbnRzVG9BcmVhKFxyXG4gICAgICAgICAgICBzdGF0ZS5jdXJyZW50QXJlYSxcclxuICAgICAgICAgICAgYWRkcmVzc1BvaW50cyxcclxuICAgICAgICAgICAgbGluZU51bWJlcixcclxuICAgICAgICAgICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5jb2RlICE9PVxyXG4gICAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRGaWx0ZXJNdW5pY2lwYWxpdHkuY29kZVxyXG4gICAgICAgICAgICAgID8gc3RhdGUuY3VycmVudEZpbHRlck11bmljaXBhbGl0eS5jb2RlXHJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHNtZExpbmUudHlwZSA9PT0gXCJtdW5pY2lwYWxpdHlQYXJ0XCIpIHtcclxuICAgICAgICBjb25zdCB7IG11bmljaXBhbGl0eVBhcnRDb2RlLCBlcnJvcnMgfSA9XHJcbiAgICAgICAgICBhd2FpdCBnZXRNdW5pY2lwYWxpdHlQYXJ0UmVzdWx0KFxyXG4gICAgICAgICAgICBzbWRMaW5lLm11bmljaXBhbGl0eVBhcnQsXHJcbiAgICAgICAgICAgIGxpbmUsXHJcbiAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIG9uV2FybmluZyh7IGxpbmVOdW1iZXIsIGxpbmUsIGVycm9ycyB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgYWRkcmVzc1BvaW50cyA9IGF3YWl0IGZpbmRBZGRyZXNzUG9pbnRzKHtcclxuICAgICAgICAgICAgdHlwZTogXCJzbWRMaW5lXCIsXHJcbiAgICAgICAgICAgIHNtZExpbmUsXHJcbiAgICAgICAgICAgIG11bmljaXBhbGl0eTogc3RhdGUuY3VycmVudEZpbHRlck11bmljaXBhbGl0eSxcclxuICAgICAgICAgICAgbXVuaWNpcGFsaXR5UGFydENvZGUsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBhZGRBZGRyZXNzUG9pbnRzVG9BcmVhKHN0YXRlLmN1cnJlbnRBcmVhLCBhZGRyZXNzUG9pbnRzLCBsaW5lTnVtYmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0VG9BcmVhID0gKFxyXG4gIHJlc3RQb2ludHM6IEFkZHJlc3NQb2ludFtdLFxyXG4gIGFyZWFJbmRleDogbnVtYmVyLFxyXG4gIGxpbmVOdW1iZXI6IG51bWJlcixcclxuICBzdGF0ZTogU21kU3RhdGVcclxuKSA9PiB7XHJcbiAgY29uc3QgYWRkcmVzc1BvaW50c0lkcyA9IGdldEFsbEFkZHJlc3NQb2ludHNJZHMoc3RhdGUuY3VycmVudE11bmljaXBhbGl0eSk7XHJcblxyXG4gIC8vIGZpbHRlciBvdXQgYWRkcmVzcyBwb2ludHMgYWxyZWFkeSBwcmVzZW50XHJcbiAgY29uc3QgcmVtYWluaW5nUG9pbnRzID0gcmVzdFBvaW50cy5maWx0ZXIoXHJcbiAgICAocG9pbnQpID0+ICFhZGRyZXNzUG9pbnRzSWRzLmhhcyhwb2ludC5pZClcclxuICApO1xyXG5cclxuICBhZGRBZGRyZXNzUG9pbnRzVG9BcmVhKFxyXG4gICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5hcmVhcy5maW5kKChhcmVhKSA9PiBhcmVhLmluZGV4ID09PSBhcmVhSW5kZXgpLFxyXG4gICAgcmVtYWluaW5nUG9pbnRzLFxyXG4gICAgbGluZU51bWJlclxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0cyA9IGFzeW5jIChzdGF0ZTogU21kU3RhdGUpID0+IHtcclxuICBpZiAoc3RhdGUucmVzdHMubm9TdHJlZXROYW1lQXJlYS5hcmVhSW5kZXggIT09IG51bGwpIHtcclxuICAgIGF3YWl0IGFkZFJlc3RXaXRoTm9TdHJlZXROYW1lVG9TY2hvb2woXHJcbiAgICAgIHN0YXRlLnJlc3RzLm5vU3RyZWV0TmFtZUFyZWEubGluZU51bWJlcixcclxuICAgICAgc3RhdGVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpZiAoc3RhdGUucmVzdHMud2hvbGVNdW5pY2lwYWxpdHlBcmVhLmFyZWFJbmRleCAhPT0gbnVsbCkge1xyXG4gICAgYXdhaXQgYWRkUmVzdE9mTXVuaWNpcGFsaXR5KFxyXG4gICAgICBzdGF0ZS5yZXN0cy53aG9sZU11bmljaXBhbGl0eUFyZWEubGluZU51bWJlcixcclxuICAgICAgc3RhdGVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmb3IgKGNvbnN0IHJlc3Qgb2Ygc3RhdGUucmVzdHMubXVuaWNpcGFsaXR5UGFydHMpIHtcclxuICAgIGF3YWl0IGFkZFJlc3RPZk11bmljaXBhbGl0eVBhcnQoXHJcbiAgICAgIHN0YXRlLFxyXG4gICAgICByZXN0Lm11bmljaXBhbGl0eVBhcnRDb2RlLFxyXG4gICAgICByZXN0LmFyZWFJbmRleCxcclxuICAgICAgcmVzdC5saW5lTnVtYmVyXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaWYgKHN0YXRlLnJlc3RzLmluY2x1ZGVVbm1hcHBlZEFkZHJlc3NQb2ludHMpIHtcclxuICAgIGF3YWl0IGFkZFJlc3RPZk11bmljaXBhbGl0eVRvVW5tYXBwZWRQb2ludHMoc3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGUucmVzdHMubm9TdHJlZXROYW1lQXJlYS5hcmVhSW5kZXggPSBudWxsO1xyXG4gIHN0YXRlLnJlc3RzLndob2xlTXVuaWNpcGFsaXR5QXJlYS5hcmVhSW5kZXggPSBudWxsO1xyXG4gIHN0YXRlLnJlc3RzLm11bmljaXBhbGl0eVBhcnRzID0gW107XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0V2l0aE5vU3RyZWV0TmFtZVRvU2Nob29sID0gYXN5bmMgKFxyXG4gIGxpbmVOdW1iZXI6IG51bWJlcixcclxuICBzdGF0ZTogU21kU3RhdGVcclxuKSA9PiB7XHJcbiAgLy8gZ2V0IGFsbCBhZGRyZXNzIHBvaW50cyB3aXRob3V0IHN0cmVldCBuYW1lIGZvciBjdXJyZW50IG11bmljaXBhbGl0eVxyXG4gIGNvbnN0IHBvaW50c05vU3RyZWV0TmFtZSA9IGF3YWl0IGZpbmRBZGRyZXNzUG9pbnRzKHtcclxuICAgIHR5cGU6IFwid2hvbGVNdW5pY2lwYWxpdHlOb1N0cmVldE5hbWVcIixcclxuICAgIG11bmljaXBhbGl0eToge1xyXG4gICAgICBjb2RlOiBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZSxcclxuICAgICAgdHlwZTogc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyLm11bmljaXBhbGl0eVR5cGUsXHJcbiAgICB9LFxyXG4gIH0pO1xyXG4gIGFkZFJlc3RUb0FyZWEoXHJcbiAgICBwb2ludHNOb1N0cmVldE5hbWUsXHJcbiAgICBzdGF0ZS5yZXN0cy5ub1N0cmVldE5hbWVBcmVhLmFyZWFJbmRleCxcclxuICAgIGxpbmVOdW1iZXIsXHJcbiAgICBzdGF0ZVxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0T2ZNdW5pY2lwYWxpdHkgPSBhc3luYyAobGluZU51bWJlcjogbnVtYmVyLCBzdGF0ZTogU21kU3RhdGUpID0+IHtcclxuICBhZGRSZXN0VG9BcmVhKFxyXG4gICAgYXdhaXQgZ2V0UmVzdE9mTXVuaWNpcGFsaXR5KHN0YXRlKSxcclxuICAgIHN0YXRlLnJlc3RzLndob2xlTXVuaWNpcGFsaXR5QXJlYS5hcmVhSW5kZXgsXHJcbiAgICBsaW5lTnVtYmVyLFxyXG4gICAgc3RhdGVcclxuICApO1xyXG59O1xyXG5cclxuY29uc3QgYWRkUmVzdE9mTXVuaWNpcGFsaXR5VG9Vbm1hcHBlZFBvaW50cyA9IGFzeW5jIChzdGF0ZTogU21kU3RhdGUpID0+IHtcclxuICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LnVubWFwcGVkUG9pbnRzID0gKFxyXG4gICAgYXdhaXQgZ2V0UmVzdE9mTXVuaWNpcGFsaXR5KHN0YXRlKVxyXG4gICkubWFwKChwb2ludCkgPT4gbWFwQWRkcmVzc1BvaW50Rm9yRXhwb3J0KHBvaW50KSk7XHJcbn07XHJcblxyXG5jb25zdCBnZXRSZXN0T2ZNdW5pY2lwYWxpdHkgPSBhc3luYyAoXHJcbiAgc3RhdGU6IFNtZFN0YXRlXHJcbik6IFByb21pc2U8QWRkcmVzc1BvaW50W10+ID0+IHtcclxuICAvLyBnZXQgYWxsIGFkZHJlc3MgcG9pbnRzIGZvciBjdXJyZW50IG11bmljaXBhbGl0eVxyXG4gIGNvbnN0IGFsbFBvaW50cyA9IGF3YWl0IGZpbmRBZGRyZXNzUG9pbnRzKHtcclxuICAgIHR5cGU6IFwid2hvbGVNdW5pY2lwYWxpdHlcIixcclxuICAgIG11bmljaXBhbGl0eToge1xyXG4gICAgICBjb2RlOiBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZSxcclxuICAgICAgdHlwZTogc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyLm11bmljaXBhbGl0eVR5cGUsXHJcbiAgICB9LFxyXG4gIH0pO1xyXG5cclxuICAvLyBmaWx0ZXIgb3V0IGFkZHJlc3MgcG9pbnRzIGFscmVhZHkgcHJlc2VudFxyXG4gIGNvbnN0IGFkZHJlc3NQb2ludHNJZHMgPSBnZXRBbGxBZGRyZXNzUG9pbnRzSWRzKHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkpO1xyXG4gIHJldHVybiBhbGxQb2ludHMuZmlsdGVyKChwb2ludCkgPT4gIWFkZHJlc3NQb2ludHNJZHMuaGFzKHBvaW50LmlkKSk7XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0T2ZNdW5pY2lwYWxpdHlQYXJ0ID0gYXN5bmMgKFxyXG4gIHN0YXRlOiBTbWRTdGF0ZSxcclxuICBtdW5pY2lwYWxpdHlQYXJ0Q29kZTogbnVtYmVyLFxyXG4gIGFyZWFJbmRleDogbnVtYmVyLFxyXG4gIGxpbmVOdW1iZXI6IG51bWJlclxyXG4pID0+IHtcclxuICBjb25zdCBhbGxQb2ludHMgPSBhd2FpdCBmaW5kQWRkcmVzc1BvaW50cyh7XHJcbiAgICB0eXBlOiBcIndob2xlTXVuaWNpcGFsaXR5UGFydFwiLFxyXG4gICAgbXVuaWNpcGFsaXR5UGFydENvZGUsXHJcbiAgfSk7XHJcbiAgYWRkUmVzdFRvQXJlYShhbGxQb2ludHMsIGFyZWFJbmRleCwgbGluZU51bWJlciwgc3RhdGUpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldE5ld011bmljaXBhbGl0eUJ5TmFtZSA9IGFzeW5jIChcclxuICBuYW1lOiBzdHJpbmdcclxuKTogUHJvbWlzZTxJbnRlcm1lZGlhdGVNdW5pY2lwYWxpdHlSZXN1bHQ+ID0+IHtcclxuICBjb25zdCB7IGZvdW5kZXIsIGVycm9ycyB9ID0gYXdhaXQgZmluZEZvdW5kZXIobmFtZSk7XHJcbiAgcmV0dXJuIGdldE5ld011bmljaXBhbGl0eShmb3VuZGVyLCBlcnJvcnMpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldE5ld011bmljaXBhbGl0eUJ5Rm91bmRlcklkID0gYXN5bmMgKFxyXG4gIGZvdW5kZXJJZDogbnVtYmVyXHJcbik6IFByb21pc2U8SW50ZXJtZWRpYXRlTXVuaWNpcGFsaXR5UmVzdWx0PiA9PiB7XHJcbiAgY29uc3QgeyBmb3VuZGVyLCBlcnJvcnMgfSA9IGF3YWl0IGdldEZvdW5kZXJCeUlkKGZvdW5kZXJJZCk7XHJcbiAgcmV0dXJuIGdldE5ld011bmljaXBhbGl0eShmb3VuZGVyLCBlcnJvcnMpO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0TmV3TXVuaWNpcGFsaXR5ID0gKFxyXG4gIGZvdW5kZXI6IEZvdW5kZXIsXHJcbiAgZXJyb3JzOiBTbWRFcnJvcltdXHJcbik6IEludGVybWVkaWF0ZU11bmljaXBhbGl0eVJlc3VsdCA9PiAoe1xyXG4gIG11bmljaXBhbGl0eToge1xyXG4gICAgbXVuaWNpcGFsaXR5TmFtZTogZm91bmRlciA/IGZvdW5kZXIubmFtZSA6IFwiTmV6bsOhbcOhIG9iZWNcIixcclxuICAgIGZvdW5kZXIsXHJcbiAgICBhcmVhczogW10sXHJcbiAgICBjb2RlOiBmb3VuZGVyID8gZm91bmRlci5tdW5pY2lwYWxpdHlDb2RlIDogMCxcclxuICAgIG11bmljaXBhbGl0eVR5cGU6XHJcbiAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5ID8gXCJjaXR5XCIgOiBcImRpc3RyaWN0XCIsXHJcbiAgICBjaXR5Q29kZXM6XHJcbiAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5XHJcbiAgICAgICAgPyBbZm91bmRlci5tdW5pY2lwYWxpdHlDb2RlXVxyXG4gICAgICAgIDogW10sXHJcbiAgICBkaXN0cmljdENvZGVzOlxyXG4gICAgICBmb3VuZGVyLm11bmljaXBhbGl0eVR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuRGlzdHJpY3RcclxuICAgICAgICA/IFtmb3VuZGVyLm11bmljaXBhbGl0eUNvZGVdXHJcbiAgICAgICAgOiBbXSxcclxuICAgIHVubWFwcGVkUG9pbnRzOiBbXSxcclxuICB9LFxyXG4gIGVycm9ycyxcclxufSk7XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0TmV3U2Nob29sID0gYXN5bmMgKHtcclxuICBuYW1lLFxyXG4gIGZvdW5kZXIsXHJcbiAgbGluZU51bWJlcixcclxuICByZXF1aXJlZCxcclxuICBvbkVycm9yLFxyXG59OiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGZvdW5kZXI6IEZvdW5kZXIgfCBudWxsO1xyXG4gIGxpbmVOdW1iZXI6IG51bWJlcjtcclxuICByZXF1aXJlZDogYm9vbGVhbjtcclxuICBvbkVycm9yOiAocGFyYW1zOiBFcnJvckNhbGxiYWNrUGFyYW1zKSA9PiB2b2lkO1xyXG59KTogUHJvbWlzZTxJbnRlcm1lZGlhdGVTY2hvb2wgfCBudWxsPiA9PiB7XHJcbiAgbGV0IGV4cG9ydFNjaG9vbDogU2Nob29sID0ge1xyXG4gICAgbmFtZSxcclxuICAgIGl6bzogXCJcIixcclxuICB9O1xyXG4gIGlmIChmb3VuZGVyICE9PSBudWxsKSB7XHJcbiAgICBjb25zdCB7IHNjaG9vbCwgZXJyb3JzIH0gPSBmaW5kU2Nob29sKFxyXG4gICAgICBuYW1lLFxyXG4gICAgICBmb3VuZGVyLnNjaG9vbHMsXHJcbiAgICAgIHJlcXVpcmVkID8gdW5kZWZpbmVkIDogMTVcclxuICAgICk7XHJcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgb25FcnJvcih7IGxpbmVOdW1iZXIsIGxpbmU6IG5hbWUsIGVycm9ycyB9KTtcclxuICAgIH1cclxuICAgIGlmIChzY2hvb2wpIHtcclxuICAgICAgZXhwb3J0U2Nob29sLm5hbWUgPSBzY2hvb2wubmFtZTtcclxuICAgICAgZXhwb3J0U2Nob29sLml6byA9IHNjaG9vbC5pem8gfHwgXCJcIjtcclxuICAgICAgaWYgKHNjaG9vbC5sb2NhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gYXdhaXQgZ2V0QWRkcmVzc1BvaW50QnlJZChcclxuICAgICAgICAgIHNjaG9vbC5sb2NhdGlvbnNbMF0uYWRkcmVzc1BvaW50SWRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgZXhwb3J0U2Nob29sLnBvc2l0aW9uID0gbWFwQWRkcmVzc1BvaW50Rm9yRXhwb3J0KHBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4geyAuLi5leHBvcnRTY2hvb2wsIGFkZHJlc3NNYXA6IG5ldyBNYXA8bnVtYmVyLCBFeHBvcnRBZGRyZXNzUG9pbnQ+KCkgfTtcclxufTtcclxuXHJcbmNvbnN0IGdldEFsbEFkZHJlc3NQb2ludHNJZHMgPSAoXHJcbiAgbXVuaWNpcGFsaXR5OiBJbnRlcm1lZGlhdGVNdW5pY2lwYWxpdHlcclxuKTogU2V0PG51bWJlcj4gPT4ge1xyXG4gIGNvbnN0IGFkZHJlc3NQb2ludHNJZHMgPSBuZXcgU2V0PG51bWJlcj4oKTtcclxuXHJcbiAgZm9yIChjb25zdCBhcmVhIG9mIG11bmljaXBhbGl0eS5hcmVhcykge1xyXG4gICAgZm9yIChjb25zdCBpZCBvZiBhcmVhLmFkZHJlc3NNYXAua2V5cygpKSB7XHJcbiAgICAgIGFkZHJlc3NQb2ludHNJZHMuYWRkKGlkKTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGFkZHJlc3NQb2ludHNJZHM7XHJcbn07XHJcblxyXG5jb25zdCBtYXBBZGRyZXNzUG9pbnRGb3JFeHBvcnQgPSAoXHJcbiAgYWRkcmVzc1BvaW50OiBBZGRyZXNzUG9pbnQgfCBFeHBvcnRBZGRyZXNzUG9pbnQsXHJcbiAgbGluZU51bWJlcj86IG51bWJlcixcclxuICBtdW5pY2lwYWxpdHlDb2RlPzogbnVtYmVyXHJcbik6IEV4cG9ydEFkZHJlc3NQb2ludCA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGFkZHJlc3M6IGFkZHJlc3NQb2ludC5hZGRyZXNzLFxyXG4gICAgbGF0OiByb3VuZFRvTkRlY2ltYWxQbGFjZXMoYWRkcmVzc1BvaW50LmxhdCwgNiksXHJcbiAgICBsbmc6IHJvdW5kVG9ORGVjaW1hbFBsYWNlcyhhZGRyZXNzUG9pbnQubG5nLCA2KSxcclxuICAgIC4uLihsaW5lTnVtYmVyICE9PSB1bmRlZmluZWQgPyB7IGxpbmVOdW1iZXJzOiBbbGluZU51bWJlciAtIDFdIH0gOiB7fSksXHJcbiAgICAuLi4obXVuaWNpcGFsaXR5Q29kZSAhPT0gdW5kZWZpbmVkID8geyBtdW5pY2lwYWxpdHlDb2RlIH0gOiB7fSksXHJcbiAgfTtcclxufTtcclxuXHJcbmNvbnN0IG1hcEFyZWFGb3JFeHBvcnQgPSAoYXJlYTogSW50ZXJtZWRpYXRlQXJlYSk6IEludGVybWVkaWF0ZUFyZWEgPT4gKHtcclxuICAuLi5hcmVhLFxyXG4gIHNjaG9vbHM6IGFyZWEuc2Nob29scy5tYXAoKHNjaG9vbCkgPT4gKHtcclxuICAgIC4uLnNjaG9vbCxcclxuICAgIHBvc2l0aW9uOiBzY2hvb2wucG9zaXRpb25cclxuICAgICAgPyBtYXBBZGRyZXNzUG9pbnRGb3JFeHBvcnQoc2Nob29sLnBvc2l0aW9uKVxyXG4gICAgICA6IG51bGwsXHJcbiAgfSkpLFxyXG59KTtcclxuXHJcbmNvbnN0IGNsZWFuTGluZSA9IChsaW5lOiBzdHJpbmcpID0+IHtcclxuICByZXR1cm4gbGluZS50cmltKCkucmVwbGFjZSgv4oCTL2csIFwiLVwiKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCB3aG9sZUxpbmVFcnJvciA9IChtZXNzYWdlOiBzdHJpbmcsIGxpbmU6IHN0cmluZyk6IFNtZEVycm9yID0+ICh7XHJcbiAgbWVzc2FnZSxcclxuICBzdGFydE9mZnNldDogMCxcclxuICBlbmRPZmZzZXQ6IGxpbmUubGVuZ3RoICsgMSxcclxufSk7XHJcblxyXG5jb25zdCByb3VuZFRvTkRlY2ltYWxQbGFjZXMgPSAoXHJcbiAgdG9Sb3VuZDogbnVtYmVyLFxyXG4gIGRlY2ltYWxQbGFjZXM6IG51bWJlclxyXG4pOiBudW1iZXIgPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICBNYXRoLnJvdW5kKHRvUm91bmQgKiBNYXRoLnBvdygxMCwgZGVjaW1hbFBsYWNlcykpIC9cclxuICAgIE1hdGgucG93KDEwLCBkZWNpbWFsUGxhY2VzKVxyXG4gICk7XHJcbn07XHJcbiJdfQ==
|
|
439
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVldC1tYXJrZG93bi9zbWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsbUJBQW1CLEdBQ3BCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFXLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9FLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLHdCQUF3QixFQUN4Qiw0QkFBNEIsRUFDNUIsMEJBQTBCLEVBQzFCLG1CQUFtQixHQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQTBCOUMsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsS0FBSyxFQUFFLEVBQ2xELEtBQUssRUFDTCxZQUFZLEdBQUcsRUFBRSxFQUNqQixPQUFPLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUNsQixTQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUNwQixlQUFlLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUMxQiw0QkFBNEIsR0FBRyxLQUFLLEdBQ2hCLEVBQTJCLEVBQUU7SUFDakQsSUFBSTtRQUNGLE1BQU0sS0FBSyxHQUFhO1lBQ3RCLG1CQUFtQixFQUFFLElBQUk7WUFDekIseUJBQXlCLEVBQUUsSUFBSTtZQUMvQixXQUFXLEVBQUUsSUFBSTtZQUNqQixnQkFB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LENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFlLEVBQUUsSUFBWSxFQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLE9BQU87SUFDUCxXQUFXLEVBQUUsQ0FBQztJQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7Q0FDM0IsQ0FBQyxDQUFDO0FBRUgsTUFBTSxxQkFBcUIsR0FBRyxDQUM1QixPQUFlLEVBQ2YsYUFBcUIsRUFDYixFQUFFO0lBQ1YsT0FBTyxDQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUM1QixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBjaGVja1N0cmVldEV4aXN0cyxcclxuICBmaW5kQWRkcmVzc1BvaW50cyxcclxuICBnZXRBZGRyZXNzUG9pbnRCeUlkLFxyXG59IGZyb20gXCIuLi9kYi9hZGRyZXNzLXBvaW50c1wiO1xyXG5pbXBvcnQgeyBkaXNjb25uZWN0S25leCB9IGZyb20gXCIuLi9kYi9kYlwiO1xyXG5pbXBvcnQgeyBmaW5kRm91bmRlciwgZ2V0Rm91bmRlckJ5SWQgfSBmcm9tIFwiLi4vZGIvZm91bmRlcnNcIjtcclxuaW1wb3J0IHsgZmluZFNjaG9vbCB9IGZyb20gXCIuLi9kYi9zY2hvb2xzXCI7XHJcbmltcG9ydCB7IEZvdW5kZXIsIE11bmljaXBhbGl0eVR5cGUsIGZvdW5kZXJUb011bmljaXBhbGl0eSB9IGZyb20gXCIuLi9kYi90eXBlc1wiO1xyXG5pbXBvcnQge1xyXG4gIGdldE11bmljaXBhbGl0eVBhcnRSZXN1bHQsXHJcbiAgZ2V0UmVzdE9mTXVuaWNpcGFsaXR5UGFydCxcclxuICBnZXRTd2l0Y2hNdW5pY2lwYWxpdHksXHJcbiAgZ2V0V2hvbGVNdW5pY2lwYWxpdHksXHJcbiAgaXNNdW5pY2lwYWxpdHlTd2l0Y2gsXHJcbiAgaXNSZXN0T2ZNdW5pY2lwYWxpdHlMaW5lLFxyXG4gIGlzUmVzdE9mTXVuaWNpcGFsaXR5UGFydExpbmUsXHJcbiAgaXNSZXN0V2l0aE5vU3RyZWV0TmFtZUxpbmUsXHJcbiAgaXNXaG9sZU11bmljaXBhbGl0eSxcclxufSBmcm9tIFwiLi9tdW5pY2lwYWxpdHlcIjtcclxuaW1wb3J0IHsgcGFyc2VMaW5lIH0gZnJvbSBcIi4vc21kLWxpbmUtcGFyc2VyXCI7XHJcbmltcG9ydCB7XHJcbiAgQWRkcmVzc1BvaW50LFxyXG4gIEVycm9yQ2FsbGJhY2tQYXJhbXMsXHJcbiAgRXhwb3J0QWRkcmVzc1BvaW50LFxyXG4gIEludGVybWVkaWF0ZUFyZWEsXHJcbiAgSW50ZXJtZWRpYXRlTXVuaWNpcGFsaXR5LFxyXG4gIEludGVybWVkaWF0ZU11bmljaXBhbGl0eVJlc3VsdCxcclxuICBJbnRlcm1lZGlhdGVTY2hvb2wsXHJcbiAgTXVuaWNpcGFsaXR5LFxyXG4gIFByb2Nlc3NMaW5lQ2FsbGJhY2tQYXJhbXMsXHJcbiAgUHJvY2Vzc0xpbmVQYXJhbXMsXHJcbiAgU2Nob29sLFxyXG4gIFNtZEVycm9yLFxyXG4gIFNtZFN0YXRlLFxyXG59IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5pbnRlcmZhY2UgUGFyc2VPcmRpbmFuY2VQcm9wcyB7XHJcbiAgbGluZXM6IHN0cmluZ1tdO1xyXG4gIGluaXRpYWxTdGF0ZT86IFBhcnRpYWw8U21kU3RhdGU+O1xyXG4gIG9uRXJyb3I/OiAocGFyYW1zOiBFcnJvckNhbGxiYWNrUGFyYW1zKSA9PiB2b2lkO1xyXG4gIG9uV2FybmluZz86IChwYXJhbXM6IEVycm9yQ2FsbGJhY2tQYXJhbXMpID0+IHZvaWQ7XHJcbiAgb25Qcm9jZXNzZWRMaW5lPzogKHBhcmFtczogUHJvY2Vzc0xpbmVDYWxsYmFja1BhcmFtcykgPT4gdm9pZDtcclxuICBpbmNsdWRlVW5tYXBwZWRBZGRyZXNzUG9pbnRzOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgcGFyc2VPcmRpbmFuY2VUb0FkZHJlc3NQb2ludHMgPSBhc3luYyAoe1xyXG4gIGxpbmVzLFxyXG4gIGluaXRpYWxTdGF0ZSA9IHt9LFxyXG4gIG9uRXJyb3IgPSAoKSA9PiB7fSxcclxuICBvbldhcm5pbmcgPSAoKSA9PiB7fSxcclxuICBvblByb2Nlc3NlZExpbmUgPSAoKSA9PiB7fSxcclxuICBpbmNsdWRlVW5tYXBwZWRBZGRyZXNzUG9pbnRzID0gZmFsc2UsXHJcbn06IFBhcnNlT3JkaW5hbmNlUHJvcHMpOiBQcm9taXNlPE11bmljaXBhbGl0eVtdPiA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHN0YXRlOiBTbWRTdGF0ZSA9IHtcclxuICAgICAgY3VycmVudE11bmljaXBhbGl0eTogbnVsbCxcclxuICAgICAgY3VycmVudEZpbHRlck11bmljaXBhbGl0eTogbnVsbCxcclxuICAgICAgY3VycmVudEFyZWE6IG51bGwsXHJcbiAgICAgIHNjaG9vbHNDb21wbGV0ZWQ6IGZhbHNlLFxyXG4gICAgICBhcmVhQ291bnQ6IDAsXHJcbiAgICAgIHJlc3RzOiB7XHJcbiAgICAgICAgbm9TdHJlZXROYW1lQXJlYToge1xyXG4gICAgICAgICAgYXJlYUluZGV4OiBudWxsLFxyXG4gICAgICAgICAgbGluZU51bWJlcjogbnVsbCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIG11bmljaXBhbGl0eVBhcnRzOiBbXSxcclxuICAgICAgICB3aG9sZU11bmljaXBhbGl0eUFyZWE6IHtcclxuICAgICAgICAgIGFyZWFJbmRleDogbnVsbCxcclxuICAgICAgICAgIGxpbmVOdW1iZXI6IG51bGwsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbmNsdWRlVW5tYXBwZWRBZGRyZXNzUG9pbnRzLFxyXG4gICAgICB9LFxyXG4gICAgICBtdW5pY2lwYWxpdGllczogW10sXHJcbiAgICAgIC4uLmluaXRpYWxTdGF0ZSxcclxuICAgIH07XHJcblxyXG4gICAgbGV0IGxpbmVOdW1iZXIgPSAxO1xyXG5cclxuICAgIGZvciAoY29uc3QgcmF3TGluZSBvZiBsaW5lcykge1xyXG4gICAgICBjb25zdCBsaW5lID0gY2xlYW5MaW5lKHJhd0xpbmUpO1xyXG4gICAgICBhd2FpdCBwcm9jZXNzT25lTGluZSh7XHJcbiAgICAgICAgbGluZSxcclxuICAgICAgICByYXdMaW5lOiByYXdMaW5lLnRyaW0oKSxcclxuICAgICAgICBzdGF0ZSxcclxuICAgICAgICBsaW5lTnVtYmVyLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgb25XYXJuaW5nLFxyXG4gICAgICB9KTtcclxuICAgICAgb25Qcm9jZXNzZWRMaW5lKHsgbGluZU51bWJlciwgbGluZSB9KTtcclxuICAgICAgbGluZU51bWJlcisrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdGF0ZS5jdXJyZW50QXJlYSAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5ID09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5hcmVhcy5wdXNoKG1hcEFyZWFGb3JFeHBvcnQoc3RhdGUuY3VycmVudEFyZWEpKTtcclxuICAgIH1cclxuXHJcbiAgICBhd2FpdCBjb21wbGV0ZUN1cnJlbnRNdW5pY2lwYWxpdHkoc3RhdGUpO1xyXG5cclxuICAgIHJldHVybiBzdGF0ZS5tdW5pY2lwYWxpdGllcztcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGF3YWl0IGRpc2Nvbm5lY3RLbmV4KCk7XHJcbiAgfVxyXG4gIHJldHVybiBbXTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBjb252ZXJ0TXVuaWNpcGFsaXR5ID0gKFxyXG4gIG11bmljaXBhbGl0eTogSW50ZXJtZWRpYXRlTXVuaWNpcGFsaXR5XHJcbik6IE11bmljaXBhbGl0eSA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIG11bmljaXBhbGl0eU5hbWU6IG11bmljaXBhbGl0eS5tdW5pY2lwYWxpdHlOYW1lLFxyXG4gICAgYXJlYXM6IG11bmljaXBhbGl0eS5hcmVhcy5tYXAoKGFyZWEpID0+ICh7XHJcbiAgICAgIGluZGV4OiBhcmVhLmluZGV4LFxyXG4gICAgICBzY2hvb2xzOiBhcmVhLnNjaG9vbHMsXHJcbiAgICAgIGFkZHJlc3NlczogQXJyYXkuZnJvbShhcmVhLmFkZHJlc3NNYXAudmFsdWVzKCkpLmZpbHRlcihcclxuICAgICAgICAocG9pbnQpID0+IHBvaW50LmxhdCAhPT0gMCAmJiBwb2ludC5sbmcgIT09IDBcclxuICAgICAgKSxcclxuICAgIH0pKSxcclxuICAgIGNvZGU6IG11bmljaXBhbGl0eS5mb3VuZGVyLm11bmljaXBhbGl0eUNvZGUsXHJcbiAgICBtdW5pY2lwYWxpdHlUeXBlOlxyXG4gICAgICBtdW5pY2lwYWxpdHkuZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcclxuICAgICAgICA/IFwiY2l0eVwiXHJcbiAgICAgICAgOiBcImRpc3RyaWN0XCIsXHJcbiAgICBjaXR5Q29kZXM6IFsuLi5uZXcgU2V0KG11bmljaXBhbGl0eS5jaXR5Q29kZXMpXSxcclxuICAgIGRpc3RyaWN0Q29kZXM6IFsuLi5uZXcgU2V0KG11bmljaXBhbGl0eS5kaXN0cmljdENvZGVzKV0sXHJcbiAgICB1bm1hcHBlZFBvaW50czogbXVuaWNpcGFsaXR5LnVubWFwcGVkUG9pbnRzLmZpbHRlcihcclxuICAgICAgKHBvaW50KSA9PiBwb2ludC5sYXQgIT09IDAgJiYgcG9pbnQubG5nICE9PSAwXHJcbiAgICApLFxyXG4gIH07XHJcbn07XHJcblxyXG5jb25zdCBwcm9jZXNzT25lTGluZSA9IGFzeW5jIChwYXJhbXM6IFByb2Nlc3NMaW5lUGFyYW1zKSA9PiB7XHJcbiAgY29uc3QgeyBsaW5lLCBsaW5lTnVtYmVyLCBzdGF0ZSB9ID0gcGFyYW1zO1xyXG5cclxuICBpZiAobGluZVswXSA9PT0gXCIjXCIpIHtcclxuICAgIGF3YWl0IHByb2Nlc3NNdW5pY2lwYWxpdHlMaW5lKHBhcmFtcyk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAobGluZSA9PT0gXCJcIikge1xyXG4gICAgLy8gZW5kIG9mIHNjaG9vbFxyXG4gICAgcHJvY2Vzc0VtcHR5TGluZShwYXJhbXMpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKGxpbmVbMF0gPT09IFwiIVwiKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAoc3RhdGUuY3VycmVudEFyZWEgPT09IG51bGwpIHtcclxuICAgIGF3YWl0IHByb2Nlc3NGaXJzdFNjaG9vbExpbmUocGFyYW1zKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChzdGF0ZS5zY2hvb2xzQ29tcGxldGVkID09PSBmYWxzZSkge1xyXG4gICAgY29uc3QgZm91bmROZXh0U2Nob29sID0gYXdhaXQgcHJvY2Vzc05leHRTY2hvb2xMaW5lKHBhcmFtcyk7XHJcbiAgICBpZiAoZm91bmROZXh0U2Nob29sKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN0YXRlLnNjaG9vbHNDb21wbGV0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKGlzTXVuaWNpcGFsaXR5U3dpdGNoKGxpbmUpKSB7XHJcbiAgICBwcm9jZXNzTXVuaWNpcGFsaXR5U3dpdGNoTGluZShwYXJhbXMpO1xyXG4gIH0gZWxzZSBpZiAoaXNXaG9sZU11bmljaXBhbGl0eShsaW5lKSkge1xyXG4gICAgYXdhaXQgcHJvY2Vzc1dob2xlTXVuaWNpcGFsaXR5TGluZShwYXJhbXMpO1xyXG4gIH0gZWxzZSBpZiAoaXNSZXN0V2l0aE5vU3RyZWV0TmFtZUxpbmUobGluZSkpIHtcclxuICAgIHN0YXRlLnJlc3RzLm5vU3RyZWV0TmFtZUFyZWEgPSB7XHJcbiAgICAgIGFyZWFJbmRleDogc3RhdGUuY3VycmVudEFyZWEuaW5kZXgsXHJcbiAgICAgIGxpbmVOdW1iZXIsXHJcbiAgICB9O1xyXG4gIH0gZWxzZSBpZiAoaXNSZXN0T2ZNdW5pY2lwYWxpdHlMaW5lKGxpbmUpKSB7XHJcbiAgICBzdGF0ZS5yZXN0cy53aG9sZU11bmljaXBhbGl0eUFyZWEgPSB7XHJcbiAgICAgIGFyZWFJbmRleDogc3RhdGUuY3VycmVudEFyZWEuaW5kZXgsXHJcbiAgICAgIGxpbmVOdW1iZXIsXHJcbiAgICB9O1xyXG4gIH0gZWxzZSBpZiAoaXNSZXN0T2ZNdW5pY2lwYWxpdHlQYXJ0TGluZShsaW5lKSkge1xyXG4gICAgY29uc3QgeyBtdW5pY2lwYWxpdHlQYXJ0Q29kZSwgZXJyb3JzIH0gPSBhd2FpdCBnZXRSZXN0T2ZNdW5pY2lwYWxpdHlQYXJ0KFxyXG4gICAgICBsaW5lLFxyXG4gICAgICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmZvdW5kZXJcclxuICAgICk7XHJcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcGFyYW1zLm9uRXJyb3IoeyBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLCBsaW5lLCBlcnJvcnMgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdGF0ZS5yZXN0cy5tdW5pY2lwYWxpdHlQYXJ0cy5wdXNoKHtcclxuICAgICAgICBtdW5pY2lwYWxpdHlQYXJ0Q29kZSxcclxuICAgICAgICBhcmVhSW5kZXg6IHN0YXRlLmN1cnJlbnRBcmVhLmluZGV4LFxyXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBhd2FpdCBwcm9jZXNzQWRkcmVzc1BvaW50TGluZShwYXJhbXMpO1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IHByb2Nlc3NNdW5pY2lwYWxpdHlMaW5lID0gYXN5bmMgKHtcclxuICBsaW5lLFxyXG4gIGxpbmVOdW1iZXIsXHJcbiAgc3RhdGUsXHJcbiAgb25FcnJvcixcclxufTogUHJvY2Vzc0xpbmVQYXJhbXMpID0+IHtcclxuICBpZiAoc3RhdGUuY3VycmVudEFyZWEgIT09IG51bGwpIHtcclxuICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuYXJlYXMucHVzaChzdGF0ZS5jdXJyZW50QXJlYSk7XHJcbiAgfVxyXG5cclxuICBhd2FpdCBjb21wbGV0ZUN1cnJlbnRNdW5pY2lwYWxpdHkoc3RhdGUpO1xyXG5cclxuICBjb25zdCB7IG11bmljaXBhbGl0eSwgZXJyb3JzIH0gPSBhd2FpdCBnZXROZXdNdW5pY2lwYWxpdHlCeU5hbWUobGluZSk7XHJcbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICBvbkVycm9yKHsgbGluZU51bWJlciwgbGluZSwgZXJyb3JzIH0pO1xyXG4gIH1cclxuICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5ID0gbXVuaWNpcGFsaXR5O1xyXG4gIHN0YXRlLmN1cnJlbnRGaWx0ZXJNdW5pY2lwYWxpdHkgPSBmb3VuZGVyVG9NdW5pY2lwYWxpdHkoXHJcbiAgICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmZvdW5kZXJcclxuICApO1xyXG5cclxuICBzdGF0ZS5jdXJyZW50QXJlYSA9IG51bGw7XHJcbn07XHJcblxyXG5jb25zdCBjb21wbGV0ZUN1cnJlbnRNdW5pY2lwYWxpdHkgPSBhc3luYyAoc3RhdGU6IFNtZFN0YXRlKSA9PiB7XHJcbiAgaWYgKHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkgIT09IG51bGwpIHtcclxuICAgIGF3YWl0IGFkZFJlc3RzKHN0YXRlKTtcclxuICAgIHN0YXRlLm11bmljaXBhbGl0aWVzLnB1c2goY29udmVydE11bmljaXBhbGl0eShzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5KSk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgcHJvY2Vzc0VtcHR5TGluZSA9ICh7IHN0YXRlIH06IFByb2Nlc3NMaW5lUGFyYW1zKSA9PiB7XHJcbiAgaWYgKHN0YXRlLmN1cnJlbnRBcmVhICE9PSBudWxsKSB7XHJcbiAgICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmFyZWFzLnB1c2goc3RhdGUuY3VycmVudEFyZWEpO1xyXG4gICAgc3RhdGUuY3VycmVudEFyZWEgPSBudWxsO1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IHByb2Nlc3NGaXJzdFNjaG9vbExpbmUgPSBhc3luYyAoe1xyXG4gIHJhd0xpbmUsXHJcbiAgbGluZU51bWJlcixcclxuICBzdGF0ZSxcclxuICBvbkVycm9yLFxyXG59OiBQcm9jZXNzTGluZVBhcmFtcykgPT4ge1xyXG4gIGlmIChzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5ID09PSBudWxsKSB7XHJcbiAgICBvbkVycm9yKHtcclxuICAgICAgbGluZU51bWJlcixcclxuICAgICAgbGluZTogcmF3TGluZSxcclxuICAgICAgZXJyb3JzOiBbXHJcbiAgICAgICAgd2hvbGVMaW5lRXJyb3IoXHJcbiAgICAgICAgICBcIkRlZmluaWNpIMWha29seSBtdXPDrSBwxZllZGNow6F6ZXQgZGVmaW5pY2UgesWZaXpvdmF0ZWxlICh1dm96ZW7DoSAnIycsIG5hcMWZLiAnIyBTdHJha29uaWNlJykuXCIsXHJcbiAgICAgICAgICByYXdMaW5lXHJcbiAgICAgICAgKSxcclxuICAgICAgXSxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBzdGF0ZS5jdXJyZW50QXJlYSA9IHtcclxuICAgIGluZGV4OiBzdGF0ZS5hcmVhQ291bnQrKyxcclxuICAgIHNjaG9vbHM6IFtcclxuICAgICAgYXdhaXQgZ2V0TmV3U2Nob29sKHtcclxuICAgICAgICBuYW1lOiByYXdMaW5lLFxyXG4gICAgICAgIGZvdW5kZXI6IHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlcixcclxuICAgICAgICBsaW5lTnVtYmVyLFxyXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgIH0pLFxyXG4gICAgXSxcclxuICAgIGFkZHJlc3NlczogW10sXHJcbiAgICBhZGRyZXNzTWFwOiBuZXcgTWFwPG51bWJlciwgRXhwb3J0QWRkcmVzc1BvaW50PigpLFxyXG4gICAgYWxsU2Nob29sc0FkZGVkOiBmYWxzZSxcclxuICB9O1xyXG4gIHN0YXRlLnNjaG9vbHNDb21wbGV0ZWQgPSBmYWxzZTtcclxuICBzdGF0ZS5jdXJyZW50RmlsdGVyTXVuaWNpcGFsaXR5ID0gZm91bmRlclRvTXVuaWNpcGFsaXR5KFxyXG4gICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyXHJcbiAgKTtcclxufTtcclxuXHJcbmNvbnN0IHByb2Nlc3NOZXh0U2Nob29sTGluZSA9IGFzeW5jICh7XHJcbiAgbGluZSxcclxuICBsaW5lTnVtYmVyLFxyXG4gIHN0YXRlLFxyXG59OiBQcm9jZXNzTGluZVBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gIGNvbnN0IHNjaG9vbCA9IGF3YWl0IGdldE5ld1NjaG9vbCh7XHJcbiAgICBuYW1lOiBsaW5lLFxyXG4gICAgZm91bmRlcjogc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyLFxyXG4gICAgbGluZU51bWJlcixcclxuICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgIG9uRXJyb3I6ICgpID0+IHt9LFxyXG4gIH0pO1xyXG5cclxuICBpZiAoc2Nob29sID09PSBudWxsKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzdGF0ZS5jdXJyZW50QXJlYS5zY2hvb2xzLnB1c2goc2Nob29sKTtcclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbmNvbnN0IHByb2Nlc3NNdW5pY2lwYWxpdHlTd2l0Y2hMaW5lID0gYXN5bmMgKHtcclxuICBsaW5lLFxyXG4gIHN0YXRlLFxyXG4gIGxpbmVOdW1iZXIsXHJcbiAgb25FcnJvcixcclxufTogUHJvY2Vzc0xpbmVQYXJhbXMpID0+IHtcclxuICBjb25zdCB7IG11bmljaXBhbGl0eSwgZXJyb3JzIH0gPSBhd2FpdCBnZXRTd2l0Y2hNdW5pY2lwYWxpdHkoXHJcbiAgICBsaW5lLFxyXG4gICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyXHJcbiAgKTtcclxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgIG9uRXJyb3IoeyBsaW5lTnVtYmVyLCBsaW5lLCBlcnJvcnMgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHN0YXRlLmN1cnJlbnRGaWx0ZXJNdW5pY2lwYWxpdHkgPSBtdW5pY2lwYWxpdHk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgcHJvY2Vzc1dob2xlTXVuaWNpcGFsaXR5TGluZSA9IGFzeW5jICh7XHJcbiAgbGluZSxcclxuICBzdGF0ZSxcclxuICBsaW5lTnVtYmVyLFxyXG4gIG9uRXJyb3IsXHJcbn06IFByb2Nlc3NMaW5lUGFyYW1zKSA9PiB7XHJcbiAgY29uc3QgeyBtdW5pY2lwYWxpdHksIGVycm9ycyB9ID0gYXdhaXQgZ2V0V2hvbGVNdW5pY2lwYWxpdHkoXHJcbiAgICBsaW5lLFxyXG4gICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyXHJcbiAgKTtcclxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgIG9uRXJyb3IoeyBsaW5lTnVtYmVyLCBsaW5lLCBlcnJvcnMgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChtdW5pY2lwYWxpdHkudHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5KSB7XHJcbiAgICAgIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuY2l0eUNvZGVzLnB1c2gobXVuaWNpcGFsaXR5LmNvZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5kaXN0cmljdENvZGVzLnB1c2gobXVuaWNpcGFsaXR5LmNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFkZHJlc3NQb2ludHMgPSBhd2FpdCBmaW5kQWRkcmVzc1BvaW50cyh7XHJcbiAgICAgIHR5cGU6IFwid2hvbGVNdW5pY2lwYWxpdHlcIixcclxuICAgICAgbXVuaWNpcGFsaXR5LFxyXG4gICAgfSk7XHJcbiAgICBhZGRBZGRyZXNzUG9pbnRzVG9BcmVhKHN0YXRlLmN1cnJlbnRBcmVhLCBhZGRyZXNzUG9pbnRzLCBsaW5lTnVtYmVyKTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBhZGRBZGRyZXNzUG9pbnRzVG9BcmVhID0gKFxyXG4gIGFyZWE6IEludGVybWVkaWF0ZUFyZWEsXHJcbiAgYWRkcmVzc1BvaW50czogQWRkcmVzc1BvaW50W10sXHJcbiAgbGluZU51bWJlcjogbnVtYmVyLFxyXG4gIG11bmljaXBhbGl0eUNvZGU/OiBudW1iZXJcclxuKSA9PiB7XHJcbiAgZm9yIChjb25zdCBwb2ludCBvZiBhZGRyZXNzUG9pbnRzKSB7XHJcbiAgICBpZiAoYXJlYS5hZGRyZXNzTWFwLmhhcyhwb2ludC5pZCkpIHtcclxuICAgICAgYXJlYS5hZGRyZXNzTWFwLmdldChwb2ludC5pZCkubGluZU51bWJlcnMucHVzaChsaW5lTnVtYmVyIC0gMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhcmVhLmFkZHJlc3NNYXAuc2V0KFxyXG4gICAgICAgIHBvaW50LmlkLFxyXG4gICAgICAgIG1hcEFkZHJlc3NQb2ludEZvckV4cG9ydChwb2ludCwgbGluZU51bWJlciwgbXVuaWNpcGFsaXR5Q29kZSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBwcm9jZXNzQWRkcmVzc1BvaW50TGluZSA9IGFzeW5jICh7XHJcbiAgbGluZSxcclxuICBzdGF0ZSxcclxuICBsaW5lTnVtYmVyLFxyXG4gIG9uRXJyb3IsXHJcbiAgb25XYXJuaW5nLFxyXG59OiBQcm9jZXNzTGluZVBhcmFtcykgPT4ge1xyXG4gIGNvbnN0IHsgc21kTGluZXMsIGVycm9ycyB9ID0gcGFyc2VMaW5lKGxpbmUpO1xyXG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgb25FcnJvcih7IGxpbmVOdW1iZXIsIGxpbmUsIGVycm9ycyB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgZm9yIChjb25zdCBzbWRMaW5lIG9mIHNtZExpbmVzKSB7XHJcbiAgICAgIGlmIChzbWRMaW5lLnR5cGUgPT09IFwic3RyZWV0XCIpIHtcclxuICAgICAgICBjb25zdCB7IGV4aXN0cywgZXJyb3JzIH0gPSBhd2FpdCBjaGVja1N0cmVldEV4aXN0cyhcclxuICAgICAgICAgIHNtZExpbmUuc3RyZWV0LFxyXG4gICAgICAgICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIG9uV2FybmluZyh7IGxpbmVOdW1iZXIsIGxpbmUsIGVycm9ycyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV4aXN0cykge1xyXG4gICAgICAgICAgY29uc3QgYWRkcmVzc1BvaW50cyA9IGF3YWl0IGZpbmRBZGRyZXNzUG9pbnRzKHtcclxuICAgICAgICAgICAgdHlwZTogXCJzbWRMaW5lXCIsXHJcbiAgICAgICAgICAgIHNtZExpbmUsXHJcbiAgICAgICAgICAgIG11bmljaXBhbGl0eTogc3RhdGUuY3VycmVudEZpbHRlck11bmljaXBhbGl0eSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGFkZEFkZHJlc3NQb2ludHNUb0FyZWEoXHJcbiAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRBcmVhLFxyXG4gICAgICAgICAgICBhZGRyZXNzUG9pbnRzLFxyXG4gICAgICAgICAgICBsaW5lTnVtYmVyLFxyXG4gICAgICAgICAgICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmNvZGUgIT09XHJcbiAgICAgICAgICAgICAgc3RhdGUuY3VycmVudEZpbHRlck11bmljaXBhbGl0eS5jb2RlXHJcbiAgICAgICAgICAgICAgPyBzdGF0ZS5jdXJyZW50RmlsdGVyTXVuaWNpcGFsaXR5LmNvZGVcclxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoc21kTGluZS50eXBlID09PSBcIm11bmljaXBhbGl0eVBhcnRcIikge1xyXG4gICAgICAgIGNvbnN0IHsgbXVuaWNpcGFsaXR5UGFydENvZGUsIGVycm9ycyB9ID1cclxuICAgICAgICAgIGF3YWl0IGdldE11bmljaXBhbGl0eVBhcnRSZXN1bHQoXHJcbiAgICAgICAgICAgIHNtZExpbmUubXVuaWNpcGFsaXR5UGFydCxcclxuICAgICAgICAgICAgbGluZSxcclxuICAgICAgICAgICAgc3RhdGUuY3VycmVudE11bmljaXBhbGl0eS5mb3VuZGVyXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgb25XYXJuaW5nKHsgbGluZU51bWJlciwgbGluZSwgZXJyb3JzIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBhZGRyZXNzUG9pbnRzID0gYXdhaXQgZmluZEFkZHJlc3NQb2ludHMoe1xyXG4gICAgICAgICAgICB0eXBlOiBcInNtZExpbmVcIixcclxuICAgICAgICAgICAgc21kTGluZSxcclxuICAgICAgICAgICAgbXVuaWNpcGFsaXR5OiBzdGF0ZS5jdXJyZW50RmlsdGVyTXVuaWNpcGFsaXR5LFxyXG4gICAgICAgICAgICBtdW5pY2lwYWxpdHlQYXJ0Q29kZSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGFkZEFkZHJlc3NQb2ludHNUb0FyZWEoc3RhdGUuY3VycmVudEFyZWEsIGFkZHJlc3NQb2ludHMsIGxpbmVOdW1iZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGFkZFJlc3RUb0FyZWEgPSAoXHJcbiAgcmVzdFBvaW50czogQWRkcmVzc1BvaW50W10sXHJcbiAgYXJlYUluZGV4OiBudW1iZXIsXHJcbiAgbGluZU51bWJlcjogbnVtYmVyLFxyXG4gIHN0YXRlOiBTbWRTdGF0ZVxyXG4pID0+IHtcclxuICBjb25zdCBhZGRyZXNzUG9pbnRzSWRzID0gZ2V0QWxsQWRkcmVzc1BvaW50c0lkcyhzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5KTtcclxuXHJcbiAgLy8gZmlsdGVyIG91dCBhZGRyZXNzIHBvaW50cyBhbHJlYWR5IHByZXNlbnRcclxuICBjb25zdCByZW1haW5pbmdQb2ludHMgPSByZXN0UG9pbnRzLmZpbHRlcihcclxuICAgIChwb2ludCkgPT4gIWFkZHJlc3NQb2ludHNJZHMuaGFzKHBvaW50LmlkKVxyXG4gICk7XHJcblxyXG4gIGFkZEFkZHJlc3NQb2ludHNUb0FyZWEoXHJcbiAgICBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmFyZWFzLmZpbmQoKGFyZWEpID0+IGFyZWEuaW5kZXggPT09IGFyZWFJbmRleCksXHJcbiAgICByZW1haW5pbmdQb2ludHMsXHJcbiAgICBsaW5lTnVtYmVyXHJcbiAgKTtcclxufTtcclxuXHJcbmNvbnN0IGFkZFJlc3RzID0gYXN5bmMgKHN0YXRlOiBTbWRTdGF0ZSkgPT4ge1xyXG4gIGlmIChzdGF0ZS5yZXN0cy5ub1N0cmVldE5hbWVBcmVhLmFyZWFJbmRleCAhPT0gbnVsbCkge1xyXG4gICAgYXdhaXQgYWRkUmVzdFdpdGhOb1N0cmVldE5hbWVUb1NjaG9vbChcclxuICAgICAgc3RhdGUucmVzdHMubm9TdHJlZXROYW1lQXJlYS5saW5lTnVtYmVyLFxyXG4gICAgICBzdGF0ZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGlmIChzdGF0ZS5yZXN0cy53aG9sZU11bmljaXBhbGl0eUFyZWEuYXJlYUluZGV4ICE9PSBudWxsKSB7XHJcbiAgICBhd2FpdCBhZGRSZXN0T2ZNdW5pY2lwYWxpdHkoXHJcbiAgICAgIHN0YXRlLnJlc3RzLndob2xlTXVuaWNpcGFsaXR5QXJlYS5saW5lTnVtYmVyLFxyXG4gICAgICBzdGF0ZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZvciAoY29uc3QgcmVzdCBvZiBzdGF0ZS5yZXN0cy5tdW5pY2lwYWxpdHlQYXJ0cykge1xyXG4gICAgYXdhaXQgYWRkUmVzdE9mTXVuaWNpcGFsaXR5UGFydChcclxuICAgICAgc3RhdGUsXHJcbiAgICAgIHJlc3QubXVuaWNpcGFsaXR5UGFydENvZGUsXHJcbiAgICAgIHJlc3QuYXJlYUluZGV4LFxyXG4gICAgICByZXN0LmxpbmVOdW1iZXJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpZiAoc3RhdGUucmVzdHMuaW5jbHVkZVVubWFwcGVkQWRkcmVzc1BvaW50cykge1xyXG4gICAgYXdhaXQgYWRkUmVzdE9mTXVuaWNpcGFsaXR5VG9Vbm1hcHBlZFBvaW50cyhzdGF0ZSk7XHJcbiAgfVxyXG5cclxuICBzdGF0ZS5yZXN0cy5ub1N0cmVldE5hbWVBcmVhLmFyZWFJbmRleCA9IG51bGw7XHJcbiAgc3RhdGUucmVzdHMud2hvbGVNdW5pY2lwYWxpdHlBcmVhLmFyZWFJbmRleCA9IG51bGw7XHJcbiAgc3RhdGUucmVzdHMubXVuaWNpcGFsaXR5UGFydHMgPSBbXTtcclxufTtcclxuXHJcbmNvbnN0IGFkZFJlc3RXaXRoTm9TdHJlZXROYW1lVG9TY2hvb2wgPSBhc3luYyAoXHJcbiAgbGluZU51bWJlcjogbnVtYmVyLFxyXG4gIHN0YXRlOiBTbWRTdGF0ZVxyXG4pID0+IHtcclxuICAvLyBnZXQgYWxsIGFkZHJlc3MgcG9pbnRzIHdpdGhvdXQgc3RyZWV0IG5hbWUgZm9yIGN1cnJlbnQgbXVuaWNpcGFsaXR5XHJcbiAgY29uc3QgcG9pbnRzTm9TdHJlZXROYW1lID0gYXdhaXQgZmluZEFkZHJlc3NQb2ludHMoe1xyXG4gICAgdHlwZTogXCJ3aG9sZU11bmljaXBhbGl0eU5vU3RyZWV0TmFtZVwiLFxyXG4gICAgbXVuaWNpcGFsaXR5OiB7XHJcbiAgICAgIGNvZGU6IHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlci5tdW5pY2lwYWxpdHlDb2RlLFxyXG4gICAgICB0eXBlOiBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSxcclxuICAgIH0sXHJcbiAgfSk7XHJcbiAgYWRkUmVzdFRvQXJlYShcclxuICAgIHBvaW50c05vU3RyZWV0TmFtZSxcclxuICAgIHN0YXRlLnJlc3RzLm5vU3RyZWV0TmFtZUFyZWEuYXJlYUluZGV4LFxyXG4gICAgbGluZU51bWJlcixcclxuICAgIHN0YXRlXHJcbiAgKTtcclxufTtcclxuXHJcbmNvbnN0IGFkZFJlc3RPZk11bmljaXBhbGl0eSA9IGFzeW5jIChsaW5lTnVtYmVyOiBudW1iZXIsIHN0YXRlOiBTbWRTdGF0ZSkgPT4ge1xyXG4gIGFkZFJlc3RUb0FyZWEoXHJcbiAgICBhd2FpdCBnZXRSZXN0T2ZNdW5pY2lwYWxpdHkoc3RhdGUpLFxyXG4gICAgc3RhdGUucmVzdHMud2hvbGVNdW5pY2lwYWxpdHlBcmVhLmFyZWFJbmRleCxcclxuICAgIGxpbmVOdW1iZXIsXHJcbiAgICBzdGF0ZVxyXG4gICk7XHJcbn07XHJcblxyXG5jb25zdCBhZGRSZXN0T2ZNdW5pY2lwYWxpdHlUb1VubWFwcGVkUG9pbnRzID0gYXN5bmMgKHN0YXRlOiBTbWRTdGF0ZSkgPT4ge1xyXG4gIHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkudW5tYXBwZWRQb2ludHMgPSAoXHJcbiAgICBhd2FpdCBnZXRSZXN0T2ZNdW5pY2lwYWxpdHkoc3RhdGUpXHJcbiAgKS5tYXAoKHBvaW50KSA9PiBtYXBBZGRyZXNzUG9pbnRGb3JFeHBvcnQocG9pbnQpKTtcclxufTtcclxuXHJcbmNvbnN0IGdldFJlc3RPZk11bmljaXBhbGl0eSA9IGFzeW5jIChcclxuICBzdGF0ZTogU21kU3RhdGVcclxuKTogUHJvbWlzZTxBZGRyZXNzUG9pbnRbXT4gPT4ge1xyXG4gIC8vIGdldCBhbGwgYWRkcmVzcyBwb2ludHMgZm9yIGN1cnJlbnQgbXVuaWNpcGFsaXR5XHJcbiAgY29uc3QgYWxsUG9pbnRzID0gYXdhaXQgZmluZEFkZHJlc3NQb2ludHMoe1xyXG4gICAgdHlwZTogXCJ3aG9sZU11bmljaXBhbGl0eVwiLFxyXG4gICAgbXVuaWNpcGFsaXR5OiB7XHJcbiAgICAgIGNvZGU6IHN0YXRlLmN1cnJlbnRNdW5pY2lwYWxpdHkuZm91bmRlci5tdW5pY2lwYWxpdHlDb2RlLFxyXG4gICAgICB0eXBlOiBzdGF0ZS5jdXJyZW50TXVuaWNpcGFsaXR5LmZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSxcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIC8vIGZpbHRlciBvdXQgYWRkcmVzcyBwb2ludHMgYWxyZWFkeSBwcmVzZW50XHJcbiAgY29uc3QgYWRkcmVzc1BvaW50c0lkcyA9IGdldEFsbEFkZHJlc3NQb2ludHNJZHMoc3RhdGUuY3VycmVudE11bmljaXBhbGl0eSk7XHJcbiAgcmV0dXJuIGFsbFBvaW50cy5maWx0ZXIoKHBvaW50KSA9PiAhYWRkcmVzc1BvaW50c0lkcy5oYXMocG9pbnQuaWQpKTtcclxufTtcclxuXHJcbmNvbnN0IGFkZFJlc3RPZk11bmljaXBhbGl0eVBhcnQgPSBhc3luYyAoXHJcbiAgc3RhdGU6IFNtZFN0YXRlLFxyXG4gIG11bmljaXBhbGl0eVBhcnRDb2RlOiBudW1iZXIsXHJcbiAgYXJlYUluZGV4OiBudW1iZXIsXHJcbiAgbGluZU51bWJlcjogbnVtYmVyXHJcbikgPT4ge1xyXG4gIGNvbnN0IGFsbFBvaW50cyA9IGF3YWl0IGZpbmRBZGRyZXNzUG9pbnRzKHtcclxuICAgIHR5cGU6IFwid2hvbGVNdW5pY2lwYWxpdHlQYXJ0XCIsXHJcbiAgICBtdW5pY2lwYWxpdHlQYXJ0Q29kZSxcclxuICB9KTtcclxuICBhZGRSZXN0VG9BcmVhKGFsbFBvaW50cywgYXJlYUluZGV4LCBsaW5lTnVtYmVyLCBzdGF0ZSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0TmV3TXVuaWNpcGFsaXR5QnlOYW1lID0gYXN5bmMgKFxyXG4gIG5hbWU6IHN0cmluZ1xyXG4pOiBQcm9taXNlPEludGVybWVkaWF0ZU11bmljaXBhbGl0eVJlc3VsdD4gPT4ge1xyXG4gIGNvbnN0IHsgZm91bmRlciwgZXJyb3JzIH0gPSBhd2FpdCBmaW5kRm91bmRlcihuYW1lKTtcclxuICByZXR1cm4gZ2V0TmV3TXVuaWNpcGFsaXR5KGZvdW5kZXIsIGVycm9ycyk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0TmV3TXVuaWNpcGFsaXR5QnlGb3VuZGVySWQgPSBhc3luYyAoXHJcbiAgZm91bmRlcklkOiBudW1iZXJcclxuKTogUHJvbWlzZTxJbnRlcm1lZGlhdGVNdW5pY2lwYWxpdHlSZXN1bHQ+ID0+IHtcclxuICBjb25zdCB7IGZvdW5kZXIsIGVycm9ycyB9ID0gYXdhaXQgZ2V0Rm91bmRlckJ5SWQoZm91bmRlcklkKTtcclxuICByZXR1cm4gZ2V0TmV3TXVuaWNpcGFsaXR5KGZvdW5kZXIsIGVycm9ycyk7XHJcbn07XHJcblxyXG5jb25zdCBnZXROZXdNdW5pY2lwYWxpdHkgPSAoXHJcbiAgZm91bmRlcjogRm91bmRlcixcclxuICBlcnJvcnM6IFNtZEVycm9yW11cclxuKTogSW50ZXJtZWRpYXRlTXVuaWNpcGFsaXR5UmVzdWx0ID0+ICh7XHJcbiAgbXVuaWNpcGFsaXR5OiB7XHJcbiAgICBtdW5pY2lwYWxpdHlOYW1lOiBmb3VuZGVyID8gZm91bmRlci5uYW1lIDogXCJOZXpuw6Ftw6Egb2JlY1wiLFxyXG4gICAgZm91bmRlcixcclxuICAgIGFyZWFzOiBbXSxcclxuICAgIGNvZGU6IGZvdW5kZXIgPyBmb3VuZGVyLm11bmljaXBhbGl0eUNvZGUgOiAwLFxyXG4gICAgbXVuaWNpcGFsaXR5VHlwZTpcclxuICAgICAgZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHkgPyBcImNpdHlcIiA6IFwiZGlzdHJpY3RcIixcclxuICAgIGNpdHlDb2RlczpcclxuICAgICAgZm91bmRlci5tdW5pY2lwYWxpdHlUeXBlID09PSBNdW5pY2lwYWxpdHlUeXBlLkNpdHlcclxuICAgICAgICA/IFtmb3VuZGVyLm11bmljaXBhbGl0eUNvZGVdXHJcbiAgICAgICAgOiBbXSxcclxuICAgIGRpc3RyaWN0Q29kZXM6XHJcbiAgICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5EaXN0cmljdFxyXG4gICAgICAgID8gW2ZvdW5kZXIubXVuaWNpcGFsaXR5Q29kZV1cclxuICAgICAgICA6IFtdLFxyXG4gICAgdW5tYXBwZWRQb2ludHM6IFtdLFxyXG4gIH0sXHJcbiAgZXJyb3JzLFxyXG59KTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXROZXdTY2hvb2wgPSBhc3luYyAoe1xyXG4gIG5hbWUsXHJcbiAgZm91bmRlcixcclxuICBsaW5lTnVtYmVyLFxyXG4gIHJlcXVpcmVkLFxyXG4gIG9uRXJyb3IsXHJcbn06IHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgZm91bmRlcjogRm91bmRlciB8IG51bGw7XHJcbiAgbGluZU51bWJlcjogbnVtYmVyO1xyXG4gIHJlcXVpcmVkOiBib29sZWFuO1xyXG4gIG9uRXJyb3I6IChwYXJhbXM6IEVycm9yQ2FsbGJhY2tQYXJhbXMpID0+IHZvaWQ7XHJcbn0pOiBQcm9taXNlPEludGVybWVkaWF0ZVNjaG9vbCB8IG51bGw+ID0+IHtcclxuICBsZXQgZXhwb3J0U2Nob29sOiBTY2hvb2wgPSB7XHJcbiAgICBuYW1lLFxyXG4gICAgaXpvOiBcIlwiLFxyXG4gIH07XHJcbiAgaWYgKGZvdW5kZXIgIT09IG51bGwpIHtcclxuICAgIGNvbnN0IHsgc2Nob29sLCBlcnJvcnMgfSA9IGZpbmRTY2hvb2woXHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIGZvdW5kZXIuc2Nob29scyxcclxuICAgICAgcmVxdWlyZWQgPyB1bmRlZmluZWQgOiAxNVxyXG4gICAgKTtcclxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBvbkVycm9yKHsgbGluZU51bWJlciwgbGluZTogbmFtZSwgZXJyb3JzIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHNjaG9vbCkge1xyXG4gICAgICBleHBvcnRTY2hvb2wubmFtZSA9IHNjaG9vbC5uYW1lO1xyXG4gICAgICBleHBvcnRTY2hvb2wuaXpvID0gc2Nob29sLml6byB8fCBcIlwiO1xyXG4gICAgICBpZiAoc2Nob29sLmxvY2F0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBhd2FpdCBnZXRBZGRyZXNzUG9pbnRCeUlkKFxyXG4gICAgICAgICAgc2Nob29sLmxvY2F0aW9uc1swXS5hZGRyZXNzUG9pbnRJZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHBvc2l0aW9uICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBleHBvcnRTY2hvb2wucG9zaXRpb24gPSBtYXBBZGRyZXNzUG9pbnRGb3JFeHBvcnQocG9zaXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB7IC4uLmV4cG9ydFNjaG9vbCwgYWRkcmVzc01hcDogbmV3IE1hcDxudW1iZXIsIEV4cG9ydEFkZHJlc3NQb2ludD4oKSB9O1xyXG59O1xyXG5cclxuY29uc3QgZ2V0QWxsQWRkcmVzc1BvaW50c0lkcyA9IChcclxuICBtdW5pY2lwYWxpdHk6IEludGVybWVkaWF0ZU11bmljaXBhbGl0eVxyXG4pOiBTZXQ8bnVtYmVyPiA9PiB7XHJcbiAgY29uc3QgYWRkcmVzc1BvaW50c0lkcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG5cclxuICBmb3IgKGNvbnN0IGFyZWEgb2YgbXVuaWNpcGFsaXR5LmFyZWFzKSB7XHJcbiAgICBmb3IgKGNvbnN0IGlkIG9mIGFyZWEuYWRkcmVzc01hcC5rZXlzKCkpIHtcclxuICAgICAgYWRkcmVzc1BvaW50c0lkcy5hZGQoaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gYWRkcmVzc1BvaW50c0lkcztcclxufTtcclxuXHJcbmNvbnN0IG1hcEFkZHJlc3NQb2ludEZvckV4cG9ydCA9IChcclxuICBhZGRyZXNzUG9pbnQ6IEFkZHJlc3NQb2ludCB8IEV4cG9ydEFkZHJlc3NQb2ludCxcclxuICBsaW5lTnVtYmVyPzogbnVtYmVyLFxyXG4gIG11bmljaXBhbGl0eUNvZGU/OiBudW1iZXJcclxuKTogRXhwb3J0QWRkcmVzc1BvaW50ID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgYWRkcmVzczogYWRkcmVzc1BvaW50LmFkZHJlc3MsXHJcbiAgICBsYXQ6IHJvdW5kVG9ORGVjaW1hbFBsYWNlcyhhZGRyZXNzUG9pbnQubGF0LCA2KSxcclxuICAgIGxuZzogcm91bmRUb05EZWNpbWFsUGxhY2VzKGFkZHJlc3NQb2ludC5sbmcsIDYpLFxyXG4gICAgLi4uKGxpbmVOdW1iZXIgIT09IHVuZGVmaW5lZCA/IHsgbGluZU51bWJlcnM6IFtsaW5lTnVtYmVyIC0gMV0gfSA6IHt9KSxcclxuICAgIC4uLihtdW5pY2lwYWxpdHlDb2RlICE9PSB1bmRlZmluZWQgPyB7IG11bmljaXBhbGl0eUNvZGUgfSA6IHt9KSxcclxuICB9O1xyXG59O1xyXG5cclxuY29uc3QgbWFwQXJlYUZvckV4cG9ydCA9IChhcmVhOiBJbnRlcm1lZGlhdGVBcmVhKTogSW50ZXJtZWRpYXRlQXJlYSA9PiAoe1xyXG4gIC4uLmFyZWEsXHJcbiAgc2Nob29sczogYXJlYS5zY2hvb2xzLm1hcCgoc2Nob29sKSA9PiAoe1xyXG4gICAgLi4uc2Nob29sLFxyXG4gICAgcG9zaXRpb246IHNjaG9vbC5wb3NpdGlvblxyXG4gICAgICA/IG1hcEFkZHJlc3NQb2ludEZvckV4cG9ydChzY2hvb2wucG9zaXRpb24pXHJcbiAgICAgIDogbnVsbCxcclxuICB9KSksXHJcbn0pO1xyXG5cclxuY29uc3QgY2xlYW5MaW5lID0gKGxpbmU6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBsaW5lLnRyaW0oKS5yZXBsYWNlKC/igJMvZywgXCItXCIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHdob2xlTGluZUVycm9yID0gKG1lc3NhZ2U6IHN0cmluZywgbGluZTogc3RyaW5nKTogU21kRXJyb3IgPT4gKHtcclxuICBtZXNzYWdlLFxyXG4gIHN0YXJ0T2Zmc2V0OiAwLFxyXG4gIGVuZE9mZnNldDogbGluZS5sZW5ndGggKyAxLFxyXG59KTtcclxuXHJcbmNvbnN0IHJvdW5kVG9ORGVjaW1hbFBsYWNlcyA9IChcclxuICB0b1JvdW5kOiBudW1iZXIsXHJcbiAgZGVjaW1hbFBsYWNlczogbnVtYmVyXHJcbik6IG51bWJlciA9PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIE1hdGgucm91bmQodG9Sb3VuZCAqIE1hdGgucG93KDEwLCBkZWNpbWFsUGxhY2VzKSkgL1xyXG4gICAgTWF0aC5wb3coMTAsIGRlY2ltYWxQbGFjZXMpXHJcbiAgKTtcclxufTtcclxuIl19
|
|
@@ -134,6 +134,7 @@ export interface ErrorCallbackParams extends ProcessLineCallbackParams {
|
|
|
134
134
|
}
|
|
135
135
|
export interface ProcessLineParams {
|
|
136
136
|
line: string;
|
|
137
|
+
rawLine: string;
|
|
137
138
|
state: SmdState;
|
|
138
139
|
lineNumber: number;
|
|
139
140
|
onError: (params: ErrorCallbackParams) => void;
|
|
@@ -10,4 +10,4 @@ export var SeriesType;
|
|
|
10
10
|
SeriesType[SeriesType["Description"] = 3] = "Description";
|
|
11
11
|
})(SeriesType || (SeriesType = {}));
|
|
12
12
|
export const isAddressPoint = (something) => something.hasOwnProperty("id");
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RyZWV0LW1hcmtkb3duL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1DQSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixTQUE0QyxFQUNqQixFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUV6RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUNsQyxTQUE0QyxFQUNqQixFQUFFLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQWlCckUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FDaEMsU0FBdUMsRUFDUixFQUFFLENBQ2pDLFNBQVMsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUVsRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FDckIsU0FBdUMsRUFDZixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFOUUsTUFBTSxDQUFOLElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQiwyQ0FBSSxDQUFBO0lBQ0oseUNBQUcsQ0FBQTtJQUNILHlDQUFHLENBQUE7SUFDSCx5REFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLFVBQVUsS0FBVixVQUFVLFFBS3JCO0FBa0JELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUM1QixTQUE0QyxFQUNqQixFQUFFLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZHJlc3NQb2ludCBhcyBDemVjaEFkZHJlc3NQb2ludCB9IGZyb20gXCJjemVjaC1hZGRyZXNzXCI7XHJcbmltcG9ydCB7IE11bmljaXBhbGl0eSBhcyBEYk11bmljaXBhbGl0eSwgRm91bmRlciB9IGZyb20gXCIuLi9kYi90eXBlc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzZWRTbWRMaW5lcyB7XHJcbiAgc21kTGluZXM6IFNtZExpbmVbXTtcclxuICBlcnJvcnM6IFNtZEVycm9yW107XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFNtZExpbmVUeXBlID1cclxuICB8IFwic3RyZWV0XCJcclxuICB8IFwid2hvbGVNdW5pY2lwYWxpdHlMaW5lXCJcclxuICB8IFwibXVuaWNpcGFsaXR5U3dpdGNoXCJcclxuICB8IFwibXVuaWNpcGFsaXR5UGFydFwiO1xyXG5cclxuZXhwb3J0IHR5cGUgU21kTGluZSA9XHJcbiAgfCB7XHJcbiAgICAgIHR5cGU6IFwic3RyZWV0XCI7XHJcbiAgICAgIHN0cmVldDogc3RyaW5nO1xyXG4gICAgICBudW1iZXJTcGVjOiBTZXJpZXNTcGVjW10gfCBOZWdhdGl2ZVNlcmllc1NwZWM7XHJcbiAgICB9XHJcbiAgfCB7XHJcbiAgICAgIHR5cGU6IFwibXVuaWNpcGFsaXR5UGFydFwiO1xyXG4gICAgICBtdW5pY2lwYWxpdHlQYXJ0OiBzdHJpbmc7XHJcbiAgICAgIG51bWJlclNwZWM6IFNlcmllc1NwZWNbXSB8IE5lZ2F0aXZlU2VyaWVzU3BlYztcclxuICAgIH07XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlcmllc1NwZWMge1xyXG4gIHR5cGU6IFNlcmllc1R5cGU7XHJcbiAgcmFuZ2VzOiAoUmFuZ2VTcGVjIHwgRnVsbFN0cmVldE51bWJlcilbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBOZWdhdGl2ZVNlcmllc1NwZWMgZXh0ZW5kcyBTZXJpZXNTcGVjIHtcclxuICBuZWdhdGl2ZTogdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzU2VyaWVzU3BlY0FycmF5ID0gKFxyXG4gIHNvbWV0aGluZzogU2VyaWVzU3BlY1tdIHwgTmVnYXRpdmVTZXJpZXNTcGVjXHJcbik6IHNvbWV0aGluZyBpcyBTZXJpZXNTcGVjW10gPT4gQXJyYXkuaXNBcnJheShzb21ldGhpbmcpO1xyXG5cclxuZXhwb3J0IGNvbnN0IGlzTmVnYXRpdmVTZXJpZXNTcGVjID0gKFxyXG4gIHNvbWV0aGluZzogU2VyaWVzU3BlY1tdIHwgTmVnYXRpdmVTZXJpZXNTcGVjXHJcbik6IHNvbWV0aGluZyBpcyBTZXJpZXNTcGVjW10gPT4gc29tZXRoaW5nLmhhc093blByb3BlcnR5KFwibmVnYXRpdmVcIik7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlU3BlYyB7XHJcbiAgZnJvbT86IFJpY2hOdW1iZXI7XHJcbiAgdG8/OiBSaWNoTnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJpY2hOdW1iZXIge1xyXG4gIG51bWJlcjogbnVtYmVyO1xyXG4gIGxldHRlcj86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGdWxsU3RyZWV0TnVtYmVyIHtcclxuICBkZXNjcmlwdGlvbk51bWJlcjogUmljaE51bWJlcjtcclxuICBvcmllbnRhdGlvbmFsTnVtYmVyOiBSaWNoTnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNGdWxsU3RyZWV0TnVtYmVyID0gKFxyXG4gIHNvbWV0aGluZzogUmFuZ2VTcGVjIHwgRnVsbFN0cmVldE51bWJlclxyXG4pOiBzb21ldGhpbmcgaXMgRnVsbFN0cmVldE51bWJlciA9PlxyXG4gIHNvbWV0aGluZy5oYXNPd25Qcm9wZXJ0eShcIm9yaWVudGF0aW9uYWxOdW1iZXJcIik7XHJcblxyXG5leHBvcnQgY29uc3QgaXNSYW5nZSA9IChcclxuICBzb21ldGhpbmc6IFJhbmdlU3BlYyB8IEZ1bGxTdHJlZXROdW1iZXJcclxuKTogc29tZXRoaW5nIGlzIFJhbmdlU3BlYyA9PiAhc29tZXRoaW5nLmhhc093blByb3BlcnR5KFwib3JpZW50YXRpb25hbE51bWJlclwiKTtcclxuXHJcbmV4cG9ydCBlbnVtIFNlcmllc1R5cGUge1xyXG4gIEV2ZW4sXHJcbiAgT2RkLFxyXG4gIEFsbCxcclxuICBEZXNjcmlwdGlvbixcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBZGRyZXNzUG9pbnQgZXh0ZW5kcyBDemVjaEFkZHJlc3NQb2ludCB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBhZGRyZXNzOiBzdHJpbmc7XHJcbiAgbGF0OiBudW1iZXI7XHJcbiAgbG5nOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0QWRkcmVzc1BvaW50IHtcclxuICBhZGRyZXNzOiBzdHJpbmc7XHJcbiAgbGF0OiBudW1iZXI7XHJcbiAgbG5nOiBudW1iZXI7XHJcbiAgbGluZU51bWJlcnM/
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RyZWV0LW1hcmtkb3duL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1DQSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixTQUE0QyxFQUNqQixFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUV6RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUNsQyxTQUE0QyxFQUNqQixFQUFFLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQWlCckUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FDaEMsU0FBdUMsRUFDUixFQUFFLENBQ2pDLFNBQVMsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUVsRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FDckIsU0FBdUMsRUFDZixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFOUUsTUFBTSxDQUFOLElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQiwyQ0FBSSxDQUFBO0lBQ0oseUNBQUcsQ0FBQTtJQUNILHlDQUFHLENBQUE7SUFDSCx5REFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLFVBQVUsS0FBVixVQUFVLFFBS3JCO0FBa0JELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUM1QixTQUE0QyxFQUNqQixFQUFFLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZHJlc3NQb2ludCBhcyBDemVjaEFkZHJlc3NQb2ludCB9IGZyb20gXCJjemVjaC1hZGRyZXNzXCI7XHJcbmltcG9ydCB7IE11bmljaXBhbGl0eSBhcyBEYk11bmljaXBhbGl0eSwgRm91bmRlciB9IGZyb20gXCIuLi9kYi90eXBlc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzZWRTbWRMaW5lcyB7XHJcbiAgc21kTGluZXM6IFNtZExpbmVbXTtcclxuICBlcnJvcnM6IFNtZEVycm9yW107XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFNtZExpbmVUeXBlID1cclxuICB8IFwic3RyZWV0XCJcclxuICB8IFwid2hvbGVNdW5pY2lwYWxpdHlMaW5lXCJcclxuICB8IFwibXVuaWNpcGFsaXR5U3dpdGNoXCJcclxuICB8IFwibXVuaWNpcGFsaXR5UGFydFwiO1xyXG5cclxuZXhwb3J0IHR5cGUgU21kTGluZSA9XHJcbiAgfCB7XHJcbiAgICAgIHR5cGU6IFwic3RyZWV0XCI7XHJcbiAgICAgIHN0cmVldDogc3RyaW5nO1xyXG4gICAgICBudW1iZXJTcGVjOiBTZXJpZXNTcGVjW10gfCBOZWdhdGl2ZVNlcmllc1NwZWM7XHJcbiAgICB9XHJcbiAgfCB7XHJcbiAgICAgIHR5cGU6IFwibXVuaWNpcGFsaXR5UGFydFwiO1xyXG4gICAgICBtdW5pY2lwYWxpdHlQYXJ0OiBzdHJpbmc7XHJcbiAgICAgIG51bWJlclNwZWM6IFNlcmllc1NwZWNbXSB8IE5lZ2F0aXZlU2VyaWVzU3BlYztcclxuICAgIH07XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlcmllc1NwZWMge1xyXG4gIHR5cGU6IFNlcmllc1R5cGU7XHJcbiAgcmFuZ2VzOiAoUmFuZ2VTcGVjIHwgRnVsbFN0cmVldE51bWJlcilbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBOZWdhdGl2ZVNlcmllc1NwZWMgZXh0ZW5kcyBTZXJpZXNTcGVjIHtcclxuICBuZWdhdGl2ZTogdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzU2VyaWVzU3BlY0FycmF5ID0gKFxyXG4gIHNvbWV0aGluZzogU2VyaWVzU3BlY1tdIHwgTmVnYXRpdmVTZXJpZXNTcGVjXHJcbik6IHNvbWV0aGluZyBpcyBTZXJpZXNTcGVjW10gPT4gQXJyYXkuaXNBcnJheShzb21ldGhpbmcpO1xyXG5cclxuZXhwb3J0IGNvbnN0IGlzTmVnYXRpdmVTZXJpZXNTcGVjID0gKFxyXG4gIHNvbWV0aGluZzogU2VyaWVzU3BlY1tdIHwgTmVnYXRpdmVTZXJpZXNTcGVjXHJcbik6IHNvbWV0aGluZyBpcyBTZXJpZXNTcGVjW10gPT4gc29tZXRoaW5nLmhhc093blByb3BlcnR5KFwibmVnYXRpdmVcIik7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlU3BlYyB7XHJcbiAgZnJvbT86IFJpY2hOdW1iZXI7XHJcbiAgdG8/OiBSaWNoTnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJpY2hOdW1iZXIge1xyXG4gIG51bWJlcjogbnVtYmVyO1xyXG4gIGxldHRlcj86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGdWxsU3RyZWV0TnVtYmVyIHtcclxuICBkZXNjcmlwdGlvbk51bWJlcjogUmljaE51bWJlcjtcclxuICBvcmllbnRhdGlvbmFsTnVtYmVyOiBSaWNoTnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNGdWxsU3RyZWV0TnVtYmVyID0gKFxyXG4gIHNvbWV0aGluZzogUmFuZ2VTcGVjIHwgRnVsbFN0cmVldE51bWJlclxyXG4pOiBzb21ldGhpbmcgaXMgRnVsbFN0cmVldE51bWJlciA9PlxyXG4gIHNvbWV0aGluZy5oYXNPd25Qcm9wZXJ0eShcIm9yaWVudGF0aW9uYWxOdW1iZXJcIik7XHJcblxyXG5leHBvcnQgY29uc3QgaXNSYW5nZSA9IChcclxuICBzb21ldGhpbmc6IFJhbmdlU3BlYyB8IEZ1bGxTdHJlZXROdW1iZXJcclxuKTogc29tZXRoaW5nIGlzIFJhbmdlU3BlYyA9PiAhc29tZXRoaW5nLmhhc093blByb3BlcnR5KFwib3JpZW50YXRpb25hbE51bWJlclwiKTtcclxuXHJcbmV4cG9ydCBlbnVtIFNlcmllc1R5cGUge1xyXG4gIEV2ZW4sXHJcbiAgT2RkLFxyXG4gIEFsbCxcclxuICBEZXNjcmlwdGlvbixcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBZGRyZXNzUG9pbnQgZXh0ZW5kcyBDemVjaEFkZHJlc3NQb2ludCB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBhZGRyZXNzOiBzdHJpbmc7XHJcbiAgbGF0OiBudW1iZXI7XHJcbiAgbG5nOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0QWRkcmVzc1BvaW50IHtcclxuICBhZGRyZXNzOiBzdHJpbmc7XHJcbiAgbGF0OiBudW1iZXI7XHJcbiAgbG5nOiBudW1iZXI7XHJcbiAgbGluZU51bWJlcnM/OiBudW1iZXJbXTtcclxuICAvLyBkZWZpbmVkIGlmIHRoZSBwb2ludCBpcyBpbiBhIGRpZmZlcmVudCBtdW5pY2lwYWxpdHksIGV4Y2VwdCBhIHdob2xlIG11bmljaXBhbGl0eSBmb3IgdGhlIHNhbWUgc2Nob29sXHJcbiAgbXVuaWNpcGFsaXR5Q29kZT86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzQWRkcmVzc1BvaW50ID0gKFxyXG4gIHNvbWV0aGluZzogQWRkcmVzc1BvaW50IHwgRXhwb3J0QWRkcmVzc1BvaW50XHJcbik6IHNvbWV0aGluZyBpcyBBZGRyZXNzUG9pbnQgPT4gc29tZXRoaW5nLmhhc093blByb3BlcnR5KFwiaWRcIik7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNjaG9vbCB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGl6bzogc3RyaW5nO1xyXG4gIHBvc2l0aW9uPzogQWRkcmVzc1BvaW50IHwgRXhwb3J0QWRkcmVzc1BvaW50O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEludGVybWVkaWF0ZVNjaG9vbCBleHRlbmRzIFNjaG9vbCB7XHJcbiAgYWRkcmVzc01hcDogTWFwPG51bWJlciwgRXhwb3J0QWRkcmVzc1BvaW50PjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBcmVhIHtcclxuICBpbmRleDogbnVtYmVyO1xyXG4gIHNjaG9vbHM6IFNjaG9vbFtdO1xyXG4gIGFkZHJlc3NlczogRXhwb3J0QWRkcmVzc1BvaW50W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJtZWRpYXRlQXJlYSBleHRlbmRzIEFyZWEge1xyXG4gIGFkZHJlc3NNYXA6IE1hcDxudW1iZXIsIEV4cG9ydEFkZHJlc3NQb2ludD47XHJcbiAgYWxsU2Nob29sc0FkZGVkOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE11bmljaXBhbGl0eSB7XHJcbiAgbXVuaWNpcGFsaXR5TmFtZTogc3RyaW5nO1xyXG4gIGNvZGU6IG51bWJlcjtcclxuICBtdW5pY2lwYWxpdHlUeXBlOiBcImNpdHlcIiB8IFwiZGlzdHJpY3RcIjtcclxuICBjaXR5Q29kZXM6IG51bWJlcltdO1xyXG4gIGRpc3RyaWN0Q29kZXM6IG51bWJlcltdO1xyXG4gIGFyZWFzOiBBcmVhW107XHJcbiAgdW5tYXBwZWRQb2ludHM6IEV4cG9ydEFkZHJlc3NQb2ludFtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERiTXVuaWNpcGFsaXR5UmVzdWx0IHtcclxuICBtdW5pY2lwYWxpdHk6IERiTXVuaWNpcGFsaXR5O1xyXG4gIGVycm9yczogU21kRXJyb3JbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNdW5pY2lwYWxpdHlQYXJ0UmVzdWx0IHtcclxuICBtdW5pY2lwYWxpdHlQYXJ0Q29kZTogbnVtYmVyO1xyXG4gIGVycm9yczogU21kRXJyb3JbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNdW5pY2lwYWxpdHlXaXRoRm91bmRlciBleHRlbmRzIE11bmljaXBhbGl0eSB7XHJcbiAgZm91bmRlcjogRm91bmRlciB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJtZWRpYXRlTXVuaWNpcGFsaXR5IGV4dGVuZHMgTXVuaWNpcGFsaXR5V2l0aEZvdW5kZXIge1xyXG4gIGFyZWFzOiBJbnRlcm1lZGlhdGVBcmVhW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJtZWRpYXRlTXVuaWNpcGFsaXR5UmVzdWx0IHtcclxuICBtdW5pY2lwYWxpdHk6IEludGVybWVkaWF0ZU11bmljaXBhbGl0eTtcclxuICBlcnJvcnM6IFNtZEVycm9yW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU21kU3RhdGUge1xyXG4gIGN1cnJlbnRNdW5pY2lwYWxpdHk6IEludGVybWVkaWF0ZU11bmljaXBhbGl0eTtcclxuICBjdXJyZW50RmlsdGVyTXVuaWNpcGFsaXR5OiBEYk11bmljaXBhbGl0eTtcclxuICBjdXJyZW50QXJlYTogSW50ZXJtZWRpYXRlQXJlYTtcclxuICBzY2hvb2xzQ29tcGxldGVkOiBib29sZWFuO1xyXG4gIGFyZWFDb3VudDogbnVtYmVyO1xyXG4gIHJlc3RzOiB7XHJcbiAgICBub1N0cmVldE5hbWVBcmVhOiB7XHJcbiAgICAgIGFyZWFJbmRleDogbnVtYmVyO1xyXG4gICAgICBsaW5lTnVtYmVyOiBudW1iZXI7XHJcbiAgICB9O1xyXG4gICAgbXVuaWNpcGFsaXR5UGFydHM6IHtcclxuICAgICAgbXVuaWNpcGFsaXR5UGFydENvZGU6IG51bWJlcjtcclxuICAgICAgYXJlYUluZGV4OiBudW1iZXI7XHJcbiAgICAgIGxpbmVOdW1iZXI6IG51bWJlcjtcclxuICAgIH1bXTtcclxuICAgIHdob2xlTXVuaWNpcGFsaXR5QXJlYToge1xyXG4gICAgICBhcmVhSW5kZXg6IG51bWJlcjtcclxuICAgICAgbGluZU51bWJlcjogbnVtYmVyO1xyXG4gICAgfTtcclxuICAgIGluY2x1ZGVVbm1hcHBlZEFkZHJlc3NQb2ludHM6IGJvb2xlYW47XHJcbiAgfTtcclxuICBtdW5pY2lwYWxpdGllczogTXVuaWNpcGFsaXR5W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0xpbmVDYWxsYmFja1BhcmFtcyB7XHJcbiAgbGluZU51bWJlcjogbnVtYmVyO1xyXG4gIGxpbmU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFcnJvckNhbGxiYWNrUGFyYW1zIGV4dGVuZHMgUHJvY2Vzc0xpbmVDYWxsYmFja1BhcmFtcyB7XHJcbiAgZXJyb3JzOiBTbWRFcnJvcltdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NMaW5lUGFyYW1zIHtcclxuICBsaW5lOiBzdHJpbmc7XHJcbiAgcmF3TGluZTogc3RyaW5nO1xyXG4gIHN0YXRlOiBTbWRTdGF0ZTtcclxuICBsaW5lTnVtYmVyOiBudW1iZXI7XHJcbiAgb25FcnJvcjogKHBhcmFtczogRXJyb3JDYWxsYmFja1BhcmFtcykgPT4gdm9pZDtcclxuICBvbldhcm5pbmc6IChwYXJhbXM6IEVycm9yQ2FsbGJhY2tQYXJhbXMpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU21kRXJyb3Ige1xyXG4gIHN0YXJ0T2Zmc2V0OiBudW1iZXI7XHJcbiAgZW5kT2Zmc2V0OiBudW1iZXI7XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG59XHJcbiJdfQ==
|
package/dist/utils/helpers.d.ts
CHANGED
|
@@ -25,3 +25,4 @@ export declare const prepareOptions: (options: OpenDataSyncOptionsPartial) => Op
|
|
|
25
25
|
export declare const extractMunicipalityName: (founder: Founder) => string;
|
|
26
26
|
export declare const sanitizeMunicipalityName: (name: string) => string;
|
|
27
27
|
export declare const findClosestString: (str: string, arr: string[], maxDistance?: number) => string | null;
|
|
28
|
+
export declare function roundToNDecimalPlaces(toRound: number, decimalPlaces: number): number;
|
package/dist/utils/helpers.js
CHANGED
|
@@ -169,4 +169,8 @@ const levenshteinDistance = (str1, str2) => {
|
|
|
169
169
|
}
|
|
170
170
|
return matrix[str2.length][str1.length];
|
|
171
171
|
};
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNwQyxPQUFPLEVBQVcsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEQsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDO0FBeUI5QixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFXLEVBQUUsQ0FDNUMsSUFBSSxDQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTztJQUNqQixDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksUUFBUTtRQUMzQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsc0JBQXNCO1FBQzNDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsRUFDekMsT0FBTyxDQUNSLENBQUM7QUFFSixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FDNUIsT0FBbUMsRUFDZCxFQUFFO0lBQ3ZCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksaUJBQWlCLEVBQUUsQ0FBQztJQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3hCLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNwQjtJQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMs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QUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO0tBQ1QsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN6QyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNCLElBQ0UscUJBQXFCLENBQUMsS0FBSyxDQUFDO1lBQzVCLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFDNUM7WUFDQSxrRUFBa0U7WUFDbEUsUUFBUSxJQUFJLEdBQUcsQ0FBQztTQUNqQjtLQUNGO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQVksRUFBRSxJQUFZLEVBQVUsRUFBRTtJQUNqRSxNQUFNLE1BQU0sR0FBZSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDOUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNWLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2xCO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsQjtJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDckM7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDVixJQUFJLENBQUMsR0FBRyxDQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVztvQkFDN0IsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZO29CQUM5QixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlO3FCQUNyQyxHQUFHLENBQUMsQ0FBQzthQUNUO1NBQ0Y7S0FDRjtJQUVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jIH0gZnJvbSBcImZzXCI7XHJcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJvc1wiO1xyXG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIjtcclxuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJ1cmxcIjtcclxuaW1wb3J0IHsgRm91bmRlciwgTXVuaWNpcGFsaXR5VHlwZSB9IGZyb20gXCIuLi9kYi90eXBlc1wiO1xyXG5cclxuY29uc3QgYXBwTmFtZSA9IFwidGV4dC10by1tYXBcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkRhdGFTeW5jT3B0aW9ucyB7XHJcbiAgdG1wRGlyOiBzdHJpbmc7XHJcbiAgZGF0YURpcjogc3RyaW5nO1xyXG4gIGRiRmlsZVBhdGg6IHN0cmluZztcclxuICBkYkluaXRGaWxlUGF0aDogc3RyaW5nO1xyXG4gIGFkZHJlc3NQb2ludHNBdG9tVXJsOiBzdHJpbmc7XHJcbiAgYWRkcmVzc1BvaW50c1ppcEZpbGVOYW1lOiBzdHJpbmc7XHJcbiAgYWRkcmVzc1BvaW50c0NzdkZvbGRlck5hbWU6IHN0cmluZztcclxuICBzdHJlZXRzQXRvbVVybDogc3RyaW5nO1xyXG4gIHN0cmVldFppcEZvbGRlck5hbWU6IHN0cmluZztcclxuICBzdHJlZXREYmZGaWxlTmFtZTogc3RyaW5nO1xyXG4gIHBvbHlnb25TaHBGaWxlTmFtZTogc3RyaW5nO1xyXG4gIGRpc3RyaWN0UG9seWdvblNocEZpbGVOYW1lOiBzdHJpbmc7XHJcbiAgZGlzdHJpY3RQb2x5Z29uRGJmRmlsZU5hbWU6IHN0cmluZztcclxuICBzY2hvb2xzWG1sVXJsOiBzdHJpbmc7XHJcbiAgc2Nob29sc1htbEZpbGVOYW1lOiBzdHJpbmc7XHJcbiAgcmVnaW9uc0NzdlVybDogc3RyaW5nO1xyXG4gIHJlZ2lvbnNTY2hlbWFVcmw6IHN0cmluZztcclxuICByZWdpb25zQ3N2RmlsZU5hbWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgT3BlbkRhdGFTeW5jT3B0aW9uc1BhcnRpYWwgPSBQYXJ0aWFsPE9wZW5EYXRhU3luY09wdGlvbnM+O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldEFwcERhdGFEaXJQYXRoID0gKCk6IHN0cmluZyA9PlxyXG4gIGpvaW4oXHJcbiAgICBwcm9jZXNzLmVudi5BUFBEQVRBIHx8XHJcbiAgICAgIChwcm9jZXNzLnBsYXRmb3JtID09IFwiZGFyd2luXCJcclxuICAgICAgICA/IHByb2Nlc3MuZW52LkhPTUUgKyBcIi9MaWJyYXJ5L1ByZWZlcmVuY2VzXCJcclxuICAgICAgICA6IHByb2Nlc3MuZW52LkhPTUUgKyBcIi8ubG9jYWwvc2hhcmVcIiksXHJcbiAgICBhcHBOYW1lXHJcbiAgKTtcclxuXHJcbmV4cG9ydCBjb25zdCBwcmVwYXJlT3B0aW9ucyA9IChcclxuICBvcHRpb25zOiBPcGVuRGF0YVN5bmNPcHRpb25zUGFydGlhbFxyXG4pOiBPcGVuRGF0YVN5bmNPcHRpb25zID0+IHtcclxuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyID8/IGdldEFwcERhdGFEaXJQYXRoKCk7XHJcbiAgaWYgKCFleGlzdHNTeW5jKGRhdGFEaXIpKSB7XHJcbiAgICBta2RpclN5bmMoZGF0YURpcik7XHJcbiAgfVxyXG5cclxuICBjb25zdCB0bXBBcHBEaXIgPSBqb2luKHRtcGRpcigpLCBhcHBOYW1lKTtcclxuICBpZiAoIWV4aXN0c1N5bmModG1wQXBwRGlyKSkge1xyXG4gICAgbWtkaXJTeW5jKHRtcEFwcERpcik7XHJcbiAgfVxyXG5cclxuICBjb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xyXG4gIGNvbnN0IF9fZGlybmFtZSA9IGRpcm5hbWUoX19maWxlbmFtZSk7XHJcblxyXG4gIGNvbnN0IGRlZmF1bHRzOiBPcGVuRGF0YVN5bmNPcHRpb25zID0ge1xyXG4gICAgdG1wRGlyOiB0bXBBcHBEaXIsXHJcbiAgICBkYXRhRGlyOiBkYXRhRGlyLFxyXG4gICAgZGJGaWxlUGF0aDogam9pbihkYXRhRGlyLCBcImFkZHJlc3NfcG9pbnRzLmRiXCIpLFxyXG4gICAgZGJJbml0RmlsZVBhdGg6IGpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwiYWRkcmVzc19wb2ludHNfaW5pdC5kYlwiKSxcclxuICAgIGFkZHJlc3NQb2ludHNBdG9tVXJsOlxyXG4gICAgICBcImh0dHBzOi8vYXRvbS5jdXprLmN6L1JVSUFOLUNTVi1BRFItU1QvUlVJQU4tQ1NWLUFEUi1TVC54bWxcIixcclxuICAgIGFkZHJlc3NQb2ludHNaaXBGaWxlTmFtZTogXCJydWlhbl9jc3YuemlwXCIsXHJcbiAgICBhZGRyZXNzUG9pbnRzQ3N2Rm9sZGVyTmFtZTogXCJDU1ZcIixcclxuICAgIHN0cmVldHNBdG9tVXJsOiBcImh0dHBzOi8vYXRvbS5jdXprLmN6L1JVSUFOLU9CQ0UtU0hQL1JVSUFOLU9CQ0UtU0hQLnhtbFwiLFxyXG4gICAgc3RyZWV0WmlwRm9sZGVyTmFtZTogXCJzdHJlZXRzXCIsXHJcbiAgICBzdHJlZXREYmZGaWxlTmFtZTogXCJVTF9MLmRiZlwiLFxyXG4gICAgcG9seWdvblNocEZpbGVOYW1lOiBcIk9CRUNfUC5zaHBcIixcclxuICAgIGRpc3RyaWN0UG9seWdvblNocEZpbGVOYW1lOiBcIk1PTUNfUC5zaHBcIixcclxuICAgIGRpc3RyaWN0UG9seWdvbkRiZkZpbGVOYW1lOiBcIk1PTUNfUC5kYmZcIixcclxuICAgIHNjaG9vbHNYbWxVcmw6IFwiaHR0cHM6Ly9yZWpzdHJpa3kubXNtdC5jei9vcGVuZGF0YS92cmVqY2Vsay54bWxcIixcclxuICAgIHNjaG9vbHNYbWxGaWxlTmFtZTogXCJzY2hvb2wtcmVnaXN0ZXIueG1sXCIsXHJcbiAgICByZWdpb25zQ3N2VXJsOlxyXG4gICAgICBcImh0dHBzOi8vd3d3LmN6c28uY3ovZG9jdW1lbnRzLzEwMTgwLzIzMjA4Njc0L3N0cnVrdHVyYV91emVtaV9jci5jc3ZcIixcclxuICAgIHJlZ2lvbnNTY2hlbWFVcmw6XHJcbiAgICAgIFwiaHR0cHM6Ly93d3cuY3pzby5jei9kb2N1bWVudHMvMTAxODAvMjMyMDg2NzQvc3RydWt0dXJhX3V6ZW1pX2NyLW1ldGFkYXRhLmpzb25cIixcclxuICAgIHJlZ2lvbnNDc3ZGaWxlTmFtZTogXCJzdHJ1a3R1cmFfdXplbWlfY3IuY3N2XCIsXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLmRlZmF1bHRzLFxyXG4gICAgLi4ub3B0aW9ucyxcclxuICB9O1xyXG59O1xyXG5cclxuY29uc3QgY2l0eVBhdHRlcm5zID0gW1xyXG4gIC9eW3NTXXRhdHV0w6FybsOtIG3Em3N0byArKC4qKSQvLFxyXG4gIC9eW29PXWJlYyArKC4qKSQvLFxyXG4gIC9eW21NXcSbc3RvICsoLiopJC8sXHJcbiAgL15bbU1dxJtzdHlzICsoLiopJC8sXHJcbl07XHJcblxyXG5jb25zdCBkaXN0cmljdFBhdHRlcm5zID0gW1xyXG4gIC9eW21NXcSbc3Rza8OhIMSNw6FzdCArKC4qKSQvLFxyXG4gIC9eW21NXcSbc3Rza8O9IG9idm9kICsoLiopJC8sXHJcbiAgL15bc1NddGF0dXTDoXJuw60gbcSbc3RvICsuKiwgW21NXcSbc3Rza8OhIMSNw6FzdCArKC4qKSQvLFxyXG4gIC9eW3NTXXRhdHV0w6FybsOtIG3Em3N0byArLiosIFttTV3Em3N0c2vDvSBvYnZvZCArKC4qKSQvLFxyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IGV4dHJhY3RNdW5pY2lwYWxpdHlOYW1lID0gKGZvdW5kZXI6IEZvdW5kZXIpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBhdHRlcm5zID1cclxuICAgIGZvdW5kZXIubXVuaWNpcGFsaXR5VHlwZSA9PT0gTXVuaWNpcGFsaXR5VHlwZS5DaXR5XHJcbiAgICAgID8gY2l0eVBhdHRlcm5zXHJcbiAgICAgIDogZGlzdHJpY3RQYXR0ZXJucztcclxuICBjb25zdCBjb3JyZWN0UGF0dGVybiA9IHBhdHRlcm5zLmZpbHRlcigocGF0dGVybikgPT5cclxuICAgIHBhdHRlcm4udGVzdChmb3VuZGVyLm5hbWUpXHJcbiAgKTtcclxuICBpZiAoY29ycmVjdFBhdHRlcm4ubGVuZ3RoID4gMCkge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gY29ycmVjdFBhdHRlcm5bMF0uZXhlYyhmb3VuZGVyLm5hbWUpO1xyXG4gICAgaWYgKHR5cGVvZiByZXN1bHRbMV0gIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdFsxXVxyXG4gICAgICAgIC5yZXBsYWNlKFwiIC0gXCIsIFwiLVwiKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXHN7Mix9L2csIFwiIFwiKVxyXG4gICAgICAgIC50cmltKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZm91bmRlci5uYW1lO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHNhbml0aXplTXVuaWNpcGFsaXR5TmFtZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIHJldHVybiBuYW1lXHJcbiAgICAucmVwbGFjZShcIiAtIFwiLCBcIi1cIilcclxuICAgIC5yZXBsYWNlKC9cXHN7Mix9L2csIFwiIFwiKVxyXG4gICAgLnRyaW0oKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBmaW5kQ2xvc2VzdFN0cmluZyA9IChcclxuICBzdHI6IHN0cmluZyxcclxuICBhcnI6IHN0cmluZ1tdLFxyXG4gIG1heERpc3RhbmNlPzogbnVtYmVyXHJcbik6IHN0cmluZyB8IG51bGwgPT4ge1xyXG4gIGxldCBjbG9zZXN0U3RyID0gXCJcIjtcclxuICBsZXQgY2xvc2VzdERpc3RhbmNlID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBjb25zdCBjdXJyZW50U3RyID0gYXJyW2ldO1xyXG4gICAgY29uc3QgZGlzdGFuY2UgPSBpbnRlcnB1bmN0aW9uRGlzdGFuY2Uoc3RyLCBjdXJyZW50U3RyKTtcclxuXHJcbiAgICBpZiAoZGlzdGFuY2UgPCBjbG9zZXN0RGlzdGFuY2UpIHtcclxuICAgICAgY2xvc2VzdFN0ciA9IGN1cnJlbnRTdHI7XHJcbiAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGV4YWN0IG1hdGNoIGZvdW5kLCBleGl0IGxvb3BcclxuICAgIGlmIChjbG9zZXN0RGlzdGFuY2UgPT09IDApIHtcclxuICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAobWF4RGlzdGFuY2UgIT09IHVuZGVmaW5lZCAmJiBjbG9zZXN0RGlzdGFuY2UgPiBtYXhEaXN0YW5jZSkge1xyXG4gICAgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY2xvc2VzdFN0cjtcclxufTtcclxuXHJcbmNvbnN0IGludGVycHVuY3Rpb25EaXN0YW5jZSA9IChzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IG51bWJlciA9PiB7XHJcbiAgbGV0IGRpc3RhbmNlID0gbGV2ZW5zaHRlaW5EaXN0YW5jZShzdHIxLCBzdHIyKTtcclxuXHJcbiAgY29uc3QgaW50ZXJwdW5jdGlvbk1pc3Rha2VzID0ge1xyXG4gICAgYTogW1wiw6FcIl0sXHJcbiAgICDDoTogW1wiYVwiXSxcclxuICAgIGU6IFtcIsOpXCIsIFwixJtcIl0sXHJcbiAgICDDqTogW1wiZVwiLCBcIsSbXCJdLFxyXG4gICAgxJs6IFtcImVcIiwgXCLDqVwiXSxcclxuICAgIGk6IFtcIsOtXCJdLFxyXG4gICAgw606IFtcImlcIl0sXHJcbiAgICB5OiBbXCLDvVwiXSxcclxuICAgIMO9OiBbXCJ5XCJdLFxyXG4gICAgbzogW1wiw7NcIl0sXHJcbiAgICDDszogW1wib1wiXSxcclxuICAgIHU6IFtcIsO6XCIsIFwixa9cIl0sXHJcbiAgICDFrzogW1widVwiLCBcIsO6XCJdLFxyXG4gICAgw7o6IFtcInVcIiwgXCLFr1wiXSxcclxuICAgIGM6IFtcIsSNXCJdLFxyXG4gICAgxI06IFtcImNcIl0sXHJcbiAgICBkOiBbXCLEj1wiXSxcclxuICAgIMSPOiBbXCJkXCJdLFxyXG4gICAgbjogW1wixYhcIl0sXHJcbiAgICDFiDogW1wiblwiXSxcclxuICAgIHI6IFtcIsWZXCJdLFxyXG4gICAgxZk6IFtcInJcIl0sXHJcbiAgICBzOiBbXCLFoVwiXSxcclxuICAgIMWhOiBbXCJzXCJdLFxyXG4gICAgdDogW1wixaVcIl0sXHJcbiAgICDFpTogW1widFwiXSxcclxuICAgIHo6IFtcIsW+XCJdLFxyXG4gICAgxb46IFtcInpcIl0sXHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgc3RyMUNoYXJzID0gc3RyMS5zcGxpdChcIlwiKTtcclxuICBjb25zdCBzdHIyQ2hhcnMgPSBzdHIyLnNwbGl0KFwiXCIpO1xyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cjFDaGFycy5sZW5ndGg7IGkrKykge1xyXG4gICAgY29uc3QgY2hhcjEgPSBzdHIxQ2hhcnNbaV07XHJcbiAgICBjb25zdCBjaGFyMiA9IHN0cjJDaGFyc1tpXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGludGVycHVuY3Rpb25NaXN0YWtlc1tjaGFyMV0gJiZcclxuICAgICAgaW50ZXJwdW5jdGlvbk1pc3Rha2VzW2NoYXIxXS5pbmNsdWRlcyhjaGFyMilcclxuICAgICkge1xyXG4gICAgICAvLyBTdWJ0cmFjdCBhIHBlbmFsdHkgZnJvbSB0aGUgZGlzdGFuY2UgZm9yIGludGVycHVuY3Rpb24gbWlzdGFrZXNcclxuICAgICAgZGlzdGFuY2UgLT0gMC41O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGRpc3RhbmNlO1xyXG59O1xyXG5cclxuY29uc3QgbGV2ZW5zaHRlaW5EaXN0YW5jZSA9IChzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IG51bWJlciA9PiB7XHJcbiAgY29uc3QgbWF0cml4OiBudW1iZXJbXVtdID0gQXJyYXkoc3RyMi5sZW5ndGggKyAxKVxyXG4gICAgLmZpbGwobnVsbClcclxuICAgIC5tYXAoKCkgPT4gQXJyYXkoc3RyMS5sZW5ndGggKyAxKS5maWxsKG51bGwpKTtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gc3RyMS5sZW5ndGg7IGkrKykge1xyXG4gICAgbWF0cml4WzBdW2ldID0gaTtcclxuICB9XHJcblxyXG4gIGZvciAobGV0IGogPSAwOyBqIDw9IHN0cjIubGVuZ3RoOyBqKyspIHtcclxuICAgIG1hdHJpeFtqXVswXSA9IGo7XHJcbiAgfVxyXG5cclxuICBmb3IgKGxldCBqID0gMTsgaiA8PSBzdHIyLmxlbmd0aDsgaisrKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBzdHIxLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChzdHIxW2kgLSAxXSA9PT0gc3RyMltqIC0gMV0pIHtcclxuICAgICAgICBtYXRyaXhbal1baV0gPSBtYXRyaXhbaiAtIDFdW2kgLSAxXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtYXRyaXhbal1baV0gPVxyXG4gICAgICAgICAgTWF0aC5taW4oXHJcbiAgICAgICAgICAgIG1hdHJpeFtqXVtpIC0gMV0sIC8vIGRlbGV0aW9uXHJcbiAgICAgICAgICAgIG1hdHJpeFtqIC0gMV1baV0sIC8vIGluc2VydGlvblxyXG4gICAgICAgICAgICBtYXRyaXhbaiAtIDFdW2kgLSAxXSAvLyBzdWJzdGl0dXRpb25cclxuICAgICAgICAgICkgKyAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbWF0cml4W3N0cjIubGVuZ3RoXVtzdHIxLmxlbmd0aF07XHJcbn07XHJcbiJdfQ==
|
|
172
|
+
export function roundToNDecimalPlaces(toRound, decimalPlaces) {
|
|
173
|
+
return (Math.round(toRound * Math.pow(10, decimalPlaces)) /
|
|
174
|
+
Math.pow(10, decimalPlaces));
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNwQyxPQUFPLEVBQVcsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEQsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDO0FBeUI5QixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFXLEVBQUUsQ0FDNUMsSUFBSSxDQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTztJQUNqQixDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksUUFBUTtRQUMzQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsc0JBQXNCO1FBQzNDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsRUFDekMsT0FBTyxDQUNSLENBQUM7QUFFSixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FDNUIsT0FBbUMsRUFDZCxFQUFFO0lBQ3ZCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksaUJBQWlCLEVBQUUsQ0FBQztJQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3hCLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNwQjtJQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMs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QUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO0tBQ1QsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN6QyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNCLElBQ0UscUJBQXFCLENBQUMsS0FBSyxDQUFDO1lBQzVCLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFDNUM7WUFDQSxrRUFBa0U7WUFDbEUsUUFBUSxJQUFJLEdBQUcsQ0FBQztTQUNqQjtLQUNGO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQVksRUFBRSxJQUFZLEVBQVUsRUFBRTtJQUNqRSxNQUFNLE1BQU0sR0FBZSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDOUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNWLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2xCO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsQjtJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDckM7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDVixJQUFJLENBQUMsR0FBRyxDQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVztvQkFDN0IsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZO29CQUM5QixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlO3FCQUNyQyxHQUFHLENBQUMsQ0FBQzthQUNUO1NBQ0Y7S0FDRjtJQUVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxPQUFlLEVBQ2YsYUFBcUI7SUFFckIsT0FBTyxDQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUM1QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYyB9IGZyb20gXCJmc1wiO1xyXG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwib3NcIjtcclxuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwidXJsXCI7XHJcbmltcG9ydCB7IEZvdW5kZXIsIE11bmljaXBhbGl0eVR5cGUgfSBmcm9tIFwiLi4vZGIvdHlwZXNcIjtcclxuXHJcbmNvbnN0IGFwcE5hbWUgPSBcInRleHQtdG8tbWFwXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5EYXRhU3luY09wdGlvbnMge1xyXG4gIHRtcERpcjogc3RyaW5nO1xyXG4gIGRhdGFEaXI6IHN0cmluZztcclxuICBkYkZpbGVQYXRoOiBzdHJpbmc7XHJcbiAgZGJJbml0RmlsZVBhdGg6IHN0cmluZztcclxuICBhZGRyZXNzUG9pbnRzQXRvbVVybDogc3RyaW5nO1xyXG4gIGFkZHJlc3NQb2ludHNaaXBGaWxlTmFtZTogc3RyaW5nO1xyXG4gIGFkZHJlc3NQb2ludHNDc3ZGb2xkZXJOYW1lOiBzdHJpbmc7XHJcbiAgc3RyZWV0c0F0b21Vcmw6IHN0cmluZztcclxuICBzdHJlZXRaaXBGb2xkZXJOYW1lOiBzdHJpbmc7XHJcbiAgc3RyZWV0RGJmRmlsZU5hbWU6IHN0cmluZztcclxuICBwb2x5Z29uU2hwRmlsZU5hbWU6IHN0cmluZztcclxuICBkaXN0cmljdFBvbHlnb25TaHBGaWxlTmFtZTogc3RyaW5nO1xyXG4gIGRpc3RyaWN0UG9seWdvbkRiZkZpbGVOYW1lOiBzdHJpbmc7XHJcbiAgc2Nob29sc1htbFVybDogc3RyaW5nO1xyXG4gIHNjaG9vbHNYbWxGaWxlTmFtZTogc3RyaW5nO1xyXG4gIHJlZ2lvbnNDc3ZVcmw6IHN0cmluZztcclxuICByZWdpb25zU2NoZW1hVXJsOiBzdHJpbmc7XHJcbiAgcmVnaW9uc0NzdkZpbGVOYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE9wZW5EYXRhU3luY09wdGlvbnNQYXJ0aWFsID0gUGFydGlhbDxPcGVuRGF0YVN5bmNPcHRpb25zPjtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRBcHBEYXRhRGlyUGF0aCA9ICgpOiBzdHJpbmcgPT5cclxuICBqb2luKFxyXG4gICAgcHJvY2Vzcy5lbnYuQVBQREFUQSB8fFxyXG4gICAgICAocHJvY2Vzcy5wbGF0Zm9ybSA9PSBcImRhcndpblwiXHJcbiAgICAgICAgPyBwcm9jZXNzLmVudi5IT01FICsgXCIvTGlicmFyeS9QcmVmZXJlbmNlc1wiXHJcbiAgICAgICAgOiBwcm9jZXNzLmVudi5IT01FICsgXCIvLmxvY2FsL3NoYXJlXCIpLFxyXG4gICAgYXBwTmFtZVxyXG4gICk7XHJcblxyXG5leHBvcnQgY29uc3QgcHJlcGFyZU9wdGlvbnMgPSAoXHJcbiAgb3B0aW9uczogT3BlbkRhdGFTeW5jT3B0aW9uc1BhcnRpYWxcclxuKTogT3BlbkRhdGFTeW5jT3B0aW9ucyA9PiB7XHJcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpciA/PyBnZXRBcHBEYXRhRGlyUGF0aCgpO1xyXG4gIGlmICghZXhpc3RzU3luYyhkYXRhRGlyKSkge1xyXG4gICAgbWtkaXJTeW5jKGRhdGFEaXIpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgdG1wQXBwRGlyID0gam9pbih0bXBkaXIoKSwgYXBwTmFtZSk7XHJcbiAgaWYgKCFleGlzdHNTeW5jKHRtcEFwcERpcikpIHtcclxuICAgIG1rZGlyU3luYyh0bXBBcHBEaXIpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcclxuICBjb25zdCBfX2Rpcm5hbWUgPSBkaXJuYW1lKF9fZmlsZW5hbWUpO1xyXG5cclxuICBjb25zdCBkZWZhdWx0czogT3BlbkRhdGFTeW5jT3B0aW9ucyA9IHtcclxuICAgIHRtcERpcjogdG1wQXBwRGlyLFxyXG4gICAgZGF0YURpcjogZGF0YURpcixcclxuICAgIGRiRmlsZVBhdGg6IGpvaW4oZGF0YURpciwgXCJhZGRyZXNzX3BvaW50cy5kYlwiKSxcclxuICAgIGRiSW5pdEZpbGVQYXRoOiBqb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcImFkZHJlc3NfcG9pbnRzX2luaXQuZGJcIiksXHJcbiAgICBhZGRyZXNzUG9pbnRzQXRvbVVybDpcclxuICAgICAgXCJodHRwczovL2F0b20uY3V6ay5jei9SVUlBTi1DU1YtQURSLVNUL1JVSUFOLUNTVi1BRFItU1QueG1sXCIsXHJcbiAgICBhZGRyZXNzUG9pbnRzWmlwRmlsZU5hbWU6IFwicnVpYW5fY3N2LnppcFwiLFxyXG4gICAgYWRkcmVzc1BvaW50c0NzdkZvbGRlck5hbWU6IFwiQ1NWXCIsXHJcbiAgICBzdHJlZXRzQXRvbVVybDogXCJodHRwczovL2F0b20uY3V6ay5jei9SVUlBTi1PQkNFLVNIUC9SVUlBTi1PQkNFLVNIUC54bWxcIixcclxuICAgIHN0cmVldFppcEZvbGRlck5hbWU6IFwic3RyZWV0c1wiLFxyXG4gICAgc3RyZWV0RGJmRmlsZU5hbWU6IFwiVUxfTC5kYmZcIixcclxuICAgIHBvbHlnb25TaHBGaWxlTmFtZTogXCJPQkVDX1Auc2hwXCIsXHJcbiAgICBkaXN0cmljdFBvbHlnb25TaHBGaWxlTmFtZTogXCJNT01DX1Auc2hwXCIsXHJcbiAgICBkaXN0cmljdFBvbHlnb25EYmZGaWxlTmFtZTogXCJNT01DX1AuZGJmXCIsXHJcbiAgICBzY2hvb2xzWG1sVXJsOiBcImh0dHBzOi8vcmVqc3RyaWt5Lm1zbXQuY3ovb3BlbmRhdGEvdnJlamNlbGsueG1sXCIsXHJcbiAgICBzY2hvb2xzWG1sRmlsZU5hbWU6IFwic2Nob29sLXJlZ2lzdGVyLnhtbFwiLFxyXG4gICAgcmVnaW9uc0NzdlVybDpcclxuICAgICAgXCJodHRwczovL3d3dy5jenNvLmN6L2RvY3VtZW50cy8xMDE4MC8yMzIwODY3NC9zdHJ1a3R1cmFfdXplbWlfY3IuY3N2XCIsXHJcbiAgICByZWdpb25zU2NoZW1hVXJsOlxyXG4gICAgICBcImh0dHBzOi8vd3d3LmN6c28uY3ovZG9jdW1lbnRzLzEwMTgwLzIzMjA4Njc0L3N0cnVrdHVyYV91emVtaV9jci1tZXRhZGF0YS5qc29uXCIsXHJcbiAgICByZWdpb25zQ3N2RmlsZU5hbWU6IFwic3RydWt0dXJhX3V6ZW1pX2NyLmNzdlwiLFxyXG4gIH07XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICAuLi5kZWZhdWx0cyxcclxuICAgIC4uLm9wdGlvbnMsXHJcbiAgfTtcclxufTtcclxuXHJcbmNvbnN0IGNpdHlQYXR0ZXJucyA9IFtcclxuICAvXltzU110YXR1dMOhcm7DrSBtxJtzdG8gKyguKikkLyxcclxuICAvXltvT11iZWMgKyguKikkLyxcclxuICAvXlttTV3Em3N0byArKC4qKSQvLFxyXG4gIC9eW21NXcSbc3R5cyArKC4qKSQvLFxyXG5dO1xyXG5cclxuY29uc3QgZGlzdHJpY3RQYXR0ZXJucyA9IFtcclxuICAvXlttTV3Em3N0c2vDoSDEjcOhc3QgKyguKikkLyxcclxuICAvXlttTV3Em3N0c2vDvSBvYnZvZCArKC4qKSQvLFxyXG4gIC9eW3NTXXRhdHV0w6FybsOtIG3Em3N0byArLiosIFttTV3Em3N0c2vDoSDEjcOhc3QgKyguKikkLyxcclxuICAvXltzU110YXR1dMOhcm7DrSBtxJtzdG8gKy4qLCBbbU1dxJtzdHNrw70gb2J2b2QgKyguKikkLyxcclxuXTtcclxuXHJcbmV4cG9ydCBjb25zdCBleHRyYWN0TXVuaWNpcGFsaXR5TmFtZSA9IChmb3VuZGVyOiBGb3VuZGVyKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwYXR0ZXJucyA9XHJcbiAgICBmb3VuZGVyLm11bmljaXBhbGl0eVR5cGUgPT09IE11bmljaXBhbGl0eVR5cGUuQ2l0eVxyXG4gICAgICA/IGNpdHlQYXR0ZXJuc1xyXG4gICAgICA6IGRpc3RyaWN0UGF0dGVybnM7XHJcbiAgY29uc3QgY29ycmVjdFBhdHRlcm4gPSBwYXR0ZXJucy5maWx0ZXIoKHBhdHRlcm4pID0+XHJcbiAgICBwYXR0ZXJuLnRlc3QoZm91bmRlci5uYW1lKVxyXG4gICk7XHJcbiAgaWYgKGNvcnJlY3RQYXR0ZXJuLmxlbmd0aCA+IDApIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGNvcnJlY3RQYXR0ZXJuWzBdLmV4ZWMoZm91bmRlci5uYW1lKTtcclxuICAgIGlmICh0eXBlb2YgcmVzdWx0WzFdICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRbMV1cclxuICAgICAgICAucmVwbGFjZShcIiAtIFwiLCBcIi1cIilcclxuICAgICAgICAucmVwbGFjZSgvXFxzezIsfS9nLCBcIiBcIilcclxuICAgICAgICAudHJpbSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZvdW5kZXIubmFtZTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBzYW5pdGl6ZU11bmljaXBhbGl0eU5hbWUgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICByZXR1cm4gbmFtZVxyXG4gICAgLnJlcGxhY2UoXCIgLSBcIiwgXCItXCIpXHJcbiAgICAucmVwbGFjZSgvXFxzezIsfS9nLCBcIiBcIilcclxuICAgIC50cmltKCk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZmluZENsb3Nlc3RTdHJpbmcgPSAoXHJcbiAgc3RyOiBzdHJpbmcsXHJcbiAgYXJyOiBzdHJpbmdbXSxcclxuICBtYXhEaXN0YW5jZT86IG51bWJlclxyXG4pOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICBsZXQgY2xvc2VzdFN0ciA9IFwiXCI7XHJcbiAgbGV0IGNsb3Nlc3REaXN0YW5jZSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgY29uc3QgY3VycmVudFN0ciA9IGFycltpXTtcclxuICAgIGNvbnN0IGRpc3RhbmNlID0gaW50ZXJwdW5jdGlvbkRpc3RhbmNlKHN0ciwgY3VycmVudFN0cik7XHJcblxyXG4gICAgaWYgKGRpc3RhbmNlIDwgY2xvc2VzdERpc3RhbmNlKSB7XHJcbiAgICAgIGNsb3Nlc3RTdHIgPSBjdXJyZW50U3RyO1xyXG4gICAgICBjbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBleGFjdCBtYXRjaCBmb3VuZCwgZXhpdCBsb29wXHJcbiAgICBpZiAoY2xvc2VzdERpc3RhbmNlID09PSAwKSB7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKG1heERpc3RhbmNlICE9PSB1bmRlZmluZWQgJiYgY2xvc2VzdERpc3RhbmNlID4gbWF4RGlzdGFuY2UpIHtcclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNsb3Nlc3RTdHI7XHJcbn07XHJcblxyXG5jb25zdCBpbnRlcnB1bmN0aW9uRGlzdGFuY2UgPSAoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBudW1iZXIgPT4ge1xyXG4gIGxldCBkaXN0YW5jZSA9IGxldmVuc2h0ZWluRGlzdGFuY2Uoc3RyMSwgc3RyMik7XHJcblxyXG4gIGNvbnN0IGludGVycHVuY3Rpb25NaXN0YWtlcyA9IHtcclxuICAgIGE6IFtcIsOhXCJdLFxyXG4gICAgw6E6IFtcImFcIl0sXHJcbiAgICBlOiBbXCLDqVwiLCBcIsSbXCJdLFxyXG4gICAgw6k6IFtcImVcIiwgXCLEm1wiXSxcclxuICAgIMSbOiBbXCJlXCIsIFwiw6lcIl0sXHJcbiAgICBpOiBbXCLDrVwiXSxcclxuICAgIMOtOiBbXCJpXCJdLFxyXG4gICAgeTogW1wiw71cIl0sXHJcbiAgICDDvTogW1wieVwiXSxcclxuICAgIG86IFtcIsOzXCJdLFxyXG4gICAgw7M6IFtcIm9cIl0sXHJcbiAgICB1OiBbXCLDulwiLCBcIsWvXCJdLFxyXG4gICAgxa86IFtcInVcIiwgXCLDulwiXSxcclxuICAgIMO6OiBbXCJ1XCIsIFwixa9cIl0sXHJcbiAgICBjOiBbXCLEjVwiXSxcclxuICAgIMSNOiBbXCJjXCJdLFxyXG4gICAgZDogW1wixI9cIl0sXHJcbiAgICDEjzogW1wiZFwiXSxcclxuICAgIG46IFtcIsWIXCJdLFxyXG4gICAgxYg6IFtcIm5cIl0sXHJcbiAgICByOiBbXCLFmVwiXSxcclxuICAgIMWZOiBbXCJyXCJdLFxyXG4gICAgczogW1wixaFcIl0sXHJcbiAgICDFoTogW1wic1wiXSxcclxuICAgIHQ6IFtcIsWlXCJdLFxyXG4gICAgxaU6IFtcInRcIl0sXHJcbiAgICB6OiBbXCLFvlwiXSxcclxuICAgIMW+OiBbXCJ6XCJdLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHN0cjFDaGFycyA9IHN0cjEuc3BsaXQoXCJcIik7XHJcbiAgY29uc3Qgc3RyMkNoYXJzID0gc3RyMi5zcGxpdChcIlwiKTtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIxQ2hhcnMubGVuZ3RoOyBpKyspIHtcclxuICAgIGNvbnN0IGNoYXIxID0gc3RyMUNoYXJzW2ldO1xyXG4gICAgY29uc3QgY2hhcjIgPSBzdHIyQ2hhcnNbaV07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBpbnRlcnB1bmN0aW9uTWlzdGFrZXNbY2hhcjFdICYmXHJcbiAgICAgIGludGVycHVuY3Rpb25NaXN0YWtlc1tjaGFyMV0uaW5jbHVkZXMoY2hhcjIpXHJcbiAgICApIHtcclxuICAgICAgLy8gU3VidHJhY3QgYSBwZW5hbHR5IGZyb20gdGhlIGRpc3RhbmNlIGZvciBpbnRlcnB1bmN0aW9uIG1pc3Rha2VzXHJcbiAgICAgIGRpc3RhbmNlIC09IDAuNTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBkaXN0YW5jZTtcclxufTtcclxuXHJcbmNvbnN0IGxldmVuc2h0ZWluRGlzdGFuY2UgPSAoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBudW1iZXIgPT4ge1xyXG4gIGNvbnN0IG1hdHJpeDogbnVtYmVyW11bXSA9IEFycmF5KHN0cjIubGVuZ3RoICsgMSlcclxuICAgIC5maWxsKG51bGwpXHJcbiAgICAubWFwKCgpID0+IEFycmF5KHN0cjEubGVuZ3RoICsgMSkuZmlsbChudWxsKSk7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IHN0cjEubGVuZ3RoOyBpKyspIHtcclxuICAgIG1hdHJpeFswXVtpXSA9IGk7XHJcbiAgfVxyXG5cclxuICBmb3IgKGxldCBqID0gMDsgaiA8PSBzdHIyLmxlbmd0aDsgaisrKSB7XHJcbiAgICBtYXRyaXhbal1bMF0gPSBqO1xyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgaiA9IDE7IGogPD0gc3RyMi5sZW5ndGg7IGorKykge1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gc3RyMS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoc3RyMVtpIC0gMV0gPT09IHN0cjJbaiAtIDFdKSB7XHJcbiAgICAgICAgbWF0cml4W2pdW2ldID0gbWF0cml4W2ogLSAxXVtpIC0gMV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWF0cml4W2pdW2ldID1cclxuICAgICAgICAgIE1hdGgubWluKFxyXG4gICAgICAgICAgICBtYXRyaXhbal1baSAtIDFdLCAvLyBkZWxldGlvblxyXG4gICAgICAgICAgICBtYXRyaXhbaiAtIDFdW2ldLCAvLyBpbnNlcnRpb25cclxuICAgICAgICAgICAgbWF0cml4W2ogLSAxXVtpIC0gMV0gLy8gc3Vic3RpdHV0aW9uXHJcbiAgICAgICAgICApICsgMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1hdHJpeFtzdHIyLmxlbmd0aF1bc3RyMS5sZW5ndGhdO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kVG9ORGVjaW1hbFBsYWNlcyhcclxuICB0b1JvdW5kOiBudW1iZXIsXHJcbiAgZGVjaW1hbFBsYWNlczogbnVtYmVyXHJcbik6IG51bWJlciB7XHJcbiAgcmV0dXJuIChcclxuICAgIE1hdGgucm91bmQodG9Sb3VuZCAqIE1hdGgucG93KDEwLCBkZWNpbWFsUGxhY2VzKSkgL1xyXG4gICAgTWF0aC5wb3coMTAsIGRlY2ltYWxQbGFjZXMpXHJcbiAgKTtcclxufVxyXG4iXX0=
|
package/dist/utils/jtsk2wgs84.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { roundToNDecimalPlaces } from "./helpers";
|
|
1
2
|
/**
|
|
2
3
|
* Convert JTSK to WGS84 - taken from @arodax/jtsk2wgs84 package that had some
|
|
3
4
|
* import issues.
|
|
@@ -78,8 +79,4 @@ export default function jtsk2wgs84(x, y, h = 200) {
|
|
|
78
79
|
altitude: Math.round(h * 100) / 100,
|
|
79
80
|
};
|
|
80
81
|
}
|
|
81
|
-
function roundToNDecimalPlaces(toRound, decimalPlaces) {
|
|
82
|
-
return (Math.round(toRound * Math.pow(10, decimalPlaces)) /
|
|
83
|
-
Math.pow(10, decimalPlaces));
|
|
84
|
-
}
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianRzazJ3Z3M4NC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9qdHNrMndnczg0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sVUFBVSxVQUFVLENBQ2hDLENBQVMsRUFDVCxDQUFTLEVBQ1QsSUFBWSxHQUFHO0lBRWYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztJQUVwQixJQUFJLENBQUMsR0FBRyxhQUFhLENBQUM7SUFDdEIsSUFBSSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7SUFDMUIsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7SUFDekIsSUFBSSxHQUFHLEdBQUcsaUJBQWlCLENBQUM7SUFDNUIsSUFBSSxLQUFLLEdBQUcsaUJBQWlCLENBQUM7SUFDOUIsSUFBSSxLQUFLLEdBQUcsaUJBQWlCLENBQUM7SUFDOUIsSUFBSSxLQUFLLEdBQUcsaUJBQWlCLENBQUM7SUFDOUIsSUFBSSxLQUFLLEdBQUcsaUJBQWlCLENBQUM7SUFDOUIsSUFBSSxLQUFLLEdBQUcsaUJBQWlCLENBQUM7SUFDOUIsSUFBSSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7SUFFMUIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsQyxJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdEMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN4QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDekMsSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN6QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3ZELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUU1QixJQUFJLElBQUksR0FBRyxHQUFHLENBQUM7SUFFZixHQUFHO1FBQ0QsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNYLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDN0IsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUU7SUFFdkMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFdEQsSUFBSSxFQUFFLEdBQUcsYUFBYSxDQUFDO0lBQ3ZCLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNoQixJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDZixJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDaEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDNUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDN0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDN0MsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0lBQ2pCLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFOUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUNkLEVBQUUsR0FBRyxhQUFhLENBQUM7SUFDbkIsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDckMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNwRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXJFLE9BQU87UUFDTCxNQUFNLEVBQUUsU0FBUztRQUNqQixNQUFNLEVBQUUsU0FBUztRQUNqQixHQUFHLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDbEQsR0FBRyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHO0tBQ3BDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxPQUFlLEVBQUUsYUFBcUI7SUFDbkUsT0FBTyxDQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUM1QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQ29udmVyc2lvblJlc3VsdCB7XHJcbiAganRza194OiBudW1iZXI7XHJcbiAganRza195OiBudW1iZXI7XHJcbiAgbGF0OiBudW1iZXI7XHJcbiAgbG9uOiBudW1iZXI7XHJcbiAgYWx0aXR1ZGU6IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgSlRTSyB0byBXR1M4NCAtIHRha2VuIGZyb20gQGFyb2RheC9qdHNrMndnczg0IHBhY2thZ2UgdGhhdCBoYWQgc29tZVxyXG4gKiBpbXBvcnQgaXNzdWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0geFxyXG4gKiBAcGFyYW0geVxyXG4gKiBAcGFyYW0gaFxyXG4gKiBAcmV0dXJuIHt7anRza194OiBudW1iZXIsIGp0c2tfeTogbnVtYmVyLCBsb246IG51bWJlciwgbGF0OiBudW1iZXIsIGFsdGl0dWRlOiBudW1iZXJ9fVxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ganRzazJ3Z3M4NChcclxuICB4OiBudW1iZXIsXHJcbiAgeTogbnVtYmVyLFxyXG4gIGg6IG51bWJlciA9IDIwMFxyXG4pOiBDb252ZXJzaW9uUmVzdWx0IHtcclxuICBjb25zdCBvcmlnaW5hbFggPSB4O1xyXG4gIGNvbnN0IG9yaWdpbmFsWSA9IHk7XHJcblxyXG4gIGxldCBhID0gNjM3NzM5Ny4xNTUwODtcclxuICBsZXQgZSA9IDAuMDgxNjk2ODMxMjE1MzAzO1xyXG4gIGxldCBuID0gMC45Nzk5MjQ3MDQ2MjA4MztcclxuICBsZXQgdVJvID0gMTIzMTAyMzAuMTI3OTcwMzY7XHJcbiAgbGV0IHNpblVRID0gMC44NjM0OTk5Njk1MDYzNDE7XHJcbiAgbGV0IGNvc1VRID0gMC41MDQzNDg4ODk4MTk4ODI7XHJcbiAgbGV0IHNpblZRID0gMC40MjAyMTUxNDQ1ODY0OTM7XHJcbiAgbGV0IGNvc1ZRID0gMC45MDc0MjQ1MDQ5OTIwOTc7XHJcbiAgbGV0IGFscGhhID0gMS4wMDA1OTc0OTgzNzE1NDI7XHJcbiAgbGV0IGsgPSAxLjAwMzQxOTE2Mzk2NjU3NTtcclxuXHJcbiAgbGV0IHJvID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xyXG4gIGxldCBlcHNpbG9uID0gMiAqIE1hdGguYXRhbih5IC8gKHJvICsgeCkpO1xyXG4gIGxldCBEID0gZXBzaWxvbiAvIG47XHJcbiAgbGV0IFMgPSAyICogTWF0aC5hdGFuKE1hdGguZXhwKCgxIC8gbikgKiBNYXRoLmxvZyh1Um8gLyBybykpKSAtIE1hdGguUEkgLyAyO1xyXG4gIGxldCBzaW5TID0gTWF0aC5zaW4oUyk7XHJcbiAgbGV0IGNvc1MgPSBNYXRoLmNvcyhTKTtcclxuICBsZXQgc2luVSA9IHNpblVRICogc2luUyAtIGNvc1VRICogY29zUyAqIE1hdGguY29zKEQpO1xyXG4gIGxldCBjb3NVID0gTWF0aC5zcXJ0KDEgLSBzaW5VICogc2luVSk7XHJcbiAgbGV0IHNpbkRWID0gKE1hdGguc2luKEQpICogY29zUykgLyBjb3NVO1xyXG4gIGxldCBjb3NEViA9IE1hdGguc3FydCgxIC0gc2luRFYgKiBzaW5EVik7XHJcbiAgbGV0IHNpblYgPSBzaW5WUSAqIGNvc0RWIC0gY29zVlEgKiBzaW5EVjtcclxuICBsZXQgY29zViA9IGNvc1ZRICogY29zRFYgKyBzaW5WUSAqIHNpbkRWO1xyXG4gIGxldCBsSnRzayA9ICgyICogTWF0aC5hdGFuKHNpblYgLyAoMSArIGNvc1YpKSkgLyBhbHBoYTtcclxuICBsZXQgdCA9IE1hdGguZXhwKCgyIC8gYWxwaGEpICogTWF0aC5sb2coKDEgKyBzaW5VKSAvIGNvc1UgLyBrKSk7XHJcbiAgbGV0IHBvbSA9ICh0IC0gMSkgLyAodCArIDEpO1xyXG5cclxuICBsZXQgc2luQiA9IHBvbTtcclxuXHJcbiAgZG8ge1xyXG4gICAgc2luQiA9IHBvbTtcclxuICAgIHBvbSA9IHQgKiBNYXRoLmV4cChlICogTWF0aC5sb2coKDEgKyBlICogc2luQikgLyAoMSAtIGUgKiBzaW5CKSkpO1xyXG4gICAgcG9tID0gKHBvbSAtIDEpIC8gKHBvbSArIDEpO1xyXG4gIH0gd2hpbGUgKE1hdGguYWJzKHBvbSAtIHNpbkIpID4gMWUtMTUpO1xyXG5cclxuICBsZXQgYkp0c2sgPSBNYXRoLmF0YW4ocG9tIC8gTWF0aC5zcXJ0KDEgLSBwb20gKiBwb20pKTtcclxuXHJcbiAgbGV0IGYxID0gMjk5LjE1MjgxMjg1MztcclxuICBsZXQgZTIgPSAxIC0gKDEgLSAxIC8gZjEpICogKDEgLSAxIC8gZjEpO1xyXG4gIHJvID0gYSAvIE1hdGguc3FydCgxIC0gZTIgKiBNYXRoLnNpbihiSnRzaykgKiBNYXRoLnNpbihiSnRzaykpO1xyXG4gIHggPSAocm8gKyBoKSAqIE1hdGguY29zKGJKdHNrKSAqIE1hdGguY29zKGxKdHNrKTtcclxuICB5ID0gKHJvICsgaCkgKiBNYXRoLmNvcyhiSnRzaykgKiBNYXRoLnNpbihsSnRzayk7XHJcbiAgbGV0IHogPSAoKDEgLSBlMikgKiBybyArIGgpICogTWF0aC5zaW4oYkp0c2spO1xyXG5cclxuICBsZXQgZHggPSA1NzAuNjk7XHJcbiAgbGV0IGR5ID0gODUuNjk7XHJcbiAgbGV0IGR6ID0gNDYyLjg0O1xyXG4gIGxldCB3eiA9ICgoLTUuMjYxMSAvIDM2MDApICogTWF0aC5QSSkgLyAxODA7XHJcbiAgbGV0IHd5ID0gKCgtMS41ODY3NiAvIDM2MDApICogTWF0aC5QSSkgLyAxODA7XHJcbiAgbGV0IHd4ID0gKCgtNC45OTgyMSAvIDM2MDApICogTWF0aC5QSSkgLyAxODA7XHJcbiAgbGV0IG0gPSAzLjU0M2UtNjtcclxuICBsZXQgeG4gPSBkeCArICgxICsgbSkgKiAoeCArIHd6ICogeSAtIHd5ICogeik7XHJcbiAgbGV0IHluID0gZHkgKyAoMSArIG0pICogKC13eiAqIHggKyB5ICsgd3ggKiB6KTtcclxuICBsZXQgem4gPSBkeiArICgxICsgbSkgKiAod3kgKiB4IC0gd3ggKiB5ICsgeik7XHJcblxyXG4gIGEgPSA2Mzc4MTM3LjA7XHJcbiAgZjEgPSAyOTguMjU3MjIzNTYzO1xyXG4gIGxldCBhQiA9IGYxIC8gKGYxIC0gMSk7XHJcbiAgbGV0IHAgPSBNYXRoLnNxcnQoeG4gKiB4biArIHluICogeW4pO1xyXG4gIGUyID0gMSAtICgxIC0gMSAvIGYxKSAqICgxIC0gMSAvIGYxKTtcclxuICBsZXQgdGhldGEgPSBNYXRoLmF0YW4oKHpuICogYUIpIC8gcCk7XHJcbiAgbGV0IHN0ID0gTWF0aC5zaW4odGhldGEpO1xyXG4gIGxldCBjdCA9IE1hdGguY29zKHRoZXRhKTtcclxuICB0ID0gKHpuICsgZTIgKiBhQiAqIGEgKiBzdCAqIHN0ICogc3QpIC8gKHAgLSBlMiAqIGEgKiBjdCAqIGN0ICogY3QpO1xyXG4gIGxldCBCID0gTWF0aC5hdGFuKHQpO1xyXG4gIGxldCBMID0gMiAqIE1hdGguYXRhbih5biAvIChwICsgeG4pKTtcclxuICBoID0gTWF0aC5zcXJ0KDEgKyB0ICogdCkgKiAocCAtIGEgLyBNYXRoLnNxcnQoMSArICgxIC0gZTIpICogdCAqIHQpKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGp0c2tfeDogb3JpZ2luYWxYLFxyXG4gICAganRza195OiBvcmlnaW5hbFksXHJcbiAgICBsYXQ6IHJvdW5kVG9ORGVjaW1hbFBsYWNlcygoQiAvIE1hdGguUEkpICogMTgwLCA2KSxcclxuICAgIGxvbjogcm91bmRUb05EZWNpbWFsUGxhY2VzKChMIC8gTWF0aC5QSSkgKiAxODAsIDYpLFxyXG4gICAgYWx0aXR1ZGU6IE1hdGgucm91bmQoaCAqIDEwMCkgLyAxMDAsXHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gcm91bmRUb05EZWNpbWFsUGxhY2VzKHRvUm91bmQ6IG51bWJlciwgZGVjaW1hbFBsYWNlczogbnVtYmVyKTogbnVtYmVyIHtcclxuICByZXR1cm4gKFxyXG4gICAgTWF0aC5yb3VuZCh0b1JvdW5kICogTWF0aC5wb3coMTAsIGRlY2ltYWxQbGFjZXMpKSAvXHJcbiAgICBNYXRoLnBvdygxMCwgZGVjaW1hbFBsYWNlcylcclxuICApO1xyXG59XHJcbiJdfQ==
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianRzazJ3Z3M4NC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9qdHNrMndnczg0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVVsRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxPQUFPLFVBQVUsVUFBVSxDQUNoQyxDQUFTLEVBQ1QsQ0FBUyxFQUNULElBQVksR0FBRztJQUVmLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNwQixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFcEIsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDO0lBQ3RCLElBQUksQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0lBQzFCLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDO0lBQ3pCLElBQUksR0FBRyxHQUFHLGlCQUFpQixDQUFDO0lBQzVCLElBQUksS0FBSyxHQUFHLGlCQUFpQixDQUFDO0lBQzlCLElBQUksS0FBSyxHQUFHLGlCQUFpQixDQUFDO0lBQzlCLElBQUksS0FBSyxHQUFHLGlCQUFpQixDQUFDO0lBQzlCLElBQUksS0FBSyxHQUFHLGlCQUFpQixDQUFDO0lBQzlCLElBQUksS0FBSyxHQUFHLGlCQUFpQixDQUFDO0lBQzlCLElBQUksQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0lBRTFCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1RSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3RDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDeEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN6QyxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDekMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUN2RCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFNUIsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBRWYsR0FBRztRQUNELElBQUksR0FBRyxHQUFHLENBQUM7UUFDWCxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzdCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFO0lBRXZDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXRELElBQUksRUFBRSxHQUFHLGFBQWEsQ0FBQztJQUN2QixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN6QyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDaEIsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ2YsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzVDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzdDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzdDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUNqQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0MsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRTlDLENBQUMsR0FBRyxTQUFTLENBQUM7SUFDZCxFQUFFLEdBQUcsYUFBYSxDQUFDO0lBQ25CLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNyQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDcEUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVyRSxPQUFPO1FBQ0wsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLFNBQVM7UUFDakIsR0FBRyxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsRCxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRztLQUNwQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJvdW5kVG9ORGVjaW1hbFBsYWNlcyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29udmVyc2lvblJlc3VsdCB7XHJcbiAganRza194OiBudW1iZXI7XHJcbiAganRza195OiBudW1iZXI7XHJcbiAgbGF0OiBudW1iZXI7XHJcbiAgbG9uOiBudW1iZXI7XHJcbiAgYWx0aXR1ZGU6IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgSlRTSyB0byBXR1M4NCAtIHRha2VuIGZyb20gQGFyb2RheC9qdHNrMndnczg0IHBhY2thZ2UgdGhhdCBoYWQgc29tZVxyXG4gKiBpbXBvcnQgaXNzdWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0geFxyXG4gKiBAcGFyYW0geVxyXG4gKiBAcGFyYW0gaFxyXG4gKiBAcmV0dXJuIHt7anRza194OiBudW1iZXIsIGp0c2tfeTogbnVtYmVyLCBsb246IG51bWJlciwgbGF0OiBudW1iZXIsIGFsdGl0dWRlOiBudW1iZXJ9fVxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ganRzazJ3Z3M4NChcclxuICB4OiBudW1iZXIsXHJcbiAgeTogbnVtYmVyLFxyXG4gIGg6IG51bWJlciA9IDIwMFxyXG4pOiBDb252ZXJzaW9uUmVzdWx0IHtcclxuICBjb25zdCBvcmlnaW5hbFggPSB4O1xyXG4gIGNvbnN0IG9yaWdpbmFsWSA9IHk7XHJcblxyXG4gIGxldCBhID0gNjM3NzM5Ny4xNTUwODtcclxuICBsZXQgZSA9IDAuMDgxNjk2ODMxMjE1MzAzO1xyXG4gIGxldCBuID0gMC45Nzk5MjQ3MDQ2MjA4MztcclxuICBsZXQgdVJvID0gMTIzMTAyMzAuMTI3OTcwMzY7XHJcbiAgbGV0IHNpblVRID0gMC44NjM0OTk5Njk1MDYzNDE7XHJcbiAgbGV0IGNvc1VRID0gMC41MDQzNDg4ODk4MTk4ODI7XHJcbiAgbGV0IHNpblZRID0gMC40MjAyMTUxNDQ1ODY0OTM7XHJcbiAgbGV0IGNvc1ZRID0gMC45MDc0MjQ1MDQ5OTIwOTc7XHJcbiAgbGV0IGFscGhhID0gMS4wMDA1OTc0OTgzNzE1NDI7XHJcbiAgbGV0IGsgPSAxLjAwMzQxOTE2Mzk2NjU3NTtcclxuXHJcbiAgbGV0IHJvID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xyXG4gIGxldCBlcHNpbG9uID0gMiAqIE1hdGguYXRhbih5IC8gKHJvICsgeCkpO1xyXG4gIGxldCBEID0gZXBzaWxvbiAvIG47XHJcbiAgbGV0IFMgPSAyICogTWF0aC5hdGFuKE1hdGguZXhwKCgxIC8gbikgKiBNYXRoLmxvZyh1Um8gLyBybykpKSAtIE1hdGguUEkgLyAyO1xyXG4gIGxldCBzaW5TID0gTWF0aC5zaW4oUyk7XHJcbiAgbGV0IGNvc1MgPSBNYXRoLmNvcyhTKTtcclxuICBsZXQgc2luVSA9IHNpblVRICogc2luUyAtIGNvc1VRICogY29zUyAqIE1hdGguY29zKEQpO1xyXG4gIGxldCBjb3NVID0gTWF0aC5zcXJ0KDEgLSBzaW5VICogc2luVSk7XHJcbiAgbGV0IHNpbkRWID0gKE1hdGguc2luKEQpICogY29zUykgLyBjb3NVO1xyXG4gIGxldCBjb3NEViA9IE1hdGguc3FydCgxIC0gc2luRFYgKiBzaW5EVik7XHJcbiAgbGV0IHNpblYgPSBzaW5WUSAqIGNvc0RWIC0gY29zVlEgKiBzaW5EVjtcclxuICBsZXQgY29zViA9IGNvc1ZRICogY29zRFYgKyBzaW5WUSAqIHNpbkRWO1xyXG4gIGxldCBsSnRzayA9ICgyICogTWF0aC5hdGFuKHNpblYgLyAoMSArIGNvc1YpKSkgLyBhbHBoYTtcclxuICBsZXQgdCA9IE1hdGguZXhwKCgyIC8gYWxwaGEpICogTWF0aC5sb2coKDEgKyBzaW5VKSAvIGNvc1UgLyBrKSk7XHJcbiAgbGV0IHBvbSA9ICh0IC0gMSkgLyAodCArIDEpO1xyXG5cclxuICBsZXQgc2luQiA9IHBvbTtcclxuXHJcbiAgZG8ge1xyXG4gICAgc2luQiA9IHBvbTtcclxuICAgIHBvbSA9IHQgKiBNYXRoLmV4cChlICogTWF0aC5sb2coKDEgKyBlICogc2luQikgLyAoMSAtIGUgKiBzaW5CKSkpO1xyXG4gICAgcG9tID0gKHBvbSAtIDEpIC8gKHBvbSArIDEpO1xyXG4gIH0gd2hpbGUgKE1hdGguYWJzKHBvbSAtIHNpbkIpID4gMWUtMTUpO1xyXG5cclxuICBsZXQgYkp0c2sgPSBNYXRoLmF0YW4ocG9tIC8gTWF0aC5zcXJ0KDEgLSBwb20gKiBwb20pKTtcclxuXHJcbiAgbGV0IGYxID0gMjk5LjE1MjgxMjg1MztcclxuICBsZXQgZTIgPSAxIC0gKDEgLSAxIC8gZjEpICogKDEgLSAxIC8gZjEpO1xyXG4gIHJvID0gYSAvIE1hdGguc3FydCgxIC0gZTIgKiBNYXRoLnNpbihiSnRzaykgKiBNYXRoLnNpbihiSnRzaykpO1xyXG4gIHggPSAocm8gKyBoKSAqIE1hdGguY29zKGJKdHNrKSAqIE1hdGguY29zKGxKdHNrKTtcclxuICB5ID0gKHJvICsgaCkgKiBNYXRoLmNvcyhiSnRzaykgKiBNYXRoLnNpbihsSnRzayk7XHJcbiAgbGV0IHogPSAoKDEgLSBlMikgKiBybyArIGgpICogTWF0aC5zaW4oYkp0c2spO1xyXG5cclxuICBsZXQgZHggPSA1NzAuNjk7XHJcbiAgbGV0IGR5ID0gODUuNjk7XHJcbiAgbGV0IGR6ID0gNDYyLjg0O1xyXG4gIGxldCB3eiA9ICgoLTUuMjYxMSAvIDM2MDApICogTWF0aC5QSSkgLyAxODA7XHJcbiAgbGV0IHd5ID0gKCgtMS41ODY3NiAvIDM2MDApICogTWF0aC5QSSkgLyAxODA7XHJcbiAgbGV0IHd4ID0gKCgtNC45OTgyMSAvIDM2MDApICogTWF0aC5QSSkgLyAxODA7XHJcbiAgbGV0IG0gPSAzLjU0M2UtNjtcclxuICBsZXQgeG4gPSBkeCArICgxICsgbSkgKiAoeCArIHd6ICogeSAtIHd5ICogeik7XHJcbiAgbGV0IHluID0gZHkgKyAoMSArIG0pICogKC13eiAqIHggKyB5ICsgd3ggKiB6KTtcclxuICBsZXQgem4gPSBkeiArICgxICsgbSkgKiAod3kgKiB4IC0gd3ggKiB5ICsgeik7XHJcblxyXG4gIGEgPSA2Mzc4MTM3LjA7XHJcbiAgZjEgPSAyOTguMjU3MjIzNTYzO1xyXG4gIGxldCBhQiA9IGYxIC8gKGYxIC0gMSk7XHJcbiAgbGV0IHAgPSBNYXRoLnNxcnQoeG4gKiB4biArIHluICogeW4pO1xyXG4gIGUyID0gMSAtICgxIC0gMSAvIGYxKSAqICgxIC0gMSAvIGYxKTtcclxuICBsZXQgdGhldGEgPSBNYXRoLmF0YW4oKHpuICogYUIpIC8gcCk7XHJcbiAgbGV0IHN0ID0gTWF0aC5zaW4odGhldGEpO1xyXG4gIGxldCBjdCA9IE1hdGguY29zKHRoZXRhKTtcclxuICB0ID0gKHpuICsgZTIgKiBhQiAqIGEgKiBzdCAqIHN0ICogc3QpIC8gKHAgLSBlMiAqIGEgKiBjdCAqIGN0ICogY3QpO1xyXG4gIGxldCBCID0gTWF0aC5hdGFuKHQpO1xyXG4gIGxldCBMID0gMiAqIE1hdGguYXRhbih5biAvIChwICsgeG4pKTtcclxuICBoID0gTWF0aC5zcXJ0KDEgKyB0ICogdCkgKiAocCAtIGEgLyBNYXRoLnNxcnQoMSArICgxIC0gZTIpICogdCAqIHQpKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGp0c2tfeDogb3JpZ2luYWxYLFxyXG4gICAganRza195OiBvcmlnaW5hbFksXHJcbiAgICBsYXQ6IHJvdW5kVG9ORGVjaW1hbFBsYWNlcygoQiAvIE1hdGguUEkpICogMTgwLCA2KSxcclxuICAgIGxvbjogcm91bmRUb05EZWNpbWFsUGxhY2VzKChMIC8gTWF0aC5QSSkgKiAxODAsIDYpLFxyXG4gICAgYWx0aXR1ZGU6IE1hdGgucm91bmQoaCAqIDEwMCkgLyAxMDAsXHJcbiAgfTtcclxufVxyXG4iXX0=
|
package/package.json
CHANGED
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
},
|
|
74
74
|
"name": "text-to-map",
|
|
75
75
|
"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.
|
|
76
|
+
"version": "1.1.34",
|
|
77
77
|
"main": "dist/index.js",
|
|
78
78
|
"types": "dist/index.d.ts",
|
|
79
79
|
"files": [
|