@kepler.gl/duckdb 3.1.0 → 3.1.2

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/plugin.js CHANGED
@@ -7,7 +7,6 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.keplerGlDuckDBPlugin = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
- var _init = require("./init");
11
10
  // SPDX-License-Identifier: MIT
12
11
  // Copyright contributors to the kepler.gl project
13
12
 
@@ -18,17 +17,8 @@ var keplerGlDuckDBPlugin = exports.keplerGlDuckDBPlugin = {
18
17
  return _regenerator["default"].wrap(function _callee$(_context) {
19
18
  while (1) switch (_context.prev = _context.next) {
20
19
  case 0:
21
- _context.next = 2;
22
- return (0, _init.initializeDuckDb)({
23
- config: {
24
- query: {
25
- castBigIntToDouble: true
26
- }
27
- }
28
- });
29
- case 2:
30
20
  console.log('kepler.gl DuckDB Plugin initialized');
31
- case 3:
21
+ case 1:
32
22
  case "end":
33
23
  return _context.stop();
34
24
  }
@@ -36,4 +26,4 @@ var keplerGlDuckDBPlugin = exports.keplerGlDuckDBPlugin = {
36
26
  }))();
37
27
  }
38
28
  };
39
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5pdCIsInJlcXVpcmUiLCJrZXBsZXJHbER1Y2tEQlBsdWdpbiIsImV4cG9ydHMiLCJuYW1lIiwiaW5pdCIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImluaXRpYWxpemVEdWNrRGIiLCJjb25maWciLCJxdWVyeSIsImNhc3RCaWdJbnRUb0RvdWJsZSIsImNvbnNvbGUiLCJsb2ciLCJzdG9wIl0sInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2luaXRpYWxpemVEdWNrRGJ9IGZyb20gJy4vaW5pdCc7XG5cbmV4cG9ydCBjb25zdCBrZXBsZXJHbER1Y2tEQlBsdWdpbiA9IHtcbiAgbmFtZTogJ2R1Y2tkYicsXG4gIGFzeW5jIGluaXQoKSB7XG4gICAgYXdhaXQgaW5pdGlhbGl6ZUR1Y2tEYih7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICBjYXN0QmlnSW50VG9Eb3VibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKCdrZXBsZXIuZ2wgRHVja0RCIFBsdWdpbiBpbml0aWFsaXplZCcpO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFIQTtBQUNBOztBQUlPLElBQU1DLG9CQUFvQixHQUFBQyxPQUFBLENBQUFELG9CQUFBLEdBQUc7RUFDbENFLElBQUksRUFBRSxRQUFRO0VBQ1JDLElBQUksV0FBSkEsSUFBSUEsQ0FBQSxFQUFHO0lBQUEsV0FBQUMsa0JBQUEsMkJBQUFDLFlBQUEsWUFBQUMsSUFBQSxVQUFBQyxRQUFBO01BQUEsT0FBQUYsWUFBQSxZQUFBRyxJQUFBLFVBQUFDLFNBQUFDLFFBQUE7UUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtVQUFBO1lBQUFGLFFBQUEsQ0FBQUUsSUFBQTtZQUFBLE9BQ0wsSUFBQUMsc0JBQWdCLEVBQUM7Y0FDckJDLE1BQU0sRUFBRTtnQkFDTkMsS0FBSyxFQUFFO2tCQUNMQyxrQkFBa0IsRUFBRTtnQkFDdEI7Y0FDRjtZQUNGLENBQUMsQ0FBQztVQUFBO1lBQ0ZDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLHFDQUFxQyxDQUFDO1VBQUM7VUFBQTtZQUFBLE9BQUFSLFFBQUEsQ0FBQVMsSUFBQTtRQUFBO01BQUEsR0FBQVosT0FBQTtJQUFBO0VBQ3JEO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
29
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJrZXBsZXJHbER1Y2tEQlBsdWdpbiIsImV4cG9ydHMiLCJuYW1lIiwiaW5pdCIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImNvbnNvbGUiLCJsb2ciLCJzdG9wIl0sInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5leHBvcnQgY29uc3Qga2VwbGVyR2xEdWNrREJQbHVnaW4gPSB7XG4gIG5hbWU6ICdkdWNrZGInLFxuICBhc3luYyBpbml0KCkge1xuICAgIGNvbnNvbGUubG9nKCdrZXBsZXIuZ2wgRHVja0RCIFBsdWdpbiBpbml0aWFsaXplZCcpO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVPLElBQU1BLG9CQUFvQixHQUFBQyxPQUFBLENBQUFELG9CQUFBLEdBQUc7RUFDbENFLElBQUksRUFBRSxRQUFRO0VBQ1JDLElBQUksV0FBSkEsSUFBSUEsQ0FBQSxFQUFHO0lBQUEsV0FBQUMsa0JBQUEsMkJBQUFDLFlBQUEsWUFBQUMsSUFBQSxVQUFBQyxRQUFBO01BQUEsT0FBQUYsWUFBQSxZQUFBRyxJQUFBLFVBQUFDLFNBQUFDLFFBQUE7UUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtVQUFBO1lBQ1hDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLHFDQUFxQyxDQUFDO1VBQUM7VUFBQTtZQUFBLE9BQUFKLFFBQUEsQ0FBQUssSUFBQTtRQUFBO01BQUEsR0FBQVIsT0FBQTtJQUFBO0VBQ3JEO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -10,6 +10,7 @@ export declare type ProcessorResult = {
10
10
  rows: RowData;
11
11
  fields: ProtoDatasetField[];
12
12
  };
13
+ export declare const COLUMN_TYPES_PRIORITIES: string[];
13
14
  export declare function columnTypeToFieldType(columnType: string): string | null;
14
15
  export declare function fieldTypeToColumnType(fieldType: string): string | null;
15
16
  export declare function processKeplerglJSONforDuckDb(keplerJson: any): Promise<ReturnType<typeof processKeplerglJSON>>;
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.CSV_NULLS = void 0;
7
+ exports.CSV_NULLS = exports.COLUMN_TYPES_PRIORITIES = void 0;
8
8
  exports.columnTypeToFieldType = columnTypeToFieldType;
9
9
  exports.fieldTypeToColumnType = fieldTypeToColumnType;
10
10
  exports.processCsvRowObject = processCsvRowObject;
