occam-languages 3.0.128 → 3.0.130

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.
@@ -8,19 +8,19 @@ Object.defineProperty(exports, "default", {
8
8
  return _default;
9
9
  }
10
10
  });
11
- const _occamgrammarutilities = require("occam-grammar-utilities");
11
+ const _occamparsers = require("occam-parsers");
12
12
  const _node = /*#__PURE__*/ _interop_require_default(require("../../mixins/node"));
13
13
  function _interop_require_default(obj) {
14
14
  return obj && obj.__esModule ? obj : {
15
15
  default: obj
16
16
  };
17
17
  }
18
- class STatementNode extends _occamgrammarutilities.NonTerminalNode {
18
+ class STatementNode extends _occamparsers.NonTerminalNode {
19
19
  static fromRuleNameChildNodesPrecedenceAndOpacity(ruleName, childNodes, precedence, opacity) {
20
- return _occamgrammarutilities.NonTerminalNode.fromRuleNameChildNodesPrecedenceAndOpacity(STatementNode, ruleName, childNodes, precedence, opacity);
20
+ return _occamparsers.NonTerminalNode.fromRuleNameChildNodesPrecedenceAndOpacity(STatementNode, ruleName, childNodes, precedence, opacity);
21
21
  }
22
22
  }
23
23
  Object.assign(STatementNode.prototype, _node.default);
24
24
  const _default = STatementNode;
25
25
 
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub21pbmFsL25vZGUvc3RhdGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBOb25UZXJtaW5hbE5vZGUgfSBmcm9tIFwib2NjYW0tZ3JhbW1hci11dGlsaXRpZXNcIjtcblxuaW1wb3J0IG5vZGVNaXhpbnMgZnJvbSBcIi4uLy4uL21peGlucy9ub2RlXCI7XG5cbmNsYXNzIFNUYXRlbWVudE5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc1ByZWNlZGVuY2VBbmRPcGFjaXR5KHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBwcmVjZWRlbmNlLCBvcGFjaXR5KSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc1ByZWNlZGVuY2VBbmRPcGFjaXR5KFNUYXRlbWVudE5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBwcmVjZWRlbmNlLCBvcGFjaXR5KTsgfVxufVxuXG5PYmplY3QuYXNzaWduKFNUYXRlbWVudE5vZGUucHJvdG90eXBlLCBub2RlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgU1RhdGVtZW50Tm9kZTtcbiJdLCJuYW1lcyI6WyJTVGF0ZW1lbnROb2RlIiwiTm9uVGVybWluYWxOb2RlIiwiZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc1ByZWNlZGVuY2VBbmRPcGFjaXR5IiwicnVsZU5hbWUiLCJjaGlsZE5vZGVzIiwicHJlY2VkZW5jZSIsIm9wYWNpdHkiLCJPYmplY3QiLCJhc3NpZ24iLCJwcm90b3R5cGUiLCJub2RlTWl4aW5zIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFZQTs7O2VBQUE7Ozt1Q0FWZ0M7NkRBRVQ7Ozs7OztBQUV2QixNQUFNQSxzQkFBc0JDLHNDQUFlO0lBQ3pDLE9BQU9DLDJDQUEyQ0MsUUFBUSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsT0FBTyxFQUFFO1FBQUUsT0FBT0wsc0NBQWUsQ0FBQ0MsMENBQTBDLENBQUNGLGVBQWVHLFVBQVVDLFlBQVlDLFlBQVlDO0lBQVU7QUFDOU47QUFFQUMsT0FBT0MsTUFBTSxDQUFDUixjQUFjUyxTQUFTLEVBQUVDLGFBQVU7TUFFakQsV0FBZVYifQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub21pbmFsL25vZGUvc3RhdGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBOb25UZXJtaW5hbE5vZGUgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgbm9kZU1peGlucyBmcm9tIFwiLi4vLi4vbWl4aW5zL25vZGVcIjtcblxuY2xhc3MgU1RhdGVtZW50Tm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzUHJlY2VkZW5jZUFuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZXMsIHByZWNlZGVuY2UsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzUHJlY2VkZW5jZUFuZE9wYWNpdHkoU1RhdGVtZW50Tm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIHByZWNlZGVuY2UsIG9wYWNpdHkpOyB9XG59XG5cbk9iamVjdC5hc3NpZ24oU1RhdGVtZW50Tm9kZS5wcm90b3R5cGUsIG5vZGVNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBTVGF0ZW1lbnROb2RlO1xuIl0sIm5hbWVzIjpbIlNUYXRlbWVudE5vZGUiLCJOb25UZXJtaW5hbE5vZGUiLCJmcm9tUnVsZU5hbWVDaGlsZE5vZGVzUHJlY2VkZW5jZUFuZE9wYWNpdHkiLCJydWxlTmFtZSIsImNoaWxkTm9kZXMiLCJwcmVjZWRlbmNlIiwib3BhY2l0eSIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsIm5vZGVNaXhpbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBQTs7OzhCQVZnQzs2REFFVDs7Ozs7O0FBRXZCLE1BQU1BLHNCQUFzQkMsNkJBQWU7SUFDekMsT0FBT0MsMkNBQTJDQyxRQUFRLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxPQUFPLEVBQUU7UUFBRSxPQUFPTCw2QkFBZSxDQUFDQywwQ0FBMEMsQ0FBQ0YsZUFBZUcsVUFBVUMsWUFBWUMsWUFBWUM7SUFBVTtBQUM5TjtBQUVBQyxPQUFPQyxNQUFNLENBQUNSLGNBQWNTLFNBQVMsRUFBRUMsYUFBVTtNQUVqRCxXQUFlViJ9
@@ -8,19 +8,19 @@ Object.defineProperty(exports, "default", {
8
8
  return _default;
9
9
  }
10
10
  });
11
- const _occamgrammarutilities = require("occam-grammar-utilities");
11
+ const _occamparsers = require("occam-parsers");
12
12
  const _node = /*#__PURE__*/ _interop_require_default(require("../../mixins/node"));
