@tricoteuses/assemblee 1.1.3 → 1.1.5

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.
Files changed (59) hide show
  1. package/lib/bugs/acteur-00010/plugin.test.js +53 -55
  2. package/lib/bugs/acteur-00010.js +26 -30
  3. package/lib/bugs/agenda-00002/plugin.test.js +78 -82
  4. package/lib/bugs/agenda-00002.js +206 -214
  5. package/lib/bugs/agenda-00008/plugin.test.js +54 -56
  6. package/lib/bugs/agenda-00008.js +38 -42
  7. package/lib/bugs/agenda-00011/plugin.test.js +204 -214
  8. package/lib/bugs/agenda-00011.js +117 -131
  9. package/lib/bugs.js +212 -232
  10. package/lib/cleaners/actes_legislatifs.js +1 -1
  11. package/lib/cleaners/acteurs.js +2 -2
  12. package/lib/cleaners/amendements.js +1 -1
  13. package/lib/cleaners/documents.js +1 -1
  14. package/lib/cleaners/dossiers_legislatifs.js +1 -1
  15. package/lib/cleaners/reunions.js +1 -1
  16. package/lib/cleaners/scrutins.js +1 -1
  17. package/lib/cleaners/xml.js +2 -2
  18. package/lib/datasets.js +2 -2
  19. package/lib/dossiers_legislatifs.js +1 -1
  20. package/lib/file_systems.js +48 -50
  21. package/lib/git.js +3 -3
  22. package/lib/git.mjs +2 -2
  23. package/lib/inserters.js +1 -1
  24. package/lib/loaders.js +1 -1
  25. package/lib/parsers/documents.js +29 -31
  26. package/lib/parsers/recherche_amendements.js +284 -288
  27. package/lib/parsers/recherche_amendements.mjs +1 -1
  28. package/lib/raw_types/acteurs_et_organes.d.ts +1 -0
  29. package/lib/raw_types/acteurs_et_organes.js +3 -2
  30. package/lib/raw_types/acteurs_et_organes.mjs +3 -2
  31. package/lib/scripts/bugs_helper.js +301 -317
  32. package/lib/scripts/clean_data.js +1 -1
  33. package/lib/scripts/clean_reorganized_data.js +13 -15
  34. package/lib/scripts/clean_reorganized_data.mjs +1 -1
  35. package/lib/scripts/diff_amendements.js +1 -1
  36. package/lib/scripts/document_dossiers_legislatifs.js +2 -2
  37. package/lib/scripts/merge_scrutins.js +1 -1
  38. package/lib/scripts/parse_textes_lois.js +3 -3
  39. package/lib/scripts/parse_textes_lois.mjs +2 -2
  40. package/lib/scripts/raw_types_from_amendements.js +133 -135
  41. package/lib/scripts/reorganize_data.js +14 -16
  42. package/lib/scripts/reorganize_data.mjs +2 -2
  43. package/lib/scripts/retrieve_deputes_photos.js +170 -172
  44. package/lib/scripts/retrieve_deputes_photos.mjs +2 -2
  45. package/lib/scripts/retrieve_documents.js +266 -278
  46. package/lib/scripts/retrieve_open_data.js +140 -144
  47. package/lib/scripts/retrieve_open_data.mjs +1 -1
  48. package/lib/scripts/retrieve_pending_amendments.js +118 -120
  49. package/lib/scripts/retrieve_senateurs_photos.js +168 -170
  50. package/lib/scripts/retrieve_senateurs_photos.mjs +2 -2
  51. package/lib/scripts/retrieve_textes_lois.js +130 -132
  52. package/lib/scripts/retrieve_textes_lois.mjs +2 -2
  53. package/lib/scripts/validate_json.js +87 -91
  54. package/lib/types/acteurs_et_organes.d.ts +1 -0
  55. package/lib/types/acteurs_et_organes.js +3 -2
  56. package/lib/types/acteurs_et_organes.mjs +3 -2
  57. package/lib/types/dossiers_legislatifs.js +1 -1
  58. package/lib/types/dossiers_legislatifs.mjs +1 -1
  59. package/package.json +6 -6
