occam-directed-graphs 3.0.33 → 3.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/vertex.js ADDED
@@ -0,0 +1,405 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return Vertex;
9
+ }
10
+ });
11
+ var _vertex = require("./utilities/vertex");
12
+ function _class_call_check(instance, Constructor) {
13
+ if (!(instance instanceof Constructor)) {
14
+ throw new TypeError("Cannot call a class as a function");
15
+ }
16
+ }
17
+ function _defineProperties(target, props) {
18
+ for(var i = 0; i < props.length; i++){
19
+ var descriptor = props[i];
20
+ descriptor.enumerable = descriptor.enumerable || false;
21
+ descriptor.configurable = true;
22
+ if ("value" in descriptor) descriptor.writable = true;
23
+ Object.defineProperty(target, descriptor.key, descriptor);
24
+ }
25
+ }
26
+ function _create_class(Constructor, protoProps, staticProps) {
27
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
28
+ if (staticProps) _defineProperties(Constructor, staticProps);
29
+ return Constructor;
30
+ }
31
+ var Vertex = /*#__PURE__*/ function() {
32
+ function Vertex(name, index, visited, immediatePredecessorVertices, immediateSuccessorVertices) {
33
+ _class_call_check(this, Vertex);
34
+ this.name = name;
35
+ this.index = index;
36
+ this.visited = visited;
37
+ this.immediatePredecessorVertices = immediatePredecessorVertices;
38
+ this.immediateSuccessorVertices = immediateSuccessorVertices;
39
+ }
40
+ _create_class(Vertex, [
41
+ {
42
+ key: "getName",
43
+ value: function getName() {
44
+ return this.name;
45
+ }
46
+ },
47
+ {
48
+ key: "getIndex",
49
+ value: function getIndex() {
50
+ return this.index;
51
+ }
52
+ },
53
+ {
54
+ key: "isVisited",
55
+ value: function isVisited() {
56
+ return this.visited;
57
+ }
58
+ },
59
+ {
60
+ key: "isStranded",
61
+ value: function isStranded() {
62
+ var immediatePredecessorVerticesLength = this.immediatePredecessorVertices.length, immediateSuccessorVerticesLength = this.immediateSuccessorVertices.length, stranded = immediatePredecessorVerticesLength === 0 && immediateSuccessorVerticesLength === 0;
63
+ return stranded;
64
+ }
65
+ },
66
+ {
67
+ key: "getImmediatePredecessorVertexNames",
68
+ value: function getImmediatePredecessorVertexNames() {
69
+ var immediatePredecessorVertexNames = this.immediatePredecessorVertices.map(function(immediatePredecessorVertex) {
70
+ var immediatePredecessorVertexName = immediatePredecessorVertex.getName();
71
+ return immediatePredecessorVertexName;
72
+ });
73
+ return immediatePredecessorVertexNames;
74
+ }
75
+ },
76
+ {
77
+ key: "getImmediateSuccessorVertexNames",
78
+ value: function getImmediateSuccessorVertexNames() {
79
+ var immediateSuccessorVertexNames = this.immediateSuccessorVertices.map(function(immediateSuccessorVertex) {
80
+ var immediateSuccessorVertexName = immediateSuccessorVertex.getName();
81
+ return immediateSuccessorVertexName;
82
+ });
83
+ return immediateSuccessorVertexNames;
84
+ }
85
+ },
86
+ {
87
+ key: "getImmediatePredecessorVertices",
88
+ value: function getImmediatePredecessorVertices() {
89
+ return this.immediatePredecessorVertices;
90
+ }
91
+ },
92
+ {
93
+ key: "getImmediateSuccessorVertices",
94
+ value: function getImmediateSuccessorVertices() {
95
+ return this.immediateSuccessorVertices;
96
+ }
97
+ },
98
+ {
99
+ key: "getPredecessorVertexMap",
100
+ value: function getPredecessorVertexMap() {
101
+ var predecessorVertexMap = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
102
+ this.forEachImmediatePredecessorVertex(function(immediatePredecessorVertex) {
103
+ var predecessorVertex = immediatePredecessorVertex, predecessorVertexName = predecessorVertex.getName();
104
+ predecessorVertexMap[predecessorVertexName] = predecessorVertex;
105
+ predecessorVertex.getPredecessorVertexMap(predecessorVertexMap);
106
+ });
107
+ return predecessorVertexMap;
108
+ }
109
+ },
110
+ {
111
+ key: "getSuccessorVertexMap",
112
+ value: function getSuccessorVertexMap() {
113
+ var successorVertexMap = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
114
+ this.forEachImmediateSuccessorVertex(function(immediateSuccessorVertex) {
115
+ var successorVertex = immediateSuccessorVertex, successorVertexName = successorVertex.getName();
116
+ successorVertexMap[successorVertexName] = successorVertex;
117
+ successorVertex.getSuccessorVertexMap(successorVertexMap);
118
+ });
119
+ return successorVertexMap;
120
+ }
121
+ },
122
+ {
123
+ key: "getPredecessorVertexNames",
124
+ value: function getPredecessorVertexNames() {
125
+ var predecessorVertices = this.getPredecessorVertices(), predecessorVertexNames = predecessorVertices.map(function(predecessorVertex) {
126
+ var predecessorVertexName = predecessorVertex.getName();
127
+ return predecessorVertexName;
128
+ });
129
+ return predecessorVertexNames;
130
+ }
131
+ },
132
+ {
133
+ key: "getSuccessorVertexNames",
134
+ value: function getSuccessorVertexNames() {
135
+ var successorVertices = this.getSuccessorVertices(), successorVertexNames = successorVertices.map(function(successorVertex) {
136
+ var successorVertexName = successorVertex.getName();
137
+ return successorVertexName;
138
+ });
139
+ return successorVertexNames;
140
+ }
141
+ },
142
+ {
143
+ key: "getPredecessorVertices",
144
+ value: function getPredecessorVertices() {
145
+ var predecessorVertexMap = this.getPredecessorVertexMap(), predecessorVertexNames = Object.keys(predecessorVertexMap), predecessorVertices = predecessorVertexNames.map(function(predecessorVertexName) {
146
+ var predecessorVertex = predecessorVertexMap[predecessorVertexName];
147
+ return predecessorVertex;
148
+ });
149
+ return predecessorVertices;
150
+ }
151
+ },
152
+ {
153
+ key: "getSuccessorVertices",
154
+ value: function getSuccessorVertices() {
155
+ var successorVertexMap = this.getSuccessorVertexMap(), successorVertexNames = Object.keys(successorVertexMap), successorVertices = successorVertexNames.map(function(successorVertexName) {
156
+ var successorVertex = successorVertexMap[successorVertexName];
157
+ return successorVertex;
158
+ });
159
+ return successorVertices;
160
+ }
161
+ },
162
+ {
163
+ key: "getOrderedPredecessorVertexNames",
164
+ value: function getOrderedPredecessorVertexNames() {
165
+ var predecessorVertices = this.getPredecessorVertices();
166
+ (0, _vertex.orderVertices)(predecessorVertices);
167
+ var orderedPredecessorVertices = predecessorVertices, orderedPredecessorVertexNames = (0, _vertex.vertexNamesFromVertices)(orderedPredecessorVertices);
168
+ return orderedPredecessorVertexNames;
169
+ }
170
+ },
171
+ {
172
+ key: "retrieveForwardsAffectedVertices",
173
+ value: function retrieveForwardsAffectedVertices(sourceVertex) {
174
+ var forwardsAffectedVertices = this.forwardsDepthFirstSearch(function(visitedVertex) {
175
+ var terminate = visitedVertex === sourceVertex;
176
+ if (terminate) {
177
+ return true;
178
+ }
179
+ });
180
+ return forwardsAffectedVertices;
181
+ }
182
+ },
183
+ {
184
+ key: "retrieveBackwardsAffectedVertices",
185
+ value: function retrieveBackwardsAffectedVertices() {
186
+ var backwardsAffectedVertices = this.backwardsDepthFirstSearch(function(visitedVertex) {
187
+ var terminate = false;
188
+ if (terminate) {
189
+ return true;
190
+ }
191
+ });
192
+ return backwardsAffectedVertices;
193
+ }
194
+ },
195
+ {
196
+ key: "isVertexImmediatePredecessorVertex",
197
+ value: function isVertexImmediatePredecessorVertex(vertex) {
198
+ var vertexImmediatePredecessorVertex = this.immediatePredecessorVertices.includes(vertex);
199
+ return vertexImmediatePredecessorVertex;
200
+ }
201
+ },
202
+ {
203
+ key: "isVertexImmediateSuccessorVertex",
204
+ value: function isVertexImmediateSuccessorVertex(vertex) {
205
+ var vertexImmediateSuccessorVertex = this.immediateSuccessorVertices.includes(vertex);
206
+ return vertexImmediateSuccessorVertex;
207
+ }
208
+ },
209
+ {
210
+ key: "isEdgePresentBySourceVertex",
211
+ value: function isEdgePresentBySourceVertex(sourceVertex) {
212
+ var sourceVertexImmediatePredecessorVertex = this.isVertexImmediatePredecessorVertex(sourceVertex), edgePresent = sourceVertexImmediatePredecessorVertex; ///
213
+ return edgePresent;
214
+ }
215
+ },
216
+ {
217
+ key: "isEdgePresentByTargetVertex",
218
+ value: function isEdgePresentByTargetVertex(targetVertex) {
219
+ var targetVertexImmediateSuccessorVertex = this.isVertexImmediateSuccessorVertex(targetVertex), edgePresent = targetVertexImmediateSuccessorVertex; ///
220
+ return edgePresent;
221
+ }
222
+ },
223
+ {
224
+ key: "setName",
225
+ value: function setName(name) {
226
+ this.name = name;
227
+ }
228
+ },
229
+ {
230
+ key: "setIndex",
231
+ value: function setIndex(index) {
232
+ this.index = index;
233
+ }
234
+ },
235
+ {
236
+ key: "setVisited",
237
+ value: function setVisited(visited) {
238
+ this.visited = visited;
239
+ }
240
+ },
241
+ {
242
+ key: "decrementIndex",
243
+ value: function decrementIndex() {
244
+ this.index--;
245
+ }
246
+ },
247
+ {
248
+ key: "removeImmediatePredecessorVertex",
249
+ value: function removeImmediatePredecessorVertex(immediatePredecessorVertex) {
250
+ var index = this.immediatePredecessorVertices.indexOf(immediatePredecessorVertex), start = index, deleteCount = 1;
251
+ this.immediatePredecessorVertices.splice(start, deleteCount);
252
+ }
253
+ },
254
+ {
255
+ key: "removeImmediateSuccessorVertex",
256
+ value: function removeImmediateSuccessorVertex(immediateSuccessorVertex) {
257
+ var index = this.immediateSuccessorVertices.indexOf(immediateSuccessorVertex), start = index, deleteCount = 1;
258
+ this.immediateSuccessorVertices.splice(start, deleteCount);
259
+ }
260
+ },
261
+ {
262
+ key: "removeIncomingEdges",
263
+ value: function removeIncomingEdges() {
264
+ var immediateSuccessorVertex = this; ///
265
+ this.immediatePredecessorVertices.forEach(function(immediatePredecessorVertex) {
266
+ return immediatePredecessorVertex.removeImmediateSuccessorVertex(immediateSuccessorVertex);
267
+ });
268
+ this.immediatePredecessorVertices = [];
269
+ }
270
+ },
271
+ {
272
+ key: "removeOutgoingEdges",
273
+ value: function removeOutgoingEdges() {
274
+ var immediatePredecessorVertex = this; ///
275
+ this.immediateSuccessorVertices.forEach(function(immediateSuccessorVertex) {
276
+ return immediateSuccessorVertex.removeImmediateSuccessorVertex(immediatePredecessorVertex);
277
+ });
278
+ this.immediateSuccessorVertices = [];
279
+ }
280
+ },
281
+ {
282
+ key: "addImmediatePredecessorVertex",
283
+ value: function addImmediatePredecessorVertex(immediatePredecessorVertex) {
284
+ this.immediatePredecessorVertices.push(immediatePredecessorVertex);
285
+ }
286
+ },
287
+ {
288
+ key: "addImmediateSuccessorVertex",
289
+ value: function addImmediateSuccessorVertex(immediateSuccessorVertex) {
290
+ this.immediateSuccessorVertices.push(immediateSuccessorVertex);
291
+ }
292
+ },
293
+ {
294
+ key: "forwardsDepthFirstSearch",
295
+ value: function forwardsDepthFirstSearch(callback) {
296
+ var visitedVertices = [];
297
+ this.retrieveForwardsVisitedVertices(function(visitedVertex) {
298
+ var terminate = callback(visitedVertex); ///
299
+ visitedVertices.push(visitedVertex);
300
+ return terminate;
301
+ });
302
+ visitedVertices.forEach(function(visitedVertex) {
303
+ return visitedVertex.resetVisited();
304
+ });
305
+ return visitedVertices;
306
+ }
307
+ },
308
+ {
309
+ key: "backwardsDepthFirstSearch",
310
+ value: function backwardsDepthFirstSearch(callback) {
311
+ var visitedVertices = [];
312
+ this.retrieveBackwardsVisitedVertices(function(visitedVertex) {
313
+ var terminate = callback(visitedVertex); ///
314
+ visitedVertices.push(visitedVertex);
315
+ return terminate;
316
+ });
317
+ visitedVertices.forEach(function(visitedVertex) {
318
+ return visitedVertex.resetVisited();
319
+ });
320
+ return visitedVertices;
321
+ }
322
+ },
323
+ {
324
+ key: "retrieveForwardsVisitedVertices",
325
+ value: function retrieveForwardsVisitedVertices(callback) {
326
+ var terminate = false;
327
+ if (this.visited === false) {
328
+ this.visited = true;
329
+ var visitedVertex = this; ///
330
+ terminate = callback(visitedVertex);
331
+ if (terminate !== true) {
332
+ visitedVertex.someImmediateSuccessorVertex(function(immediateSuccessorVertex) {
333
+ terminate = immediateSuccessorVertex.retrieveForwardsVisitedVertices(callback);
334
+ if (terminate) {
335
+ return true;
336
+ }
337
+ });
338
+ }
339
+ }
340
+ return terminate;
341
+ }
342
+ },
343
+ {
344
+ key: "retrieveBackwardsVisitedVertices",
345
+ value: function retrieveBackwardsVisitedVertices(callback) {
346
+ var terminate = false;
347
+ if (this.visited === false) {
348
+ this.visited = true;
349
+ var visitedVertex = this; ///
350
+ terminate = callback(visitedVertex);
351
+ if (terminate !== true) {
352
+ visitedVertex.someImmediatePredecessorVertex(function(immediatePredecessorVertex) {
353
+ terminate = immediatePredecessorVertex.retrieveBackwardsVisitedVertices(callback);
354
+ if (terminate) {
355
+ return true;
356
+ }
357
+ });
358
+ }
359
+ }
360
+ return terminate;
361
+ }
362
+ },
363
+ {
364
+ key: "forEachImmediatePredecessorVertex",
365
+ value: function forEachImmediatePredecessorVertex(callback) {
366
+ this.immediatePredecessorVertices.forEach(callback);
367
+ }
368
+ },
369
+ {
370
+ key: "forEachImmediateSuccessorVertex",
371
+ value: function forEachImmediateSuccessorVertex(callback) {
372
+ this.immediateSuccessorVertices.forEach(callback);
373
+ }
374
+ },
375
+ {
376
+ key: "someImmediatePredecessorVertex",
377
+ value: function someImmediatePredecessorVertex(callback) {
378
+ this.immediatePredecessorVertices.some(callback);
379
+ }
380
+ },
381
+ {
382
+ key: "someImmediateSuccessorVertex",
383
+ value: function someImmediateSuccessorVertex(callback) {
384
+ this.immediateSuccessorVertices.some(callback);
385
+ }
386
+ },
387
+ {
388
+ key: "resetVisited",
389
+ value: function resetVisited() {
390
+ this.visited = false;
391
+ }
392
+ }
393
+ ], [
394
+ {
395
+ key: "fromNameAndIndex",
396
+ value: function fromNameAndIndex(name, index) {
397
+ var visited = false, immediatePredecessorVertices = [], immediateSuccessorVertices = [], dependencyVertex = new Vertex(name, index, visited, immediatePredecessorVertices, immediateSuccessorVertices);
398
+ return dependencyVertex;
399
+ }
400
+ }
401
+ ]);
402
+ return Vertex;
403
+ }();
404
+
405
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJ0ZXguanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHZlcnRleE5hbWVzRnJvbVZlcnRpY2VzLCBvcmRlclZlcnRpY2VzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3ZlcnRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJ0ZXgge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBpbmRleCwgdmlzaXRlZCwgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlcywgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXMpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnZpc2l0ZWQgPSB2aXNpdGVkO1xuICAgIHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlcyA9IGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXM7XG4gICAgdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0aWNlcyA9IGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0SW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gIH1cblxuICBpc1Zpc2l0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaXRlZDtcbiAgfVxuXG4gIGlzU3RyYW5kZWQoKSB7XG4gICAgY29uc3QgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlc0xlbmd0aCA9IHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlcy5sZW5ndGgsXG4gICAgICAgICAgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXNMZW5ndGggPSB0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzLmxlbmd0aCxcbiAgICAgICAgICBzdHJhbmRlZCA9ICgoaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlc0xlbmd0aCA9PT0gMCkgJiYgKGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzTGVuZ3RoID09PSAwKSk7XG5cbiAgICByZXR1cm4gc3RyYW5kZWQ7XG4gIH1cblxuICBnZXRJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWVzKCkge1xuICAgIGNvbnN0IGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXMgPSB0aGlzLmltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXMubWFwKChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCkgPT4ge1xuICAgICAgY29uc3QgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lID0gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXguZ2V0TmFtZSgpO1xuXG4gICAgICByZXR1cm4gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXM7XG4gIH1cblxuICBnZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcygpIHtcbiAgICBjb25zdCBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcyA9IHRoaXMuaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXMubWFwKChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpID0+IHtcbiAgICAgIGNvbnN0IGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWUgPSBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXguZ2V0TmFtZSgpO1xuXG4gICAgICByZXR1cm4gaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIGdldEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlcztcbiAgfVxuXG4gIGdldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzKCkge1xuICAgIHJldHVybiB0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzO1xuICB9XG5cbiAgZ2V0UHJlZGVjZXNzb3JWZXJ0ZXhNYXAocHJlZGVjZXNzb3JWZXJ0ZXhNYXAgPSB7fSkge1xuICAgIHRoaXMuZm9yRWFjaEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCkgPT4ge1xuICAgICAgY29uc3QgcHJlZGVjZXNzb3JWZXJ0ZXggPSBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCwgLy8vXG4gICAgICAgICAgICBwcmVkZWNlc3NvclZlcnRleE5hbWUgPSBwcmVkZWNlc3NvclZlcnRleC5nZXROYW1lKCk7XG5cbiAgICAgIHByZWRlY2Vzc29yVmVydGV4TWFwW3ByZWRlY2Vzc29yVmVydGV4TmFtZV0gPSBwcmVkZWNlc3NvclZlcnRleDtcblxuICAgICAgcHJlZGVjZXNzb3JWZXJ0ZXguZ2V0UHJlZGVjZXNzb3JWZXJ0ZXhNYXAocHJlZGVjZXNzb3JWZXJ0ZXhNYXApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHByZWRlY2Vzc29yVmVydGV4TWFwO1xuICB9XG5cbiAgZ2V0U3VjY2Vzc29yVmVydGV4TWFwKHN1Y2Nlc3NvclZlcnRleE1hcCA9IHt9KSB7XG4gICAgdGhpcy5mb3JFYWNoSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3NvclZlcnRleCA9IGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCwgLy8vXG4gICAgICAgICAgICBzdWNjZXNzb3JWZXJ0ZXhOYW1lID0gc3VjY2Vzc29yVmVydGV4LmdldE5hbWUoKTtcblxuICAgICAgc3VjY2Vzc29yVmVydGV4TWFwW3N1Y2Nlc3NvclZlcnRleE5hbWVdID0gc3VjY2Vzc29yVmVydGV4O1xuXG4gICAgICBzdWNjZXNzb3JWZXJ0ZXguZ2V0U3VjY2Vzc29yVmVydGV4TWFwKHN1Y2Nlc3NvclZlcnRleE1hcCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3VjY2Vzc29yVmVydGV4TWFwO1xuICB9XG5cbiAgZ2V0UHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcygpIHtcbiAgICBjb25zdCBwcmVkZWNlc3NvclZlcnRpY2VzID0gdGhpcy5nZXRQcmVkZWNlc3NvclZlcnRpY2VzKCksXG4gICAgICAgICAgcHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyA9IHByZWRlY2Vzc29yVmVydGljZXMubWFwKChwcmVkZWNlc3NvclZlcnRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJlZGVjZXNzb3JWZXJ0ZXhOYW1lID0gcHJlZGVjZXNzb3JWZXJ0ZXguZ2V0TmFtZSgpO1xuXG4gICAgICAgICAgICByZXR1cm4gcHJlZGVjZXNzb3JWZXJ0ZXhOYW1lO1xuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHByZWRlY2Vzc29yVmVydGV4TmFtZXM7XG4gIH1cblxuICBnZXRTdWNjZXNzb3JWZXJ0ZXhOYW1lcygpIHtcbiAgICBjb25zdCBzdWNjZXNzb3JWZXJ0aWNlcyA9IHRoaXMuZ2V0U3VjY2Vzc29yVmVydGljZXMoKSxcbiAgICAgICAgICBzdWNjZXNzb3JWZXJ0ZXhOYW1lcyA9IHN1Y2Nlc3NvclZlcnRpY2VzLm1hcCgoc3VjY2Vzc29yVmVydGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWNjZXNzb3JWZXJ0ZXhOYW1lID0gc3VjY2Vzc29yVmVydGV4LmdldE5hbWUoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3NvclZlcnRleE5hbWU7XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gc3VjY2Vzc29yVmVydGV4TmFtZXM7XG4gIH1cblxuICBnZXRQcmVkZWNlc3NvclZlcnRpY2VzKCkge1xuICAgIGNvbnN0IHByZWRlY2Vzc29yVmVydGV4TWFwID0gdGhpcy5nZXRQcmVkZWNlc3NvclZlcnRleE1hcCgpLFxuICAgICAgICAgIHByZWRlY2Vzc29yVmVydGV4TmFtZXMgPSBPYmplY3Qua2V5cyhwcmVkZWNlc3NvclZlcnRleE1hcCksXG4gICAgICAgICAgcHJlZGVjZXNzb3JWZXJ0aWNlcyA9IHByZWRlY2Vzc29yVmVydGV4TmFtZXMubWFwKChwcmVkZWNlc3NvclZlcnRleE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZWRlY2Vzc29yVmVydGV4ID0gcHJlZGVjZXNzb3JWZXJ0ZXhNYXBbcHJlZGVjZXNzb3JWZXJ0ZXhOYW1lXTtcblxuICAgICAgICAgICAgcmV0dXJuIHByZWRlY2Vzc29yVmVydGV4O1xuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHByZWRlY2Vzc29yVmVydGljZXM7XG4gIH1cblxuICBnZXRTdWNjZXNzb3JWZXJ0aWNlcygpIHtcbiAgICBjb25zdCBzdWNjZXNzb3JWZXJ0ZXhNYXAgPSB0aGlzLmdldFN1Y2Nlc3NvclZlcnRleE1hcCgpLFxuICAgICAgICAgIHN1Y2Nlc3NvclZlcnRleE5hbWVzID0gT2JqZWN0LmtleXMoc3VjY2Vzc29yVmVydGV4TWFwKSxcbiAgICAgICAgICBzdWNjZXNzb3JWZXJ0aWNlcyA9IHN1Y2Nlc3NvclZlcnRleE5hbWVzLm1hcCgoc3VjY2Vzc29yVmVydGV4TmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VjY2Vzc29yVmVydGV4ID0gc3VjY2Vzc29yVmVydGV4TWFwW3N1Y2Nlc3NvclZlcnRleE5hbWVdO1xuICBcbiAgICAgICAgICAgIHJldHVybiBzdWNjZXNzb3JWZXJ0ZXg7XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gc3VjY2Vzc29yVmVydGljZXM7XG4gIH1cblxuICBnZXRPcmRlcmVkUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcygpIHtcbiAgICBjb25zdCBwcmVkZWNlc3NvclZlcnRpY2VzID0gdGhpcy5nZXRQcmVkZWNlc3NvclZlcnRpY2VzKCk7XG5cbiAgICBvcmRlclZlcnRpY2VzKHByZWRlY2Vzc29yVmVydGljZXMpO1xuXG4gICAgY29uc3Qgb3JkZXJlZFByZWRlY2Vzc29yVmVydGljZXMgPSBwcmVkZWNlc3NvclZlcnRpY2VzLCAgLy8vXG4gICAgICAgICAgb3JkZXJlZFByZWRlY2Vzc29yVmVydGV4TmFtZXMgPSB2ZXJ0ZXhOYW1lc0Zyb21WZXJ0aWNlcyhvcmRlcmVkUHJlZGVjZXNzb3JWZXJ0aWNlcyk7XG5cbiAgICByZXR1cm4gb3JkZXJlZFByZWRlY2Vzc29yVmVydGV4TmFtZXM7XG4gIH1cbiAgXG4gIHJldHJpZXZlRm9yd2FyZHNBZmZlY3RlZFZlcnRpY2VzKHNvdXJjZVZlcnRleCkge1xuICAgIGNvbnN0IGZvcndhcmRzQWZmZWN0ZWRWZXJ0aWNlcyA9IHRoaXMuZm9yd2FyZHNEZXB0aEZpcnN0U2VhcmNoKCh2aXNpdGVkVmVydGV4KSA9PiB7XG4gICAgICBjb25zdCB0ZXJtaW5hdGUgPSAodmlzaXRlZFZlcnRleCA9PT0gc291cmNlVmVydGV4KTtcbiAgICAgIFxuICAgICAgaWYgKHRlcm1pbmF0ZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gZm9yd2FyZHNBZmZlY3RlZFZlcnRpY2VzO1xuICB9XG5cbiAgcmV0cmlldmVCYWNrd2FyZHNBZmZlY3RlZFZlcnRpY2VzKCkge1xuICAgIGNvbnN0IGJhY2t3YXJkc0FmZmVjdGVkVmVydGljZXMgPSB0aGlzLmJhY2t3YXJkc0RlcHRoRmlyc3RTZWFyY2goKHZpc2l0ZWRWZXJ0ZXgpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1pbmF0ZSA9IGZhbHNlO1xuXG4gICAgICBpZiAodGVybWluYXRlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBiYWNrd2FyZHNBZmZlY3RlZFZlcnRpY2VzO1xuICB9XG4gIFxuICBpc1ZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KHZlcnRleCkge1xuICAgIGNvbnN0IHZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ID0gdGhpcy5pbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRpY2VzLmluY2x1ZGVzKHZlcnRleCk7XG5cbiAgICByZXR1cm4gdmVydGV4SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXg7XG4gIH1cblxuICBpc1ZlcnRleEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCh2ZXJ0ZXgpIHtcbiAgICBjb25zdCB2ZXJ0ZXhJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXggPSB0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzLmluY2x1ZGVzKHZlcnRleCk7XG5cbiAgICByZXR1cm4gdmVydGV4SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4O1xuICB9XG5cbiAgaXNFZGdlUHJlc2VudEJ5U291cmNlVmVydGV4KHNvdXJjZVZlcnRleCkge1xuICAgIGNvbnN0IHNvdXJjZVZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ID0gdGhpcy5pc1ZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KHNvdXJjZVZlcnRleCksXG4gICAgICAgICAgZWRnZVByZXNlbnQgPSBzb3VyY2VWZXJ0ZXhJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleDsgLy8vXG5cbiAgICByZXR1cm4gZWRnZVByZXNlbnQ7XG4gIH1cblxuICBpc0VkZ2VQcmVzZW50QnlUYXJnZXRWZXJ0ZXgodGFyZ2V0VmVydGV4KSB7XG4gICAgY29uc3QgdGFyZ2V0VmVydGV4SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ID0gdGhpcy5pc1ZlcnRleEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCh0YXJnZXRWZXJ0ZXgpLFxuICAgICAgICAgIGVkZ2VQcmVzZW50ID0gdGFyZ2V0VmVydGV4SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4OyAvLy9cblxuICAgIHJldHVybiBlZGdlUHJlc2VudDtcbiAgfVxuXG4gIHNldE5hbWUobmFtZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBzZXRJbmRleChpbmRleCkge1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHNldFZpc2l0ZWQodmlzaXRlZCkge1xuICAgIHRoaXMudmlzaXRlZCA9IHZpc2l0ZWQ7XG4gIH1cblxuICBkZWNyZW1lbnRJbmRleCgpIHtcbiAgICB0aGlzLmluZGV4LS07XG4gIH1cblxuICByZW1vdmVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRpY2VzLmluZGV4T2YoaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpLFxuICAgICAgICAgIHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICB0aGlzLmltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gIH1cblxuICByZW1vdmVJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgoaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzLmluZGV4T2YoaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KSxcbiAgICAgICAgICBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0aWNlcy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcbiAgfVxuICBcbiAgcmVtb3ZlSW5jb21pbmdFZGdlcygpIHtcbiAgICBjb25zdCBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXggPSB0aGlzOyAvLy9cbiAgICBcbiAgICB0aGlzLmltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXMuZm9yRWFjaCgoaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpID0+IGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4LnJlbW92ZUltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpKTtcblxuICAgIHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlcyA9IFtdO1xuICB9XG5cbiAgcmVtb3ZlT3V0Z29pbmdFZGdlcygpIHtcbiAgICBjb25zdCBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0aWNlcy5mb3JFYWNoKChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpID0+IGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleC5yZW1vdmVJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgoaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpKTtcblxuICAgIHRoaXMuaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXMgPSBbXTtcbiAgfVxuXG4gIGFkZEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KSB7XG4gICAgdGhpcy5pbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRpY2VzLnB1c2goaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpO1xuICB9XG5cbiAgYWRkSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCkge1xuICAgIHRoaXMuaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXMucHVzaChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpO1xuICB9XG5cbiAgZm9yd2FyZHNEZXB0aEZpcnN0U2VhcmNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgdmlzaXRlZFZlcnRpY2VzID0gW107XG5cbiAgICB0aGlzLnJldHJpZXZlRm9yd2FyZHNWaXNpdGVkVmVydGljZXMoKHZpc2l0ZWRWZXJ0ZXgpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1pbmF0ZSA9IGNhbGxiYWNrKHZpc2l0ZWRWZXJ0ZXgpOyAgLy8vXG5cbiAgICAgIHZpc2l0ZWRWZXJ0aWNlcy5wdXNoKHZpc2l0ZWRWZXJ0ZXgpO1xuXG4gICAgICByZXR1cm4gdGVybWluYXRlO1xuICAgIH0pO1xuXG4gICAgdmlzaXRlZFZlcnRpY2VzLmZvckVhY2goKHZpc2l0ZWRWZXJ0ZXgpID0+IHZpc2l0ZWRWZXJ0ZXgucmVzZXRWaXNpdGVkKCkpO1xuXG4gICAgcmV0dXJuIHZpc2l0ZWRWZXJ0aWNlcztcbiAgfVxuXG4gIGJhY2t3YXJkc0RlcHRoRmlyc3RTZWFyY2goY2FsbGJhY2spIHtcbiAgICBjb25zdCB2aXNpdGVkVmVydGljZXMgPSBbXTtcblxuICAgIHRoaXMucmV0cmlldmVCYWNrd2FyZHNWaXNpdGVkVmVydGljZXMoKHZpc2l0ZWRWZXJ0ZXgpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1pbmF0ZSA9IGNhbGxiYWNrKHZpc2l0ZWRWZXJ0ZXgpOyAgLy8vXG5cbiAgICAgIHZpc2l0ZWRWZXJ0aWNlcy5wdXNoKHZpc2l0ZWRWZXJ0ZXgpO1xuXG4gICAgICByZXR1cm4gdGVybWluYXRlO1xuICAgIH0pO1xuXG4gICAgdmlzaXRlZFZlcnRpY2VzLmZvckVhY2goKHZpc2l0ZWRWZXJ0ZXgpID0+IHZpc2l0ZWRWZXJ0ZXgucmVzZXRWaXNpdGVkKCkpO1xuXG4gICAgcmV0dXJuIHZpc2l0ZWRWZXJ0aWNlcztcbiAgfVxuXG4gIHJldHJpZXZlRm9yd2FyZHNWaXNpdGVkVmVydGljZXMoY2FsbGJhY2spIHtcbiAgICBsZXQgdGVybWluYXRlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy52aXNpdGVkID09PSBmYWxzZSkge1xuICAgICAgdGhpcy52aXNpdGVkID0gdHJ1ZTtcblxuICAgICAgY29uc3QgdmlzaXRlZFZlcnRleCA9IHRoaXM7ICAvLy9cblxuICAgICAgdGVybWluYXRlID0gY2FsbGJhY2sodmlzaXRlZFZlcnRleCk7XG5cbiAgICAgIGlmICh0ZXJtaW5hdGUgIT09IHRydWUpIHtcbiAgICAgICAgdmlzaXRlZFZlcnRleC5zb21lSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpID0+IHtcbiAgICAgICAgICB0ZXJtaW5hdGUgPSBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgucmV0cmlldmVGb3J3YXJkc1Zpc2l0ZWRWZXJ0aWNlcyhjYWxsYmFjayk7XG5cbiAgICAgICAgICBpZiAodGVybWluYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0ZXJtaW5hdGU7XG4gIH1cblxuICByZXRyaWV2ZUJhY2t3YXJkc1Zpc2l0ZWRWZXJ0aWNlcyhjYWxsYmFjaykge1xuICAgIGxldCB0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnZpc2l0ZWQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnZpc2l0ZWQgPSB0cnVlO1xuXG4gICAgICBjb25zdCB2aXNpdGVkVmVydGV4ID0gdGhpczsgIC8vL1xuXG4gICAgICB0ZXJtaW5hdGUgPSBjYWxsYmFjayh2aXNpdGVkVmVydGV4KTtcblxuICAgICAgaWYgKHRlcm1pbmF0ZSAhPT0gdHJ1ZSkge1xuICAgICAgICB2aXNpdGVkVmVydGV4LnNvbWVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCgoaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpID0+IHtcbiAgICAgICAgICB0ZXJtaW5hdGUgPSBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleC5yZXRyaWV2ZUJhY2t3YXJkc1Zpc2l0ZWRWZXJ0aWNlcyhjYWxsYmFjayk7XG5cbiAgICAgICAgICBpZiAodGVybWluYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0ZXJtaW5hdGU7XG4gIH1cblxuICBmb3JFYWNoSW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgoY2FsbGJhY2spIHtcbiAgICB0aGlzLmltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXMuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBmb3JFYWNoSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KGNhbGxiYWNrKSB7XG4gICAgdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0aWNlcy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHNvbWVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChjYWxsYmFjaykge1xuICAgIHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlcy5zb21lKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHNvbWVJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgoY2FsbGJhY2spIHtcbiAgICB0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzLnNvbWUoY2FsbGJhY2spO1xuICB9XG5cbiAgcmVzZXRWaXNpdGVkKCkge1xuICAgIHRoaXMudmlzaXRlZCA9IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGZyb21OYW1lQW5kSW5kZXgobmFtZSwgaW5kZXgpIHtcbiAgICBjb25zdCB2aXNpdGVkID0gZmFsc2UsICAvLy9cbiAgICAgICAgICBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRpY2VzID0gW10sXG4gICAgICAgICAgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXMgPSBbXSxcbiAgICAgICAgICBkZXBlbmRlbmN5VmVydGV4ID0gbmV3IFZlcnRleChuYW1lLCBpbmRleCwgdmlzaXRlZCwgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlcywgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXMpO1xuXG4gICAgcmV0dXJuIGRlcGVuZGVuY3lWZXJ0ZXg7XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiVmVydGV4IiwibmFtZSIsImluZGV4IiwidmlzaXRlZCIsImltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXMiLCJpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0aWNlcyIsImdldE5hbWUiLCJnZXRJbmRleCIsImlzVmlzaXRlZCIsImlzU3RyYW5kZWQiLCJpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRpY2VzTGVuZ3RoIiwibGVuZ3RoIiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXNMZW5ndGgiLCJzdHJhbmRlZCIsImdldEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXMiLCJpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWVzIiwibWFwIiwiaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgiLCJpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWUiLCJnZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcyIsImltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzIiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4IiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZSIsImdldEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXMiLCJnZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0aWNlcyIsImdldFByZWRlY2Vzc29yVmVydGV4TWFwIiwicHJlZGVjZXNzb3JWZXJ0ZXhNYXAiLCJmb3JFYWNoSW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgiLCJwcmVkZWNlc3NvclZlcnRleCIsInByZWRlY2Vzc29yVmVydGV4TmFtZSIsImdldFN1Y2Nlc3NvclZlcnRleE1hcCIsInN1Y2Nlc3NvclZlcnRleE1hcCIsImZvckVhY2hJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgiLCJzdWNjZXNzb3JWZXJ0ZXgiLCJzdWNjZXNzb3JWZXJ0ZXhOYW1lIiwiZ2V0UHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyIsInByZWRlY2Vzc29yVmVydGljZXMiLCJnZXRQcmVkZWNlc3NvclZlcnRpY2VzIiwicHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyIsImdldFN1Y2Nlc3NvclZlcnRleE5hbWVzIiwic3VjY2Vzc29yVmVydGljZXMiLCJnZXRTdWNjZXNzb3JWZXJ0aWNlcyIsInN1Y2Nlc3NvclZlcnRleE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImdldE9yZGVyZWRQcmVkZWNlc3NvclZlcnRleE5hbWVzIiwib3JkZXJWZXJ0aWNlcyIsIm9yZGVyZWRQcmVkZWNlc3NvclZlcnRpY2VzIiwib3JkZXJlZFByZWRlY2Vzc29yVmVydGV4TmFtZXMiLCJ2ZXJ0ZXhOYW1lc0Zyb21WZXJ0aWNlcyIsInJldHJpZXZlRm9yd2FyZHNBZmZlY3RlZFZlcnRpY2VzIiwic291cmNlVmVydGV4IiwiZm9yd2FyZHNBZmZlY3RlZFZlcnRpY2VzIiwiZm9yd2FyZHNEZXB0aEZpcnN0U2VhcmNoIiwidmlzaXRlZFZlcnRleCIsInRlcm1pbmF0ZSIsInJldHJpZXZlQmFja3dhcmRzQWZmZWN0ZWRWZXJ0aWNlcyIsImJhY2t3YXJkc0FmZmVjdGVkVmVydGljZXMiLCJiYWNrd2FyZHNEZXB0aEZpcnN0U2VhcmNoIiwiaXNWZXJ0ZXhJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCIsInZlcnRleCIsInZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4IiwiaW5jbHVkZXMiLCJpc1ZlcnRleEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCIsInZlcnRleEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCIsImlzRWRnZVByZXNlbnRCeVNvdXJjZVZlcnRleCIsInNvdXJjZVZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4IiwiZWRnZVByZXNlbnQiLCJpc0VkZ2VQcmVzZW50QnlUYXJnZXRWZXJ0ZXgiLCJ0YXJnZXRWZXJ0ZXgiLCJ0YXJnZXRWZXJ0ZXhJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgiLCJzZXROYW1lIiwic2V0SW5kZXgiLCJzZXRWaXNpdGVkIiwiZGVjcmVtZW50SW5kZXgiLCJyZW1vdmVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCIsImluZGV4T2YiLCJzdGFydCIsImRlbGV0ZUNvdW50Iiwic3BsaWNlIiwicmVtb3ZlSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4IiwicmVtb3ZlSW5jb21pbmdFZGdlcyIsImZvckVhY2giLCJyZW1vdmVPdXRnb2luZ0VkZ2VzIiwiYWRkSW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgiLCJwdXNoIiwiYWRkSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4IiwiY2FsbGJhY2siLCJ2aXNpdGVkVmVydGljZXMiLCJyZXRyaWV2ZUZvcndhcmRzVmlzaXRlZFZlcnRpY2VzIiwicmVzZXRWaXNpdGVkIiwicmV0cmlldmVCYWNrd2FyZHNWaXNpdGVkVmVydGljZXMiLCJzb21lSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4Iiwic29tZUltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4Iiwic29tZSIsImZyb21OYW1lQW5kSW5kZXgiLCJkZXBlbmRlbmN5VmVydGV4Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQUlxQkE7OztzQkFGa0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXhDLElBQUEsQUFBTUEsdUJBQU47YUFBTUEsT0FDUEMsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsNEJBQTRCLEVBQUVDLDBCQUEwQjtnQ0FEdkVMO1FBRWpCLElBQUksQ0FBQ0MsT0FBT0E7UUFDWixJQUFJLENBQUNDLFFBQVFBO1FBQ2IsSUFBSSxDQUFDQyxVQUFVQTtRQUNmLElBQUksQ0FBQ0MsK0JBQStCQTtRQUNwQyxJQUFJLENBQUNDLDZCQUE2QkE7O2tCQU5qQkw7O1lBU25CTSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNMO1lBQ2Q7OztZQUVBTSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNMO1lBQ2Q7OztZQUVBTSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNMO1lBQ2Q7OztZQUVBTSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUMscUNBQXFDLElBQUksQ0FBQ04sNkJBQTZCTyxRQUN2RUMsbUNBQW1DLElBQUksQ0FBQ1AsMkJBQTJCTSxRQUNuRUUsV0FBWSxBQUFDSCx1Q0FBdUMsS0FBT0UscUNBQXFDO2dCQUV0RyxPQUFPQztZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNF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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-directed-graphs",
3
3
  "author": "James Smith",
4
- "version": "3.0.33",
4
+ "version": "3.0.36",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-directed-graphs",
7
7
  "description": "Directed graphs comprised of directed acyclic graphs together with cycles.",
@@ -10,9 +10,7 @@
10
10
  "url": "https://github.com/djalbat/occam-directed-graphs"
11
11
  },
12
12
  "dependencies": {
13
- "necessary": "^11.0.40",
14
- "occam-kahn": "^4.0.28",
15
- "occam-pearce-kelly": "^4.0.26"
13
+ "necessary": "^11.0.40"
16
14
  },
17
15
  "devDependencies": {
18
16
  "@swc/core": "^1.2.50",