@@ -17,7 +17,7 @@ var _geojsonNormalize = _interopRequireDefault(require("@mapbox/geojson-normaliz
17
17
  var _commonUtils = require("@kepler.gl/common-utils");
18
18
  var _constants = require("@kepler.gl/constants");
19
19
  var _processors = require("@kepler.gl/processors");
20
- var _init = require("../init");
20
+ var _utils = require("@kepler.gl/utils");
21
21
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
22
22
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
23
23
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -35,8 +35,8 @@ var COLUMN_TYPES = /*#__PURE__*/function (COLUMN_TYPES) {
35
35
  COLUMN_TYPES["TIMESTAMP"] = "TIMESTAMP";
36
36
  COLUMN_TYPES["VARCHAR"] = "VARCHAR";
37
37
  return COLUMN_TYPES;
38
- }(COLUMN_TYPES || {}); // @ts-expect-error https://duckdb.org/docs/data/csv/auto_detection.html#type-detection
39
- var COLUMN_TYPES_PRIORITIES = ['GEOMETRY', 'BOOLEAN', 'INTEGER', 'FLOAT', 'TIME', 'DATE', 'TIMESTAMP', 'VARCHAR'];
38
+ }(COLUMN_TYPES || {}); // https://duckdb.org/docs/data/csv/auto_detection.html#type-detection
39
+ var COLUMN_TYPES_PRIORITIES = exports.COLUMN_TYPES_PRIORITIES = ['GEOMETRY', 'BOOLEAN', 'INTEGER', 'FLOAT', 'TIME', 'DATE', 'TIMESTAMP', 'VARCHAR'];
40
40
  function columnTypeToFieldType(columnType) {
41
41
  switch (columnType) {
42
42
  case COLUMN_TYPES.BOOLEAN:
@@ -277,21 +277,25 @@ function _sniffCsvSchema() {
277
277
  csvContent = sample.reduce(function (accu, row) {
278
278
  return "".concat(accu).concat(toCSVRow(Object.values(row)));
279
279
  }, headerRow);
280
- _context4.next = 6;
281
- return (0, _init.getDuckDB)();
282
- case 6:
283
- db = _context4.sent;
284
- _context4.next = 9;
280
+ db = (0, _utils.getApplicationConfig)().database;
281
+ if (db) {
282
+ _context4.next = 8;
283
+ break;
284
+ }
285
+ console.error('The database is not configured properly.');
286
+ return _context4.abrupt("return");
287
+ case 8:
288
+ _context4.next = 10;
285
289
  return db.connect();
286
- case 9:
290
+ case 10:
287
291
  c = _context4.sent;
288
292
  fileName = (0, _commonUtils.generateHashId)();
289
- _context4.next = 13;
293
+ _context4.next = 14;
290
294
  return db.registerFileText("".concat(fileName, "-").concat(_commonUtils.generateHashId, ".csv"), csvContent);
291
- case 13:
292
- _context4.next = 15;
295
+ case 14:
296
+ _context4.next = 16;
293
297
  return c.query("\n FROM sniff_csv('".concat(fileName, "-").concat(_commonUtils.generateHashId, ".csv', \n sample_size = 500,\n auto_type_candidates = ['FLOAT', 'INTEGER', 'TIMESTAMP', 'DATE', 'TIME', 'VARCHAR', 'BOOLEAN']);\n "));
294
- case 15:
298
+ case 16:
295
299
  result = _context4.sent;
296
300
  schemaResult = result.toArray().map(function (row) {
297
301
  return row.toJSON();
@@ -302,7 +306,7 @@ function _sniffCsvSchema() {
302
306
  schema[columns.get(i).name] = columns.get(i).type;
303
307
  }
304
308
  return _context4.abrupt("return", schema);
305
- case 21:
309
+ case 22:
306
310
  case "end":
307
311
  return _context4.stop();
308
312
  }
@@ -324,4 +328,4 @@ function processGeojson(rawData) {
324
328
  // fields: []
325
329
  };
326
330
  }
327
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2VvanNvbk5vcm1hbGl6ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvbW1vblV0aWxzIiwiX2NvbnN0YW50cyIsIl9wcm9jZXNzb3JzIiwiX2luaXQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJDU1ZfTlVMTFMiLCJleHBvcnRzIiwiQ09MVU1OX1RZUEVTIiwiQ09MVU1OX1RZUEVTX1BSSU9SSVRJRVMiLCJjb2x1bW5UeXBlVG9GaWVsZFR5cGUiLCJjb2x1bW5UeXBlIiwiQk9PTEVBTiIsIkFMTF9GSUVMRF9UWVBFUyIsIkRBVEUiLCJkYXRlIiwiSU5URUdFUiIsImludGVnZXIiLCJGTE9BVCIsInJlYWwiLCJWQVJDSEFSIiwic3RyaW5nIiwiVElNRVNUQU1QIiwidGltZXN0YW1wIiwiR0VPTUVUUlkiLCJnZW9qc29uIiwiY29uc29sZSIsIndhcm4iLCJjb25jYXQiLCJmaWVsZFR5cGVUb0NvbHVtblR5cGUiLCJmaWVsZFR5cGUiLCJwcm9jZXNzS2VwbGVyZ2xKU09OZm9yRHVja0RiIiwiX3giLCJfcHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYiIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwia2VwbGVySnNvbiIsInJlcyIsImRhdGFzZXRzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJfbG9vcDIiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dDIiLCJwcmV2IiwicHJvY2Vzc0tlcGxlcmdsSlNPTiIsImRhdGFzZXQiLCJyb3dzQWxsIiwiZmllbGRzQWxsIiwiaGVhZGVyIiwic2FtcGxlIiwic2NoZW1hIiwiZmllbGRzVXBkIiwiX2xvb3AyJCIsIl9jb250ZXh0IiwiZGF0YSIsInJvd3MiLCJmaWVsZHMiLCJtYXAiLCJnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZSIsInNuaWZmQ3N2U2NoZW1hIiwidDAiLCJzZW50IiwicmVkdWNlIiwiYWNjIiwiZmllbGQiLCJ0eXBlIiwiY29uc29saWRhdGVGaWVsZFR5cGVzIiwiaSIsInN0b3AiLCJkZWxlZ2F0ZVlpZWxkIiwidDEiLCJmaW5pc2giLCJhYnJ1cHQiLCJwcm9jZXNzQ3N2Um93T2JqZWN0IiwiX3gyIiwiX3Byb2Nlc3NDc3ZSb3dPYmplY3QiLCJfY2FsbGVlMiIsInJhd0RhdGEiLCJmaWVsZHNXQW5hbHl6ZXJUeXBlIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQzIiwiY2xlYW5VcEZhbHN5Q3N2VmFsdWUiLCJnZXRGaWVsZHNGcm9tRGF0YSIsInJlIiwiUmVnRXhwIiwiX2xvb3AiLCJrZXkiLCJtYXRjaCIsImNvbHVtbk5hbWUiLCJkZXRlY3RlZENvbHVtblR5cGUiLCJkdWNrREJDb2x1bW5UeXBlIiwidG9DU1ZSb3ciLCJyb3ciLCJyVG9TdHIiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJTdHJpbmciLCJyZXBsYWNlIiwiaW5jbHVkZXMiLCJqb2luIiwiX3gzIiwiX3NuaWZmQ3N2U2NoZW1hIiwiX2NhbGxlZTMiLCJoZWFkZXJSb3ciLCJjc3ZDb250ZW50IiwiZGIiLCJjIiwiZmlsZU5hbWUiLCJyZXN1bHQiLCJzY2hlbWFSZXN1bHQiLCJjb2x1bW5zIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQ0IiwiYWNjdSIsInZhbHVlcyIsImdldER1Y2tEQiIsImNvbm5lY3QiLCJnZW5lcmF0ZUhhc2hJZCIsInJlZ2lzdGVyRmlsZVRleHQiLCJxdWVyeSIsInRvQXJyYXkiLCJ0b0pTT04iLCJDb2x1bW5zIiwiZ2V0IiwicHJvY2Vzc0dlb2pzb24iLCJub3JtYWxpemVkR2VvanNvbiIsIm5vcm1hbGl6ZSIsImZlYXR1cmVzIiwiZXJyb3IiLCJFcnJvciIsIkdVSURFU19GSUxFX0ZPUk1BVF9ET0MiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvY2Vzc29ycy9kYXRhLXByb2Nlc3Nvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IG5vcm1hbGl6ZSBmcm9tICdAbWFwYm94L2dlb2pzb24tbm9ybWFsaXplJztcblxuaW1wb3J0IHtcbiAgZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUsXG4gIGdldEZpZWxkc0Zyb21EYXRhLFxuICBnZW5lcmF0ZUhhc2hJZCxcbiAgbm90TnVsbG9yVW5kZWZpbmVkXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7UHJvdG9EYXRhc2V0RmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtBTExfRklFTERfVFlQRVMsIEdVSURFU19GSUxFX0ZPUk1BVF9ET0N9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7cHJvY2Vzc0tlcGxlcmdsSlNPTn0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcblxuaW1wb3J0IHtnZXREdWNrREJ9IGZyb20gJy4uL2luaXQnO1xuXG5leHBvcnQgY29uc3QgQ1NWX05VTExTID0gL14obnVsbHxOVUxMfE51bGx8TmFOfFxcL058fCkkLztcblxudHlwZSBSb3dzQXNBcnJheSA9IGFueVtdW107XG50eXBlIFJvd3NBc09iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG50eXBlIFJvd0RhdGEgPSBSb3dzQXNBcnJheSB8IFJvd3NBc09iamVjdDtcblxuZXhwb3J0IHR5cGUgUHJvY2Vzc29yUmVzdWx0ID0ge1xuICBjb2xzPzogYXJyb3cuVmVjdG9yW107XG4gIHJvd3M6IFJvd0RhdGE7XG4gIGZpZWxkczogUHJvdG9EYXRhc2V0RmllbGRbXTtcbn07XG5cbmVudW0gQ09MVU1OX1RZUEVTIHtcbiAgR0VPTUVUUlkgPSAnR0VPTUVUUlknLFxuICBCT09MRUFOID0gJ0JPT0xFQU4nLFxuICBJTlRFR0VSID0gJ0lOVEVHRVInLFxuICBGTE9BVCA9ICdGTE9BVCcsXG4gIFRJTUUgPSAnVElNRScsXG4gIERBVEUgPSAnREFURScsXG4gIFRJTUVTVEFNUCA9ICdUSU1FU1RBTVAnLFxuICBWQVJDSEFSID0gJ1ZBUkNIQVInXG59XG4vLyBAdHMtZXhwZWN0LWVycm9yIGh0dHBzOi8vZHVja2RiLm9yZy9kb2NzL2RhdGEvY3N2L2F1dG9fZGV0ZWN0aW9uLmh0bWwjdHlwZS1kZXRlY3Rpb25cbmNvbnN0IENPTFVNTl9UWVBFU19QUklPUklUSUVTID0gW1xuICAnR0VPTUVUUlknLFxuICAnQk9PTEVBTicsXG4gICdJTlRFR0VSJyxcbiAgJ0ZMT0FUJyxcbiAgJ1RJTUUnLFxuICAnREFURScsXG4gICdUSU1FU1RBTVAnLFxuICAnVkFSQ0hBUidcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2x1bW5UeXBlVG9GaWVsZFR5cGUoY29sdW1uVHlwZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIHN3aXRjaCAoY29sdW1uVHlwZSkge1xuICAgIGNhc2UgQ09MVU1OX1RZUEVTLkJPT0xFQU46XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW47XG4gICAgY2FzZSBDT0xVTU5fVFlQRVMuREFURTpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuZGF0ZTtcbiAgICBjYXNlIENPTFVNTl9UWVBFUy5JTlRFR0VSOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyO1xuICAgIGNhc2UgQ09MVU1OX1RZUEVTLkZMT0FUOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5yZWFsO1xuICAgIGNhc2UgQ09MVU1OX1RZUEVTLlZBUkNIQVI6XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLnN0cmluZztcbiAgICBjYXNlIENPTFVNTl9UWVBFUy5USU1FU1RBTVA6XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDtcbiAgICBjYXNlIENPTFVNTl9UWVBFUy5HRU9NRVRSWTpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuZ2VvanNvbjtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gaXMgdGhlcmUgYW55IG90aGVyIHR5cGUgd2UgZGlkbid0IGNvdmVyP1xuICAgICAgY29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCBEdWNrREIgQ29sdW1uIHR5cGU6ICR7Y29sdW1uVHlwZX1gKTtcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZFR5cGVUb0NvbHVtblR5cGUoZmllbGRUeXBlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5ib29sZWFuOlxuICAgICAgcmV0dXJuIENPTFVNTl9UWVBFUy5CT09MRUFOO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmRhdGU6XG4gICAgICByZXR1cm4gQ09MVU1OX1RZUEVTLkRBVEU7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICAgIHJldHVybiBDT0xVTU5fVFlQRVMuSU5URUdFUjtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgICAgcmV0dXJuIENPTFVNTl9UWVBFUy5GTE9BVDtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5zdHJpbmc6XG4gICAgICByZXR1cm4gQ09MVU1OX1RZUEVTLlZBUkNIQVI7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wOlxuICAgICAgcmV0dXJuIENPTFVNTl9UWVBFUy5USU1FU1RBTVA7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuZ2VvanNvbjpcbiAgICAgIHJldHVybiBDT0xVTU5fVFlQRVMuR0VPTUVUUlk7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGlzIHRoZXJlIGFueSBvdGhlciB0eXBlIHdlIGRpZG4ndCBjb3Zlcj9cbiAgICAgIGNvbnNvbGUud2FybihgVW5zdXBwb3J0ZWQgRmllbGQgdHlwZSBmb3IgRHVja0RiOiAke2ZpZWxkVHlwZX1gKTtcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qXG4gKiBQcm9jZXNzIHVwbG9hZGVkIGV4cG9ydGVkIEtlcGxlcmdsIGpzb24gbWFwLlxuICogV2UgbmVlZCB0byBwb3B1bGF0ZSBmaWVsZCB3aXRoIHByb3BlciBEdWNrRGIgY29tcGF0aWJsZSB0eXBlLlxuICovXG4vLyBUT0RPOiBtZXJnZSB3aXRoIGxvZ2ljIGZyb20gcHJvY2Vzc0NzdlJvd09iamVjdC4gRGlmZmVyZW50IGZvcm1hdHM6IFtbXV0gdnMgW3t9XVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NLZXBsZXJnbEpTT05mb3JEdWNrRGIoXG4gIGtlcGxlckpzb25cbik6IFByb21pc2U8UmV0dXJuVHlwZTx0eXBlb2YgcHJvY2Vzc0tlcGxlcmdsSlNPTj4+IHtcbiAgY29uc3QgcmVzID0gcHJvY2Vzc0tlcGxlcmdsSlNPTihrZXBsZXJKc29uKTtcblxuICBjb25zdCBkYXRhc2V0cyA9IHJlcz8uZGF0YXNldHMgfHwgW107XG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cykge1xuICAgIGNvbnN0IHJvd3NBbGwgPSBkYXRhc2V0LmRhdGEucm93cztcbiAgICBjb25zdCBmaWVsZHNBbGwgPSBkYXRhc2V0LmRhdGEuZmllbGRzO1xuXG4gICAgY29uc3QgaGVhZGVyID0gZmllbGRzQWxsLm1hcChmID0+IGYubmFtZSk7XG4gICAgY29uc3Qgc2FtcGxlID0gZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUoe2ZpZWxkczogaGVhZGVyLCByb3dzOiByb3dzQWxsfSk7XG5cbiAgICBjb25zdCBzY2hlbWEgPVxuICAgICAgc2FtcGxlLmxlbmd0aCA+IDBcbiAgICAgICAgPyBhd2FpdCBzbmlmZkNzdlNjaGVtYShzYW1wbGUpXG4gICAgICAgIDogZmllbGRzQWxsLnJlZHVjZSgoYWNjLCBmaWVsZCkgPT4ge1xuICAgICAgICAgICAgYWNjW2ZpZWxkLm5hbWVdID0gZmllbGRUeXBlVG9Db2x1bW5UeXBlKGZpZWxkLnR5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LCB7fSk7XG4gICAgY29uc3QgZmllbGRzVXBkID0gY29uc29saWRhdGVGaWVsZFR5cGVzKGRhdGFzZXQuZGF0YS5maWVsZHMsIHNjaGVtYSk7XG5cbiAgICBkYXRhc2V0LmRhdGEuZmllbGRzID0gZmllbGRzQWxsLm1hcCgoZiwgaSkgPT4ge1xuICAgICAgcmV0dXJuIHsuLi5maWVsZHNVcGRbaV0sIC4uLmZ9O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuLypcbiAqIFByb2Nlc3MgdXBsb2FkZWQgY3N2IHJldHVybmVkIGJ5IGxvYWRlcnMuZ2wgYXMgcm93IG9iamVjdCBhbmQgc3RyaW5nIHZhbHVlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzQ3N2Um93T2JqZWN0KFxuICByYXdEYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsPltdXG4pOiBQcm9taXNlPFByb2Nlc3NvclJlc3VsdD4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3RGF0YSkgfHwgIXJhd0RhdGEubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpZWxkczogW10sXG4gICAgICByb3dzOiBbXVxuICAgIH07XG4gIH1cblxuICBjb25zdCBoZWFkZXIgPSBPYmplY3Qua2V5cyhyYXdEYXRhWzBdKTsgLy8gW2xhdCwgbG5nLCB2YWx1ZV1cblxuICAvLyByb3cgb2JqZWN0IGNhbiBzdGlsbCBjb250YWluIHZhbHVlcyBsaWtlIGBOdWxsYCBvciBgTi9BYFxuICBjbGVhblVwRmFsc3lDc3ZWYWx1ZShyYXdEYXRhKTtcbiAgY29uc3Qgc2FtcGxlID0gZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUoe2ZpZWxkczogaGVhZGVyLCByb3dzOiByYXdEYXRhfSk7XG4gIC8vIGFkZCBzYW1wbGUgZGF0YSB0byBkdWNrZGIgYW5kIGdldCBzY2hlbWFcbiAgY29uc3Qgc2NoZW1hID0gYXdhaXQgc25pZmZDc3ZTY2hlbWEoc2FtcGxlKTtcblxuICBjb25zdCBmaWVsZHNXQW5hbHl6ZXJUeXBlID0gZ2V0RmllbGRzRnJvbURhdGEoc2FtcGxlLCBoZWFkZXIpO1xuXG4gIGNvbnN0IGZpZWxkcyA9IGNvbnNvbGlkYXRlRmllbGRUeXBlcyhmaWVsZHNXQW5hbHl6ZXJUeXBlLCBzY2hlbWEpO1xuXG4gIHJldHVybiB7cm93czogcmF3RGF0YSwgZmllbGRzfTtcbn1cblxuZnVuY3Rpb24gY2xlYW5VcEZhbHN5Q3N2VmFsdWUocm93czogUm93RGF0YSk6IHZvaWQge1xuICBjb25zdCByZSA9IG5ldyBSZWdFeHAoQ1NWX05VTExTLCAnZycpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICBPYmplY3Qua2V5cyhyb3dzW2ldKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAvLyBoZXJlIHdlIHBhcnNlIGVtcHR5IGRhdGEgYXMgbnVsbFxuICAgICAgaWYgKHR5cGVvZiByb3dzW2ldW2tleV0gPT09ICdzdHJpbmcnICYmIChyb3dzW2ldW2tleV0gYXMgc3RyaW5nKS5tYXRjaChyZSkpIHtcbiAgICAgICAgcm93c1tpXVtrZXldID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vLyBhbGlnbiB0eXBlIGFuYWx5emVyIHR5cGVzIHdpdGggRHVja0RCIGNzdiBhdXRvIGRldGVjdGVkIGNvbHVtbiB0eXBlc1xuZnVuY3Rpb24gY29uc29saWRhdGVGaWVsZFR5cGVzKGZpZWxkcywgc2NoZW1hKSB7XG4gIHJldHVybiBmaWVsZHMubWFwKGZpZWxkID0+IHtcbiAgICBjb25zdCBjb2x1bW5OYW1lID0gZmllbGQubmFtZTtcblxuICAgIGNvbnN0IGRldGVjdGVkQ29sdW1uVHlwZSA9IHNjaGVtYVtjb2x1bW5OYW1lXTtcblxuICAgIC8vIFRPRE8gY29sdW1uVHlwZVRvRmllbGRUeXBlIHRyYW5mb3JtcyBkZXRlY3RlZCB0aW1lc3RhbXBzIHRvIHN0cmluZyxcbiAgICAvLyBjb21wbGV0ZWx5IGJyZWFraW5nIHRpbWUgZmlsdGVyIGxvZ2ljLlxuICAgIC8vIGNvbnN0IGZpZWxkVHlwZSA9IGNvbHVtblR5cGVUb0ZpZWxkVHlwZShkZXRlY3RlZENvbHVtblR5cGUpIHx8IGZpZWxkLnR5cGU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZmllbGQsXG4gICAgICAvLyB0eXBlOiBmaWVsZFR5cGUsXG4gICAgICBkdWNrREJDb2x1bW5UeXBlOiBkZXRlY3RlZENvbHVtblR5cGVcbiAgICB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdG9DU1ZSb3cocm93OiB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7cm93XG4gICAgLm1hcChyID0+IHtcbiAgICAgIGNvbnN0IHJUb1N0ciA9IG5vdE51bGxvclVuZGVmaW5lZChyKSA/IFN0cmluZyhyKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykgOiAnJztcbiAgICAgIHJldHVybiByVG9TdHIuaW5jbHVkZXMoJywnKSA/IGBcIiR7clRvU3RyfVwiYCA6IHJUb1N0cjtcbiAgICB9KVxuICAgIC5qb2luKCcsJyl9XFxuYDtcbn1cblxuLy8gVXNlIER1Y2NrREIgdG8gZGV0ZWN0IGNzdiBjb2x1bW4gc2NoZW1hXG5hc3luYyBmdW5jdGlvbiBzbmlmZkNzdlNjaGVtYShzYW1wbGU6IFJvd0RhdGEpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHNhbXBsZSkgfHwgc2FtcGxlLmxlbmd0aCA8IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaGVhZGVyUm93ID0gdG9DU1ZSb3coT2JqZWN0LmtleXMoc2FtcGxlWzBdKSk7XG5cbiAgY29uc3QgY3N2Q29udGVudCA9IChzYW1wbGUgYXMgKGFueVtdIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW10pLnJlZHVjZShcbiAgICAoYWNjdTogc3RyaW5nLCByb3cpID0+IGAke2FjY3V9JHt0b0NTVlJvdyhPYmplY3QudmFsdWVzKHJvdykpfWAsXG4gICAgaGVhZGVyUm93XG4gICk7XG5cbiAgY29uc3QgZGIgPSBhd2FpdCBnZXREdWNrREIoKTtcbiAgY29uc3QgYyA9IGF3YWl0IGRiLmNvbm5lY3QoKTtcblxuICBjb25zdCBmaWxlTmFtZSA9IGdlbmVyYXRlSGFzaElkKCk7XG4gIGF3YWl0IGRiLnJlZ2lzdGVyRmlsZVRleHQoYCR7ZmlsZU5hbWV9LSR7Z2VuZXJhdGVIYXNoSWR9LmNzdmAsIGNzdkNvbnRlbnQpO1xuXG4gIC8vIGh0dHBzOi8vZHVja2RiLm9yZy9kb2NzL2RhdGEvY3N2L2F1dG9fZGV0ZWN0aW9uLmh0bWxcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYy5xdWVyeShgXG4gICAgICAgIEZST00gc25pZmZfY3N2KCcke2ZpbGVOYW1lfS0ke2dlbmVyYXRlSGFzaElkfS5jc3YnLCBcbiAgICAgICAgc2FtcGxlX3NpemUgPSA1MDAsXG4gICAgICAgIGF1dG9fdHlwZV9jYW5kaWRhdGVzID0gWydGTE9BVCcsICdJTlRFR0VSJywgJ1RJTUVTVEFNUCcsICdEQVRFJywgJ1RJTUUnLCAnVkFSQ0hBUicsICdCT09MRUFOJ10pO1xuICAgIGApO1xuXG4gIGNvbnN0IHNjaGVtYVJlc3VsdCA9IHJlc3VsdC50b0FycmF5KCkubWFwKHJvdyA9PiByb3cudG9KU09OKCkpO1xuXG4gIGNvbnN0IGNvbHVtbnMgPSBzY2hlbWFSZXN1bHRbMF0uQ29sdW1ucztcbiAgY29uc3Qgc2NoZW1hID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgIHNjaGVtYVtjb2x1bW5zLmdldChpKS5uYW1lXSA9IGNvbHVtbnMuZ2V0KGkpLnR5cGU7XG4gIH1cblxuICByZXR1cm4gc2NoZW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0dlb2pzb24ocmF3RGF0YTogdW5rbm93bik6IFByb2Nlc3NvclJlc3VsdCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRHZW9qc29uID0gbm9ybWFsaXplKHJhd0RhdGEpO1xuXG4gIGlmICghbm9ybWFsaXplZEdlb2pzb24gfHwgIUFycmF5LmlzQXJyYXkobm9ybWFsaXplZEdlb2pzb24uZmVhdHVyZXMpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICBgUmVhZCBGaWxlIEZhaWxlZDogRmlsZSBpcyBub3QgYSB2YWxpZCBHZW9KU09OLiBSZWFkIG1vcmUgYWJvdXQgW3N1cHBvcnRlZCBmaWxlIGZvcm1hdF0oJHtHVUlERVNfRklMRV9GT1JNQVRfRE9DfSlgXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgRG9uJ3QgcGFzcyBlbXB0eSBmaWVsZHMsIGFzIGR1Y2sgZGIgb3V0cHV0cyBhbiBlbXB0eSBkYXRhc2V0XG4gIHJldHVybiB7XG4gICAgcm93czogbm9ybWFsaXplZEdlb2pzb25cbiAgICAvLyBUT0RPIGdldCBmaWVsZHMgdG8gcHJlc2VydmUgZmllbGQgbmFtZXM/XG4gICAgLy8gZmllbGRzOiBb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a0YsUUFBUSxPQUFBbEYsTUFBQSxDQUFJNEYsMkJBQWMsV0FBUWIsVUFBVSxDQUFDO1FBQUE7VUFBQVEsU0FBQSxDQUFBckksSUFBQTtVQUFBLE9BR3JEK0gsQ0FBQyxDQUFDYSxLQUFLLDhCQUFBOUYsTUFBQSxDQUNKa0YsUUFBUSxPQUFBbEYsTUFBQSxDQUFJNEYsMkJBQWMsd0pBRy9DLENBQUM7UUFBQTtVQUpFVCxNQUFNLEdBQUFJLFNBQUEsQ0FBQWxELElBQUE7VUFNTitDLFlBQVksR0FBR0QsTUFBTSxDQUFDWSxPQUFPLENBQUMsQ0FBQyxDQUFDOUQsR0FBRyxDQUFDLFVBQUFtQyxHQUFHO1lBQUEsT0FBSUEsR0FBRyxDQUFDNEIsTUFBTSxDQUFDLENBQUM7VUFBQSxFQUFDO1VBRXhEWCxPQUFPLEdBQUdELFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQ2EsT0FBTztVQUNqQ3ZFLE1BQU0sR0FBRyxDQUFDLENBQUM7VUFDakIsS0FBU2lCLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzBDLE9BQU8sQ0FBQ2hKLE1BQU0sRUFBRXNHLENBQUMsRUFBRSxFQUFFO1lBQ3ZDakIsTUFBTSxDQUFDMkQsT0FBTyxDQUFDYSxHQUFHLENBQUN2RCxDQUFDLENBQUMsQ0FBQ3BGLElBQUksQ0FBQyxHQUFHOEgsT0FBTyxDQUFDYSxHQUFHLENBQUN2RCxDQUFDLENBQUMsQ0FBQ0YsSUFBSTtVQUNuRDtVQUFDLE9BQUE4QyxTQUFBLENBQUF2QyxNQUFBLFdBRU10QixNQUFNO1FBQUE7UUFBQTtVQUFBLE9BQUE2RCxTQUFBLENBQUEzQyxJQUFBO01BQUE7SUFBQSxHQUFBaUMsUUFBQTtFQUFBLENBQ2Q7RUFBQSxPQUFBRCxlQUFBLENBQUExRyxLQUFBLE9BQUFFLFNBQUE7QUFBQTtBQUVNLFNBQVMrSCxjQUFjQSxDQUFDOUMsT0FBZ0IsRUFBbUI7RUFDaEUsSUFBTStDLGlCQUFpQixHQUFHLElBQUFDLDRCQUFTLEVBQUNoRCxPQUFPLENBQUM7RUFFNUMsSUFBSSxDQUFDK0MsaUJBQWlCLElBQUksQ0FBQ2xLLEtBQUssQ0FBQ0MsT0FBTyxDQUFDaUssaUJBQWlCLENBQUNFLFFBQVEsQ0FBQyxFQUFFO0lBQ3BFLElBQU1DLEtBQUssR0FBRyxJQUFJQyxLQUFLLDJGQUFBeEcsTUFBQSxDQUNxRXlHLGlDQUFzQixNQUNsSCxDQUFDO0lBQ0QsTUFBTUYsS0FBSztFQUNiOztFQUVBO0VBQ0EsT0FBTztJQUNMeEUsSUFBSSxFQUFFcUU7SUFDTjtJQUNBO0VBQ0YsQ0FBQztBQUNIIiwiaWdub3JlTGlzdCI6W119
331
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2VvanNvbk5vcm1hbGl6ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvbW1vblV0aWxzIiwiX2NvbnN0YW50cyIsIl9wcm9jZXNzb3JzIiwiX3V0aWxzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiQ1NWX05VTExTIiwiZXhwb3J0cyIsIkNPTFVNTl9UWVBFUyIsIkNPTFVNTl9UWVBFU19QUklPUklUSUVTIiwiY29sdW1uVHlwZVRvRmllbGRUeXBlIiwiY29sdW1uVHlwZSIsIkJPT0xFQU4iLCJBTExfRklFTERfVFlQRVMiLCJEQVRFIiwiZGF0ZSIsIklOVEVHRVIiLCJpbnRlZ2VyIiwiRkxPQVQiLCJyZWFsIiwiVkFSQ0hBUiIsInN0cmluZyIsIlRJTUVTVEFNUCIsInRpbWVzdGFtcCIsIkdFT01FVFJZIiwiZ2VvanNvbiIsImNvbnNvbGUiLCJ3YXJuIiwiY29uY2F0IiwiZmllbGRUeXBlVG9Db2x1bW5UeXBlIiwiZmllbGRUeXBlIiwicHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYiIsIl94IiwiX3Byb2Nlc3NLZXBsZXJnbEpTT05mb3JEdWNrRGIiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsImtlcGxlckpzb24iLCJyZXMiLCJkYXRhc2V0cyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiX2xvb3AyIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQyIiwicHJldiIsInByb2Nlc3NLZXBsZXJnbEpTT04iLCJkYXRhc2V0Iiwicm93c0FsbCIsImZpZWxkc0FsbCIsImhlYWRlciIsInNhbXBsZSIsInNjaGVtYSIsImZpZWxkc1VwZCIsIl9sb29wMiQiLCJfY29udGV4dCIsImRhdGEiLCJyb3dzIiwiZmllbGRzIiwibWFwIiwiZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUiLCJzbmlmZkNzdlNjaGVtYSIsInQwIiwic2VudCIsInJlZHVjZSIsImFjYyIsImZpZWxkIiwidHlwZSIsImNvbnNvbGlkYXRlRmllbGRUeXBlcyIsImkiLCJzdG9wIiwiZGVsZWdhdGVZaWVsZCIsInQxIiwiZmluaXNoIiwiYWJydXB0IiwicHJvY2Vzc0NzdlJvd09iamVjdCIsIl94MiIsIl9wcm9jZXNzQ3N2Um93T2JqZWN0IiwiX2NhbGxlZTIiLCJyYXdEYXRhIiwiZmllbGRzV0FuYWx5emVyVHlwZSIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MyIsImNsZWFuVXBGYWxzeUNzdlZhbHVlIiwiZ2V0RmllbGRzRnJvbURhdGEiLCJyZSIsIlJlZ0V4cCIsIl9sb29wIiwia2V5IiwibWF0Y2giLCJjb2x1bW5OYW1lIiwiZGV0ZWN0ZWRDb2x1bW5UeXBlIiwiZHVja0RCQ29sdW1uVHlwZSIsInRvQ1NWUm93Iiwicm93IiwiclRvU3RyIiwibm90TnVsbG9yVW5kZWZpbmVkIiwiU3RyaW5nIiwicmVwbGFjZSIsImluY2x1ZGVzIiwiam9pbiIsIl94MyIsIl9zbmlmZkNzdlNjaGVtYSIsIl9jYWxsZWUzIiwiaGVhZGVyUm93IiwiY3N2Q29udGVudCIsImRiIiwiYyIsImZpbGVOYW1lIiwicmVzdWx0Iiwic2NoZW1hUmVzdWx0IiwiY29sdW1ucyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0NCIsImFjY3UiLCJ2YWx1ZXMiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImRhdGFiYXNlIiwiZXJyb3IiLCJjb25uZWN0IiwiZ2VuZXJhdGVIYXNoSWQiLCJyZWdpc3RlckZpbGVUZXh0IiwicXVlcnkiLCJ0b0FycmF5IiwidG9KU09OIiwiQ29sdW1ucyIsImdldCIsInByb2Nlc3NHZW9qc29uIiwibm9ybWFsaXplZEdlb2pzb24iLCJub3JtYWxpemUiLCJmZWF0dXJlcyIsIkVycm9yIiwiR1VJREVTX0ZJTEVfRk9STUFUX0RPQyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzb3JzL2RhdGEtcHJvY2Vzc29yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCAqIGFzIGFycm93IGZyb20gJ2FwYWNoZS1hcnJvdyc7XG5pbXBvcnQgbm9ybWFsaXplIGZyb20gJ0BtYXBib3gvZ2VvanNvbi1ub3JtYWxpemUnO1xuXG5pbXBvcnQge1xuICBnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZSxcbiAgZ2V0RmllbGRzRnJvbURhdGEsXG4gIGdlbmVyYXRlSGFzaElkLFxuICBub3ROdWxsb3JVbmRlZmluZWRcbn0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtQcm90b0RhdGFzZXRGaWVsZH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0FMTF9GSUVMRF9UWVBFUywgR1VJREVTX0ZJTEVfRk9STUFUX0RPQ30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtwcm9jZXNzS2VwbGVyZ2xKU09OfSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuaW1wb3J0IHtnZXRBcHBsaWNhdGlvbkNvbmZpZ30gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBDU1ZfTlVMTFMgPSAvXihudWxsfE5VTEx8TnVsbHxOYU58XFwvTnx8KSQvO1xuXG50eXBlIFJvd3NBc0FycmF5ID0gYW55W11bXTtcbnR5cGUgUm93c0FzT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbnR5cGUgUm93RGF0YSA9IFJvd3NBc0FycmF5IHwgUm93c0FzT2JqZWN0O1xuXG5leHBvcnQgdHlwZSBQcm9jZXNzb3JSZXN1bHQgPSB7XG4gIGNvbHM/OiBhcnJvdy5WZWN0b3JbXTtcbiAgcm93czogUm93RGF0YTtcbiAgZmllbGRzOiBQcm90b0RhdGFzZXRGaWVsZFtdO1xufTtcblxuZW51bSBDT0xVTU5fVFlQRVMge1xuICBHRU9NRVRSWSA9ICdHRU9NRVRSWScsXG4gIEJPT0xFQU4gPSAnQk9PTEVBTicsXG4gIElOVEVHRVIgPSAnSU5URUdFUicsXG4gIEZMT0FUID0gJ0ZMT0FUJyxcbiAgVElNRSA9ICdUSU1FJyxcbiAgREFURSA9ICdEQVRFJyxcbiAgVElNRVNUQU1QID0gJ1RJTUVTVEFNUCcsXG4gIFZBUkNIQVIgPSAnVkFSQ0hBUidcbn1cbi8vIGh0dHBzOi8vZHVja2RiLm9yZy9kb2NzL2RhdGEvY3N2L2F1dG9fZGV0ZWN0aW9uLmh0bWwjdHlwZS1kZXRlY3Rpb25cbmV4cG9ydCBjb25zdCBDT0xVTU5fVFlQRVNfUFJJT1JJVElFUyA9IFtcbiAgJ0dFT01FVFJZJyxcbiAgJ0JPT0xFQU4nLFxuICAnSU5URUdFUicsXG4gICdGTE9BVCcsXG4gICdUSU1FJyxcbiAgJ0RBVEUnLFxuICAnVElNRVNUQU1QJyxcbiAgJ1ZBUkNIQVInXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gY29sdW1uVHlwZVRvRmllbGRUeXBlKGNvbHVtblR5cGU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBzd2l0Y2ggKGNvbHVtblR5cGUpIHtcbiAgICBjYXNlIENPTFVNTl9UWVBFUy5CT09MRUFOOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5ib29sZWFuO1xuICAgIGNhc2UgQ09MVU1OX1RZUEVTLkRBVEU6XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLmRhdGU7XG4gICAgY2FzZSBDT0xVTU5fVFlQRVMuSU5URUdFUjpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuaW50ZWdlcjtcbiAgICBjYXNlIENPTFVNTl9UWVBFUy5GTE9BVDpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMucmVhbDtcbiAgICBjYXNlIENPTFVNTl9UWVBFUy5WQVJDSEFSOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5zdHJpbmc7XG4gICAgY2FzZSBDT0xVTU5fVFlQRVMuVElNRVNUQU1QOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA7XG4gICAgY2FzZSBDT0xVTU5fVFlQRVMuR0VPTUVUUlk6XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLmdlb2pzb247XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGlzIHRoZXJlIGFueSBvdGhlciB0eXBlIHdlIGRpZG4ndCBjb3Zlcj9cbiAgICAgIGNvbnNvbGUud2FybihgVW5zdXBwb3J0ZWQgRHVja0RCIENvbHVtbiB0eXBlOiAke2NvbHVtblR5cGV9YCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmllbGRUeXBlVG9Db2x1bW5UeXBlKGZpZWxkVHlwZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIHN3aXRjaCAoZmllbGRUeXBlKSB7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuYm9vbGVhbjpcbiAgICAgIHJldHVybiBDT0xVTU5fVFlQRVMuQk9PTEVBTjtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5kYXRlOlxuICAgICAgcmV0dXJuIENPTFVNTl9UWVBFUy5EQVRFO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgICByZXR1cm4gQ09MVU1OX1RZUEVTLklOVEVHRVI7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMucmVhbDpcbiAgICAgIHJldHVybiBDT0xVTU5fVFlQRVMuRkxPQVQ7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuc3RyaW5nOlxuICAgICAgcmV0dXJuIENPTFVNTl9UWVBFUy5WQVJDSEFSO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgIHJldHVybiBDT0xVTU5fVFlQRVMuVElNRVNUQU1QO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmdlb2pzb246XG4gICAgICByZXR1cm4gQ09MVU1OX1RZUEVTLkdFT01FVFJZO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBpcyB0aGVyZSBhbnkgb3RoZXIgdHlwZSB3ZSBkaWRuJ3QgY292ZXI/XG4gICAgICBjb25zb2xlLndhcm4oYFVuc3VwcG9ydGVkIEZpZWxkIHR5cGUgZm9yIER1Y2tEYjogJHtmaWVsZFR5cGV9YCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKlxuICogUHJvY2VzcyB1cGxvYWRlZCBleHBvcnRlZCBLZXBsZXJnbCBqc29uIG1hcC5cbiAqIFdlIG5lZWQgdG8gcG9wdWxhdGUgZmllbGQgd2l0aCBwcm9wZXIgRHVja0RiIGNvbXBhdGlibGUgdHlwZS5cbiAqL1xuLy8gVE9ETzogbWVyZ2Ugd2l0aCBsb2dpYyBmcm9tIHByb2Nlc3NDc3ZSb3dPYmplY3QuIERpZmZlcmVudCBmb3JtYXRzOiBbW11dIHZzIFt7fV1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzS2VwbGVyZ2xKU09OZm9yRHVja0RiKFxuICBrZXBsZXJKc29uXG4pOiBQcm9taXNlPFJldHVyblR5cGU8dHlwZW9mIHByb2Nlc3NLZXBsZXJnbEpTT04+PiB7XG4gIGNvbnN0IHJlcyA9IHByb2Nlc3NLZXBsZXJnbEpTT04oa2VwbGVySnNvbik7XG5cbiAgY29uc3QgZGF0YXNldHMgPSByZXM/LmRhdGFzZXRzIHx8IFtdO1xuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMpIHtcbiAgICBjb25zdCByb3dzQWxsID0gZGF0YXNldC5kYXRhLnJvd3M7XG4gICAgY29uc3QgZmllbGRzQWxsID0gZGF0YXNldC5kYXRhLmZpZWxkcztcblxuICAgIGNvbnN0IGhlYWRlciA9IGZpZWxkc0FsbC5tYXAoZiA9PiBmLm5hbWUpO1xuICAgIGNvbnN0IHNhbXBsZSA9IGdldFNhbXBsZUZvclR5cGVBbmFseXplKHtmaWVsZHM6IGhlYWRlciwgcm93czogcm93c0FsbH0pO1xuXG4gICAgY29uc3Qgc2NoZW1hID1cbiAgICAgIHNhbXBsZS5sZW5ndGggPiAwXG4gICAgICAgID8gYXdhaXQgc25pZmZDc3ZTY2hlbWEoc2FtcGxlKVxuICAgICAgICA6IGZpZWxkc0FsbC5yZWR1Y2UoKGFjYywgZmllbGQpID0+IHtcbiAgICAgICAgICAgIGFjY1tmaWVsZC5uYW1lXSA9IGZpZWxkVHlwZVRvQ29sdW1uVHlwZShmaWVsZC50eXBlKTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSwge30pO1xuICAgIGNvbnN0IGZpZWxkc1VwZCA9IGNvbnNvbGlkYXRlRmllbGRUeXBlcyhkYXRhc2V0LmRhdGEuZmllbGRzLCBzY2hlbWEpO1xuXG4gICAgZGF0YXNldC5kYXRhLmZpZWxkcyA9IGZpZWxkc0FsbC5tYXAoKGYsIGkpID0+IHtcbiAgICAgIHJldHVybiB7Li4uZmllbGRzVXBkW2ldLCAuLi5mfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59XG5cbi8qXG4gKiBQcm9jZXNzIHVwbG9hZGVkIGNzdiByZXR1cm5lZCBieSBsb2FkZXJzLmdsIGFzIHJvdyBvYmplY3QgYW5kIHN0cmluZyB2YWx1ZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0NzdlJvd09iamVjdChcbiAgcmF3RGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbD5bXVxuKTogUHJvbWlzZTxQcm9jZXNzb3JSZXN1bHQ+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJhd0RhdGEpIHx8ICFyYXdEYXRhLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICBmaWVsZHM6IFtdLFxuICAgICAgcm93czogW11cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgaGVhZGVyID0gT2JqZWN0LmtleXMocmF3RGF0YVswXSk7IC8vIFtsYXQsIGxuZywgdmFsdWVdXG5cbiAgLy8gcm93IG9iamVjdCBjYW4gc3RpbGwgY29udGFpbiB2YWx1ZXMgbGlrZSBgTnVsbGAgb3IgYE4vQWBcbiAgY2xlYW5VcEZhbHN5Q3N2VmFsdWUocmF3RGF0YSk7XG4gIGNvbnN0IHNhbXBsZSA9IGdldFNhbXBsZUZvclR5cGVBbmFseXplKHtmaWVsZHM6IGhlYWRlciwgcm93czogcmF3RGF0YX0pO1xuICAvLyBhZGQgc2FtcGxlIGRhdGEgdG8gZHVja2RiIGFuZCBnZXQgc2NoZW1hXG4gIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHNuaWZmQ3N2U2NoZW1hKHNhbXBsZSk7XG5cbiAgY29uc3QgZmllbGRzV0FuYWx5emVyVHlwZSA9IGdldEZpZWxkc0Zyb21EYXRhKHNhbXBsZSwgaGVhZGVyKTtcblxuICBjb25zdCBmaWVsZHMgPSBjb25zb2xpZGF0ZUZpZWxkVHlwZXMoZmllbGRzV0FuYWx5emVyVHlwZSwgc2NoZW1hKTtcblxuICByZXR1cm4ge3Jvd3M6IHJhd0RhdGEsIGZpZWxkc307XG59XG5cbmZ1bmN0aW9uIGNsZWFuVXBGYWxzeUNzdlZhbHVlKHJvd3M6IFJvd0RhdGEpOiB2b2lkIHtcbiAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKENTVl9OVUxMUywgJ2cnKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgT2JqZWN0LmtleXMocm93c1tpXSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgLy8gaGVyZSB3ZSBwYXJzZSBlbXB0eSBkYXRhIGFzIG51bGxcbiAgICAgIGlmICh0eXBlb2Ygcm93c1tpXVtrZXldID09PSAnc3RyaW5nJyAmJiAocm93c1tpXVtrZXldIGFzIHN0cmluZykubWF0Y2gocmUpKSB7XG4gICAgICAgIHJvd3NbaV1ba2V5XSA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLy8gYWxpZ24gdHlwZSBhbmFseXplciB0eXBlcyB3aXRoIER1Y2tEQiBjc3YgYXV0byBkZXRlY3RlZCBjb2x1bW4gdHlwZXNcbmZ1bmN0aW9uIGNvbnNvbGlkYXRlRmllbGRUeXBlcyhmaWVsZHMsIHNjaGVtYSkge1xuICByZXR1cm4gZmllbGRzLm1hcChmaWVsZCA9PiB7XG4gICAgY29uc3QgY29sdW1uTmFtZSA9IGZpZWxkLm5hbWU7XG5cbiAgICBjb25zdCBkZXRlY3RlZENvbHVtblR5cGUgPSBzY2hlbWFbY29sdW1uTmFtZV07XG5cbiAgICAvLyBUT0RPIGNvbHVtblR5cGVUb0ZpZWxkVHlwZSB0cmFuZm9ybXMgZGV0ZWN0ZWQgdGltZXN0YW1wcyB0byBzdHJpbmcsXG4gICAgLy8gY29tcGxldGVseSBicmVha2luZyB0aW1lIGZpbHRlciBsb2dpYy5cbiAgICAvLyBjb25zdCBmaWVsZFR5cGUgPSBjb2x1bW5UeXBlVG9GaWVsZFR5cGUoZGV0ZWN0ZWRDb2x1bW5UeXBlKSB8fCBmaWVsZC50eXBlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmZpZWxkLFxuICAgICAgLy8gdHlwZTogZmllbGRUeXBlLFxuICAgICAgZHVja0RCQ29sdW1uVHlwZTogZGV0ZWN0ZWRDb2x1bW5UeXBlXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvQ1NWUm93KHJvdzogdW5rbm93bltdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3Jvd1xuICAgIC5tYXAociA9PiB7XG4gICAgICBjb25zdCByVG9TdHIgPSBub3ROdWxsb3JVbmRlZmluZWQocikgPyBTdHJpbmcocikucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpIDogJyc7XG4gICAgICByZXR1cm4gclRvU3RyLmluY2x1ZGVzKCcsJykgPyBgXCIke3JUb1N0cn1cImAgOiByVG9TdHI7XG4gICAgfSlcbiAgICAuam9pbignLCcpfVxcbmA7XG59XG5cbi8vIFVzZSBEdWNja0RCIHRvIGRldGVjdCBjc3YgY29sdW1uIHNjaGVtYVxuYXN5bmMgZnVuY3Rpb24gc25pZmZDc3ZTY2hlbWEoc2FtcGxlOiBSb3dEYXRhKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShzYW1wbGUpIHx8IHNhbXBsZS5sZW5ndGggPCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGhlYWRlclJvdyA9IHRvQ1NWUm93KE9iamVjdC5rZXlzKHNhbXBsZVswXSkpO1xuXG4gIGNvbnN0IGNzdkNvbnRlbnQgPSAoc2FtcGxlIGFzIChhbnlbXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtdKS5yZWR1Y2UoXG4gICAgKGFjY3U6IHN0cmluZywgcm93KSA9PiBgJHthY2N1fSR7dG9DU1ZSb3coT2JqZWN0LnZhbHVlcyhyb3cpKX1gLFxuICAgIGhlYWRlclJvd1xuICApO1xuXG4gIGNvbnN0IGRiID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5kYXRhYmFzZTtcbiAgaWYgKCFkYikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBkYXRhYmFzZSBpcyBub3QgY29uZmlndXJlZCBwcm9wZXJseS4nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgYyA9IGF3YWl0IGRiLmNvbm5lY3QoKTtcblxuICBjb25zdCBmaWxlTmFtZSA9IGdlbmVyYXRlSGFzaElkKCk7XG4gIGF3YWl0IGRiLnJlZ2lzdGVyRmlsZVRleHQoYCR7ZmlsZU5hbWV9LSR7Z2VuZXJhdGVIYXNoSWR9LmNzdmAsIGNzdkNvbnRlbnQpO1xuXG4gIC8vIGh0dHBzOi8vZHVja2RiLm9yZy9kb2NzL2RhdGEvY3N2L2F1dG9fZGV0ZWN0aW9uLmh0bWxcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYy5xdWVyeShgXG4gICAgICAgIEZST00gc25pZmZfY3N2KCcke2ZpbGVOYW1lfS0ke2dlbmVyYXRlSGFzaElkfS5jc3YnLCBcbiAgICAgICAgc2FtcGxlX3NpemUgPSA1MDAsXG4gICAgICAgIGF1dG9fdHlwZV9jYW5kaWRhdGVzID0gWydGTE9BVCcsICdJTlRFR0VSJywgJ1RJTUVTVEFNUCcsICdEQVRFJywgJ1RJTUUnLCAnVkFSQ0hBUicsICdCT09MRUFOJ10pO1xuICAgIGApO1xuXG4gIGNvbnN0IHNjaGVtYVJlc3VsdCA9IHJlc3VsdC50b0FycmF5KCkubWFwKHJvdyA9PiByb3cudG9KU09OKCkpO1xuXG4gIGNvbnN0IGNvbHVtbnMgPSBzY2hlbWFSZXN1bHRbMF0uQ29sdW1ucztcbiAgY29uc3Qgc2NoZW1hID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgIHNjaGVtYVtjb2x1bW5zLmdldChpKS5uYW1lXSA9IGNvbHVtbnMuZ2V0KGkpLnR5cGU7XG4gIH1cblxuICByZXR1cm4gc2NoZW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0dlb2pzb24ocmF3RGF0YTogdW5rbm93bik6IFByb2Nlc3NvclJlc3VsdCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRHZW9qc29uID0gbm9ybWFsaXplKHJhd0RhdGEpO1xuXG4gIGlmICghbm9ybWFsaXplZEdlb2pzb24gfHwgIUFycmF5LmlzQXJyYXkobm9ybWFsaXplZEdlb2pzb24uZmVhdHVyZXMpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICBgUmVhZCBGaWxlIEZhaWxlZDogRmlsZSBpcyBub3QgYSB2YWxpZCBHZW9KU09OLiBSZWFkIG1vcmUgYWJvdXQgW3N1cHBvcnRlZCBmaWxlIGZvcm1hdF0oJHtHVUlERVNfRklMRV9GT1JNQVRfRE9DfSlgXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgRG9uJ3QgcGFzcyBlbXB0eSBmaWVsZHMsIGFzIGR1Y2sgZGIgb3V0cHV0cyBhbiBlbXB0eSBkYXRhc2V0XG4gIHJldHVybiB7XG4gICAgcm93czogbm9ybWFsaXplZEdlb2pzb25cbiAgICAvLyBUT0RPIGdldCBmaWVsZHMgdG8gcHJlc2VydmUgZmllbGQgbmFtZXM/XG4gICAgLy8gZmllbGRzOiBbXVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFJQSxJQUFBQSxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBT0EsSUFBQUUsVUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsV0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBQXNELFNBQUFLLDJCQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBSCxDQUFBLENBQUFHLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSixDQUFBLHFCQUFBRSxDQUFBLFFBQUFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBTixDQUFBLE1BQUFFLENBQUEsR0FBQUssMkJBQUEsQ0FBQVAsQ0FBQSxNQUFBQyxDQUFBLElBQUFELENBQUEsdUJBQUFBLENBQUEsQ0FBQVEsTUFBQSxJQUFBTixDQUFBLEtBQUFGLENBQUEsR0FBQUUsQ0FBQSxPQUFBTyxFQUFBLE1BQUFDLENBQUEsWUFBQUEsRUFBQSxlQUFBQyxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBQSxFQUFBLFdBQUFILEVBQUEsSUFBQVQsQ0FBQSxDQUFBUSxNQUFBLEtBQUFLLElBQUEsV0FBQUEsSUFBQSxNQUFBQyxLQUFBLEVBQUFkLENBQUEsQ0FBQVMsRUFBQSxVQUFBUixDQUFBLFdBQUFBLEVBQUFELENBQUEsVUFBQUEsQ0FBQSxLQUFBZSxDQUFBLEVBQUFMLENBQUEsZ0JBQUFNLFNBQUEsaUpBQUFDLENBQUEsRUFBQUMsQ0FBQSxPQUFBQyxDQUFBLGdCQUFBUixDQUFBLFdBQUFBLEVBQUEsSUFBQVQsQ0FBQSxHQUFBQSxDQUFBLENBQUFrQixJQUFBLENBQUFwQixDQUFBLE1BQUFZLENBQUEsV0FBQUEsRUFBQSxRQUFBWixDQUFBLEdBQUFFLENBQUEsQ0FBQW1CLElBQUEsV0FBQUgsQ0FBQSxHQUFBbEIsQ0FBQSxDQUFBYSxJQUFBLEVBQUFiLENBQUEsS0FBQUMsQ0FBQSxXQUFBQSxFQUFBRCxDQUFBLElBQUFtQixDQUFBLE9BQUFGLENBQUEsR0FBQWpCLENBQUEsS0FBQWUsQ0FBQSxXQUFBQSxFQUFBLFVBQUFHLENBQUEsWUFBQWhCLENBQUEsY0FBQUEsQ0FBQSw4QkFBQWlCLENBQUEsUUFBQUYsQ0FBQTtBQUFBLFNBQUFWLDRCQUFBUCxDQUFBLEVBQUFrQixDQUFBLFFBQUFsQixDQUFBLDJCQUFBQSxDQUFBLFNBQUFzQixpQkFBQSxDQUFBdEIsQ0FBQSxFQUFBa0IsQ0FBQSxPQUFBaEIsQ0FBQSxNQUFBcUIsUUFBQSxDQUFBSCxJQUFBLENBQUFwQixDQUFBLEVBQUF3QixLQUFBLDZCQUFBdEIsQ0FBQSxJQUFBRixDQUFBLENBQUF5QixXQUFBLEtBQUF2QixDQUFBLEdBQUFGLENBQUEsQ0FBQXlCLFdBQUEsQ0FBQUMsSUFBQSxhQUFBeEIsQ0FBQSxjQUFBQSxDQUFBLEdBQUFHLEtBQUEsQ0FBQXNCLElBQUEsQ0FBQTNCLENBQUEsb0JBQUFFLENBQUEsK0NBQUEwQixJQUFBLENBQUExQixDQUFBLElBQUFvQixpQkFBQSxDQUFBdEIsQ0FBQSxFQUFBa0IsQ0FBQTtBQUFBLFNBQUFJLGtCQUFBdEIsQ0FBQSxFQUFBa0IsQ0FBQSxhQUFBQSxDQUFBLElBQUFBLENBQUEsR0FBQWxCLENBQUEsQ0FBQVEsTUFBQSxNQUFBVSxDQUFBLEdBQUFsQixDQUFBLENBQUFRLE1BQUEsWUFBQVAsQ0FBQSxNQUFBVyxDQUFBLEdBQUFQLEtBQUEsQ0FBQWEsQ0FBQSxHQUFBakIsQ0FBQSxHQUFBaUIsQ0FBQSxFQUFBakIsQ0FBQSxJQUFBVyxDQUFBLENBQUFYLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFVBQUFXLENBQUE7QUFBQSxTQUFBaUIsUUFBQTVCLENBQUEsRUFBQUQsQ0FBQSxRQUFBRSxDQUFBLEdBQUE0QixNQUFBLENBQUFDLElBQUEsQ0FBQTlCLENBQUEsT0FBQTZCLE1BQUEsQ0FBQUUscUJBQUEsUUFBQWYsQ0FBQSxHQUFBYSxNQUFBLENBQUFFLHFCQUFBLENBQUEvQixDQUFBLEdBQUFELENBQUEsS0FBQWlCLENBQUEsR0FBQUEsQ0FBQSxDQUFBZ0IsTUFBQSxXQUFBakMsQ0FBQSxXQUFBOEIsTUFBQSxDQUFBSSx3QkFBQSxDQUFBakMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFtQyxVQUFBLE9BQUFqQyxDQUFBLENBQUFrQyxJQUFBLENBQUFDLEtBQUEsQ0FBQW5DLENBQUEsRUFBQWUsQ0FBQSxZQUFBZixDQUFBO0FBQUEsU0FBQW9DLGNBQUFyQyxDQUFBLGFBQUFELENBQUEsTUFBQUEsQ0FBQSxHQUFBdUMsU0FBQSxDQUFBL0IsTUFBQSxFQUFBUixDQUFBLFVBQUFFLENBQUEsV0FBQXFDLFNBQUEsQ0FBQXZDLENBQUEsSUFBQXVDLFNBQUEsQ0FBQXZDLENBQUEsUUFBQUEsQ0FBQSxPQUFBNkIsT0FBQSxDQUFBQyxNQUFBLENBQUE1QixDQUFBLE9BQUFzQyxPQUFBLFdBQUF4QyxDQUFBLFFBQUF5QyxnQkFBQSxhQUFBeEMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsQ0FBQUYsQ0FBQSxTQUFBOEIsTUFBQSxDQUFBWSx5QkFBQSxHQUFBWixNQUFBLENBQUFhLGdCQUFBLENBQUExQyxDQUFBLEVBQUE2QixNQUFBLENBQUFZLHlCQUFBLENBQUF4QyxDQUFBLEtBQUEyQixPQUFBLENBQUFDLE1BQUEsQ0FBQTVCLENBQUEsR0FBQXNDLE9BQUEsV0FBQXhDLENBQUEsSUFBQThCLE1BQUEsQ0FBQWMsY0FBQSxDQUFBM0MsQ0FBQSxFQUFBRCxDQUFBLEVBQUE4QixNQUFBLENBQUFJLHdCQUFBLENBQUFoQyxDQUFBLEVBQUFGLENBQUEsaUJBQUFDLENBQUEsSUFmdEQ7QUFDQTtBQWdCTyxJQUFNNEMsU0FBUyxHQUFBQyxPQUFBLENBQUFELFNBQUEsR0FBRyw4QkFBOEI7QUFBQyxJQVluREUsWUFBWSwwQkFBWkEsWUFBWTtFQUFaQSxZQUFZO0VBQVpBLFlBQVk7RUFBWkEsWUFBWTtFQUFaQSxZQUFZO0VBQVpBLFlBQVk7RUFBWkEsWUFBWTtFQUFaQSxZQUFZO0VBQVpBLFlBQVk7RUFBQSxPQUFaQSxZQUFZO0FBQUEsRUFBWkEsWUFBWSxTQVVqQjtBQUNPLElBQU1DLHVCQUF1QixHQUFBRixPQUFBLENBQUFFLHVCQUFBLEdBQUcsQ0FDckMsVUFBVSxFQUNWLFNBQVMsRUFDVCxTQUFTLEVBQ1QsT0FBTyxFQUNQLE1BQU0sRUFDTixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsQ0FDVjtBQUVNLFNBQVNDLHFCQUFxQkEsQ0FBQ0MsVUFBa0IsRUFBaUI7RUFDdkUsUUFBUUEsVUFBVTtJQUNoQixLQUFLSCxZQUFZLENBQUNJLE9BQU87TUFDdkIsT0FBT0MsMEJBQWUsV0FBUTtJQUNoQyxLQUFLTCxZQUFZLENBQUNNLElBQUk7TUFDcEIsT0FBT0QsMEJBQWUsQ0FBQ0UsSUFBSTtJQUM3QixLQUFLUCxZQUFZLENBQUNRLE9BQU87TUFDdkIsT0FBT0gsMEJBQWUsQ0FBQ0ksT0FBTztJQUNoQyxLQUFLVCxZQUFZLENBQUNVLEtBQUs7TUFDckIsT0FBT0wsMEJBQWUsQ0FBQ00sSUFBSTtJQUM3QixLQUFLWCxZQUFZLENBQUNZLE9BQU87TUFDdkIsT0FBT1AsMEJBQWUsQ0FBQ1EsTUFBTTtJQUMvQixLQUFLYixZQUFZLENBQUNjLFNBQVM7TUFDekIsT0FBT1QsMEJBQWUsQ0FBQ1UsU0FBUztJQUNsQyxLQUFLZixZQUFZLENBQUNnQixRQUFRO01BQ3hCLE9BQU9YLDBCQUFlLENBQUNZLE9BQU87SUFDaEM7TUFDRTtNQUNBQyxPQUFPLENBQUNDLElBQUksb0NBQUFDLE1BQUEsQ0FBb0NqQixVQUFVLENBQUUsQ0FBQztNQUM3RCxPQUFPLElBQUk7RUFDZjtBQUNGO0FBRU8sU0FBU2tCLHFCQUFxQkEsQ0FBQ0MsU0FBaUIsRUFBaUI7RUFDdEUsUUFBUUEsU0FBUztJQUNmLEtBQUtqQiwwQkFBZSxXQUFRO01BQzFCLE9BQU9MLFlBQVksQ0FBQ0ksT0FBTztJQUM3QixLQUFLQywwQkFBZSxDQUFDRSxJQUFJO01BQ3ZCLE9BQU9QLFlBQVksQ0FBQ00sSUFBSTtJQUMxQixLQUFLRCwwQkFBZSxDQUFDSSxPQUFPO01BQzFCLE9BQU9ULFlBQVksQ0FBQ1EsT0FBTztJQUM3QixLQUFLSCwwQkFBZSxDQUFDTSxJQUFJO01BQ3ZCLE9BQU9YLFlBQVksQ0FBQ1UsS0FBSztJQUMzQixLQUFLTCwwQkFBZSxDQUFDUSxNQUFNO01BQ3pCLE9BQU9iLFlBQVksQ0FBQ1ksT0FBTztJQUM3QixLQUFLUCwwQkFBZSxDQUFDVSxTQUFTO01BQzVCLE9BQU9mLFlBQVksQ0FBQ2MsU0FBUztJQUMvQixLQUFLVCwwQkFBZSxDQUFDWSxPQUFPO01BQzFCLE9BQU9qQixZQUFZLENBQUNnQixRQUFRO0lBQzlCO01BQ0U7TUFDQUUsT0FBTyxDQUFDQyxJQUFJLHVDQUFBQyxNQUFBLENBQXVDRSxTQUFTLENBQUUsQ0FBQztNQUMvRCxPQUFPLElBQUk7RUFDZjtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQSxTQUNzQkMsNEJBQTRCQSxDQUFBQyxFQUFBO0VBQUEsT0FBQUMsNkJBQUEsQ0FBQW5DLEtBQUEsT0FBQUUsU0FBQTtBQUFBO0FBOEJsRDtBQUNBO0FBQ0E7QUFGQSxTQUFBaUMsOEJBQUE7RUFBQUEsNkJBQUEsT0FBQUMsa0JBQUEsMkJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQTlCTyxTQUFBQyxRQUNMQyxVQUFVO0lBQUEsSUFBQUMsR0FBQSxFQUFBQyxRQUFBLEVBQUFDLFNBQUEsRUFBQUMsS0FBQSxFQUFBQyxNQUFBO0lBQUEsT0FBQVIsWUFBQSxZQUFBUyxJQUFBLFVBQUFDLFNBQUFDLFNBQUE7TUFBQSxrQkFBQUEsU0FBQSxDQUFBQyxJQUFBLEdBQUFELFNBQUEsQ0FBQWhFLElBQUE7UUFBQTtVQUVKeUQsR0FBRyxHQUFHLElBQUFTLCtCQUFtQixFQUFDVixVQUFVLENBQUM7VUFFckNFLFFBQVEsR0FBRyxDQUFBRCxHQUFHLGFBQUhBLEdBQUcsdUJBQUhBLEdBQUcsQ0FBRUMsUUFBUSxLQUFJLEVBQUU7VUFBQUMsU0FBQSxHQUFBakYsMEJBQUEsQ0FDZGdGLFFBQVE7VUFBQU0sU0FBQSxDQUFBQyxJQUFBO1VBQUFKLE1BQUEsZ0JBQUFSLFlBQUEsWUFBQUMsSUFBQSxVQUFBTyxPQUFBO1lBQUEsSUFBQU0sT0FBQSxFQUFBQyxPQUFBLEVBQUFDLFNBQUEsRUFBQUMsTUFBQSxFQUFBQyxNQUFBLEVBQUFDLE1BQUEsRUFBQUMsU0FBQTtZQUFBLE9BQUFwQixZQUFBLFlBQUFTLElBQUEsVUFBQVksUUFBQUMsUUFBQTtjQUFBLGtCQUFBQSxRQUFBLENBQUFWLElBQUEsR0FBQVUsUUFBQSxDQUFBM0UsSUFBQTtnQkFBQTtrQkFBbkJtRSxPQUFPLEdBQUFQLEtBQUEsQ0FBQW5FLEtBQUE7a0JBQ1YyRSxPQUFPLEdBQUdELE9BQU8sQ0FBQ1MsSUFBSSxDQUFDQyxJQUFJO2tCQUMzQlIsU0FBUyxHQUFHRixPQUFPLENBQUNTLElBQUksQ0FBQ0UsTUFBTTtrQkFFL0JSLE1BQU0sR0FBR0QsU0FBUyxDQUFDVSxHQUFHLENBQUMsVUFBQXJGLENBQUM7b0JBQUEsT0FBSUEsQ0FBQyxDQUFDVyxJQUFJO2tCQUFBLEVBQUM7a0JBQ25Da0UsTUFBTSxHQUFHLElBQUFTLG9DQUF1QixFQUFDO29CQUFDRixNQUFNLEVBQUVSLE1BQU07b0JBQUVPLElBQUksRUFBRVQ7a0JBQU8sQ0FBQyxDQUFDO2tCQUFBLE1BR3JFRyxNQUFNLENBQUNwRixNQUFNLEdBQUcsQ0FBQztvQkFBQXdGLFFBQUEsQ0FBQTNFLElBQUE7b0JBQUE7a0JBQUE7a0JBQUEyRSxRQUFBLENBQUEzRSxJQUFBO2tCQUFBLE9BQ1BpRixjQUFjLENBQUNWLE1BQU0sQ0FBQztnQkFBQTtrQkFBQUksUUFBQSxDQUFBTyxFQUFBLEdBQUFQLFFBQUEsQ0FBQVEsSUFBQTtrQkFBQVIsUUFBQSxDQUFBM0UsSUFBQTtrQkFBQTtnQkFBQTtrQkFBQTJFLFFBQUEsQ0FBQU8sRUFBQSxHQUM1QmIsU0FBUyxDQUFDZSxNQUFNLENBQUMsVUFBQ0MsR0FBRyxFQUFFQyxLQUFLLEVBQUs7b0JBQy9CRCxHQUFHLENBQUNDLEtBQUssQ0FBQ2pGLElBQUksQ0FBQyxHQUFHMEMscUJBQXFCLENBQUN1QyxLQUFLLENBQUNDLElBQUksQ0FBQztvQkFDbkQsT0FBT0YsR0FBRztrQkFDWixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQUE7a0JBTk5iLE1BQU0sR0FBQUcsUUFBQSxDQUFBTyxFQUFBO2tCQU9OVCxTQUFTLEdBQUdlLHFCQUFxQixDQUFDckIsT0FBTyxDQUFDUyxJQUFJLENBQUNFLE1BQU0sRUFBRU4sTUFBTSxDQUFDO2tCQUVwRUwsT0FBTyxDQUFDUyxJQUFJLENBQUNFLE1BQU0sR0FBR1QsU0FBUyxDQUFDVSxHQUFHLENBQUMsVUFBQ3JGLENBQUMsRUFBRStGLENBQUMsRUFBSztvQkFDNUMsT0FBQXhFLGFBQUEsQ0FBQUEsYUFBQSxLQUFXd0QsU0FBUyxDQUFDZ0IsQ0FBQyxDQUFDLEdBQUsvRixDQUFDO2tCQUMvQixDQUFDLENBQUM7Z0JBQUM7Z0JBQUE7a0JBQUEsT0FBQWlGLFFBQUEsQ0FBQWUsSUFBQTtjQUFBO1lBQUEsR0FBQTdCLE1BQUE7VUFBQTtVQUFBRixTQUFBLENBQUFyRSxDQUFBO1FBQUE7VUFBQSxLQUFBc0UsS0FBQSxHQUFBRCxTQUFBLENBQUFwRSxDQUFBLElBQUFDLElBQUE7WUFBQXdFLFNBQUEsQ0FBQWhFLElBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQWdFLFNBQUEsQ0FBQTJCLGFBQUEsQ0FBQTlCLE1BQUE7UUFBQTtVQUFBRyxTQUFBLENBQUFoRSxJQUFBO1VBQUE7UUFBQTtVQUFBZ0UsU0FBQSxDQUFBaEUsSUFBQTtVQUFBO1FBQUE7VUFBQWdFLFNBQUEsQ0FBQUMsSUFBQTtVQUFBRCxTQUFBLENBQUE0QixFQUFBLEdBQUE1QixTQUFBO1VBQUFMLFNBQUEsQ0FBQS9FLENBQUEsQ0FBQW9GLFNBQUEsQ0FBQTRCLEVBQUE7UUFBQTtVQUFBNUIsU0FBQSxDQUFBQyxJQUFBO1VBQUFOLFNBQUEsQ0FBQWpFLENBQUE7VUFBQSxPQUFBc0UsU0FBQSxDQUFBNkIsTUFBQTtRQUFBO1VBQUEsT0FBQTdCLFNBQUEsQ0FBQThCLE1BQUEsV0FHRXJDLEdBQUc7UUFBQTtRQUFBO1VBQUEsT0FBQU8sU0FBQSxDQUFBMEIsSUFBQTtNQUFBO0lBQUEsR0FBQW5DLE9BQUE7RUFBQSxDQUNYO0VBQUEsT0FBQUosNkJBQUEsQ0FBQW5DLEtBQUEsT0FBQUUsU0FBQTtBQUFBO0FBQUEsU0FLcUI2RSxtQkFBbUJBLENBQUFDLEdBQUE7RUFBQSxPQUFBQyxvQkFBQSxDQUFBakYsS0FBQSxPQUFBRSxTQUFBO0FBQUE7QUFBQSxTQUFBK0UscUJBQUE7RUFBQUEsb0JBQUEsT0FBQTdDLGtCQUFBLDJCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBbEMsU0FBQTRDLFNBQ0xDLE9BQXdDO0lBQUEsSUFBQTdCLE1BQUEsRUFBQUMsTUFBQSxFQUFBQyxNQUFBLEVBQUE0QixtQkFBQSxFQUFBdEIsTUFBQTtJQUFBLE9BQUF6QixZQUFBLFlBQUFTLElBQUEsVUFBQXVDLFVBQUFDLFNBQUE7TUFBQSxrQkFBQUEsU0FBQSxDQUFBckMsSUFBQSxHQUFBcUMsU0FBQSxDQUFBdEcsSUFBQTtRQUFBO1VBQUEsTUFFcEMsQ0FBQ2hCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDa0gsT0FBTyxDQUFDLElBQUksQ0FBQ0EsT0FBTyxDQUFDaEgsTUFBTTtZQUFBbUgsU0FBQSxDQUFBdEcsSUFBQTtZQUFBO1VBQUE7VUFBQSxPQUFBc0csU0FBQSxDQUFBUixNQUFBLFdBQ3JDO1lBQ0xoQixNQUFNLEVBQUUsRUFBRTtZQUNWRCxJQUFJLEVBQUU7VUFDUixDQUFDO1FBQUE7VUFHR1AsTUFBTSxHQUFHN0QsTUFBTSxDQUFDQyxJQUFJLENBQUN5RixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUV4QztVQUNBSSxvQkFBb0IsQ0FBQ0osT0FBTyxDQUFDO1VBQ3ZCNUIsTUFBTSxHQUFHLElBQUFTLG9DQUF1QixFQUFDO1lBQUNGLE1BQU0sRUFBRVIsTUFBTTtZQUFFTyxJQUFJLEVBQUVzQjtVQUFPLENBQUMsQ0FBQyxFQUN2RTtVQUFBRyxTQUFBLENBQUF0RyxJQUFBO1VBQUEsT0FDcUJpRixjQUFjLENBQUNWLE1BQU0sQ0FBQztRQUFBO1VBQXJDQyxNQUFNLEdBQUE4QixTQUFBLENBQUFuQixJQUFBO1VBRU5pQixtQkFBbUIsR0FBRyxJQUFBSSw4QkFBaUIsRUFBQ2pDLE1BQU0sRUFBRUQsTUFBTSxDQUFDO1VBRXZEUSxNQUFNLEdBQUdVLHFCQUFxQixDQUFDWSxtQkFBbUIsRUFBRTVCLE1BQU0sQ0FBQztVQUFBLE9BQUE4QixTQUFBLENBQUFSLE1BQUEsV0FFMUQ7WUFBQ2pCLElBQUksRUFBRXNCLE9BQU87WUFBRXJCLE1BQU0sRUFBTkE7VUFBTSxDQUFDO1FBQUE7UUFBQTtVQUFBLE9BQUF3QixTQUFBLENBQUFaLElBQUE7TUFBQTtJQUFBLEdBQUFRLFFBQUE7RUFBQSxDQUMvQjtFQUFBLE9BQUFELG9CQUFBLENBQUFqRixLQUFBLE9BQUFFLFNBQUE7QUFBQTtBQUVELFNBQVNxRixvQkFBb0JBLENBQUMxQixJQUFhLEVBQVE7RUFDakQsSUFBTTRCLEVBQUUsR0FBRyxJQUFJQyxNQUFNLENBQUNsRixTQUFTLEVBQUUsR0FBRyxDQUFDO0VBQUMsSUFBQW1GLEtBQUEsWUFBQUEsTUFBQWxCLENBQUEsRUFDQTtJQUNwQ2hGLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDbUUsSUFBSSxDQUFDWSxDQUFDLENBQUMsQ0FBQyxDQUFDdEUsT0FBTyxDQUFDLFVBQUF5RixHQUFHLEVBQUk7TUFDbEM7TUFDQSxJQUFJLE9BQU8vQixJQUFJLENBQUNZLENBQUMsQ0FBQyxDQUFDbUIsR0FBRyxDQUFDLEtBQUssUUFBUSxJQUFLL0IsSUFBSSxDQUFDWSxDQUFDLENBQUMsQ0FBQ21CLEdBQUcsQ0FBQyxDQUFZQyxLQUFLLENBQUNKLEVBQUUsQ0FBQyxFQUFFO1FBQzFFNUIsSUFBSSxDQUFDWSxDQUFDLENBQUMsQ0FBQ21CLEdBQUcsQ0FBQyxHQUFHLElBQUk7TUFDckI7SUFDRixDQUFDLENBQUM7RUFDSixDQUFDO0VBUEQsS0FBSyxJQUFJbkIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHWixJQUFJLENBQUMxRixNQUFNLEVBQUVzRyxDQUFDLEVBQUU7SUFBQWtCLEtBQUEsQ0FBQWxCLENBQUE7RUFBQTtBQVF0Qzs7QUFFQTtBQUNBLFNBQVNELHFCQUFxQkEsQ0FBQ1YsTUFBTSxFQUFFTixNQUFNLEVBQUU7RUFDN0MsT0FBT00sTUFBTSxDQUFDQyxHQUFHLENBQUMsVUFBQU8sS0FBSyxFQUFJO0lBQ3pCLElBQU13QixVQUFVLEdBQUd4QixLQUFLLENBQUNqRixJQUFJO0lBRTdCLElBQU0wRyxrQkFBa0IsR0FBR3ZDLE1BQU0sQ0FBQ3NDLFVBQVUsQ0FBQzs7SUFFN0M7SUFDQTtJQUNBOztJQUVBLE9BQUE3RixhQUFBLENBQUFBLGFBQUEsS0FDS3FFLEtBQUs7TUFDUjtNQUNBMEIsZ0JBQWdCLEVBQUVEO0lBQWtCO0VBRXhDLENBQUMsQ0FBQztBQUNKO0FBRUEsU0FBU0UsUUFBUUEsQ0FBQ0MsR0FBYyxFQUFVO0VBQ3hDLFVBQUFwRSxNQUFBLENBQVVvRSxHQUFHLENBQ1ZuQyxHQUFHLENBQUMsVUFBQXBHLENBQUMsRUFBSTtJQUNSLElBQU13SSxNQUFNLEdBQUcsSUFBQUMsK0JBQWtCLEVBQUN6SSxDQUFDLENBQUMsR0FBRzBJLE1BQU0sQ0FBQzFJLENBQUMsQ0FBQyxDQUFDMkksT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFO0lBQzFFLE9BQU9ILE1BQU0sQ0FBQ0ksUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFBekUsTUFBQSxDQUFPcUUsTUFBTSxVQUFNQSxNQUFNO0VBQ3RELENBQUMsQ0FBQyxDQUNESyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2Q7O0FBRUE7QUFBQSxTQUNldkMsY0FBY0EsQ0FBQXdDLEdBQUE7RUFBQSxPQUFBQyxlQUFBLENBQUExRyxLQUFBLE9BQUFFLFNBQUE7QUFBQTtBQUFBLFNBQUF3RyxnQkFBQTtFQUFBQSxlQUFBLE9BQUF0RSxrQkFBQSwyQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQTdCLFNBQUFxRSxTQUE4QnBELE1BQWU7SUFBQSxJQUFBcUQsU0FBQSxFQUFBQyxVQUFBLEVBQUFDLEVBQUEsRUFBQUMsQ0FBQSxFQUFBQyxRQUFBLEVBQUFDLE1BQUEsRUFBQUMsWUFBQSxFQUFBQyxPQUFBLEVBQUEzRCxNQUFBLEVBQUFpQixDQUFBO0lBQUEsT0FBQXBDLFlBQUEsWUFBQVMsSUFBQSxVQUFBc0UsVUFBQUMsU0FBQTtNQUFBLGtCQUFBQSxTQUFBLENBQUFwRSxJQUFBLEdBQUFvRSxTQUFBLENBQUFySSxJQUFBO1FBQUE7VUFBQSxNQUN2QyxDQUFDaEIsS0FBSyxDQUFDQyxPQUFPLENBQUNzRixNQUFNLENBQUMsSUFBSUEsTUFBTSxDQUFDcEYsTUFBTSxHQUFHLENBQUM7WUFBQWtKLFNBQUEsQ0FBQXJJLElBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQXFJLFNBQUEsQ0FBQXZDLE1BQUE7UUFBQTtVQUd6QzhCLFNBQVMsR0FBR1gsUUFBUSxDQUFDeEcsTUFBTSxDQUFDQyxJQUFJLENBQUM2RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUU1Q3NELFVBQVUsR0FBSXRELE1BQU0sQ0FBeUNhLE1BQU0sQ0FDdkUsVUFBQ2tELElBQVksRUFBRXBCLEdBQUc7WUFBQSxVQUFBcEUsTUFBQSxDQUFRd0YsSUFBSSxFQUFBeEYsTUFBQSxDQUFHbUUsUUFBUSxDQUFDeEcsTUFBTSxDQUFDOEgsTUFBTSxDQUFDckIsR0FBRyxDQUFDLENBQUM7VUFBQSxDQUFFLEVBQy9EVSxTQUNGLENBQUM7VUFFS0UsRUFBRSxHQUFHLElBQUFVLDJCQUFvQixFQUFDLENBQUMsQ0FBQ0MsUUFBUTtVQUFBLElBQ3JDWCxFQUFFO1lBQUFPLFNBQUEsQ0FBQXJJLElBQUE7WUFBQTtVQUFBO1VBQ0w0QyxPQUFPLENBQUM4RixLQUFLLENBQUMsMENBQTBDLENBQUM7VUFBQyxPQUFBTCxTQUFBLENBQUF2QyxNQUFBO1FBQUE7VUFBQXVDLFNBQUEsQ0FBQXJJLElBQUE7VUFBQSxPQUc1QzhILEVBQUUsQ0FBQ2EsT0FBTyxDQUFDLENBQUM7UUFBQTtVQUF0QlosQ0FBQyxHQUFBTSxTQUFBLENBQUFsRCxJQUFBO1VBRUQ2QyxRQUFRLEdBQUcsSUFBQVksMkJBQWMsRUFBQyxDQUFDO1VBQUFQLFNBQUEsQ0FBQXJJLElBQUE7VUFBQSxPQUMzQjhILEVBQUUsQ0FBQ2UsZ0JBQWdCLElBQUEvRixNQUFBLENBQUlrRixRQUFRLE9BQUFsRixNQUFBLENBQUk4RiwyQkFBYyxXQUFRZixVQUFVLENBQUM7UUFBQTtVQUFBUSxTQUFBLENBQUFySSxJQUFBO1VBQUEsT0FHckQrSCxDQUFDLENBQUNlLEtBQUssOEJBQUFoRyxNQUFBLENBQ0prRixRQUFRLE9BQUFsRixNQUFBLENBQUk4RiwyQkFBYyx3SkFHL0MsQ0FBQztRQUFBO1VBSkVYLE1BQU0sR0FBQUksU0FBQSxDQUFBbEQsSUFBQTtVQU1OK0MsWUFBWSxHQUFHRCxNQUFNLENBQUNjLE9BQU8sQ0FBQyxDQUFDLENBQUNoRSxHQUFHLENBQUMsVUFBQW1DLEdBQUc7WUFBQSxPQUFJQSxHQUFHLENBQUM4QixNQUFNLENBQUMsQ0FBQztVQUFBLEVBQUM7VUFFeERiLE9BQU8sR0FBR0QsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDZSxPQUFPO1VBQ2pDekUsTUFBTSxHQUFHLENBQUMsQ0FBQztVQUNqQixLQUFTaUIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHMEMsT0FBTyxDQUFDaEosTUFBTSxFQUFFc0csQ0FBQyxFQUFFLEVBQUU7WUFDdkNqQixNQUFNLENBQUMyRCxPQUFPLENBQUNlLEdBQUcsQ0FBQ3pELENBQUMsQ0FBQyxDQUFDcEYsSUFBSSxDQUFDLEdBQUc4SCxPQUFPLENBQUNlLEdBQUcsQ0FBQ3pELENBQUMsQ0FBQyxDQUFDRixJQUFJO1VBQ25EO1VBQUMsT0FBQThDLFNBQUEsQ0FBQXZDLE1BQUEsV0FFTXRCLE1BQU07UUFBQTtRQUFBO1VBQUEsT0FBQTZELFNBQUEsQ0FBQTNDLElBQUE7TUFBQTtJQUFBLEdBQUFpQyxRQUFBO0VBQUEsQ0FDZDtFQUFBLE9BQUFELGVBQUEsQ0FBQTFHLEtBQUEsT0FBQUUsU0FBQTtBQUFBO0FBRU0sU0FBU2lJLGNBQWNBLENBQUNoRCxPQUFnQixFQUFtQjtFQUNoRSxJQUFNaUQsaUJBQWlCLEdBQUcsSUFBQUMsNEJBQVMsRUFBQ2xELE9BQU8sQ0FBQztFQUU1QyxJQUFJLENBQUNpRCxpQkFBaUIsSUFBSSxDQUFDcEssS0FBSyxDQUFDQyxPQUFPLENBQUNtSyxpQkFBaUIsQ0FBQ0UsUUFBUSxDQUFDLEVBQUU7SUFDcEUsSUFBTVosS0FBSyxHQUFHLElBQUlhLEtBQUssMkZBQUF6RyxNQUFBLENBQ3FFMEcsaUNBQXNCLE1BQ2xILENBQUM7SUFDRCxNQUFNZCxLQUFLO0VBQ2I7O0VBRUE7RUFDQSxPQUFPO0lBQ0w3RCxJQUFJLEVBQUV1RTtJQUNOO0lBQ0E7RUFDRixDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,4 +1,65 @@
1
+ import * as arrow from 'apache-arrow';
1
2
  import { DataType } from 'apache-arrow/type';
3
+ import { ProtoDatasetField } from '@kepler.gl/types';
4
+ import { DatabaseConnection } from '@kepler.gl/utils';
5
+ export declare const SUPPORTED_DUCKDB_DROP_EXTENSIONS: string[];
6
+ export declare type DuckDBColumnDesc = {
7
+ name: string;
8
+ type: string;
9
+ };
10
+ /**
11
+ * Queries a DuckDB table for the schema description.
12
+ * @param connection An active DuckDB connection.
13
+ * @param tableName A name of DuckDB table to query.
14
+ * @returns An array of column names and DuckDB types.
15
+ */
16
+ export declare function getDuckDBColumnTypes(connection: DatabaseConnection, tableName: string): Promise<DuckDBColumnDesc[]>;
17
+ /**
18
+ * Generates a mapping of column names to their corresponding DuckDB data types.
19
+ * @param columns An array of column descriptions from DuckDB. Check getDuckDBColumnTypes.
20
+ * @returns A record where keys are column names and values are their data types.
21
+ */
22
+ export declare function getDuckDBColumnTypesMap(columns: DuckDBColumnDesc[]): Record<string, string>;
23
+ /**
24
+ * Constructs an SQL query to select all columns from a given table,
25
+ * converting specified columns to Well-Known Binary (WKB) format using ST_AsWKB.
26
+ * @param tableName The name of the table from which to select data.
27
+ * @param columnsToConvertToWKB An array of column names that should be converted to WKB format.
28
+ * @returns The constructed SQL query.
29
+ */
30
+ export declare function constructST_asWKBQuery(tableName: string, columnsToConvertToWKB: string[]): string;
31
+ /**
32
+ * Finds the names of columns that have a GEOMETRY type.
33
+ * @param columns An array of column descriptors from a DuckDB table.
34
+ * @returns An array of column names that are of type GEOMETRY.
35
+ */
36
+ export declare function getGeometryColumns(columns: DuckDBColumnDesc[]): string[];
37
+ /**
38
+ * Sets the GeoArrow WKB extension metadata for columns of type GEOMETRY in an Arrow table.
39
+ * @param table The Apache Arrow table whose schema fields will be modified.
40
+ * @param columns An array of column descriptors from a DuckDB table.
41
+ */
42
+ export declare function setGeoArrowWKBExtension(table: arrow.Table, columns: DuckDBColumnDesc[]): void;
43
+ /**
44
+ * Creates an arrow table from an array of arrow vectors and fields.
45
+ * @param columns An array of arrow vectors.
46
+ * @param fields An array of fields per arrow vector.
47
+ * @param arrowSchema Optional arrow table schema when available.
48
+ * @returns An arrow table.
49
+ */
50
+ export declare const restoreArrowTable: (columns: arrow.Vector[], fields: ProtoDatasetField[], arrowSchema?: arrow.Schema) => arrow.Table<any>;
51
+ /**
52
+ * DuckDb throws when geoarrow extensions are present in metadata.
53
+ * @param table An arrow table to clear from extensions.
54
+ * @returns A map of removed per field geoarrow extensions.
55
+ */
56
+ export declare const removeUnsupportedExtensions: (table: arrow.Table) => Record<string, string>;
57
+ /**
58
+ * Restore removed metadata extensions after a call to removeUnsupportedExtensions.
59
+ * @param table An arrow table to restore geoarrow extensions.
60
+ * @param removedExtensions A map of per field geoarrow extensions to restore.
61
+ */
62
+ export declare const restoreUnsupportedExtensions: (table: arrow.Table, removedExtensions: Record<string, string>) => void;
2
63
  /** Checks whether the given Apache Arrow JS type is a Point data type */
3
64
  export declare function isGeoArrowPoint(type: DataType): boolean;
4
65
  /** Checks whether the given Apache Arrow JS type is a Point data type */
@@ -11,3 +72,48 @@ export declare function isGeoArrowMultiPoint(type: DataType): boolean;
11
72
  export declare function isGeoArrowMultiLineString(type: DataType): boolean;
12
73
  /** Checks whether the given Apache Arrow JS type is a Polygon data type */
13
74
  export declare function isGeoArrowMultiPolygon(type: DataType): boolean;
75
+ /**
76
+ * Checks if the given SQL query is a SELECT query by using the EXPLAIN command.
77
+ * @param connection The DuckDB connection instance.
78
+ * @param query The SQL query to check.
79
+ * @returns Resolves to `true` if the query is a SELECT statement, otherwise `false`.
80
+ */
81
+ export declare function checkIsSelectQuery(connection: DatabaseConnection, query: string): Promise<boolean>;
82
+ /**
83
+ * Split a string with potentially multiple SQL queries (separated as usual by ';') into an array of queries.
84
+ * This implementation:
85
+ * - Handles single and double quoted strings with proper escaping
86
+ * - Ignores semicolons in line comments (--) and block comments (slash asterisk)
87
+ * - Trims whitespace from queries
88
+ * - Handles SQL-style escaped quotes ('' inside strings)
89
+ * - Returns only non-empty queries
90
+ * @param input A string with potentially multiple SQL queries.
91
+ * @returns An array of queries.
92
+ */
93
+ export declare function splitSqlStatements(input: string): string[];
94
+ /**
95
+ * Removes SQL comments from a given SQL string.
96
+ * @param sql The SQL query string from which comments should be removed.
97
+ * @returns The cleaned SQL string without comments.
98
+ */
99
+ export declare function removeSQLComments(sql: string): string;
100
+ /**
101
+ * Drops a table if it exists in the DuckDB database.
102
+ * @param connection The DuckDB connection instance.
103
+ * @param tableName The name of the table to drop.
104
+ * @returns A promise that resolves when the operation is complete.
105
+ * @throws Logs an error if the table drop operation fails.
106
+ */
107
+ export declare const dropTableIfExists: (connection: DatabaseConnection, tableName: string) => Promise<void>;
108
+ /**
109
+ * Imports a file into DuckDB as a table, supporting multiple formats from SUPPORTED_DUCKDB_DROP_EXTENSIONS.
110
+ * @param file The file to be imported.
111
+ * @returns A promise that resolves when the file has been processed into a DuckDB table.
112
+ */
113
+ export declare function tableFromFile(file: File | null): Promise<null | Error>;
114
+ /**
115
+ * Sanitizes a file name to be a valid DuckDB table name.
116
+ * @param fileName The input file name to be sanitized.
117
+ * @returns A valid DuckDB table name.
118
+ */
119
+ export declare function sanitizeDuckDBTableName(fileName: string): string;