13
13
  function _interop_require_default(obj) {
14
14
  return obj && obj.__esModule ? obj : {
15
15
  default: obj
16
16
  };
17
17
  }
18
- class TermNode extends _occamgrammarutilities.NonTerminalNode {
18
+ class TermNode extends _occamparsers.NonTerminalNode {
19
19
  static fromRuleNameChildNodesPrecedenceAndOpacity(ruleName, childNodes, precedence, opacity) {
20
- return _occamgrammarutilities.NonTerminalNode.fromRuleNameChildNodesPrecedenceAndOpacity(TermNode, ruleName, childNodes, precedence, opacity);
20
+ return _occamparsers.NonTerminalNode.fromRuleNameChildNodesPrecedenceAndOpacity(TermNode, ruleName, childNodes, precedence, opacity);
21
21
  }
22
22
  }
23
23
  Object.assign(TermNode.prototype, _node.default);
24
24
  const _default = TermNode;
25
25
 
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub21pbmFsL25vZGUvdGVybS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgTm9uVGVybWluYWxOb2RlIH0gZnJvbSBcIm9jY2FtLWdyYW1tYXItdXRpbGl0aWVzXCI7XG5cbmltcG9ydCBub2RlTWl4aW5zIGZyb20gXCIuLi8uLi9taXhpbnMvbm9kZVwiO1xuXG5jbGFzcyBUZXJtTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzUHJlY2VkZW5jZUFuZE9wYWNpdHkocnVsZU5hbWUsIGNoaWxkTm9kZXMsIHByZWNlZGVuY2UsIG9wYWNpdHkpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzUHJlY2VkZW5jZUFuZE9wYWNpdHkoVGVybU5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBwcmVjZWRlbmNlLCBvcGFjaXR5KTsgfVxufVxuXG5PYmplY3QuYXNzaWduKFRlcm1Ob2RlLnByb3RvdHlwZSwgbm9kZU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IFRlcm1Ob2RlO1xuIl0sIm5hbWVzIjpbIlRlcm1Ob2RlIiwiTm9uVGVybWluYWxOb2RlIiwiZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc1ByZWNlZGVuY2VBbmRPcGFjaXR5IiwicnVsZU5hbWUiLCJjaGlsZE5vZGVzIiwicHJlY2VkZW5jZSIsIm9wYWNpdHkiLCJPYmplY3QiLCJhc3NpZ24iLCJwcm90b3R5cGUiLCJub2RlTWl4aW5zIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFZQTs7O2VBQUE7Ozt1Q0FWZ0M7NkRBRVQ7Ozs7OztBQUV2QixNQUFNQSxpQkFBaUJDLHNDQUFlO0lBQ3BDLE9BQU9DLDJDQUEyQ0MsUUFBUSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsT0FBTyxFQUFFO1FBQUUsT0FBT0wsc0NBQWUsQ0FBQ0MsMENBQTBDLENBQUNGLFVBQVVHLFVBQVVDLFlBQVlDLFlBQVlDO0lBQVU7QUFDek47QUFFQUMsT0FBT0MsTUFBTSxDQUFDUixTQUFTUyxTQUFTLEVBQUVDLGFBQVU7TUFFNUMsV0FBZVYifQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub21pbmFsL25vZGUvdGVybS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgTm9uVGVybWluYWxOb2RlIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IG5vZGVNaXhpbnMgZnJvbSBcIi4uLy4uL21peGlucy9ub2RlXCI7XG5cbmNsYXNzIFRlcm1Ob2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNQcmVjZWRlbmNlQW5kT3BhY2l0eShydWxlTmFtZSwgY2hpbGROb2RlcywgcHJlY2VkZW5jZSwgb3BhY2l0eSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNQcmVjZWRlbmNlQW5kT3BhY2l0eShUZXJtTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIHByZWNlZGVuY2UsIG9wYWNpdHkpOyB9XG59XG5cbk9iamVjdC5hc3NpZ24oVGVybU5vZGUucHJvdG90eXBlLCBub2RlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgVGVybU5vZGU7XG4iXSwibmFtZXMiOlsiVGVybU5vZGUiLCJOb25UZXJtaW5hbE5vZGUiLCJmcm9tUnVsZU5hbWVDaGlsZE5vZGVzUHJlY2VkZW5jZUFuZE9wYWNpdHkiLCJydWxlTmFtZSIsImNoaWxkTm9kZXMiLCJwcmVjZWRlbmNlIiwib3BhY2l0eSIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsIm5vZGVNaXhpbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBQTs7OzhCQVZnQzs2REFFVDs7Ozs7O0FBRXZCLE1BQU1BLGlCQUFpQkMsNkJBQWU7SUFDcEMsT0FBT0MsMkNBQTJDQyxRQUFRLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxPQUFPLEVBQUU7UUFBRSxPQUFPTCw2QkFBZSxDQUFDQywwQ0FBMEMsQ0FBQ0YsVUFBVUcsVUFBVUMsWUFBWUMsWUFBWUM7SUFBVTtBQUN6TjtBQUVBQyxPQUFPQyxNQUFNLENBQUNSLFNBQVNTLFNBQVMsRUFBRUMsYUFBVTtNQUU1QyxXQUFlViJ9
@@ -145,7 +145,8 @@ function each(array, callback, ...initialArguments) {
145
145
  }
146
146
  const element = array[index];
147
147
  return callback(element, ...nextArguments, (...forwardArguments)=>{
148
- return next(index + 1, count + 1, ...forwardArguments);
148
+ const back = forwardArguments.pop();
149
+ return next(index + 1, count + 1, ...forwardArguments, back);
149
150
  }, back, index);
150
151
  }
151
152
  const index = 0, count = 0;
@@ -160,7 +161,8 @@ function every(array, callback, ...initialArguments) {
160
161
  }
