occam-furtle 3.0.378 → 3.0.381

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.
@@ -57,6 +57,12 @@ _export(exports, {
57
57
  get comparisonTermFromTermNode () {
58
58
  return comparisonTermFromTermNode;
59
59
  },
60
+ get containsFromContainsNode () {
61
+ return containsFromContainsNode;
62
+ },
63
+ get containsFromExpressionNode () {
64
+ return containsFromExpressionNode;
65
+ },
60
66
  get disjunctionFromLogicalTermNode () {
61
67
  return disjunctionFromLogicalTermNode;
62
68
  },
@@ -66,6 +72,12 @@ _export(exports, {
66
72
  get elseExpressionFromTernaryNode () {
67
73
  return elseExpressionFromTernaryNode;
68
74
  },
75
+ get endsWithFromEndsWithNode () {
76
+ return endsWithFromEndsWithNode;
77
+ },
78
+ get endsWithFromExpressionNode () {
79
+ return endsWithFromExpressionNode;
80
+ },
69
81
  get errorFromErrorNode () {
70
82
  return errorFromErrorNode;
71
83
  },
@@ -258,12 +270,27 @@ _export(exports, {
258
270
  get someFromSomeNode () {
259
271
  return someFromSomeNode;
260
272
  },
273
+ get startsWithFromExpressionNode () {
274
+ return startsWithFromExpressionNode;
275
+ },
276
+ get startsWithFromStartsWithNode () {
277
+ return startsWithFromStartsWithNode;
278
+ },
261
279
  get statementFromStatementNode () {
262
280
  return statementFromStatementNode;
263
281
  },
264
282
  get statementsFromReturnBlockNode () {
265
283
  return statementsFromReturnBlockNode;
266
284
  },
285
+ get substringFromContainsNode () {
286
+ return substringFromContainsNode;
287
+ },
288
+ get substringFromEndsWithNode () {
289
+ return substringFromEndsWithNode;
290
+ },
291
+ get substringFromStartsWithNode () {
292
+ return substringFromStartsWithNode;
293
+ },
267
294
  get termFromBracketedTermNode () {
268
295
  return termFromBracketedTermNode;
269
296
  },
@@ -372,6 +399,12 @@ _export(exports, {
372
399
  get variableFromArrayAssignmentNode () {
373
400
  return variableFromArrayAssignmentNode;
374
401
  },
402
+ get variableFromContainsNode () {
403
+ return variableFromContainsNode;
404
+ },
405
+ get variableFromEndsWithNode () {
406
+ return variableFromEndsWithNode;
407
+ },
375
408
  get variableFromEveryNode () {
376
409
  return variableFromEveryNode;
377
410
  },
@@ -393,6 +426,9 @@ _export(exports, {
393
426
  get variableFromSomeNode () {
394
427
  return variableFromSomeNode;
395
428
  },
429
+ get variableFromStartsWithNode () {
430
+ return variableFromStartsWithNode;
431
+ },
396
432
  get variableFromTermNode () {
397
433
  return variableFromTermNode;
398
434
  },
@@ -500,6 +536,18 @@ function ternaryFromTernaryNode(ternaryNode, context) {
500
536
  const ternary = new Ternary(context, string, node, breakPoint, term, ifExpression, elseExpression);
501
537
  return ternary;
502
538
  }
539
+ function containsFromContainsNode(containsNode, context) {
540
+ const { Contains } = _elements.default, node = containsNode, string = context.nodeAsString(node), breakPoint = null, variable = variableFromContainsNode(containsNode, context), substring = substringFromContainsNode(containsNode, context);
541
+ context = null;
542
+ const contains = new Contains(context, string, node, breakPoint, variable, substring);
543
+ return contains;
544
+ }
545
+ function endsWithFromEndsWithNode(endsWithNode, context) {
546
+ const { EndsWith } = _elements.default, node = endsWithNode, string = context.nodeAsString(node), breakPoint = null, variable = variableFromEndsWithNode(endsWithNode, context), substring = substringFromEndsWithNode(endsWithNode, context);
547
+ context = null;
548
+ const endsWith = new EndsWith(context, string, node, breakPoint, variable, substring);
549
+ return endsWith;
550
+ }
503
551
  function variableFromVariableNode(variableNode, context) {
504
552
  const { Variable } = _elements.default, node = variableNode, string = context.nodeAsString(node), breakPoint = null, type = typeFromVariableNode(variableNode, context), name = nameFromVariableNode(variableNode, context), expression = expressionFromVariableNode(variableNode, context);
505
553
  context = null;
@@ -558,6 +606,12 @@ function toIntegerFromToIntegerNode(toIntegerNode, context) {
558
606
  const toInteger = new ToInteger(context, string, node, breakPoint, variable);
559
607
  return toInteger;
560
608
  }
609
+ function startsWithFromStartsWithNode(startsWithNode, context) {
610
+ const { StartsWith } = _elements.default, node = startsWithNode, string = context.nodeAsString(node), breakPoint = null, variable = variableFromStartsWithNode(startsWithNode, context), substring = substringFromStartsWithNode(startsWithNode, context);
611
+ context = null;
612
+ const startsWith = new StartsWith(context, string, node, breakPoint, variable, substring);
613
+ return startsWith;
614
+ }
561
615
  function nodesQueryFromNodesQueryNode(nodesQueryNode, context) {
562
616
  const { NodesQuery } = _elements.default, node = nodesQueryNode, string = context.nodeAsString(node), breakPoint = null, variable = variableFromNodesQueryNode(nodesQueryNode, context), query = queryFromNodesQueryNode(nodesQueryNode, context);
563
617
  context = null;
@@ -571,7 +625,7 @@ function parametersFromParametersNode(parametersNode, context) {
571
625
  return parameters;
572
626
  }
573
627
  function expressionFromExpressionNode(expressionNode, context) {
574
- const { Expression } = _elements.default, node = expressionNode, term = termFromExpressionNode(expressionNode, context), some = someFromExpressionNode(expressionNode, context), every = everyFromExpressionNode(expressionNode, context), reduce = reduceFromExpressionNode(expressionNode, context), ternary = ternaryFromExpressionNode(expressionNode, context), nodeQuery = nodeQueryFromExpressionNode(expressionNode, context), nodesQuery = nodesQueryFromExpressionNode(expressionNode, context), lengthOf = lengthOfFromExpressionNode(expressionNode, context), toInteger = toIntegerFromExpressionNode(expressionNode, context), tryInteger = tryIntegerFromExpressionNode(expressionNode, context), returnBlock = returnBlockFromExpressionNode(expressionNode, context), procedureCall = procedureCallFromExpressionNode(expressionNode, context), properties = [
628
+ const { Expression } = _elements.default, node = expressionNode, term = termFromExpressionNode(expressionNode, context), some = someFromExpressionNode(expressionNode, context), every = everyFromExpressionNode(expressionNode, context), reduce = reduceFromExpressionNode(expressionNode, context), ternary = ternaryFromExpressionNode(expressionNode, context), nodeQuery = nodeQueryFromExpressionNode(expressionNode, context), nodesQuery = nodesQueryFromExpressionNode(expressionNode, context), lengthOf = lengthOfFromExpressionNode(expressionNode, context), toInteger = toIntegerFromExpressionNode(expressionNode, context), tryInteger = tryIntegerFromExpressionNode(expressionNode, context), contains = containsFromExpressionNode(expressionNode, context), endsWith = endsWithFromExpressionNode(expressionNode, context), startsWith = startsWithFromExpressionNode(expressionNode, context), returnBlock = returnBlockFromExpressionNode(expressionNode, context), procedureCall = procedureCallFromExpressionNode(expressionNode, context), properties = [
575
629
  term,
576
630
  some,
577
631
  every,
@@ -582,11 +636,14 @@ function expressionFromExpressionNode(expressionNode, context) {
582
636
  lengthOf,
583
637
  toInteger,
584
638
  tryInteger,
639
+ contains,
640
+ endsWith,
641
+ startsWith,
585
642
  returnBlock,
586
643
  procedureCall
587
644
  ], expressionString = (0, _string.expressionStringFromProperties)(properties, context), string = expressionString, breakPoint = null;
588
645
  context = null;
589
- const expression = new Expression(context, string, node, breakPoint, term, some, every, reduce, ternary, nodeQuery, nodesQuery, lengthOf, toInteger, tryInteger, returnBlock, procedureCall);
646
+ const expression = new Expression(context, string, node, breakPoint, term, some, every, reduce, ternary, nodeQuery, nodesQuery, lengthOf, toInteger, tryInteger, contains, endsWith, startsWith, returnBlock, procedureCall);
590
647
  return expression;
591
648
  }
592
649
  function tryIntegerFromTryIntegerNode(tryIntegerNode, context) {
@@ -858,6 +915,14 @@ function variableFromLengthOfNode(lengthOfNode, context) {
858
915
  const variableNode = lengthOfNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
859
916
  return variable;
860
917
  }
918
+ function variableFromContainsNode(containsNode, context) {
919
+ const variableNode = containsNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
920
+ return variable;
921
+ }
922
+ function variableFromEndsWithNode(endsWithNode, context) {
923
+ const variableNode = endsWithNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
924
+ return variable;
925
+ }
861
926
  function reduceFromExpressionNode(expressionNode, context) {
862
927
  let reduce = null;
863
928
  const reduceNode = expressionNode.getReduceNode();
@@ -874,6 +939,14 @@ function nameFromNamedBindingNode(namedBindingNode, context) {
874
939
  const name = namedBindingNode.getName();
875
940
  return name;
876
941
  }
942
+ function substringFromContainsNode(containsNode, context) {
943
+ const string = containsNode.getString(), substring = string; ///
944
+ return substring;
945
+ }
946
+ function substringFromEndsWithNode(endsWithNode, context) {
947
+ const string = endsWithNode.getString(), substring = string; ///
948
+ return substring;
949
+ }
877
950
  function aliasFromNamedBindingNode(namedBindingNode, context) {
878
951
  const alias = namedBindingNode.getAlias();
879
952
  return alias;
@@ -926,6 +999,10 @@ function variableFromTryIntegerNode(tryIntegerNode, context) {
926
999
  const variableNode = tryIntegerNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
927
1000
  return variable;
928
1001
  }
1002
+ function variableFromStartsWithNode(startsWithNode, context) {
1003
+ const variableNode = startsWithNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
1004
+ return variable;
1005
+ }
929
1006
  function variableFromNodesQueryNode(nodesQueryNode, context) {
930
1007
  const variableNode = nodesQueryNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
931
1008
  return variable;
@@ -938,6 +1015,22 @@ function lengthOfFromExpressionNode(expressionNode, context) {
938
1015
  }
939
1016
  return lengthOf;
940
1017
  }
1018
+ function containsFromExpressionNode(expressionNode, context) {
1019
+ let contains = null;
1020
+ const containsNode = expressionNode.getContainsNode();
1021
+ if (containsNode !== null) {
1022
+ contains = containsFromContainsNode(containsNode, context);
1023
+ }
1024
+ return contains;
1025
+ }
1026
+ function endsWithFromExpressionNode(expressionNode, context) {
1027
+ let endsWith = null;
1028
+ const endsWithNode = expressionNode.getEndsWithNode();
1029
+ if (endsWithNode !== null) {
1030
+ endsWith = endsWithFromEndsWithNode(endsWithNode, context);
1031
+ }
1032
+ return endsWith;
1033
+ }
941
1034
  function ifExpressionFromTernaryNode(ternaryNode, context) {
942
1035
  const ifExpressionNode = ternaryNode.getIfExpressionNode(), ifExpression = expressionFromExpressionNode(ifExpressionNode, context);
943
1036
  return ifExpression;
@@ -962,6 +1055,10 @@ function nodeQueryFromExpressionNode(expressionNode, context) {
962
1055
  }
963
1056
  return nodeQuery;
964
1057
  }
1058
+ function substringFromStartsWithNode(startsWithNode, context) {
1059
+ const string = startsWithNode.getString(), substring = string; ///
1060
+ return substring;
1061
+ }
965
1062
  function leftTermFromLogicalTermNode(logicalTermNode, context) {
966
1063
  const leftTermNode = logicalTermNode.getLeftTermNode(), leftTerm = termFromTermNode(leftTermNode, context);
967
1064
  return leftTerm;
@@ -998,6 +1095,14 @@ function tryIntegerFromExpressionNode(expressionNode, context) {
998
1095
  }
999
1096
  return tryInteger;
1000
1097
  }
1098
+ function startsWithFromExpressionNode(expressionNode, context) {
1099
+ let startsWith = null;
1100
+ const startsWithNode = expressionNode.getStartsWithNode();
1101
+ if (startsWithNode !== null) {
1102
+ startsWith = startsWithFromStartsWithNode(startsWithNode, context);
1103
+ }
1104
+ return startsWith;
1105
+ }
1001
1106
  function rightTermFromLogicalTermNode(logicalTermNode, context) {
1002
1107
  const rightTermNode = logicalTermNode.getRightTermNode(), rightTerm = termFromTermNode(rightTermNode, context);
1003
1108
  return rightTerm;
@@ -1176,4 +1281,4 @@ function variableAssignmentsArrayFromTypeAndVariableAssignmentsNode(type, variab
1176
1281
  return variableAssignmentsArray;
1177
1282
  }
1178
1283
 
1179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IHRlcm5hcnlTdHJpbmdGcm9tVGVybSxcbiAgICAgICAgIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMsXG4gICAgICAgICB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUsXG4gICAgICAgICBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlLFxuICAgICAgICAgZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUsXG4gICAgICAgICBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrLFxuICAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2ssXG4gICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSxcbiAgICAgICAgIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTb21lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNvbWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzb21lU3RyaW5nID0gc29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gc29tZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzb21lID0gbmV3IFNvbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKTtcblxuICByZXR1cm4gc29tZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIG5lZ2F0ZWRUZXJtID0gbmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGxvZ2ljYWxUZXJtID0gbG9naWNhbFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBjb21wYXJpc29uVGVybSA9IGNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgdmFyaWFibGUsXG4gICAgICBwcmltaXRpdmUsXG4gICAgICBuZWdhdGVkVGVybSxcbiAgICAgIGxvZ2ljYWxUZXJtLFxuICAgICAgYnJhY2tldGVkVGVybSxcbiAgICAgIGNvbXBhcmlzb25UZXJtXG4gICAgXSxcbiAgICB0ZXJtU3RyaW5nID0gdGVybVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgIHN0cmluZyA9IHRlcm1TdHJpbmcsICAvLy9cbiAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcHJpbWl0aXZlLCBuZWdhdGVkVGVybSwgbG9naWNhbFRlcm0sIGJyYWNrZXRlZFRlcm0sIGNvbXBhcmlzb25UZXJtKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGFyZ3VtZW50VHlwZSk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFsdWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICB2YXJpYWJsZSxcbiAgICAgICAgICBwcmltaXRpdmVcbiAgICAgICAgXSxcbiAgICAgICAgdmFsdWVTdHJpbmcgPSB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSB2YWx1ZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YWx1ZSA9IG5ldyBWYWx1ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBwcmltaXRpdmUpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXZlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXZlcnlOb2RlLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeVN0cmluZyA9IGV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBldmVyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5ID0gbmV3IEV2ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSk7XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxhYmVsTm9kZSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0Zyb21WYWx1ZXNOb2RlKHZhbHVlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYWx1ZXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB2YWx1ZU5vZGVzID0gdmFsdWVzTm9kZS5nZXRWYWx1ZU5vZGVzKCksXG4gICAgICAgIHZhbHVlc0FycmF5ID0gdmFsdWVzQXJyYXlGcm9tVmFsdWVOb2Rlcyh2YWx1ZU5vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSB2YWx1ZXNBcnJheSwgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhbHVlcyA9IG5ldyBWYWx1ZXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWR1Y2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVkdWNlTm9kZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IGluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlU3RyaW5nID0gcmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGluaXRpYWxWYWx1ZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gcmVkdWNlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZHVjZSA9IG5ldyBSZWR1Y2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgaW5pdGlhbFZhbHVlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiByZWR1Y2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBiaW5kaW5nTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVsaWRlZCA9IGVsaWRlZEZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZyA9IG5ldyBCaW5kaW5nKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSwgZWxpZGVkKTtcblxuICByZXR1cm4gYmluZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm5hcnlGcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJuYXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm5hcnlOb2RlLCAvLy9cbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbHNlRXhwcmVzc2lvbiA9IGVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeVN0cmluZyA9IHRlcm5hcnlTdHJpbmdGcm9tVGVybSh0ZXJtKSxcbiAgICAgICAgc3RyaW5nID0gdGVybmFyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm5hcnkgPSBuZXcgVGVybmFyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIGlmRXhwcmVzc2lvbiwgZWxzZUV4cHJlc3Npb24pO1xuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYmluZGluZ3NOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYmluZGluZ3NBcnJheSA9IGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gYmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZ3MgPSBuZXcgQmluZGluZ3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbmd0aE9mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxlbmd0aE9mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsZW5ndGhPZiA9IG5ldyBMZW5ndGhPZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gbGVuZ3RoT2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBhcnJheUFzc2lnbm1lbnQgPSBhcnJheUFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgb2JqZWN0QXNzaWdtZW50ID0gb2JqZWN0QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbWVudHMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5QXNzaWdubWVudCwgb2JqZWN0QXNzaWdtZW50LCB2YXJpYWJsZUFzc2lnbWVudHMpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZU5vZGUsICAvLy9cbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVN0cmluZyA9IHByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2sodHlwZSwgbGFiZWwsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSxcbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHByb2NlZHVyZSA9IG5ldyBQcm9jZWR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBsYWJlbCwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spO1xuXG4gIHJldHVybiBwcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUGFyYW1ldGVyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVyID0gbmV3IFBhcmFtZXRlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTm9kZVF1ZXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5vZGVRdWVyeU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcXVlcnkgPSBxdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVRdWVyeSA9IG5ldyBOb2RlUXVlcnkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcXVlcnkpO1xuXG4gIHJldHVybiBub2RlUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJpbWl0aXZlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByaW1pdGl2ZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcmltaXRpdmUgPSBuZXcgUHJpbWl0aXZlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdmFsdWUpO1xuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVG9JbnRlZ2VyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRvSW50ZWdlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0b0ludGVnZXIgPSBuZXcgVG9JbnRlZ2VyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUpO1xuXG4gIHJldHVybiB0b0ludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTm9kZXNRdWVyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBub2Rlc1F1ZXJ5Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc1F1ZXJ5ID0gbmV3IE5vZGVzUXVlcnkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcXVlcnkpO1xuXG4gIHJldHVybiBub2Rlc1F1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlcnMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyc05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBwYXJhbWV0ZXJzQXJyYXkgPSBwYXJhbWV0ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IHBhcmFtZXRlcnNBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBQYXJhbWV0ZXJzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEV4cHJlc3Npb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXhwcmVzc2lvbk5vZGUsICAvLy9cbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzb21lID0gc29tZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGV2ZXJ5ID0gZXZlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWR1Y2UgPSByZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJuYXJ5ID0gdGVybmFyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vZGVRdWVyeSA9IG5vZGVRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVuZ3RoT2YgPSBsZW5ndGhPZkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvSW50ZWdlciA9IHRvSW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRyeUludGVnZXIgPSB0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICB0ZXJtLFxuICAgICAgICAgIHNvbWUsXG4gICAgICAgICAgZXZlcnksXG4gICAgICAgICAgcmVkdWNlLFxuICAgICAgICAgIHRlcm5hcnksXG4gICAgICAgICAgbm9kZVF1ZXJ5LFxuICAgICAgICAgIG5vZGVzUXVlcnksXG4gICAgICAgICAgbGVuZ3RoT2YsXG4gICAgICAgICAgdG9JbnRlZ2VyLFxuICAgICAgICAgIHRyeUludGVnZXIsXG4gICAgICAgICAgcmV0dXJuQmxvY2ssXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbFxuICAgICAgICBdLFxuICAgICAgICBleHByZXNzaW9uU3RyaW5nID0gZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSBleHByZXNzaW9uU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBuZXcgRXhwcmVzc2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHNvbWUsIGV2ZXJ5LCByZWR1Y2UsIHRlcm5hcnksIG5vZGVRdWVyeSwgbm9kZXNRdWVyeSwgbGVuZ3RoT2YsIHRvSW50ZWdlciwgdHJ5SW50ZWdlciwgcmV0dXJuQmxvY2ssIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ5SW50ZWdlckZyb21UcnlJbnRlZ2VyTm9kZSh0cnlJbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRyeUludGVnZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHJ5SW50ZWdlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRyeUludGVnZXIgPSBuZXcgVHJ5SW50ZWdlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdHJ5SW50ZWdlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZXR1cm5CbG9jayB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZXR1cm5CbG9ja05vZGUsIC8vL1xuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9uc2Vuc2ljYWwgPSBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuU3RhdGVtZW50ID0gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50KSxcbiAgICAgICAgc3RyaW5nID0gcmV0dXJuQmxvY2tTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuQmxvY2sgPSBuZXcgUmV0dXJuQmxvY2soY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzLCBub25zZW5zaWNhbCwgcmV0dXJuU3RhdGVtZW50KTtcblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkVGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmVnYXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmVnYXRlZFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtTm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OZWdhdGVkVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZFRlcm0gPSBuZXcgTmVnYXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB0ZXJtKTtcblxuICByZXR1cm4gbmVnYXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTG9naWNhbFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbG9naWNhbFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGlzanVuY3Rpb24gPSBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsb2dpY2FsVGVybSA9IG5ldyBMb2dpY2FsVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGRpc2p1bmN0aW9uLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gbG9naWNhbFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmFtZWRCaW5kaW5nIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5hbWVkQmluZGluZ05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbGlhcyA9IGFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5nID0gbmV3IE5hbWVkQmluZGluZyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIGFsaWFzKTtcblxuICByZXR1cm4gbmFtZWRCaW5kaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5hbWVkQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmFtZWRCaW5kaW5nc05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWVkQmluZGluZ05vZGVzID0gbmFtZWRCaW5kaW5nc05vZGUuZ2V0TmFtZWRCaW5kaW5nTm9kZXMoKSxcbiAgICAgICAgbmFtZWRCaW5kaW5nc0FycmF5ID0gbmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMobmFtZWRCaW5kaW5nTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IG5hbWVkQmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5ncyA9IG5ldyBOYW1lZEJpbmRpbmdzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiBuYW1lZEJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYnJhY2tldGVkVGVybU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRUZXJtID0gbmV3IEJyYWNrZXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtKTtcblxuICByZXR1cm4gYnJhY2tldGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVDYWxsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgdmFsdWVzKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21wYXJpc29uVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21wYXJpc29uVGVybSA9IG5ldyBDb21wYXJpc29uVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBjb21wYXJpc29uVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRCaW5kaW5nc05vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZS5nZXROYW1lZEJpbmRpbmdzTm9kZSgpLFxuICAgICAgICBuYW1lZEJpbmRpbmdzID0gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG5hbWVkQmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUFzc2lnbm1lbnRGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXJyYXlBc3NpZ25tZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFycmF5QXNzaWdubWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYmluZGluZ3MgPSBiaW5kaW5nc0Zyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGFycmF5QXNzaWdubWVudCA9IG5ldyBBcnJheUFzc2lnbm1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYmluZGluZ3MpO1xuXG4gIHJldHVybiBhcnJheUFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmV0dXJuU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJldHVyblN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5TdGF0ZW1lbnQgPSBuZXcgUmV0dXJuU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFsdWUpO1xuXG4gIHJldHVybiByZXR1cm5TdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RBc3NpZ25tZW50RnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgT2JqZWN0QXNzaWdtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWVkQmluZGluZ3MgPSBuYW1lZEJpbmRpbmdzRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBvYmplY3RBc3NpZ25tZW50ID0gbmV3IE9iamVjdEFzc2lnbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBuYW1lZEJpbmRpbmdzKTtcblxuICByZXR1cm4gb2JqZWN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBbm9ueW1vdXNQcm9jZWR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgIC8vL1xuICAgICAgICB0eXBlID0gdHlwZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vbnltb3VzUHJvY2VkdXJlU3RyaW5nID0gYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2sodHlwZSwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spLFxuICAgICAgICBzdHJpbmcgPSBub255bW91c1Byb2NlZHVyZVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZSA9IG5ldyBBbm9ueW1vdXNQcm9jZWR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudHNGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZUFzc2lnbm1lbnRzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCAvLy9cbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c0FycmF5KSxcbiAgICAgICAgYXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXksIC8vL1xuICAgICAgICBzdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50cyA9IG5ldyBWYXJpYWJsZUFzc2lnbm1lbnRzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZUFzc2lnbm1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlKHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlKHR5cGUsIHZhcmlhYmxlLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBhc3NpZ25tZW50ID0gbmV3IFZhcmlhYmxlQXNzaWdubWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gYXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHR5cGVOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gbGFiZWxOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZU5vZGUgPSByZWR1Y2VOb2RlLmdldFZhbHVlTm9kZSgpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBiaW5kaW5nTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlTm9kZSA9IGJpbmRpbmdOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVOb2RlICE9IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHNvbWVOb2RlLmdldFZhcmlhYmxlTm9kZSgpLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gIGNvbnN0IG5hbWUgPSB2YXJpYWJsZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwcm9jZWR1cmVOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJpbWl0aXZlID0gbnVsbDtcblxuICBjb25zdCBwcmltaXRpdmVOb2RlID0gdGVybU5vZGUuZ2V0UHJpbWl0aXZlTm9kZSgpO1xuXG4gIGlmIChwcmltaXRpdmVOb2RlICE9PSBudWxsKSB7XG4gICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBldmVyeU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWxpZGVkRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGVsaWRlZCA9IGJpbmRpbmdOb2RlLmlzRWxpZGVkKCk7XG5cbiAgcmV0dXJuIGVsaWRlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gcGFyYW1ldGVyTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcmVmZXJlbmNlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0eXBlTmFtZSA9IHByaW1pdGl2ZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgdHlwZSA9IFR5cGUuZnJvbVR5cGVOYW1lKHR5cGVOYW1lLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YWx1ZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltaXRpdmVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJpbWl0aXZlID0gbnVsbDtcblxuICBjb25zdCBwcmltaXRpdmVOb2RlID0gdmFsdWVOb2RlLmdldFByaW1pdGl2ZU5vZGUoKTtcblxuICBpZiAocHJpbWl0aXZlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByaW1pdGl2ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSByZWR1Y2VOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBub2RlUXVlcnlOb2RlLmdldFN0cmluZygpLFxuICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKGV4cHJlc3Npb25TdHJpbmcpO1xuXG4gIHJldHVybiBxdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZSA9IHByaW1pdGl2ZU5vZGUuZ2V0VmFsdWUoKTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlID0gcHJvY2VkdXJlTm9kZS5nZXRMYWJlbE5vZGUoKSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzb21lID0gbnVsbDtcblxuICBjb25zdCBzb21lTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFNvbWVOb2RlKCk7XG5cbiAgaWYgKHNvbWVOb2RlICE9PSBudWxsKSB7XG4gICAgc29tZSA9IHNvbWVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNvbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgbmVnYXRlZFRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IG5lZ2F0ZWRUZXJtTm9kZSA9IHRlcm1Ob2RlLmdldE5lZ2F0ZWRUZXJtTm9kZSgpO1xuXG4gIGlmIChuZWdhdGVkVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBuZWdhdGVkVGVybSA9IG5lZ2F0ZWRUZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZShuZWdhdGVkVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5lZ2F0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9naWNhbFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxvZ2ljYWxUZXJtID0gbnVsbDtcblxuICBjb25zdCBsb2dpY2FsVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXRMb2dpY2FsVGVybU5vZGUoKTtcblxuICBpZiAobG9naWNhbFRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgbG9naWNhbFRlcm0gPSBsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBsb2dpY2FsVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IG5vZGVzUXVlcnlOb2RlLmdldFN0cmluZygpLFxuICAgICAgICBleHByZXNzaW9uU3RyaW5nID0gc3RyaW5nLCAgLy8vXG4gICAgICAgIHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoZXhwcmVzc2lvblN0cmluZyk7XG5cbiAgcmV0dXJuIHF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGV2ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBldmVyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRFdmVyeU5vZGUoKTtcblxuICBpZiAoZXZlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgZXZlcnkgPSBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBldmVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gQk9PTEVBTl9UWVBFX05BTUU7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU5lZ2F0ZWRUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IEJPT0xFQU5fVFlQRV9OQU1FO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gbmVnYXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgYXJndW1lbnRUeXBlID0gbnVsbDtcblxuICBjb25zdCBhcmd1bWVudFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0QXJndW1lbnRUeXBlTmFtZSgpO1xuXG4gIGlmIChhcmd1bWVudFR5cGVOYW1lICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cztcblxuICAgIGFyZ3VtZW50VHlwZSA9IFR5cGUuZnJvbVR5cGVOYW1lKGFyZ3VtZW50VHlwZU5hbWUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFyZ3VtZW50VHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbUxlbmd0aE9mTm9kZShsZW5ndGhPZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gbGVuZ3RoT2ZOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVkdWNlID0gbnVsbDtcblxuICBjb25zdCByZWR1Y2VOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UmVkdWNlTm9kZSgpO1xuXG4gIGlmIChyZWR1Y2VOb2RlICE9PSBudWxsKSB7XG4gICAgcmVkdWNlID0gcmVkdWNlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVkdWNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBuYW1lZEJpbmRpbmdOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBuYW1lZEJpbmRpbmdOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbGlhcyA9IG5hbWVkQmluZGluZ05vZGUuZ2V0QWxpYXMoKTtcblxuICByZXR1cm4gYWxpYXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gbm9kZVF1ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJuYXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJuYXJ5ID0gbnVsbDtcblxuICBjb25zdCB0ZXJuYXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRlcm5hcnlOb2RlKCk7XG5cbiAgaWYgKHRlcm5hcnlOb2RlICE9PSBudWxsKSB7XG4gICAgdGVybmFyeSA9IHRlcm5hcnlGcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm5hcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBicmFja2V0ZWRUZXJtID0gbnVsbDtcblxuICBjb25zdCBicmFja2V0ZWRUZXJtTm9kZSA9IHRlcm1Ob2RlLmdldEJyYWNrZXRlZFRlcm1Ob2RlKCk7XG5cbiAgaWYgKGJyYWNrZXRlZFRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgYnJhY2tldGVkVGVybSA9IGJyYWNrZXRlZFRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGJyYWNrZXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Ub0ludGVnZXJOb2RlKHRvSW50ZWdlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdG9JbnRlZ2VyTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gYnJhY2tldGVkVGVybU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJpc29uVGVybUZyb21UZXJtTm9kZSh0ZXJtTk9kZSwgY29udGV4dCkge1xuICBsZXQgY29tcGFyaXNvblRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IGNvbXBhcmlzb25UZXJtTm9kZSA9IHRlcm1OT2RlLmdldENvbXBhcmlzb25UZXJtTm9kZSgpO1xuXG4gIGlmIChjb21wYXJpc29uVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBjb21wYXJpc29uVGVybSA9IGNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBhcmlzb25UZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbFZhbHVlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZSA9IHZhbHVlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IHZhbHVlOyAvLy9cblxuICByZXR1cm4gaW5pdGlhbFZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGV4cHJlc3Npb24gPSBudWxsO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdHJ5SW50ZWdlck5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gbm9kZXNRdWVyeU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoT2ZGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxlbmd0aE9mID0gbnVsbDtcblxuICBjb25zdCBsZW5ndGhPZk5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRMZW5ndGhPZk5vZGUoKTtcblxuICBpZiAobGVuZ3RoT2ZOb2RlICE9PSBudWxsKSB7XG4gICAgbGVuZ3RoT2YgPSBsZW5ndGhPZkZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBsZW5ndGhPZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZkV4cHJlc3Npb25Ob2RlID0gdGVybmFyeU5vZGUuZ2V0SWZFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGlmRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpZkV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0b0ludGVnZXIgPSBudWxsO1xuXG4gIGNvbnN0IHRvSW50ZWdlck5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUb0ludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRvSW50ZWdlck5vZGUgIT09IG51bGwpIHtcbiAgICB0b0ludGVnZXIgPSB0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0b0ludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vZGVRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZVF1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVRdWVyeU5vZGUoKTtcblxuICBpZiAobm9kZVF1ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIG5vZGVRdWVyeSA9IG5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFZhbHVlc05vZGUoKSxcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzRnJvbVZhbHVlc05vZGUodmFsdWVzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBwcm9jZWR1cmVOb2RlLmdldFJldHVybkJsb2NrTm9kZSgpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gbnVsbDtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVOb2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZS5nZXRWYWx1ZU5vZGUoKSxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBub2Rlc1F1ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc1F1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVzUXVlcnlOb2RlKCk7XG5cbiAgaWYgKG5vZGVzUXVlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgbm9kZXNRdWVyeSA9IG5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0cnlJbnRlZ2VyID0gbnVsbDtcblxuICBjb25zdCB0cnlJbnRlZ2VyTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRyeUludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRyeUludGVnZXJOb2RlICE9PSBudWxsKSB7XG4gICAgdHJ5SW50ZWdlciA9IHRyeUludGVnZXJGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRyeUludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbHNlRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBlbHNlRXhwcmVzc2lvbk5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRFbHNlRXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgZWxzZUV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGVsc2VFeHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGVsc2VFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJldHVybkJsb2NrID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRSZXR1cm5CbG9ja05vZGUoKTtcblxuICBpZiAocmV0dXJuQmxvY2tOb2RlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHJldHVybkJsb2NrTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1lbnROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RhdGVtZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gY29tcGFyaXNvblRlcm1Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZU5vZGUgPSBzb21lTm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5vbnNlbnNpY2FsID0gcmV0dXJuQmxvY2tOb2RlLmlzTm9uc2Vuc2ljYWwoKTtcblxuICByZXR1cm4gbm9uc2Vuc2ljYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRpc2p1bmN0aW9uID0gbG9naWNhbFRlcm1Ob2RlLmlzRGlzanVuY3Rpb24oKTtcblxuICByZXR1cm4gZGlzanVuY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUobmFtZSksXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIHZhbHVlKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gZXZlcnlOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUuZ2V0UmlnaHRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmluZGluZ3NOb2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZS5nZXRCaW5kaW5nc05vZGUoKSxcbiAgICAgICAgYmluZGluZ3MgPSBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gcmVkdWNlTm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcnJheUFzc2lnbm1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGFycmF5QXNzaWdubWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEFycmF5QXNzaWdubWVudE5vZGUoKTtcblxuICBpZiAoYXJyYXlBc3NpZ25tZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGFycmF5QXNzaWdubWVudCA9IGFycmF5QXNzaWdubWVudEZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBvYmplY3RBc3NpZ25tZW50ID0gbnVsbDtcblxuICBjb25zdCBvYmplY3RBc3NpZ25tZW50Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0T2JqZWN0QXNzaWdubWVudE5vZGUoKTtcblxuICBpZiAob2JqZWN0QXNzaWdubWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBvYmplY3RBc3NpZ25tZW50ID0gb2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVyblN0YXRlbWVudE5vZGUgPSByZXR1cm5CbG9ja05vZGUuZ2V0UmV0dXJuU3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICByZXR1cm5TdGF0ZW1lbnQgPSByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmV0dXJuU3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlQXNzaWdubWVudHMgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlQXNzaWdubWVudHMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlKHZhcmlhYmxlQXNzaWdtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uTm9kZSA9IHZhcmlhYmxlQXNzaWdtZW50Tm9kZS5nZXRFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVybkJsb2NrTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0FycmF5RnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXNBcnJheSA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7IC8vL1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0FycmF5RnJvbVZhbHVlTm9kZXModmFsdWVOb2RlcywgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZXNBcnJheSA9IHZhbHVlTm9kZXMubWFwKCh2YWx1ZU5vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ3NBcnJheUZyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJpbmRpbmdOb2RlcyA9IGJpbmRpbmdzTm9kZS5nZXRCaW5kaW5nTm9kZXMoKSxcbiAgICAgICAgYmluZGluZ3NBcnJheSA9IGJpbmRpbmdOb2Rlcy5tYXAoKGJpbmRpbmdOb2RlKSA9PiB7IC8vL1xuICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBiaW5kaW5nO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gYmluZGluZ3NBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNBcnJheUZyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnNOb2RlLmdldFBhcmFtZXRlck5vZGVzKCksXG4gICAgICAgIHBhcmFtZXRlcnNBcnJheSA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyhuYW1lZEJpbmRpbmdOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBuYW1lZFBhcmFtZXRlcnNBcnJheSA9IG5hbWVkQmluZGluZ05vZGVzLm1hcCgobmFtZWRCaW5kaW5nTm9kZSkgPT4geyAvLy9cbiAgICBjb25zdCBuYW1lZEJpbmRpbmcgPSBuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBuYW1lZEJpbmRpbmc7XG4gIH0pO1xuXG4gIHJldHVybiBuYW1lZFBhcmFtZXRlcnNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50Tm9kZXMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnROb2RlcygpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2Rlcy5tYXAoKHZhcmlhYmxlQXNzaWdubWVudE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5O1xufVxuIl0sIm5hbWVzIjpbImFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21FdmVyeU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZSIsImFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSIsImFycmF5QXNzaWdubWVudEZyb21BcnJheUFzc2lnbm1lbnROb2RlIiwiYXJyYXlBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUiLCJiaW5kaW5nRnJvbUJpbmRpbmdOb2RlIiwiYmluZGluZ3NBcnJheUZyb21CaW5kaW5nc05vZGUiLCJiaW5kaW5nc0Zyb21BcnJheUFzc2lnbm1lbnROb2RlIiwiYmluZGluZ3NGcm9tQmluZGluZ3NOb2RlIiwiYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZSIsImJyYWNrZXRlZFRlcm1Gcm9tVGVybU5vZGUiLCJjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUiLCJjb21wYXJpc29uVGVybUZyb21UZXJtTm9kZSIsImRpc2p1bmN0aW9uRnJvbUxvZ2ljYWxUZXJtTm9kZSIsImVsaWRlZEZyb21CaW5kaW5nTm9kZSIsImVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZXZlcnlGcm9tRXZlcnlOb2RlIiwiZXZlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZU5vZGUiLCJpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUiLCJpbml0aWFsVmFsdWVGcm9tUmVkdWNlTm9kZSIsImxhYmVsRnJvbUxhYmVsTm9kZSIsImxhYmVsRnJvbVByb2NlZHVyZU5vZGUiLCJsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUiLCJsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJsZW5ndGhPZkZyb21FeHByZXNzaW9uTm9kZSIsImxlbmd0aE9mRnJvbUxlbmd0aE9mTm9kZSIsImxvZ2ljYWxUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZSIsImxvZ2ljYWxUZXJtRnJvbVRlcm1Ob2RlIiwibmFtZUZyb21CaW5kaW5nTm9kZSIsIm5hbWVGcm9tTGFiZWxOb2RlIiwibmFtZUZyb21OYW1lZEJpbmRpbmdOb2RlIiwibmFtZUZyb21QYXJhbmV0ZXJOb2RlIiwibmFtZUZyb21SZWZlcmVuY2VOb2RlIiwibmFtZUZyb21UeXBlTm9kZSIsIm5hbWVGcm9tVmFyaWFibGVOb2RlIiwibmFtZWRCaW5kaW5nRnJvbU5hbWVkQmluZGluZ05vZGUiLCJuYW1lZEJpbmRpbmdzRnJvbU5hbWVkQmluZGluZ3NOb2RlIiwibmFtZWRCaW5kaW5nc0Zyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsIm5hbWVkUGFyYW1ldGVyc0FycmF5RnJvbU5hbWVkQmluZGluZ05vZGVzIiwibmVnYXRlZEZyb21Db21wYXJpc29uVGVybU5vZGUiLCJuZWdhdGVkVGVybUZyb21OZWdhdGVkVGVybU5vZGUiLCJuZWdhdGVkVGVybUZyb21UZXJtTm9kZSIsIm5vZGVRdWVyeUZyb21FeHByZXNzaW9uTm9kZSIsIm5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlIiwibm9kZXNRdWVyeUZyb21FeHByZXNzaW9uTm9kZSIsIm5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUiLCJub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUiLCJvYmplY3RBc3NpZ25tZW50RnJvbU9iamVjdEFzc2lnbm1lbnROb2RlIiwib2JqZWN0QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlIiwicGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUiLCJwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUiLCJwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlIiwicGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVOb2RlIiwicHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUiLCJwcmltaXRpdmVGcm9tVGVybU5vZGUiLCJwcmltaXRpdmVGcm9tVmFsdWVOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21FeHByZXNzaW9uTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVGcm9tUHJvY2VkdXJlTm9kZSIsInF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUiLCJxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsInJlZHVjZUZyb21FeHByZXNzaW9uTm9kZSIsInJlZHVjZUZyb21SZWR1Y2VOb2RlIiwicmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZXR1cm5CbG9ja0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwicmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUiLCJyZXR1cm5CbG9ja0Zyb21Qcm9jZWR1cmVOb2RlIiwicmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlIiwicmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZSIsInJldHVyblN0YXRlbWVudEZyb21SZXR1cm5TdGF0ZW1lbnROb2RlIiwicmlnaHRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZSIsInJpZ2h0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJzb21lRnJvbUV4cHJlc3Npb25Ob2RlIiwic29tZUZyb21Tb21lTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUiLCJ0ZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlIiwidGVybUZyb21FeHByZXNzaW9uTm9kZSIsInRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVGVybmFyeU5vZGUiLCJ0ZXJtc0FycmF5RnJvbVRlcm1Ob2RlcyIsInRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlIiwidG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlIiwidG9JbnRlZ2VyRnJvbVRvSW50ZWdlck5vZGUiLCJ0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlIiwidHJ5SW50ZWdlckZyb21UcnlJbnRlZ2VyTm9kZSIsInR5cGVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInR5cGVGcm9tQmluZGluZ05vZGUiLCJ0eXBlRnJvbUxvZ2ljYWxUZXJtTm9kZSIsInR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZSIsInR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlIiwidHlwZUZyb21QYXJhbmV0ZXJOb2RlIiwidHlwZUZyb21QcmltaXRpdmVOb2RlIiwidHlwZUZyb21Qcm9jZWR1cmVOb2RlIiwidHlwZUZyb21UeXBlTm9kZSIsInR5cGVGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlTm9kZSIsInZhbHVlRnJvbVByaW1pdGl2ZU5vZGUiLCJ2YWx1ZUZyb21SZWR1Y2VOb2RlIiwidmFsdWVGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUiLCJ2YWx1ZUZyb21WYWx1ZU5vZGUiLCJ2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzIiwidmFsdWVzRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwidmFsdWVzRnJvbVZhbHVlc05vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGF0ZW1lbnROb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInZhcmlhYmxlRnJvbUFycmF5QXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21FdmVyeU5vZGUiLCJ2YXJpYWJsZUZyb21MZW5ndGhPZk5vZGUiLCJ2YXJpYWJsZUZyb21Ob2RlUXVlcnlOb2RlIiwidmFyaWFibGVGcm9tTm9kZXNRdWVyeU5vZGUiLCJ2YXJpYWJsZUZyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlRnJvbVJlZHVjZU5vZGUiLCJ2YXJpYWJsZUZyb21Tb21lTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVG9JbnRlZ2VyTm9kZSIsInZhcmlhYmxlRnJvbVRyeUludGVnZXJOb2RlIiwidmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlIiwidmFyaWFibGVGcm9tVmFsdWVOb2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwic29tZU5vZGUiLCJjb250ZXh0IiwiU29tZSIsImVsZW1lbnRzIiwibm9kZSIsInZhcmlhYmxlIiwiYW5vbnltb3VzUHJvY2VkdXJlIiwic29tZVN0cmluZyIsInNvbWVTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJzdHJpbmciLCJicmVha1BvaW50Iiwic29tZSIsInRlcm1Ob2RlIiwiVGVybSIsInByaW1pdGl2ZSIsIm5lZ2F0ZWRUZXJtIiwibG9naWNhbFRlcm0iLCJicmFja2V0ZWRUZXJtIiwiY29tcGFyaXNvblRlcm0iLCJwcm9wZXJ0aWVzIiwidGVybVN0cmluZyIsInRlcm1TdHJpbmdGcm9tUHJvcGVydGllcyIsInRlcm0iLCJ0eXBlTm9kZSIsIlR5cGUiLCJub2RlQXNTdHJpbmciLCJuYW1lIiwiYXJndW1lbnRUeXBlIiwidHlwZSIsInZhbHVlTm9kZSIsIlZhbHVlIiwidmFsdWVTdHJpbmciLCJ2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidmFsdWUiLCJlcnJvck5vZGUiLCJFcnJvciIsImVycm9yIiwiZXZlcnlOb2RlIiwiRXZlcnkiLCJldmVyeVN0cmluZyIsImV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwiZXZlcnkiLCJsYWJlbE5vZGUiLCJMYWJlbCIsImxhYmVsIiwidmFsdWVzTm9kZSIsIlZhbHVlcyIsInZhbHVlTm9kZXMiLCJnZXRWYWx1ZU5vZGVzIiwidmFsdWVzQXJyYXkiLCJhcnJheSIsInZhbHVlcyIsInJlZHVjZU5vZGUiLCJSZWR1Y2UiLCJpbml0aWFsVmFsdWUiLCJyZWR1Y2VTdHJpbmciLCJyZWR1Y2VTdHJpbmdGcm9tVmFyaWFibGVJbml0aWFsRXhwcmVzc2lvbkFuZEFub255bW91c1Byb2NlZHVyZSIsInJlZHVjZSIsImJpbmRpbmdOb2RlIiwiQmluZGluZyIsImVsaWRlZCIsImJpbmRpbmciLCJ0ZXJuYXJ5Tm9kZSIsIlRlcm5hcnkiLCJpZkV4cHJlc3Npb24iLCJlbHNlRXhwcmVzc2lvbiIsInRlcm5hcnlTdHJpbmciLCJ0ZXJuYXJ5U3RyaW5nRnJvbVRlcm0iLCJ0ZXJuYXJ5IiwidmFyaWFibGVOb2RlIiwiVmFyaWFibGUiLCJleHByZXNzaW9uIiwiYmluZGluZ3NOb2RlIiwiQmluZGluZ3MiLCJiaW5kaW5nc0FycmF5IiwiYmluZGluZ3MiLCJsZW5ndGhPZk5vZGUiLCJMZW5ndGhPZiIsImxlbmd0aE9mIiwic3RhdGVtZW50Tm9kZSIsIlN0YXRlbWVudCIsImFycmF5QXNzaWdubWVudCIsIm9iamVjdEFzc2lnbWVudCIsInZhcmlhYmxlQXNzaWdtZW50cyIsInN0YXRlbWVudCIsInByb2NlZHVyZU5vZGUiLCJQcm9jZWR1cmUiLCJwYXJhbWV0ZXJzIiwicmV0dXJuQmxvY2siLCJwcm9jZWR1cmVTdHJpbmciLCJwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrIiwicHJvY2VkdXJlIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJub2RlUXVlcnlOb2RlIiwiTm9kZVF1ZXJ5IiwicXVlcnkiLCJub2RlUXVlcnkiLCJwcmltaXRpdmVOb2RlIiwiUHJpbWl0aXZlIiwidG9JbnRlZ2VyTm9kZSIsIlRvSW50ZWdlciIsInRvSW50ZWdlciIsIm5vZGVzUXVlcnlOb2RlIiwiTm9kZXNRdWVyeSIsIm5vZGVzUXVlcnkiLCJwYXJhbWV0ZXJzTm9kZSIsIlBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzQXJyYXkiLCJleHByZXNzaW9uTm9kZSIsIkV4cHJlc3Npb24iLCJ0cnlJbnRlZ2VyIiwicHJvY2VkdXJlQ2FsbCIsImV4cHJlc3Npb25TdHJpbmciLCJleHByZXNzaW9uU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ0cnlJbnRlZ2VyTm9kZSIsIlRyeUludGVnZXIiLCJyZXR1cm5CbG9ja05vZGUiLCJSZXR1cm5CbG9jayIsInN0YXRlbWVudHMiLCJub25zZW5zaWNhbCIsInJldHVyblN0YXRlbWVudCIsInJldHVybkJsb2NrU3RyaW5nIiwicmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsIm5lZ2F0ZWRUZXJtTm9kZSIsIk5lZ2F0ZWRUZXJtIiwiZ2V0VGVybU5vZGUiLCJsb2dpY2FsVGVybU5vZGUiLCJMb2dpY2FsVGVybSIsImRpc2p1bmN0aW9uIiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJuYW1lZEJpbmRpbmdOb2RlIiwiTmFtZWRCaW5kaW5nIiwiYWxpYXMiLCJuYW1lZEJpbmRpbmciLCJuYW1lZEJpbmRpbmdzTm9kZSIsIk5hbWVkQmluZGluZ3MiLCJuYW1lZEJpbmRpbmdOb2RlcyIsImdldE5hbWVkQmluZGluZ05vZGVzIiwibmFtZWRCaW5kaW5nc0FycmF5IiwibmFtZWRCaW5kaW5ncyIsImJyYWNrZXRlZFRlcm1Ob2RlIiwiQnJhY2tldGVkVGVybSIsInByb2NlZHVyZUNhbGxOb2RlIiwiUHJvY2VkdXJlQ2FsbCIsImNvbXBhcmlzb25UZXJtTm9kZSIsIkNvbXBhcmlzb25UZXJtIiwibmVnYXRlZCIsIm9iamVjdEFzc2lnbm1lbnROb2RlIiwiZ2V0TmFtZWRCaW5kaW5nc05vZGUiLCJhcnJheUFzc2lnbm1lbnROb2RlIiwiQXJyYXlBc3NpZ25tZW50IiwicmV0dXJuU3RhdGVtZW50Tm9kZSIsIlJldHVyblN0YXRlbWVudCIsIk9iamVjdEFzc2lnbWVudCIsIm9iamVjdEFzc2lnbm1lbnQiLCJhbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwiQW5vbnltb3VzUHJvY2VkdXJlIiwibm9ueW1vdXNQcm9jZWR1cmVTdHJpbmciLCJhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsInZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwiVmFyaWFibGVBc3NpZ25tZW50cyIsInZhcmlhYmxlQXNzaWdubWVudHNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZyIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50cyIsInZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJWYXJpYWJsZUFzc2lnbm1lbnQiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlIiwiYXNzaWdubWVudCIsImdldE5hbWUiLCJnZXRWYWx1ZU5vZGUiLCJnZXRUeXBlTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsImdldFByaW1pdGl2ZU5vZGUiLCJpc0VsaWRlZCIsInR5cGVOYW1lIiwiZ2V0VHlwZU5hbWUiLCJmcm9tVHlwZU5hbWUiLCJnZXRTdHJpbmciLCJRdWVyeSIsImZyb21FeHByZXNzaW9uU3RyaW5nIiwiZ2V0VmFsdWUiLCJnZXRMYWJlbE5vZGUiLCJnZXRTb21lTm9kZSIsImdldE5lZ2F0ZWRUZXJtTm9kZSIsImdldExvZ2ljYWxUZXJtTm9kZSIsImdldEV2ZXJ5Tm9kZSIsIkJPT0xFQU5fVFlQRV9OQU1FIiwiYXJndW1lbnRUeXBlTmFtZSIsImdldEFyZ3VtZW50VHlwZU5hbWUiLCJnZXRSZWR1Y2VOb2RlIiwiZ2V0QWxpYXMiLCJnZXRUZXJuYXJ5Tm9kZSIsImdldEJyYWNrZXRlZFRlcm1Ob2RlIiwidGVybU5PZGUiLCJnZXRDb21wYXJpc29uVGVybU5vZGUiLCJnZXRMZW5ndGhPZk5vZGUiLCJpZkV4cHJlc3Npb25Ob2RlIiwiZ2V0SWZFeHByZXNzaW9uTm9kZSIsImdldFBhcmFtZXRlcnNOb2RlIiwiZ2V0VG9JbnRlZ2VyTm9kZSIsImdldE5vZGVRdWVyeU5vZGUiLCJsZWZ0VGVybU5vZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJnZXRWYWx1ZXNOb2RlIiwiZ2V0UmV0dXJuQmxvY2tOb2RlIiwiZ2V0Tm9kZXNRdWVyeU5vZGUiLCJnZXRUcnlJbnRlZ2VyTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwiZWxzZUV4cHJlc3Npb25Ob2RlIiwiZ2V0RWxzZUV4cHJlc3Npb25Ob2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsImlzTmVnYXRlZCIsImdldEFub255bW91c1Byb2NlZHVyZU5vZGUiLCJpc05vbnNlbnNpY2FsIiwiaXNEaXNqdW5jdGlvbiIsImdldFJlZmVyZW5jZU5vZGUiLCJ2YXJpYWJsZVN0cmluZyIsInZhcmlhYmxlU3RyaW5nRnJvbU5hbWUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsImdldEJpbmRpbmdzTm9kZSIsImdldEFycmF5QXNzaWdubWVudE5vZGUiLCJnZXRPYmplY3RBc3NpZ25tZW50Tm9kZSIsImdldFJldHVyblN0YXRlbWVudE5vZGUiLCJnZXRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInZhcmlhYmxlQXNzaWdtZW50Tm9kZSIsImdldEV4cHJlc3Npb25Ob2RlIiwidGVybU5vZGVzIiwidGVybXNBcnJheSIsImJpbmRpbmdOb2RlcyIsImdldEJpbmRpbmdOb2RlcyIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJuYW1lZFBhcmFtZXRlcnNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudE5vZGVzIiwiZ2V0VmFyaWFibGVBc3NpZ25tZW50Tm9kZXMiLCJ2YXJpYWJsZUFzc2lnbm1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTg4QmdCQTtlQUFBQTs7UUE5V0FDO2VBQUFBOztRQW9wQkFDO2VBQUFBOztRQStDQUM7ZUFBQUE7O1FBcEdBQztlQUFBQTs7UUEvUkFDO2VBQUFBOztRQTVXQUM7ZUFBQUE7O1FBc3ZCQUM7ZUFBQUE7O1FBMW5DQUM7ZUFBQUE7O1FBNHRDQUM7ZUFBQUE7O1FBdkhBQztlQUFBQTs7UUFwakNBQztlQUFBQTs7UUFxU0FDO2VBQUFBOztRQWllQUM7ZUFBQUE7O1FBdmNBQztlQUFBQTs7UUFpZUFDO2VBQUFBOztRQTJNQUM7ZUFBQUE7O1FBeGRBQztlQUFBQTs7UUF1YUFDO2VBQUFBOztRQXZqQ0FDO2VBQUFBOztRQWFBQztlQUFBQTs7UUFneEJBQztlQUFBQTs7UUE3ZkFDO2VBQUFBOztRQXc5QkFDO2VBQUFBOztRQXhVQUM7ZUFBQUE7O1FBZ0NBQztlQUFBQTs7UUF2Q0FDO2VBQUFBOztRQTU0QkFDO2VBQUFBOztRQWlzQkFDO2VBQUFBOztRQXVaQUM7ZUFBQUE7O1FBL0hBQztlQUFBQTs7UUFsREFDO2VBQUFBOztRQXh6QkFDO2VBQUFBOztRQXdPQUM7ZUFBQUE7O1FBcVpBQztlQUFBQTs7UUFwTUFDO2VBQUFBOztRQXBCQUM7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
1284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IHRlcm5hcnlTdHJpbmdGcm9tVGVybSxcbiAgICAgICAgIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMsXG4gICAgICAgICB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUsXG4gICAgICAgICBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlLFxuICAgICAgICAgZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUsXG4gICAgICAgICBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrLFxuICAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2ssXG4gICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSxcbiAgICAgICAgIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTb21lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNvbWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzb21lU3RyaW5nID0gc29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gc29tZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzb21lID0gbmV3IFNvbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKTtcblxuICByZXR1cm4gc29tZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIG5lZ2F0ZWRUZXJtID0gbmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGxvZ2ljYWxUZXJtID0gbG9naWNhbFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBjb21wYXJpc29uVGVybSA9IGNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgdmFyaWFibGUsXG4gICAgICBwcmltaXRpdmUsXG4gICAgICBuZWdhdGVkVGVybSxcbiAgICAgIGxvZ2ljYWxUZXJtLFxuICAgICAgYnJhY2tldGVkVGVybSxcbiAgICAgIGNvbXBhcmlzb25UZXJtXG4gICAgXSxcbiAgICB0ZXJtU3RyaW5nID0gdGVybVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgIHN0cmluZyA9IHRlcm1TdHJpbmcsICAvLy9cbiAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcHJpbWl0aXZlLCBuZWdhdGVkVGVybSwgbG9naWNhbFRlcm0sIGJyYWNrZXRlZFRlcm0sIGNvbXBhcmlzb25UZXJtKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGFyZ3VtZW50VHlwZSk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFsdWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICB2YXJpYWJsZSxcbiAgICAgICAgICBwcmltaXRpdmVcbiAgICAgICAgXSxcbiAgICAgICAgdmFsdWVTdHJpbmcgPSB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSB2YWx1ZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YWx1ZSA9IG5ldyBWYWx1ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBwcmltaXRpdmUpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXZlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXZlcnlOb2RlLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeVN0cmluZyA9IGV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBldmVyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5ID0gbmV3IEV2ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSk7XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxhYmVsTm9kZSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0Zyb21WYWx1ZXNOb2RlKHZhbHVlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYWx1ZXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB2YWx1ZU5vZGVzID0gdmFsdWVzTm9kZS5nZXRWYWx1ZU5vZGVzKCksXG4gICAgICAgIHZhbHVlc0FycmF5ID0gdmFsdWVzQXJyYXlGcm9tVmFsdWVOb2Rlcyh2YWx1ZU5vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSB2YWx1ZXNBcnJheSwgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhbHVlcyA9IG5ldyBWYWx1ZXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWR1Y2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVkdWNlTm9kZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IGluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlU3RyaW5nID0gcmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGluaXRpYWxWYWx1ZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gcmVkdWNlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZHVjZSA9IG5ldyBSZWR1Y2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgaW5pdGlhbFZhbHVlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiByZWR1Y2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBiaW5kaW5nTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVsaWRlZCA9IGVsaWRlZEZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZyA9IG5ldyBCaW5kaW5nKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSwgZWxpZGVkKTtcblxuICByZXR1cm4gYmluZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm5hcnlGcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJuYXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm5hcnlOb2RlLCAvLy9cbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbHNlRXhwcmVzc2lvbiA9IGVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeVN0cmluZyA9IHRlcm5hcnlTdHJpbmdGcm9tVGVybSh0ZXJtKSxcbiAgICAgICAgc3RyaW5nID0gdGVybmFyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm5hcnkgPSBuZXcgVGVybmFyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIGlmRXhwcmVzc2lvbiwgZWxzZUV4cHJlc3Npb24pO1xuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5zIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5zTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3Vic3RyaW5nRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5zID0gbmV3IENvbnRhaW5zKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHN1YnN0cmluZyk7XG5cbiAgcmV0dXJuIGNvbnRhaW5zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5kc1dpdGhGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVuZHNXaXRoIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVuZHNXaXRoTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3Vic3RyaW5nRnJvbUVuZHNXaXRoTm9kZShlbmRzV2l0aE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVuZHNXaXRoID0gbmV3IEVuZHNXaXRoKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHN1YnN0cmluZyk7XG5cbiAgcmV0dXJuIGVuZHNXaXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYmluZGluZ3NOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYmluZGluZ3NBcnJheSA9IGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gYmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZ3MgPSBuZXcgQmluZGluZ3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbmd0aE9mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxlbmd0aE9mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsZW5ndGhPZiA9IG5ldyBMZW5ndGhPZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gbGVuZ3RoT2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBhcnJheUFzc2lnbm1lbnQgPSBhcnJheUFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgb2JqZWN0QXNzaWdtZW50ID0gb2JqZWN0QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbWVudHMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5QXNzaWdubWVudCwgb2JqZWN0QXNzaWdtZW50LCB2YXJpYWJsZUFzc2lnbWVudHMpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZU5vZGUsICAvLy9cbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVN0cmluZyA9IHByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2sodHlwZSwgbGFiZWwsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSxcbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHByb2NlZHVyZSA9IG5ldyBQcm9jZWR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBsYWJlbCwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spO1xuXG4gIHJldHVybiBwcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUGFyYW1ldGVyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVyID0gbmV3IFBhcmFtZXRlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTm9kZVF1ZXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5vZGVRdWVyeU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcXVlcnkgPSBxdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVRdWVyeSA9IG5ldyBOb2RlUXVlcnkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcXVlcnkpO1xuXG4gIHJldHVybiBub2RlUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJpbWl0aXZlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByaW1pdGl2ZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcmltaXRpdmUgPSBuZXcgUHJpbWl0aXZlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdmFsdWUpO1xuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVG9JbnRlZ2VyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRvSW50ZWdlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0b0ludGVnZXIgPSBuZXcgVG9JbnRlZ2VyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUpO1xuXG4gIHJldHVybiB0b0ludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydHNXaXRoRnJvbVN0YXJ0c1dpdGhOb2RlKHN0YXJ0c1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhcnRzV2l0aCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGFydHNXaXRoTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN1YnN0cmluZ0Zyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhcnRzV2l0aCA9IG5ldyBTdGFydHNXaXRoKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHN1YnN0cmluZyk7XG5cbiAgcmV0dXJuIHN0YXJ0c1dpdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTm9kZXNRdWVyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBub2Rlc1F1ZXJ5Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc1F1ZXJ5ID0gbmV3IE5vZGVzUXVlcnkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcXVlcnkpO1xuXG4gIHJldHVybiBub2Rlc1F1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlcnMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyc05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBwYXJhbWV0ZXJzQXJyYXkgPSBwYXJhbWV0ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IHBhcmFtZXRlcnNBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBQYXJhbWV0ZXJzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEV4cHJlc3Npb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXhwcmVzc2lvbk5vZGUsICAvLy9cbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzb21lID0gc29tZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGV2ZXJ5ID0gZXZlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWR1Y2UgPSByZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJuYXJ5ID0gdGVybmFyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vZGVRdWVyeSA9IG5vZGVRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVuZ3RoT2YgPSBsZW5ndGhPZkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvSW50ZWdlciA9IHRvSW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRyeUludGVnZXIgPSB0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29udGFpbnMgPSBjb250YWluc0Zyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVuZHNXaXRoID0gZW5kc1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGFydHNXaXRoID0gc3RhcnRzV2l0aEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgdGVybSxcbiAgICAgICAgICBzb21lLFxuICAgICAgICAgIGV2ZXJ5LFxuICAgICAgICAgIHJlZHVjZSxcbiAgICAgICAgICB0ZXJuYXJ5LFxuICAgICAgICAgIG5vZGVRdWVyeSxcbiAgICAgICAgICBub2Rlc1F1ZXJ5LFxuICAgICAgICAgIGxlbmd0aE9mLFxuICAgICAgICAgIHRvSW50ZWdlcixcbiAgICAgICAgICB0cnlJbnRlZ2VyLFxuICAgICAgICAgIGNvbnRhaW5zLFxuICAgICAgICAgIGVuZHNXaXRoLFxuICAgICAgICAgIHN0YXJ0c1dpdGgsXG4gICAgICAgICAgcmV0dXJuQmxvY2ssXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbFxuICAgICAgICBdLFxuICAgICAgICBleHByZXNzaW9uU3RyaW5nID0gZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSBleHByZXNzaW9uU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBuZXcgRXhwcmVzc2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHNvbWUsIGV2ZXJ5LCByZWR1Y2UsIHRlcm5hcnksIG5vZGVRdWVyeSwgbm9kZXNRdWVyeSwgbGVuZ3RoT2YsIHRvSW50ZWdlciwgdHJ5SW50ZWdlciwgY29udGFpbnMsIGVuZHNXaXRoLCBzdGFydHNXaXRoLCByZXR1cm5CbG9jaywgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnlJbnRlZ2VyRnJvbVRyeUludGVnZXJOb2RlKHRyeUludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHJ5SW50ZWdlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0cnlJbnRlZ2VyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UcnlJbnRlZ2VyTm9kZSh0cnlJbnRlZ2VyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHJ5SW50ZWdlciA9IG5ldyBUcnlJbnRlZ2VyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUpO1xuXG4gIHJldHVybiB0cnlJbnRlZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJldHVybkJsb2NrIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJldHVybkJsb2NrTm9kZSwgLy8vXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICBub25zZW5zaWNhbCA9IG5vbnNlbnNpY2FsRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5TdGF0ZW1lbnQgPSByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrU3RyaW5nID0gcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnQpLFxuICAgICAgICBzdHJpbmcgPSByZXR1cm5CbG9ja1N0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5CbG9jayA9IG5ldyBSZXR1cm5CbG9jayhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMsIG5vbnNlbnNpY2FsLCByZXR1cm5TdGF0ZW1lbnQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRUZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZShuZWdhdGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOZWdhdGVkVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBuZWdhdGVkVGVybU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm1Ob2RlID0gbmVnYXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbU5lZ2F0ZWRUZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZShuZWdhdGVkVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuZWdhdGVkVGVybSA9IG5ldyBOZWdhdGVkVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHRlcm0pO1xuXG4gIHJldHVybiBuZWdhdGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2ljYWxUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMb2dpY2FsVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsb2dpY2FsVGVybU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkaXNqdW5jdGlvbiA9IGRpc2p1bmN0aW9uRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxvZ2ljYWxUZXJtID0gbmV3IExvZ2ljYWxUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgZGlzanVuY3Rpb24sIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBsb2dpY2FsVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkQmluZGluZ0Zyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOYW1lZEJpbmRpbmcgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmFtZWRCaW5kaW5nTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFsaWFzID0gYWxpYXNGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBuYW1lZEJpbmRpbmcgPSBuZXcgTmFtZWRCaW5kaW5nKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSwgYWxpYXMpO1xuXG4gIHJldHVybiBuYW1lZEJpbmRpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZEJpbmRpbmdzRnJvbU5hbWVkQmluZGluZ3NOb2RlKG5hbWVkQmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmFtZWRCaW5kaW5ncyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBuYW1lZEJpbmRpbmdzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZWRCaW5kaW5nTm9kZXMgPSBuYW1lZEJpbmRpbmdzTm9kZS5nZXROYW1lZEJpbmRpbmdOb2RlcygpLFxuICAgICAgICBuYW1lZEJpbmRpbmdzQXJyYXkgPSBuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyhuYW1lZEJpbmRpbmdOb2RlcywgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gbmFtZWRCaW5kaW5nc0FycmF5OyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBuYW1lZEJpbmRpbmdzID0gbmV3IE5hbWVkQmluZGluZ3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIG5hbWVkQmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRUZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQnJhY2tldGVkVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRUZXJtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZFRlcm0gPSBuZXcgQnJhY2tldGVkVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0pO1xuXG4gIHJldHVybiBicmFja2V0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZUNhbGwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhbHVlcyA9IHZhbHVlc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbCA9IG5ldyBQcm9jZWR1cmVDYWxsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCB2YWx1ZXMpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyaXNvblRlcm1Gcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbXBhcmlzb25UZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbXBhcmlzb25UZXJtTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbXBhcmlzb25UZXJtID0gbmV3IENvbXBhcmlzb25UZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmVnYXRlZCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGNvbXBhcmlzb25UZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRCaW5kaW5nc0Zyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lZEJpbmRpbmdzTm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLmdldE5hbWVkQmluZGluZ3NOb2RlKCksXG4gICAgICAgIG5hbWVkQmluZGluZ3MgPSBuYW1lZEJpbmRpbmdzRnJvbU5hbWVkQmluZGluZ3NOb2RlKG5hbWVkQmluZGluZ3NOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbmFtZWRCaW5kaW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5QXNzaWdubWVudEZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBcnJheUFzc2lnbm1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBiaW5kaW5ncyA9IGJpbmRpbmdzRnJvbUFycmF5QXNzaWdubWVudE5vZGUoYXJyYXlBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYXJyYXlBc3NpZ25tZW50ID0gbmV3IEFycmF5QXNzaWdubWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBiaW5kaW5ncyk7XG5cbiAgcmV0dXJuIGFycmF5QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZXR1cm5TdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJldHVyblN0YXRlbWVudCA9IG5ldyBSZXR1cm5TdGF0ZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YWx1ZSk7XG5cbiAgcmV0dXJuIHJldHVyblN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEFzc2lnbm1lbnRGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBPYmplY3RBc3NpZ21lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gb2JqZWN0QXNzaWdubWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZWRCaW5kaW5ncyA9IG5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG9iamVjdEFzc2lnbm1lbnQgPSBuZXcgT2JqZWN0QXNzaWdtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIG5hbWVkQmluZGluZ3MpO1xuXG4gIHJldHVybiBvYmplY3RBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFub255bW91c1Byb2NlZHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCAgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayksXG4gICAgICAgIHN0cmluZyA9IG5vbnltb3VzUHJvY2VkdXJlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlID0gbmV3IEFub255bW91c1Byb2NlZHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlQXNzaWdubWVudHMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIC8vL1xuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkpLFxuICAgICAgICBhcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnRzID0gbmV3IFZhcmlhYmxlQXNzaWdubWVudHMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlQXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbVZhcmlhYmxlQXNzaWdubWVudE5vZGUodmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUodHlwZSwgdmFyaWFibGUsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGFzc2lnbm1lbnQgPSBuZXcgVmFyaWFibGVBc3NpZ25tZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGV4cHJlc3Npb24pO1xuXG4gIHJldHVybiBhc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gdHlwZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBsYWJlbE5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFsdWVOb2RlKCksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm5hcnlOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IGJpbmRpbmdOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gYmluZGluZ05vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gc29tZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgY29uc3QgbmFtZSA9IHZhcmlhYmxlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB0ZXJtTm9kZS5nZXRQcmltaXRpdmVOb2RlKCk7XG5cbiAgaWYgKHByaW1pdGl2ZU5vZGUgIT09IG51bGwpIHtcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGlkZWRGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZWxpZGVkID0gYmluZGluZ05vZGUuaXNFbGlkZWQoKTtcblxuICByZXR1cm4gZWxpZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwYXJhbWV0ZXJOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSByZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHR5cGVOYW1lID0gcHJpbWl0aXZlTm9kZS5nZXRUeXBlTmFtZSgpLFxuICAgICAgICB0eXBlID0gVHlwZS5mcm9tVHlwZU5hbWUodHlwZU5hbWUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhbHVlTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB2YWx1ZU5vZGUuZ2V0UHJpbWl0aXZlTm9kZSgpO1xuXG4gIGlmIChwcmltaXRpdmVOb2RlICE9PSBudWxsKSB7XG4gICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IG5vZGVRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgZXhwcmVzc2lvblN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgIHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoZXhwcmVzc2lvblN0cmluZyk7XG5cbiAgcmV0dXJuIHF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gcHJpbWl0aXZlTm9kZS5nZXRWYWx1ZSgpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGUgPSBwcm9jZWR1cmVOb2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNvbWUgPSBudWxsO1xuXG4gIGNvbnN0IHNvbWVOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0U29tZU5vZGUoKTtcblxuICBpZiAoc29tZU5vZGUgIT09IG51bGwpIHtcbiAgICBzb21lID0gc29tZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc29tZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBuZWdhdGVkVGVybSA9IG51bGw7XG5cbiAgY29uc3QgbmVnYXRlZFRlcm1Ob2RlID0gdGVybU5vZGUuZ2V0TmVnYXRlZFRlcm1Ob2RlKCk7XG5cbiAgaWYgKG5lZ2F0ZWRUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIG5lZ2F0ZWRUZXJtID0gbmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbmVnYXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgbG9naWNhbFRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IGxvZ2ljYWxUZXJtTm9kZSA9IHRlcm1Ob2RlLmdldExvZ2ljYWxUZXJtTm9kZSgpO1xuXG4gIGlmIChsb2dpY2FsVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBsb2dpY2FsVGVybSA9IGxvZ2ljYWxUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxvZ2ljYWxUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9kZXNRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICByZXR1cm4gcXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZXZlcnkgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldEV2ZXJ5Tm9kZSgpO1xuXG4gIGlmIChldmVyeU5vZGUgIT09IG51bGwpIHtcbiAgICBldmVyeSA9IGV2ZXJ5RnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBCT09MRUFOX1RZUEVfTkFNRTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gQk9PTEVBTl9UWVBFX05BTUU7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZShuZWdhdGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBuZWdhdGVkVGVybU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJndW1lbnRUeXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcmd1bWVudFR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IGFyZ3VtZW50VHlwZU5hbWUgPSB0eXBlTm9kZS5nZXRBcmd1bWVudFR5cGVOYW1lKCk7XG5cbiAgaWYgKGFyZ3VtZW50VHlwZU5hbWUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzO1xuXG4gICAgYXJndW1lbnRUeXBlID0gVHlwZS5mcm9tVHlwZU5hbWUoYXJndW1lbnRUeXBlTmFtZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXJndW1lbnRUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBsZW5ndGhPZk5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGNvbnRhaW5zTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGVuZHNXaXRoTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZHVjZSA9IG51bGw7XG5cbiAgY29uc3QgcmVkdWNlTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFJlZHVjZU5vZGUoKTtcblxuICBpZiAocmVkdWNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZHVjZSA9IHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZHVjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gbmFtZWRCaW5kaW5nTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gbmFtZWRCaW5kaW5nTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBjb250YWluc05vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBlbmRzV2l0aE5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYWxpYXMgPSBuYW1lZEJpbmRpbmdOb2RlLmdldEFsaWFzKCk7XG5cbiAgcmV0dXJuIGFsaWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG5vZGVRdWVyeU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybmFyeSA9IG51bGw7XG5cbiAgY29uc3QgdGVybmFyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUZXJuYXJ5Tm9kZSgpO1xuXG4gIGlmICh0ZXJuYXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm5hcnkgPSB0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgYnJhY2tldGVkVGVybSA9IG51bGw7XG5cbiAgY29uc3QgYnJhY2tldGVkVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXRCcmFja2V0ZWRUZXJtTm9kZSgpO1xuXG4gIGlmIChicmFja2V0ZWRUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBicmFja2V0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRvSW50ZWdlck5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUodGVybU5PZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbXBhcmlzb25UZXJtID0gbnVsbDtcblxuICBjb25zdCBjb21wYXJpc29uVGVybU5vZGUgPSB0ZXJtTk9kZS5nZXRDb21wYXJpc29uVGVybU5vZGUoKTtcblxuICBpZiAoY29tcGFyaXNvblRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgY29tcGFyaXNvblRlcm0gPSBjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb21wYXJpc29uVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWUgPSB2YWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpbml0aWFsVmFsdWUgPSB2YWx1ZTsgLy8vXG5cbiAgcmV0dXJuIGluaXRpYWxWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uID0gbnVsbDtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRyeUludGVnZXJOb2RlKHRyeUludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRyeUludGVnZXJOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVN0YXJ0c1dpdGhOb2RlKHN0YXJ0c1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHN0YXJ0c1dpdGhOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG5vZGVzUXVlcnlOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aE9mRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsZW5ndGhPZiA9IG51bGw7XG5cbiAgY29uc3QgbGVuZ3RoT2ZOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0TGVuZ3RoT2ZOb2RlKCk7XG5cbiAgaWYgKGxlbmd0aE9mTm9kZSAhPT0gbnVsbCkge1xuICAgIGxlbmd0aE9mID0gbGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGVuZ3RoT2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc0Zyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29udGFpbnMgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5zTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldENvbnRhaW5zTm9kZSgpO1xuXG4gIGlmIChjb250YWluc05vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWlucyA9IGNvbnRhaW5zRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5kc1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGVuZHNXaXRoID0gbnVsbDtcblxuICBjb25zdCBlbmRzV2l0aE5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRFbmRzV2l0aE5vZGUoKTtcblxuICBpZiAoZW5kc1dpdGhOb2RlICE9PSBudWxsKSB7XG4gICAgZW5kc1dpdGggPSBlbmRzV2l0aEZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlbmRzV2l0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZkV4cHJlc3Npb25Ob2RlID0gdGVybmFyeU5vZGUuZ2V0SWZFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGlmRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpZkV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0b0ludGVnZXIgPSBudWxsO1xuXG4gIGNvbnN0IHRvSW50ZWdlck5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUb0ludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRvSW50ZWdlck5vZGUgIT09IG51bGwpIHtcbiAgICB0b0ludGVnZXIgPSB0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0b0ludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vZGVRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZVF1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVRdWVyeU5vZGUoKTtcblxuICBpZiAobm9kZVF1ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIG5vZGVRdWVyeSA9IG5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZ0Zyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBzdGFydHNXaXRoTm9kZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3RyaW5nOyAgLy8vXG5cbiAgcmV0dXJuIHN1YnN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFZhbHVlc05vZGUoKSxcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzRnJvbVZhbHVlc05vZGUodmFsdWVzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBwcm9jZWR1cmVOb2RlLmdldFJldHVybkJsb2NrTm9kZSgpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gbnVsbDtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVOb2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZS5nZXRWYWx1ZU5vZGUoKSxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBub2Rlc1F1ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc1F1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVzUXVlcnlOb2RlKCk7XG5cbiAgaWYgKG5vZGVzUXVlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgbm9kZXNRdWVyeSA9IG5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0cnlJbnRlZ2VyID0gbnVsbDtcblxuICBjb25zdCB0cnlJbnRlZ2VyTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRyeUludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRyeUludGVnZXJOb2RlICE9PSBudWxsKSB7XG4gICAgdHJ5SW50ZWdlciA9IHRyeUludGVnZXJGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRyeUludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGFydHNXaXRoID0gbnVsbDtcblxuICBjb25zdCBzdGFydHNXaXRoTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFN0YXJ0c1dpdGhOb2RlKCk7XG5cbiAgaWYgKHN0YXJ0c1dpdGhOb2RlICE9PSBudWxsKSB7XG4gICAgc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGhGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXJ0c1dpdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbHNlRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBlbHNlRXhwcmVzc2lvbk5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRFbHNlRXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgZWxzZUV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGVsc2VFeHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGVsc2VFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJldHVybkJsb2NrID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRSZXR1cm5CbG9ja05vZGUoKTtcblxuICBpZiAocmV0dXJuQmxvY2tOb2RlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHJldHVybkJsb2NrTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1lbnROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RhdGVtZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gY29tcGFyaXNvblRlcm1Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZU5vZGUgPSBzb21lTm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5vbnNlbnNpY2FsID0gcmV0dXJuQmxvY2tOb2RlLmlzTm9uc2Vuc2ljYWwoKTtcblxuICByZXR1cm4gbm9uc2Vuc2ljYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRpc2p1bmN0aW9uID0gbG9naWNhbFRlcm1Ob2RlLmlzRGlzanVuY3Rpb24oKTtcblxuICByZXR1cm4gZGlzanVuY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUobmFtZSksXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIHZhbHVlKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gZXZlcnlOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUuZ2V0UmlnaHRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmluZGluZ3NOb2RlID0gYXJyYXlBc3NpZ25tZW50Tm9kZS5nZXRCaW5kaW5nc05vZGUoKSxcbiAgICAgICAgYmluZGluZ3MgPSBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gcmVkdWNlTm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcnJheUFzc2lnbm1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGFycmF5QXNzaWdubWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEFycmF5QXNzaWdubWVudE5vZGUoKTtcblxuICBpZiAoYXJyYXlBc3NpZ25tZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGFycmF5QXNzaWdubWVudCA9IGFycmF5QXNzaWdubWVudEZyb21BcnJheUFzc2lnbm1lbnROb2RlKGFycmF5QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG9iamVjdEFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBvYmplY3RBc3NpZ25tZW50ID0gbnVsbDtcblxuICBjb25zdCBvYmplY3RBc3NpZ25tZW50Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0T2JqZWN0QXNzaWdubWVudE5vZGUoKTtcblxuICBpZiAob2JqZWN0QXNzaWdubWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBvYmplY3RBc3NpZ25tZW50ID0gb2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVyblN0YXRlbWVudE5vZGUgPSByZXR1cm5CbG9ja05vZGUuZ2V0UmV0dXJuU3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICByZXR1cm5TdGF0ZW1lbnQgPSByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmV0dXJuU3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlQXNzaWdubWVudHMgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlQXNzaWdubWVudHMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlKHZhcmlhYmxlQXNzaWdtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uTm9kZSA9IHZhcmlhYmxlQXNzaWdtZW50Tm9kZS5nZXRFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJldHVybkJsb2NrTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0FycmF5RnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXNBcnJheSA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7IC8vL1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0FycmF5RnJvbVZhbHVlTm9kZXModmFsdWVOb2RlcywgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZXNBcnJheSA9IHZhbHVlTm9kZXMubWFwKCh2YWx1ZU5vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ3NBcnJheUZyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJpbmRpbmdOb2RlcyA9IGJpbmRpbmdzTm9kZS5nZXRCaW5kaW5nTm9kZXMoKSxcbiAgICAgICAgYmluZGluZ3NBcnJheSA9IGJpbmRpbmdOb2Rlcy5tYXAoKGJpbmRpbmdOb2RlKSA9PiB7IC8vL1xuICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5nRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBiaW5kaW5nO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gYmluZGluZ3NBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNBcnJheUZyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnNOb2RlLmdldFBhcmFtZXRlck5vZGVzKCksXG4gICAgICAgIHBhcmFtZXRlcnNBcnJheSA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyhuYW1lZEJpbmRpbmdOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBuYW1lZFBhcmFtZXRlcnNBcnJheSA9IG5hbWVkQmluZGluZ05vZGVzLm1hcCgobmFtZWRCaW5kaW5nTm9kZSkgPT4geyAvLy9cbiAgICBjb25zdCBuYW1lZEJpbmRpbmcgPSBuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBuYW1lZEJpbmRpbmc7XG4gIH0pO1xuXG4gIHJldHVybiBuYW1lZFBhcmFtZXRlcnNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50Tm9kZXMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZS5nZXRWYXJpYWJsZUFzc2lnbm1lbnROb2RlcygpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2Rlcy5tYXAoKHZhcmlhYmxlQXNzaWdubWVudE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5O1xufVxuIl0sIm5hbWVzIjpbImFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21FdmVyeU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZSIsImFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZSIsImFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSIsImFycmF5QXNzaWdubWVudEZyb21BcnJheUFzc2lnbm1lbnROb2RlIiwiYXJyYXlBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUiLCJiaW5kaW5nRnJvbUJpbmRpbmdOb2RlIiwiYmluZGluZ3NBcnJheUZyb21CaW5kaW5nc05vZGUiLCJiaW5kaW5nc0Zyb21BcnJheUFzc2lnbm1lbnROb2RlIiwiYmluZGluZ3NGcm9tQmluZGluZ3NOb2RlIiwiYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZSIsImJyYWNrZXRlZFRlcm1Gcm9tVGVybU5vZGUiLCJjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUiLCJjb21wYXJpc29uVGVybUZyb21UZXJtTm9kZSIsImNvbnRhaW5zRnJvbUNvbnRhaW5zTm9kZSIsImNvbnRhaW5zRnJvbUV4cHJlc3Npb25Ob2RlIiwiZGlzanVuY3Rpb25Gcm9tTG9naWNhbFRlcm1Ob2RlIiwiZWxpZGVkRnJvbUJpbmRpbmdOb2RlIiwiZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUiLCJlbmRzV2l0aEZyb21FbmRzV2l0aE5vZGUiLCJlbmRzV2l0aEZyb21FeHByZXNzaW9uTm9kZSIsImVycm9yRnJvbUVycm9yTm9kZSIsImV2ZXJ5RnJvbUV2ZXJ5Tm9kZSIsImV2ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlIiwiZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZSIsImV4cHJlc3Npb25Gcm9tVmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsImV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlIiwiaWZFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlIiwiaW5pdGlhbFZhbHVlRnJvbVJlZHVjZU5vZGUiLCJsYWJlbEZyb21MYWJlbE5vZGUiLCJsYWJlbEZyb21Qcm9jZWR1cmVOb2RlIiwibGVmdFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlIiwibGVmdFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwibGVuZ3RoT2ZGcm9tRXhwcmVzc2lvbk5vZGUiLCJsZW5ndGhPZkZyb21MZW5ndGhPZk5vZGUiLCJsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJsb2dpY2FsVGVybUZyb21UZXJtTm9kZSIsIm5hbWVGcm9tQmluZGluZ05vZGUiLCJuYW1lRnJvbUxhYmVsTm9kZSIsIm5hbWVGcm9tTmFtZWRCaW5kaW5nTm9kZSIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsIm5hbWVGcm9tUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVZhcmlhYmxlTm9kZSIsIm5hbWVkQmluZGluZ0Zyb21OYW1lZEJpbmRpbmdOb2RlIiwibmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZSIsIm5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUiLCJuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyIsIm5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUiLCJub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZSIsIm5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlIiwibm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlIiwib2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsIm9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlIiwicGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwicGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZSIsInBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlTm9kZSIsInByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlIiwicHJpbWl0aXZlRnJvbVRlcm1Ob2RlIiwicHJpbWl0aXZlRnJvbVZhbHVlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlRnJvbVByb2NlZHVyZU5vZGUiLCJxdWVyeUZyb21Ob2RlUXVlcnlOb2RlIiwicXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUiLCJyZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUiLCJyZWR1Y2VGcm9tUmVkdWNlTm9kZSIsInJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlIiwicmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlIiwicmV0dXJuQmxvY2tGcm9tUHJvY2VkdXJlTm9kZSIsInJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZSIsInJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUiLCJyZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUiLCJyaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwic29tZUZyb21FeHByZXNzaW9uTm9kZSIsInNvbWVGcm9tU29tZU5vZGUiLCJzdGFydHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlIiwic3RhcnRzV2l0aEZyb21TdGFydHNXaXRoTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUiLCJzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlIiwic3Vic3RyaW5nRnJvbUVuZHNXaXRoTm9kZSIsInN1YnN0cmluZ0Zyb21TdGFydHNXaXRoTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJ0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlIiwidGVybUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UZXJuYXJ5Tm9kZSIsInRlcm1zQXJyYXlGcm9tVGVybU5vZGVzIiwidGVybmFyeUZyb21FeHByZXNzaW9uTm9kZSIsInRlcm5hcnlGcm9tVGVybmFyeU5vZGUiLCJ0b0ludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSIsInRyeUludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0cnlJbnRlZ2VyRnJvbVRyeUludGVnZXJOb2RlIiwidHlwZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwidHlwZUZyb21CaW5kaW5nTm9kZSIsInR5cGVGcm9tTG9naWNhbFRlcm1Ob2RlIiwidHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlIiwidHlwZUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0eXBlRnJvbVBhcmFuZXRlck5vZGUiLCJ0eXBlRnJvbVByaW1pdGl2ZU5vZGUiLCJ0eXBlRnJvbVByb2NlZHVyZU5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInR5cGVGcm9tVmFyaWFibGVOb2RlIiwidmFsdWVGcm9tUHJpbWl0aXZlTm9kZSIsInZhbHVlRnJvbVJlZHVjZU5vZGUiLCJ2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlIiwidmFsdWVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSIsInZhbHVlRnJvbVZhbHVlTm9kZSIsInZhbHVlc0FycmF5RnJvbVZhbHVlTm9kZXMiLCJ2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJ2YWx1ZXNGcm9tVmFsdWVzTm9kZSIsInZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0YXRlbWVudE5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidmFyaWFibGVGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlRnJvbUNvbnRhaW5zTm9kZSIsInZhcmlhYmxlRnJvbUVuZHNXaXRoTm9kZSIsInZhcmlhYmxlRnJvbUV2ZXJ5Tm9kZSIsInZhcmlhYmxlRnJvbUxlbmd0aE9mTm9kZSIsInZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUiLCJ2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsInZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tUmVkdWNlTm9kZSIsInZhcmlhYmxlRnJvbVNvbWVOb2RlIiwidmFyaWFibGVGcm9tU3RhcnRzV2l0aE5vZGUiLCJ2YXJpYWJsZUZyb21UZXJtTm9kZSIsInZhcmlhYmxlRnJvbVRvSW50ZWdlck5vZGUiLCJ2YXJpYWJsZUZyb21UcnlJbnRlZ2VyTm9kZSIsInZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlRnJvbVZhbHVlTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSIsInNvbWVOb2RlIiwiY29udGV4dCIsIlNvbWUiLCJlbGVtZW50cyIsIm5vZGUiLCJ2YXJpYWJsZSIsImFub255bW91c1Byb2NlZHVyZSIsInNvbWVTdHJpbmciLCJzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwic3RyaW5nIiwiYnJlYWtQb2ludCIsInNvbWUiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJwcmltaXRpdmUiLCJuZWdhdGVkVGVybSIsImxvZ2ljYWxUZXJtIiwiYnJhY2tldGVkVGVybSIsImNvbXBhcmlzb25UZXJtIiwicHJvcGVydGllcyIsInRlcm1TdHJpbmciLCJ0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ0ZXJtIiwidHlwZU5vZGUiLCJUeXBlIiwibm9kZUFzU3RyaW5nIiwibmFtZSIsImFyZ3VtZW50VHlwZSIsInR5cGUiLCJ2YWx1ZU5vZGUiLCJWYWx1ZSIsInZhbHVlU3RyaW5nIiwidmFsdWVTdHJpbmdGcm9tUHJvcGVydGllcyIsInZhbHVlIiwiZXJyb3JOb2RlIiwiRXJyb3IiLCJlcnJvciIsImV2ZXJ5Tm9kZSIsIkV2ZXJ5IiwiZXZlcnlTdHJpbmciLCJldmVyeVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSIsImV2ZXJ5IiwibGFiZWxOb2RlIiwiTGFiZWwiLCJsYWJlbCIsInZhbHVlc05vZGUiLCJWYWx1ZXMiLCJ2YWx1ZU5vZGVzIiwiZ2V0VmFsdWVOb2RlcyIsInZhbHVlc0FycmF5IiwiYXJyYXkiLCJ2YWx1ZXMiLCJyZWR1Y2VOb2RlIiwiUmVkdWNlIiwiaW5pdGlhbFZhbHVlIiwicmVkdWNlU3RyaW5nIiwicmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJyZWR1Y2UiLCJiaW5kaW5nTm9kZSIsIkJpbmRpbmciLCJlbGlkZWQiLCJiaW5kaW5nIiwidGVybmFyeU5vZGUiLCJUZXJuYXJ5IiwiaWZFeHByZXNzaW9uIiwiZWxzZUV4cHJlc3Npb24iLCJ0ZXJuYXJ5U3RyaW5nIiwidGVybmFyeVN0cmluZ0Zyb21UZXJtIiwidGVybmFyeSIsImNvbnRhaW5zTm9kZSIsIkNvbnRhaW5zIiwic3Vic3RyaW5nIiwiY29udGFpbnMiLCJlbmRzV2l0aE5vZGUiLCJFbmRzV2l0aCIsImVuZHNXaXRoIiwidmFyaWFibGVOb2RlIiwiVmFyaWFibGUiLCJleHByZXNzaW9uIiwiYmluZGluZ3NOb2RlIiwiQmluZGluZ3MiLCJiaW5kaW5nc0FycmF5IiwiYmluZGluZ3MiLCJsZW5ndGhPZk5vZGUiLCJMZW5ndGhPZiIsImxlbmd0aE9mIiwic3RhdGVtZW50Tm9kZSIsIlN0YXRlbWVudCIsImFycmF5QXNzaWdubWVudCIsIm9iamVjdEFzc2lnbWVudCIsInZhcmlhYmxlQXNzaWdtZW50cyIsInN0YXRlbWVudCIsInByb2NlZHVyZU5vZGUiLCJQcm9jZWR1cmUiLCJwYXJhbWV0ZXJzIiwicmV0dXJuQmxvY2siLCJwcm9jZWR1cmVTdHJpbmciLCJwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrIiwicHJvY2VkdXJlIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJub2RlUXVlcnlOb2RlIiwiTm9kZVF1ZXJ5IiwicXVlcnkiLCJub2RlUXVlcnkiLCJwcmltaXRpdmVOb2RlIiwiUHJpbWl0aXZlIiwidG9JbnRlZ2VyTm9kZSIsIlRvSW50ZWdlciIsInRvSW50ZWdlciIsInN0YXJ0c1dpdGhOb2RlIiwiU3RhcnRzV2l0aCIsInN0YXJ0c1dpdGgiLCJub2Rlc1F1ZXJ5Tm9kZSIsIk5vZGVzUXVlcnkiLCJub2Rlc1F1ZXJ5IiwicGFyYW1ldGVyc05vZGUiLCJQYXJhbWV0ZXJzIiwicGFyYW1ldGVyc0FycmF5IiwiZXhwcmVzc2lvbk5vZGUiLCJFeHByZXNzaW9uIiwidHJ5SW50ZWdlciIsInByb2NlZHVyZUNhbGwiLCJleHByZXNzaW9uU3RyaW5nIiwiZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidHJ5SW50ZWdlck5vZGUiLCJUcnlJbnRlZ2VyIiwicmV0dXJuQmxvY2tOb2RlIiwiUmV0dXJuQmxvY2siLCJzdGF0ZW1lbnRzIiwibm9uc2Vuc2ljYWwiLCJyZXR1cm5TdGF0ZW1lbnQiLCJyZXR1cm5CbG9ja1N0cmluZyIsInJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUiLCJuZWdhdGVkVGVybU5vZGUiLCJOZWdhdGVkVGVybSIsImdldFRlcm1Ob2RlIiwibG9naWNhbFRlcm1Ob2RlIiwiTG9naWNhbFRlcm0iLCJkaXNqdW5jdGlvbiIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwibmFtZWRCaW5kaW5nTm9kZSIsIk5hbWVkQmluZGluZyIsImFsaWFzIiwibmFtZWRCaW5kaW5nIiwibmFtZWRCaW5kaW5nc05vZGUiLCJOYW1lZEJpbmRpbmdzIiwibmFtZWRCaW5kaW5nTm9kZXMiLCJnZXROYW1lZEJpbmRpbmdOb2RlcyIsIm5hbWVkQmluZGluZ3NBcnJheSIsIm5hbWVkQmluZGluZ3MiLCJicmFja2V0ZWRUZXJtTm9kZSIsIkJyYWNrZXRlZFRlcm0iLCJwcm9jZWR1cmVDYWxsTm9kZSIsIlByb2NlZHVyZUNhbGwiLCJjb21wYXJpc29uVGVybU5vZGUiLCJDb21wYXJpc29uVGVybSIsIm5lZ2F0ZWQiLCJvYmplY3RBc3NpZ25tZW50Tm9kZSIsImdldE5hbWVkQmluZGluZ3NOb2RlIiwiYXJyYXlBc3NpZ25tZW50Tm9kZSIsIkFycmF5QXNzaWdubWVudCIsInJldHVyblN0YXRlbWVudE5vZGUiLCJSZXR1cm5TdGF0ZW1lbnQiLCJPYmplY3RBc3NpZ21lbnQiLCJvYmplY3RBc3NpZ25tZW50IiwiYW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsIkFub255bW91c1Byb2NlZHVyZSIsIm5vbnltb3VzUHJvY2VkdXJlU3RyaW5nIiwiYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2siLCJ2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsIlZhcmlhYmxlQXNzaWdubWVudHMiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmciLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudHMiLCJ2YXJpYWJsZUFzc2lnbm1lbnROb2RlIiwiVmFyaWFibGVBc3NpZ25tZW50IiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSIsImFzc2lnbm1lbnQiLCJnZXROYW1lIiwiZ2V0VmFsdWVOb2RlIiwiZ2V0VHlwZU5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJnZXRQcmltaXRpdmVOb2RlIiwiaXNFbGlkZWQiLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwiZnJvbVR5cGVOYW1lIiwiZ2V0U3RyaW5nIiwiUXVlcnkiLCJmcm9tRXhwcmVzc2lvblN0cmluZyIsImdldFZhbHVlIiwiZ2V0TGFiZWxOb2RlIiwiZ2V0U29tZU5vZGUiLCJnZXROZWdhdGVkVGVybU5vZGUiLCJnZXRMb2dpY2FsVGVybU5vZGUiLCJnZXRFdmVyeU5vZGUiLCJCT09MRUFOX1RZUEVfTkFNRSIsImFyZ3VtZW50VHlwZU5hbWUiLCJnZXRBcmd1bWVudFR5cGVOYW1lIiwiZ2V0UmVkdWNlTm9kZSIsImdldEFsaWFzIiwiZ2V0VGVybmFyeU5vZGUiLCJnZXRCcmFja2V0ZWRUZXJtTm9kZSIsInRlcm1OT2RlIiwiZ2V0Q29tcGFyaXNvblRlcm1Ob2RlIiwiZ2V0TGVuZ3RoT2ZOb2RlIiwiZ2V0Q29udGFpbnNOb2RlIiwiZ2V0RW5kc1dpdGhOb2RlIiwiaWZFeHByZXNzaW9uTm9kZSIsImdldElmRXhwcmVzc2lvbk5vZGUiLCJnZXRQYXJhbWV0ZXJzTm9kZSIsImdldFRvSW50ZWdlck5vZGUiLCJnZXROb2RlUXVlcnlOb2RlIiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwiZ2V0VmFsdWVzTm9kZSIsImdldFJldHVybkJsb2NrTm9kZSIsImdldE5vZGVzUXVlcnlOb2RlIiwiZ2V0VHJ5SW50ZWdlck5vZGUiLCJnZXRTdGFydHNXaXRoTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwiZWxzZUV4cHJlc3Npb25Ob2RlIiwiZ2V0RWxzZUV4cHJlc3Npb25Ob2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsImlzTmVnYXRlZCIsImdldEFub255bW91c1Byb2NlZHVyZU5vZGUiLCJpc05vbnNlbnNpY2FsIiwiaXNEaXNqdW5jdGlvbiIsImdldFJlZmVyZW5jZU5vZGUiLCJ2YXJpYWJsZVN0cmluZyIsInZhcmlhYmxlU3RyaW5nRnJvbU5hbWUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsImdldEJpbmRpbmdzTm9kZSIsImdldEFycmF5QXNzaWdubWVudE5vZGUiLCJnZXRPYmplY3RBc3NpZ25tZW50Tm9kZSIsImdldFJldHVyblN0YXRlbWVudE5vZGUiLCJnZXRWYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInZhcmlhYmxlQXNzaWdtZW50Tm9kZSIsImdldEV4cHJlc3Npb25Ob2RlIiwidGVybU5vZGVzIiwidGVybXNBcnJheSIsImJpbmRpbmdOb2RlcyIsImdldEJpbmRpbmdOb2RlcyIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJuYW1lZFBhcmFtZXRlcnNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudE5vZGVzIiwiZ2V0VmFyaWFibGVBc3NpZ25tZW50Tm9kZXMiLCJ2YXJpYWJsZUFzc2lnbm1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTZoQ2dCQTtlQUFBQTs7UUExWUFDO2VBQUFBOztRQWt1QkFDO2VBQUFBOztRQStDQUM7ZUFBQUE7O1FBcEdBQztlQUFBQTs7UUE3V0FDO2VBQUFBOztRQTVXQUM7ZUFBQUE7O1FBbzBCQUM7ZUFBQUE7O1FBM3ZDQUM7ZUFBQUE7O1FBNjFDQUM7ZUFBQUE7O1FBdkhBQztlQUFBQTs7UUF2cENBQztlQUFBQTs7UUEwVEFDO2VBQUFBOztRQTZmQUM7ZUFBQUE7O1FBbmVBQztlQUFBQTs7UUE2ZkFDO2VBQUFBOztRQS8zQkFDO2VBQUFBOztRQXk3QkFDO2VBQUFBOztRQW1NQUM7ZUFBQUE7O1FBdGlCQUM7ZUFBQUE7O1FBcWZBQztlQUFBQTs7UUE1akNBQztlQUFBQTs7UUFzN0JBQztlQUFBQTs7UUFsakNBQztlQUFBQTs7UUFhQUM7ZUFBQUE7O1FBbTBCQUM7ZUFBQUE7O1FBbmdCQUM7ZUFBQUE7O1FBNGlDQUM7ZUFBQUE7O1FBMVhBQztlQUFBQTs7UUErREFDO2VBQUFBOztRQXRFQUM7ZUFBQUE7O1FBMzlCQUM7ZUFBQUE7O1FBb3ZCQUM7ZUFBQUE7O1FBcWVBQztlQUFBQTs7UUEzSUFDO2VBQUFBOztRQWpGQUM7ZUFBQUE7O1FBaDNCQUM7ZUFBQUE7O1FBNlBBQztlQUFBQTs7UUFxWkFDO2VBQUFBOztRQXBNQUM7ZUFBQUE7O1FBcEJBQztlQUFBQTs7UUFpVUFDO2VBQUFBOztRQXJOQUM7ZUFBQUE7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