easy-file-system 5.0.45 → 5.0.49

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 (50) hide show
  1. package/lib/button/toggle.js +42 -164
  2. package/lib/constants.js +6 -6
  3. package/lib/customEventTypes.js +9 -9
  4. package/lib/div/item/entry/drag/directoryName.js +24 -122
  5. package/lib/div/item/entry/drag/fileName.js +15 -112
  6. package/lib/div/item/entry/drag.js +19 -120
  7. package/lib/div/item/entry/marker.js +10 -107
  8. package/lib/div/item/entry.js +25 -187
  9. package/lib/entryTypes.js +5 -5
  10. package/lib/example/preamble.js +2 -2
  11. package/lib/example/view/button.js +12 -23
  12. package/lib/example/view/explorer/first.js +20 -120
  13. package/lib/example/view/explorer/second.js +17 -117
  14. package/lib/example/view/rubbishBin.js +10 -88
  15. package/lib/example/view.js +88 -233
  16. package/lib/example.js +6 -6
  17. package/lib/explorer.js +393 -740
  18. package/lib/index.js +17 -17
  19. package/lib/item/entry/drag/directoryName.js +130 -289
  20. package/lib/item/entry/drag/fileName.js +61 -182
  21. package/lib/item/entry/drag.js +179 -375
  22. package/lib/item/entry/marker/directoryName.js +20 -117
  23. package/lib/item/entry/marker/fileName.js +21 -118
  24. package/lib/item/entry/marker.js +13 -110
  25. package/lib/item/entry.js +54 -249
  26. package/lib/list/entries.js +464 -808
  27. package/lib/mixins/dragEntryItem.js +19 -19
  28. package/lib/mixins/explorer.js +28 -28
  29. package/lib/mixins/nameSpan.js +12 -12
  30. package/lib/mixins/rubbishBin.js +8 -8
  31. package/lib/rubbishBin.js +180 -415
  32. package/lib/span/name.js +93 -262
  33. package/lib/styles.js +14 -14
  34. package/lib/svg/directoryName.js +31 -142
  35. package/lib/svg/fileName.js +32 -143
  36. package/lib/svg/marker.js +25 -136
  37. package/lib/svg/rubbishBin/closed.js +48 -163
  38. package/lib/svg/rubbishBin/open.js +52 -167
  39. package/lib/svg/toggle/down.js +29 -145
  40. package/lib/svg/toggle/up.js +30 -146
  41. package/lib/svg.js +12 -149
  42. package/lib/utilities/name.js +12 -12
  43. package/lib/utilities/path.js +5 -5
  44. package/lib/utilities/pathMap.js +7 -7
  45. package/package.json +8 -4
  46. package/.aiignore +0 -14
  47. package/.swcrc +0 -11
  48. package/bin/main.js +0 -15
  49. package/example.js +0 -41953
  50. package/index.html +0 -46
package/lib/explorer.js CHANGED
@@ -8,767 +8,420 @@ Object.defineProperty(exports, "default", {
8
8
  return _default;
9
9
  }
10
10
  });
11
- var _easywithstyle = /*#__PURE__*/ _interop_require_default(require("easy-with-style"));
12
- var _easy = require("easy");
13
- var _easydraganddrop = require("easy-drag-and-drop");
14
- var _necessary = require("necessary");
15
- var _entries = /*#__PURE__*/ _interop_require_default(require("./list/entries"));
16
- var _explorer = /*#__PURE__*/ _interop_require_default(require("./mixins/explorer"));
17
- var _dragEntryItem = /*#__PURE__*/ _interop_require_default(require("./mixins/dragEntryItem"));
18
- var _fileName = /*#__PURE__*/ _interop_require_default(require("./item/entry/drag/fileName"));
19
- var _fileName1 = /*#__PURE__*/ _interop_require_default(require("./item/entry/marker/fileName"));
20
- var _directoryName = /*#__PURE__*/ _interop_require_default(require("./item/entry/drag/directoryName"));
21
- var _directoryName1 = /*#__PURE__*/ _interop_require_default(require("./item/entry/marker/directoryName"));
22
- var _styles = require("./styles");
23
- var _constants = require("./constants");
24
- var _entryTypes = require("./entryTypes");
25
- var _pathMap = require("./utilities/pathMap");
26
- var _customEventTypes = require("./customEventTypes");
27
- function _assert_this_initialized(self) {
28
- if (self === void 0) {
29
- throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
30
- }
31
- return self;
32
- }
33
- function _call_super(_this, derived, args) {
34
- derived = _get_prototype_of(derived);
35
- return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
36
- }
37
- function _class_call_check(instance, Constructor) {
38
- if (!(instance instanceof Constructor)) {
39
- throw new TypeError("Cannot call a class as a function");
40
- }
41
- }
42
- function _construct(Parent, args, Class) {
43
- if (_is_native_reflect_construct()) {
44
- _construct = Reflect.construct;
45
- } else {
46
- _construct = function construct(Parent, args, Class) {
47
- var a = [
48
- null
49
- ];
50
- a.push.apply(a, args);
51
- var Constructor = Function.bind.apply(Parent, a);
52
- var instance = new Constructor();
53
- if (Class) _set_prototype_of(instance, Class.prototype);
54
- return instance;
55
- };
56
- }
57
- return _construct.apply(null, arguments);
58
- }
59
- function _defineProperties(target, props) {
60
- for(var i = 0; i < props.length; i++){
61
- var descriptor = props[i];
62
- descriptor.enumerable = descriptor.enumerable || false;
63
- descriptor.configurable = true;
64
- if ("value" in descriptor) descriptor.writable = true;
65
- Object.defineProperty(target, descriptor.key, descriptor);
66
- }
67
- }
68
- function _create_class(Constructor, protoProps, staticProps) {
69
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
70
- if (staticProps) _defineProperties(Constructor, staticProps);
71
- return Constructor;
72
- }
73
- function _define_property(obj, key, value) {
74
- if (key in obj) {
75
- Object.defineProperty(obj, key, {
76
- value: value,
77
- enumerable: true,
78
- configurable: true,
79
- writable: true
80
- });
81
- } else {
82
- obj[key] = value;
83
- }
84
- return obj;
85
- }
86
- function _get_prototype_of(o) {
87
- _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
88
- return o.__proto__ || Object.getPrototypeOf(o);
89
- };
90
- return _get_prototype_of(o);
91
- }
92
- function _inherits(subClass, superClass) {
93
- if (typeof superClass !== "function" && superClass !== null) {
94
- throw new TypeError("Super expression must either be null or a function");
95
- }
96
- subClass.prototype = Object.create(superClass && superClass.prototype, {
97
- constructor: {
98
- value: subClass,
99
- writable: true,
100
- configurable: true
101
- }
102
- });
103
- if (superClass) _set_prototype_of(subClass, superClass);
104
- }
11
+ const _easywithstyle = /*#__PURE__*/ _interop_require_default(require("easy-with-style"));
12
+ const _easy = require("easy");
13
+ const _easydraganddrop = require("easy-drag-and-drop");
14
+ const _necessary = require("necessary");
15
+ const _entries = /*#__PURE__*/ _interop_require_default(require("./list/entries"));
16
+ const _explorer = /*#__PURE__*/ _interop_require_default(require("./mixins/explorer"));
17
+ const _dragEntryItem = /*#__PURE__*/ _interop_require_default(require("./mixins/dragEntryItem"));
18
+ const _fileName = /*#__PURE__*/ _interop_require_default(require("./item/entry/drag/fileName"));
19
+ const _fileName1 = /*#__PURE__*/ _interop_require_default(require("./item/entry/marker/fileName"));
20
+ const _directoryName = /*#__PURE__*/ _interop_require_default(require("./item/entry/drag/directoryName"));
21
+ const _directoryName1 = /*#__PURE__*/ _interop_require_default(require("./item/entry/marker/directoryName"));
22
+ const _styles = require("./styles");
23
+ const _constants = require("./constants");
24
+ const _entryTypes = require("./entryTypes");
25
+ const _pathMap = require("./utilities/pathMap");
26
+ const _customEventTypes = require("./customEventTypes");
105
27
  function _interop_require_default(obj) {
106
28
  return obj && obj.__esModule ? obj : {
107
29
  default: obj
108
30
  };
109
31
  }