161
162
  const element = array[index];
162
163
  return callback(element, ...nextArguments, (...forwardArguments)=>{
163
- return next(index + 1, ...forwardArguments);
164
+ const back = forwardArguments.pop();
165
+ return next(index + 1, ...forwardArguments, back);
164
166
  }, back, index);
165
167
  }
166
168
  const index = 0;
@@ -175,10 +177,11 @@ function map(array, callback, ...initialArguments) {
175
177
  }
176
178
  const elementA = arrayA[index];
177
179
  return callback(elementA, ...nextArguments, (elementB, ...forwardArguments)=>{
180
+ const back = forwardArguments.pop();
178
181
  return next(index + 1, [
179
182
  ...arrayB,
180
183
  elementB
181
- ], ...forwardArguments);
184
+ ], ...forwardArguments, back);
182
185
  }, back, index);
183
186
  }
184
187
  const index = 0, arrayB = [];
@@ -193,7 +196,8 @@ function reduce(array, initialValue, callback, ...initialArguments) {
193
196
  }
194
197
  const element = array[index];
195
198
  return callback(element, value, ...nextArguments, (value, ...forwardArguments)=>{
196
- return next(index + 1, value, ...forwardArguments);
199
+ const back = forwardArguments.pop();
200
+ return next(index + 1, value, ...forwardArguments, back);
197
201
  }, back, index);
198
202
  }
199
203
  const index = 0;
@@ -208,7 +212,8 @@ function forEach(array, callback, ...initialArguments) {
208
212
  }
209
213
  const element = array[index];
210
214
  return callback(element, ...nextArguments, (...forwardArguments)=>{
211
- return next(index + 1, ...forwardArguments);
215
+ const back = forwardArguments.pop();
216
+ return next(index + 1, ...forwardArguments, back);
212
217
  }, back, index);
213
218
  }
214
219
  const index = 0;
@@ -223,7 +228,8 @@ function filter(array, callback, ...initialArguments) {
223
228
  }
224
229
  const element = array[index];