@@ -44,7 +44,7 @@ var _scrutins3 = require("../raw_types/scrutins");
44
44
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
45
45
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
46
46
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
47
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
47
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
48
48
  var optionsDefinitions = [{
49
49
  alias: "k",
50
50
  defaultValue: ["All"],
@@ -57,8 +57,8 @@ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol
57
57
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
58
58
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
59
59
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
60
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
61
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
60
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
61
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
62
62
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
63
63
  function parseArgs(argv) {
64
64
  var optionsDefinitions = [{
@@ -133,19 +133,17 @@ function cleanReorganizedData(options) {
133
133
  }, _datasets.EnabledDatasets.None);
134
134
  var choosenDatasets = _datasets.datasets;
135
135
  if (options.legislature) {
136
- (function () {
137
- var enabledLegislatures = options.legislature.map(function (legislature) {
138
- return legislature.toString();
136
+ var enabledLegislatures = options.legislature.map(function (legislature) {
137
+ return legislature.toString();
138
+ });
139
+ for (var _i = 0, _Object$entries = Object.entries(choosenDatasets); _i < _Object$entries.length; _i++) {
140
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
141
+ key = _Object$entries$_i[0],
142
+ value = _Object$entries$_i[1];
143
+ choosenDatasets[key] = value.filter(function (dataset) {
144
+ return enabledLegislatures.includes(dataset.legislature);
139
145
  });
140
- for (var _i = 0, _Object$entries = Object.entries(choosenDatasets); _i < _Object$entries.length; _i++) {
141
- var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
142
- key = _Object$entries$_i[0],
143
- value = _Object$entries$_i[1];
144
- choosenDatasets[key] = value.filter(function (dataset) {
145
- return enabledLegislatures.includes(dataset.legislature);
146
- });
147
- }
148
- })();
146
+ }
149
147
  }
150
148
  if (enabledDatasets & _datasets.EnabledDatasets.ActeursEtOrganes) {
151
149
  var _iterator = _createForOfIteratorHelper(choosenDatasets.acteursEtOrganes),
@@ -649,4 +647,4 @@ function main(argv) {
649
647
 
650
648
  /* istanbul ignore if */
651
649
  if (process.argv[1].endsWith("clean_reorganized_data.ts")) process.exit(main(process.argv));
652
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwiZGVmYXVsdFZhbHVlIiwibXVsdGlwbGUiLCJOdW1iZXIiLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsImNvbW1hbmRMaW5lQXJncyIsImNsZWFuUmVvcmdhbml6ZWREYXRhIiwiZGF0YURpciIsIkRhdGUiLCJwcm90b3R5cGUiLCJ0b0pTT04iLCJwYXRjaGVkRGF0ZVRvSnNvbiIsImVycm9yIiwiZ2l0R3JvdXBVcmwiLCJjbG9uZSIsInRyaW0iLCJyZXBsYWNlIiwidW5kZWZpbmVkIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwiYXNzZXJ0Iiwibm90U3RyaWN0RXF1YWwiLCJFbmFibGVkRGF0YXNldHMiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiY2hvb3NlbkRhdGFzZXRzIiwiZGF0YXNldHMiLCJsZWdpc2xhdHVyZSIsImVuYWJsZWRMZWdpc2xhdHVyZXMiLCJ0b1N0cmluZyIsIk9iamVjdCIsImVudHJpZXMiLCJrZXkiLCJ2YWx1ZSIsImZpbHRlciIsImRhdGFzZXQiLCJpbmNsdWRlcyIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJhY3RldXJzRXRPcmdhbmVzIiwicGF0aCIsImJhc2VuYW1lIiwiZmlsZW5hbWUiLCJleGVjU3luYyIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiYW5hbHl6ZUFuZFJlbW92ZSIsImRhdGFzZXRSYXdEaXIiLCJqb2luIiwiZGF0YXNldENsZWFuRGlyIiwid2Fsa0RpciIsImFjdGV1clNwbGl0UGF0aCIsImFjdGV1ckZpbGVuYW1lIiwibGVuZ3RoIiwiZW5kc1dpdGgiLCJhY3RldXJSYXdGaWxlUGF0aCIsInZlcmJvc2UiLCJjb25zb2xlIiwibG9nIiwiYWN0ZXVyUmF3SnNvbiIsImZzIiwicmVhZEZpbGVTeW5jIiwiYWN0ZXVyIiwiSlNPTiIsInBhcnNlIiwiY2xlYW5BY3RldXIiLCJhY3RldXJKc29uIiwic3RyaW5naWZ5IiwiYWN0ZXVyQ2xlYW4iLCJBY3RldXJzRXRPcmdhbmVzQ29udmVydCIsInRvQWN0ZXVyIiwiYWN0ZXVyQ2xlYW5Kc29uIiwiYWN0ZXVyVG9Kc29uIiwiYWN0ZXVyQ2xlYW5GaWxlUGF0aCIsImVuc3VyZURpclN5bmMiLCJkaXJuYW1lIiwid3JpdGVGaWxlU3luYyIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lUmF3RmlsZVBhdGgiLCJvcmdhbmVSYXdKc29uIiwib3JnYW5lIiwiY2xlYW5PcmdhbmUiLCJvcmdhbmVKc29uIiwib3JnYW5lQ2xlYW4iLCJ0b09yZ2FuZSIsIm9yZ2FuZUNsZWFuSnNvbiIsIm9yZ2FuZVRvSnNvbiIsIm9yZ2FuZUNsZWFuRmlsZVBhdGgiLCJjb21taXRBbmRQdXNoIiwicmVtb3RlIiwiY29tbWl0QW5kUHVzaFVpZCIsIkFnZW5kYXMiLCJhZ2VuZGFzIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25SYXdGaWxlUGF0aCIsInJldW5pb25SYXdKc29uIiwicmV1bmlvbiIsImNsZWFuUmV1bmlvbiIsInJldW5pb25Kc29uIiwicmV1bmlvbkNsZWFuIiwiQWdlbmRhc0NvbnZlcnQiLCJ0b1JldW5pb24iLCJyZXVuaW9uQ2xlYW5Kc29uIiwicmV1bmlvblRvSnNvbiIsInJldW5pb25DbGVhbkZpbGVQYXRoIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50UmF3RmlsZVBhdGgiLCJhbWVuZGVtZW50UmF3SnNvbiIsImFtZW5kZW1lbnQiLCJjbGVhbkFtZW5kZW1lbnQiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnRDbGVhbiIsIkFtZW5kZW1lbnRzQ29udmVydCIsInRvQW1lbmRlbWVudCIsImFtZW5kZW1lbnRDbGVhbkpzb24iLCJhbWVuZGVtZW50VG9Kc29uIiwiYW1lbmRlbWVudENsZWFuRmlsZVBhdGgiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50UmF3RmlsZVBhdGgiLCJkb2N1bWVudFJhd0pzb24iLCJkb2N1bWVudCIsImNsZWFuRG9jdW1lbnRPckRpdmlzaW9uIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnRDbGVhbiIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwidG9Eb2N1bWVudCIsImRvY3VtZW50Q2xlYW5Kc29uIiwiZG9jdW1lbnRUb0pzb24iLCJkb2N1bWVudENsZWFuRmlsZVBhdGgiLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llclJhd0ZpbGVQYXRoIiwiZG9zc2llclJhd0pzb24iLCJkb3NzaWVyIiwiY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZSIsImRvc3NpZXJKc29uIiwiZG9zc2llckNsZWFuIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsImRvc3NpZXJDbGVhbkpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZVRvSnNvbiIsImRvc3NpZXJDbGVhbkZpbGVQYXRoIiwiU2NydXRpbnMiLCJzY3J1dGlucyIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluUmF3RmlsZVBhdGgiLCJzY3J1dGluUmF3SnNvbiIsInNjcnV0aW4iLCJjbGVhblNjcnV0aW4iLCJzY3J1dGluSnNvbiIsInNjcnV0aW5DbGVhbiIsIlNjcnV0aW5zQ29udmVydCIsInRvU2NydXRpbiIsInNjcnV0aW5DbGVhbkpzb24iLCJzY3J1dGluVG9Kc29uIiwic2NydXRpbkNsZWFuRmlsZVBhdGgiLCJleGlzdGluZ0RhdGVUb0pzb24iLCJzaWxlbnQiLCJyZWFkZGlyU3luYyIsInBhdGhuYW1lIiwicmVtb3ZlU3luYyIsInJlcG9zaXRvcnlEaXIiLCJyZW1vdGVzIiwiY29tbWl0IiwiZ2l0IiwiY2hpbGRQcm9jZXNzIiwib3V0cHV0Iiwic3ViZGlyZWN0b3JpZXMiLCJ1aWRCcmFuY2hVcGRhdGUiLCJydW4iLCJtYWluIiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL2NsZWFuX3Jlb3JnYW5pemVkX2RhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7XG4gIGNsZWFuQWN0ZXVyLFxuICBjbGVhbkFtZW5kZW1lbnQsXG4gIGNsZWFuRG9jdW1lbnRPckRpdmlzaW9uLFxuICBjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICBjbGVhbk9yZ2FuZSxcbiAgY2xlYW5SZXVuaW9uLFxuICBjbGVhblNjcnV0aW4sXG59IGZyb20gXCIuLi9jbGVhbmVyc1wiXG5pbXBvcnQgeyBkYXRhc2V0cywgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGV4aXN0aW5nRGF0ZVRvSnNvbiwgcGF0Y2hlZERhdGVUb0pzb24gfSBmcm9tIFwiLi4vZGF0ZXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0ICogYXMgZ2l0IGZyb20gXCIuLi9naXRcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyLFxuICBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LFxuICBPcmdhbmUsXG59IGZyb20gXCIuLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCwgUmV1bmlvbiB9IGZyb20gXCIuLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IEFtZW5kZW1lbnQsIENvbnZlcnQgYXMgQW1lbmRlbWVudHNDb252ZXJ0IH0gZnJvbSBcIi4uL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4uL3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNDb252ZXJ0LCBTY3J1dGluIH0gZnJvbSBcIi4uL3R5cGVzL3NjcnV0aW5zXCJcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICAgIHtcbiAgICAgIGFsaWFzOiBcIkNcIixcbiAgICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgICAgbmFtZTogXCJjbG9uZVwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiY1wiLFxuICAgICAgaGVscDogXCJjb21taXQgY2xlYW4gZmlsZXNcIixcbiAgICAgIG5hbWU6IFwiY29tbWl0XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiZFwiLFxuICAgICAgaGVscDogXCJzaW5nbGUgZGF0YXNldCB0byByZW9yZ2FuaXplXCIsXG4gICAgICBuYW1lOiBcImRhdGFzZXRcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImtcIixcbiAgICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJsXCIsXG4gICAgICBoZWxwOiBcImxlZ2lzbGF0dXJlcyBvZiBjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJldHJpZXZlXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInJcIixcbiAgICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJzXCIsXG4gICAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBoZWxwOiBcImRvIG5vdCByZXNldCAtLWhhcmQgYWZ0ZXIgY29tbWl0IHRvIHNhdmUgSS9PIGlmIHRoZSB3b3JraW5nIHRyZWUgaXMgdG8gYmUgZGlzY2FyZGVkXCIsXG4gICAgICBuYW1lOiBcIm5vLXJlc2V0LWFmdGVyLWNvbW1pdFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInZcIixcbiAgICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgICBuYW1lOiBcInZlcmJvc2VcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgXVxuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucywge1xuICAgIGFyZ3Y6IGFyZ3YsXG4gIH0pXG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIGNsZWFuUmVvcmdhbml6ZWREYXRhKG9wdGlvbnM6IGFueSk6IGJvb2xlYW4ge1xuICBjb25zdCBkYXRhRGlyOiBzdHJpbmcgPSBvcHRpb25zLmRhdGFEaXJcblxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIGxldCBlcnJvciA9IGZhbHNlXG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZVxuICAgID8gb3B0aW9ucy5jbG9uZS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgb3B0aW9ucy5jYXRlZ29yaWVzLm1hcCgoZGF0YXNldE5hbWU6IHN0cmluZykgPT5cbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYFVua25vd24gbmFtZSBvZiBkYXRhc2V0OiAke2RhdGFzZXROYW1lfWAsXG4gICAgKSxcbiAgKVxuICBjb25zdCBlbmFibGVkRGF0YXNldHMgPSBvcHRpb25zLmNhdGVnb3JpZXMucmVkdWNlKFxuICAgIChlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cywgZGF0YXNldE5hbWU6IHN0cmluZyk6IEVuYWJsZWREYXRhc2V0cyA9PlxuICAgICAgZW5hYmxlZERhdGFzZXRzIHxcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgRW5hYmxlZERhdGFzZXRzLk5vbmUsXG4gIClcblxuICBsZXQgY2hvb3NlbkRhdGFzZXRzID0gZGF0YXNldHNcbiAgaWYob3B0aW9ucy5sZWdpc2xhdHVyZSkge1xuICAgIGNvbnN0IGVuYWJsZWRMZWdpc2xhdHVyZXMgPSBvcHRpb25zLmxlZ2lzbGF0dXJlLm1hcCgobGVnaXNsYXR1cmU6IG51bWJlcikgPT4gbGVnaXNsYXR1cmUudG9TdHJpbmcoKSlcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY2hvb3NlbkRhdGFzZXRzKSkge1xuICAgICAgY2hvb3NlbkRhdGFzZXRzW2tleSBhcyBrZXlvZiB0eXBlb2YgY2hvb3NlbkRhdGFzZXRzXSA9IHZhbHVlLmZpbHRlcigoZGF0YXNldDogeyBsZWdpc2xhdHVyZTogYW55IH0pID0+IGVuYWJsZWRMZWdpc2xhdHVyZXMuaW5jbHVkZXMoZGF0YXNldC5sZWdpc2xhdHVyZSkpXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpciwgW1wiYWN0ZXVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVyUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHthY3RldXJSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1clJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhY3RldXJSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gSlNPTi5wYXJzZShhY3RldXJSYXdKc29uKVxuICAgICAgICBjbGVhbkFjdGV1cihhY3RldXIpXG4gICAgICAgIGNvbnN0IGFjdGV1ckpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgYWN0ZXVyQ2xlYW46IEFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIGNvbnN0IGFjdGV1ckNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBBY3RldXJzRXRPcmdhbmVzQ29udmVydC5hY3RldXJUb0pzb24oYWN0ZXVyQ2xlYW4pXG5cbiAgICAgICAgY29uc3QgYWN0ZXVyQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5hY3RldXJTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoYWN0ZXVyQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoYWN0ZXVyQ2xlYW5GaWxlUGF0aCwgYWN0ZXVyQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZVJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7b3JnYW5lUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEpTT04ucGFyc2Uob3JnYW5lUmF3SnNvbilcbiAgICAgICAgY2xlYW5PcmdhbmUob3JnYW5lKVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IG9yZ2FuZUNsZWFuOiBPcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgICBjb25zdCBvcmdhbmVDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQub3JnYW5lVG9Kc29uKG9yZ2FuZUNsZWFuKVxuXG4gICAgICAgIGNvbnN0IG9yZ2FuZUNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4ub3JnYW5lU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKG9yZ2FuZUNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKG9yZ2FuZUNsZWFuRmlsZVBhdGgsIG9yZ2FuZUNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2goZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBvcHRpb25zLnJlbW90ZSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcImFjdGV1cnNcIiwgXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID0gcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25SYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtyZXVuaW9uUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJldW5pb25SYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmV1bmlvbiA9IEpTT04ucGFyc2UocmV1bmlvblJhd0pzb24pXG4gICAgICAgIGNsZWFuUmV1bmlvbihyZXVuaW9uKVxuICAgICAgICBjb25zdCByZXVuaW9uSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgcmV1bmlvbkNsZWFuOiBSZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgICBjb25zdCByZXVuaW9uQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIEFnZW5kYXNDb252ZXJ0LnJldW5pb25Ub0pzb24ocmV1bmlvbkNsZWFuKVxuXG4gICAgICAgIGNvbnN0IHJldW5pb25DbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLnJldW5pb25TcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUocmV1bmlvbkNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHJldW5pb25DbGVhbkZpbGVQYXRoLCByZXVuaW9uQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudFJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRSYXdEaXIsXG4gICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHthbWVuZGVtZW50UmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50UmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgIGFtZW5kZW1lbnRSYXdGaWxlUGF0aCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gSlNPTi5wYXJzZShhbWVuZGVtZW50UmF3SnNvbilcbiAgICAgICAgY2xlYW5BbWVuZGVtZW50KGFtZW5kZW1lbnQpXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50LCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBhbWVuZGVtZW50Q2xlYW46IEFtZW5kZW1lbnQgPVxuICAgICAgICAgIEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoYW1lbmRlbWVudEpzb24pXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQW1lbmRlbWVudHNDb252ZXJ0LmFtZW5kZW1lbnRUb0pzb24oYW1lbmRlbWVudENsZWFuKVxuXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoYW1lbmRlbWVudENsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGFtZW5kZW1lbnRDbGVhbkZpbGVQYXRoLCBhbWVuZGVtZW50Q2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJkb2N1bWVudHNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRSYXdGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0UmF3RGlyLFxuICAgICAgICAgIC4uLmRvY3VtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2RvY3VtZW50UmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudFJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudFJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IEpTT04ucGFyc2UoZG9jdW1lbnRSYXdKc29uKVxuICAgICAgICBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbihkb2N1bWVudClcbiAgICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkb2N1bWVudCwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgZG9jdW1lbnRDbGVhbjogRG9jdW1lbnQgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBjb25zdCBkb2N1bWVudENsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC5kb2N1bWVudFRvSnNvbihkb2N1bWVudENsZWFuKVxuXG4gICAgICAgIGNvbnN0IGRvY3VtZW50Q2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShkb2N1bWVudENsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGRvY3VtZW50Q2xlYW5GaWxlUGF0aCwgZG9jdW1lbnRDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llclJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2Rvc3NpZXJSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llclJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID0gSlNPTi5wYXJzZShkb3NzaWVyUmF3SnNvbilcbiAgICAgICAgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVyKVxuICAgICAgICBjb25zdCBkb3NzaWVySnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZG9zc2llciwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuOiBEb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVySnNvbilcbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC5kb3NzaWVyUGFybGVtZW50YWlyZVRvSnNvbihkb3NzaWVyQ2xlYW4pXG5cbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uZG9zc2llclNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShkb3NzaWVyQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZG9zc2llckNsZWFuRmlsZVBhdGgsIGRvc3NpZXJDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiZG9jdW1lbnRzXCIsIFwiZG9zc2llcnNcIl0pXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5SYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtzY3J1dGluUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5SYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IEpTT04ucGFyc2Uoc2NydXRpblJhd0pzb24pXG4gICAgICAgIGNsZWFuU2NydXRpbihzY3J1dGluKVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoc2NydXRpbiwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuOiBTY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBTY3J1dGluc0NvbnZlcnQuc2NydXRpblRvSnNvbihzY3J1dGluQ2xlYW4pXG5cbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShzY3J1dGluQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoc2NydXRpbkNsZWFuRmlsZVBhdGgsIHNjcnV0aW5DbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCIuXCJdKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG5cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWU6IHN0cmluZywgb3B0aW9uczogYW55KTogYW55IHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgY29uc29sZS5sb2coYENsZWFuaW5nIGRpcmVjdG9yeTogJHtkYXRhc2V0Q2xlYW5EaXJ94oCmYClcbiAgfVxuICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRDbGVhbkRpcilcbiAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0Q2xlYW5EaXIpKSB7XG4gICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgcGF0aG5hbWUgPSBwYXRoLmpvaW4oZGF0YXNldENsZWFuRGlyLCBmaWxlbmFtZSlcbiAgICBmcy5yZW1vdmVTeW5jKHBhdGhuYW1lKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2goXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgb3B0aW9uczogYW55LFxuICByZW1vdGVzPzogc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgZ2l0LmNvbW1pdChyZXBvc2l0b3J5RGlyLCBcIk5vdXZlbGxlIG1vaXNzb25cIilcbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiByZW1vdGVzIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHB1c2ggJHtyZW1vdGV9IG1hc3RlcmAsIHtcbiAgICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIC8vIERvbid0IHN0b3Agd2hlbiBwdXNoIGZhaWxzLlxuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gY29tbWl0QW5kUHVzaFVpZChcbiAgcmVwb3NpdG9yeURpcjogc3RyaW5nLFxuICBvcHRpb25zOiBhbnksXG4gIHN1YmRpcmVjdG9yaWVzOiBhbnksXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgZ2l0LnVpZEJyYW5jaFVwZGF0ZShcbiAgICAgIHJlcG9zaXRvcnlEaXIsXG4gICAgICBzdWJkaXJlY3RvcmllcyxcbiAgICAgIG9wdGlvbnNbXCJuby1yZXNldC1hZnRlci1jb21taXRcIl0sXG4gICAgKVxuICAgIGZvciAoY29uc3QgcmVtb3RlIG9mIG9wdGlvbnMucmVtb3RlIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBnaXQucnVuKHJlcG9zaXRvcnlEaXIsIGBwdXNoIC0tcXVpZXQgJHtyZW1vdGV9IHVpZDp1aWRgKVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIGlmIChjbGVhblJlb3JnYW5pemVkRGF0YShvcHRpb25zKSkge1xuICAgIHJldHVybiAxXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJjbGVhbl9yZW9yZ2FuaXplZF9kYXRhLnRzXCIpKVxuICBwcm9jZXNzLmV4aXQobWFpbihwcm9jZXNzLmFyZ3YpKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBS0E7QUFBdUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUV2RSxTQUFTQSxTQUFTLENBQUNDLElBQWMsRUFBTztFQUN0QyxJQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtJQUNFQyxLQUFLLEVBQUUsR0FBRztJQUNWQyxJQUFJLEVBQUUsK0RBQStEO0lBQ3JFQyxJQUFJLEVBQUUsT0FBTztJQUNiQyxJQUFJLEVBQUVDO0VBQ1IsQ0FBQyxFQUNEO0lBQ0VKLEtBQUssRUFBRSxHQUFHO0lBQ1ZDLElBQUksRUFBRSxvQkFBb0I7SUFDMUJDLElBQUksRUFBRSxRQUFRO0lBQ2RDLElBQUksRUFBRUU7RUFDUixDQUFDLEVBQ0Q7SUFDRUwsS0FBSyxFQUFFLEdBQUc7SUFDVkMsSUFBSSxFQUFFLDhCQUE4QjtJQUNwQ0MsSUFBSSxFQUFFLFNBQVM7SUFDZkMsSUFBSSxFQUFFQztFQUNSLENBQUMsRUFDRDtJQUNFSixLQUFLLEVBQUUsR0FBRztJQUNWTSxZQUFZLEVBQUUsQ0FBQyxL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
650
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwiZGVmYXVsdFZhbHVlIiwibXVsdGlwbGUiLCJOdW1iZXIiLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsImNvbW1hbmRMaW5lQXJncyIsImNsZWFuUmVvcmdhbml6ZWREYXRhIiwiZGF0YURpciIsIkRhdGUiLCJwcm90b3R5cGUiLCJ0b0pTT04iLCJwYXRjaGVkRGF0ZVRvSnNvbiIsImVycm9yIiwiZ2l0R3JvdXBVcmwiLCJjbG9uZSIsInRyaW0iLCJyZXBsYWNlIiwidW5kZWZpbmVkIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwiYXNzZXJ0Iiwibm90U3RyaWN0RXF1YWwiLCJFbmFibGVkRGF0YXNldHMiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiY2hvb3NlbkRhdGFzZXRzIiwiZGF0YXNldHMiLCJsZWdpc2xhdHVyZSIsImVuYWJsZWRMZWdpc2xhdHVyZXMiLCJ0b1N0cmluZyIsIk9iamVjdCIsImVudHJpZXMiLCJrZXkiLCJ2YWx1ZSIsImZpbHRlciIsImRhdGFzZXQiLCJpbmNsdWRlcyIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJhY3RldXJzRXRPcmdhbmVzIiwicGF0aCIsImJhc2VuYW1lIiwiZmlsZW5hbWUiLCJleGVjU3luYyIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiYW5hbHl6ZUFuZFJlbW92ZSIsImRhdGFzZXRSYXdEaXIiLCJqb2luIiwiZGF0YXNldENsZWFuRGlyIiwid2Fsa0RpciIsImFjdGV1clNwbGl0UGF0aCIsImFjdGV1ckZpbGVuYW1lIiwibGVuZ3RoIiwiZW5kc1dpdGgiLCJhY3RldXJSYXdGaWxlUGF0aCIsInZlcmJvc2UiLCJjb25zb2xlIiwibG9nIiwiYWN0ZXVyUmF3SnNvbiIsImZzIiwicmVhZEZpbGVTeW5jIiwiYWN0ZXVyIiwiSlNPTiIsInBhcnNlIiwiY2xlYW5BY3RldXIiLCJhY3RldXJKc29uIiwic3RyaW5naWZ5IiwiYWN0ZXVyQ2xlYW4iLCJBY3RldXJzRXRPcmdhbmVzQ29udmVydCIsInRvQWN0ZXVyIiwiYWN0ZXVyQ2xlYW5Kc29uIiwiYWN0ZXVyVG9Kc29uIiwiYWN0ZXVyQ2xlYW5GaWxlUGF0aCIsImVuc3VyZURpclN5bmMiLCJkaXJuYW1lIiwid3JpdGVGaWxlU3luYyIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lUmF3RmlsZVBhdGgiLCJvcmdhbmVSYXdKc29uIiwib3JnYW5lIiwiY2xlYW5PcmdhbmUiLCJvcmdhbmVKc29uIiwib3JnYW5lQ2xlYW4iLCJ0b09yZ2FuZSIsIm9yZ2FuZUNsZWFuSnNvbiIsIm9yZ2FuZVRvSnNvbiIsIm9yZ2FuZUNsZWFuRmlsZVBhdGgiLCJjb21taXRBbmRQdXNoIiwicmVtb3RlIiwiY29tbWl0QW5kUHVzaFVpZCIsIkFnZW5kYXMiLCJhZ2VuZGFzIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25SYXdGaWxlUGF0aCIsInJldW5pb25SYXdKc29uIiwicmV1bmlvbiIsImNsZWFuUmV1bmlvbiIsInJldW5pb25Kc29uIiwicmV1bmlvbkNsZWFuIiwiQWdlbmRhc0NvbnZlcnQiLCJ0b1JldW5pb24iLCJyZXVuaW9uQ2xlYW5Kc29uIiwicmV1bmlvblRvSnNvbiIsInJldW5pb25DbGVhbkZpbGVQYXRoIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50UmF3RmlsZVBhdGgiLCJhbWVuZGVtZW50UmF3SnNvbiIsImFtZW5kZW1lbnQiLCJjbGVhbkFtZW5kZW1lbnQiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnRDbGVhbiIsIkFtZW5kZW1lbnRzQ29udmVydCIsInRvQW1lbmRlbWVudCIsImFtZW5kZW1lbnRDbGVhbkpzb24iLCJhbWVuZGVtZW50VG9Kc29uIiwiYW1lbmRlbWVudENsZWFuRmlsZVBhdGgiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50UmF3RmlsZVBhdGgiLCJkb2N1bWVudFJhd0pzb24iLCJkb2N1bWVudCIsImNsZWFuRG9jdW1lbnRPckRpdmlzaW9uIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnRDbGVhbiIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwidG9Eb2N1bWVudCIsImRvY3VtZW50Q2xlYW5Kc29uIiwiZG9jdW1lbnRUb0pzb24iLCJkb2N1bWVudENsZWFuRmlsZVBhdGgiLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llclJhd0ZpbGVQYXRoIiwiZG9zc2llclJhd0pzb24iLCJkb3NzaWVyIiwiY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZSIsImRvc3NpZXJKc29uIiwiZG9zc2llckNsZWFuIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsImRvc3NpZXJDbGVhbkpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZVRvSnNvbiIsImRvc3NpZXJDbGVhbkZpbGVQYXRoIiwiU2NydXRpbnMiLCJzY3J1dGlucyIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluUmF3RmlsZVBhdGgiLCJzY3J1dGluUmF3SnNvbiIsInNjcnV0aW4iLCJjbGVhblNjcnV0aW4iLCJzY3J1dGluSnNvbiIsInNjcnV0aW5DbGVhbiIsIlNjcnV0aW5zQ29udmVydCIsInRvU2NydXRpbiIsInNjcnV0aW5DbGVhbkpzb24iLCJzY3J1dGluVG9Kc29uIiwic2NydXRpbkNsZWFuRmlsZVBhdGgiLCJleGlzdGluZ0RhdGVUb0pzb24iLCJzaWxlbnQiLCJyZWFkZGlyU3luYyIsInBhdGhuYW1lIiwicmVtb3ZlU3luYyIsInJlcG9zaXRvcnlEaXIiLCJyZW1vdGVzIiwiY29tbWl0IiwiZ2l0IiwiY2hpbGRQcm9jZXNzIiwib3V0cHV0Iiwic3ViZGlyZWN0b3JpZXMiLCJ1aWRCcmFuY2hVcGRhdGUiLCJydW4iLCJtYWluIiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL2NsZWFuX3Jlb3JnYW5pemVkX2RhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7XG4gIGNsZWFuQWN0ZXVyLFxuICBjbGVhbkFtZW5kZW1lbnQsXG4gIGNsZWFuRG9jdW1lbnRPckRpdmlzaW9uLFxuICBjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICBjbGVhbk9yZ2FuZSxcbiAgY2xlYW5SZXVuaW9uLFxuICBjbGVhblNjcnV0aW4sXG59IGZyb20gXCIuLi9jbGVhbmVyc1wiXG5pbXBvcnQgeyBkYXRhc2V0cywgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGV4aXN0aW5nRGF0ZVRvSnNvbiwgcGF0Y2hlZERhdGVUb0pzb24gfSBmcm9tIFwiLi4vZGF0ZXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0ICogYXMgZ2l0IGZyb20gXCIuLi9naXRcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyLFxuICBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LFxuICBPcmdhbmUsXG59IGZyb20gXCIuLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCwgUmV1bmlvbiB9IGZyb20gXCIuLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IEFtZW5kZW1lbnQsIENvbnZlcnQgYXMgQW1lbmRlbWVudHNDb252ZXJ0IH0gZnJvbSBcIi4uL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4uL3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNDb252ZXJ0LCBTY3J1dGluIH0gZnJvbSBcIi4uL3R5cGVzL3NjcnV0aW5zXCJcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICAgIHtcbiAgICAgIGFsaWFzOiBcIkNcIixcbiAgICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgICAgbmFtZTogXCJjbG9uZVwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiY1wiLFxuICAgICAgaGVscDogXCJjb21taXQgY2xlYW4gZmlsZXNcIixcbiAgICAgIG5hbWU6IFwiY29tbWl0XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiZFwiLFxuICAgICAgaGVscDogXCJzaW5nbGUgZGF0YXNldCB0byByZW9yZ2FuaXplXCIsXG4gICAgICBuYW1lOiBcImRhdGFzZXRcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImtcIixcbiAgICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJsXCIsXG4gICAgICBoZWxwOiBcImxlZ2lzbGF0dXJlcyBvZiBjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJldHJpZXZlXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInJcIixcbiAgICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJzXCIsXG4gICAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBoZWxwOiBcImRvIG5vdCByZXNldCAtLWhhcmQgYWZ0ZXIgY29tbWl0IHRvIHNhdmUgSS9PIGlmIHRoZSB3b3JraW5nIHRyZWUgaXMgdG8gYmUgZGlzY2FyZGVkXCIsXG4gICAgICBuYW1lOiBcIm5vLXJlc2V0LWFmdGVyLWNvbW1pdFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInZcIixcbiAgICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgICBuYW1lOiBcInZlcmJvc2VcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgXVxuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucywge1xuICAgIGFyZ3Y6IGFyZ3YsXG4gIH0pXG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIGNsZWFuUmVvcmdhbml6ZWREYXRhKG9wdGlvbnM6IGFueSk6IGJvb2xlYW4ge1xuICBjb25zdCBkYXRhRGlyOiBzdHJpbmcgPSBvcHRpb25zLmRhdGFEaXJcblxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIGxldCBlcnJvciA9IGZhbHNlXG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZVxuICAgID8gb3B0aW9ucy5jbG9uZS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgb3B0aW9ucy5jYXRlZ29yaWVzLm1hcCgoZGF0YXNldE5hbWU6IHN0cmluZykgPT5cbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYFVua25vd24gbmFtZSBvZiBkYXRhc2V0OiAke2RhdGFzZXROYW1lfWAsXG4gICAgKSxcbiAgKVxuICBjb25zdCBlbmFibGVkRGF0YXNldHMgPSBvcHRpb25zLmNhdGVnb3JpZXMucmVkdWNlKFxuICAgIChlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cywgZGF0YXNldE5hbWU6IHN0cmluZyk6IEVuYWJsZWREYXRhc2V0cyA9PlxuICAgICAgZW5hYmxlZERhdGFzZXRzIHxcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgRW5hYmxlZERhdGFzZXRzLk5vbmUsXG4gIClcblxuICBsZXQgY2hvb3NlbkRhdGFzZXRzID0gZGF0YXNldHNcbiAgaWYgKG9wdGlvbnMubGVnaXNsYXR1cmUpIHtcbiAgICBjb25zdCBlbmFibGVkTGVnaXNsYXR1cmVzID0gb3B0aW9ucy5sZWdpc2xhdHVyZS5tYXAoKGxlZ2lzbGF0dXJlOiBudW1iZXIpID0+XG4gICAgICBsZWdpc2xhdHVyZS50b1N0cmluZygpLFxuICAgIClcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY2hvb3NlbkRhdGFzZXRzKSkge1xuICAgICAgY2hvb3NlbkRhdGFzZXRzW2tleSBhcyBrZXlvZiB0eXBlb2YgY2hvb3NlbkRhdGFzZXRzXSA9IHZhbHVlLmZpbHRlcihcbiAgICAgICAgKGRhdGFzZXQ6IHsgbGVnaXNsYXR1cmU6IGFueSB9KSA9PlxuICAgICAgICAgIGVuYWJsZWRMZWdpc2xhdHVyZXMuaW5jbHVkZXMoZGF0YXNldC5sZWdpc2xhdHVyZSksXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpciwgW1wiYWN0ZXVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVyUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHthY3RldXJSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1clJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhY3RldXJSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gSlNPTi5wYXJzZShhY3RldXJSYXdKc29uKVxuICAgICAgICBjbGVhbkFjdGV1cihhY3RldXIpXG4gICAgICAgIGNvbnN0IGFjdGV1ckpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgYWN0ZXVyQ2xlYW46IEFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIGNvbnN0IGFjdGV1ckNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBBY3RldXJzRXRPcmdhbmVzQ29udmVydC5hY3RldXJUb0pzb24oYWN0ZXVyQ2xlYW4pXG5cbiAgICAgICAgY29uc3QgYWN0ZXVyQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5hY3RldXJTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoYWN0ZXVyQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoYWN0ZXVyQ2xlYW5GaWxlUGF0aCwgYWN0ZXVyQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZVJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7b3JnYW5lUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEpTT04ucGFyc2Uob3JnYW5lUmF3SnNvbilcbiAgICAgICAgY2xlYW5PcmdhbmUob3JnYW5lKVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IG9yZ2FuZUNsZWFuOiBPcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgICBjb25zdCBvcmdhbmVDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQub3JnYW5lVG9Kc29uKG9yZ2FuZUNsZWFuKVxuXG4gICAgICAgIGNvbnN0IG9yZ2FuZUNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4ub3JnYW5lU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKG9yZ2FuZUNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKG9yZ2FuZUNsZWFuRmlsZVBhdGgsIG9yZ2FuZUNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2goZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBvcHRpb25zLnJlbW90ZSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcImFjdGV1cnNcIiwgXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID0gcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25SYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtyZXVuaW9uUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJldW5pb25SYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmV1bmlvbiA9IEpTT04ucGFyc2UocmV1bmlvblJhd0pzb24pXG4gICAgICAgIGNsZWFuUmV1bmlvbihyZXVuaW9uKVxuICAgICAgICBjb25zdCByZXVuaW9uSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgcmV1bmlvbkNsZWFuOiBSZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgICBjb25zdCByZXVuaW9uQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIEFnZW5kYXNDb252ZXJ0LnJldW5pb25Ub0pzb24ocmV1bmlvbkNsZWFuKVxuXG4gICAgICAgIGNvbnN0IHJldW5pb25DbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLnJldW5pb25TcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUocmV1bmlvbkNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHJldW5pb25DbGVhbkZpbGVQYXRoLCByZXVuaW9uQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudFJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRSYXdEaXIsXG4gICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHthbWVuZGVtZW50UmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50UmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgIGFtZW5kZW1lbnRSYXdGaWxlUGF0aCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gSlNPTi5wYXJzZShhbWVuZGVtZW50UmF3SnNvbilcbiAgICAgICAgY2xlYW5BbWVuZGVtZW50KGFtZW5kZW1lbnQpXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50LCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBhbWVuZGVtZW50Q2xlYW46IEFtZW5kZW1lbnQgPVxuICAgICAgICAgIEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoYW1lbmRlbWVudEpzb24pXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQW1lbmRlbWVudHNDb252ZXJ0LmFtZW5kZW1lbnRUb0pzb24oYW1lbmRlbWVudENsZWFuKVxuXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoYW1lbmRlbWVudENsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGFtZW5kZW1lbnRDbGVhbkZpbGVQYXRoLCBhbWVuZGVtZW50Q2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJkb2N1bWVudHNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRSYXdGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0UmF3RGlyLFxuICAgICAgICAgIC4uLmRvY3VtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2RvY3VtZW50UmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudFJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudFJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IEpTT04ucGFyc2UoZG9jdW1lbnRSYXdKc29uKVxuICAgICAgICBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbihkb2N1bWVudClcbiAgICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkb2N1bWVudCwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgZG9jdW1lbnRDbGVhbjogRG9jdW1lbnQgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBjb25zdCBkb2N1bWVudENsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC5kb2N1bWVudFRvSnNvbihkb2N1bWVudENsZWFuKVxuXG4gICAgICAgIGNvbnN0IGRvY3VtZW50Q2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShkb2N1bWVudENsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGRvY3VtZW50Q2xlYW5GaWxlUGF0aCwgZG9jdW1lbnRDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llclJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2Rvc3NpZXJSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llclJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID0gSlNPTi5wYXJzZShkb3NzaWVyUmF3SnNvbilcbiAgICAgICAgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVyKVxuICAgICAgICBjb25zdCBkb3NzaWVySnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZG9zc2llciwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuOiBEb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVySnNvbilcbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC5kb3NzaWVyUGFybGVtZW50YWlyZVRvSnNvbihkb3NzaWVyQ2xlYW4pXG5cbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uZG9zc2llclNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShkb3NzaWVyQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZG9zc2llckNsZWFuRmlsZVBhdGgsIGRvc3NpZXJDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiZG9jdW1lbnRzXCIsIFwiZG9zc2llcnNcIl0pXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5SYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtzY3J1dGluUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5SYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IEpTT04ucGFyc2Uoc2NydXRpblJhd0pzb24pXG4gICAgICAgIGNsZWFuU2NydXRpbihzY3J1dGluKVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoc2NydXRpbiwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuOiBTY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBTY3J1dGluc0NvbnZlcnQuc2NydXRpblRvSnNvbihzY3J1dGluQ2xlYW4pXG5cbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShzY3J1dGluQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoc2NydXRpbkNsZWFuRmlsZVBhdGgsIHNjcnV0aW5DbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCIuXCJdKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG5cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWU6IHN0cmluZywgb3B0aW9uczogYW55KTogYW55IHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgY29uc29sZS5sb2coYENsZWFuaW5nIGRpcmVjdG9yeTogJHtkYXRhc2V0Q2xlYW5EaXJ94oCmYClcbiAgfVxuICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRDbGVhbkRpcilcbiAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0Q2xlYW5EaXIpKSB7XG4gICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgcGF0aG5hbWUgPSBwYXRoLmpvaW4oZGF0YXNldENsZWFuRGlyLCBmaWxlbmFtZSlcbiAgICBmcy5yZW1vdmVTeW5jKHBhdGhuYW1lKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2goXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgb3B0aW9uczogYW55LFxuICByZW1vdGVzPzogc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgZ2l0LmNvbW1pdChyZXBvc2l0b3J5RGlyLCBcIk5vdXZlbGxlIG1vaXNzb25cIilcbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiByZW1vdGVzIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHB1c2ggJHtyZW1vdGV9IG1hc3RlcmAsIHtcbiAgICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIC8vIERvbid0IHN0b3Agd2hlbiBwdXNoIGZhaWxzLlxuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gY29tbWl0QW5kUHVzaFVpZChcbiAgcmVwb3NpdG9yeURpcjogc3RyaW5nLFxuICBvcHRpb25zOiBhbnksXG4gIHN1YmRpcmVjdG9yaWVzOiBhbnksXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgZ2l0LnVpZEJyYW5jaFVwZGF0ZShcbiAgICAgIHJlcG9zaXRvcnlEaXIsXG4gICAgICBzdWJkaXJlY3RvcmllcyxcbiAgICAgIG9wdGlvbnNbXCJuby1yZXNldC1hZnRlci1jb21taXRcIl0sXG4gICAgKVxuICAgIGZvciAoY29uc3QgcmVtb3RlIG9mIG9wdGlvbnMucmVtb3RlIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBnaXQucnVuKHJlcG9zaXRvcnlEaXIsIGBwdXNoIC0tcXVpZXQgJHtyZW1vdGV9IHVpZDp1aWRgKVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIGlmIChjbGVhblJlb3JnYW5pemVkRGF0YShvcHRpb25zKSkge1xuICAgIHJldHVybiAxXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJjbGVhbl9yZW9yZ2FuaXplZF9kYXRhLnRzXCIpKVxuICBwcm9jZXNzLmV4aXQobWFpbihwcm9jZXNzLmFyZ3YpKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBS0E7QUFBdUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUV2RSxTQUFTQSxTQUFTLENBQUNDLElBQWMsRUFBTztFQUN0QyxJQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtJQUNFQyxLQUFLLEVBQUUsR0FBRztJQUNWQyxJQUFJLEVBQUUsK0RBQStEO0lBQ3JFQyxJQUFJLEVBQUUsT0FBTztJQUNiQyxJQUFJLEVBQUVDO0VBQ1IsQ0FBQyxFQUNEO0lBQ0VKLEtBQUssRUFBRSxHQUFHO0lBQ1ZDLElBQUksRUFBRSxvQkFBb0I7SUFDMUJDLElBQUksRUFBRSxRQUFRO0lBQ2RDLElBQUksRUFBRUU7RUFDUixDQUFDLEVBQ0Q7SUFDRUwsS0FBSyxFQUFFLEdBQUc7SUFDVkMsSUFBSSxFQUFFLDhCQUE4QjtJQUNwQ0MsSUFBSSxFQUFFLFNBQVM7SUFDZkMsSUFBSSxFQUFFQztFQUNSLENBQUMsRUFD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
@@ -454,4 +454,4 @@ function main(argv) {
454
454
 
455
455
  /* istanbul ignore if */
456
456
  if (process.argv[1].endsWith("clean_reorganized_data.ts")) process.exit(main(process.argv));
457
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwicGF0aCIsImNsZWFuQWN0ZXVyIiwiY2xlYW5BbWVuZGVtZW50IiwiY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24iLCJjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiY2xlYW5PcmdhbmUiLCJjbGVhblJldW5pb24iLCJjbGVhblNjcnV0aW4iLCJkYXRhc2V0cyIsIkVuYWJsZWREYXRhc2V0cyIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInBhdGNoZWREYXRlVG9Kc29uIiwid2Fsa0RpciIsImdpdCIsIkNvbnZlcnQiLCJBY3RldXJzRXRPcmdhbmVzQ29udmVydCIsIkFnZW5kYXNDb252ZXJ0IiwiQW1lbmRlbWVudHNDb252ZXJ0IiwiRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQiLCJTY3J1dGluc0NvbnZlcnQiLCJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwiZGVmYXVsdFZhbHVlIiwibXVsdGlwbGUiLCJOdW1iZXIiLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsImNsZWFuUmVvcmdhbml6ZWREYXRhIiwiZGF0YURpciIsIkRhdGUiLCJwcm90b3R5cGUiLCJ0b0pTT04iLCJlcnJvciIsImdpdEdyb3VwVXJsIiwiY2xvbmUiLCJ0cmltIiwicmVwbGFjZSIsInVuZGVmaW5lZCIsImNhdGVnb3JpZXMiLCJtYXAiLCJkYXRhc2V0TmFtZSIsIm5vdFN0cmljdEVxdWFsIiwiZW5hYmxlZERhdGFzZXRzIiwicmVkdWNlIiwiTm9uZSIsImNob29zZW5EYXRhc2V0cyIsImxlZ2lzbGF0dXJlIiwiZW5hYmxlZExlZ2lzbGF0dXJlcyIsInRvU3RyaW5nIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwiZmlsdGVyIiwiZGF0YXNldCIsImluY2x1ZGVzIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImFjdGV1cnNFdE9yZ2FuZXMiLCJiYXNlbmFtZSIsImZpbGVuYW1lIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJhbmFseXplQW5kUmVtb3ZlIiwiZGF0YXNldFJhd0RpciIsImpvaW4iLCJkYXRhc2V0Q2xlYW5EaXIiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyUmF3RmlsZVBhdGgiLCJ2ZXJib3NlIiwiY29uc29sZSIsImxvZyIsImFjdGV1clJhd0pzb24iLCJyZWFkRmlsZVN5bmMiLCJhY3RldXIiLCJKU09OIiwicGFyc2UiLCJhY3RldXJKc29uIiwic3RyaW5naWZ5IiwiYWN0ZXVyQ2xlYW4iLCJ0b0FjdGV1ciIsImFjdGV1ckNsZWFuSnNvbiIsImFjdGV1clRvSnNvbiIsImFjdGV1ckNsZWFuRmlsZVBhdGgiLCJlbnN1cmVEaXJTeW5jIiwiZGlybmFtZSIsIndyaXRlRmlsZVN5bmMiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZVJhd0ZpbGVQYXRoIiwib3JnYW5lUmF3SnNvbiIsIm9yZ2FuZSIsIm9yZ2FuZUpzb24iLCJvcmdhbmVDbGVhbiIsInRvT3JnYW5lIiwib3JnYW5lQ2xlYW5Kc29uIiwib3JnYW5lVG9Kc29uIiwib3JnYW5lQ2xlYW5GaWxlUGF0aCIsImNvbW1pdEFuZFB1c2giLCJyZW1vdGUiLCJjb21taXRBbmRQdXNoVWlkIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvblJhd0ZpbGVQYXRoIiwicmV1bmlvblJhd0pzb24iLCJyZXVuaW9uIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uQ2xlYW4iLCJ0b1JldW5pb24iLCJyZXVuaW9uQ2xlYW5Kc29uIiwicmV1bmlvblRvSnNvbiIsInJldW5pb25DbGVhbkZpbGVQYXRoIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50UmF3RmlsZVBhdGgiLCJhbWVuZGVtZW50UmF3SnNvbiIsImFtZW5kZW1lbnQiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnRDbGVhbiIsInRvQW1lbmRlbWVudCIsImFtZW5kZW1lbnRDbGVhbkpzb24iLCJhbWVuZGVtZW50VG9Kc29uIiwiYW1lbmRlbWVudENsZWFuRmlsZVBhdGgiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50UmF3RmlsZVBhdGgiLCJkb2N1bWVudFJhd0pzb24iLCJkb2N1bWVudCIsImRvY3VtZW50SnNvbiIsImRvY3VtZW50Q2xlYW4iLCJ0b0RvY3VtZW50IiwiZG9jdW1lbnRDbGVhbkpzb24iLCJkb2N1bWVudFRvSnNvbiIsImRvY3VtZW50Q2xlYW5GaWxlUGF0aCIsImRvc3NpZXJTcGxpdFBhdGgiLCJkb3NzaWVyRmlsZW5hbWUiLCJkb3NzaWVyUmF3RmlsZVBhdGgiLCJkb3NzaWVyUmF3SnNvbiIsImRvc3NpZXIiLCJkb3NzaWVySnNvbiIsImRvc3NpZXJDbGVhbiIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJkb3NzaWVyQ2xlYW5Kc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVUb0pzb24iLCJkb3NzaWVyQ2xlYW5GaWxlUGF0aCIsIlNjcnV0aW5zIiwic2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpblJhd0ZpbGVQYXRoIiwic2NydXRpblJhd0pzb24iLCJzY3J1dGluIiwic2NydXRpbkpzb24iLCJzY3J1dGluQ2xlYW4iLCJ0b1NjcnV0aW4iLCJzY3J1dGluQ2xlYW5Kc29uIiwic2NydXRpblRvSnNvbiIsInNjcnV0aW5DbGVhbkZpbGVQYXRoIiwic2lsZW50IiwicmVhZGRpclN5bmMiLCJwYXRobmFtZSIsInJlbW92ZVN5bmMiLCJyZXBvc2l0b3J5RGlyIiwicmVtb3RlcyIsImNvbW1pdCIsImNoaWxkUHJvY2VzcyIsIm91dHB1dCIsInN1YmRpcmVjdG9yaWVzIiwidWlkQnJhbmNoVXBkYXRlIiwicnVuIiwibWFpbiIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9jbGVhbl9yZW9yZ2FuaXplZF9kYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQge1xuICBjbGVhbkFjdGV1cixcbiAgY2xlYW5BbWVuZGVtZW50LFxuICBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbixcbiAgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgY2xlYW5PcmdhbmUsXG4gIGNsZWFuUmV1bmlvbixcbiAgY2xlYW5TY3J1dGluLFxufSBmcm9tIFwiLi4vY2xlYW5lcnNcIlxuaW1wb3J0IHsgZGF0YXNldHMsIEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBleGlzdGluZ0RhdGVUb0pzb24sIHBhdGNoZWREYXRlVG9Kc29uIH0gZnJvbSBcIi4uL2RhdGVzXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vZ2l0XCJcbmltcG9ydCB7XG4gIEFjdGV1cixcbiAgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzQ29udmVydCxcbiAgT3JnYW5lLFxufSBmcm9tIFwiLi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc0NvbnZlcnQsIFJldW5pb24gfSBmcm9tIFwiLi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LFxuICBEb2N1bWVudCxcbiAgRG9zc2llclBhcmxlbWVudGFpcmUsXG59IGZyb20gXCIuLi90eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zQ29udmVydCwgU2NydXRpbiB9IGZyb20gXCIuLi90eXBlcy9zY3J1dGluc1wiXG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2OiBzdHJpbmdbXSk6IGFueSB7XG4gIGNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAgICB7XG4gICAgICBhbGlhczogXCJDXCIsXG4gICAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImNcIixcbiAgICAgIGhlbHA6IFwiY29tbWl0IGNsZWFuIGZpbGVzXCIsXG4gICAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImRcIixcbiAgICAgIGhlbHA6IFwic2luZ2xlIGRhdGFzZXQgdG8gcmVvcmdhbml6ZVwiLFxuICAgICAgbmFtZTogXCJkYXRhc2V0XCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJrXCIsXG4gICAgICBkZWZhdWx0VmFsdWU6IFtcIkFsbFwiXSxcbiAgICAgIGhlbHA6IFwiY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZW9yZ2FuaXplXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwiY2F0ZWdvcmllc1wiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwibFwiLFxuICAgICAgaGVscDogXCJsZWdpc2xhdHVyZXMgb2YgY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZXRyaWV2ZVwiLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICBuYW1lOiBcImxlZ2lzbGF0dXJlXCIsXG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJyXCIsXG4gICAgICBoZWxwOiBcInB1c2ggY29tbWl0IHRvIGdpdmVuIHJlbW90ZVwiLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwic1wiLFxuICAgICAgaGVscDogXCJkb24ndCBsb2cgYW55dGhpbmdcIixcbiAgICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgaGVscDogXCJkbyBub3QgcmVzZXQgLS1oYXJkIGFmdGVyIGNvbW1pdCB0byBzYXZlIEkvTyBpZiB0aGUgd29ya2luZyB0cmVlIGlzIHRvIGJlIGRpc2NhcmRlZFwiLFxuICAgICAgbmFtZTogXCJuby1yZXNldC1hZnRlci1jb21taXRcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJ2XCIsXG4gICAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMsIHtcbiAgICBhcmd2OiBhcmd2LFxuICB9KVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiBjbGVhblJlb3JnYW5pemVkRGF0YShvcHRpb25zOiBhbnkpOiBib29sZWFuIHtcbiAgY29uc3QgZGF0YURpcjogc3RyaW5nID0gb3B0aW9ucy5kYXRhRGlyXG5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cblxuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBjb25zdCBnaXRHcm91cFVybCA9IG9wdGlvbnMuY2xvbmVcbiAgICA/IG9wdGlvbnMuY2xvbmUudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICA6IHVuZGVmaW5lZFxuXG4gIG9wdGlvbnMuY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG5cbiAgbGV0IGNob29zZW5EYXRhc2V0cyA9IGRhdGFzZXRzXG4gIGlmKG9wdGlvbnMubGVnaXNsYXR1cmUpIHtcbiAgICBjb25zdCBlbmFibGVkTGVnaXNsYXR1cmVzID0gb3B0aW9ucy5sZWdpc2xhdHVyZS5tYXAoKGxlZ2lzbGF0dXJlOiBudW1iZXIpID0+IGxlZ2lzbGF0dXJlLnRvU3RyaW5nKCkpXG4gICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNob29zZW5EYXRhc2V0cykpIHtcbiAgICAgIGNob29zZW5EYXRhc2V0c1trZXkgYXMga2V5b2YgdHlwZW9mIGNob29zZW5EYXRhc2V0c10gPSB2YWx1ZS5maWx0ZXIoKGRhdGFzZXQ6IHsgbGVnaXNsYXR1cmU6IGFueSB9KSA9PiBlbmFibGVkTGVnaXNsYXR1cmVzLmluY2x1ZGVzKGRhdGFzZXQubGVnaXNsYXR1cmUpKVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1clJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7YWN0ZXVyUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFjdGV1ciA9IEpTT04ucGFyc2UoYWN0ZXVyUmF3SnNvbilcbiAgICAgICAgY2xlYW5BY3RldXIoYWN0ZXVyKVxuICAgICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGFjdGV1ckNsZWFuOiBBY3RldXIgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cihhY3RldXJKc29uKVxuICAgICAgICBjb25zdCBhY3RldXJDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQuYWN0ZXVyVG9Kc29uKGFjdGV1ckNsZWFuKVxuXG4gICAgICAgIGNvbnN0IGFjdGV1ckNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uYWN0ZXVyU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGFjdGV1ckNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGFjdGV1ckNsZWFuRmlsZVBhdGgsIGFjdGV1ckNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVSYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5vcmdhbmVTcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke29yZ2FuZVJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZVJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBvcmdhbmUgPSBKU09OLnBhcnNlKG9yZ2FuZVJhd0pzb24pXG4gICAgICAgIGNsZWFuT3JnYW5lKG9yZ2FuZSlcbiAgICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBvcmdhbmVDbGVhbjogT3JnYW5lID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9PcmdhbmUob3JnYW5lSnNvbilcbiAgICAgICAgY29uc3Qgb3JnYW5lQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0Lm9yZ2FuZVRvSnNvbihvcmdhbmVDbGVhbilcblxuICAgICAgICBjb25zdCBvcmdhbmVDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLm9yZ2FuZVNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShvcmdhbmVDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhvcmdhbmVDbGVhbkZpbGVQYXRoLCBvcmdhbmVDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCJhY3RldXJzXCIsIFwib3JnYW5lc1wiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIpKSB7XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9IHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7cmV1bmlvblJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvblJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJldW5pb24gPSBKU09OLnBhcnNlKHJldW5pb25SYXdKc29uKVxuICAgICAgICBjbGVhblJldW5pb24ocmV1bmlvbilcbiAgICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHJldW5pb24sIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IHJldW5pb25DbGVhbjogUmV1bmlvbiA9IEFnZW5kYXNDb252ZXJ0LnRvUmV1bmlvbihyZXVuaW9uSnNvbilcbiAgICAgICAgY29uc3QgcmV1bmlvbkNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBBZ2VuZGFzQ29udmVydC5yZXVuaW9uVG9Kc29uKHJldW5pb25DbGVhbilcblxuICAgICAgICBjb25zdCByZXVuaW9uQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKHJldW5pb25DbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhyZXVuaW9uQ2xlYW5GaWxlUGF0aCwgcmV1bmlvbkNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2goZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBvcHRpb25zLnJlbW90ZSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcIi5cIl0pKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIpKSB7XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRSYXdGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0UmF3RGlyLFxuICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7YW1lbmRlbWVudFJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudFJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICBhbWVuZGVtZW50UmF3RmlsZVBhdGgsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IEpTT04ucGFyc2UoYW1lbmRlbWVudFJhd0pzb24pXG4gICAgICAgIGNsZWFuQW1lbmRlbWVudChhbWVuZGVtZW50KVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoYW1lbmRlbWVudCwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudENsZWFuOiBBbWVuZGVtZW50ID1cbiAgICAgICAgICBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50Q2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIEFtZW5kZW1lbnRzQ29udmVydC5hbWVuZGVtZW50VG9Kc29uKGFtZW5kZW1lbnRDbGVhbilcblxuICAgICAgICBjb25zdCBhbWVuZGVtZW50Q2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5hbWVuZGVtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGFtZW5kZW1lbnRDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhhbWVuZGVtZW50Q2xlYW5GaWxlUGF0aCwgYW1lbmRlbWVudENsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2goZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBvcHRpb25zLnJlbW90ZSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcIi5cIl0pKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID0gZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50UmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldFJhd0RpcixcbiAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtkb2N1bWVudFJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBKU09OLnBhcnNlKGRvY3VtZW50UmF3SnNvbilcbiAgICAgICAgY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24oZG9jdW1lbnQpXG4gICAgICAgIGNvbnN0IGRvY3VtZW50SnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZG9jdW1lbnQsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGRvY3VtZW50Q2xlYW46IERvY3VtZW50ID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0RvY3VtZW50KGRvY3VtZW50SnNvbilcbiAgICAgICAgY29uc3QgZG9jdW1lbnRDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQuZG9jdW1lbnRUb0pzb24oZG9jdW1lbnRDbGVhbilcblxuICAgICAgICBjb25zdCBkb2N1bWVudENsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZG9jdW1lbnRDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhkb2N1bWVudENsZWFuRmlsZVBhdGgsIGRvY3VtZW50Q2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJkb3NzaWVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVuYW1lID0gZG9zc2llclNwbGl0UGF0aFtkb3NzaWVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9zc2llckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJSYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5kb3NzaWVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtkb3NzaWVyUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVyUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvc3NpZXJSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9zc2llciA9IEpTT04ucGFyc2UoZG9zc2llclJhd0pzb24pXG4gICAgICAgIGNsZWFuRG9zc2llclBhcmxlbWVudGFpcmUoZG9zc2llcilcbiAgICAgICAgY29uc3QgZG9zc2llckpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRvc3NpZXIsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGRvc3NpZXJDbGVhbjogRG9zc2llclBhcmxlbWVudGFpcmUgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoZG9zc2llckpzb24pXG4gICAgICAgIGNvbnN0IGRvc3NpZXJDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQuZG9zc2llclBhcmxlbWVudGFpcmVUb0pzb24oZG9zc2llckNsZWFuKVxuXG4gICAgICAgIGNvbnN0IGRvc3NpZXJDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLmRvc3NpZXJTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZG9zc2llckNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGRvc3NpZXJDbGVhbkZpbGVQYXRoLCBkb3NzaWVyQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcImRvY3VtZW50c1wiLCBcImRvc3NpZXJzXCJdKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIpKSB7XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9IHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4uc2NydXRpblNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7c2NydXRpblJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpblJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhzY3J1dGluUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHNjcnV0aW4gPSBKU09OLnBhcnNlKHNjcnV0aW5SYXdKc29uKVxuICAgICAgICBjbGVhblNjcnV0aW4oc2NydXRpbilcbiAgICAgICAgY29uc3Qgc2NydXRpbkpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHNjcnV0aW4sIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IHNjcnV0aW5DbGVhbjogU2NydXRpbiA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW4oc2NydXRpbkpzb24pXG4gICAgICAgIGNvbnN0IHNjcnV0aW5DbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgU2NydXRpbnNDb252ZXJ0LnNjcnV0aW5Ub0pzb24oc2NydXRpbkNsZWFuKVxuXG4gICAgICAgIGNvbnN0IHNjcnV0aW5DbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLnNjcnV0aW5TcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoc2NydXRpbkNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHNjcnV0aW5DbGVhbkZpbGVQYXRoLCBzY3J1dGluQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdG9yZSBzdGFuZGFyZCBjb252ZXJzaW9uIG9mIGRhdGVzIHRvIEpTT04uXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGV4aXN0aW5nRGF0ZVRvSnNvblxuXG4gIHJldHVybiBlcnJvclxufVxuXG5mdW5jdGlvbiBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IGFueSB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgIGNvbnNvbGUubG9nKGBDbGVhbmluZyBkaXJlY3Rvcnk6ICR7ZGF0YXNldENsZWFuRGlyfeKApmApXG4gIH1cbiAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0Q2xlYW5EaXIpXG4gIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldENsZWFuRGlyKSkge1xuICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IHBhdGhuYW1lID0gcGF0aC5qb2luKGRhdGFzZXRDbGVhbkRpciwgZmlsZW5hbWUpXG4gICAgZnMucmVtb3ZlU3luYyhwYXRobmFtZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRBbmRQdXNoKFxuICByZXBvc2l0b3J5RGlyOiBzdHJpbmcsXG4gIG9wdGlvbnM6IGFueSxcbiAgcmVtb3Rlcz86IHN0cmluZ1tdLFxuKTogYm9vbGVhbiB7XG4gIGxldCBlcnJvciA9IGZhbHNlXG4gIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgIGdpdC5jb21taXQocmVwb3NpdG9yeURpciwgXCJOb3V2ZWxsZSBtb2lzc29uXCIpXG4gICAgZm9yIChjb25zdCByZW1vdGUgb2YgcmVtb3RlcyB8fCBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdXNoICR7cmVtb3RlfSBtYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgICAvLyBEb24ndCBzdG9wIHdoZW4gcHVzaCBmYWlscy5cbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2hVaWQoXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgb3B0aW9uczogYW55LFxuICBzdWJkaXJlY3RvcmllczogYW55LFxuKTogYm9vbGVhbiB7XG4gIGxldCBlcnJvciA9IGZhbHNlXG4gIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgIGdpdC51aWRCcmFuY2hVcGRhdGUoXG4gICAgICByZXBvc2l0b3J5RGlyLFxuICAgICAgc3ViZGlyZWN0b3JpZXMsXG4gICAgICBvcHRpb25zW1wibm8tcmVzZXQtYWZ0ZXItY29tbWl0XCJdLFxuICAgIClcbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiBvcHRpb25zLnJlbW90ZSB8fCBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZ2l0LnJ1bihyZXBvc2l0b3J5RGlyLCBgcHVzaCAtLXF1aWV0ICR7cmVtb3RlfSB1aWQ6dWlkYClcbiAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIG1haW4oYXJndjogYW55KTogbnVtYmVyIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlQXJncyhhcmd2KVxuICBpZiAoY2xlYW5SZW9yZ2FuaXplZERhdGEob3B0aW9ucykpIHtcbiAgICByZXR1cm4gMVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAwXG4gIH1cbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwiY2xlYW5fcmVvcmdhbml6ZWRfZGF0YS50c1wiKSlcbiAgcHJvY2Vzcy5leGl0KG1haW4ocHJvY2Vzcy5hcmd2KSlcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsTUFBTSxNQUFNLFFBQVE7QUFDM0IsU0FBU0MsUUFBUSxRQUFRLGVBQWU7QUFDeEMsT0FBT0MsZUFBZSxNQUFNLG1CQUFtQjtBQUMvQyxPQUFPQyxFQUFFLE1BQU0sVUFBVTtBQUN6QixPQUFPQyxJQUFJLE1BQU0sTUFBTTtBQUFBLFNBR3JCQyxXQUFXLEVBQ1hDLGVBQWUsRUFDZkMsdUJBQXVCLEVBQ3ZCQyx5QkFBeUIsRUFDekJDLFdBQVcsRUFDWEMsWUFBWSxFQUNaQyxZQUFZO0FBQUEsU0FFTEMsUUFBUSxFQUFFQyxlQUFlO0FBQUEsU0FDekJDLGtCQUFrQixFQUFFQyxpQkFBaUI7QUFBQSxTQUNyQ0MsT0FBTztBQUFBLE9BQ1QsS0FBS0MsR0FBRztBQUFBLFNBR2JDLE9BQU8sSUFBSUMsdUJBQXVCO0FBQUEsU0FHM0JELE9BQU8sSUFBSUUsY0FBYztBQUFBLFNBQ2JGLE9BQU8sSUFBSUcsa0JBQWtCO0FBQUEsU0FFaERILE9BQU8sSUFBSUksMEJBQTBCO0FBQUEsU0FJOUJKLE9BQU8sSUFBSUssZUFBZTtBQUVuQyxTQUFTQyxTQUFTLENBQUNDLElBQWMsRUFBTztFQUN0QyxNQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtJQUNFQyxLQUFLLEVBQUUsR0FBRztJQUNWQyxJQUFJLEVBQUUsK0RB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
457
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwicGF0aCIsImNsZWFuQWN0ZXVyIiwiY2xlYW5BbWVuZGVtZW50IiwiY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24iLCJjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiY2xlYW5PcmdhbmUiLCJjbGVhblJldW5pb24iLCJjbGVhblNjcnV0aW4iLCJkYXRhc2V0cyIsIkVuYWJsZWREYXRhc2V0cyIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInBhdGNoZWREYXRlVG9Kc29uIiwid2Fsa0RpciIsImdpdCIsIkNvbnZlcnQiLCJBY3RldXJzRXRPcmdhbmVzQ29udmVydCIsIkFnZW5kYXNDb252ZXJ0IiwiQW1lbmRlbWVudHNDb252ZXJ0IiwiRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQiLCJTY3J1dGluc0NvbnZlcnQiLCJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwiZGVmYXVsdFZhbHVlIiwibXVsdGlwbGUiLCJOdW1iZXIiLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsImNsZWFuUmVvcmdhbml6ZWREYXRhIiwiZGF0YURpciIsIkRhdGUiLCJwcm90b3R5cGUiLCJ0b0pTT04iLCJlcnJvciIsImdpdEdyb3VwVXJsIiwiY2xvbmUiLCJ0cmltIiwicmVwbGFjZSIsInVuZGVmaW5lZCIsImNhdGVnb3JpZXMiLCJtYXAiLCJkYXRhc2V0TmFtZSIsIm5vdFN0cmljdEVxdWFsIiwiZW5hYmxlZERhdGFzZXRzIiwicmVkdWNlIiwiTm9uZSIsImNob29zZW5EYXRhc2V0cyIsImxlZ2lzbGF0dXJlIiwiZW5hYmxlZExlZ2lzbGF0dXJlcyIsInRvU3RyaW5nIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwiZmlsdGVyIiwiZGF0YXNldCIsImluY2x1ZGVzIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImFjdGV1cnNFdE9yZ2FuZXMiLCJiYXNlbmFtZSIsImZpbGVuYW1lIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJhbmFseXplQW5kUmVtb3ZlIiwiZGF0YXNldFJhd0RpciIsImpvaW4iLCJkYXRhc2V0Q2xlYW5EaXIiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyUmF3RmlsZVBhdGgiLCJ2ZXJib3NlIiwiY29uc29sZSIsImxvZyIsImFjdGV1clJhd0pzb24iLCJyZWFkRmlsZVN5bmMiLCJhY3RldXIiLCJKU09OIiwicGFyc2UiLCJhY3RldXJKc29uIiwic3RyaW5naWZ5IiwiYWN0ZXVyQ2xlYW4iLCJ0b0FjdGV1ciIsImFjdGV1ckNsZWFuSnNvbiIsImFjdGV1clRvSnNvbiIsImFjdGV1ckNsZWFuRmlsZVBhdGgiLCJlbnN1cmVEaXJTeW5jIiwiZGlybmFtZSIsIndyaXRlRmlsZVN5bmMiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZVJhd0ZpbGVQYXRoIiwib3JnYW5lUmF3SnNvbiIsIm9yZ2FuZSIsIm9yZ2FuZUpzb24iLCJvcmdhbmVDbGVhbiIsInRvT3JnYW5lIiwib3JnYW5lQ2xlYW5Kc29uIiwib3JnYW5lVG9Kc29uIiwib3JnYW5lQ2xlYW5GaWxlUGF0aCIsImNvbW1pdEFuZFB1c2giLCJyZW1vdGUiLCJjb21taXRBbmRQdXNoVWlkIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvblJhd0ZpbGVQYXRoIiwicmV1bmlvblJhd0pzb24iLCJyZXVuaW9uIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uQ2xlYW4iLCJ0b1JldW5pb24iLCJyZXVuaW9uQ2xlYW5Kc29uIiwicmV1bmlvblRvSnNvbiIsInJldW5pb25DbGVhbkZpbGVQYXRoIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50UmF3RmlsZVBhdGgiLCJhbWVuZGVtZW50UmF3SnNvbiIsImFtZW5kZW1lbnQiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnRDbGVhbiIsInRvQW1lbmRlbWVudCIsImFtZW5kZW1lbnRDbGVhbkpzb24iLCJhbWVuZGVtZW50VG9Kc29uIiwiYW1lbmRlbWVudENsZWFuRmlsZVBhdGgiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50UmF3RmlsZVBhdGgiLCJkb2N1bWVudFJhd0pzb24iLCJkb2N1bWVudCIsImRvY3VtZW50SnNvbiIsImRvY3VtZW50Q2xlYW4iLCJ0b0RvY3VtZW50IiwiZG9jdW1lbnRDbGVhbkpzb24iLCJkb2N1bWVudFRvSnNvbiIsImRvY3VtZW50Q2xlYW5GaWxlUGF0aCIsImRvc3NpZXJTcGxpdFBhdGgiLCJkb3NzaWVyRmlsZW5hbWUiLCJkb3NzaWVyUmF3RmlsZVBhdGgiLCJkb3NzaWVyUmF3SnNvbiIsImRvc3NpZXIiLCJkb3NzaWVySnNvbiIsImRvc3NpZXJDbGVhbiIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJkb3NzaWVyQ2xlYW5Kc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVUb0pzb24iLCJkb3NzaWVyQ2xlYW5GaWxlUGF0aCIsIlNjcnV0aW5zIiwic2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpblJhd0ZpbGVQYXRoIiwic2NydXRpblJhd0pzb24iLCJzY3J1dGluIiwic2NydXRpbkpzb24iLCJzY3J1dGluQ2xlYW4iLCJ0b1NjcnV0aW4iLCJzY3J1dGluQ2xlYW5Kc29uIiwic2NydXRpblRvSnNvbiIsInNjcnV0aW5DbGVhbkZpbGVQYXRoIiwic2lsZW50IiwicmVhZGRpclN5bmMiLCJwYXRobmFtZSIsInJlbW92ZVN5bmMiLCJyZXBvc2l0b3J5RGlyIiwicmVtb3RlcyIsImNvbW1pdCIsImNoaWxkUHJvY2VzcyIsIm91dHB1dCIsInN1YmRpcmVjdG9yaWVzIiwidWlkQnJhbmNoVXBkYXRlIiwicnVuIiwibWFpbiIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9jbGVhbl9yZW9yZ2FuaXplZF9kYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQge1xuICBjbGVhbkFjdGV1cixcbiAgY2xlYW5BbWVuZGVtZW50LFxuICBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbixcbiAgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgY2xlYW5PcmdhbmUsXG4gIGNsZWFuUmV1bmlvbixcbiAgY2xlYW5TY3J1dGluLFxufSBmcm9tIFwiLi4vY2xlYW5lcnNcIlxuaW1wb3J0IHsgZGF0YXNldHMsIEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBleGlzdGluZ0RhdGVUb0pzb24sIHBhdGNoZWREYXRlVG9Kc29uIH0gZnJvbSBcIi4uL2RhdGVzXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vZ2l0XCJcbmltcG9ydCB7XG4gIEFjdGV1cixcbiAgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzQ29udmVydCxcbiAgT3JnYW5lLFxufSBmcm9tIFwiLi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc0NvbnZlcnQsIFJldW5pb24gfSBmcm9tIFwiLi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LFxuICBEb2N1bWVudCxcbiAgRG9zc2llclBhcmxlbWVudGFpcmUsXG59IGZyb20gXCIuLi90eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zQ29udmVydCwgU2NydXRpbiB9IGZyb20gXCIuLi90eXBlcy9zY3J1dGluc1wiXG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2OiBzdHJpbmdbXSk6IGFueSB7XG4gIGNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAgICB7XG4gICAgICBhbGlhczogXCJDXCIsXG4gICAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImNcIixcbiAgICAgIGhlbHA6IFwiY29tbWl0IGNsZWFuIGZpbGVzXCIsXG4gICAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImRcIixcbiAgICAgIGhlbHA6IFwic2luZ2xlIGRhdGFzZXQgdG8gcmVvcmdhbml6ZVwiLFxuICAgICAgbmFtZTogXCJkYXRhc2V0XCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJrXCIsXG4gICAgICBkZWZhdWx0VmFsdWU6IFtcIkFsbFwiXSxcbiAgICAgIGhlbHA6IFwiY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZW9yZ2FuaXplXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwiY2F0ZWdvcmllc1wiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwibFwiLFxuICAgICAgaGVscDogXCJsZWdpc2xhdHVyZXMgb2YgY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZXRyaWV2ZVwiLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICBuYW1lOiBcImxlZ2lzbGF0dXJlXCIsXG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJyXCIsXG4gICAgICBoZWxwOiBcInB1c2ggY29tbWl0IHRvIGdpdmVuIHJlbW90ZVwiLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwic1wiLFxuICAgICAgaGVscDogXCJkb24ndCBsb2cgYW55dGhpbmdcIixcbiAgICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgaGVscDogXCJkbyBub3QgcmVzZXQgLS1oYXJkIGFmdGVyIGNvbW1pdCB0byBzYXZlIEkvTyBpZiB0aGUgd29ya2luZyB0cmVlIGlzIHRvIGJlIGRpc2NhcmRlZFwiLFxuICAgICAgbmFtZTogXCJuby1yZXNldC1hZnRlci1jb21taXRcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJ2XCIsXG4gICAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMsIHtcbiAgICBhcmd2OiBhcmd2LFxuICB9KVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiBjbGVhblJlb3JnYW5pemVkRGF0YShvcHRpb25zOiBhbnkpOiBib29sZWFuIHtcbiAgY29uc3QgZGF0YURpcjogc3RyaW5nID0gb3B0aW9ucy5kYXRhRGlyXG5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cblxuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBjb25zdCBnaXRHcm91cFVybCA9IG9wdGlvbnMuY2xvbmVcbiAgICA/IG9wdGlvbnMuY2xvbmUudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICA6IHVuZGVmaW5lZFxuXG4gIG9wdGlvbnMuY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG5cbiAgbGV0IGNob29zZW5EYXRhc2V0cyA9IGRhdGFzZXRzXG4gIGlmIChvcHRpb25zLmxlZ2lzbGF0dXJlKSB7XG4gICAgY29uc3QgZW5hYmxlZExlZ2lzbGF0dXJlcyA9IG9wdGlvbnMubGVnaXNsYXR1cmUubWFwKChsZWdpc2xhdHVyZTogbnVtYmVyKSA9PlxuICAgICAgbGVnaXNsYXR1cmUudG9TdHJpbmcoKSxcbiAgICApXG4gICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNob29zZW5EYXRhc2V0cykpIHtcbiAgICAgIGNob29zZW5EYXRhc2V0c1trZXkgYXMga2V5b2YgdHlwZW9mIGNob29zZW5EYXRhc2V0c10gPSB2YWx1ZS5maWx0ZXIoXG4gICAgICAgIChkYXRhc2V0OiB7IGxlZ2lzbGF0dXJlOiBhbnkgfSkgPT5cbiAgICAgICAgICBlbmFibGVkTGVnaXNsYXR1cmVzLmluY2x1ZGVzKGRhdGFzZXQubGVnaXNsYXR1cmUpLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1clJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7YWN0ZXVyUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFjdGV1ciA9IEpTT04ucGFyc2UoYWN0ZXVyUmF3SnNvbilcbiAgICAgICAgY2xlYW5BY3RldXIoYWN0ZXVyKVxuICAgICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGFjdGV1ckNsZWFuOiBBY3RldXIgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cihhY3RldXJKc29uKVxuICAgICAgICBjb25zdCBhY3RldXJDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQuYWN0ZXVyVG9Kc29uKGFjdGV1ckNsZWFuKVxuXG4gICAgICAgIGNvbnN0IGFjdGV1ckNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uYWN0ZXVyU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGFjdGV1ckNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGFjdGV1ckNsZWFuRmlsZVBhdGgsIGFjdGV1ckNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVSYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5vcmdhbmVTcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke29yZ2FuZVJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZVJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBvcmdhbmUgPSBKU09OLnBhcnNlKG9yZ2FuZVJhd0pzb24pXG4gICAgICAgIGNsZWFuT3JnYW5lKG9yZ2FuZSlcbiAgICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBvcmdhbmVDbGVhbjogT3JnYW5lID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9PcmdhbmUob3JnYW5lSnNvbilcbiAgICAgICAgY29uc3Qgb3JnYW5lQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0Lm9yZ2FuZVRvSnNvbihvcmdhbmVDbGVhbilcblxuICAgICAgICBjb25zdCBvcmdhbmVDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLm9yZ2FuZVNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShvcmdhbmVDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhvcmdhbmVDbGVhbkZpbGVQYXRoLCBvcmdhbmVDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCJhY3RldXJzXCIsIFwib3JnYW5lc1wiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIpKSB7XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9IHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7cmV1bmlvblJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvblJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJldW5pb24gPSBKU09OLnBhcnNlKHJldW5pb25SYXdKc29uKVxuICAgICAgICBjbGVhblJldW5pb24ocmV1bmlvbilcbiAgICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHJldW5pb24sIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IHJldW5pb25DbGVhbjogUmV1bmlvbiA9IEFnZW5kYXNDb252ZXJ0LnRvUmV1bmlvbihyZXVuaW9uSnNvbilcbiAgICAgICAgY29uc3QgcmV1bmlvbkNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBBZ2VuZGFzQ29udmVydC5yZXVuaW9uVG9Kc29uKHJldW5pb25DbGVhbilcblxuICAgICAgICBjb25zdCByZXVuaW9uQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKHJldW5pb25DbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhyZXVuaW9uQ2xlYW5GaWxlUGF0aCwgcmV1bmlvbkNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2goZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBvcHRpb25zLnJlbW90ZSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcIi5cIl0pKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIpKSB7XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRSYXdGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0UmF3RGlyLFxuICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7YW1lbmRlbWVudFJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudFJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICBhbWVuZGVtZW50UmF3RmlsZVBhdGgsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IEpTT04ucGFyc2UoYW1lbmRlbWVudFJhd0pzb24pXG4gICAgICAgIGNsZWFuQW1lbmRlbWVudChhbWVuZGVtZW50KVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoYW1lbmRlbWVudCwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudENsZWFuOiBBbWVuZGVtZW50ID1cbiAgICAgICAgICBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50Q2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIEFtZW5kZW1lbnRzQ29udmVydC5hbWVuZGVtZW50VG9Kc29uKGFtZW5kZW1lbnRDbGVhbilcblxuICAgICAgICBjb25zdCBhbWVuZGVtZW50Q2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5hbWVuZGVtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGFtZW5kZW1lbnRDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhhbWVuZGVtZW50Q2xlYW5GaWxlUGF0aCwgYW1lbmRlbWVudENsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2goZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBvcHRpb25zLnJlbW90ZSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcIi5cIl0pKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID0gZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50UmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldFJhd0RpcixcbiAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtkb2N1bWVudFJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBKU09OLnBhcnNlKGRvY3VtZW50UmF3SnNvbilcbiAgICAgICAgY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24oZG9jdW1lbnQpXG4gICAgICAgIGNvbnN0IGRvY3VtZW50SnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZG9jdW1lbnQsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGRvY3VtZW50Q2xlYW46IERvY3VtZW50ID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0RvY3VtZW50KGRvY3VtZW50SnNvbilcbiAgICAgICAgY29uc3QgZG9jdW1lbnRDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQuZG9jdW1lbnRUb0pzb24oZG9jdW1lbnRDbGVhbilcblxuICAgICAgICBjb25zdCBkb2N1bWVudENsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZG9jdW1lbnRDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhkb2N1bWVudENsZWFuRmlsZVBhdGgsIGRvY3VtZW50Q2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJkb3NzaWVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVuYW1lID0gZG9zc2llclNwbGl0UGF0aFtkb3NzaWVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9zc2llckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJSYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5kb3NzaWVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtkb3NzaWVyUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVyUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvc3NpZXJSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9zc2llciA9IEpTT04ucGFyc2UoZG9zc2llclJhd0pzb24pXG4gICAgICAgIGNsZWFuRG9zc2llclBhcmxlbWVudGFpcmUoZG9zc2llcilcbiAgICAgICAgY29uc3QgZG9zc2llckpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRvc3NpZXIsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGRvc3NpZXJDbGVhbjogRG9zc2llclBhcmxlbWVudGFpcmUgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoZG9zc2llckpzb24pXG4gICAgICAgIGNvbnN0IGRvc3NpZXJDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQuZG9zc2llclBhcmxlbWVudGFpcmVUb0pzb24oZG9zc2llckNsZWFuKVxuXG4gICAgICAgIGNvbnN0IGRvc3NpZXJDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLmRvc3NpZXJTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZG9zc2llckNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGRvc3NpZXJDbGVhbkZpbGVQYXRoLCBkb3NzaWVyQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcImRvY3VtZW50c1wiLCBcImRvc3NpZXJzXCJdKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIpKSB7XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9IHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4uc2NydXRpblNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7c2NydXRpblJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpblJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhzY3J1dGluUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHNjcnV0aW4gPSBKU09OLnBhcnNlKHNjcnV0aW5SYXdKc29uKVxuICAgICAgICBjbGVhblNjcnV0aW4oc2NydXRpbilcbiAgICAgICAgY29uc3Qgc2NydXRpbkpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHNjcnV0aW4sIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IHNjcnV0aW5DbGVhbjogU2NydXRpbiA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW4oc2NydXRpbkpzb24pXG4gICAgICAgIGNvbnN0IHNjcnV0aW5DbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgU2NydXRpbnNDb252ZXJ0LnNjcnV0aW5Ub0pzb24oc2NydXRpbkNsZWFuKVxuXG4gICAgICAgIGNvbnN0IHNjcnV0aW5DbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLnNjcnV0aW5TcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoc2NydXRpbkNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHNjcnV0aW5DbGVhbkZpbGVQYXRoLCBzY3J1dGluQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdG9yZSBzdGFuZGFyZCBjb252ZXJzaW9uIG9mIGRhdGVzIHRvIEpTT04uXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGV4aXN0aW5nRGF0ZVRvSnNvblxuXG4gIHJldHVybiBlcnJvclxufVxuXG5mdW5jdGlvbiBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IGFueSB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgIGNvbnNvbGUubG9nKGBDbGVhbmluZyBkaXJlY3Rvcnk6ICR7ZGF0YXNldENsZWFuRGlyfeKApmApXG4gIH1cbiAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0Q2xlYW5EaXIpXG4gIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldENsZWFuRGlyKSkge1xuICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IHBhdGhuYW1lID0gcGF0aC5qb2luKGRhdGFzZXRDbGVhbkRpciwgZmlsZW5hbWUpXG4gICAgZnMucmVtb3ZlU3luYyhwYXRobmFtZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRBbmRQdXNoKFxuICByZXBvc2l0b3J5RGlyOiBzdHJpbmcsXG4gIG9wdGlvbnM6IGFueSxcbiAgcmVtb3Rlcz86IHN0cmluZ1tdLFxuKTogYm9vbGVhbiB7XG4gIGxldCBlcnJvciA9IGZhbHNlXG4gIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgIGdpdC5jb21taXQocmVwb3NpdG9yeURpciwgXCJOb3V2ZWxsZSBtb2lzc29uXCIpXG4gICAgZm9yIChjb25zdCByZW1vdGUgb2YgcmVtb3RlcyB8fCBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdXNoICR7cmVtb3RlfSBtYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgICAvLyBEb24ndCBzdG9wIHdoZW4gcHVzaCBmYWlscy5cbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2hVaWQoXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgb3B0aW9uczogYW55LFxuICBzdWJkaXJlY3RvcmllczogYW55LFxuKTogYm9vbGVhbiB7XG4gIGxldCBlcnJvciA9IGZhbHNlXG4gIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgIGdpdC51aWRCcmFuY2hVcGRhdGUoXG4gICAgICByZXBvc2l0b3J5RGlyLFxuICAgICAgc3ViZGlyZWN0b3JpZXMsXG4gICAgICBvcHRpb25zW1wibm8tcmVzZXQtYWZ0ZXItY29tbWl0XCJdLFxuICAgIClcbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiBvcHRpb25zLnJlbW90ZSB8fCBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZ2l0LnJ1bihyZXBvc2l0b3J5RGlyLCBgcHVzaCAtLXF1aWV0ICR7cmVtb3RlfSB1aWQ6dWlkYClcbiAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIG1haW4oYXJndjogYW55KTogbnVtYmVyIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlQXJncyhhcmd2KVxuICBpZiAoY2xlYW5SZW9yZ2FuaXplZERhdGEob3B0aW9ucykpIHtcbiAgICByZXR1cm4gMVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAwXG4gIH1cbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwiY2xlYW5fcmVvcmdhbml6ZWRfZGF0YS50c1wiKSlcbiAgcHJvY2Vzcy5leGl0KG1haW4ocHJvY2Vzcy5hcmd2KSlcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsTUFBTSxNQUFNLFFBQVE7QUFDM0IsU0FBU0MsUUFBUSxRQUFRLGVBQWU7QUFDeEMsT0FBT0MsZUFBZSxNQUFNLG1CQUFtQjtBQUMvQyxPQUFPQyxFQUFFLE1BQU0sVUFBVTtBQUN6QixPQUFPQyxJQUFJLE1BQU0sTUFBTTtBQUFBLFNBR3JCQyxXQUFXLEVBQ1hDLGVBQWUsRUFDZkMsdUJBQXVCLEVBQ3ZCQyx5QkFBeUIsRUFDekJDLFdBQVcsRUFDWEMsWUFBWSxFQUNaQyxZQUFZO0FBQUEsU0FFTEMsUUFBUSxFQUFFQyxlQUFlO0FBQUEsU0FDekJDLGtCQUFrQixFQUFFQyxpQkFBaUI7QUFBQSxTQUNyQ0MsT0FBTztBQUFBLE9BQ1QsS0FBS0MsR0FBRztBQUFBLFNBR2JDLE9BQU8sSUFBSUMsdUJBQXVCO0FBQUEsU0FHM0JELE9BQU8sSUFBSUUsY0FBYztBQUFBLFNBQ2JGLE9BQU8sSUFBSUcsa0JBQWtCO0FBQUEsU0FFaERILE9BQU8sSUFBSUksMEJBQTBCO0FBQUEsU0FJOUJKLE9BQU8sSUFBSUssZUFBZTtBQUVuQyxTQUFTQyxTQUFTLENBQUNDLElBQWMsRUFBTztFQUN0QyxNQUFNQyxrQkFBa0IsR0FBRyxD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
@@ -29,7 +29,7 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
29
29
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
30
30
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
31
31
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
32
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
32
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
33
33
  var diffedAmendments = [];
34
34
  var newAmendments = [];
35
35
  var optionsDefinitions = [{
@@ -43,7 +43,7 @@ var _file_systems = require("../file_systems");
43
43
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
44
44
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
45
45
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
46
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
46
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
47
47
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
48
48
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
49
49
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -64,7 +64,7 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _ty
64
64
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
65
65
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
66
66
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
67
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
67
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
68
68
  function parseArgs(argv) {
69
69
  var optionsDefinitions = [{
70
70
  description: "pathname to a JSON file or a glob pattern to JSON files",