110
- function _is_native_function(fn) {
111
- return Function.toString.call(fn).indexOf("[native code]") !== -1;
112
- }
113
- function _object_spread(target) {
114
- for(var i = 1; i < arguments.length; i++){
115
- var source = arguments[i] != null ? arguments[i] : {};
116
- var ownKeys = Object.keys(source);
117
- if (typeof Object.getOwnPropertySymbols === "function") {
118
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
119
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
120
- }));
32
+ const { first } = _necessary.arrayUtilities, { concatenatePaths, pathWithoutBottommostNameFromPath } = _necessary.pathUtilities;
33
+ class Explorer extends _easy.Element {
34
+ dragOverCustomHandler = (event, element, dragElement)=>{
35
+ const dragEntryItem = dragElement, markerEntryItem = this.retrieveMarkerEntryItem(), dragEntryItemName = dragEntryItem.getName();
36
+ let markerEntryItemPath = markerEntryItem.getPath(), markerEntryItemExplorer = markerEntryItem.getExplorer(), previousMarkerEntryItemPath = markerEntryItemPath, previousMarkerEntryItemExplorer = markerEntryItemExplorer; ///
37
+ markerEntryItemPath = dragEntryItemName; ///
38
+ markerEntryItemExplorer = this; ///
39
+ if (markerEntryItemExplorer !== previousMarkerEntryItemExplorer || markerEntryItemPath !== previousMarkerEntryItemPath) {
40
+ const dragEntryItemType = dragEntryItem.getType();
41
+ previousMarkerEntryItemExplorer.removeMarker();
42
+ markerEntryItemExplorer.addMarker(markerEntryItemPath, dragEntryItemType);
121
43
  }
122
- ownKeys.forEach(function(key) {
123
- _define_property(target, key, source[key]);
44
+ };
45
+ dropCustomHandler = (event, element, dragElement, aborted, done)=>{
46
+ const markerEntryItem = this.retrieveMarkerEntryItem(), markerEntryItemExplorer = markerEntryItem.getExplorer();
47
+ if (aborted) {
48
+ markerEntryItemExplorer.removeMarker();
49
+ done();
50
+ return;
51
+ }
52
+ const dragEntryItem = dragElement; ///
53
+ markerEntryItemExplorer.dropDragEntryItem(event, element, dragEntryItem, done);
54
+ };
55
+ getExplorer() {
56
+ const explorer = this; ///
57
+ return explorer;
58
+ }
59
+ getReference() {
60
+ const { reference = null } = this.properties;
61
+ return reference;
62
+ }
63
+ getReferences() {
64
+ const { references = [] } = this.properties;
65
+ return references;
66
+ }
67
+ getEntriesList() {
68
+ const { EntriesList } = this.constructor;
69
+ return EntriesList;
70
+ }
71
+ getFileNameDragEntryItem(readOnly) {
72
+ const { FileNameDragEntryItem } = this.constructor;
73
+ return FileNameDragEntryItem;
74
+ }
75
+ getFileNameMarkerEntryItem() {
76
+ const { FileNameMarkerEntryItem } = this.constructor;
77
+ return FileNameMarkerEntryItem;
78
+ }
79
+ getDirectoryNameDragEntryItem(readOnly, topmost) {
80
+ const { DirectoryNameDragEntryItem } = this.constructor;
81
+ return DirectoryNameDragEntryItem;
82
+ }
83
+ getDirectoryNameMarkerEntryItem() {
84
+ const { DirectoryNameMarkerEntryItem } = this.constructor;
85
+ return DirectoryNameMarkerEntryItem;
86
+ }
87
+ retrievePaths(type) {
88
+ const dragEntryItems = this.retrieveDragEntryItems(), paths = dragEntryItems.reduce((paths, dragEntryItem)=>{
89
+ const dragEntryItemType = dragEntryItem.getType();
90
+ if (dragEntryItemType === type) {
91
+ const dragEntryItemPath = dragEntryItem.getPath(), path = dragEntryItemPath; ///
92
+ paths.push(path);
93
+ }
94
+ return paths;
95
+ }, []);
96
+ return paths;
97
+ }
98
+ retrieveFilePaths() {
99
+ const type = _entryTypes.FILE_NAME_DRAG_ENTRY_TYPE, paths = this.retrievePaths(type), filePaths = paths; ///
100
+ return filePaths;
101
+ }
102
+ retrieveDirectoryPaths() {
103
+ const type = _entryTypes.DIRECTORY_NAME_DRAG_ENTRY_TYPE, paths = this.retrievePaths(type), directoryPaths = paths; ///
104
+ return directoryPaths;
105
+ }
106
+ collapse() {
107
+ const directoryNameDragEntryItems = this.retrieveDirectoryNameDragEntryItems();
108
+ directoryNameDragEntryItems.forEach((directoryNameDragEntryItem)=>{
109
+ directoryNameDragEntryItem.collapse();
124
110
  });
125
111
  }
126
- return target;
127
- }
128
- function ownKeys(object, enumerableOnly) {
129
- var keys = Object.keys(object);
130
- if (Object.getOwnPropertySymbols) {
131
- var symbols = Object.getOwnPropertySymbols(object);
132
- if (enumerableOnly) {
133
- symbols = symbols.filter(function(sym) {
134
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
135
- });
112
+ createPath() {
113
+ let path;
114
+ const name = _constants.PERIOD, selectedDragEntryItem = this.retrieveSelectedDragEntryItem();
115
+ if (selectedDragEntryItem === null) {
116
+ path = name; ///
117
+ } else {
118
+ const selectedDragEntryItemDirectoryNameDragEntryItem = selectedDragEntryItem.isDirectoryNameDragEntryItem();
119
+ if (selectedDragEntryItemDirectoryNameDragEntryItem) {
120
+ const directoryNameDragEntryItem = selectedDragEntryItem, directoryNameDragEntryItemPath = directoryNameDragEntryItem.getPath();
121
+ path = concatenatePaths(directoryNameDragEntryItemPath, name);
122
+ selectedDragEntryItem.expand();
123
+ } else {
124
+ const fileNameDragEntryItem = selectedDragEntryItem, fileNameDragEntryItemPath = fileNameDragEntryItem.getPath(), fileNameDragEntryItemPathWithoutBottommostName = pathWithoutBottommostNameFromPath(fileNameDragEntryItemPath);
125
+ path = concatenatePaths(fileNameDragEntryItemPathWithoutBottommostName, name);
126
+ }
136
127
  }
137
- keys.push.apply(keys, symbols);
128
+ return path;
138
129
  }
139
- return keys;
140
- }
141
- function _object_spread_props(target, source) {
142
- source = source != null ? source : {};
143
- if (Object.getOwnPropertyDescriptors) {
144
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
145
- } else {
146
- ownKeys(Object(source)).forEach(function(key) {
147
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
148
- });
130
+ createFilePath() {
131
+ const path = this.createPath(), filePath = path, fileNameDragEntryItem = this.addFilePath(filePath);
132
+ fileNameDragEntryItem.create();
149
133
  }
150
- return target;
151
- }
152
- function _possible_constructor_return(self, call) {
153
- if (call && (_type_of(call) === "object" || typeof call === "function")) {
154
- return call;
134
+ createDirectoryPath() {
135
+ const path = this.createPath(), readOnly = false, collapsed = false, directoryPath = path, directoryNameDragEntryItem = this.addDirectoryPath(directoryPath, readOnly, collapsed);
136
+ directoryNameDragEntryItem.create();
155
137
  }
156
- return _assert_this_initialized(self);
157
- }
158
- function _set_prototype_of(o, p) {
159
- _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
160
- o.__proto__ = p;
161
- return o;
162
- };
163
- return _set_prototype_of(o, p);
164
- }
165
- function _tagged_template_literal(strings, raw) {
166
- if (!raw) {
167
- raw = strings.slice(0);
138
+ renameSelectedPath() {
139
+ const selectedDragEntryItem = this.retrieveSelectedDragEntryItem();
140
+ if (selectedDragEntryItem !== null) {
141
+ selectedDragEntryItem.rename();
142
+ }
168
143
  }
169
- return Object.freeze(Object.defineProperties(strings, {
170
- raw: {
171
- value: Object.freeze(raw)
144
+ getSelectedPath() {
145
+ let selectedPath = null;
146
+ const selectedDragEntryItem = this.retrieveSelectedDragEntryItem();
147
+ if (selectedDragEntryItem !== null) {
148
+ const selectedDragEntryItemPath = selectedDragEntryItem.getPath();
149
+ selectedPath = selectedDragEntryItemPath; ///
172
150
  }
173
- }));
174
- }
175
- function _type_of(obj) {
176
- "@swc/helpers - typeof";
177
- return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
178
- }
179
- function _wrap_native_super(Class) {
180
- var _cache = typeof Map === "function" ? new Map() : undefined;
181
- _wrap_native_super = function wrapNativeSuper(Class) {
182
- if (Class === null || !_is_native_function(Class)) return Class;
183
- if (typeof Class !== "function") {
184
- throw new TypeError("Super expression must either be null or a function");
151
+ return selectedPath;
152
+ }
153
+ clickDragEntryItem(event, element, dragEntryItem) {
154
+ const singleClick = this.isSingleClick();
155
+ if (singleClick) {
156
+ const selected = dragEntryItem.click(event, element);
157
+ if (selected) {
158
+ dragEntryItem.singleClick(event, element);
159
+ }
160
+ return;
185
161
  }
186
- if (typeof _cache !== "undefined") {
187
- if (_cache.has(Class)) return _cache.get(Class);
188
- _cache.set(Class, Wrapper);
162
+ const clickedDragEntryItem = this.getClickedDragEntryItem();
163
+ if (dragEntryItem !== clickedDragEntryItem) {
164
+ const interval = this.getInterval();
165
+ clearInterval(interval);
166
+ this.clearInterval();
167
+ this.clearClickedDragEntryItem();
189
168
  }
190
- function Wrapper() {
191
- return _construct(Class, arguments, _get_prototype_of(this).constructor);
169
+ const interval = this.getInterval();
170
+ if (interval === null) {
171
+ const delay = _constants.DOUBLE_CLICK_DELAY, interval = setTimeout(()=>{
172
+ this.clearInterval();
173
+ this.clearClickedDragEntryItem();
174
+ dragEntryItem.click(event, element);
175
+ }, delay), clickedDragEntryItem = dragEntryItem; ///
176
+ this.setInterval(interval);
177
+ this.setClickedDragEntryItem(clickedDragEntryItem);
178
+ return;
192
179
  }
193
- Wrapper.prototype = Object.create(Class.prototype, {
194
- constructor: {
195
- value: Wrapper,
196
- enumerable: false,
197
- writable: true,
198
- configurable: true
199
- }
180
+ clearInterval(interval);
181
+ this.clearInterval();
182
+ this.clearClickedDragEntryItem();
183
+ dragEntryItem.doubleClick(event, element);
184
+ }
185
+ openFileNameDragEntryItem(event, element, fileNameDragEntryItem) {
186
+ const disabled = this.isDisabled();
187
+ if (disabled) {
188
+ return;
189
+ }
190
+ const fileNameDragEntryItemPath = fileNameDragEntryItem.getPath(), filePath = fileNameDragEntryItemPath, customEventType = _customEventTypes.OPEN_CUSTOM_EVENT_TYPE;
191
+ this.callCustomHandlers(customEventType, event, element, filePath);
192
+ }
193
+ selectOrDeselectDragEntryItem(event, element, dragEntryItem) {
194
+ const disabled = this.isDisabled();
195
+ if (disabled) {
196
+ return;
197
+ }
198
+ let selected = dragEntryItem.isSelected();
199
+ const path = dragEntryItem.getPath();
200
+ if (selected) {
201
+ dragEntryItem.deselect();
202
+ } else {
203
+ this.deselectAllPaths();
204
+ this.selectPath(path);
205
+ }
206
+ selected = !selected; ///
207
+ const readOnly = dragEntryItem.isReadOnly(), customEventType = _customEventTypes.SELECT_CUSTOM_EVENT_TYPE;
208
+ this.callCustomHandlers(customEventType, event, element, path, selected, readOnly);
209
+ return selected;
210
+ }
211
+ createDragEntryItem(event, element, dragEntryItem, done) {
212
+ const sourceEntryPath = (0, _pathMap.sourceEntryPathFromEntryItem)(dragEntryItem), targetEntryPath = (0, _pathMap.targetEntryPathFromEntryItem)(dragEntryItem), pathMaps = dragEntryItem.getPathMaps(sourceEntryPath, targetEntryPath), explorer = this; ///
213
+ this.createDragEntryItems(event, element, pathMaps, explorer, done);
214
+ }
215
+ renameDragEntryItem(event, element, dragEntryItem, done) {
216
+ let sourceEntryPath, targetEntryPath;
217
+ sourceEntryPath = (0, _pathMap.sourceEntryPathFromEntryItem)(dragEntryItem);
218
+ targetEntryPath = (0, _pathMap.targetEntryPathFromEntryItem)(dragEntryItem);
219
+ const pathMaps = dragEntryItem.getPathMaps(sourceEntryPath, targetEntryPath), firstPathMap = first(pathMaps), pathMap = firstPathMap; ///
220
+ ({ sourceEntryPath, targetEntryPath } = pathMap);
221
+ if (sourceEntryPath === targetEntryPath) {
222
+ done();
223
+ return;
224
+ }
225
+ const explorer = this; ///
226
+ this.renameDragEntryItems(event, element, pathMaps, explorer, done);
227
+ }
228
+ dropDragEntryItem(event, element, dragEntryItem, done) {
229
+ const dragEntryItemExplorer = dragEntryItem.getExplorer(), markerEntryItem = this.retrieveMarkerEntryItem(), sourceEntryPath = (0, _pathMap.sourceEntryPathFromEntryItem)(dragEntryItem), targetEntryPath = (0, _pathMap.targetEntryPathFromEntryItem)(markerEntryItem);
230
+ if (sourceEntryPath === targetEntryPath && dragEntryItemExplorer === this) {
231
+ this.removeMarker();
232
+ done();
233
+ return;
234
+ }
235
+ const pathMaps = dragEntryItem.getPathMaps(sourceEntryPath, targetEntryPath), explorer = dragEntryItemExplorer; ///
236
+ this.moveDragEntryItems(event, element, pathMaps, explorer, done);
237
+ }
238
+ renameDragEntryItems(event, element, pathMaps, explorer, done) {
239
+ const customEventType = _customEventTypes.RENAME_CUSTOM_EVENT_TYPE;
240
+ this.callCustomHandlersAsync(customEventType, event, element, pathMaps, ()=>{
241
+ pathMaps.forEach((pathMap)=>{
242
+ this.removeDragEntryItem(pathMap, explorer);
243
+ });
244
+ pathMaps.forEach((pathMap)=>{
245
+ this.addDragEntryItem(pathMap, explorer);
246
+ });
247
+ done();
200
248
  });
201
- return _set_prototype_of(Wrapper, Class);
202
- };
203
- return _wrap_native_super(Class);
204
- }
205
- function _is_native_reflect_construct() {
206
- try {
207
- var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
208
- } catch (_) {}
209
- return (_is_native_reflect_construct = function() {
210
- return !!result;
211
- })();
212
- }
213
- function _templateObject() {
214
- var data = _tagged_template_literal([
215
- "\n \n padding: ",
216
- "; \n \n"
217
- ]);
218
- _templateObject = function _templateObject() {
219
- return data;
249
+ }
250
+ moveDragEntryItems(event, element, pathMaps, explorer, done) {
251
+ const customEventType = _customEventTypes.MOVE_CUSTOM_EVENT_TYPE;
252
+ this.callCustomHandlersAsync(customEventType, event, element, pathMaps, ()=>{
253
+ pathMaps.forEach((pathMap)=>{
254
+ this.removeDragEntryItem(pathMap, explorer);
255
+ });
256
+ pathMaps.forEach((pathMap)=>{
257
+ this.addDragEntryItem(pathMap, explorer);
258
+ });
259
+ this.removeMarker();
260
+ done();
261
+ });
262
+ }
263
+ removeDragEntryItems(event, element, pathMaps, explorer, done) {
264
+ const customEventType = _customEventTypes.REMOVE_CUSTOM_EVENT_TYPE;
265
+ this.callCustomHandlersAsync(customEventType, event, element, pathMaps, ()=>{
266
+ pathMaps.forEach((pathMap)=>{
267
+ this.removeDragEntryItem(pathMap, explorer);
268
+ });
269
+ pathMaps.forEach((pathMap)=>{
270
+ this.addDragEntryItem(pathMap, explorer);
271
+ });
272
+ done();
273
+ });
274
+ }
275
+ createDragEntryItems(event, element, pathMaps, explorer, done) {
276
+ const customEventType = _customEventTypes.CREATE_CUSTOM_EVENT_TYPE;
277
+ this.callCustomHandlersAsync(customEventType, event, element, pathMaps, ()=>{
278
+ pathMaps.forEach((pathMap)=>{
279
+ this.removeDragEntryItem(pathMap, explorer);
280
+ });
281
+ pathMaps.forEach((pathMap)=>{
282
+ this.addDragEntryItem(pathMap, explorer);
283
+ });
284
+ done();
285
+ });
286
+ }
287
+ enable() {
288
+ const disabled = false;
289
+ this.setDisabled(disabled);
290
+ this.enableDrag();
291
+ }
292
+ disable() {
293
+ const disabled = true;
294
+ this.setDisabled(disabled);
295
+ this.disableDrag();
296
+ }
297
+ enableDrag() {
298
+ const dragEntryItems = this.retrieveDragEntryItems();
299
+ dragEntryItems.forEach((dragEntryItem)=>{
300
+ dragEntryItem.enableDrag();
301
+ });
302
+ }
303
+ disableDrag() {
304
+ const dragEntryItems = this.retrieveDragEntryItems();
305
+ dragEntryItems.forEach((dragEntryItem)=>{
306
+ dragEntryItem.disableDrag();
307
+ });
308
+ }
309
+ clearInterval() {
310
+ const interval = null;
311
+ this.setInterval(interval);
312
+ }
313
+ clearClickedDragEntryItem() {
314
+ const clickedDragEntryItem = null;
315
+ this.setClickedDragEntryItem(clickedDragEntryItem);
316
+ }
317
+ isDisabled() {
318
+ const { disabled } = this.getState();
319
+ return disabled;
320
+ }
321
+ isEditable() {
322
+ const editableDragEntryItem = this.retrieveEditableDragEntryItem(), editable = editableDragEntryItem !== null;
323
+ return editable;
324
+ }
325
+ getInterval() {
326
+ const { interval } = this.getState();
327
+ return interval;
328
+ }
329
+ isSingleClick() {
330
+ const { singleClick } = this.getState();
331
+ return singleClick;
332
+ }
333
+ getClickedDragEntryItem() {
334
+ const { clickedDragEntryItem } = this.getState();
335
+ return clickedDragEntryItem;
336
+ }
337
+ setDisabled(disabled) {
338
+ this.updateState({
339
+ disabled
340
+ });
341
+ }
342
+ setInterval(interval) {
343
+ this.updateState({
344
+ interval
345
+ });
346
+ }
347
+ setSingleClick(singleClick) {
348
+ this.updateState({
349
+ singleClick
350
+ });
351
+ }
352
+ setClickedDragEntryItem(clickedDragEntryItem) {
353
+ this.updateState({
354
+ clickedDragEntryItem
355
+ });
356
+ }
357
+ cancelEditableDragEntryItem() {
358
+ const editableDragEntryItem = this.retrieveEditableDragEntryItem(), created = editableDragEntryItem.isCreated();
359
+ editableDragEntryItem.cancel(created);
360
+ }
361
+ setInitialState() {
362
+ const disabled = false, interval = null, singleClick = false, clickedDragEntryItem = null;
363
+ this.setState({
364
+ disabled,
365
+ interval,
366
+ singleClick,
367
+ clickedDragEntryItem
368
+ });
369
+ }
370
+ didMount() {
371
+ const { singleClick = false } = this.properties;
372
+ this.setSingleClick(singleClick);
373
+ this.enableDrop();
374
+ this.onCustomDragOver(this.dragOverCustomHandler);
375
+ this.onCustomDrop(this.dropCustomHandler);
376
+ }
377
+ willUnmount() {
378
+ this.disableDrop();
379
+ this.offCustomDragOver(this.dragOverCustomHandler);
380
+ this.offCustomDrop(this.dropCustomHandler);
381
+ }
382
+ childElements() {
383
+ const explorer = this; ///
384
+ return /*#__PURE__*/ React.createElement(_entries.default, {
385
+ explorer: explorer,
386
+ topmost: true
387
+ });
388
+ }
389
+ parentContext() {
390
+ const context = this.getContext(), collapse = this.collapse.bind(this), getSelectedPath = this.getSelectedPath.bind(this), retrieveFilePaths = this.retrieveFilePaths.bind(this), retrieveDirectoryPaths = this.retrieveDirectoryPaths.bind(this);
391
+ return {
392
+ ...context,
393
+ collapse,
394
+ getSelectedPath,
395
+ retrieveFilePaths,
396
+ retrieveDirectoryPaths
397
+ };
398
+ }
399
+ initialise() {
400
+ this.assignContext();
401
+ this.setInitialState();
402
+ }
403
+ static EntriesList = _entries.default;
404
+ static FileNameDragEntryItem = _fileName.default;
405
+ static FileNameMarkerEntryItem = _fileName1.default;
406
+ static DirectoryNameDragEntryItem = _directoryName.default;
407
+ static DirectoryNameMarkerEntryItem = _directoryName1.default;
408
+ static tagName = "div";
409
+ static ignoredProperties = [
410
+ "reference",
411
+ "references",
412
+ "singleClick"
413
+ ];
414
+ static defaultProperties = {
415
+ className: "explorer"
220
416
  };
221
- return data;
222
417
  }
223
- var first = _necessary.arrayUtilities.first, concatenatePaths = _necessary.pathUtilities.concatenatePaths, pathWithoutBottommostNameFromPath = _necessary.pathUtilities.pathWithoutBottommostNameFromPath;
224
- var Explorer = /*#__PURE__*/ function(Element) {
225
- _inherits(Explorer, Element);
226
- function Explorer() {
227
- _class_call_check(this, Explorer);
228
- var _this;
229
- _this = _call_super(this, Explorer, arguments), _define_property(_this, "dragOverCustomHandler", function(event, element, dragElement) {
230
- var dragEntryItem = dragElement, markerEntryItem = _this.retrieveMarkerEntryItem(), dragEntryItemName = dragEntryItem.getName();
231
- var markerEntryItemPath = markerEntryItem.getPath(), markerEntryItemExplorer = markerEntryItem.getExplorer(), previousMarkerEntryItemPath = markerEntryItemPath, previousMarkerEntryItemExplorer = markerEntryItemExplorer; ///
232
- markerEntryItemPath = dragEntryItemName; ///
233
- markerEntryItemExplorer = _this; ///
234
- if (markerEntryItemExplorer !== previousMarkerEntryItemExplorer || markerEntryItemPath !== previousMarkerEntryItemPath) {
235
- var dragEntryItemType = dragEntryItem.getType();
236
- previousMarkerEntryItemExplorer.removeMarker();
237
- markerEntryItemExplorer.addMarker(markerEntryItemPath, dragEntryItemType);
238
- }
239
- }), _define_property(_this, "dropCustomHandler", function(event, element, dragElement, aborted, done) {
240
- var markerEntryItem = _this.retrieveMarkerEntryItem(), markerEntryItemExplorer = markerEntryItem.getExplorer();
241
- if (aborted) {
242
- markerEntryItemExplorer.removeMarker();
243
- done();
244
- return;
245
- }
246
- var dragEntryItem = dragElement; ///
247
- markerEntryItemExplorer.dropDragEntryItem(event, element, dragEntryItem, done);
248
- });
249
- return _this;
250
- }
251
- _create_class(Explorer, [
252
- {
253
- key: "getExplorer",
254
- value: function getExplorer() {
255
- var explorer = this; ///
256
- return explorer;
257
- }
258
- },
259
- {
260
- key: "getReference",
261
- value: function getReference() {
262
- var _this_properties = this.properties, _this_properties_reference = _this_properties.reference, reference = _this_properties_reference === void 0 ? null : _this_properties_reference;
263
- return reference;
264
- }
265
- },
266
- {
267
- key: "getReferences",
268
- value: function getReferences() {
269
- var _this_properties = this.properties, _this_properties_references = _this_properties.references, references = _this_properties_references === void 0 ? [] : _this_properties_references;
270
- return references;
271
- }
272
- },
273
- {
274
- key: "getEntriesList",
275
- value: function getEntriesList() {
276
- var _$EntriesList = this.constructor.EntriesList;
277
- return _$EntriesList;
278
- }
279
- },
280
- {
281
- key: "getFileNameDragEntryItem",
282
- value: function getFileNameDragEntryItem(readOnly) {
283
- var _$FileNameDragEntryItem = this.constructor.FileNameDragEntryItem;
284
- return _$FileNameDragEntryItem;
285
- }
286
- },
287
- {
288
- key: "getFileNameMarkerEntryItem",
289
- value: function getFileNameMarkerEntryItem() {
290
- var _$FileNameMarkerEntryItem = this.constructor.FileNameMarkerEntryItem;
291
- return _$FileNameMarkerEntryItem;
292
- }
293
- },
294
- {
295
- key: "getDirectoryNameDragEntryItem",
296
- value: function getDirectoryNameDragEntryItem(readOnly, topmost) {
297
- var _$DirectoryNameDragEntryItem = this.constructor.DirectoryNameDragEntryItem;
298
- return _$DirectoryNameDragEntryItem;
299
- }
300
- },
301
- {
302
- key: "getDirectoryNameMarkerEntryItem",
303
- value: function getDirectoryNameMarkerEntryItem() {
304
- var _$DirectoryNameMarkerEntryItem = this.constructor.DirectoryNameMarkerEntryItem;
305
- return _$DirectoryNameMarkerEntryItem;
306
- }
307
- },
308
- {
309
- key: "retrievePaths",
310
- value: function retrievePaths(type) {
311
- var dragEntryItems = this.retrieveDragEntryItems(), paths = dragEntryItems.reduce(function(paths, dragEntryItem) {
312
- var dragEntryItemType = dragEntryItem.getType();
313
- if (dragEntryItemType === type) {
314
- var dragEntryItemPath = dragEntryItem.getPath(), path = dragEntryItemPath; ///
315
- paths.push(path);
316
- }
317
- return paths;
318
- }, []);
319
- return paths;
320
- }
321
- },
322
- {
323
- key: "retrieveFilePaths",
324
- value: function retrieveFilePaths() {
325
- var type = _entryTypes.FILE_NAME_DRAG_ENTRY_TYPE, paths = this.retrievePaths(type), filePaths = paths; ///
326
- return filePaths;
327
- }
328
- },
329
- {
330
- key: "retrieveDirectoryPaths",
331
- value: function retrieveDirectoryPaths() {
332
- var type = _entryTypes.DIRECTORY_NAME_DRAG_ENTRY_TYPE, paths = this.retrievePaths(type), directoryPaths = paths; ///
333
- return directoryPaths;
334
- }
335
- },
336
- {
337
- key: "collapse",
338
- value: function collapse() {
339
- var directoryNameDragEntryItems = this.retrieveDirectoryNameDragEntryItems();
340
- directoryNameDragEntryItems.forEach(function(directoryNameDragEntryItem) {
341
- directoryNameDragEntryItem.collapse();
342
- });
343
- }
344
- },
345
- {
346
- key: "createPath",
347
- value: function createPath() {
348
- var path;
349
- var name = _constants.PERIOD, selectedDragEntryItem = this.retrieveSelectedDragEntryItem();
350
- if (selectedDragEntryItem === null) {
351
- path = name; ///
352
- } else {
353
- var selectedDragEntryItemDirectoryNameDragEntryItem = selectedDragEntryItem.isDirectoryNameDragEntryItem();
354
- if (selectedDragEntryItemDirectoryNameDragEntryItem) {
355
- var directoryNameDragEntryItem = selectedDragEntryItem, directoryNameDragEntryItemPath = directoryNameDragEntryItem.getPath();
356
- path = concatenatePaths(directoryNameDragEntryItemPath, name);
357
- selectedDragEntryItem.expand();
358
- } else {
359
- var fileNameDragEntryItem = selectedDragEntryItem, fileNameDragEntryItemPath = fileNameDragEntryItem.getPath(), fileNameDragEntryItemPathWithoutBottommostName = pathWithoutBottommostNameFromPath(fileNameDragEntryItemPath);
360
- path = concatenatePaths(fileNameDragEntryItemPathWithoutBottommostName, name);
361
- }
362
- }
363
- return path;
364
- }
365
- },
366
- {
367
- key: "createFilePath",
368
- value: function createFilePath() {
369
- var path = this.createPath(), filePath = path, fileNameDragEntryItem = this.addFilePath(filePath);
370
- fileNameDragEntryItem.create();
371
- }
372
- },
373
- {
374
- key: "createDirectoryPath",
375
- value: function createDirectoryPath() {
376
- var path = this.createPath(), readOnly = false, collapsed = false, directoryPath = path, directoryNameDragEntryItem = this.addDirectoryPath(directoryPath, readOnly, collapsed);
377
- directoryNameDragEntryItem.create();
378
- }
379
- },
380
- {
381
- key: "renameSelectedPath",
382
- value: function renameSelectedPath() {
383
- var selectedDragEntryItem = this.retrieveSelectedDragEntryItem();
384
- if (selectedDragEntryItem !== null) {
385
- selectedDragEntryItem.rename();
386
- }
387
- }
388
- },
389
- {
390
- key: "getSelectedPath",
391
- value: function getSelectedPath() {
392
- var selectedPath = null;
393
- var selectedDragEntryItem = this.retrieveSelectedDragEntryItem();
394
- if (selectedDragEntryItem !== null) {
395
- var selectedDragEntryItemPath = selectedDragEntryItem.getPath();
396
- selectedPath = selectedDragEntryItemPath; ///
397
- }
398
- return selectedPath;
399
- }
400
- },
401
- {
402
- key: "clickDragEntryItem",
403
- value: function clickDragEntryItem(event, element, dragEntryItem) {
404
- var _this = this;
405
- var singleClick = this.isSingleClick();
406
- if (singleClick) {
407
- var selected = dragEntryItem.click(event, element);
408
- if (selected) {
409
- dragEntryItem.singleClick(event, element);
410
- }
411
- return;
412
- }
413
- var clickedDragEntryItem = this.getClickedDragEntryItem();
414
- if (dragEntryItem !== clickedDragEntryItem) {
415
- var interval = this.getInterval();
416
- clearInterval(interval);
417
- this.clearInterval();
418
- this.clearClickedDragEntryItem();
419
- }
420
- var interval1 = this.getInterval();
421
- if (interval1 === null) {
422
- var delay = _constants.DOUBLE_CLICK_DELAY, interval2 = setTimeout(function() {
423
- _this.clearInterval();
424
- _this.clearClickedDragEntryItem();
425
- dragEntryItem.click(event, element);
426
- }, delay), clickedDragEntryItem1 = dragEntryItem; ///
427
- this.setInterval(interval2);
428
- this.setClickedDragEntryItem(clickedDragEntryItem1);
429
- return;
430
- }
431
- clearInterval(interval1);
432
- this.clearInterval();
433
- this.clearClickedDragEntryItem();
434
- dragEntryItem.doubleClick(event, element);
435
- }
436
- },
437
- {
438
- key: "openFileNameDragEntryItem",
439
- value: function openFileNameDragEntryItem(event, element, fileNameDragEntryItem) {
440
- var disabled = this.isDisabled();
441
- if (disabled) {
442
- return;
443
- }
444
- var fileNameDragEntryItemPath = fileNameDragEntryItem.getPath(), filePath = fileNameDragEntryItemPath, customEventType = _customEventTypes.OPEN_CUSTOM_EVENT_TYPE;
445
- this.callCustomHandlers(customEventType, event, element, filePath);
446
- }
447
- },
448
- {
449
- key: "selectOrDeselectDragEntryItem",
450
- value: function selectOrDeselectDragEntryItem(event, element, dragEntryItem) {
451
- var disabled = this.isDisabled();
452
- if (disabled) {
453
- return;
454
- }
455
- var selected = dragEntryItem.isSelected();
456
- var path = dragEntryItem.getPath();
457
- if (selected) {
458
- dragEntryItem.deselect();
459
- } else {
460
- this.deselectAllPaths();
461
- this.selectPath(path);
462
- }
463
- selected = !selected; ///
464
- var readOnly = dragEntryItem.isReadOnly(), customEventType = _customEventTypes.SELECT_CUSTOM_EVENT_TYPE;
465
- this.callCustomHandlers(customEventType, event, element, path, selected, readOnly);
466
- return selected;
467
- }
468
- },
469
- {
470
- key: "createDragEntryItem",
471
- value: function createDragEntryItem(event, element, dragEntryItem, done) {
472
- var sourceEntryPath = (0, _pathMap.sourceEntryPathFromEntryItem)(dragEntryItem), targetEntryPath = (0, _pathMap.targetEntryPathFromEntryItem)(dragEntryItem), pathMaps = dragEntryItem.getPathMaps(sourceEntryPath, targetEntryPath), explorer = this; ///
473
- this.createDragEntryItems(event, element, pathMaps, explorer, done);
474
- }
475
- },
476
- {
477
- key: "renameDragEntryItem",
478
- value: function renameDragEntryItem(event, element, dragEntryItem, done) {
479
- var sourceEntryPath, targetEntryPath;
480
- sourceEntryPath = (0, _pathMap.sourceEntryPathFromEntryItem)(dragEntryItem);
481
- targetEntryPath = (0, _pathMap.targetEntryPathFromEntryItem)(dragEntryItem);
482
- var pathMaps = dragEntryItem.getPathMaps(sourceEntryPath, targetEntryPath), firstPathMap = first(pathMaps), pathMap = firstPathMap; ///
483
- var ref;
484
- ref = pathMap, sourceEntryPath = ref.sourceEntryPath, targetEntryPath = ref.targetEntryPath, ref;
485
- if (sourceEntryPath === targetEntryPath) {
486
- done();
487
- return;
488
- }
489
- var explorer = this; ///
490
- this.renameDragEntryItems(event, element, pathMaps, explorer, done);
491
- }
492
- },
493
- {
494
- key: "dropDragEntryItem",
495
- value: function dropDragEntryItem(event, element, dragEntryItem, done) {
496
- var dragEntryItemExplorer = dragEntryItem.getExplorer(), markerEntryItem = this.retrieveMarkerEntryItem(), sourceEntryPath = (0, _pathMap.sourceEntryPathFromEntryItem)(dragEntryItem), targetEntryPath = (0, _pathMap.targetEntryPathFromEntryItem)(markerEntryItem);
497
- if (sourceEntryPath === targetEntryPath && dragEntryItemExplorer === this) {
498
- this.removeMarker();
499
- done();
500
- return;
501
- }
502
- var pathMaps = dragEntryItem.getPathMaps(sourceEntryPath, targetEntryPath), explorer = dragEntryItemExplorer; ///
503
- this.moveDragEntryItems(event, element, pathMaps, explorer, done);
504
- }
505
- },
506
- {
507
- key: "renameDragEntryItems",
508
- value: function renameDragEntryItems(event, element, pathMaps, explorer, done) {
509
- var _this = this;
510
- var customEventType = _customEventTypes.RENAME_CUSTOM_EVENT_TYPE;
511
- this.callCustomHandlersAsync(customEventType, event, element, pathMaps, function() {
512
- pathMaps.forEach(function(pathMap) {
513
- _this.removeDragEntryItem(pathMap, explorer);
514
- });
515
- pathMaps.forEach(function(pathMap) {
516
- _this.addDragEntryItem(pathMap, explorer);
517
- });
518
- done();
519
- });
520
- }
521
- },
522
- {
523
- key: "moveDragEntryItems",
524
- value: function moveDragEntryItems(event, element, pathMaps, explorer, done) {
525
- var _this = this;
526
- var customEventType = _customEventTypes.MOVE_CUSTOM_EVENT_TYPE;
527
- this.callCustomHandlersAsync(customEventType, event, element, pathMaps, function() {
528
- pathMaps.forEach(function(pathMap) {
529
- _this.removeDragEntryItem(pathMap, explorer);
530
- });
531
- pathMaps.forEach(function(pathMap) {
532
- _this.addDragEntryItem(pathMap, explorer);
533
- });
534
- _this.removeMarker();
535
- done();
536
- });
537
- }
538
- },
539
- {
540
- key: "removeDragEntryItems",
541
- value: function removeDragEntryItems(event, element, pathMaps, explorer, done) {
542
- var _this = this;
543
- var customEventType = _customEventTypes.REMOVE_CUSTOM_EVENT_TYPE;
544
- this.callCustomHandlersAsync(customEventType, event, element, pathMaps, function() {
545
- pathMaps.forEach(function(pathMap) {
546
- _this.removeDragEntryItem(pathMap, explorer);
547
- });
548
- pathMaps.forEach(function(pathMap) {
549
- _this.addDragEntryItem(pathMap, explorer);
550
- });
551
- done();
552
- });
553
- }
554
- },
555
- {
556
- key: "createDragEntryItems",
557
- value: function createDragEntryItems(event, element, pathMaps, explorer, done) {
558
- var _this = this;
559
- var customEventType = _customEventTypes.CREATE_CUSTOM_EVENT_TYPE;
560
- this.callCustomHandlersAsync(customEventType, event, element, pathMaps, function() {
561
- pathMaps.forEach(function(pathMap) {
562
- _this.removeDragEntryItem(pathMap, explorer);
563
- });
564
- pathMaps.forEach(function(pathMap) {
565
- _this.addDragEntryItem(pathMap, explorer);
566
- });
567
- done();
568
- });
569
- }
570
- },
571
- {
572
- key: "enable",
573
- value: function enable() {
574
- var disabled = false;
575
- this.setDisabled(disabled);
576
- this.enableDrag();
577
- }
578
- },
579
- {
580
- key: "disable",
581
- value: function disable() {
582
- var disabled = true;
583
- this.setDisabled(disabled);
584
- this.disableDrag();
585
- }
586
- },
587
- {
588
- key: "enableDrag",
589
- value: function enableDrag() {
590
- var dragEntryItems = this.retrieveDragEntryItems();
591
- dragEntryItems.forEach(function(dragEntryItem) {
592
- dragEntryItem.enableDrag();
593
- });
594
- }
595
- },
596
- {
597
- key: "disableDrag",
598
- value: function disableDrag() {
599
- var dragEntryItems = this.retrieveDragEntryItems();
600
- dragEntryItems.forEach(function(dragEntryItem) {
601
- dragEntryItem.disableDrag();
602
- });
603
- }
604
- },
605
- {
606
- key: "clearInterval",
607
- value: function clearInterval1() {
608
- var interval = null;
609
- this.setInterval(interval);
610
- }
611
- },
612
- {
613
- key: "clearClickedDragEntryItem",
614
- value: function clearClickedDragEntryItem() {
615
- var clickedDragEntryItem = null;
616
- this.setClickedDragEntryItem(clickedDragEntryItem);
617
- }
618
- },
619
- {
620
- key: "isDisabled",
621
- value: function isDisabled() {
622
- var disabled = this.getState().disabled;
623
- return disabled;
624
- }
625
- },
626
- {
627
- key: "isEditable",
628
- value: function isEditable() {
629
- var editableDragEntryItem = this.retrieveEditableDragEntryItem(), editable = editableDragEntryItem !== null;
630
- return editable;
631
- }
632
- },
633
- {
634
- key: "getInterval",
635
- value: function getInterval() {
636
- var interval = this.getState().interval;
637
- return interval;
638
- }
639
- },
640
- {
641
- key: "isSingleClick",
642
- value: function isSingleClick() {
643
- var singleClick = this.getState().singleClick;
644
- return singleClick;
645
- }
646
- },
647
- {
648
- key: "getClickedDragEntryItem",
649
- value: function getClickedDragEntryItem() {
650
- var clickedDragEntryItem = this.getState().clickedDragEntryItem;
651
- return clickedDragEntryItem;
652
- }
653
- },
654
- {
655
- key: "setDisabled",
656
- value: function setDisabled(disabled) {
657
- this.updateState({
658
- disabled: disabled
659
- });
660
- }
661
- },
662
- {
663
- key: "setInterval",
664
- value: function setInterval(interval) {
665
- this.updateState({
666
- interval: interval
667
- });
668
- }
669
- },
670
- {
671
- key: "setSingleClick",
672
- value: function setSingleClick(singleClick) {
673
- this.updateState({
674
- singleClick: singleClick
675
- });
676
- }
677
- },
678
- {
679
- key: "setClickedDragEntryItem",
680
- value: function setClickedDragEntryItem(clickedDragEntryItem) {
681
- this.updateState({
682
- clickedDragEntryItem: clickedDragEntryItem
683
- });
684
- }
685
- },
686
- {
687
- key: "cancelEditableDragEntryItem",
688
- value: function cancelEditableDragEntryItem() {
689
- var editableDragEntryItem = this.retrieveEditableDragEntryItem(), created = editableDragEntryItem.isCreated();
690
- editableDragEntryItem.cancel(created);
691
- }
692
- },
693
- {
694
- key: "setInitialState",
695
- value: function setInitialState() {
696
- var disabled = false, interval = null, singleClick = false, clickedDragEntryItem = null;
697
- this.setState({
698
- disabled: disabled,
699
- interval: interval,
700
- singleClick: singleClick,
701
- clickedDragEntryItem: clickedDragEntryItem
702
- });
703
- }
704
- },
705
- {
706
- key: "didMount",
707
- value: function didMount() {
708
- var _this_properties = this.properties, _this_properties_singleClick = _this_properties.singleClick, singleClick = _this_properties_singleClick === void 0 ? false : _this_properties_singleClick;
709
- this.setSingleClick(singleClick);
710
- this.enableDrop();
711
- this.onCustomDragOver(this.dragOverCustomHandler);
712
- this.onCustomDrop(this.dropCustomHandler);
713
- }
714
- },
715
- {
716
- key: "willUnmount",
717
- value: function willUnmount() {
718
- this.disableDrop();
719
- this.offCustomDragOver(this.dragOverCustomHandler);
720
- this.offCustomDrop(this.dropCustomHandler);
721
- }
722
- },
723
- {
724
- key: "childElements",
725
- value: function childElements() {
726
- var explorer = this; ///
727
- return /*#__PURE__*/ React.createElement(_entries.default, {
728
- explorer: explorer,
729
- topmost: true
730
- });
731
- }
732
- },
733
- {
734
- key: "parentContext",
735
- value: function parentContext() {
736
- var context = this.getContext(), collapse = this.collapse.bind(this), getSelectedPath = this.getSelectedPath.bind(this), retrieveFilePaths = this.retrieveFilePaths.bind(this), retrieveDirectoryPaths = this.retrieveDirectoryPaths.bind(this);
737
- return _object_spread_props(_object_spread({}, context), {
738
- collapse: collapse,
739
- getSelectedPath: getSelectedPath,
740
- retrieveFilePaths: retrieveFilePaths,
741
- retrieveDirectoryPaths: retrieveDirectoryPaths
742
- });
743
- }
744
- },
745
- {
746
- key: "initialise",
747
- value: function initialise() {
748
- this.assignContext();
749
- this.setInitialState();
750
- }
751
- }
752
- ]);
753
- return Explorer;
754
- }(_wrap_native_super(_easy.Element));
755
- _define_property(Explorer, "EntriesList", _entries.default);
756
- _define_property(Explorer, "FileNameDragEntryItem", _fileName.default);
757
- _define_property(Explorer, "FileNameMarkerEntryItem", _fileName1.default);
758
- _define_property(Explorer, "DirectoryNameDragEntryItem", _directoryName.default);
759
- _define_property(Explorer, "DirectoryNameMarkerEntryItem", _directoryName1.default);
760
- _define_property(Explorer, "tagName", "div");
761
- _define_property(Explorer, "ignoredProperties", [
762
- "reference",
763
- "references",
764
- "singleClick"
765
- ]);
766
- _define_property(Explorer, "defaultProperties", {
767
- className: "explorer"
768
- });
769
418
  Object.assign(Explorer.prototype, _easydraganddrop.dropMixins);
770
419
  Object.assign(Explorer.prototype, _explorer.default);
771
420
  Object.assign(Explorer.prototype, _dragEntryItem.default);
772
- var _default = (0, _easywithstyle.default)(Explorer)(_templateObject(), _styles.explorerPadding);
421
+ const _default = (0, _easywithstyle.default)(Explorer)`
422
+
423
+ padding: ${_styles.explorerPadding};
424
+
425
+ `;
773
426
 
774
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leHBsb3Jlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyBkcm9wTWl4aW5zIH0gZnJvbSBcImVhc3ktZHJhZy1hbmQtZHJvcFwiO1xuaW1wb3J0IHsgcGF0aFV0aWxpdGllcywgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBFbnRyaWVzTGlzdCBmcm9tIFwiLi9saXN0L2VudHJpZXNcIjtcbmltcG9ydCBleHBsb3Jlck1peGlucyBmcm9tIFwiLi9taXhpbnMvZXhwbG9yZXJcIjtcbmltcG9ydCBkcmFnRW50cnlJdGVtTWl4aW5zIGZyb20gXCIuL21peGlucy9kcmFnRW50cnlJdGVtXCI7XG5pbXBvcnQgRmlsZU5hbWVEcmFnRW50cnlJdGVtIGZyb20gXCIuL2l0ZW0vZW50cnkvZHJhZy9maWxlTmFtZVwiO1xuaW1wb3J0IEZpbGVOYW1lTWFya2VyRW50cnlJdGVtIGZyb20gXCIuL2l0ZW0vZW50cnkvbWFya2VyL2ZpbGVOYW1lXCI7XG5pbXBvcnQgRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0gZnJvbSBcIi4vaXRlbS9lbnRyeS9kcmFnL2RpcmVjdG9yeU5hbWVcIjtcbmltcG9ydCBEaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtIGZyb20gXCIuL2l0ZW0vZW50cnkvbWFya2VyL2RpcmVjdG9yeU5hbWVcIjtcblxuaW1wb3J0IHsgZXhwbG9yZXJQYWRkaW5nIH0gZnJvbSBcIi4vc3R5bGVzXCI7XG5pbXBvcnQgeyBQRVJJT0QsIERPVUJMRV9DTElDS19ERUxBWSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRklMRV9OQU1FX0RSQUdfRU5UUllfVFlQRSwgRElSRUNUT1JZX05BTUVfRFJBR19FTlRSWV9UWVBFIH0gZnJvbSBcIi4vZW50cnlUeXBlc1wiO1xuaW1wb3J0IHsgc291cmNlRW50cnlQYXRoRnJvbUVudHJ5SXRlbSwgdGFyZ2V0RW50cnlQYXRoRnJvbUVudHJ5SXRlbSB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXRoTWFwXCI7XG5pbXBvcnQgeyBNT1ZFX0NVU1RPTV9FVkVOVF9UWVBFLFxuICAgICAgICAgT1BFTl9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIFJFTU9WRV9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIFJFTkFNRV9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIFNFTEVDVF9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIENSRUFURV9DVVNUT01fRVZFTlRfVFlQRSB9IGZyb20gXCIuL2N1c3RvbUV2ZW50VHlwZXNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGNvbmNhdGVuYXRlUGF0aHMsIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCB9ID0gcGF0aFV0aWxpdGllcztcblxuY2xhc3MgRXhwbG9yZXIgZXh0ZW5kcyBFbGVtZW50IHtcbiAgZHJhZ092ZXJDdXN0b21IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50LCBkcmFnRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW0gPSBkcmFnRWxlbWVudCwgIC8vL1xuICAgICAgICAgIG1hcmtlckVudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVNYXJrZXJFbnRyeUl0ZW0oKSxcbiAgICAgICAgICBkcmFnRW50cnlJdGVtTmFtZSA9IGRyYWdFbnRyeUl0ZW0uZ2V0TmFtZSgpO1xuXG4gICAgbGV0IG1hcmtlckVudHJ5SXRlbVBhdGggPSBtYXJrZXJFbnRyeUl0ZW0uZ2V0UGF0aCgpLFxuICAgICAgICBtYXJrZXJFbnRyeUl0ZW1FeHBsb3JlciA9IG1hcmtlckVudHJ5SXRlbS5nZXRFeHBsb3JlcigpLFxuICAgICAgICBwcmV2aW91c01hcmtlckVudHJ5SXRlbVBhdGggPSBtYXJrZXJFbnRyeUl0ZW1QYXRoLCAvLy9cbiAgICAgICAgcHJldmlvdXNNYXJrZXJFbnRyeUl0ZW1FeHBsb3JlciA9IG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyOyAvLy9cblxuICAgIG1hcmtlckVudHJ5SXRlbVBhdGggPSBkcmFnRW50cnlJdGVtTmFtZTsvLy9cblxuICAgIG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyID0gdGhpczsgIC8vL1xuXG4gICAgaWYgKChtYXJrZXJFbnRyeUl0ZW1FeHBsb3JlciAhPT0gcHJldmlvdXNNYXJrZXJFbnRyeUl0ZW1FeHBsb3JlcikgfHwgKG1hcmtlckVudHJ5SXRlbVBhdGggIT09IHByZXZpb3VzTWFya2VyRW50cnlJdGVtUGF0aCkpIHtcbiAgICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW1UeXBlID0gZHJhZ0VudHJ5SXRlbS5nZXRUeXBlKCk7XG5cbiAgICAgIHByZXZpb3VzTWFya2VyRW50cnlJdGVtRXhwbG9yZXIucmVtb3ZlTWFya2VyKCk7XG5cbiAgICAgIG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyLmFkZE1hcmtlcihtYXJrZXJFbnRyeUl0ZW1QYXRoLCBkcmFnRW50cnlJdGVtVHlwZSk7XG4gICAgfVxuICB9XG5cbiAgZHJvcEN1c3RvbUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQsIGRyYWdFbGVtZW50LCBhYm9ydGVkLCBkb25lKSA9PiB7XG4gICAgY29uc3QgbWFya2VyRW50cnlJdGVtID0gdGhpcy5yZXRyaWV2ZU1hcmtlckVudHJ5SXRlbSgpLFxuICAgICAgICAgIG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyID0gbWFya2VyRW50cnlJdGVtLmdldEV4cGxvcmVyKCk7XG5cbiAgICBpZiAoYWJvcnRlZCkge1xuICAgICAgbWFya2VyRW50cnlJdGVtRXhwbG9yZXIucmVtb3ZlTWFya2VyKCk7XG5cbiAgICAgIGRvbmUoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW0gPSBkcmFnRWxlbWVudDsgIC8vL1xuXG4gICAgbWFya2VyRW50cnlJdGVtRXhwbG9yZXIuZHJvcERyYWdFbnRyeUl0ZW0oZXZlbnQsIGVsZW1lbnQsIGRyYWdFbnRyeUl0ZW0sIGRvbmUpO1xuICB9XG5cbiAgZ2V0RXhwbG9yZXIoKSB7XG4gICAgY29uc3QgZXhwbG9yZXIgPSB0aGlzOyAgLy8vXG5cbiAgICByZXR1cm4gZXhwbG9yZXI7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgY29uc3QgeyByZWZlcmVuY2UgPSBudWxsIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlcygpIHtcbiAgICBjb25zdCB7IHJlZmVyZW5jZXMgPSBbXSB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRFbnRyaWVzTGlzdCgpIHtcbiAgXHRjb25zdCB7IEVudHJpZXNMaXN0IH0gPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gIFx0cmV0dXJuIEVudHJpZXNMaXN0O1xuXHR9XG5cbiAgZ2V0RmlsZU5hbWVEcmFnRW50cnlJdGVtKHJlYWRPbmx5KSB7XG5cdFx0Y29uc3QgeyBGaWxlTmFtZURyYWdFbnRyeUl0ZW0gfSA9IHRoaXMuY29uc3RydWN0b3I7XG5cblx0XHRyZXR1cm4gRmlsZU5hbWVEcmFnRW50cnlJdGVtO1xuXHR9XG5cbiAgZ2V0RmlsZU5hbWVNYXJrZXJFbnRyeUl0ZW0oKSB7XG4gICAgY29uc3QgeyBGaWxlTmFtZU1hcmtlckVudHJ5SXRlbSB9ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHJldHVybiBGaWxlTmFtZU1hcmtlckVudHJ5SXRlbTtcbiAgfVxuXG4gIGdldERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtKHJlYWRPbmx5LCB0b3Btb3N0KSB7XG5cdFx0Y29uc3QgeyBEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSB9ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuXHRcdHJldHVybiBEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbTtcblx0fVxuXG4gIGdldERpcmVjdG9yeU5hbWVNYXJrZXJFbnRyeUl0ZW0oKSB7XG4gICAgY29uc3QgeyBEaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtIH0gPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgcmV0dXJuIERpcmVjdG9yeU5hbWVNYXJrZXJFbnRyeUl0ZW07XG4gIH1cblxuICByZXRyaWV2ZVBhdGhzKHR5cGUpIHtcbiAgICBjb25zdCBkcmFnRW50cnlJdGVtcyA9IHRoaXMucmV0cmlldmVEcmFnRW50cnlJdGVtcygpLFxuICAgICAgICAgIHBhdGhzID0gZHJhZ0VudHJ5SXRlbXMucmVkdWNlKChwYXRocywgZHJhZ0VudHJ5SXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZHJhZ0VudHJ5SXRlbVR5cGUgPSBkcmFnRW50cnlJdGVtLmdldFR5cGUoKTtcblxuICAgICAgICAgICAgaWYgKGRyYWdFbnRyeUl0ZW1UeXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW1QYXRoID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoKCksXG4gICAgICAgICAgICAgICAgICAgIHBhdGggPSBkcmFnRW50cnlJdGVtUGF0aDsgLy8vXG5cbiAgICAgICAgICAgICAgcGF0aHMucHVzaChwYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhdGhzO1xuICAgICAgICAgIH0sIFtdKTtcblxuICAgIHJldHVybiBwYXRocztcbiAgfVxuXG4gIHJldHJpZXZlRmlsZVBhdGhzKCkge1xuICAgIGNvbnN0IHR5cGUgPSBGSUxFX05BTUVfRFJBR19FTlRSWV9UWVBFLFxuICAgICAgICAgIHBhdGhzID0gdGhpcy5yZXRyaWV2ZVBhdGhzKHR5cGUpLFxuICAgICAgICAgIGZpbGVQYXRocyA9IHBhdGhzOyAvLy9cblxuICAgIHJldHVybiBmaWxlUGF0aHM7XG4gIH1cblxuICByZXRyaWV2ZURpcmVjdG9yeVBhdGhzKCkge1xuICAgIGNvbnN0IHR5cGUgPSBESVJFQ1RPUllfTkFNRV9EUkFHX0VOVFJZX1RZUEUsXG4gICAgICAgICAgcGF0aHMgPSB0aGlzLnJldHJpZXZlUGF0aHModHlwZSksXG4gICAgICAgICAgZGlyZWN0b3J5UGF0aHMgPSBwYXRoczsgLy8vXG5cbiAgICByZXR1cm4gZGlyZWN0b3J5UGF0aHM7XG4gIH1cblxuICBjb2xsYXBzZSgpIHtcbiAgICBjb25zdCBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbXMgPSB0aGlzLnJldHJpZXZlRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1zKCk7XG5cbiAgICBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbXMuZm9yRWFjaCgoZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtLmNvbGxhcHNlKCk7XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVQYXRoKCkge1xuICAgIGxldCBwYXRoO1xuXG4gICAgY29uc3QgbmFtZSA9IFBFUklPRCwgIC8vL1xuICAgICAgICAgIHNlbGVjdGVkRHJhZ0VudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVTZWxlY3RlZERyYWdFbnRyeUl0ZW0oKTtcblxuICAgIGlmIChzZWxlY3RlZERyYWdFbnRyeUl0ZW0gPT09IG51bGwpIHtcbiAgICAgIHBhdGggPSBuYW1lOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRHJhZ0VudHJ5SXRlbURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gc2VsZWN0ZWREcmFnRW50cnlJdGVtLmlzRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0oKTtcblxuICAgICAgaWYgKHNlbGVjdGVkRHJhZ0VudHJ5SXRlbURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtKSB7XG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gc2VsZWN0ZWREcmFnRW50cnlJdGVtLCAvLy9cbiAgICAgICAgICAgICAgZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1QYXRoID0gZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0uZ2V0UGF0aCgpO1xuXG4gICAgICAgIHBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtUGF0aCwgbmFtZSk7XG5cbiAgICAgICAgc2VsZWN0ZWREcmFnRW50cnlJdGVtLmV4cGFuZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZmlsZU5hbWVEcmFnRW50cnlJdGVtID0gc2VsZWN0ZWREcmFnRW50cnlJdGVtLCAgLy8vXG4gICAgICAgICAgICAgIGZpbGVOYW1lRHJhZ0VudHJ5SXRlbVBhdGggPSBmaWxlTmFtZURyYWdFbnRyeUl0ZW0uZ2V0UGF0aCgpLFxuICAgICAgICAgICAgICBmaWxlTmFtZURyYWdFbnRyeUl0ZW1QYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZUZyb21QYXRoKGZpbGVOYW1lRHJhZ0VudHJ5SXRlbVBhdGgpO1xuXG4gICAgICAgIHBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKGZpbGVOYW1lRHJhZ0VudHJ5SXRlbVBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgY3JlYXRlRmlsZVBhdGgoKSB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY3JlYXRlUGF0aCgpLFxuICAgICAgICAgIGZpbGVQYXRoID0gcGF0aCwgIC8vL1xuICAgICAgICAgIGZpbGVOYW1lRHJhZ0VudHJ5SXRlbSA9IHRoaXMuYWRkRmlsZVBhdGgoZmlsZVBhdGgpO1xuXG4gICAgZmlsZU5hbWVEcmFnRW50cnlJdGVtLmNyZWF0ZSgpO1xuICB9XG5cbiAgY3JlYXRlRGlyZWN0b3J5UGF0aCgpIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jcmVhdGVQYXRoKCksXG4gICAgICAgICAgcmVhZE9ubHkgPSBmYWxzZSxcbiAgICAgICAgICBjb2xsYXBzZWQgPSBmYWxzZSxcbiAgICAgICAgICBkaXJlY3RvcnlQYXRoID0gcGF0aCwgIC8vL1xuICAgICAgICAgIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gdGhpcy5hZGREaXJlY3RvcnlQYXRoKGRpcmVjdG9yeVBhdGgsIHJlYWRPbmx5LCBjb2xsYXBzZWQpO1xuXG4gICAgZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0uY3JlYXRlKCk7XG4gIH1cblxuICByZW5hbWVTZWxlY3RlZFBhdGgoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWREcmFnRW50cnlJdGVtID0gdGhpcy5yZXRyaWV2ZVNlbGVjdGVkRHJhZ0VudHJ5SXRlbSgpO1xuXG4gICAgaWYgKHNlbGVjdGVkRHJhZ0VudHJ5SXRlbSAhPT0gbnVsbCkge1xuICAgICAgc2VsZWN0ZWREcmFnRW50cnlJdGVtLnJlbmFtZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlbGVjdGVkUGF0aCgpIHtcbiAgICBsZXQgc2VsZWN0ZWRQYXRoID0gbnVsbDtcblxuICAgIGNvbnN0IHNlbGVjdGVkRHJhZ0VudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVTZWxlY3RlZERyYWdFbnRyeUl0ZW0oKTtcblxuICAgIGlmIChzZWxlY3RlZERyYWdFbnRyeUl0ZW0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRHJhZ0VudHJ5SXRlbVBhdGggPSBzZWxlY3RlZERyYWdFbnRyeUl0ZW0uZ2V0UGF0aCgpO1xuXG4gICAgICBzZWxlY3RlZFBhdGggPSBzZWxlY3RlZERyYWdFbnRyeUl0ZW1QYXRoOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRQYXRoO1xuICB9XG5cbiAgY2xpY2tEcmFnRW50cnlJdGVtKGV2ZW50LCBlbGVtZW50LCBkcmFnRW50cnlJdGVtKSB7XG4gICAgY29uc3Qgc2luZ2xlQ2xpY2sgPSB0aGlzLmlzU2luZ2xlQ2xpY2soKTtcblxuICAgIGlmIChzaW5nbGVDbGljaykge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBkcmFnRW50cnlJdGVtLmNsaWNrKGV2ZW50LCBlbGVtZW50KTtcblxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIGRyYWdFbnRyeUl0ZW0uc2luZ2xlQ2xpY2soZXZlbnQsIGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2xpY2tlZERyYWdFbnRyeUl0ZW0gPSB0aGlzLmdldENsaWNrZWREcmFnRW50cnlJdGVtKCk7XG5cbiAgICBpZiAoZHJhZ0VudHJ5SXRlbSAhPT0gY2xpY2tlZERyYWdFbnRyeUl0ZW0pIHtcbiAgICAgIGNvbnN0IGludGVydmFsID0gdGhpcy5nZXRJbnRlcnZhbCgpO1xuXG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcblxuICAgICAgdGhpcy5jbGVhckludGVydmFsKCk7XG5cbiAgICAgIHRoaXMuY2xlYXJDbGlja2VkRHJhZ0VudHJ5SXRlbSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsID0gdGhpcy5nZXRJbnRlcnZhbCgpO1xuXG4gICAgaWYgKGludGVydmFsID09PSBudWxsKSB7XG4gICAgICBjb25zdCBkZWxheSA9IERPVUJMRV9DTElDS19ERUxBWSxcbiAgICAgICAgICAgIGludGVydmFsID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJJbnRlcnZhbCgpO1xuXG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJDbGlja2VkRHJhZ0VudHJ5SXRlbSgpO1xuXG4gICAgICAgICAgICAgIGRyYWdFbnRyeUl0ZW0uY2xpY2soZXZlbnQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgfSwgZGVsYXkpLFxuICAgICAgICAgICAgY2xpY2tlZERyYWdFbnRyeUl0ZW0gPSBkcmFnRW50cnlJdGVtOyAvLy9cblxuICAgICAgdGhpcy5zZXRJbnRlcnZhbChpbnRlcnZhbCk7XG5cbiAgICAgIHRoaXMuc2V0Q2xpY2tlZERyYWdFbnRyeUl0ZW0oY2xpY2tlZERyYWdFbnRyeUl0ZW0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG5cbiAgICB0aGlzLmNsZWFySW50ZXJ2YWwoKTtcblxuICAgIHRoaXMuY2xlYXJDbGlja2VkRHJhZ0VudHJ5SXRlbSgpO1xuXG4gICAgZHJhZ0VudHJ5SXRlbS5kb3VibGVDbGljayhldmVudCwgZWxlbWVudCk7XG4gIH1cblxuICBvcGVuRmlsZU5hbWVEcmFnRW50cnlJdGVtKGV2ZW50LCBlbGVtZW50LCBmaWxlTmFtZURyYWdFbnRyeUl0ZW0pIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZU5hbWVEcmFnRW50cnlJdGVtUGF0aCA9IGZpbGVOYW1lRHJhZ0VudHJ5SXRlbS5nZXRQYXRoKCksXG4gICAgICAgICAgZmlsZVBhdGggPSBmaWxlTmFtZURyYWdFbnRyeUl0ZW1QYXRoLCAvLy9cbiAgICAgICAgICBjdXN0b21FdmVudFR5cGUgPSBPUEVOX0NVU1RPTV9FVkVOVF9UWVBFO1xuXG4gICAgdGhpcy5jYWxsQ3VzdG9tSGFuZGxlcnMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgZmlsZVBhdGgpO1xuICB9XG5cbiAgc2VsZWN0T3JEZXNlbGVjdERyYWdFbnRyeUl0ZW0oZXZlbnQsIGVsZW1lbnQsIGRyYWdFbnRyeUl0ZW0pIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHNlbGVjdGVkID0gZHJhZ0VudHJ5SXRlbS5pc1NlbGVjdGVkKCk7XG5cbiAgICBjb25zdCBwYXRoID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoKCk7XG5cbiAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgIGRyYWdFbnRyeUl0ZW0uZGVzZWxlY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXNlbGVjdEFsbFBhdGhzKCk7XG5cbiAgICAgIHRoaXMuc2VsZWN0UGF0aChwYXRoKTtcbiAgICB9XG5cbiAgICBzZWxlY3RlZCA9ICFzZWxlY3RlZDsgLy8vXG5cbiAgICBjb25zdCByZWFkT25seSA9IGRyYWdFbnRyeUl0ZW0uaXNSZWFkT25seSgpLFxuICAgICAgICAgIGN1c3RvbUV2ZW50VHlwZSA9IFNFTEVDVF9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzKGN1c3RvbUV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQsIHBhdGgsIHNlbGVjdGVkLCByZWFkT25seSk7XG5cbiAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gIH1cblxuICBjcmVhdGVEcmFnRW50cnlJdGVtKGV2ZW50LCBlbGVtZW50LCBkcmFnRW50cnlJdGVtLCBkb25lKSB7XG4gICAgY29uc3Qgc291cmNlRW50cnlQYXRoID0gc291cmNlRW50cnlQYXRoRnJvbUVudHJ5SXRlbShkcmFnRW50cnlJdGVtKSxcbiAgICAgICAgICB0YXJnZXRFbnRyeVBhdGggPSB0YXJnZXRFbnRyeVBhdGhGcm9tRW50cnlJdGVtKGRyYWdFbnRyeUl0ZW0pLFxuICAgICAgICAgIHBhdGhNYXBzID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoTWFwcyhzb3VyY2VFbnRyeVBhdGgsIHRhcmdldEVudHJ5UGF0aCksXG4gICAgICAgICAgZXhwbG9yZXIgPSB0aGlzOyAgLy8vXG5cbiAgICB0aGlzLmNyZWF0ZURyYWdFbnRyeUl0ZW1zKGV2ZW50LCBlbGVtZW50LCBwYXRoTWFwcywgZXhwbG9yZXIsIGRvbmUpO1xuICB9XG5cbiAgcmVuYW1lRHJhZ0VudHJ5SXRlbShldmVudCwgZWxlbWVudCwgZHJhZ0VudHJ5SXRlbSwgZG9uZSkge1xuICAgIGxldCBzb3VyY2VFbnRyeVBhdGgsXG4gICAgICAgIHRhcmdldEVudHJ5UGF0aDtcblxuICAgIHNvdXJjZUVudHJ5UGF0aCA9IHNvdXJjZUVudHJ5UGF0aEZyb21FbnRyeUl0ZW0oZHJhZ0VudHJ5SXRlbSk7XG4gICAgdGFyZ2V0RW50cnlQYXRoID0gdGFyZ2V0RW50cnlQYXRoRnJvbUVudHJ5SXRlbShkcmFnRW50cnlJdGVtKTtcblxuICAgIGNvbnN0IHBhdGhNYXBzID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoTWFwcyhzb3VyY2VFbnRyeVBhdGgsIHRhcmdldEVudHJ5UGF0aCksXG4gICAgICAgICAgZmlyc3RQYXRoTWFwID0gZmlyc3QocGF0aE1hcHMpLFxuICAgICAgICAgIHBhdGhNYXAgPSBmaXJzdFBhdGhNYXA7IC8vL1xuXG4gICAgKHsgc291cmNlRW50cnlQYXRoLCB0YXJnZXRFbnRyeVBhdGggfSA9IHBhdGhNYXApO1xuXG4gICAgaWYgKHNvdXJjZUVudHJ5UGF0aCA9PT0gdGFyZ2V0RW50cnlQYXRoKSB7XG4gICAgICBkb25lKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBleHBsb3JlciA9IHRoaXM7ICAvLy9cblxuICAgIHRoaXMucmVuYW1lRHJhZ0VudHJ5SXRlbXMoZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCBleHBsb3JlciwgZG9uZSk7XG4gIH1cblxuICBkcm9wRHJhZ0VudHJ5SXRlbShldmVudCwgZWxlbWVudCwgZHJhZ0VudHJ5SXRlbSwgZG9uZSkge1xuICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW1FeHBsb3JlciA9IGRyYWdFbnRyeUl0ZW0uZ2V0RXhwbG9yZXIoKSxcbiAgICAgICAgICBtYXJrZXJFbnRyeUl0ZW0gPSB0aGlzLnJldHJpZXZlTWFya2VyRW50cnlJdGVtKCksXG4gICAgICAgICAgc291cmNlRW50cnlQYXRoID0gc291cmNlRW50cnlQYXRoRnJvbUVudHJ5SXRlbShkcmFnRW50cnlJdGVtKSxcbiAgICAgICAgICB0YXJnZXRFbnRyeVBhdGggPSB0YXJnZXRFbnRyeVBhdGhGcm9tRW50cnlJdGVtKG1hcmtlckVudHJ5SXRlbSk7XG5cbiAgICBpZiAoKHNvdXJjZUVudHJ5UGF0aCA9PT0gdGFyZ2V0RW50cnlQYXRoKSAmJiAoZHJhZ0VudHJ5SXRlbUV4cGxvcmVyID09PSB0aGlzKSkge1xuICAgICAgdGhpcy5yZW1vdmVNYXJrZXIoKTtcblxuICAgICAgZG9uZSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aE1hcHMgPSBkcmFnRW50cnlJdGVtLmdldFBhdGhNYXBzKHNvdXJjZUVudHJ5UGF0aCwgdGFyZ2V0RW50cnlQYXRoKSxcbiAgICAgICAgICBleHBsb3JlciA9IGRyYWdFbnRyeUl0ZW1FeHBsb3JlcjsgLy8vXG5cbiAgICB0aGlzLm1vdmVEcmFnRW50cnlJdGVtcyhldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsIGV4cGxvcmVyLCBkb25lKTtcbiAgfVxuXG4gIHJlbmFtZURyYWdFbnRyeUl0ZW1zKGV2ZW50LCBlbGVtZW50LCBwYXRoTWFwcywgZXhwbG9yZXIsIGRvbmUpIHtcbiAgICBjb25zdCBjdXN0b21FdmVudFR5cGUgPSBSRU5BTUVfQ1VTVE9NX0VWRU5UX1RZUEU7XG5cbiAgICB0aGlzLmNhbGxDdXN0b21IYW5kbGVyc0FzeW5jKGN1c3RvbUV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCAoKSA9PiB7XG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgcGF0aE1hcHMuZm9yRWFjaCgocGF0aE1hcCkgPT4ge1xuICAgICAgICB0aGlzLmFkZERyYWdFbnRyeUl0ZW0ocGF0aE1hcCwgZXhwbG9yZXIpO1xuICAgICAgfSk7XG5cbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG1vdmVEcmFnRW50cnlJdGVtcyhldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsIGV4cGxvcmVyLCBkb25lKSB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnRUeXBlID0gTU9WRV9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsICgpID0+IHtcbiAgICAgIHBhdGhNYXBzLmZvckVhY2goKHBhdGhNYXApID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVEcmFnRW50cnlJdGVtKHBhdGhNYXAsIGV4cGxvcmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZW1vdmVNYXJrZXIoKTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlRHJhZ0VudHJ5SXRlbXMoZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCBleHBsb3JlciwgZG9uZSkge1xuICAgIGNvbnN0IGN1c3RvbUV2ZW50VHlwZSA9IFJFTU9WRV9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsICgpID0+IHtcbiAgICAgIHBhdGhNYXBzLmZvckVhY2goKHBhdGhNYXApID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVEcmFnRW50cnlJdGVtKHBhdGhNYXAsIGV4cGxvcmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlRHJhZ0VudHJ5SXRlbXMoZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCBleHBsb3JlciwgZG9uZSkge1xuICAgIGNvbnN0IGN1c3RvbUV2ZW50VHlwZSA9IENSRUFURV9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsICgpID0+IHtcbiAgICAgIHBhdGhNYXBzLmZvckVhY2goKHBhdGhNYXApID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVEcmFnRW50cnlJdGVtKHBhdGhNYXAsIGV4cGxvcmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgZW5hYmxlKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnNldERpc2FibGVkKGRpc2FibGVkKTtcblxuICAgIHRoaXMuZW5hYmxlRHJhZygpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRydWU7XG5cbiAgICB0aGlzLnNldERpc2FibGVkKGRpc2FibGVkKTtcblxuICAgIHRoaXMuZGlzYWJsZURyYWcoKTtcbiAgfVxuXG4gIGVuYWJsZURyYWcoKSB7XG4gICAgY29uc3QgZHJhZ0VudHJ5SXRlbXMgPSB0aGlzLnJldHJpZXZlRHJhZ0VudHJ5SXRlbXMoKTtcblxuICAgIGRyYWdFbnRyeUl0ZW1zLmZvckVhY2goKGRyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgIGRyYWdFbnRyeUl0ZW0uZW5hYmxlRHJhZygpO1xuICAgIH0pO1xuICB9XG5cbiAgZGlzYWJsZURyYWcoKSB7XG4gICAgY29uc3QgZHJhZ0VudHJ5SXRlbXMgPSB0aGlzLnJldHJpZXZlRHJhZ0VudHJ5SXRlbXMoKTtcblxuICAgIGRyYWdFbnRyeUl0ZW1zLmZvckVhY2goKGRyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgIGRyYWdFbnRyeUl0ZW0uZGlzYWJsZURyYWcoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFySW50ZXJ2YWwoKSB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBudWxsO1xuXG4gICAgdGhpcy5zZXRJbnRlcnZhbChpbnRlcnZhbCk7XG4gIH1cblxuICBjbGVhckNsaWNrZWREcmFnRW50cnlJdGVtKCkge1xuICAgIGNvbnN0IGNsaWNrZWREcmFnRW50cnlJdGVtID0gbnVsbDtcblxuICAgIHRoaXMuc2V0Q2xpY2tlZERyYWdFbnRyeUl0ZW0oY2xpY2tlZERyYWdFbnRyeUl0ZW0pO1xuICB9XG5cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICBjb25zdCB7IGRpc2FibGVkIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gZGlzYWJsZWQ7XG4gIH1cblxuICBpc0VkaXRhYmxlKCkge1xuICAgIGNvbnN0IGVkaXRhYmxlRHJhZ0VudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVFZGl0YWJsZURyYWdFbnRyeUl0ZW0oKSxcbiAgICAgICAgICBlZGl0YWJsZSA9IChlZGl0YWJsZURyYWdFbnRyeUl0ZW0gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGVkaXRhYmxlO1xuICB9XG5cbiAgZ2V0SW50ZXJ2YWwoKSB7XG4gICAgY29uc3QgeyBpbnRlcnZhbCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gICAgcmV0dXJuIGludGVydmFsO1xuICB9XG5cbiAgaXNTaW5nbGVDbGljaygpIHtcbiAgICBjb25zdCB7IHNpbmdsZUNsaWNrIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gc2luZ2xlQ2xpY2s7XG4gIH1cblxuICBnZXRDbGlja2VkRHJhZ0VudHJ5SXRlbSgpIHtcbiAgICBjb25zdCB7IGNsaWNrZWREcmFnRW50cnlJdGVtIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gY2xpY2tlZERyYWdFbnRyeUl0ZW07XG4gIH1cblxuICBzZXREaXNhYmxlZChkaXNhYmxlZCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgZGlzYWJsZWRcbiAgICB9KTtcbiAgfVxuXG4gIHNldEludGVydmFsKGludGVydmFsKSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBpbnRlcnZhbFxuICAgIH0pO1xuICB9XG5cbiAgc2V0U2luZ2xlQ2xpY2soc2luZ2xlQ2xpY2spIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHNpbmdsZUNsaWNrXG4gICAgfSk7XG4gIH1cblxuICBzZXRDbGlja2VkRHJhZ0VudHJ5SXRlbShjbGlja2VkRHJhZ0VudHJ5SXRlbSkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgY2xpY2tlZERyYWdFbnRyeUl0ZW1cbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbEVkaXRhYmxlRHJhZ0VudHJ5SXRlbSgpIHtcbiAgICBjb25zdCBlZGl0YWJsZURyYWdFbnRyeUl0ZW0gPSB0aGlzLnJldHJpZXZlRWRpdGFibGVEcmFnRW50cnlJdGVtKCksXG4gICAgICAgICAgY3JlYXRlZCA9IGVkaXRhYmxlRHJhZ0VudHJ5SXRlbS5pc0NyZWF0ZWQoKTtcblxuICAgIGVkaXRhYmxlRHJhZ0VudHJ5SXRlbS5jYW5jZWwoY3JlYXRlZCk7XG4gIH1cblxuICBzZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgICAgICBpbnRlcnZhbCA9IG51bGwsXG4gICAgICAgICAgc2luZ2xlQ2xpY2sgPSBmYWxzZSxcbiAgICAgICAgICBjbGlja2VkRHJhZ0VudHJ5SXRlbSA9IG51bGw7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRpc2FibGVkLFxuICAgICAgaW50ZXJ2YWwsXG4gICAgICBzaW5nbGVDbGljayxcbiAgICAgIGNsaWNrZWREcmFnRW50cnlJdGVtXG4gICAgfSk7XG4gIH1cblxuICBkaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IHNpbmdsZUNsaWNrID0gZmFsc2UgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgIHRoaXMuc2V0U2luZ2xlQ2xpY2soc2luZ2xlQ2xpY2spO1xuXG4gICAgdGhpcy5lbmFibGVEcm9wKCk7XG5cbiAgICB0aGlzLm9uQ3VzdG9tRHJhZ092ZXIodGhpcy5kcmFnT3ZlckN1c3RvbUhhbmRsZXIpO1xuXG4gICAgdGhpcy5vbkN1c3RvbURyb3AodGhpcy5kcm9wQ3VzdG9tSGFuZGxlcik7XG4gIH1cblxuICB3aWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmRpc2FibGVEcm9wKCk7XG5cbiAgICB0aGlzLm9mZkN1c3RvbURyYWdPdmVyKHRoaXMuZHJhZ092ZXJDdXN0b21IYW5kbGVyKTtcblxuICAgIHRoaXMub2ZmQ3VzdG9tRHJvcCh0aGlzLmRyb3BDdXN0b21IYW5kbGVyKTtcbiAgfVxuXG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gIFx0Y29uc3QgZXhwbG9yZXIgPSB0aGlzOyAgLy8vXG5cbiAgXHRyZXR1cm4gKFxuXG4gIFx0XHQ8RW50cmllc0xpc3QgZXhwbG9yZXI9e2V4cGxvcmVyfSB0b3Btb3N0IC8+XG5cblx0XHQpO1xuXHR9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgY29sbGFwc2UgPSB0aGlzLmNvbGxhcHNlLmJpbmQodGhpcyksXG4gICAgICAgICAgZ2V0U2VsZWN0ZWRQYXRoID0gdGhpcy5nZXRTZWxlY3RlZFBhdGguYmluZCh0aGlzKSxcbiAgICAgICAgICByZXRyaWV2ZUZpbGVQYXRocyA9IHRoaXMucmV0cmlldmVGaWxlUGF0aHMuYmluZCh0aGlzKSxcbiAgICAgICAgICByZXRyaWV2ZURpcmVjdG9yeVBhdGhzID0gdGhpcy5yZXRyaWV2ZURpcmVjdG9yeVBhdGhzLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIC4uLmNvbnRleHQsXG4gICAgICBjb2xsYXBzZSxcbiAgICAgIGdldFNlbGVjdGVkUGF0aCxcbiAgICAgIHJldHJpZXZlRmlsZVBhdGhzLFxuICAgICAgcmV0cmlldmVEaXJlY3RvcnlQYXRoc1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgXHR0aGlzLmFzc2lnbkNvbnRleHQoKTtcblxuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG5cdH1cblxuXHRzdGF0aWMgRW50cmllc0xpc3QgPSBFbnRyaWVzTGlzdDtcblxuICBzdGF0aWMgRmlsZU5hbWVEcmFnRW50cnlJdGVtID0gRmlsZU5hbWVEcmFnRW50cnlJdGVtO1xuXG4gIHN0YXRpYyBGaWxlTmFtZU1hcmtlckVudHJ5SXRlbSA9IEZpbGVOYW1lTWFya2VyRW50cnlJdGVtO1xuXG4gIHN0YXRpYyBEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9IERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtO1xuXG4gIHN0YXRpYyBEaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtID0gRGlyZWN0b3J5TmFtZU1hcmtlckVudHJ5SXRlbTtcblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xuICAgIFwicmVmZXJlbmNlXCIsXG4gICAgXCJyZWZlcmVuY2VzXCIsXG4gICAgXCJzaW5nbGVDbGlja1wiXG4gIF07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJleHBsb3JlclwiXG4gIH07XG59XG5cbk9iamVjdC5hc3NpZ24oRXhwbG9yZXIucHJvdG90eXBlLCBkcm9wTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRXhwbG9yZXIucHJvdG90eXBlLCBleHBsb3Jlck1peGlucyk7XG5PYmplY3QuYXNzaWduKEV4cGxvcmVyLnByb3RvdHlwZSwgZHJhZ0VudHJ5SXRlbU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShFeHBsb3JlcilgXG4gIFxuICBwYWRkaW5nOiAke2V4cGxvcmVyUGFkZGluZ307IFxuICBcbmA7XG4iXSwibmFtZXMiOlsiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsImNvbmNhdGVuYXRlUGF0aHMiLCJwYXRoVXRpbGl0aWVzIiwicGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZUZyb21QYXRoIiwiRXhwbG9yZXIiLCJkcmFnT3ZlckN1c3RvbUhhbmRsZXIiLCJldmVudCIsImVsZW1lbnQiLCJkcmFnRWxlbWVudCIsImRyYWdFbnRyeUl0ZW0iLCJtYXJrZXJFbnRyeUl0ZW0iLCJyZXRyaWV2ZU1hcmtlckVudHJ5SXRlbSIsImRyYWdFbnRyeUl0ZW1OYW1lIiwiZ2V0TmFtZSIsIm1hcmtlckVudHJ5SXRlbVBhdGgiLCJnZXRQYXRoIiwibWFya2VyRW50cnlJdGVtRXhwbG9yZXIiLCJnZXRFeHBsb3JlciIsInByZXZpb3VzTWFya2VyRW50cnlJdGVtUGF0aCIsInByZXZpb3VzTWFya2VyRW50cnlJdGVtRXhwbG9yZXIiLCJkcmFnRW50cnlJdGVtVHlwZSIsImdldFR5cGUiLCJyZW1vdmVNYXJrZXIiLCJhZGRNYXJrZXIiLCJkcm9wQ3VzdG9tSGFuZGxlciIsImFib3J0ZWQiLCJkb25lIiwiZHJvcERyYWdFbnRyeUl0ZW0iLCJleHBsb3JlciIsImdldFJlZmVyZW5jZSIsInByb3BlcnRpZXMiLCJyZWZlcmVuY2UiLCJnZXRSZWZlcmVuY2VzIiwicmVmZXJlbmNlcyIsImdldEVudHJpZXNMaXN0IiwiRW50cmllc0xpc3QiLCJnZXRGaWxlTmFtZURyYWdFbnRyeUl0ZW0iLCJyZWFkT25seSIsIkZpbGVOYW1lRHJhZ0VudHJ5SXRlbSIsImdldEZpbGVOYW1lTWFya2VyRW50cnlJdGVtIiwiRmlsZU5hbWVNYXJrZXJFbnRyeUl0ZW0iLCJnZXREaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSIsInRvcG1vc3QiLCJEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSIsImdldERpcmVjdG9yeU5hbWVNYXJrZXJFbnRyeUl0ZW0iLCJEaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtIiwicmV0cmlldmVQYXRocyIsInR5cGUiLCJkcmFnRW50cnlJdGVtcyIsInJldHJpZXZlRHJhZ0VudHJ5SXRlbXMiLCJwYXRocyIsInJlZHVjZSIsImRyYWdFbnRyeUl0ZW1QYXRoIiwicGF0aCIsInB1c2giLCJyZXRyaWV2ZUZpbGVQYXRocyIsIkZJTEVfTkFNRV9EUkFHX0VOVFJZX1RZUEUiLCJmaWxlUGF0aHMiLCJyZXRyaWV2ZURpcmVjdG9yeVBhdGhzIiwiRElSRUNUT1JZX05BTUVfRFJBR19FTlRSWV9UWVBFIiwiZGlyZWN0b3J5UGF0aHMiLCJjb2xsYXBzZSIsImRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtcyIsInJldHJpZXZlRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1zIiwiZm9yRWFjaCIsImRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtIiwiY3JlYXRlUGF0aCIsIm5hbWUiLCJQRVJJT0QiLCJzZWxlY3RlZERyYWdFbnRyeUl0ZW0iLCJyZXRyaWV2ZVNlbGVjdGVkRHJhZ0VudHJ5SXRlbSIsInNlbGVjdGVkRHJhZ0VudHJ5SXRlbURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtIiwiaXNEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSIsImRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtUGF0aCIsImV4cGFuZCIsImZpbGVOYW1lRHJhZ0VudHJ5SXRlbSIsImZpbGVOYW1lRHJhZ0VudHJ5SXRlbVBhdGgiLCJmaWxlTmFtZURyYWdFbnRyeUl0ZW1QYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lIiwiY3JlYXRlRmlsZVBhdGgiLCJmaWxlUGF0aCIsImFkZEZpbGVQYXRoIiwiY3JlYXRlIiwiY3JlYXRlRGlyZWN0b3J5UGF0aCIsImNvbGxhcHNlZCIsImRpcmVjdG9yeVBhdGgiLCJhZGREaXJlY3RvcnlQYXRoIiwicmVuYW1lU2VsZWN0ZWRQYXRoIiwicmVuYW1lIiwiZ2V0U2VsZWN0ZWRQYXRoIiwic2VsZWN0ZWRQYXRoIiwic2VsZWN0ZWREcmFnRW50cnlJdGVtUGF0aCIsImNsaWNrRHJhZ0VudHJ5SXRlbSIsInNpbmdsZUNsaWNrIiwiaXNTaW5nbGVDbGljayIsInNlbGVjdGVkIiwiY2xpY2siLCJjbGlja2VkRHJhZ0VudHJ5SXRlbSIsImdldENsaWNrZWREcmFnRW50cnlJdGVtIiwiaW50ZXJ2YWwiLCJnZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJjbGVhckNsaWNrZWREcmFnRW50cnlJdGVtIiwiZGVsYXkiLCJET1VCTEVfQ0xJQ0tfREVMQVkiLCJzZXRUaW1lb3V0Iiwic2V0SW50ZXJ2YWwiLCJzZXRDbGlja2VkRHJhZ0VudHJ5SXRlbSIsImRvdWJsZUNsaWNrIiwib3BlbkZpbGVOYW1lRHJhZ0VudHJ5SXRlbSIsImRpc2FibGVkIiwiaXNEaXNhYmxlZCIsImN1c3RvbUV2ZW50VHlwZSIsIk9QRU5fQ1VTVE9NX0VWRU5UX1RZUEUiLCJjYWxsQ3VzdG9tSGFuZGxlcnMiLCJzZWxlY3RPckRlc2VsZWN0RHJhZ0VudHJ5SXRlbSIsImlzU2VsZWN0ZWQiLCJkZXNlbGVjdCIsImRlc2VsZWN0QWxsUGF0aHMiLCJzZWxlY3RQYXRoIiwiaXNSZWFkT25seSIsIlNFTEVDVF9DVVNUT01fRVZFTlRfVFlQRSIsImNyZWF0ZURyYWdFbnRyeUl0ZW0iLCJzb3VyY2VFbnRyeVBhdGgiLCJzb3VyY2VFbnRyeVBhdGhGcm9tRW50cnlJdGVtIiwidGFyZ2V0RW50cnlQYXRoIiwidGFyZ2V0RW50cnlQYXRoRnJvbUVudHJ5SXRlbSIsInBhdGhNYXBzIiwiZ2V0UGF0aE1hcHMiLCJjcmVhdGVEcmFnRW50cnlJdGVtcyIsInJlbmFtZURyYWdFbnRyeUl0ZW0iLCJmaXJzdFBhdGhNYXAiLCJwYXRoTWFwIiwicmVuYW1lRHJhZ0VudHJ5SXRlbXMiLCJkcmFnRW50cnlJdGVtRXhwbG9yZXIiLCJtb3ZlRHJhZ0VudHJ5SXRlbXMiLCJSRU5BTUVfQ1VTVE9NX0VWRU5UX1RZUEUiLCJjYWxsQ3VzdG9tSGFuZGxlcnNBc3luYyIsInJlbW92ZURyYWdFbnRyeUl0ZW0iLCJhZGREcmFnRW50cnlJdGVtIiwiTU9WRV9DVVNUT01fRVZFTlRfVFlQRSIsInJlbW92ZURyYWdFbnRyeUl0ZW1zIiwiUkVNT1ZFX0NVU1RPTV9FVkVOVF9UWVBFIiwiQ1JFQVRFX0NVU1RPTV9FVkVOVF9UWVBFIiwiZW5hYmxlIiwic2V0RGlzYWJsZWQiLCJlbmFibGVEcmFnIiwiZGlzYWJsZSIsImRpc2FibGVEcmFnIiwiZ2V0U3RhdGUiLCJpc0VkaXRhYmxlIiwiZWRpdGFibGVEcmFnRW50cnlJdGVtIiwicmV0cmlldmVFZGl0YWJsZURyYWdFbnRyeUl0ZW0iLCJlZGl0YWJsZSIsInVwZGF0ZVN0YXRlIiwic2V0U2luZ2xlQ2xpY2siLCJjYW5jZWxFZGl0YWJsZURyYWdFbnRyeUl0ZW0iLCJjcmVhdGVkIiwiaXNDcmVhdGVkIiwiY2FuY2VsIiwic2V0SW5pdGlhbFN0YXRlIiwic2V0U3RhdGUiLCJkaWRNb3VudCIsImVuYWJsZURyb3AiLCJvbkN1c3RvbURyYWdPdmVyIiwib25DdXN0b21Ecm9wIiwid2lsbFVubW91bnQiLCJkaXNhYmxlRHJvcCIsIm9mZkN1c3RvbURyYWdPdmVyIiwib2ZmQ3VzdG9tRHJvcCIsImNoaWxkRWxlbWVudHMiLCJwYXJlbnRDb250ZXh0IiwiY29udGV4dCIsImdldENvbnRleHQiLCJiaW5kIiwiaW5pdGlhbGlzZSIsImFzc2lnbkNvbnRleHQiLCJFbGVtZW50IiwidGFnTmFtZSIsImlnbm9yZWRQcm9wZXJ0aWVzIiwiZGVmYXVsdFByb3BlcnRpZXMiLCJjbGFzc05hbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJwcm90b3R5cGUiLCJkcm9wTWl4aW5zIiwiZXhwbG9yZXJNaXhpbnMiLCJkcmFnRW50cnlJdGVtTWl4aW5zIiwid2l0aFN0eWxlIiwiZXhwbG9yZXJQYWRkaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFzb0JBOzs7ZUFBQTs7O29FQXBvQnNCO29CQUVFOytCQUNHO3lCQUNtQjs4REFFdEI7K0RBQ0c7b0VBQ0s7K0RBQ0U7Z0VBQ0U7b0VBQ0c7cUVBQ0U7c0JB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
427
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leHBsb3Jlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyBkcm9wTWl4aW5zIH0gZnJvbSBcImVhc3ktZHJhZy1hbmQtZHJvcFwiO1xuaW1wb3J0IHsgcGF0aFV0aWxpdGllcywgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBFbnRyaWVzTGlzdCBmcm9tIFwiLi9saXN0L2VudHJpZXNcIjtcbmltcG9ydCBleHBsb3Jlck1peGlucyBmcm9tIFwiLi9taXhpbnMvZXhwbG9yZXJcIjtcbmltcG9ydCBkcmFnRW50cnlJdGVtTWl4aW5zIGZyb20gXCIuL21peGlucy9kcmFnRW50cnlJdGVtXCI7XG5pbXBvcnQgRmlsZU5hbWVEcmFnRW50cnlJdGVtIGZyb20gXCIuL2l0ZW0vZW50cnkvZHJhZy9maWxlTmFtZVwiO1xuaW1wb3J0IEZpbGVOYW1lTWFya2VyRW50cnlJdGVtIGZyb20gXCIuL2l0ZW0vZW50cnkvbWFya2VyL2ZpbGVOYW1lXCI7XG5pbXBvcnQgRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0gZnJvbSBcIi4vaXRlbS9lbnRyeS9kcmFnL2RpcmVjdG9yeU5hbWVcIjtcbmltcG9ydCBEaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtIGZyb20gXCIuL2l0ZW0vZW50cnkvbWFya2VyL2RpcmVjdG9yeU5hbWVcIjtcblxuaW1wb3J0IHsgZXhwbG9yZXJQYWRkaW5nIH0gZnJvbSBcIi4vc3R5bGVzXCI7XG5pbXBvcnQgeyBQRVJJT0QsIERPVUJMRV9DTElDS19ERUxBWSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRklMRV9OQU1FX0RSQUdfRU5UUllfVFlQRSwgRElSRUNUT1JZX05BTUVfRFJBR19FTlRSWV9UWVBFIH0gZnJvbSBcIi4vZW50cnlUeXBlc1wiO1xuaW1wb3J0IHsgc291cmNlRW50cnlQYXRoRnJvbUVudHJ5SXRlbSwgdGFyZ2V0RW50cnlQYXRoRnJvbUVudHJ5SXRlbSB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXRoTWFwXCI7XG5pbXBvcnQgeyBNT1ZFX0NVU1RPTV9FVkVOVF9UWVBFLFxuICAgICAgICAgT1BFTl9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIFJFTU9WRV9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIFJFTkFNRV9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIFNFTEVDVF9DVVNUT01fRVZFTlRfVFlQRSxcbiAgICAgICAgIENSRUFURV9DVVNUT01fRVZFTlRfVFlQRSB9IGZyb20gXCIuL2N1c3RvbUV2ZW50VHlwZXNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGNvbmNhdGVuYXRlUGF0aHMsIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCB9ID0gcGF0aFV0aWxpdGllcztcblxuY2xhc3MgRXhwbG9yZXIgZXh0ZW5kcyBFbGVtZW50IHtcbiAgZHJhZ092ZXJDdXN0b21IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50LCBkcmFnRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW0gPSBkcmFnRWxlbWVudCwgIC8vL1xuICAgICAgICAgIG1hcmtlckVudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVNYXJrZXJFbnRyeUl0ZW0oKSxcbiAgICAgICAgICBkcmFnRW50cnlJdGVtTmFtZSA9IGRyYWdFbnRyeUl0ZW0uZ2V0TmFtZSgpO1xuXG4gICAgbGV0IG1hcmtlckVudHJ5SXRlbVBhdGggPSBtYXJrZXJFbnRyeUl0ZW0uZ2V0UGF0aCgpLFxuICAgICAgICBtYXJrZXJFbnRyeUl0ZW1FeHBsb3JlciA9IG1hcmtlckVudHJ5SXRlbS5nZXRFeHBsb3JlcigpLFxuICAgICAgICBwcmV2aW91c01hcmtlckVudHJ5SXRlbVBhdGggPSBtYXJrZXJFbnRyeUl0ZW1QYXRoLCAvLy9cbiAgICAgICAgcHJldmlvdXNNYXJrZXJFbnRyeUl0ZW1FeHBsb3JlciA9IG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyOyAvLy9cblxuICAgIG1hcmtlckVudHJ5SXRlbVBhdGggPSBkcmFnRW50cnlJdGVtTmFtZTsvLy9cblxuICAgIG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyID0gdGhpczsgIC8vL1xuXG4gICAgaWYgKChtYXJrZXJFbnRyeUl0ZW1FeHBsb3JlciAhPT0gcHJldmlvdXNNYXJrZXJFbnRyeUl0ZW1FeHBsb3JlcikgfHwgKG1hcmtlckVudHJ5SXRlbVBhdGggIT09IHByZXZpb3VzTWFya2VyRW50cnlJdGVtUGF0aCkpIHtcbiAgICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW1UeXBlID0gZHJhZ0VudHJ5SXRlbS5nZXRUeXBlKCk7XG5cbiAgICAgIHByZXZpb3VzTWFya2VyRW50cnlJdGVtRXhwbG9yZXIucmVtb3ZlTWFya2VyKCk7XG5cbiAgICAgIG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyLmFkZE1hcmtlcihtYXJrZXJFbnRyeUl0ZW1QYXRoLCBkcmFnRW50cnlJdGVtVHlwZSk7XG4gICAgfVxuICB9XG5cbiAgZHJvcEN1c3RvbUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQsIGRyYWdFbGVtZW50LCBhYm9ydGVkLCBkb25lKSA9PiB7XG4gICAgY29uc3QgbWFya2VyRW50cnlJdGVtID0gdGhpcy5yZXRyaWV2ZU1hcmtlckVudHJ5SXRlbSgpLFxuICAgICAgICAgIG1hcmtlckVudHJ5SXRlbUV4cGxvcmVyID0gbWFya2VyRW50cnlJdGVtLmdldEV4cGxvcmVyKCk7XG5cbiAgICBpZiAoYWJvcnRlZCkge1xuICAgICAgbWFya2VyRW50cnlJdGVtRXhwbG9yZXIucmVtb3ZlTWFya2VyKCk7XG5cbiAgICAgIGRvbmUoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW0gPSBkcmFnRWxlbWVudDsgIC8vL1xuXG4gICAgbWFya2VyRW50cnlJdGVtRXhwbG9yZXIuZHJvcERyYWdFbnRyeUl0ZW0oZXZlbnQsIGVsZW1lbnQsIGRyYWdFbnRyeUl0ZW0sIGRvbmUpO1xuICB9XG5cbiAgZ2V0RXhwbG9yZXIoKSB7XG4gICAgY29uc3QgZXhwbG9yZXIgPSB0aGlzOyAgLy8vXG5cbiAgICByZXR1cm4gZXhwbG9yZXI7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgY29uc3QgeyByZWZlcmVuY2UgPSBudWxsIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlcygpIHtcbiAgICBjb25zdCB7IHJlZmVyZW5jZXMgPSBbXSB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRFbnRyaWVzTGlzdCgpIHtcbiAgXHRjb25zdCB7IEVudHJpZXNMaXN0IH0gPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gIFx0cmV0dXJuIEVudHJpZXNMaXN0O1xuXHR9XG5cbiAgZ2V0RmlsZU5hbWVEcmFnRW50cnlJdGVtKHJlYWRPbmx5KSB7XG5cdFx0Y29uc3QgeyBGaWxlTmFtZURyYWdFbnRyeUl0ZW0gfSA9IHRoaXMuY29uc3RydWN0b3I7XG5cblx0XHRyZXR1cm4gRmlsZU5hbWVEcmFnRW50cnlJdGVtO1xuXHR9XG5cbiAgZ2V0RmlsZU5hbWVNYXJrZXJFbnRyeUl0ZW0oKSB7XG4gICAgY29uc3QgeyBGaWxlTmFtZU1hcmtlckVudHJ5SXRlbSB9ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHJldHVybiBGaWxlTmFtZU1hcmtlckVudHJ5SXRlbTtcbiAgfVxuXG4gIGdldERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtKHJlYWRPbmx5LCB0b3Btb3N0KSB7XG5cdFx0Y29uc3QgeyBEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSB9ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuXHRcdHJldHVybiBEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbTtcblx0fVxuXG4gIGdldERpcmVjdG9yeU5hbWVNYXJrZXJFbnRyeUl0ZW0oKSB7XG4gICAgY29uc3QgeyBEaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtIH0gPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgcmV0dXJuIERpcmVjdG9yeU5hbWVNYXJrZXJFbnRyeUl0ZW07XG4gIH1cblxuICByZXRyaWV2ZVBhdGhzKHR5cGUpIHtcbiAgICBjb25zdCBkcmFnRW50cnlJdGVtcyA9IHRoaXMucmV0cmlldmVEcmFnRW50cnlJdGVtcygpLFxuICAgICAgICAgIHBhdGhzID0gZHJhZ0VudHJ5SXRlbXMucmVkdWNlKChwYXRocywgZHJhZ0VudHJ5SXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZHJhZ0VudHJ5SXRlbVR5cGUgPSBkcmFnRW50cnlJdGVtLmdldFR5cGUoKTtcblxuICAgICAgICAgICAgaWYgKGRyYWdFbnRyeUl0ZW1UeXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW1QYXRoID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoKCksXG4gICAgICAgICAgICAgICAgICAgIHBhdGggPSBkcmFnRW50cnlJdGVtUGF0aDsgLy8vXG5cbiAgICAgICAgICAgICAgcGF0aHMucHVzaChwYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhdGhzO1xuICAgICAgICAgIH0sIFtdKTtcblxuICAgIHJldHVybiBwYXRocztcbiAgfVxuXG4gIHJldHJpZXZlRmlsZVBhdGhzKCkge1xuICAgIGNvbnN0IHR5cGUgPSBGSUxFX05BTUVfRFJBR19FTlRSWV9UWVBFLFxuICAgICAgICAgIHBhdGhzID0gdGhpcy5yZXRyaWV2ZVBhdGhzKHR5cGUpLFxuICAgICAgICAgIGZpbGVQYXRocyA9IHBhdGhzOyAvLy9cblxuICAgIHJldHVybiBmaWxlUGF0aHM7XG4gIH1cblxuICByZXRyaWV2ZURpcmVjdG9yeVBhdGhzKCkge1xuICAgIGNvbnN0IHR5cGUgPSBESVJFQ1RPUllfTkFNRV9EUkFHX0VOVFJZX1RZUEUsXG4gICAgICAgICAgcGF0aHMgPSB0aGlzLnJldHJpZXZlUGF0aHModHlwZSksXG4gICAgICAgICAgZGlyZWN0b3J5UGF0aHMgPSBwYXRoczsgLy8vXG5cbiAgICByZXR1cm4gZGlyZWN0b3J5UGF0aHM7XG4gIH1cblxuICBjb2xsYXBzZSgpIHtcbiAgICBjb25zdCBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbXMgPSB0aGlzLnJldHJpZXZlRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1zKCk7XG5cbiAgICBkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbXMuZm9yRWFjaCgoZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtLmNvbGxhcHNlKCk7XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVQYXRoKCkge1xuICAgIGxldCBwYXRoO1xuXG4gICAgY29uc3QgbmFtZSA9IFBFUklPRCwgIC8vL1xuICAgICAgICAgIHNlbGVjdGVkRHJhZ0VudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVTZWxlY3RlZERyYWdFbnRyeUl0ZW0oKTtcblxuICAgIGlmIChzZWxlY3RlZERyYWdFbnRyeUl0ZW0gPT09IG51bGwpIHtcbiAgICAgIHBhdGggPSBuYW1lOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRHJhZ0VudHJ5SXRlbURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gc2VsZWN0ZWREcmFnRW50cnlJdGVtLmlzRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0oKTtcblxuICAgICAgaWYgKHNlbGVjdGVkRHJhZ0VudHJ5SXRlbURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtKSB7XG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gc2VsZWN0ZWREcmFnRW50cnlJdGVtLCAvLy9cbiAgICAgICAgICAgICAgZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW1QYXRoID0gZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0uZ2V0UGF0aCgpO1xuXG4gICAgICAgIHBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtUGF0aCwgbmFtZSk7XG5cbiAgICAgICAgc2VsZWN0ZWREcmFnRW50cnlJdGVtLmV4cGFuZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZmlsZU5hbWVEcmFnRW50cnlJdGVtID0gc2VsZWN0ZWREcmFnRW50cnlJdGVtLCAgLy8vXG4gICAgICAgICAgICAgIGZpbGVOYW1lRHJhZ0VudHJ5SXRlbVBhdGggPSBmaWxlTmFtZURyYWdFbnRyeUl0ZW0uZ2V0UGF0aCgpLFxuICAgICAgICAgICAgICBmaWxlTmFtZURyYWdFbnRyeUl0ZW1QYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZUZyb21QYXRoKGZpbGVOYW1lRHJhZ0VudHJ5SXRlbVBhdGgpO1xuXG4gICAgICAgIHBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKGZpbGVOYW1lRHJhZ0VudHJ5SXRlbVBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgY3JlYXRlRmlsZVBhdGgoKSB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY3JlYXRlUGF0aCgpLFxuICAgICAgICAgIGZpbGVQYXRoID0gcGF0aCwgIC8vL1xuICAgICAgICAgIGZpbGVOYW1lRHJhZ0VudHJ5SXRlbSA9IHRoaXMuYWRkRmlsZVBhdGgoZmlsZVBhdGgpO1xuXG4gICAgZmlsZU5hbWVEcmFnRW50cnlJdGVtLmNyZWF0ZSgpO1xuICB9XG5cbiAgY3JlYXRlRGlyZWN0b3J5UGF0aCgpIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jcmVhdGVQYXRoKCksXG4gICAgICAgICAgcmVhZE9ubHkgPSBmYWxzZSxcbiAgICAgICAgICBjb2xsYXBzZWQgPSBmYWxzZSxcbiAgICAgICAgICBkaXJlY3RvcnlQYXRoID0gcGF0aCwgIC8vL1xuICAgICAgICAgIGRpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtID0gdGhpcy5hZGREaXJlY3RvcnlQYXRoKGRpcmVjdG9yeVBhdGgsIHJlYWRPbmx5LCBjb2xsYXBzZWQpO1xuXG4gICAgZGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0uY3JlYXRlKCk7XG4gIH1cblxuICByZW5hbWVTZWxlY3RlZFBhdGgoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWREcmFnRW50cnlJdGVtID0gdGhpcy5yZXRyaWV2ZVNlbGVjdGVkRHJhZ0VudHJ5SXRlbSgpO1xuXG4gICAgaWYgKHNlbGVjdGVkRHJhZ0VudHJ5SXRlbSAhPT0gbnVsbCkge1xuICAgICAgc2VsZWN0ZWREcmFnRW50cnlJdGVtLnJlbmFtZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlbGVjdGVkUGF0aCgpIHtcbiAgICBsZXQgc2VsZWN0ZWRQYXRoID0gbnVsbDtcblxuICAgIGNvbnN0IHNlbGVjdGVkRHJhZ0VudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVTZWxlY3RlZERyYWdFbnRyeUl0ZW0oKTtcblxuICAgIGlmIChzZWxlY3RlZERyYWdFbnRyeUl0ZW0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRHJhZ0VudHJ5SXRlbVBhdGggPSBzZWxlY3RlZERyYWdFbnRyeUl0ZW0uZ2V0UGF0aCgpO1xuXG4gICAgICBzZWxlY3RlZFBhdGggPSBzZWxlY3RlZERyYWdFbnRyeUl0ZW1QYXRoOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRQYXRoO1xuICB9XG5cbiAgY2xpY2tEcmFnRW50cnlJdGVtKGV2ZW50LCBlbGVtZW50LCBkcmFnRW50cnlJdGVtKSB7XG4gICAgY29uc3Qgc2luZ2xlQ2xpY2sgPSB0aGlzLmlzU2luZ2xlQ2xpY2soKTtcblxuICAgIGlmIChzaW5nbGVDbGljaykge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBkcmFnRW50cnlJdGVtLmNsaWNrKGV2ZW50LCBlbGVtZW50KTtcblxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIGRyYWdFbnRyeUl0ZW0uc2luZ2xlQ2xpY2soZXZlbnQsIGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2xpY2tlZERyYWdFbnRyeUl0ZW0gPSB0aGlzLmdldENsaWNrZWREcmFnRW50cnlJdGVtKCk7XG5cbiAgICBpZiAoZHJhZ0VudHJ5SXRlbSAhPT0gY2xpY2tlZERyYWdFbnRyeUl0ZW0pIHtcbiAgICAgIGNvbnN0IGludGVydmFsID0gdGhpcy5nZXRJbnRlcnZhbCgpO1xuXG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcblxuICAgICAgdGhpcy5jbGVhckludGVydmFsKCk7XG5cbiAgICAgIHRoaXMuY2xlYXJDbGlja2VkRHJhZ0VudHJ5SXRlbSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsID0gdGhpcy5nZXRJbnRlcnZhbCgpO1xuXG4gICAgaWYgKGludGVydmFsID09PSBudWxsKSB7XG4gICAgICBjb25zdCBkZWxheSA9IERPVUJMRV9DTElDS19ERUxBWSxcbiAgICAgICAgICAgIGludGVydmFsID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJJbnRlcnZhbCgpO1xuXG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJDbGlja2VkRHJhZ0VudHJ5SXRlbSgpO1xuXG4gICAgICAgICAgICAgIGRyYWdFbnRyeUl0ZW0uY2xpY2soZXZlbnQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgfSwgZGVsYXkpLFxuICAgICAgICAgICAgY2xpY2tlZERyYWdFbnRyeUl0ZW0gPSBkcmFnRW50cnlJdGVtOyAvLy9cblxuICAgICAgdGhpcy5zZXRJbnRlcnZhbChpbnRlcnZhbCk7XG5cbiAgICAgIHRoaXMuc2V0Q2xpY2tlZERyYWdFbnRyeUl0ZW0oY2xpY2tlZERyYWdFbnRyeUl0ZW0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG5cbiAgICB0aGlzLmNsZWFySW50ZXJ2YWwoKTtcblxuICAgIHRoaXMuY2xlYXJDbGlja2VkRHJhZ0VudHJ5SXRlbSgpO1xuXG4gICAgZHJhZ0VudHJ5SXRlbS5kb3VibGVDbGljayhldmVudCwgZWxlbWVudCk7XG4gIH1cblxuICBvcGVuRmlsZU5hbWVEcmFnRW50cnlJdGVtKGV2ZW50LCBlbGVtZW50LCBmaWxlTmFtZURyYWdFbnRyeUl0ZW0pIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZU5hbWVEcmFnRW50cnlJdGVtUGF0aCA9IGZpbGVOYW1lRHJhZ0VudHJ5SXRlbS5nZXRQYXRoKCksXG4gICAgICAgICAgZmlsZVBhdGggPSBmaWxlTmFtZURyYWdFbnRyeUl0ZW1QYXRoLCAvLy9cbiAgICAgICAgICBjdXN0b21FdmVudFR5cGUgPSBPUEVOX0NVU1RPTV9FVkVOVF9UWVBFO1xuXG4gICAgdGhpcy5jYWxsQ3VzdG9tSGFuZGxlcnMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgZmlsZVBhdGgpO1xuICB9XG5cbiAgc2VsZWN0T3JEZXNlbGVjdERyYWdFbnRyeUl0ZW0oZXZlbnQsIGVsZW1lbnQsIGRyYWdFbnRyeUl0ZW0pIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCgpO1xuXG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHNlbGVjdGVkID0gZHJhZ0VudHJ5SXRlbS5pc1NlbGVjdGVkKCk7XG5cbiAgICBjb25zdCBwYXRoID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoKCk7XG5cbiAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgIGRyYWdFbnRyeUl0ZW0uZGVzZWxlY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXNlbGVjdEFsbFBhdGhzKCk7XG5cbiAgICAgIHRoaXMuc2VsZWN0UGF0aChwYXRoKTtcbiAgICB9XG5cbiAgICBzZWxlY3RlZCA9ICFzZWxlY3RlZDsgLy8vXG5cbiAgICBjb25zdCByZWFkT25seSA9IGRyYWdFbnRyeUl0ZW0uaXNSZWFkT25seSgpLFxuICAgICAgICAgIGN1c3RvbUV2ZW50VHlwZSA9IFNFTEVDVF9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzKGN1c3RvbUV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQsIHBhdGgsIHNlbGVjdGVkLCByZWFkT25seSk7XG5cbiAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gIH1cblxuICBjcmVhdGVEcmFnRW50cnlJdGVtKGV2ZW50LCBlbGVtZW50LCBkcmFnRW50cnlJdGVtLCBkb25lKSB7XG4gICAgY29uc3Qgc291cmNlRW50cnlQYXRoID0gc291cmNlRW50cnlQYXRoRnJvbUVudHJ5SXRlbShkcmFnRW50cnlJdGVtKSxcbiAgICAgICAgICB0YXJnZXRFbnRyeVBhdGggPSB0YXJnZXRFbnRyeVBhdGhGcm9tRW50cnlJdGVtKGRyYWdFbnRyeUl0ZW0pLFxuICAgICAgICAgIHBhdGhNYXBzID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoTWFwcyhzb3VyY2VFbnRyeVBhdGgsIHRhcmdldEVudHJ5UGF0aCksXG4gICAgICAgICAgZXhwbG9yZXIgPSB0aGlzOyAgLy8vXG5cbiAgICB0aGlzLmNyZWF0ZURyYWdFbnRyeUl0ZW1zKGV2ZW50LCBlbGVtZW50LCBwYXRoTWFwcywgZXhwbG9yZXIsIGRvbmUpO1xuICB9XG5cbiAgcmVuYW1lRHJhZ0VudHJ5SXRlbShldmVudCwgZWxlbWVudCwgZHJhZ0VudHJ5SXRlbSwgZG9uZSkge1xuICAgIGxldCBzb3VyY2VFbnRyeVBhdGgsXG4gICAgICAgIHRhcmdldEVudHJ5UGF0aDtcblxuICAgIHNvdXJjZUVudHJ5UGF0aCA9IHNvdXJjZUVudHJ5UGF0aEZyb21FbnRyeUl0ZW0oZHJhZ0VudHJ5SXRlbSk7XG4gICAgdGFyZ2V0RW50cnlQYXRoID0gdGFyZ2V0RW50cnlQYXRoRnJvbUVudHJ5SXRlbShkcmFnRW50cnlJdGVtKTtcblxuICAgIGNvbnN0IHBhdGhNYXBzID0gZHJhZ0VudHJ5SXRlbS5nZXRQYXRoTWFwcyhzb3VyY2VFbnRyeVBhdGgsIHRhcmdldEVudHJ5UGF0aCksXG4gICAgICAgICAgZmlyc3RQYXRoTWFwID0gZmlyc3QocGF0aE1hcHMpLFxuICAgICAgICAgIHBhdGhNYXAgPSBmaXJzdFBhdGhNYXA7IC8vL1xuXG4gICAgKHsgc291cmNlRW50cnlQYXRoLCB0YXJnZXRFbnRyeVBhdGggfSA9IHBhdGhNYXApO1xuXG4gICAgaWYgKHNvdXJjZUVudHJ5UGF0aCA9PT0gdGFyZ2V0RW50cnlQYXRoKSB7XG4gICAgICBkb25lKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBleHBsb3JlciA9IHRoaXM7ICAvLy9cblxuICAgIHRoaXMucmVuYW1lRHJhZ0VudHJ5SXRlbXMoZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCBleHBsb3JlciwgZG9uZSk7XG4gIH1cblxuICBkcm9wRHJhZ0VudHJ5SXRlbShldmVudCwgZWxlbWVudCwgZHJhZ0VudHJ5SXRlbSwgZG9uZSkge1xuICAgIGNvbnN0IGRyYWdFbnRyeUl0ZW1FeHBsb3JlciA9IGRyYWdFbnRyeUl0ZW0uZ2V0RXhwbG9yZXIoKSxcbiAgICAgICAgICBtYXJrZXJFbnRyeUl0ZW0gPSB0aGlzLnJldHJpZXZlTWFya2VyRW50cnlJdGVtKCksXG4gICAgICAgICAgc291cmNlRW50cnlQYXRoID0gc291cmNlRW50cnlQYXRoRnJvbUVudHJ5SXRlbShkcmFnRW50cnlJdGVtKSxcbiAgICAgICAgICB0YXJnZXRFbnRyeVBhdGggPSB0YXJnZXRFbnRyeVBhdGhGcm9tRW50cnlJdGVtKG1hcmtlckVudHJ5SXRlbSk7XG5cbiAgICBpZiAoKHNvdXJjZUVudHJ5UGF0aCA9PT0gdGFyZ2V0RW50cnlQYXRoKSAmJiAoZHJhZ0VudHJ5SXRlbUV4cGxvcmVyID09PSB0aGlzKSkge1xuICAgICAgdGhpcy5yZW1vdmVNYXJrZXIoKTtcblxuICAgICAgZG9uZSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aE1hcHMgPSBkcmFnRW50cnlJdGVtLmdldFBhdGhNYXBzKHNvdXJjZUVudHJ5UGF0aCwgdGFyZ2V0RW50cnlQYXRoKSxcbiAgICAgICAgICBleHBsb3JlciA9IGRyYWdFbnRyeUl0ZW1FeHBsb3JlcjsgLy8vXG5cbiAgICB0aGlzLm1vdmVEcmFnRW50cnlJdGVtcyhldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsIGV4cGxvcmVyLCBkb25lKTtcbiAgfVxuXG4gIHJlbmFtZURyYWdFbnRyeUl0ZW1zKGV2ZW50LCBlbGVtZW50LCBwYXRoTWFwcywgZXhwbG9yZXIsIGRvbmUpIHtcbiAgICBjb25zdCBjdXN0b21FdmVudFR5cGUgPSBSRU5BTUVfQ1VTVE9NX0VWRU5UX1RZUEU7XG5cbiAgICB0aGlzLmNhbGxDdXN0b21IYW5kbGVyc0FzeW5jKGN1c3RvbUV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCAoKSA9PiB7XG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgcGF0aE1hcHMuZm9yRWFjaCgocGF0aE1hcCkgPT4ge1xuICAgICAgICB0aGlzLmFkZERyYWdFbnRyeUl0ZW0ocGF0aE1hcCwgZXhwbG9yZXIpO1xuICAgICAgfSk7XG5cbiAgICAgIGRvbmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG1vdmVEcmFnRW50cnlJdGVtcyhldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsIGV4cGxvcmVyLCBkb25lKSB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnRUeXBlID0gTU9WRV9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsICgpID0+IHtcbiAgICAgIHBhdGhNYXBzLmZvckVhY2goKHBhdGhNYXApID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVEcmFnRW50cnlJdGVtKHBhdGhNYXAsIGV4cGxvcmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZW1vdmVNYXJrZXIoKTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlRHJhZ0VudHJ5SXRlbXMoZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCBleHBsb3JlciwgZG9uZSkge1xuICAgIGNvbnN0IGN1c3RvbUV2ZW50VHlwZSA9IFJFTU9WRV9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsICgpID0+IHtcbiAgICAgIHBhdGhNYXBzLmZvckVhY2goKHBhdGhNYXApID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVEcmFnRW50cnlJdGVtKHBhdGhNYXAsIGV4cGxvcmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlRHJhZ0VudHJ5SXRlbXMoZXZlbnQsIGVsZW1lbnQsIHBhdGhNYXBzLCBleHBsb3JlciwgZG9uZSkge1xuICAgIGNvbnN0IGN1c3RvbUV2ZW50VHlwZSA9IENSRUFURV9DVVNUT01fRVZFTlRfVFlQRTtcblxuICAgIHRoaXMuY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMoY3VzdG9tRXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCwgcGF0aE1hcHMsICgpID0+IHtcbiAgICAgIHBhdGhNYXBzLmZvckVhY2goKHBhdGhNYXApID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVEcmFnRW50cnlJdGVtKHBhdGhNYXAsIGV4cGxvcmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBwYXRoTWFwcy5mb3JFYWNoKChwYXRoTWFwKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkRHJhZ0VudHJ5SXRlbShwYXRoTWFwLCBleHBsb3Jlcik7XG4gICAgICB9KTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgZW5hYmxlKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLnNldERpc2FibGVkKGRpc2FibGVkKTtcblxuICAgIHRoaXMuZW5hYmxlRHJhZygpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRydWU7XG5cbiAgICB0aGlzLnNldERpc2FibGVkKGRpc2FibGVkKTtcblxuICAgIHRoaXMuZGlzYWJsZURyYWcoKTtcbiAgfVxuXG4gIGVuYWJsZURyYWcoKSB7XG4gICAgY29uc3QgZHJhZ0VudHJ5SXRlbXMgPSB0aGlzLnJldHJpZXZlRHJhZ0VudHJ5SXRlbXMoKTtcblxuICAgIGRyYWdFbnRyeUl0ZW1zLmZvckVhY2goKGRyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgIGRyYWdFbnRyeUl0ZW0uZW5hYmxlRHJhZygpO1xuICAgIH0pO1xuICB9XG5cbiAgZGlzYWJsZURyYWcoKSB7XG4gICAgY29uc3QgZHJhZ0VudHJ5SXRlbXMgPSB0aGlzLnJldHJpZXZlRHJhZ0VudHJ5SXRlbXMoKTtcblxuICAgIGRyYWdFbnRyeUl0ZW1zLmZvckVhY2goKGRyYWdFbnRyeUl0ZW0pID0+IHtcbiAgICAgIGRyYWdFbnRyeUl0ZW0uZGlzYWJsZURyYWcoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFySW50ZXJ2YWwoKSB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBudWxsO1xuXG4gICAgdGhpcy5zZXRJbnRlcnZhbChpbnRlcnZhbCk7XG4gIH1cblxuICBjbGVhckNsaWNrZWREcmFnRW50cnlJdGVtKCkge1xuICAgIGNvbnN0IGNsaWNrZWREcmFnRW50cnlJdGVtID0gbnVsbDtcblxuICAgIHRoaXMuc2V0Q2xpY2tlZERyYWdFbnRyeUl0ZW0oY2xpY2tlZERyYWdFbnRyeUl0ZW0pO1xuICB9XG5cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICBjb25zdCB7IGRpc2FibGVkIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gZGlzYWJsZWQ7XG4gIH1cblxuICBpc0VkaXRhYmxlKCkge1xuICAgIGNvbnN0IGVkaXRhYmxlRHJhZ0VudHJ5SXRlbSA9IHRoaXMucmV0cmlldmVFZGl0YWJsZURyYWdFbnRyeUl0ZW0oKSxcbiAgICAgICAgICBlZGl0YWJsZSA9IChlZGl0YWJsZURyYWdFbnRyeUl0ZW0gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGVkaXRhYmxlO1xuICB9XG5cbiAgZ2V0SW50ZXJ2YWwoKSB7XG4gICAgY29uc3QgeyBpbnRlcnZhbCB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gICAgcmV0dXJuIGludGVydmFsO1xuICB9XG5cbiAgaXNTaW5nbGVDbGljaygpIHtcbiAgICBjb25zdCB7IHNpbmdsZUNsaWNrIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gc2luZ2xlQ2xpY2s7XG4gIH1cblxuICBnZXRDbGlja2VkRHJhZ0VudHJ5SXRlbSgpIHtcbiAgICBjb25zdCB7IGNsaWNrZWREcmFnRW50cnlJdGVtIH0gPSB0aGlzLmdldFN0YXRlKCk7XG5cbiAgICByZXR1cm4gY2xpY2tlZERyYWdFbnRyeUl0ZW07XG4gIH1cblxuICBzZXREaXNhYmxlZChkaXNhYmxlZCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgZGlzYWJsZWRcbiAgICB9KTtcbiAgfVxuXG4gIHNldEludGVydmFsKGludGVydmFsKSB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICBpbnRlcnZhbFxuICAgIH0pO1xuICB9XG5cbiAgc2V0U2luZ2xlQ2xpY2soc2luZ2xlQ2xpY2spIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHNpbmdsZUNsaWNrXG4gICAgfSk7XG4gIH1cblxuICBzZXRDbGlja2VkRHJhZ0VudHJ5SXRlbShjbGlja2VkRHJhZ0VudHJ5SXRlbSkge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgY2xpY2tlZERyYWdFbnRyeUl0ZW1cbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbEVkaXRhYmxlRHJhZ0VudHJ5SXRlbSgpIHtcbiAgICBjb25zdCBlZGl0YWJsZURyYWdFbnRyeUl0ZW0gPSB0aGlzLnJldHJpZXZlRWRpdGFibGVEcmFnRW50cnlJdGVtKCksXG4gICAgICAgICAgY3JlYXRlZCA9IGVkaXRhYmxlRHJhZ0VudHJ5SXRlbS5pc0NyZWF0ZWQoKTtcblxuICAgIGVkaXRhYmxlRHJhZ0VudHJ5SXRlbS5jYW5jZWwoY3JlYXRlZCk7XG4gIH1cblxuICBzZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgICAgICBpbnRlcnZhbCA9IG51bGwsXG4gICAgICAgICAgc2luZ2xlQ2xpY2sgPSBmYWxzZSxcbiAgICAgICAgICBjbGlja2VkRHJhZ0VudHJ5SXRlbSA9IG51bGw7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRpc2FibGVkLFxuICAgICAgaW50ZXJ2YWwsXG4gICAgICBzaW5nbGVDbGljayxcbiAgICAgIGNsaWNrZWREcmFnRW50cnlJdGVtXG4gICAgfSk7XG4gIH1cblxuICBkaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IHNpbmdsZUNsaWNrID0gZmFsc2UgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgIHRoaXMuc2V0U2luZ2xlQ2xpY2soc2luZ2xlQ2xpY2spO1xuXG4gICAgdGhpcy5lbmFibGVEcm9wKCk7XG5cbiAgICB0aGlzLm9uQ3VzdG9tRHJhZ092ZXIodGhpcy5kcmFnT3ZlckN1c3RvbUhhbmRsZXIpO1xuXG4gICAgdGhpcy5vbkN1c3RvbURyb3AodGhpcy5kcm9wQ3VzdG9tSGFuZGxlcik7XG4gIH1cblxuICB3aWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmRpc2FibGVEcm9wKCk7XG5cbiAgICB0aGlzLm9mZkN1c3RvbURyYWdPdmVyKHRoaXMuZHJhZ092ZXJDdXN0b21IYW5kbGVyKTtcblxuICAgIHRoaXMub2ZmQ3VzdG9tRHJvcCh0aGlzLmRyb3BDdXN0b21IYW5kbGVyKTtcbiAgfVxuXG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gIFx0Y29uc3QgZXhwbG9yZXIgPSB0aGlzOyAgLy8vXG5cbiAgXHRyZXR1cm4gKFxuXG4gIFx0XHQ8RW50cmllc0xpc3QgZXhwbG9yZXI9e2V4cGxvcmVyfSB0b3Btb3N0IC8+XG5cblx0XHQpO1xuXHR9XG5cbiAgcGFyZW50Q29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgY29sbGFwc2UgPSB0aGlzLmNvbGxhcHNlLmJpbmQodGhpcyksXG4gICAgICAgICAgZ2V0U2VsZWN0ZWRQYXRoID0gdGhpcy5nZXRTZWxlY3RlZFBhdGguYmluZCh0aGlzKSxcbiAgICAgICAgICByZXRyaWV2ZUZpbGVQYXRocyA9IHRoaXMucmV0cmlldmVGaWxlUGF0aHMuYmluZCh0aGlzKSxcbiAgICAgICAgICByZXRyaWV2ZURpcmVjdG9yeVBhdGhzID0gdGhpcy5yZXRyaWV2ZURpcmVjdG9yeVBhdGhzLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gKHtcbiAgICAgIC4uLmNvbnRleHQsXG4gICAgICBjb2xsYXBzZSxcbiAgICAgIGdldFNlbGVjdGVkUGF0aCxcbiAgICAgIHJldHJpZXZlRmlsZVBhdGhzLFxuICAgICAgcmV0cmlldmVEaXJlY3RvcnlQYXRoc1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGlzZSgpIHtcbiAgXHR0aGlzLmFzc2lnbkNvbnRleHQoKTtcblxuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG5cdH1cblxuXHRzdGF0aWMgRW50cmllc0xpc3QgPSBFbnRyaWVzTGlzdDtcblxuICBzdGF0aWMgRmlsZU5hbWVEcmFnRW50cnlJdGVtID0gRmlsZU5hbWVEcmFnRW50cnlJdGVtO1xuXG4gIHN0YXRpYyBGaWxlTmFtZU1hcmtlckVudHJ5SXRlbSA9IEZpbGVOYW1lTWFya2VyRW50cnlJdGVtO1xuXG4gIHN0YXRpYyBEaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSA9IERpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtO1xuXG4gIHN0YXRpYyBEaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtID0gRGlyZWN0b3J5TmFtZU1hcmtlckVudHJ5SXRlbTtcblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xuICAgIFwicmVmZXJlbmNlXCIsXG4gICAgXCJyZWZlcmVuY2VzXCIsXG4gICAgXCJzaW5nbGVDbGlja1wiXG4gIF07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJleHBsb3JlclwiXG4gIH07XG59XG5cbk9iamVjdC5hc3NpZ24oRXhwbG9yZXIucHJvdG90eXBlLCBkcm9wTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRXhwbG9yZXIucHJvdG90eXBlLCBleHBsb3Jlck1peGlucyk7XG5PYmplY3QuYXNzaWduKEV4cGxvcmVyLnByb3RvdHlwZSwgZHJhZ0VudHJ5SXRlbU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShFeHBsb3JlcilgXG4gIFxuICBwYWRkaW5nOiAke2V4cGxvcmVyUGFkZGluZ307IFxuICBcbmA7XG4iXSwibmFtZXMiOlsiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsImNvbmNhdGVuYXRlUGF0aHMiLCJwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgiLCJwYXRoVXRpbGl0aWVzIiwiRXhwbG9yZXIiLCJFbGVtZW50IiwiZHJhZ092ZXJDdXN0b21IYW5kbGVyIiwiZXZlbnQiLCJlbGVtZW50IiwiZHJhZ0VsZW1lbnQiLCJkcmFnRW50cnlJdGVtIiwibWFya2VyRW50cnlJdGVtIiwicmV0cmlldmVNYXJrZXJFbnRyeUl0ZW0iLCJkcmFnRW50cnlJdGVtTmFtZSIsImdldE5hbWUiLCJtYXJrZXJFbnRyeUl0ZW1QYXRoIiwiZ2V0UGF0aCIsIm1hcmtlckVudHJ5SXRlbUV4cGxvcmVyIiwiZ2V0RXhwbG9yZXIiLCJwcmV2aW91c01hcmtlckVudHJ5SXRlbVBhdGgiLCJwcmV2aW91c01hcmtlckVudHJ5SXRlbUV4cGxvcmVyIiwiZHJhZ0VudHJ5SXRlbVR5cGUiLCJnZXRUeXBlIiwicmVtb3ZlTWFya2VyIiwiYWRkTWFya2VyIiwiZHJvcEN1c3RvbUhhbmRsZXIiLCJhYm9ydGVkIiwiZG9uZSIsImRyb3BEcmFnRW50cnlJdGVtIiwiZXhwbG9yZXIiLCJnZXRSZWZlcmVuY2UiLCJyZWZlcmVuY2UiLCJwcm9wZXJ0aWVzIiwiZ2V0UmVmZXJlbmNlcyIsInJlZmVyZW5jZXMiLCJnZXRFbnRyaWVzTGlzdCIsIkVudHJpZXNMaXN0IiwiZ2V0RmlsZU5hbWVEcmFnRW50cnlJdGVtIiwicmVhZE9ubHkiLCJGaWxlTmFtZURyYWdFbnRyeUl0ZW0iLCJnZXRGaWxlTmFtZU1hcmtlckVudHJ5SXRlbSIsIkZpbGVOYW1lTWFya2VyRW50cnlJdGVtIiwiZ2V0RGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0iLCJ0b3Btb3N0IiwiRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0iLCJnZXREaXJlY3RvcnlOYW1lTWFya2VyRW50cnlJdGVtIiwiRGlyZWN0b3J5TmFtZU1hcmtlckVudHJ5SXRlbSIsInJldHJpZXZlUGF0aHMiLCJ0eXBlIiwiZHJhZ0VudHJ5SXRlbXMiLCJyZXRyaWV2ZURyYWdFbnRyeUl0ZW1zIiwicGF0aHMiLCJyZWR1Y2UiLCJkcmFnRW50cnlJdGVtUGF0aCIsInBhdGgiLCJwdXNoIiwicmV0cmlldmVGaWxlUGF0aHMiLCJGSUxFX05BTUVfRFJBR19FTlRSWV9UWVBFIiwiZmlsZVBhdGhzIiwicmV0cmlldmVEaXJlY3RvcnlQYXRocyIsIkRJUkVDVE9SWV9OQU1FX0RSQUdfRU5UUllfVFlQRSIsImRpcmVjdG9yeVBhdGhzIiwiY29sbGFwc2UiLCJkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbXMiLCJyZXRyaWV2ZURpcmVjdG9yeU5hbWVEcmFnRW50cnlJdGVtcyIsImZvckVhY2giLCJkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSIsImNyZWF0ZVBhdGgiLCJuYW1lIiwiUEVSSU9EIiwic2VsZWN0ZWREcmFnRW50cnlJdGVtIiwicmV0cmlldmVTZWxlY3RlZERyYWdFbnRyeUl0ZW0iLCJzZWxlY3RlZERyYWdFbnRyeUl0ZW1EaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbSIsImlzRGlyZWN0b3J5TmFtZURyYWdFbnRyeUl0ZW0iLCJkaXJlY3RvcnlOYW1lRHJhZ0VudHJ5SXRlbVBhdGgiLCJleHBhbmQiLCJmaWxlTmFtZURyYWdFbnRyeUl0ZW0iLCJmaWxlTmFtZURyYWdFbnRyeUl0ZW1QYXRoIiwiZmlsZU5hbWVEcmFnRW50cnlJdGVtUGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSIsImNyZWF0ZUZpbGVQYXRoIiwiZmlsZVBhdGgiLCJhZGRGaWxlUGF0aCIsImNyZWF0ZSIsImNyZWF0ZURpcmVjdG9yeVBhdGgiLCJjb2xsYXBzZWQiLCJkaXJlY3RvcnlQYXRoIiwiYWRkRGlyZWN0b3J5UGF0aCIsInJlbmFtZVNlbGVjdGVkUGF0aCIsInJlbmFtZSIsImdldFNlbGVjdGVkUGF0aCIsInNlbGVjdGVkUGF0aCIsInNlbGVjdGVkRHJhZ0VudHJ5SXRlbVBhdGgiLCJjbGlja0RyYWdFbnRyeUl0ZW0iLCJzaW5nbGVDbGljayIsImlzU2luZ2xlQ2xpY2siLCJzZWxlY3RlZCIsImNsaWNrIiwiY2xpY2tlZERyYWdFbnRyeUl0ZW0iLCJnZXRDbGlja2VkRHJhZ0VudHJ5SXRlbSIsImludGVydmFsIiwiZ2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiY2xlYXJDbGlja2VkRHJhZ0VudHJ5SXRlbSIsImRlbGF5IiwiRE9VQkxFX0NMSUNLX0RFTEFZIiwic2V0VGltZW91dCIsInNldEludGVydmFsIiwic2V0Q2xpY2tlZERyYWdFbnRyeUl0ZW0iLCJkb3VibGVDbGljayIsIm9wZW5GaWxlTmFtZURyYWdFbnRyeUl0ZW0iLCJkaXNhYmxlZCIsImlzRGlzYWJsZWQiLCJjdXN0b21FdmVudFR5cGUiLCJPUEVOX0NVU1RPTV9FVkVOVF9UWVBFIiwiY2FsbEN1c3RvbUhhbmRsZXJzIiwic2VsZWN0T3JEZXNlbGVjdERyYWdFbnRyeUl0ZW0iLCJpc1NlbGVjdGVkIiwiZGVzZWxlY3QiLCJkZXNlbGVjdEFsbFBhdGhzIiwic2VsZWN0UGF0aCIsImlzUmVhZE9ubHkiLCJTRUxFQ1RfQ1VTVE9NX0VWRU5UX1RZUEUiLCJjcmVhdGVEcmFnRW50cnlJdGVtIiwic291cmNlRW50cnlQYXRoIiwic291cmNlRW50cnlQYXRoRnJvbUVudHJ5SXRlbSIsInRhcmdldEVudHJ5UGF0aCIsInRhcmdldEVudHJ5UGF0aEZyb21FbnRyeUl0ZW0iLCJwYXRoTWFwcyIsImdldFBhdGhNYXBzIiwiY3JlYXRlRHJhZ0VudHJ5SXRlbXMiLCJyZW5hbWVEcmFnRW50cnlJdGVtIiwiZmlyc3RQYXRoTWFwIiwicGF0aE1hcCIsInJlbmFtZURyYWdFbnRyeUl0ZW1zIiwiZHJhZ0VudHJ5SXRlbUV4cGxvcmVyIiwibW92ZURyYWdFbnRyeUl0ZW1zIiwiUkVOQU1FX0NVU1RPTV9FVkVOVF9UWVBFIiwiY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMiLCJyZW1vdmVEcmFnRW50cnlJdGVtIiwiYWRkRHJhZ0VudHJ5SXRlbSIsIk1PVkVfQ1VTVE9NX0VWRU5UX1RZUEUiLCJyZW1vdmVEcmFnRW50cnlJdGVtcyIsIlJFTU9WRV9DVVNUT01fRVZFTlRfVFlQRSIsIkNSRUFURV9DVVNUT01fRVZFTlRfVFlQRSIsImVuYWJsZSIsInNldERpc2FibGVkIiwiZW5hYmxlRHJhZyIsImRpc2FibGUiLCJkaXNhYmxlRHJhZyIsImdldFN0YXRlIiwiaXNFZGl0YWJsZSIsImVkaXRhYmxlRHJhZ0VudHJ5SXRlbSIsInJldHJpZXZlRWRpdGFibGVEcmFnRW50cnlJdGVtIiwiZWRpdGFibGUiLCJ1cGRhdGVTdGF0ZSIsInNldFNpbmdsZUNsaWNrIiwiY2FuY2VsRWRpdGFibGVEcmFnRW50cnlJdGVtIiwiY3JlYXRlZCIsImlzQ3JlYXRlZCIsImNhbmNlbCIsInNldEluaXRpYWxTdGF0ZSIsInNldFN0YXRlIiwiZGlkTW91bnQiLCJlbmFibGVEcm9wIiwib25DdXN0b21EcmFnT3ZlciIsIm9uQ3VzdG9tRHJvcCIsIndpbGxVbm1vdW50IiwiZGlzYWJsZURyb3AiLCJvZmZDdXN0b21EcmFnT3ZlciIsIm9mZkN1c3RvbURyb3AiLCJjaGlsZEVsZW1lbnRzIiwicGFyZW50Q29udGV4dCIsImNvbnRleHQiLCJnZXRDb250ZXh0IiwiYmluZCIsImluaXRpYWxpc2UiLCJhc3NpZ25Db250ZXh0IiwidGFnTmFtZSIsImlnbm9yZWRQcm9wZXJ0aWVzIiwiZGVmYXVsdFByb3BlcnRpZXMiLCJjbGFzc05hbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJwcm90b3R5cGUiLCJkcm9wTWl4aW5zIiwiZXhwbG9yZXJNaXhpbnMiLCJkcmFnRW50cnlJdGVtTWl4aW5zIiwid2l0aFN0eWxlIiwiZXhwbG9yZXJQYWRkaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFzb0JBOzs7ZUFBQTs7O3NFQXBvQnNCO3NCQUVFO2lDQUNHOzJCQUNtQjtnRUFFdEI7aUVBQ0c7c0VBQ0s7aUVBQ0U7a0VBQ0U7c0VBQ0c7dUVBQ0U7d0JB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