225
230
  return callback(element, ...nextArguments, (...forwardArguments)=>{
226
- return next(index - 1, array, deletedElements, ...forwardArguments);
231
+ const back = forwardArguments.pop();
232
+ return next(index - 1, array, deletedElements, ...forwardArguments, back);
227
233
  }, (exception)=>{
228
234
  if (exception) {
229
235
  return back(exception);
@@ -250,10 +256,11 @@ function find(array, callback, ...initialArguments) {
250
256
  }
251
257
  const element = array[index];
252
258
  return callback(element, ...nextArguments, (...forwardArguments)=>{
259
+ const back = forwardArguments.pop();
253
260
  return next(index + 1, [
254
261
  ...elements,
255
262
  element
256
- ], ...forwardArguments);
263
+ ], ...forwardArguments, back);
257
264
  }, (exception)=>{
258
265
  if (exception) {
259
266
  return back(exception);
@@ -273,7 +280,8 @@ function prune(array, callback, ...initialArguments) {
273
280
  }
274
281
  const element = array[index];
275
282
  return callback(element, ...nextArguments, (...forwardArguments)=>{
276
- return next(index + 1, array, ...forwardArguments);
283
+ const back = forwardArguments.pop();
284
+ return next(index + 1, array, ...forwardArguments, back);
277
285
  }, (exception)=>{
278
286
  if (exception) {
279
287
  return back(exception);
@@ -346,7 +354,8 @@ function match(arrayA, arrayB, callback, ...initialArguments) {
346
354
  }
347
355
  const elementA = arrayA[index], elementB = arrayB[index];
348
356
  return callback(elementA, elementB, ...nextArguments, (...forwardArguments)=>{
349
- return next(index + 1, ...forwardArguments);
357
+ const back = forwardArguments.pop();
358
+ return next(index + 1, ...forwardArguments, back);
350
359
  }, back, index);
351
360
  }
352
361
  const index = 0;
@@ -361,7 +370,8 @@ function forwardsEvery(array, callback, ...initialArguments) {
361
370
  }
362
371
  const element = array[index];
363
372
  return callback(element, ...nextArguments, (...forwardArguments)=>{
364
- return next(index + 1, ...forwardArguments);
373
+ const back = forwardArguments.pop();
374
+ return next(index + 1, ...forwardArguments, back);
365
375
  }, back, index);
366
376
  }
367
377
  const index = 0;
@@ -376,7 +386,8 @@ function backwardsEvery(array, callback, ...initialArguments) {
376
386
  }
377
387
  const element = array[index];
378
388
  return callback(element, ...nextArguments, (...forwardArguments)=>{
379
- return next(index - 1, ...forwardArguments);
389
+ const back = forwardArguments.pop();
390
+ return next(index - 1, ...forwardArguments, back);
380
391
  }, back, index);
381
392
  }
382
393
  const index = length - 1;
@@ -391,7 +402,8 @@ function forwardsForEach(array, callback, ...initialArguments) {
391
402
  }
392
403
  const element = array[index];
393
404
  return callback(element, ...nextArguments, (...forwardArguments)=>{
394
- return next(index + 1, ...forwardArguments);
405
+ const back = forwardArguments.pop();
406
+ return next(index + 1, ...forwardArguments, back);
395
407
  }, back, index);
396
408
  }
397
409
  const index = 0;
@@ -406,7 +418,8 @@ function backwardsForEach(array, callback, ...initialArguments) {
406
418
  }
407
419
  const element = array[index];
408
420
  return callback(element, ...nextArguments, (...forwardArguments)=>{
409
- return next(index - 1, ...forwardArguments);
421
+ const back = forwardArguments.pop();
422
+ return next(index - 1, ...forwardArguments, back);
410
423
  }, back, index);
411
424
  }
412
425
  const index = length - 1;
@@ -446,4 +459,4 @@ const _default = {
446
459
  exists
447
460
  };
448
461
 
449
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3V0KC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIHJldHVybiAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgIGZvcndhcmRBcmd1bWVudHMucG9wKCk7IC8vL1xuXG4gICAgcmV0dXJuIGZvcndhcmQoLi4uZm9yd2FyZEFyZ3VtZW50cywgYmFjayk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc29sYXRlKGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICByZXR1cm4gY2FsbGJhY2soLi4uaW5pdGlhbEFyZ3VtZW50cywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgY29uc3QgYmFjayA9IGNhbGxiYWNrQXJndW1lbnRzLnBvcCgpO1xuXG4gICAgcmV0dXJuIGZvcndhcmQoLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG4gIH0sIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25lKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBjb3VudCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5pbml0aWFsQXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcndhcmRBcmd1bWVudHMucG9wKCk7IC8vL1xuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgY291bnQgKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICAoZXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCBjb3VudCwgLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICBjb3VudCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGNvdW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLmluaXRpYWxBcmd1bWVudHMsXG4gICAgICBmb3J3YXJkLFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSk7XG4gICAgICB9LFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGNvdW50LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgY291bnQgKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICBjb3VudCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGNvdW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBhcnJheUEgPSBhcnJheSwgLy8vXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBhcnJheUIsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChhcnJheUIsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnRBLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIChlbGVtZW50QiwgLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIFsgLi4uYXJyYXlCLCBlbGVtZW50QiBdLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICBhcnJheUIgPSBbXTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXlCLCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZShhcnJheSwgaW5pdGlhbFZhbHVlLCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCB2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHZhbHVlLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIHZhbHVlLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICh2YWx1ZSwgLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIHZhbHVlLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCBpbml0aWFsVmFsdWUsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGFycmF5LCBkZWxldGVkRWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGFycmF5LCBkZWxldGVkRWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgYXJyYXksIGRlbGV0ZWRFbGVtZW50cywgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgcmV0dXJuIG5leHQoXG4gICAgICAgICAgaW5kZXggLSAxLFxuICAgICAgICAgIFsgLi4uYXJyYXkuc2xpY2UoMCwgaW5kZXgpLCAuLi5hcnJheS5zbGljZShpbmRleCArIDEpIF0sXG4gICAgICAgICAgWyBkZWxldGVkRWxlbWVudCwgLi4uZGVsZXRlZEVsZW1lbnRzIF0sXG4gICAgICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICAgICBiYWNrXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSBsZW5ndGggLSAxLFxuICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBbXTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXksIGRlbGV0ZWRFbGVtZW50cywgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBlbGVtZW50cywgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGVsZW1lbnRzLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIFsgLi4uZWxlbWVudHMsIGVsZW1lbnQgXSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgZWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgZWxlbWVudHMgPSBbXTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgZWxlbWVudHMsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGFycmF5LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIGFycmF5LCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICAoZXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICAgICAgICByZXR1cm4gZm9yd2FyZChcbiAgICAgICAgICBbIC4uLmFycmF5LnNsaWNlKDAsIGluZGV4KSwgLi4uYXJyYXkuc2xpY2UoaW5kZXggKyAxKSBdLFxuICAgICAgICAgIGRlbGV0ZWRFbGVtZW50LFxuICAgICAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAgICAgYmFja1xuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXksIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgYXJyYXksIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoXG4gICAgICAgICAgWyAuLi5hcnJheS5zbGljZSgwLCBpbmRleCksIC4uLmFycmF5LnNsaWNlKGluZGV4ICsgMSkgXSxcbiAgICAgICAgICBkZWxldGVkRWxlbWVudCxcbiAgICAgICAgICAuLi5mb3J3YXJkQXJndW1lbnRzXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgYXJyYXksIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXksIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGZ1bmN0aW9uIG5leHQoYXJyYXlBLCBhcnJheUIsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBsZW5ndGggPSBhcnJheUEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoYXJyYXlCLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmluZChcbiAgICAgIGFycmF5QSxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIChlbGVtZW50cywgLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50c0xlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuICAgICAgICBpZiAoZWxlbWVudHNMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTsgLy8vXG5cbiAgICAgICAgcmV0dXJuIG5leHQoXG4gICAgICAgICAgYXJyYXlBLmZpbHRlcigoZWxlbWVudCkgPT4gIWVsZW1lbnRzLmluY2x1ZGVzKGVsZW1lbnQpKSxcbiAgICAgICAgICBbIC4uLmFycmF5QiwgLi4uZWxlbWVudHMgXSxcbiAgICAgICAgICAuLi5mb3J3YXJkQXJndW1lbnRzXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgYmFja1xuICAgICk7XG4gIH1cblxuICBjb25zdCBhcnJheUEgPSBhcnJheSwgLy8vXG4gICAgICAgIGFycmF5QiA9IFtdO1xuXG4gIHJldHVybiBuZXh0KGFycmF5QSwgYXJyYXlCLCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGFycmF5QUxlbmd0aCA9IGFycmF5QS5sZW5ndGgsXG4gICAgICAgIGFycmF5Qkxlbmd0aCA9IGFycmF5Qi5sZW5ndGgsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5QUxlbmd0aDsgIC8vL1xuXG4gIGlmIChhcnJheUFMZW5ndGggIT09IGFycmF5Qkxlbmd0aCkge1xuICAgIHJldHVybiBiYWNrKCk7XG4gIH1cblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudEEgPSBhcnJheUFbaW5kZXhdLFxuICAgICAgICAgIGVsZW1lbnRCID0gYXJyYXlCW2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnRBLFxuICAgICAgZWxlbWVudEIsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRm9yRWFjaChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbChjYWxsYmFja3MsIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgcmV0dXJuIGV2ZXJ5KGNhbGxiYWNrcywgKGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gIH0sIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhpc3RzKGNhbGxiYWNrcywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICByZXR1cm4gc29tZShjYWxsYmFja3MsIChjYWxsYmFjaywgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICB9LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjdXQsXG4gIGlzb2xhdGUsXG4gIG9uZSxcbiAgc29tZSxcbiAgZWFjaCxcbiAgZXZlcnksXG4gIG1hcCxcbiAgcmVkdWNlLFxuICBmb3JFYWNoLFxuICBmaWx0ZXIsXG4gIGZpbmQsXG4gIHBydW5lLFxuICBleHRyYWN0LFxuICByZXNvbHZlLFxuICBtYXRjaCxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaCxcbiAgYWxsLFxuICBleGlzdHNcbn07XG4iXSwibmFtZXMiOlsiYWxsIiwiYmFja3dhcmRzRXZlcnkiLCJiYWNrd2FyZHNGb3JFYWNoIiwiY3V0IiwiZWFjaCIsImV2ZXJ5IiwiZXhpc3RzIiwiZXh0cmFjdCIsImZpbHRlciIsImZpbmQiLCJmb3JFYWNoIiwiZm9yd2FyZHNFdmVyeSIsImZvcndhcmRzRm9yRWFjaCIsImlzb2xhdGUiLCJtYXAiLCJtYXRjaCIsIm9uZSIsInBydW5lIiwicmVkdWNlIiwicmVzb2x2ZSIsInNvbWUiLCJpbml0aWFsQXJndW1lbnRzIiwiYmFjayIsInBvcCIsImZvcndhcmQiLCJmb3J3YXJkQXJndW1lbnRzIiwiY2FsbGJhY2siLCJjYWxsYmFja0FyZ3VtZW50cyIsImFycmF5IiwibGVuZ3RoIiwibmV4dCIsImluZGV4IiwiY291bnQiLCJuZXh0QXJndW1lbnRzIiwiZWxlbWVudCIsImV4Y2VwdGlvbiIsImFycmF5QSIsImFycmF5QiIsImVsZW1lbnRBIiwiZWxlbWVudEIiLCJpbml0aWFsVmFsdWUiLCJ2YWx1ZSIsImRlbGV0ZWRFbGVtZW50cyIsImRlbGV0ZWRFbGVtZW50Iiwic2xpY2UiLCJlbGVtZW50cyIsImVsZW1lbnRzTGVuZ3RoIiwiaW5jbHVkZXMiLCJhcnJheUFMZW5ndGgiLCJhcnJheUJMZW5ndGgiLCJjYWxsYmFja3MiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQWduQmdCQTtlQUFBQTs7UUExRkFDO2VBQUFBOztRQTREQUM7ZUFBQUE7O1FBaGxCQUM7ZUFBQUE7O1FBMG5CaEI7ZUFBQTs7UUF2aEJnQkM7ZUFBQUE7O1FBbUNBQztlQUFBQTs7UUE4ZUFDO2VBQUFBOztRQXRQQUM7ZUFBQUE7O1FBN0hBQztlQUFBQTs7UUE2Q0FDO2VBQUFBOztRQTNFQUM7ZUFBQUE7O1FBbVJBQztlQUFBQTs7UUE0REFDO2VBQUFBOztRQXZpQkFDO2VBQUFBOztRQXlKQUM7ZUFBQUE7O1FBNFNBQztlQUFBQTs7UUExYkFDO2VBQUFBOztRQTZUQUM7ZUFBQUE7O1FBL0lBQztlQUFBQTs7UUFvT0FDO2VBQUFBOztRQXJXQUM7ZUFBQUE7OztBQW5FVCxTQUFTakIsSUFBSSxHQUFHa0IsZ0JBQWdCO0lBQ3JDLE1BQU1DLE9BQU9ELGlCQUFpQkUsR0FBRyxJQUMzQkMsVUFBVUgsaUJBQWlCRSxHQUFHO0lBRXBDLE9BQU8sQ0FBQyxHQUFHRTtRQUNUQSxpQkFBaUJGLEdBQUcsSUFBSSxHQUFHO1FBRTNCLE9BQU9DLFdBQVdDLGtCQUFrQkg7SUFDdEM7QUFDRjtBQUVPLFNBQVNULFFBQVFhLFFBQVEs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
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3V0KC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIHJldHVybiAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgIGZvcndhcmRBcmd1bWVudHMucG9wKCk7IC8vL1xuXG4gICAgcmV0dXJuIGZvcndhcmQoLi4uZm9yd2FyZEFyZ3VtZW50cywgYmFjayk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc29sYXRlKGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICByZXR1cm4gY2FsbGJhY2soLi4uaW5pdGlhbEFyZ3VtZW50cywgKC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgY29uc3QgYmFjayA9IGNhbGxiYWNrQXJndW1lbnRzLnBvcCgpO1xuXG4gICAgcmV0dXJuIGZvcndhcmQoLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG4gIH0sIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25lKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBjb3VudCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5pbml0aWFsQXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcndhcmRBcmd1bWVudHMucG9wKCk7IC8vL1xuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgY291bnQgKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICAoZXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCBjb3VudCwgLi4ubmV4dEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICBjb3VudCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGNvdW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLmluaXRpYWxBcmd1bWVudHMsXG4gICAgICBmb3J3YXJkLFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSk7XG4gICAgICB9LFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGNvdW50LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhY2sgPSBmb3J3YXJkQXJndW1lbnRzLnBvcCgpO1xuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgY291bnQgKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICBjb3VudCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGNvdW50LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgY29uc3QgYmFjayA9IGZvcndhcmRBcmd1bWVudHMucG9wKCk7XG5cbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBhcnJheUEgPSBhcnJheSwgLy8vXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBhcnJheUIsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChhcnJheUIsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnRBLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIChlbGVtZW50QiwgLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBiYWNrID0gZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTtcblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIFsgLi4uYXJyYXlCLCBlbGVtZW50QiBdLCAuLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwLFxuICAgICAgICBhcnJheUIgPSBbXTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXlCLCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZShhcnJheSwgaW5pdGlhbFZhbHVlLCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCB2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHZhbHVlLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIHZhbHVlLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICh2YWx1ZSwgLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBiYWNrID0gZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTtcblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIHZhbHVlLCAuLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCBpbml0aWFsVmFsdWUsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhY2sgPSBmb3J3YXJkQXJndW1lbnRzLnBvcCgpO1xuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cywgYmFjayk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGFycmF5LCBkZWxldGVkRWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGFycmF5LCBkZWxldGVkRWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhY2sgPSBmb3J3YXJkQXJndW1lbnRzLnBvcCgpO1xuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgYXJyYXksIGRlbGV0ZWRFbGVtZW50cywgLi4uZm9yd2FyZEFyZ3VtZW50cywgYmFjayk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgcmV0dXJuIG5leHQoXG4gICAgICAgICAgaW5kZXggLSAxLFxuICAgICAgICAgIFsgLi4uYXJyYXkuc2xpY2UoMCwgaW5kZXgpLCAuLi5hcnJheS5zbGljZShpbmRleCArIDEpIF0sXG4gICAgICAgICAgWyBkZWxldGVkRWxlbWVudCwgLi4uZGVsZXRlZEVsZW1lbnRzIF0sXG4gICAgICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICAgICBiYWNrXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSBsZW5ndGggLSAxLFxuICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBbXTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXksIGRlbGV0ZWRFbGVtZW50cywgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBlbGVtZW50cywgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGVsZW1lbnRzLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBiYWNrID0gZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTtcblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIFsgLi4uZWxlbWVudHMsIGVsZW1lbnQgXSwgLi4uZm9yd2FyZEFyZ3VtZW50cywgYmFjayk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgZWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgZWxlbWVudHMgPSBbXTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgZWxlbWVudHMsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGFycmF5LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBiYWNrID0gZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTtcblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIGFycmF5LCAuLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICAoZXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICAgICAgICByZXR1cm4gZm9yd2FyZChcbiAgICAgICAgICBbIC4uLmFycmF5LnNsaWNlKDAsIGluZGV4KSwgLi4uYXJyYXkuc2xpY2UoaW5kZXggKyAxKSBdLFxuICAgICAgICAgIGRlbGV0ZWRFbGVtZW50LFxuICAgICAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAgICAgYmFja1xuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXksIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgYXJyYXksIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoXG4gICAgICAgICAgWyAuLi5hcnJheS5zbGljZSgwLCBpbmRleCksIC4uLmFycmF5LnNsaWNlKGluZGV4ICsgMSkgXSxcbiAgICAgICAgICBkZWxldGVkRWxlbWVudCxcbiAgICAgICAgICAuLi5mb3J3YXJkQXJndW1lbnRzXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgYXJyYXksIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXksIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpO1xuXG4gIGZ1bmN0aW9uIG5leHQoYXJyYXlBLCBhcnJheUIsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBsZW5ndGggPSBhcnJheUEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoYXJyYXlCLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmluZChcbiAgICAgIGFycmF5QSxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIChlbGVtZW50cywgLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50c0xlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuICAgICAgICBpZiAoZWxlbWVudHNMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTsgLy8vXG5cbiAgICAgICAgcmV0dXJuIG5leHQoXG4gICAgICAgICAgYXJyYXlBLmZpbHRlcigoZWxlbWVudCkgPT4gIWVsZW1lbnRzLmluY2x1ZGVzKGVsZW1lbnQpKSxcbiAgICAgICAgICBbIC4uLmFycmF5QiwgLi4uZWxlbWVudHMgXSxcbiAgICAgICAgICAuLi5mb3J3YXJkQXJndW1lbnRzXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgYmFja1xuICAgICk7XG4gIH1cblxuICBjb25zdCBhcnJheUEgPSBhcnJheSwgLy8vXG4gICAgICAgIGFycmF5QiA9IFtdO1xuXG4gIHJldHVybiBuZXh0KGFycmF5QSwgYXJyYXlCLCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGFycmF5QUxlbmd0aCA9IGFycmF5QS5sZW5ndGgsXG4gICAgICAgIGFycmF5Qkxlbmd0aCA9IGFycmF5Qi5sZW5ndGgsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5QUxlbmd0aDsgIC8vL1xuXG4gIGlmIChhcnJheUFMZW5ndGggIT09IGFycmF5Qkxlbmd0aCkge1xuICAgIHJldHVybiBiYWNrKCk7XG4gIH1cblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudEEgPSBhcnJheUFbaW5kZXhdLFxuICAgICAgICAgIGVsZW1lbnRCID0gYXJyYXlCW2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnRBLFxuICAgICAgZWxlbWVudEIsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgY29uc3QgYmFjayA9IGZvcndhcmRBcmd1bWVudHMucG9wKCk7XG5cbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBiYWNrID0gZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTtcblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmZvcndhcmRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhY2sgPSBmb3J3YXJkQXJndW1lbnRzLnBvcCgpO1xuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgLi4uZm9yd2FyZEFyZ3VtZW50cywgYmFjayk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBiYWNrID0gZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTtcblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmZvcndhcmRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRm9yRWFjaChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgY29uc3QgYmFjayA9IGZvcndhcmRBcmd1bWVudHMucG9wKCk7XG5cbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSBsZW5ndGggLSAxO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbChjYWxsYmFja3MsIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgcmV0dXJuIGV2ZXJ5KGNhbGxiYWNrcywgKGNhbGxiYWNrLCAuLi5jYWxsYmFja0FyZ3VtZW50cykgPT4ge1xuICAgIHJldHVybiBjYWxsYmFjayguLi5jYWxsYmFja0FyZ3VtZW50cyk7XG4gIH0sIC4uLmluaXRpYWxBcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhpc3RzKGNhbGxiYWNrcywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICByZXR1cm4gc29tZShjYWxsYmFja3MsIChjYWxsYmFjaywgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICB9LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjdXQsXG4gIGlzb2xhdGUsXG4gIG9uZSxcbiAgc29tZSxcbiAgZWFjaCxcbiAgZXZlcnksXG4gIG1hcCxcbiAgcmVkdWNlLFxuICBmb3JFYWNoLFxuICBmaWx0ZXIsXG4gIGZpbmQsXG4gIHBydW5lLFxuICBleHRyYWN0LFxuICByZXNvbHZlLFxuICBtYXRjaCxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaCxcbiAgYWxsLFxuICBleGlzdHNcbn07XG4iXSwibmFtZXMiOlsiYWxsIiwiYmFja3dhcmRzRXZlcnkiLCJiYWNrd2FyZHNGb3JFYWNoIiwiY3V0IiwiZWFjaCIsImV2ZXJ5IiwiZXhpc3RzIiwiZXh0cmFjdCIsImZpbHRlciIsImZpbmQiLCJmb3JFYWNoIiwiZm9yd2FyZHNFdmVyeSIsImZvcndhcmRzRm9yRWFjaCIsImlzb2xhdGUiLCJtYXAiLCJtYXRjaCIsIm9uZSIsInBydW5lIiwicmVkdWNlIiwicmVzb2x2ZSIsInNvbWUiLCJpbml0aWFsQXJndW1lbnRzIiwiYmFjayIsInBvcCIsImZvcndhcmQiLCJmb3J3YXJkQXJndW1lbnRzIiwiY2FsbGJhY2siLCJjYWxsYmFja0FyZ3VtZW50cyIsImFycmF5IiwibGVuZ3RoIiwibmV4dCIsImluZGV4IiwiY291bnQiLCJuZXh0QXJndW1lbnRzIiwiZWxlbWVudCIsImV4Y2VwdGlvbiIsImFycmF5QSIsImFycmF5QiIsImVsZW1lbnRBIiwiZWxlbWVudEIiLCJpbml0aWFsVmFsdWUiLCJ2YWx1ZSIsImRlbGV0ZWRFbGVtZW50cyIsImRlbGV0ZWRFbGVtZW50Iiwic2xpY2UiLCJlbGVtZW50cyIsImVsZW1lbnRzTGVuZ3RoIiwiaW5jbHVkZXMiLCJhcnJheUFMZW5ndGgiLCJhcnJheUJMZW5ndGgiLCJjYWxsYmFja3MiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTBvQmdCQTtlQUFBQTs7UUFoR0FDO2VBQUFBOztRQWdFQUM7ZUFBQUE7O1FBeG1CQUM7ZUFBQUE7O1FBb3BCaEI7ZUFBQTs7UUFqakJnQkM7ZUFBQUE7O1FBcUNBQztlQUFBQTs7UUFzZ0JBQztlQUFBQTs7UUFoUUFDO2VBQUFBOztRQW5JQUM7ZUFBQUE7O1FBK0NBQztlQUFBQTs7UUEvRUFDO2VBQUFBOztRQTZSQUM7ZUFBQUE7O1FBZ0VBQztlQUFBQTs7UUE3akJBQztlQUFBQTs7UUE2SkFDO2VBQUFBOztRQXdUQUM7ZUFBQUE7O1FBMWNBQztlQUFBQTs7UUEyVUFDO2VBQUFBOztRQXZKQUM7ZUFBQUE7O1FBOE9BQztlQUFBQTs7UUFyWEFDO2VBQUFBOzs7QUFuRVQsU0FBU2pCLElBQUksR0FBR2tCLGdCQUFnQjtJQUNyQyxNQUFNQyxPQUFPRCxpQkFBaUJFLEdBQUcsSUFDM0JDLFVBQVVILGlCQUFpQkUsR0FBRztJQUVwQyxPQUFPLENBQUMsR0FBR0U7UUFDVEEsaUJBQWlCRixHQUFHLElBQUksR0FBRztRQUUzQixPQUFPQyxXQUFXQyxrQkFBa0JIO0lBQ3RDO0FBQ0Y7QUFFTyxTQUFTVCxRQUFRYSxRQUFRLEVBQUUsR0FBR0wsZ0JBQWdCO0lBQ25ELE1BQU1DLE9BQU9ELGlCQUFpQkUsR0FBRyxJQUMzQkMsVUFBVUgsaUJBQWlCRSxHQUFHO0lBRXBDLE9BQU9HLFlBQVlMLGtCQUFrQixDQUFDLEdBQUdNO1FBQ3ZDLE1BQU1MLE9BQU9LLGtCQUFrQkosR0FBRztRQUVsQyxPQUFPQyxXQUFXSCxrQkFBa0JDO0lBQ3RDLEdBQUdBO0FBQ0w7QUFFTyxTQUFTTixJ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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-languages",
3
3
  "author": "James Smith",
4
- "version": "3.0.128",
4
+ "version": "3.0.130",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-languages",
7
7
  "description": "Occam's common language functionality.",
@@ -11,13 +11,13 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "necessary": "^17.7.2",
14
- "occam-custom-grammars": "^6.1.78",
15
- "occam-grammar-utilities": "^8.1.83",
16
- "occam-grammars": "^1.3.739",
17
- "occam-lexers": "^23.3.13",
18
- "occam-model": "^1.0.619",
19
- "occam-parsers": "^23.3.51",
20
- "occam-query": "^4.1.241"
14
+ "occam-custom-grammars": "^6.1.81",
15
+ "occam-grammar-utilities": "^8.1.149",
16
+ "occam-grammars": "^1.3.742",
17
+ "occam-lexers": "^24.0.1",
18
+ "occam-model": "^1.0.621",
19
+ "occam-parsers": "^24.0.1",
20
+ "occam-query": "^4.1.243"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@swc/core": "1.13.20",
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-grammar-utilities";
3
+ import { NonTerminalNode } from "occam-parsers";
4
4
 
5
5
  import nodeMixins from "../../mixins/node";
6
6
 
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { NonTerminalNode } from "occam-grammar-utilities";
3
+ import { NonTerminalNode } from "occam-parsers";
4
4
 
5
5
  import nodeMixins from "../../mixins/node";
6
6
 
@@ -121,7 +121,9 @@ export function each(array, callback, ...initialArguments) {
121
121
  element,
122
122
  ...nextArguments,
123
123
  (...forwardArguments) => {
124
- return next(index + 1, count + 1, ...forwardArguments);
124
+ const back = forwardArguments.pop();
125
+
126
+ return next(index + 1, count + 1, ...forwardArguments, back);
125
127
  },
126
128
  back,
127
129
  index
@@ -152,7 +154,9 @@ export function every(array, callback, ...initialArguments) {
152
154
  element,
153
155
  ...nextArguments,
154
156
  (...forwardArguments) => {
155
- return next(index + 1, ...forwardArguments);
157
+ const back = forwardArguments.pop();
158
+
159
+ return next(index + 1, ...forwardArguments, back);
156
160
  },
157
161
  back,
158
162
  index
@@ -183,7 +187,9 @@ export function map(array, callback, ...initialArguments) {
183
187
  elementA,
184
188
  ...nextArguments,
185
189
  (elementB, ...forwardArguments) => {
186
- return next(index + 1, [ ...arrayB, elementB ], ...forwardArguments);
190
+ const back = forwardArguments.pop();
191
+
192
+ return next(index + 1, [ ...arrayB, elementB ], ...forwardArguments, back);
187
193
  },
188
194
  back,
189
195
  index
@@ -215,7 +221,9 @@ export function reduce(array, initialValue, callback, ...initialArguments) {
215
221
  value,
216
222
  ...nextArguments,
217
223
  (value, ...forwardArguments) => {
218
- return next(index + 1, value, ...forwardArguments);
224
+ const back = forwardArguments.pop();
225
+
226
+ return next(index + 1, value, ...forwardArguments, back);
219
227
  },
220
228
  back,
221
229
  index
@@ -245,7 +253,9 @@ export function forEach(array, callback, ...initialArguments) {
245
253
  element,
246
254
  ...nextArguments,
247
255
  (...forwardArguments) => {
248
- return next(index + 1, ...forwardArguments);
256
+ const back = forwardArguments.pop();
257
+
258
+ return next(index + 1, ...forwardArguments, back);
249
259
  },
250
260
  back,
251
261
  index
@@ -275,7 +285,9 @@ export function filter(array, callback, ...initialArguments) {
275
285
  element,
276
286
  ...nextArguments,
277
287
  (...forwardArguments) => {
278
- return next(index - 1, array, deletedElements, ...forwardArguments);
288
+ const back = forwardArguments.pop();
289
+
290
+ return next(index - 1, array, deletedElements, ...forwardArguments, back);
279
291
  },
280
292
  (exception) => {
281
293
  if (exception) {
@@ -320,7 +332,9 @@ export function find(array, callback, ...initialArguments) {
320
332
  element,
321
333
  ...nextArguments,
322
334
  (...forwardArguments) => {
323
- return next(index + 1, [ ...elements, element ], ...forwardArguments);
335
+ const back = forwardArguments.pop();
336
+
337
+ return next(index + 1, [ ...elements, element ], ...forwardArguments, back);
324
338
  },
325
339
  (exception) => {
326
340
  if (exception) {
@@ -357,7 +371,9 @@ export function prune(array, callback, ...initialArguments) {
357
371
  element,
358
372
  ...nextArguments,
359
373
  (...forwardArguments) => {
360
- return next(index + 1, array, ...forwardArguments);
374
+ const back = forwardArguments.pop();
375
+
376
+ return next(index + 1, array, ...forwardArguments, back);
361
377
  },
362
378
  (exception) => {
363
379
  if (exception) {
@@ -490,7 +506,9 @@ export function match(arrayA, arrayB, callback, ...initialArguments) {
490
506
  elementB,
491
507
  ...nextArguments,
492
508
  (...forwardArguments) => {
493
- return next(index + 1, ...forwardArguments);
509
+ const back = forwardArguments.pop();
510
+
511
+ return next(index + 1, ...forwardArguments, back);
494
512
  },
495
513
  back,
496
514
  index
@@ -520,7 +538,9 @@ export function forwardsEvery(array, callback, ...initialArguments) {
520
538
  element,
521
539
  ...nextArguments,
522
540
  (...forwardArguments) => {
523
- return next(index + 1, ...forwardArguments);
541
+ const back = forwardArguments.pop();
542
+
543
+ return next(index + 1, ...forwardArguments, back);
524
544
  },
525
545
  back,
526
546
  index
@@ -550,7 +570,9 @@ export function backwardsEvery(array, callback, ...initialArguments) {
550
570
  element,
551
571
  ...nextArguments,
552
572
  (...forwardArguments) => {
553
- return next(index - 1, ...forwardArguments);
573
+ const back = forwardArguments.pop();
574
+
575
+ return next(index - 1, ...forwardArguments, back);
554
576
  },
555
577
  back,
556
578
  index
@@ -580,7 +602,9 @@ export function forwardsForEach(array, callback, ...initialArguments) {
580
602
  element,
581
603
  ...nextArguments,
582
604
  (...forwardArguments) => {
583
- return next(index + 1, ...forwardArguments);
605
+ const back = forwardArguments.pop();
606
+
607
+ return next(index + 1, ...forwardArguments, back);
584
608
  },
585
609
  back,
586
610
  index
@@ -610,7 +634,9 @@ export function backwardsForEach(array, callback, ...initialArguments) {
610
634
  element,
611
635
  ...nextArguments,
612
636
  (...forwardArguments) => {
613
- return next(index - 1, ...forwardArguments);
637
+ const back = forwardArguments.pop();
638
+
639
+ return next(index - 1, ...forwardArguments, back);
614
640
  },
615
641
  back,
616
642
  index