occam-furtle 3.0.445 → 3.0.447

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.
@@ -27,24 +27,18 @@ _export(exports, {
27
27
  get argumentTypeFromTypeNode () {
28
28
  return argumentTypeFromTypeNode;
29
29
  },
30
- get arrayAssignmentFromArrayAssignmentNode () {
31
- return arrayAssignmentFromArrayAssignmentNode;
32
- },
33
- get arrayAssignmentFromStatementNode () {
34
- return arrayAssignmentFromStatementNode;
35
- },
36
30
  get bindingFromBindingNode () {
37
31
  return bindingFromBindingNode;
38
32
  },
39
33
  get bindingsArrayFromBindingsNode () {
40
34
  return bindingsArrayFromBindingsNode;
41
35
  },
42
- get bindingsFromArrayAssignmentNode () {
43
- return bindingsFromArrayAssignmentNode;
44
- },
45
36
  get bindingsFromBindingsNode () {
46
37
  return bindingsFromBindingsNode;
47
38
  },
39
+ get bindingsFromListAssignmentNode () {
40
+ return bindingsFromListAssignmentNode;
41
+ },
48
42
  get bracketedTermFromBracketedTermNode () {
49
43
  return bracketedTermFromBracketedTermNode;
50
44
  },
@@ -120,6 +114,12 @@ _export(exports, {
120
114
  get lengthOfFromLengthOfNode () {
121
115
  return lengthOfFromLengthOfNode;
122
116
  },
117
+ get listAssignmentFromListAssignmentNode () {
118
+ return listAssignmentFromListAssignmentNode;
119
+ },
120
+ get listAssignmentFromStatementNode () {
121
+ return listAssignmentFromStatementNode;
122
+ },
123
123
  get logicalTermFromLogicalTermNode () {
124
124
  return logicalTermFromLogicalTermNode;
125
125
  },
@@ -396,9 +396,6 @@ _export(exports, {
396
396
  get variableAssignmentsFromVariableAssignmentsNode () {
397
397
  return variableAssignmentsFromVariableAssignmentsNode;
398
398
  },
399
- get variableFromArrayAssignmentNode () {
400
- return variableFromArrayAssignmentNode;
401
- },
402
399
  get variableFromContainsNode () {
403
400
  return variableFromContainsNode;
404
401
  },
@@ -411,6 +408,9 @@ _export(exports, {
411
408
  get variableFromLengthOfNode () {
412
409
  return variableFromLengthOfNode;
413
410
  },
411
+ get variableFromListAssignmentNode () {
412
+ return variableFromListAssignmentNode;
413
+ },
414
414
  get variableFromNodeQueryNode () {
415
415
  return variableFromNodeQueryNode;
416
416
  },
@@ -567,9 +567,9 @@ function lengthOfFromLengthOfNode(lengthOfNode, context) {
567
567
  return lengthOf;
568
568
  }
569
569
  function statementFromStatementNode(statementNode, context) {
570
- const { Statement } = _elements.default, node = statementNode, string = context.nodeAsString(node), breakPoint = null, arrayAssignment = arrayAssignmentFromStatementNode(statementNode, context), objectAssignment = objectAssignmentFromStatementNode(statementNode, context), variableAssigments = variableAssignmentsFromStatementNode(statementNode, context);
570
+ const { Statement } = _elements.default, node = statementNode, string = context.nodeAsString(node), breakPoint = null, listAssignment = listAssignmentFromStatementNode(statementNode, context), objectAssignment = objectAssignmentFromStatementNode(statementNode, context), variableAssignments = variableAssignmentsFromStatementNode(statementNode, context);
571
571
  context = null;
572
- const statement = new Statement(context, string, node, breakPoint, arrayAssignment, objectAssignment, variableAssigments);
572
+ const statement = new Statement(context, string, node, breakPoint, listAssignment, objectAssignment, variableAssignments);
573
573
  return statement;
574
574
  }
575
575
  function procedureFromProcedureNode(procedureNode, context) {
@@ -692,16 +692,16 @@ function comparisonTermFromComparisonTermNode(comparisonTermNode, context) {
692
692
  const { ComparisonTerm } = _elements.default, node = comparisonTermNode, string = context.nodeAsString(node), breakPoint = null, negated = negatedFromComparisonTermNode(comparisonTermNode, context), leftTerm = leftTermFromCompzrisonTermNode(comparisonTermNode, context), rightTerm = rightTermFromCompzrisonTermNode(comparisonTermNode, context), comparisonTerm = new ComparisonTerm(context, string, node, breakPoint, negated, leftTerm, rightTerm);
693
693
  return comparisonTerm;
694
694
  }
695
+ function listAssignmentFromListAssignmentNode(listAssignmentNode, context) {
696
+ const { ListAssignment } = _elements.default, node = listAssignmentNode, string = context.nodeAsString(node), breakPoint = null, variable = variableFromListAssignmentNode(listAssignmentNode, context), bindings = bindingsFromListAssignmentNode(listAssignmentNode, context);
697
+ context = null;
698
+ const listAssignment = new ListAssignment(context, string, node, breakPoint, variable, bindings);
699
+ return listAssignment;
700
+ }
695
701
  function namedBindingsFromObjectAssignmentNode(objectAssignmentNode, context) {
696
702
  const namedBindingsNode = objectAssignmentNode.getNamedBindingsNode(), namedBindings = namedBindingsFromNamedBindingsNode(namedBindingsNode, context);
697
703
  return namedBindings;
698
704
  }
699
- function arrayAssignmentFromArrayAssignmentNode(arrayAssignmentNode, context) {
700
- const { ArrayAssignment } = _elements.default, node = arrayAssignmentNode, string = context.nodeAsString(node), breakPoint = null, variable = variableFromArrayAssignmentNode(arrayAssignmentNode, context), bindings = bindingsFromArrayAssignmentNode(arrayAssignmentNode, context);
701
- context = null;
702
- const arrayAssignment = new ArrayAssignment(context, string, node, breakPoint, variable, bindings);
703
- return arrayAssignment;
704
- }
705
705
  function returnStatementFromReturnStatementNode(returnStatementNode, context) {
706
706
  const { ReturnStatement } = _elements.default, node = returnStatementNode, string = context.nodeAsString(node), breakPoint = null, value = valueFromReturnStatementNode(returnStatementNode, context);
707
707
  context = null;
@@ -1075,10 +1075,6 @@ function valueFromTypeAndVariableNode(type, variableNode, context) {
1075
1075
  const value = null;
1076
1076
  return value;
1077
1077
  }
1078
- function valueFromReturnStatementNode(returnStatementNode, context) {
1079
- const valueNode = returnStatementNode.getValueNode(), value = valueFromValueNode(valueNode, context);
1080
- return value;
1081
- }
1082
1078
  function nodesQueryFromExpressionNode(expressionNode, context) {
1083
1079
  let nodesQuery = null;
1084
1080
  const nodesQueryNode = expressionNode.getNodesQueryNode();
@@ -1107,6 +1103,10 @@ function rightTermFromLogicalTermNode(logicalTermNode, context) {
1107
1103
  const rightTermNode = logicalTermNode.getRightTermNode(), rightTerm = termFromTermNode(rightTermNode, context);
1108
1104
  return rightTerm;
1109
1105
  }
1106
+ function valueFromReturnStatementNode(returnStatementNode, context) {
1107
+ const valueNode = returnStatementNode.getValueNode(), value = valueFromValueNode(valueNode, context);
1108
+ return value;
1109
+ }
1110
1110
  function elseExpressionFromTernaryNode(ternaryNode, context) {
1111
1111
  const elseExpressionNode = ternaryNode.getElseExpressionNode(), elseExpression = expressionFromExpressionNode(elseExpressionNode, context);
1112
1112
  return elseExpression;
@@ -1174,14 +1174,22 @@ function rightTermFromCompzrisonTermNode(comparisonTermNode, context) {
1174
1174
  const rightTermNode = comparisonTermNode.getRightTermNode(), rightTerm = termFromTermNode(rightTermNode, context);
1175
1175
  return rightTerm;
1176
1176
  }
1177
- function variableFromArrayAssignmentNode(arrayAssignmentNode, context) {
1178
- const variableNode = arrayAssignmentNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
1177
+ function variableFromListAssignmentNode(listAssignmentNode, context) {
1178
+ const variableNode = listAssignmentNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
1179
1179
  return variable;
1180
1180
  }
1181
- function bindingsFromArrayAssignmentNode(arrayAssignmentNode, context) {
1182
- const bindingsNode = arrayAssignmentNode.getBindingsNode(), bindings = bindingsFromBindingsNode(bindingsNode, context);
1181
+ function bindingsFromListAssignmentNode(listAssignmentNode, context) {
1182
+ const bindingsNode = listAssignmentNode.getBindingsNode(), bindings = bindingsFromBindingsNode(bindingsNode, context);
1183
1183
  return bindings;
1184
1184
  }
1185
+ function listAssignmentFromStatementNode(statementNode, context) {
1186
+ let listAssignment = null;
1187
+ const listAssignmentNode = statementNode.getListAssignmentNode();
1188
+ if (listAssignmentNode !== null) {
1189
+ listAssignment = listAssignmentFromListAssignmentNode(listAssignmentNode, context);
1190
+ }
1191
+ return listAssignment;
1192
+ }
1185
1193
  function typeFromVariableAssignmentsNode(variableAssignmentsNode, context) {
1186
1194
  const typeNode = variableAssignmentsNode.getTypeNode(), type = typeFromTypeNode(typeNode, context);
1187
1195
  return type;
@@ -1190,14 +1198,6 @@ function anonymousProcedureFromReduceNode(reduceNode, context) {
1190
1198
  const anonymousProcedureNode = reduceNode.getAnonymousProcedureNode(), anonymousProcedure = anonymousProcedureFromAnonymousProcedureNode(anonymousProcedureNode, context);
1191
1199
  return anonymousProcedure;
1192
1200
  }
1193
- function arrayAssignmentFromStatementNode(statementNode, context) {
1194
- let arrayAssignment = null;
1195
- const arrayAssignmentNode = statementNode.getArrayAssignmentNode();
1196
- if (arrayAssignmentNode !== null) {
1197
- arrayAssignment = arrayAssignmentFromArrayAssignmentNode(arrayAssignmentNode, context);
1198
- }
1199
- return arrayAssignment;
1200
- }
1201
1201
  function variableFromObjectAssignmentNode(objectAssignmentNode, context) {
1202
1202
  const variableNode = objectAssignmentNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
1203
1203
  return variable;
@@ -1222,8 +1222,8 @@ function variableAssignmentsFromStatementNode(statementNode, context) {
1222
1222
  }
1223
1223
  return variableAssignments;
1224
1224
  }
1225
- function expressionFromVariableAssignmentNode(variableAssigmentNode, context) {
1226
- const expressionNode = variableAssigmentNode.getExpressionNode(), expression = expressionFromExpressionNode(expressionNode, context);
1225
+ function expressionFromVariableAssignmentNode(variableAssignmentNode, context) {
1226
+ const expressionNode = variableAssignmentNode.getExpressionNode(), expression = expressionFromExpressionNode(expressionNode, context);
1227
1227
  return expression;
1228
1228
  }
1229
1229
  function parametersFromAnonymousProcedureNode(anonymousProcedureNode, context) {
@@ -1281,4 +1281,4 @@ function variableAssignmentsArrayFromTypeAndVariableAssignmentsNode(type, variab
1281
1281
  return variableAssignmentsArray;
1282
1282
  }
1283
1283
 
1284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IHRlcm5hcnlTdHJpbmdGcm9tVGVybSxcbiAgICAgICAgIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMsXG4gICAgICAgICB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUsXG4gICAgICAgICBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlLFxuICAgICAgICAgZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUsXG4gICAgICAgICBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrLFxuICAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2ssXG4gICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSxcbiAgICAgICAgIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTb21lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNvbWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzb21lU3RyaW5nID0gc29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gc29tZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzb21lID0gbmV3IFNvbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKTtcblxuICByZXR1cm4gc29tZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIG5lZ2F0ZWRUZXJtID0gbmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGxvZ2ljYWxUZXJtID0gbG9naWNhbFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBjb21wYXJpc29uVGVybSA9IGNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgdmFyaWFibGUsXG4gICAgICBwcmltaXRpdmUsXG4gICAgICBuZWdhdGVkVGVybSxcbiAgICAgIGxvZ2ljYWxUZXJtLFxuICAgICAgYnJhY2tldGVkVGVybSxcbiAgICAgIGNvbXBhcmlzb25UZXJtXG4gICAgXSxcbiAgICB0ZXJtU3RyaW5nID0gdGVybVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgIHN0cmluZyA9IHRlcm1TdHJpbmcsICAvLy9cbiAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcHJpbWl0aXZlLCBuZWdhdGVkVGVybSwgbG9naWNhbFRlcm0sIGJyYWNrZXRlZFRlcm0sIGNvbXBhcmlzb25UZXJtKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGFyZ3VtZW50VHlwZSk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFsdWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICB2YXJpYWJsZSxcbiAgICAgICAgICBwcmltaXRpdmVcbiAgICAgICAgXSxcbiAgICAgICAgdmFsdWVTdHJpbmcgPSB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSB2YWx1ZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YWx1ZSA9IG5ldyBWYWx1ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBwcmltaXRpdmUpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXZlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXZlcnlOb2RlLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeVN0cmluZyA9IGV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBldmVyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5ID0gbmV3IEV2ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSk7XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxhYmVsTm9kZSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0Zyb21WYWx1ZXNOb2RlKHZhbHVlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYWx1ZXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB2YWx1ZU5vZGVzID0gdmFsdWVzTm9kZS5nZXRWYWx1ZU5vZGVzKCksXG4gICAgICAgIHZhbHVlc0FycmF5ID0gdmFsdWVzQXJyYXlGcm9tVmFsdWVOb2Rlcyh2YWx1ZU5vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSB2YWx1ZXNBcnJheSwgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhbHVlcyA9IG5ldyBWYWx1ZXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWR1Y2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVkdWNlTm9kZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IGluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlU3RyaW5nID0gcmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGluaXRpYWxWYWx1ZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gcmVkdWNlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZHVjZSA9IG5ldyBSZWR1Y2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgaW5pdGlhbFZhbHVlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiByZWR1Y2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBiaW5kaW5nTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVsaWRlZCA9IGVsaWRlZEZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZyA9IG5ldyBCaW5kaW5nKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSwgZWxpZGVkKTtcblxuICByZXR1cm4gYmluZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm5hcnlGcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJuYXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm5hcnlOb2RlLCAvLy9cbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbHNlRXhwcmVzc2lvbiA9IGVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeVN0cmluZyA9IHRlcm5hcnlTdHJpbmdGcm9tVGVybSh0ZXJtKSxcbiAgICAgICAgc3RyaW5nID0gdGVybmFyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm5hcnkgPSBuZXcgVGVybmFyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIGlmRXhwcmVzc2lvbiwgZWxzZUV4cHJlc3Npb24pO1xuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5zIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5zTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3Vic3RyaW5nRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5zID0gbmV3IENvbnRhaW5zKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHN1YnN0cmluZyk7XG5cbiAgcmV0dXJuIGNvbnRhaW5zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5kc1dpdGhGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVuZHNXaXRoIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVuZHNXaXRoTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3Vic3RyaW5nRnJvbUVuZHNXaXRoTm9kZShlbmRzV2l0aE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVuZHNXaXRoID0gbmV3IEVuZHNXaXRoKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHN1YnN0cmluZyk7XG5cbiAgcmV0dXJuIGVuZHNXaXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYmluZGluZ3NOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYmluZGluZ3NBcnJheSA9IGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gYmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZ3MgPSBuZXcgQmluZGluZ3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbmd0aE9mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxlbmd0aE9mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsZW5ndGhPZiA9IG5ldyBMZW5ndGhPZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gbGVuZ3RoT2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBhcnJheUFzc2lnbm1lbnQgPSBhcnJheUFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgb2JqZWN0QXNzaWdubWVudCA9IG9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ21lbnRzID0gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudCA9IG5ldyBTdGF0ZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheUFzc2lnbm1lbnQsIG9iamVjdEFzc2lnbm1lbnQsIHZhcmlhYmxlQXNzaWdtZW50cyk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlTm9kZSwgIC8vL1xuICAgICAgICB0eXBlID0gdHlwZUZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlU3RyaW5nID0gcHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVMYWJlbFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBsYWJlbCwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spLFxuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVTdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcHJvY2VkdXJlID0gbmV3IFByb2NlZHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGxhYmVsLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOb2RlUXVlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbm9kZVF1ZXJ5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZVF1ZXJ5ID0gbmV3IE5vZGVRdWVyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBxdWVyeSk7XG5cbiAgcmV0dXJuIG5vZGVRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcmltaXRpdmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJpbWl0aXZlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZSA9IG5ldyBQcmltaXRpdmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB2YWx1ZSk7XG5cbiAgcmV0dXJuIHByaW1pdGl2ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvSW50ZWdlckZyb21Ub0ludGVnZXJOb2RlKHRvSW50ZWdlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUb0ludGVnZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdG9JbnRlZ2VyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Ub0ludGVnZXJOb2RlKHRvSW50ZWdlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRvSW50ZWdlciA9IG5ldyBUb0ludGVnZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHRvSW50ZWdlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0c1dpdGhGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGFydHNXaXRoIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXJ0c1dpdGhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVN0YXJ0c1dpdGhOb2RlKHN0YXJ0c1dpdGhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3Vic3RyaW5nRnJvbVN0YXJ0c1dpdGhOb2RlKHN0YXJ0c1dpdGhOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGFydHNXaXRoID0gbmV3IFN0YXJ0c1dpdGgoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgc3Vic3RyaW5nKTtcblxuICByZXR1cm4gc3RhcnRzV2l0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOb2Rlc1F1ZXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5vZGVzUXVlcnlOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzUXVlcnkgPSBuZXcgTm9kZXNRdWVyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBxdWVyeSk7XG5cbiAgcmV0dXJuIG5vZGVzUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUGFyYW1ldGVycyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJzTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHBhcmFtZXRlcnNBcnJheSA9IHBhcmFtZXRlcnNBcnJheUZyb21QYXJhbWV0ZXJzTm9kZShwYXJhbWV0ZXJzTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gcGFyYW1ldGVyc0FycmF5OyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXJzID0gbmV3IFBhcmFtZXRlcnMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXhwcmVzc2lvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBleHByZXNzaW9uTm9kZSwgIC8vL1xuICAgICAgICB0ZXJtID0gdGVybUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNvbWUgPSBzb21lRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXZlcnkgPSBldmVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZHVjZSA9IHJlZHVjZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm5hcnkgPSB0ZXJuYXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9kZXNRdWVyeSA9IG5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZW5ndGhPZiA9IGxlbmd0aE9mRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9JbnRlZ2VyID0gdG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHJ5SW50ZWdlciA9IHRyeUludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb250YWlucyA9IGNvbnRhaW5zRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZW5kc1dpdGggPSBlbmRzV2l0aEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXJ0c1dpdGggPSBzdGFydHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICB0ZXJtLFxuICAgICAgICAgIHNvbWUsXG4gICAgICAgICAgZXZlcnksXG4gICAgICAgICAgcmVkdWNlLFxuICAgICAgICAgIHRlcm5hcnksXG4gICAgICAgICAgbm9kZVF1ZXJ5LFxuICAgICAgICAgIG5vZGVzUXVlcnksXG4gICAgICAgICAgbGVuZ3RoT2YsXG4gICAgICAgICAgdG9JbnRlZ2VyLFxuICAgICAgICAgIHRyeUludGVnZXIsXG4gICAgICAgICAgY29udGFpbnMsXG4gICAgICAgICAgZW5kc1dpdGgsXG4gICAgICAgICAgc3RhcnRzV2l0aCxcbiAgICAgICAgICByZXR1cm5CbG9jayxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsXG4gICAgICAgIF0sXG4gICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBleHByZXNzaW9uU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcywgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IGV4cHJlc3Npb25TdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IG5ldyBFeHByZXNzaW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgc29tZSwgZXZlcnksIHJlZHVjZSwgdGVybmFyeSwgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5LCBsZW5ndGhPZiwgdG9JbnRlZ2VyLCB0cnlJbnRlZ2VyLCBjb250YWlucywgZW5kc1dpdGgsIHN0YXJ0c1dpdGgsIHJldHVybkJsb2NrLCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyeUludGVnZXJGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUcnlJbnRlZ2VyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRyeUludGVnZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRyeUludGVnZXJOb2RlKHRyeUludGVnZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0cnlJbnRlZ2VyID0gbmV3IFRyeUludGVnZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHRyeUludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmV0dXJuQmxvY2sgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmV0dXJuQmxvY2tOb2RlLCAvLy9cbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vbnNlbnNpY2FsID0gbm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVyblN0YXRlbWVudCA9IHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2tTdHJpbmcgPSByZXR1cm5CbG9ja1N0cmluZ0Zyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudCksXG4gICAgICAgIHN0cmluZyA9IHJldHVybkJsb2NrU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJldHVybkJsb2NrID0gbmV3IFJldHVybkJsb2NrKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50cywgbm9uc2Vuc2ljYWwsIHJldHVyblN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIHJldHVybkJsb2NrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5lZ2F0ZWRUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybU5vZGUgPSBuZWdhdGVkVGVybU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5lZ2F0ZWRUZXJtID0gbmV3IE5lZ2F0ZWRUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgdGVybSk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9naWNhbFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExvZ2ljYWxUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxvZ2ljYWxUZXJtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRpc2p1bmN0aW9uID0gZGlzanVuY3Rpb25Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbG9naWNhbFRlcm0gPSBuZXcgTG9naWNhbFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBkaXNqdW5jdGlvbiwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGxvZ2ljYWxUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRCaW5kaW5nRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5hbWVkQmluZGluZyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBuYW1lZEJpbmRpbmdOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYWxpYXMgPSBhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG5hbWVkQmluZGluZyA9IG5ldyBOYW1lZEJpbmRpbmcoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBhbGlhcyk7XG5cbiAgcmV0dXJuIG5hbWVkQmluZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkQmluZGluZ3NGcm9tTmFtZWRCaW5kaW5nc05vZGUobmFtZWRCaW5kaW5nc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBOYW1lZEJpbmRpbmdzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5hbWVkQmluZGluZ3NOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lZEJpbmRpbmdOb2RlcyA9IG5hbWVkQmluZGluZ3NOb2RlLmdldE5hbWVkQmluZGluZ05vZGVzKCksXG4gICAgICAgIG5hbWVkQmluZGluZ3NBcnJheSA9IG5hbWVkUGFyYW1ldGVyc0FycmF5RnJvbU5hbWVkQmluZGluZ05vZGVzKG5hbWVkQmluZGluZ05vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSBuYW1lZEJpbmRpbmdzQXJyYXk7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG5hbWVkQmluZGluZ3MgPSBuZXcgTmFtZWRCaW5kaW5ncyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gbmFtZWRCaW5kaW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZFRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkVGVybSA9IG5ldyBCcmFja2V0ZWRUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsID0gbmV3IFByb2NlZHVyZUNhbGwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHZhbHVlcyk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tcGFyaXNvblRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29tcGFyaXNvblRlcm0gPSBuZXcgQ29tcGFyaXNvblRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuZWdhdGVkLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gY29tcGFyaXNvblRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZEJpbmRpbmdzRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWVkQmluZGluZ3NOb2RlID0gb2JqZWN0QXNzaWdubWVudE5vZGUuZ2V0TmFtZWRCaW5kaW5nc05vZGUoKSxcbiAgICAgICAgbmFtZWRCaW5kaW5ncyA9IG5hbWVkQmluZGluZ3NGcm9tTmFtZWRCaW5kaW5nc05vZGUobmFtZWRCaW5kaW5nc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBuYW1lZEJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlBc3NpZ25tZW50RnJvbUFycmF5QXNzaWdubWVudE5vZGUoYXJyYXlBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFycmF5QXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhcnJheUFzc2lnbm1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbUFycmF5QXNzaWdubWVudE5vZGUoYXJyYXlBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3NGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBhcnJheUFzc2lnbm1lbnQgPSBuZXcgQXJyYXlBc3NpZ25tZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGJpbmRpbmdzKTtcblxuICByZXR1cm4gYXJyYXlBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJldHVyblN0YXRlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZXR1cm5TdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuU3RhdGVtZW50ID0gbmV3IFJldHVyblN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhbHVlKTtcblxuICByZXR1cm4gcmV0dXJuU3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE9iamVjdEFzc2lnbm1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gb2JqZWN0QXNzaWdubWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmFtZWRCaW5kaW5ncyA9IG5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG9iamVjdEFzc2lnbm1lbnQgPSBuZXcgT2JqZWN0QXNzaWdubWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBuYW1lZEJpbmRpbmdzKTtcblxuICByZXR1cm4gb2JqZWN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBbm9ueW1vdXNQcm9jZWR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgIC8vL1xuICAgICAgICB0eXBlID0gdHlwZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vbnltb3VzUHJvY2VkdXJlU3RyaW5nID0gYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2sodHlwZSwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spLFxuICAgICAgICBzdHJpbmcgPSBub255bW91c1Byb2NlZHVyZVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZSA9IG5ldyBBbm9ueW1vdXNQcm9jZWR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudHNGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZUFzc2lnbm1lbnRzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCAvLy9cbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c0FycmF5KSxcbiAgICAgICAgYXJyYXkgPSB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXksIC8vL1xuICAgICAgICBzdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50cyA9IG5ldyBWYXJpYWJsZUFzc2lnbm1lbnRzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiB2YXJpYWJsZUFzc2lnbm1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZUFzc2lnbm1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlKHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlKHR5cGUsIHZhcmlhYmxlLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBhc3NpZ25tZW50ID0gbmV3IFZhcmlhYmxlQXNzaWdubWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gYXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHR5cGVOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gbGFiZWxOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZU5vZGUgPSByZWR1Y2VOb2RlLmdldFZhbHVlTm9kZSgpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBiaW5kaW5nTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlTm9kZSA9IGJpbmRpbmdOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVOb2RlICE9IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHNvbWVOb2RlLmdldFZhcmlhYmxlTm9kZSgpLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gIGNvbnN0IG5hbWUgPSB2YXJpYWJsZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwcm9jZWR1cmVOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJpbWl0aXZlID0gbnVsbDtcblxuICBjb25zdCBwcmltaXRpdmVOb2RlID0gdGVybU5vZGUuZ2V0UHJpbWl0aXZlTm9kZSgpO1xuXG4gIGlmIChwcmltaXRpdmVOb2RlICE9PSBudWxsKSB7XG4gICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBldmVyeU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWxpZGVkRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGVsaWRlZCA9IGJpbmRpbmdOb2RlLmlzRWxpZGVkKCk7XG5cbiAgcmV0dXJuIGVsaWRlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gcGFyYW1ldGVyTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcmVmZXJlbmNlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0eXBlTmFtZSA9IHByaW1pdGl2ZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgdHlwZSA9IFR5cGUuZnJvbVR5cGVOYW1lKHR5cGVOYW1lLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhbHVlTm9kZSh2YWx1ZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YWx1ZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltaXRpdmVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJpbWl0aXZlID0gbnVsbDtcblxuICBjb25zdCBwcmltaXRpdmVOb2RlID0gdmFsdWVOb2RlLmdldFByaW1pdGl2ZU5vZGUoKTtcblxuICBpZiAocHJpbWl0aXZlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByaW1pdGl2ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSByZWR1Y2VOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBub2RlUXVlcnlOb2RlLmdldFN0cmluZygpLFxuICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uU3RyaW5nKGV4cHJlc3Npb25TdHJpbmcpO1xuXG4gIHJldHVybiBxdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZSA9IHByaW1pdGl2ZU5vZGUuZ2V0VmFsdWUoKTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlID0gcHJvY2VkdXJlTm9kZS5nZXRMYWJlbE5vZGUoKSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzb21lID0gbnVsbDtcblxuICBjb25zdCBzb21lTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFNvbWVOb2RlKCk7XG5cbiAgaWYgKHNvbWVOb2RlICE9PSBudWxsKSB7XG4gICAgc29tZSA9IHNvbWVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNvbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgbmVnYXRlZFRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IG5lZ2F0ZWRUZXJtTm9kZSA9IHRlcm1Ob2RlLmdldE5lZ2F0ZWRUZXJtTm9kZSgpO1xuXG4gIGlmIChuZWdhdGVkVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBuZWdhdGVkVGVybSA9IG5lZ2F0ZWRUZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZShuZWdhdGVkVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5lZ2F0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9naWNhbFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxvZ2ljYWxUZXJtID0gbnVsbDtcblxuICBjb25zdCBsb2dpY2FsVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXRMb2dpY2FsVGVybU5vZGUoKTtcblxuICBpZiAobG9naWNhbFRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgbG9naWNhbFRlcm0gPSBsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBsb2dpY2FsVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IG5vZGVzUXVlcnlOb2RlLmdldFN0cmluZygpLFxuICAgICAgICBleHByZXNzaW9uU3RyaW5nID0gc3RyaW5nLCAgLy8vXG4gICAgICAgIHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoZXhwcmVzc2lvblN0cmluZyk7XG5cbiAgcmV0dXJuIHF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGV2ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBldmVyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRFdmVyeU5vZGUoKTtcblxuICBpZiAoZXZlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgZXZlcnkgPSBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBldmVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gQk9PTEVBTl9UWVBFX05BTUU7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU5lZ2F0ZWRUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IEJPT0xFQU5fVFlQRV9OQU1FO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gbmVnYXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgYXJndW1lbnRUeXBlID0gbnVsbDtcblxuICBjb25zdCBhcmd1bWVudFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0QXJndW1lbnRUeXBlTmFtZSgpO1xuXG4gIGlmIChhcmd1bWVudFR5cGVOYW1lICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cztcblxuICAgIGFyZ3VtZW50VHlwZSA9IFR5cGUuZnJvbVR5cGVOYW1lKGFyZ3VtZW50VHlwZU5hbWUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFyZ3VtZW50VHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbUxlbmd0aE9mTm9kZShsZW5ndGhPZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gbGVuZ3RoT2ZOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBjb250YWluc05vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBlbmRzV2l0aE5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWR1Y2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZHVjZU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRSZWR1Y2VOb2RlKCk7XG5cbiAgaWYgKHJlZHVjZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWR1Y2UgPSByZWR1Y2VGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWR1Y2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IG5hbWVkQmluZGluZ05vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IG5hbWVkQmluZGluZ05vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyaW5nRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gY29udGFpbnNOb2RlLmdldFN0cmluZygpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdHJpbmc7ICAvLy9cblxuICByZXR1cm4gc3Vic3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyaW5nRnJvbUVuZHNXaXRoTm9kZShlbmRzV2l0aE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gZW5kc1dpdGhOb2RlLmdldFN0cmluZygpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdHJpbmc7ICAvLy9cblxuICByZXR1cm4gc3Vic3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxpYXNGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFsaWFzID0gbmFtZWRCaW5kaW5nTm9kZS5nZXRBbGlhcygpO1xuXG4gIHJldHVybiBhbGlhcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBub2RlUXVlcnlOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm5hcnkgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm5hcnlOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0VGVybmFyeU5vZGUoKTtcblxuICBpZiAodGVybmFyeU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJuYXJ5ID0gdGVybmFyeUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybmFyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGJyYWNrZXRlZFRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IGJyYWNrZXRlZFRlcm1Ob2RlID0gdGVybU5vZGUuZ2V0QnJhY2tldGVkVGVybU5vZGUoKTtcblxuICBpZiAoYnJhY2tldGVkVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBicmFja2V0ZWRUZXJtID0gYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYnJhY2tldGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0b0ludGVnZXJOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBicmFja2V0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlKHRlcm1OT2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb21wYXJpc29uVGVybSA9IG51bGw7XG5cbiAgY29uc3QgY29tcGFyaXNvblRlcm1Ob2RlID0gdGVybU5PZGUuZ2V0Q29tcGFyaXNvblRlcm1Ob2RlKCk7XG5cbiAgaWYgKGNvbXBhcmlzb25UZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbXBhcmlzb25UZXJtID0gY29tcGFyaXNvblRlcm1Gcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29tcGFyaXNvblRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsVmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gdmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW5pdGlhbFZhbHVlID0gdmFsdWU7IC8vL1xuXG4gIHJldHVybiBpbml0aWFsVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHByZXNzaW9uRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbiA9IG51bGw7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UcnlJbnRlZ2VyTm9kZSh0cnlJbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0cnlJbnRlZ2VyTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBzdGFydHNXaXRoTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBub2Rlc1F1ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGhPZkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVuZ3RoT2YgPSBudWxsO1xuXG4gIGNvbnN0IGxlbmd0aE9mTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldExlbmd0aE9mTm9kZSgpO1xuXG4gIGlmIChsZW5ndGhPZk5vZGUgIT09IG51bGwpIHtcbiAgICBsZW5ndGhPZiA9IGxlbmd0aE9mRnJvbUxlbmd0aE9mTm9kZShsZW5ndGhPZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbmd0aE9mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbnRhaW5zID0gbnVsbDtcblxuICBjb25zdCBjb250YWluc05vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRDb250YWluc05vZGUoKTtcblxuICBpZiAoY29udGFpbnNOb2RlICE9PSBudWxsKSB7XG4gICAgY29udGFpbnMgPSBjb250YWluc0Zyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWlucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuZHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBlbmRzV2l0aCA9IG51bGw7XG5cbiAgY29uc3QgZW5kc1dpdGhOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0RW5kc1dpdGhOb2RlKCk7XG5cbiAgaWYgKGVuZHNXaXRoTm9kZSAhPT0gbnVsbCkge1xuICAgIGVuZHNXaXRoID0gZW5kc1dpdGhGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZW5kc1dpdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWZFeHByZXNzaW9uTm9kZSA9IHRlcm5hcnlOb2RlLmdldElmRXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgaWZFeHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShpZkV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gaWZFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSBwcm9jZWR1cmVOb2RlLmdldFBhcmFtZXRlcnNOb2RlKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvSW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdG9JbnRlZ2VyID0gbnVsbDtcblxuICBjb25zdCB0b0ludGVnZXJOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0VG9JbnRlZ2VyTm9kZSgpO1xuXG4gIGlmICh0b0ludGVnZXJOb2RlICE9PSBudWxsKSB7XG4gICAgdG9JbnRlZ2VyID0gdG9JbnRlZ2VyRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdG9JbnRlZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZVF1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBub2RlUXVlcnkgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVRdWVyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXROb2RlUXVlcnlOb2RlKCk7XG5cbiAgaWYgKG5vZGVRdWVyeU5vZGUgIT09IG51bGwpIHtcbiAgICBub2RlUXVlcnkgPSBub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBub2RlUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gc3RhcnRzV2l0aE5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGxvZ2ljYWxUZXJtTm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlc05vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRWYWx1ZXNOb2RlKCksXG4gICAgICAgIHZhbHVlcyA9IHZhbHVlc0Zyb21WYWx1ZXNOb2RlKHZhbHVlc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja0Zyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmV0dXJuQmxvY2tOb2RlID0gcHJvY2VkdXJlTm9kZS5nZXRSZXR1cm5CbG9ja05vZGUoKSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlKHR5cGUsIHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YWx1ZSA9IG51bGw7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlTm9kZSA9IHJldHVyblN0YXRlbWVudE5vZGUuZ2V0VmFsdWVOb2RlKCksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZXNRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbm9kZXNRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNRdWVyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXROb2Rlc1F1ZXJ5Tm9kZSgpO1xuXG4gIGlmIChub2Rlc1F1ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIG5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBub2Rlc1F1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ5SW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHJ5SW50ZWdlciA9IG51bGw7XG5cbiAgY29uc3QgdHJ5SW50ZWdlck5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUcnlJbnRlZ2VyTm9kZSgpO1xuXG4gIGlmICh0cnlJbnRlZ2VyTm9kZSAhPT0gbnVsbCkge1xuICAgIHRyeUludGVnZXIgPSB0cnlJbnRlZ2VyRnJvbVRyeUludGVnZXJOb2RlKHRyeUludGVnZXJOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0cnlJbnRlZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRzV2l0aEZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhcnRzV2l0aCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhcnRzV2l0aE5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRTdGFydHNXaXRoTm9kZSgpO1xuXG4gIGlmIChzdGFydHNXaXRoTm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXJ0c1dpdGggPSBzdGFydHNXaXRoRnJvbVN0YXJ0c1dpdGhOb2RlKHN0YXJ0c1dpdGhOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGFydHNXaXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IGxvZ2ljYWxUZXJtTm9kZS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWxzZUV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZWxzZUV4cHJlc3Npb25Ob2RlID0gdGVybmFyeU5vZGUuZ2V0RWxzZUV4cHJlc3Npb25Ob2RlKCksXG4gICAgICAgIGVsc2VFeHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShlbHNlRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBlbHNlRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZXR1cm5CbG9jayA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuQmxvY2tOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UmV0dXJuQmxvY2tOb2RlKCk7XG5cbiAgaWYgKHJldHVybkJsb2NrTm9kZSAhPT0gbnVsbCkge1xuICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSByZXR1cm5CbG9ja05vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZW50Tm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGNvbXBhcmlzb25UZXJtTm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFub255bW91c1Byb2NlZHVyZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gc29tZU5vZGUuZ2V0QW5vbnltb3VzUHJvY2VkdXJlTm9kZSgpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub25zZW5zaWNhbCA9IHJldHVybkJsb2NrTm9kZS5pc05vbnNlbnNpY2FsKCk7XG5cbiAgcmV0dXJuIG5vbnNlbnNpY2FsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzanVuY3Rpb25Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkaXNqdW5jdGlvbiA9IGxvZ2ljYWxUZXJtTm9kZS5pc0Rpc2p1bmN0aW9uKCk7XG5cbiAgcmV0dXJuIGRpc2p1bmN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGNvbXBhcmlzb25UZXJtTm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZVN0cmluZ0Zyb21OYW1lKG5hbWUpLFxuICAgICAgICBzdHJpbmcgPSB2YXJpYWJsZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCB2YWx1ZSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGFycmF5QXNzaWdubWVudE5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ3NGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJpbmRpbmdzTm9kZSA9IGFycmF5QXNzaWdubWVudE5vZGUuZ2V0QmluZGluZ3NOb2RlKCksXG4gICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3NGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFub255bW91c1Byb2NlZHVyZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0QW5vbnltb3VzUHJvY2VkdXJlTm9kZSgpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgYXJyYXlBc3NpZ25tZW50ID0gbnVsbDtcblxuICBjb25zdCBhcnJheUFzc2lnbm1lbnROb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRBcnJheUFzc2lnbm1lbnROb2RlKCk7XG5cbiAgaWYgKGFycmF5QXNzaWdubWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBhcnJheUFzc2lnbm1lbnQgPSBhcnJheUFzc2lnbm1lbnRGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZShhcnJheUFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBhcnJheUFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgb2JqZWN0QXNzaWdubWVudCA9IG51bGw7XG5cbiAgY29uc3Qgb2JqZWN0QXNzaWdubWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldE9iamVjdEFzc2lnbm1lbnROb2RlKCk7XG5cbiAgaWYgKG9iamVjdEFzc2lnbm1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgb2JqZWN0QXNzaWdubWVudCA9IG9iamVjdEFzc2lnbm1lbnRGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdEFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5TdGF0ZW1lbnROb2RlID0gcmV0dXJuQmxvY2tOb2RlLmdldFJldHVyblN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgcmV0dXJuU3RhdGVtZW50ID0gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJldHVyblN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudHNGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZUFzc2lnbm1lbnRzID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VmFyaWFibGVBc3NpZ25tZW50c05vZGUoKTtcblxuICBpZiAodmFyaWFibGVBc3NpZ25tZW50c05vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZUFzc2lnbm1lbnRzID0gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tVmFyaWFibGVBc3NpZ25tZW50Tm9kZSh2YXJpYWJsZUFzc2lnbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXhwcmVzc2lvbk5vZGUgPSB2YXJpYWJsZUFzc2lnbWVudE5vZGUuZ2V0RXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLmdldFBhcmFtZXRlcnNOb2RlKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLmdldFJldHVybkJsb2NrTm9kZSgpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlKHR5cGUsIHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNBcnJheUZyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zQXJyYXkgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4geyAvLy9cbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzKHZhbHVlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzQXJyYXkgPSB2YWx1ZU5vZGVzLm1hcCgodmFsdWVOb2RlKSA9PiB7IC8vL1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBiaW5kaW5nTm9kZXMgPSBiaW5kaW5nc05vZGUuZ2V0QmluZGluZ05vZGVzKCksXG4gICAgICAgIGJpbmRpbmdzQXJyYXkgPSBiaW5kaW5nTm9kZXMubWFwKChiaW5kaW5nTm9kZSkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCBiaW5kaW5nID0gYmluZGluZ0Zyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gYmluZGluZztcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyTm9kZXMgPSBwYXJhbWV0ZXJzTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzQXJyYXkgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IHsgLy8vXG4gICAgICAgICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVyc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMobmFtZWRCaW5kaW5nTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRQYXJhbWV0ZXJzQXJyYXkgPSBuYW1lZEJpbmRpbmdOb2Rlcy5tYXAoKG5hbWVkQmluZGluZ05vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgbmFtZWRCaW5kaW5nID0gbmFtZWRCaW5kaW5nRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbmFtZWRCaW5kaW5nO1xuICB9KTtcblxuICByZXR1cm4gbmFtZWRQYXJhbWV0ZXJzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudE5vZGVzID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUuZ2V0VmFyaWFibGVBc3NpZ25tZW50Tm9kZXMoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50c0FycmF5ID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZXMubWFwKCh2YXJpYWJsZUFzc2lnbm1lbnROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheTtcbn1cbiJdLCJuYW1lcyI6WyJhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbVJlZHVjZU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUiLCJhcmd1bWVudFR5cGVGcm9tVHlwZU5vZGUiLCJhcnJheUFzc2lnbm1lbnRGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZSIsImFycmF5QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlIiwiYmluZGluZ0Zyb21CaW5kaW5nTm9kZSIsImJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlIiwiYmluZGluZ3NGcm9tQXJyYXlBc3NpZ25tZW50Tm9kZSIsImJpbmRpbmdzRnJvbUJpbmRpbmdzTm9kZSIsImJyYWNrZXRlZFRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlIiwiY29tcGFyaXNvblRlcm1Gcm9tQ29tcGFyaXNvblRlcm1Ob2RlIiwiY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUiLCJjb250YWluc0Zyb21Db250YWluc05vZGUiLCJjb250YWluc0Zyb21FeHByZXNzaW9uTm9kZSIsImRpc2p1bmN0aW9uRnJvbUxvZ2ljYWxUZXJtTm9kZSIsImVsaWRlZEZyb21CaW5kaW5nTm9kZSIsImVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlIiwiZW5kc1dpdGhGcm9tRW5kc1dpdGhOb2RlIiwiZW5kc1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJldmVyeUZyb21FdmVyeU5vZGUiLCJldmVyeUZyb21FeHByZXNzaW9uTm9kZSIsImV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUiLCJleHByZXNzaW9uRnJvbVZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJleHByZXNzaW9uRnJvbVZhcmlhYmxlTm9kZSIsImlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSIsImluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwibGFiZWxGcm9tUHJvY2VkdXJlTm9kZSIsImxlZnRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZSIsImxlZnRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZSIsImxlbmd0aE9mRnJvbUV4cHJlc3Npb25Ob2RlIiwibGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlIiwibG9naWNhbFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwibG9naWNhbFRlcm1Gcm9tVGVybU5vZGUiLCJuYW1lRnJvbUJpbmRpbmdOb2RlIiwibmFtZUZyb21MYWJlbE5vZGUiLCJuYW1lRnJvbU5hbWVkQmluZGluZ05vZGUiLCJuYW1lRnJvbVBhcmFuZXRlck5vZGUiLCJuYW1lRnJvbVJlZmVyZW5jZU5vZGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwibmFtZUZyb21WYXJpYWJsZU5vZGUiLCJuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZSIsIm5hbWVkQmluZGluZ3NGcm9tTmFtZWRCaW5kaW5nc05vZGUiLCJuYW1lZEJpbmRpbmdzRnJvbU9iamVjdEFzc2lnbm1lbnROb2RlIiwibmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMiLCJuZWdhdGVkRnJvbUNvbXBhcmlzb25UZXJtTm9kZSIsIm5lZ2F0ZWRUZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZSIsIm5lZ2F0ZWRUZXJtRnJvbVRlcm1Ob2RlIiwibm9kZVF1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlIiwibm9kZVF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUiLCJub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlIiwibm9kZXNRdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZSIsIm5vbnNlbnNpY2FsRnJvbVJldHVybkJsb2NrTm9kZSIsIm9iamVjdEFzc2lnbm1lbnRGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUiLCJvYmplY3RBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNBcnJheUZyb21QYXJhbWV0ZXJzTm9kZSIsInBhcmFtZXRlcnNGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZU5vZGUiLCJwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZSIsInByaW1pdGl2ZUZyb21UZXJtTm9kZSIsInByaW1pdGl2ZUZyb21WYWx1ZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbUV4cHJlc3Npb25Ob2RlIiwicHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZUZyb21Qcm9jZWR1cmVOb2RlIiwicXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZSIsInF1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlIiwicmVkdWNlRnJvbUV4cHJlc3Npb25Ob2RlIiwicmVkdWNlRnJvbVJlZHVjZU5vZGUiLCJyZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJyZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZSIsInJldHVybkJsb2NrRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUiLCJyZXR1cm5CbG9ja0Zyb21FeHByZXNzaW9uTm9kZSIsInJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUiLCJyZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUiLCJyZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuQmxvY2tOb2RlIiwicmV0dXJuU3RhdGVtZW50RnJvbVJldHVyblN0YXRlbWVudE5vZGUiLCJyaWdodFRlcm1Gcm9tQ29tcHpyaXNvblRlcm1Ob2RlIiwicmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZSIsInNvbWVGcm9tRXhwcmVzc2lvbk5vZGUiLCJzb21lRnJvbVNvbWVOb2RlIiwic3RhcnRzV2l0aEZyb21FeHByZXNzaW9uTm9kZSIsInN0YXJ0c1dpdGhGcm9tU3RhcnRzV2l0aE5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudHNGcm9tUmV0dXJuQmxvY2tOb2RlIiwic3Vic3RyaW5nRnJvbUNvbnRhaW5zTm9kZSIsInN1YnN0cmluZ0Zyb21FbmRzV2l0aE5vZGUiLCJzdWJzdHJpbmdGcm9tU3RhcnRzV2l0aE5vZGUiLCJ0ZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlIiwidGVybUZyb21FeHByZXNzaW9uTm9kZSIsInRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVGVybmFyeU5vZGUiLCJ0ZXJtc0FycmF5RnJvbVRlcm1Ob2RlcyIsInRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlIiwidG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlIiwidG9JbnRlZ2VyRnJvbVRvSW50ZWdlck5vZGUiLCJ0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlIiwidHJ5SW50ZWdlckZyb21UcnlJbnRlZ2VyTm9kZSIsInR5cGVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInR5cGVGcm9tQmluZGluZ05vZGUiLCJ0eXBlRnJvbUxvZ2ljYWxUZXJtTm9kZSIsInR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZSIsInR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlIiwidHlwZUZyb21QYXJhbmV0ZXJOb2RlIiwidHlwZUZyb21QcmltaXRpdmVOb2RlIiwidHlwZUZyb21Qcm9jZWR1cmVOb2RlIiwidHlwZUZyb21UeXBlTm9kZSIsInR5cGVGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlTm9kZSIsInZhbHVlRnJvbVByaW1pdGl2ZU5vZGUiLCJ2YWx1ZUZyb21SZWR1Y2VOb2RlIiwidmFsdWVGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUiLCJ2YWx1ZUZyb21WYWx1ZU5vZGUiLCJ2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzIiwidmFsdWVzRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwidmFsdWVzRnJvbVZhbHVlc05vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0Zyb21TdGF0ZW1lbnROb2RlIiwidmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInZhcmlhYmxlRnJvbUFycmF5QXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21Db250YWluc05vZGUiLCJ2YXJpYWJsZUZyb21FbmRzV2l0aE5vZGUiLCJ2YXJpYWJsZUZyb21FdmVyeU5vZGUiLCJ2YXJpYWJsZUZyb21MZW5ndGhPZk5vZGUiLCJ2YXJpYWJsZUZyb21Ob2RlUXVlcnlOb2RlIiwidmFyaWFibGVGcm9tTm9kZXNRdWVyeU5vZGUiLCJ2YXJpYWJsZUZyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlRnJvbVJlZHVjZU5vZGUiLCJ2YXJpYWJsZUZyb21Tb21lTm9kZSIsInZhcmlhYmxlRnJvbVN0YXJ0c1dpdGhOb2RlIiwidmFyaWFibGVGcm9tVGVybU5vZGUiLCJ2YXJpYWJsZUZyb21Ub0ludGVnZXJOb2RlIiwidmFyaWFibGVGcm9tVHJ5SW50ZWdlck5vZGUiLCJ2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZUZyb21WYWx1ZU5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJzb21lTm9kZSIsImNvbnRleHQiLCJTb21lIiwiZWxlbWVudHMiLCJub2RlIiwidmFyaWFibGUiLCJhbm9ueW1vdXNQcm9jZWR1cmUiLCJzb21lU3RyaW5nIiwic29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSIsInN0cmluZyIsImJyZWFrUG9pbnQiLCJzb21lIiwidGVybU5vZGUiLCJUZXJtIiwicHJpbWl0aXZlIiwibmVnYXRlZFRlcm0iLCJsb2dpY2FsVGVybSIsImJyYWNrZXRlZFRlcm0iLCJjb21wYXJpc29uVGVybSIsInByb3BlcnRpZXMiLCJ0ZXJtU3RyaW5nIiwidGVybVN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidGVybSIsInR5cGVOb2RlIiwiVHlwZSIsIm5vZGVBc1N0cmluZyIsIm5hbWUiLCJhcmd1bWVudFR5cGUiLCJ0eXBlIiwidmFsdWVOb2RlIiwiVmFsdWUiLCJ2YWx1ZVN0cmluZyIsInZhbHVlU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ2YWx1ZSIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJldmVyeU5vZGUiLCJFdmVyeSIsImV2ZXJ5U3RyaW5nIiwiZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJldmVyeSIsImxhYmVsTm9kZSIsIkxhYmVsIiwibGFiZWwiLCJ2YWx1ZXNOb2RlIiwiVmFsdWVzIiwidmFsdWVOb2RlcyIsImdldFZhbHVlTm9kZXMiLCJ2YWx1ZXNBcnJheSIsImFycmF5IiwidmFsdWVzIiwicmVkdWNlTm9kZSIsIlJlZHVjZSIsImluaXRpYWxWYWx1ZSIsInJlZHVjZVN0cmluZyIsInJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwicmVkdWNlIiwiYmluZGluZ05vZGUiLCJCaW5kaW5nIiwiZWxpZGVkIiwiYmluZGluZyIsInRlcm5hcnlOb2RlIiwiVGVybmFyeSIsImlmRXhwcmVzc2lvbiIsImVsc2VFeHByZXNzaW9uIiwidGVybmFyeVN0cmluZyIsInRlcm5hcnlTdHJpbmdGcm9tVGVybSIsInRlcm5hcnkiLCJjb250YWluc05vZGUiLCJDb250YWlucyIsInN1YnN0cmluZyIsImNvbnRhaW5zIiwiZW5kc1dpdGhOb2RlIiwiRW5kc1dpdGgiLCJlbmRzV2l0aCIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiZXhwcmVzc2lvbiIsImJpbmRpbmdzTm9kZSIsIkJpbmRpbmdzIiwiYmluZGluZ3NBcnJheSIsImJpbmRpbmdzIiwibGVuZ3RoT2ZOb2RlIiwiTGVuZ3RoT2YiLCJsZW5ndGhPZiIsInN0YXRlbWVudE5vZGUiLCJTdGF0ZW1lbnQiLCJhcnJheUFzc2lnbm1lbnQiLCJvYmplY3RBc3NpZ25tZW50IiwidmFyaWFibGVBc3NpZ21lbnRzIiwic3RhdGVtZW50IiwicHJvY2VkdXJlTm9kZSIsIlByb2NlZHVyZSIsInBhcmFtZXRlcnMiLCJyZXR1cm5CbG9jayIsInByb2NlZHVyZVN0cmluZyIsInByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2siLCJwcm9jZWR1cmUiLCJyZWZlcmVuY2VOb2RlIiwiUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwicGFyYW1ldGVyTm9kZSIsIlBhcmFtZXRlciIsInBhcmFtZXRlciIsIm5vZGVRdWVyeU5vZGUiLCJOb2RlUXVlcnkiLCJxdWVyeSIsIm5vZGVRdWVyeSIsInByaW1pdGl2ZU5vZGUiLCJQcmltaXRpdmUiLCJ0b0ludGVnZXJOb2RlIiwiVG9JbnRlZ2VyIiwidG9JbnRlZ2VyIiwic3RhcnRzV2l0aE5vZGUiLCJTdGFydHNXaXRoIiwic3RhcnRzV2l0aCIsIm5vZGVzUXVlcnlOb2RlIiwiTm9kZXNRdWVyeSIsIm5vZGVzUXVlcnkiLCJwYXJhbWV0ZXJzTm9kZSIsIlBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzQXJyYXkiLCJleHByZXNzaW9uTm9kZSIsIkV4cHJlc3Npb24iLCJ0cnlJbnRlZ2VyIiwicHJvY2VkdXJlQ2FsbCIsImV4cHJlc3Npb25TdHJpbmciLCJleHByZXNzaW9uU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ0cnlJbnRlZ2VyTm9kZSIsIlRyeUludGVnZXIiLCJyZXR1cm5CbG9ja05vZGUiLCJSZXR1cm5CbG9jayIsInN0YXRlbWVudHMiLCJub25zZW5zaWNhbCIsInJldHVyblN0YXRlbWVudCIsInJldHVybkJsb2NrU3RyaW5nIiwicmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsIm5lZ2F0ZWRUZXJtTm9kZSIsIk5lZ2F0ZWRUZXJtIiwiZ2V0VGVybU5vZGUiLCJsb2dpY2FsVGVybU5vZGUiLCJMb2dpY2FsVGVybSIsImRpc2p1bmN0aW9uIiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJuYW1lZEJpbmRpbmdOb2RlIiwiTmFtZWRCaW5kaW5nIiwiYWxpYXMiLCJuYW1lZEJpbmRpbmciLCJuYW1lZEJpbmRpbmdzTm9kZSIsIk5hbWVkQmluZGluZ3MiLCJuYW1lZEJpbmRpbmdOb2RlcyIsImdldE5hbWVkQmluZGluZ05vZGVzIiwibmFtZWRCaW5kaW5nc0FycmF5IiwibmFtZWRCaW5kaW5ncyIsImJyYWNrZXRlZFRlcm1Ob2RlIiwiQnJhY2tldGVkVGVybSIsInByb2NlZHVyZUNhbGxOb2RlIiwiUHJvY2VkdXJlQ2FsbCIsImNvbXBhcmlzb25UZXJtTm9kZSIsIkNvbXBhcmlzb25UZXJtIiwibmVnYXRlZCIsIm9iamVjdEFzc2lnbm1lbnROb2RlIiwiZ2V0TmFtZWRCaW5kaW5nc05vZGUiLCJhcnJheUFzc2lnbm1lbnROb2RlIiwiQXJyYXlBc3NpZ25tZW50IiwicmV0dXJuU3RhdGVtZW50Tm9kZSIsIlJldHVyblN0YXRlbWVudCIsIk9iamVjdEFzc2lnbm1lbnQiLCJhbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwiQW5vbnltb3VzUHJvY2VkdXJlIiwibm9ueW1vdXNQcm9jZWR1cmVTdHJpbmciLCJhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsInZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwiVmFyaWFibGVBc3NpZ25tZW50cyIsInZhcmlhYmxlQXNzaWdubWVudHNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZyIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50cyIsInZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJWYXJpYWJsZUFzc2lnbm1lbnQiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlIiwiYXNzaWdubWVudCIsImdldE5hbWUiLCJnZXRWYWx1ZU5vZGUiLCJnZXRUeXBlTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsImdldFByaW1pdGl2ZU5vZGUiLCJpc0VsaWRlZCIsInR5cGVOYW1lIiwiZ2V0VHlwZU5hbWUiLCJmcm9tVHlwZU5hbWUiLCJnZXRTdHJpbmciLCJRdWVyeSIsImZyb21FeHByZXNzaW9uU3RyaW5nIiwiZ2V0VmFsdWUiLCJnZXRMYWJlbE5vZGUiLCJnZXRTb21lTm9kZSIsImdldE5lZ2F0ZWRUZXJtTm9kZSIsImdldExvZ2ljYWxUZXJtTm9kZSIsImdldEV2ZXJ5Tm9kZSIsIkJPT0xFQU5fVFlQRV9OQU1FIiwiYXJndW1lbnRUeXBlTmFtZSIsImdldEFyZ3VtZW50VHlwZU5hbWUiLCJnZXRSZWR1Y2VOb2RlIiwiZ2V0QWxpYXMiLCJnZXRUZXJuYXJ5Tm9kZSIsImdldEJyYWNrZXRlZFRlcm1Ob2RlIiwidGVybU5PZGUiLCJnZXRDb21wYXJpc29uVGVybU5vZGUiLCJnZXRMZW5ndGhPZk5vZGUiLCJnZXRDb250YWluc05vZGUiLCJnZXRFbmRzV2l0aE5vZGUiLCJpZkV4cHJlc3Npb25Ob2RlIiwiZ2V0SWZFeHByZXNzaW9uTm9kZSIsImdldFBhcmFtZXRlcnNOb2RlIiwiZ2V0VG9JbnRlZ2VyTm9kZSIsImdldE5vZGVRdWVyeU5vZGUiLCJsZWZ0VGVybU5vZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJnZXRWYWx1ZXNOb2RlIiwiZ2V0UmV0dXJuQmxvY2tOb2RlIiwiZ2V0Tm9kZXNRdWVyeU5vZGUiLCJnZXRUcnlJbnRlZ2VyTm9kZSIsImdldFN0YXJ0c1dpdGhOb2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJlbHNlRXhwcmVzc2lvbk5vZGUiLCJnZXRFbHNlRXhwcmVzc2lvbk5vZGUiLCJzdGF0ZW1lbnROb2RlcyIsImdldFN0YXRlbWVudE5vZGVzIiwibWFwIiwiaXNOZWdhdGVkIiwiZ2V0QW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsImlzTm9uc2Vuc2ljYWwiLCJpc0Rpc2p1bmN0aW9uIiwiZ2V0UmVmZXJlbmNlTm9kZSIsInZhcmlhYmxlU3RyaW5nIiwidmFyaWFibGVTdHJpbmdGcm9tTmFtZSIsImdldFByb2NlZHVyZUNhbGxOb2RlIiwiZ2V0QmluZGluZ3NOb2RlIiwiZ2V0QXJyYXlBc3NpZ25tZW50Tm9kZSIsImdldE9iamVjdEFzc2lnbm1lbnROb2RlIiwiZ2V0UmV0dXJuU3RhdGVtZW50Tm9kZSIsImdldFZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidmFyaWFibGVBc3NpZ21lbnROb2RlIiwiZ2V0RXhwcmVzc2lvbk5vZGUiLCJ0ZXJtTm9kZXMiLCJ0ZXJtc0FycmF5IiwiYmluZGluZ05vZGVzIiwiZ2V0QmluZGluZ05vZGVzIiwicGFyYW1ldGVyTm9kZXMiLCJnZXRQYXJhbWV0ZXJOb2RlcyIsIm5hbWVkUGFyYW1ldGVyc0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50Tm9kZXMiLCJnZXRWYXJpYWJsZUFzc2lnbm1lbnROb2RlcyIsInZhcmlhYmxlQXNzaWdubWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNmhDZ0JBO2VBQUFBOztRQTFZQUM7ZUFBQUE7O1FBa3VCQUM7ZUFBQUE7O1FBK0NBQztlQUFBQTs7UUFwR0FDO2VBQUFBOztRQTdXQUM7ZUFBQUE7O1FBNVdBQztlQUFBQTs7UUFvMEJBQztlQUFBQTs7UUEzdkNBQztlQUFBQTs7UUE2MUNBQztlQUFBQTs7UUF2SEFDO2VBQUFBOztRQXZwQ0FDO2VBQUFBOztRQTBUQUM7ZUFBQUE7O1FBNmZBQztlQUFBQTs7UUFuZUFDO2VBQUFBOztRQTZmQUM7ZUFBQUE7O1FBLzNCQUM7ZUFBQUE7O1FBeTdCQUM7ZUFBQUE7O1FBbU1BQztlQUFBQTs7UUF0aUJBQztlQUFBQTs7UUFxZkFDO2VBQUFBOztRQTVqQ0FDO2VBQUFBOztRQXM3QkFDO2VBQUFBOztRQWxqQ0FDO2VBQUFBOztRQWFBQztlQUFBQTs7UUFtMEJBQztlQUFBQTs7UUFuZ0JBQztlQUFBQTs7UUE0aUNBQztlQUFBQTs7UUExWEFDO2VBQUFBOztRQStEQUM7ZUFBQUE7O1FBdEVBQztlQUFBQTs7UUEzOUJBQztlQUFBQTs7UUFvdkJBQztlQUFBQTs7UUFxZUFDO2VBQUFBOztRQTNJQUM7ZUFBQUE7O1FBakZBQztlQUFBQTs7UUFoM0JBQztlQUFBQTs7UUE2UEFDO2VBQUFBOztRQXFaQUM7ZUFBQUE7O1FBcE1BQztlQUFBQTs7UUFwQkFDO2VBQUFBOztRQWlVQUM7ZUFBQUE7O1FBck5BQztlQUFBQTs7UUFNQUM7ZUFBQUE7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
1284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBCT09MRUFOX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IHRlcm5hcnlTdHJpbmdGcm9tVGVybSxcbiAgICAgICAgIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUsXG4gICAgICAgICB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMsXG4gICAgICAgICB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzLFxuICAgICAgICAgcmV0dXJuQmxvY2tTdHJpbmdGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSxcbiAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUsXG4gICAgICAgICBzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlLFxuICAgICAgICAgZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUsXG4gICAgICAgICBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrLFxuICAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2ssXG4gICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSxcbiAgICAgICAgIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTb21lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNvbWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzb21lU3RyaW5nID0gc29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSh2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gc29tZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzb21lID0gbmV3IFNvbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYW5vbnltb3VzUHJvY2VkdXJlKTtcblxuICByZXR1cm4gc29tZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIG5lZ2F0ZWRUZXJtID0gbmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGxvZ2ljYWxUZXJtID0gbG9naWNhbFRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBjb21wYXJpc29uVGVybSA9IGNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgdmFyaWFibGUsXG4gICAgICBwcmltaXRpdmUsXG4gICAgICBuZWdhdGVkVGVybSxcbiAgICAgIGxvZ2ljYWxUZXJtLFxuICAgICAgYnJhY2tldGVkVGVybSxcbiAgICAgIGNvbXBhcmlzb25UZXJtXG4gICAgXSxcbiAgICB0ZXJtU3RyaW5nID0gdGVybVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgIHN0cmluZyA9IHRlcm1TdHJpbmcsICAvLy9cbiAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgcHJpbWl0aXZlLCBuZWdhdGVkVGVybSwgbG9naWNhbFRlcm0sIGJyYWNrZXRlZFRlcm0sIGNvbXBhcmlzb25UZXJtKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50VHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGFyZ3VtZW50VHlwZSk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFsdWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVOb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByaW1pdGl2ZSA9IHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICB2YXJpYWJsZSxcbiAgICAgICAgICBwcmltaXRpdmVcbiAgICAgICAgXSxcbiAgICAgICAgdmFsdWVTdHJpbmcgPSB2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSB2YWx1ZVN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YWx1ZSA9IG5ldyBWYWx1ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBwcmltaXRpdmUpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXZlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXZlcnlOb2RlLCAvLy9cbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeVN0cmluZyA9IGV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBhbm9ueW1vdXNQcm9jZWR1cmUpLFxuICAgICAgICBzdHJpbmcgPSBldmVyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5ID0gbmV3IEV2ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSk7XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxhYmVsTm9kZSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc0Zyb21WYWx1ZXNOb2RlKHZhbHVlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYWx1ZXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFsdWVzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB2YWx1ZU5vZGVzID0gdmFsdWVzTm9kZS5nZXRWYWx1ZU5vZGVzKCksXG4gICAgICAgIHZhbHVlc0FycmF5ID0gdmFsdWVzQXJyYXlGcm9tVmFsdWVOb2Rlcyh2YWx1ZU5vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSB2YWx1ZXNBcnJheSwgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhbHVlcyA9IG5ldyBWYWx1ZXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWR1Y2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVkdWNlTm9kZSwgIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVJlZHVjZU5vZGUocmVkdWNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IGluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlU3RyaW5nID0gcmVkdWNlU3RyaW5nRnJvbVZhcmlhYmxlSW5pdGlhbEV4cHJlc3Npb25BbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGluaXRpYWxWYWx1ZSwgYW5vbnltb3VzUHJvY2VkdXJlKSxcbiAgICAgICAgc3RyaW5nID0gcmVkdWNlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZHVjZSA9IG5ldyBSZWR1Y2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgaW5pdGlhbFZhbHVlLCBhbm9ueW1vdXNQcm9jZWR1cmUpO1xuXG4gIHJldHVybiByZWR1Y2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nRnJvbUJpbmRpbmdOb2RlKGJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBiaW5kaW5nTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVsaWRlZCA9IGVsaWRlZEZyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZyA9IG5ldyBCaW5kaW5nKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbmFtZSwgZWxpZGVkKTtcblxuICByZXR1cm4gYmluZGluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm5hcnlGcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJuYXJ5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm5hcnlOb2RlLCAvLy9cbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUodGVybmFyeU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbHNlRXhwcmVzc2lvbiA9IGVsc2VFeHByZXNzaW9uRnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeVN0cmluZyA9IHRlcm5hcnlTdHJpbmdGcm9tVGVybSh0ZXJtKSxcbiAgICAgICAgc3RyaW5nID0gdGVybmFyeVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm5hcnkgPSBuZXcgVGVybmFyeShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIGlmRXhwcmVzc2lvbiwgZWxzZUV4cHJlc3Npb24pO1xuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5zIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5zTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3Vic3RyaW5nRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5zID0gbmV3IENvbnRhaW5zKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHN1YnN0cmluZyk7XG5cbiAgcmV0dXJuIGNvbnRhaW5zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5kc1dpdGhGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVuZHNXaXRoIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVuZHNXaXRoTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3Vic3RyaW5nRnJvbUVuZHNXaXRoTm9kZShlbmRzV2l0aE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVuZHNXaXRoID0gbmV3IEVuZHNXaXRoKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHN1YnN0cmluZyk7XG5cbiAgcmV0dXJuIGVuZHNXaXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lLCBleHByZXNzaW9uKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYmluZGluZ3NOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgYmluZGluZ3NBcnJheSA9IGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFycmF5ID0gYmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYmluZGluZ3MgPSBuZXcgQmluZGluZ3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbmd0aE9mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGxlbmd0aE9mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21MZW5ndGhPZk5vZGUobGVuZ3RoT2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBsZW5ndGhPZiA9IG5ldyBMZW5ndGhPZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gbGVuZ3RoT2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBsaXN0QXNzaWdubWVudCA9IGxpc3RBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIG9iamVjdEFzc2lnbm1lbnQgPSBvYmplY3RBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudHMgPSB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpc3RBc3NpZ25tZW50LCBvYmplY3RBc3NpZ25tZW50LCB2YXJpYWJsZUFzc2lnbm1lbnRzKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVOb2RlLCAgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlTm9kZShwcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21Qcm9jZWR1cmVOb2RlKHByb2NlZHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVTdHJpbmcgPSBwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrKHR5cGUsIGxhYmVsLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayksXG4gICAgICAgIHN0cmluZyA9IHByb2NlZHVyZVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBwcm9jZWR1cmUgPSBuZXcgUHJvY2VkdXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgbGFiZWwsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKTtcblxuICByZXR1cm4gcHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IG5ldyBSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlciA9IG5ldyBQYXJhbWV0ZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBuYW1lKTtcblxuICByZXR1cm4gcGFyYW1ldGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZVF1ZXJ5RnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5vZGVRdWVyeSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBub2RlUXVlcnlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU5vZGVRdWVyeU5vZGUobm9kZVF1ZXJ5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBub2RlUXVlcnkgPSBuZXcgTm9kZVF1ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHF1ZXJ5KTtcblxuICByZXR1cm4gbm9kZVF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByaW1pdGl2ZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmltaXRpdmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21QcmltaXRpdmVOb2RlKHByaW1pdGl2ZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZSA9IHZhbHVlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJpbWl0aXZlID0gbmV3IFByaW1pdGl2ZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHZhbHVlKTtcblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRvSW50ZWdlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0b0ludGVnZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRvSW50ZWdlck5vZGUodG9JbnRlZ2VyTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdG9JbnRlZ2VyID0gbmV3IFRvSW50ZWdlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdG9JbnRlZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRzV2l0aEZyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0YXJ0c1dpdGggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhcnRzV2l0aE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdHJpbmcgPSBzdWJzdHJpbmdGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXJ0c1dpdGggPSBuZXcgU3RhcnRzV2l0aChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlLCBzdWJzdHJpbmcpO1xuXG4gIHJldHVybiBzdGFydHNXaXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZXNRdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5vZGVzUXVlcnkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbm9kZXNRdWVyeU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcXVlcnkgPSBxdWVyeUZyb21Ob2Rlc1F1ZXJ5Tm9kZShub2Rlc1F1ZXJ5Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNRdWVyeSA9IG5ldyBOb2Rlc1F1ZXJ5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIHF1ZXJ5KTtcblxuICByZXR1cm4gbm9kZXNRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXJzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlcnNOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcGFyYW1ldGVyc0FycmF5ID0gcGFyYW1ldGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXJyYXkgPSBwYXJhbWV0ZXJzQXJyYXk7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgUGFyYW1ldGVycyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFycmF5KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFeHByZXNzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGV4cHJlc3Npb25Ob2RlLCAgLy8vXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc29tZSA9IHNvbWVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeSA9IGV2ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVkdWNlID0gcmVkdWNlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybmFyeSA9IHRlcm5hcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2RlUXVlcnkgPSBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlbmd0aE9mID0gbGVuZ3RoT2ZGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b0ludGVnZXIgPSB0b0ludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0cnlJbnRlZ2VyID0gdHJ5SW50ZWdlckZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnRhaW5zID0gY29udGFpbnNGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlbmRzV2l0aCA9IGVuZHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgIHRlcm0sXG4gICAgICAgICAgc29tZSxcbiAgICAgICAgICBldmVyeSxcbiAgICAgICAgICByZWR1Y2UsXG4gICAgICAgICAgdGVybmFyeSxcbiAgICAgICAgICBub2RlUXVlcnksXG4gICAgICAgICAgbm9kZXNRdWVyeSxcbiAgICAgICAgICBsZW5ndGhPZixcbiAgICAgICAgICB0b0ludGVnZXIsXG4gICAgICAgICAgdHJ5SW50ZWdlcixcbiAgICAgICAgICBjb250YWlucyxcbiAgICAgICAgICBlbmRzV2l0aCxcbiAgICAgICAgICBzdGFydHNXaXRoLFxuICAgICAgICAgIHJldHVybkJsb2NrLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGxcbiAgICAgICAgXSxcbiAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IGV4cHJlc3Npb25TdHJpbmdGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gZXhwcmVzc2lvblN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBleHByZXNzaW9uID0gbmV3IEV4cHJlc3Npb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBzb21lLCBldmVyeSwgcmVkdWNlLCB0ZXJuYXJ5LCBub2RlUXVlcnksIG5vZGVzUXVlcnksIGxlbmd0aE9mLCB0b0ludGVnZXIsIHRyeUludGVnZXIsIGNvbnRhaW5zLCBlbmRzV2l0aCwgc3RhcnRzV2l0aCwgcmV0dXJuQmxvY2ssIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ5SW50ZWdlckZyb21UcnlJbnRlZ2VyTm9kZSh0cnlJbnRlZ2VyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRyeUludGVnZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHJ5SW50ZWdlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRyeUludGVnZXIgPSBuZXcgVHJ5SW50ZWdlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdHJ5SW50ZWdlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZXR1cm5CbG9jayB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZXR1cm5CbG9ja05vZGUsIC8vL1xuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9uc2Vuc2ljYWwgPSBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmV0dXJuU3RhdGVtZW50ID0gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUocmV0dXJuU3RhdGVtZW50KSxcbiAgICAgICAgc3RyaW5nID0gcmV0dXJuQmxvY2tTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcmV0dXJuQmxvY2sgPSBuZXcgUmV0dXJuQmxvY2soY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzLCBub25zZW5zaWNhbCwgcmV0dXJuU3RhdGVtZW50KTtcblxuICByZXR1cm4gcmV0dXJuQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkVGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmVnYXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmVnYXRlZFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtTm9kZSA9IG5lZ2F0ZWRUZXJtTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OZWdhdGVkVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21OZWdhdGVkVGVybU5vZGUobmVnYXRlZFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZFRlcm0gPSBuZXcgTmVnYXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCB0ZXJtKTtcblxuICByZXR1cm4gbmVnYXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTG9naWNhbFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbG9naWNhbFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGlzanVuY3Rpb24gPSBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsb2dpY2FsVGVybSA9IG5ldyBMb2dpY2FsVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIGRpc2p1bmN0aW9uLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gbG9naWNhbFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lZEJpbmRpbmdGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTmFtZWRCaW5kaW5nIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5hbWVkQmluZGluZ05vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpLFxuICAgICAgICBhbGlhcyA9IGFsaWFzRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5nID0gbmV3IE5hbWVkQmluZGluZyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIGFsaWFzKTtcblxuICByZXR1cm4gbmFtZWRCaW5kaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE5hbWVkQmluZGluZ3MgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbmFtZWRCaW5kaW5nc05vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWVkQmluZGluZ05vZGVzID0gbmFtZWRCaW5kaW5nc05vZGUuZ2V0TmFtZWRCaW5kaW5nTm9kZXMoKSxcbiAgICAgICAgbmFtZWRCaW5kaW5nc0FycmF5ID0gbmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMobmFtZWRCaW5kaW5nTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBhcnJheSA9IG5hbWVkQmluZGluZ3NBcnJheTsgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbmFtZWRCaW5kaW5ncyA9IG5ldyBOYW1lZEJpbmRpbmdzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgYXJyYXkpO1xuXG4gIHJldHVybiBuYW1lZEJpbmRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEJyYWNrZXRlZFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYnJhY2tldGVkVGVybU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUoYnJhY2tldGVkVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRUZXJtID0gbmV3IEJyYWNrZXRlZFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtKTtcblxuICByZXR1cm4gYnJhY2tldGVkVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVDYWxsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgdmFsdWVzKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21wYXJpc29uVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21wYXJpc29uVGVybSA9IG5ldyBDb21wYXJpc29uVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBjb21wYXJpc29uVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RBc3NpZ25tZW50RnJvbUxpc3RBc3NpZ25tZW50Tm9kZShsaXN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMaXN0QXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsaXN0QXNzaWdubWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tTGlzdEFzc2lnbm1lbnROb2RlKGxpc3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGJpbmRpbmdzID0gYmluZGluZ3NGcm9tTGlzdEFzc2lnbm1lbnROb2RlKGxpc3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGlzdEFzc2lnbm1lbnQgPSBuZXcgTGlzdEFzc2lnbm1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB2YXJpYWJsZSwgYmluZGluZ3MpO1xuXG4gIHJldHVybiBsaXN0QXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRCaW5kaW5nc05vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZS5nZXROYW1lZEJpbmRpbmdzTm9kZSgpLFxuICAgICAgICBuYW1lZEJpbmRpbmdzID0gbmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZShuYW1lZEJpbmRpbmdzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG5hbWVkQmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmV0dXJuU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJldHVyblN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5TdGF0ZW1lbnQgPSBuZXcgUmV0dXJuU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFsdWUpO1xuXG4gIHJldHVybiByZXR1cm5TdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RBc3NpZ25tZW50RnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgT2JqZWN0QXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBvYmplY3RBc3NpZ25tZW50Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBuYW1lZEJpbmRpbmdzID0gbmFtZWRCaW5kaW5nc0Zyb21PYmplY3RBc3NpZ25tZW50Tm9kZShvYmplY3RBc3NpZ25tZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgb2JqZWN0QXNzaWdubWVudCA9IG5ldyBPYmplY3RBc3NpZ25tZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIG5hbWVkQmluZGluZ3MpO1xuXG4gIHJldHVybiBvYmplY3RBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFub255bW91c1Byb2NlZHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCAgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJldHVybkJsb2NrID0gcmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBwYXJhbWV0ZXJzLCByZXR1cm5CbG9jayksXG4gICAgICAgIHN0cmluZyA9IG5vbnltb3VzUHJvY2VkdXJlU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlID0gbmV3IEFub255bW91c1Byb2NlZHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50c0Zyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlQXNzaWdubWVudHMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIC8vL1xuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSh0eXBlLCB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkpLFxuICAgICAgICBhcnJheSA9IHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZywgIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnRzID0gbmV3IFZhcmlhYmxlQXNzaWdubWVudHMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhcnJheSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlQXNzaWdubWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZUFzc2lnbm1lbnROb2RlLCAgLy8vXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUodHlwZSwgdmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbVZhcmlhYmxlQXNzaWdubWVudE5vZGUodmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZyA9IHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUodHlwZSwgdmFyaWFibGUsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGFzc2lnbm1lbnQgPSBuZXcgVmFyaWFibGVBc3NpZ25tZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdmFyaWFibGUsIGV4cHJlc3Npb24pO1xuXG4gIHJldHVybiBhc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gdHlwZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBsYWJlbE5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFsdWVOb2RlKCksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm5hcnlOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IGJpbmRpbmdOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gYmluZGluZ05vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tU29tZU5vZGUoc29tZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gc29tZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksIC8vL1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgY29uc3QgbmFtZSA9IHZhcmlhYmxlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbWl0aXZlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB0ZXJtTm9kZS5nZXRQcmltaXRpdmVOb2RlKCk7XG5cbiAgaWYgKHByaW1pdGl2ZU5vZGUgIT09IG51bGwpIHtcbiAgICBwcmltaXRpdmUgPSBwcmltaXRpdmVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcmltaXRpdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FdmVyeU5vZGUoZXZlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGV2ZXJ5Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGlkZWRGcm9tQmluZGluZ05vZGUoYmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZWxpZGVkID0gYmluZGluZ05vZGUuaXNFbGlkZWQoKTtcblxuICByZXR1cm4gZWxpZGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBwYXJhbWV0ZXJOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSByZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHR5cGVOYW1lID0gcHJpbWl0aXZlTm9kZS5nZXRUeXBlTmFtZSgpLFxuICAgICAgICB0eXBlID0gVHlwZS5mcm9tVHlwZU5hbWUodHlwZU5hbWUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhbHVlTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW1pdGl2ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gIGNvbnN0IHByaW1pdGl2ZU5vZGUgPSB2YWx1ZU5vZGUuZ2V0UHJpbWl0aXZlTm9kZSgpO1xuXG4gIGlmIChwcmltaXRpdmVOb2RlICE9PSBudWxsKSB7XG4gICAgcHJpbWl0aXZlID0gcHJpbWl0aXZlRnJvbVByaW1pdGl2ZU5vZGUocHJpbWl0aXZlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJpbWl0aXZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tUmVkdWNlTm9kZShyZWR1Y2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0cmluZyA9IG5vZGVRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgZXhwcmVzc2lvblN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgIHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb25TdHJpbmcoZXhwcmVzc2lvblN0cmluZyk7XG5cbiAgcmV0dXJuIHF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVGcm9tUHJpbWl0aXZlTm9kZShwcmltaXRpdmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gcHJpbWl0aXZlTm9kZS5nZXRWYWx1ZSgpO1xuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGUgPSBwcm9jZWR1cmVOb2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNvbWUgPSBudWxsO1xuXG4gIGNvbnN0IHNvbWVOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0U29tZU5vZGUoKTtcblxuICBpZiAoc29tZU5vZGUgIT09IG51bGwpIHtcbiAgICBzb21lID0gc29tZUZyb21Tb21lTm9kZShzb21lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc29tZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRUZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBuZWdhdGVkVGVybSA9IG51bGw7XG5cbiAgY29uc3QgbmVnYXRlZFRlcm1Ob2RlID0gdGVybU5vZGUuZ2V0TmVnYXRlZFRlcm1Ob2RlKCk7XG5cbiAgaWYgKG5lZ2F0ZWRUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIG5lZ2F0ZWRUZXJtID0gbmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlKG5lZ2F0ZWRUZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbmVnYXRlZFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dpY2FsVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgbG9naWNhbFRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IGxvZ2ljYWxUZXJtTm9kZSA9IHRlcm1Ob2RlLmdldExvZ2ljYWxUZXJtTm9kZSgpO1xuXG4gIGlmIChsb2dpY2FsVGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBsb2dpY2FsVGVybSA9IGxvZ2ljYWxUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxvZ2ljYWxUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9kZXNRdWVyeU5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgcXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICByZXR1cm4gcXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZXZlcnkgPSBudWxsO1xuXG4gIGNvbnN0IGV2ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldEV2ZXJ5Tm9kZSgpO1xuXG4gIGlmIChldmVyeU5vZGUgIT09IG51bGwpIHtcbiAgICBldmVyeSA9IGV2ZXJ5RnJvbUV2ZXJ5Tm9kZShldmVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGV2ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBCT09MRUFOX1RZUEVfTkFNRTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTmVnYXRlZFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gQk9PTEVBTl9UWVBFX05BTUU7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbU5lZ2F0ZWRUZXJtTm9kZShuZWdhdGVkVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBuZWdhdGVkVGVybU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJndW1lbnRUeXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhcmd1bWVudFR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IGFyZ3VtZW50VHlwZU5hbWUgPSB0eXBlTm9kZS5nZXRBcmd1bWVudFR5cGVOYW1lKCk7XG5cbiAgaWYgKGFyZ3VtZW50VHlwZU5hbWUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzO1xuXG4gICAgYXJndW1lbnRUeXBlID0gVHlwZS5mcm9tVHlwZU5hbWUoYXJndW1lbnRUeXBlTmFtZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXJndW1lbnRUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSBsZW5ndGhPZk5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21Db250YWluc05vZGUoY29udGFpbnNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGNvbnRhaW5zTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGVuZHNXaXRoTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZHVjZSA9IG51bGw7XG5cbiAgY29uc3QgcmVkdWNlTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFJlZHVjZU5vZGUoKTtcblxuICBpZiAocmVkdWNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZHVjZSA9IHJlZHVjZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZHVjZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTmFtZWRCaW5kaW5nTm9kZShuYW1lZEJpbmRpbmdOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gbmFtZWRCaW5kaW5nTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gbmFtZWRCaW5kaW5nTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlKGNvbnRhaW5zTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBjb250YWluc05vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmdGcm9tRW5kc1dpdGhOb2RlKGVuZHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBlbmRzV2l0aE5vZGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBzdWJzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlKG5hbWVkQmluZGluZ05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYWxpYXMgPSBuYW1lZEJpbmRpbmdOb2RlLmdldEFsaWFzKCk7XG5cbiAgcmV0dXJuIGFsaWFzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZShub2RlUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG5vZGVRdWVyeU5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybmFyeSA9IG51bGw7XG5cbiAgY29uc3QgdGVybmFyeU5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUZXJuYXJ5Tm9kZSgpO1xuXG4gIGlmICh0ZXJuYXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm5hcnkgPSB0ZXJuYXJ5RnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJuYXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJhY2tldGVkVGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgYnJhY2tldGVkVGVybSA9IG51bGw7XG5cbiAgY29uc3QgYnJhY2tldGVkVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXRCcmFja2V0ZWRUZXJtTm9kZSgpO1xuXG4gIGlmIChicmFja2V0ZWRUZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGJyYWNrZXRlZFRlcm0gPSBicmFja2V0ZWRUZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlKGJyYWNrZXRlZFRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBicmFja2V0ZWRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRvSW50ZWdlck5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21CcmFja2V0ZWRUZXJtTm9kZShicmFja2V0ZWRUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZFRlcm1Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyaXNvblRlcm1Gcm9tVGVybU5vZGUodGVybU5PZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbXBhcmlzb25UZXJtID0gbnVsbDtcblxuICBjb25zdCBjb21wYXJpc29uVGVybU5vZGUgPSB0ZXJtTk9kZS5nZXRDb21wYXJpc29uVGVybU5vZGUoKTtcblxuICBpZiAoY29tcGFyaXNvblRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgY29tcGFyaXNvblRlcm0gPSBjb21wYXJpc29uVGVybUZyb21Db21wYXJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb21wYXJpc29uVGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxWYWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWUgPSB2YWx1ZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBpbml0aWFsVmFsdWUgPSB2YWx1ZTsgLy8vXG5cbiAgcmV0dXJuIGluaXRpYWxWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uID0gbnVsbDtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRyeUludGVnZXJOb2RlKHRyeUludGVnZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRyeUludGVnZXJOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVN0YXJ0c1dpdGhOb2RlKHN0YXJ0c1dpdGhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHN0YXJ0c1dpdGhOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlKG5vZGVzUXVlcnlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IG5vZGVzUXVlcnlOb2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aE9mRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsZW5ndGhPZiA9IG51bGw7XG5cbiAgY29uc3QgbGVuZ3RoT2ZOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0TGVuZ3RoT2ZOb2RlKCk7XG5cbiAgaWYgKGxlbmd0aE9mTm9kZSAhPT0gbnVsbCkge1xuICAgIGxlbmd0aE9mID0gbGVuZ3RoT2ZGcm9tTGVuZ3RoT2ZOb2RlKGxlbmd0aE9mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGVuZ3RoT2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc0Zyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29udGFpbnMgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5zTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldENvbnRhaW5zTm9kZSgpO1xuXG4gIGlmIChjb250YWluc05vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWlucyA9IGNvbnRhaW5zRnJvbUNvbnRhaW5zTm9kZShjb250YWluc05vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5kc1dpdGhGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGVuZHNXaXRoID0gbnVsbDtcblxuICBjb25zdCBlbmRzV2l0aE5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRFbmRzV2l0aE5vZGUoKTtcblxuICBpZiAoZW5kc1dpdGhOb2RlICE9PSBudWxsKSB7XG4gICAgZW5kc1dpdGggPSBlbmRzV2l0aEZyb21FbmRzV2l0aE5vZGUoZW5kc1dpdGhOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlbmRzV2l0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlmRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZkV4cHJlc3Npb25Ob2RlID0gdGVybmFyeU5vZGUuZ2V0SWZFeHByZXNzaW9uTm9kZSgpLFxuICAgICAgICBpZkV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGlmRXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpZkV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IHByb2NlZHVyZU5vZGUuZ2V0UGFyYW1ldGVyc05vZGUoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9JbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0b0ludGVnZXIgPSBudWxsO1xuXG4gIGNvbnN0IHRvSW50ZWdlck5vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRUb0ludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRvSW50ZWdlck5vZGUgIT09IG51bGwpIHtcbiAgICB0b0ludGVnZXIgPSB0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSh0b0ludGVnZXJOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0b0ludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG5vZGVRdWVyeSA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZVF1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVRdWVyeU5vZGUoKTtcblxuICBpZiAobm9kZVF1ZXJ5Tm9kZSAhPT0gbnVsbCkge1xuICAgIG5vZGVRdWVyeSA9IG5vZGVRdWVyeUZyb21Ob2RlUXVlcnlOb2RlKG5vZGVRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZ0Zyb21TdGFydHNXaXRoTm9kZShzdGFydHNXaXRoTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBzdGFydHNXaXRoTm9kZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3Vic3RyaW5nID0gc3RyaW5nOyAgLy8vXG5cbiAgcmV0dXJuIHN1YnN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUxvZ2ljYWxUZXJtTm9kZShsb2dpY2FsVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFZhbHVlc05vZGUoKSxcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzRnJvbVZhbHVlc05vZGUodmFsdWVzTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbVByb2NlZHVyZU5vZGUocHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBwcm9jZWR1cmVOb2RlLmdldFJldHVybkJsb2NrTm9kZSgpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRnJvbVR5cGVBbmRWYXJpYWJsZU5vZGUodHlwZSwgdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhbHVlID0gbnVsbDtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1F1ZXJ5RnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBub2Rlc1F1ZXJ5ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc1F1ZXJ5Tm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldE5vZGVzUXVlcnlOb2RlKCk7XG5cbiAgaWYgKG5vZGVzUXVlcnlOb2RlICE9PSBudWxsKSB7XG4gICAgbm9kZXNRdWVyeSA9IG5vZGVzUXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUobm9kZXNRdWVyeU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnlJbnRlZ2VyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0cnlJbnRlZ2VyID0gbnVsbDtcblxuICBjb25zdCB0cnlJbnRlZ2VyTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFRyeUludGVnZXJOb2RlKCk7XG5cbiAgaWYgKHRyeUludGVnZXJOb2RlICE9PSBudWxsKSB7XG4gICAgdHJ5SW50ZWdlciA9IHRyeUludGVnZXJGcm9tVHJ5SW50ZWdlck5vZGUodHJ5SW50ZWdlck5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRyeUludGVnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGFydHNXaXRoID0gbnVsbDtcblxuICBjb25zdCBzdGFydHNXaXRoTm9kZSA9IGV4cHJlc3Npb25Ob2RlLmdldFN0YXJ0c1dpdGhOb2RlKCk7XG5cbiAgaWYgKHN0YXJ0c1dpdGhOb2RlICE9PSBudWxsKSB7XG4gICAgc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGhGcm9tU3RhcnRzV2l0aE5vZGUoc3RhcnRzV2l0aE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXJ0c1dpdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlKGxvZ2ljYWxUZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gbG9naWNhbFRlcm1Ob2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVOb2RlID0gcmV0dXJuU3RhdGVtZW50Tm9kZS5nZXRWYWx1ZU5vZGUoKSxcbiAgICAgICAgdmFsdWUgPSB2YWx1ZUZyb21WYWx1ZU5vZGUodmFsdWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbHNlRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSh0ZXJuYXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBlbHNlRXhwcmVzc2lvbk5vZGUgPSB0ZXJuYXJ5Tm9kZS5nZXRFbHNlRXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgZWxzZUV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGVsc2VFeHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGVsc2VFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuQmxvY2tGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJldHVybkJsb2NrID0gbnVsbDtcblxuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBleHByZXNzaW9uTm9kZS5nZXRSZXR1cm5CbG9ja05vZGUoKTtcblxuICBpZiAocmV0dXJuQmxvY2tOb2RlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuQmxvY2sgPSByZXR1cm5CbG9ja0Zyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tUmV0dXJuQmxvY2tOb2RlKHJldHVybkJsb2NrTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHJldHVybkJsb2NrTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1lbnROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RhdGVtZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlKGNvbXBhcmlzb25UZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gY29tcGFyaXNvblRlcm1Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlRnJvbVNvbWVOb2RlKHNvbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFub255bW91c1Byb2NlZHVyZU5vZGUgPSBzb21lTm9kZS5nZXRBbm9ueW1vdXNQcm9jZWR1cmVOb2RlKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZSA9IGFub255bW91c1Byb2NlZHVyZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub25zZW5zaWNhbEZyb21SZXR1cm5CbG9ja05vZGUocmV0dXJuQmxvY2tOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5vbnNlbnNpY2FsID0gcmV0dXJuQmxvY2tOb2RlLmlzTm9uc2Vuc2ljYWwoKTtcblxuICByZXR1cm4gbm9uc2Vuc2ljYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUobG9naWNhbFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRpc2p1bmN0aW9uID0gbG9naWNhbFRlcm1Ob2RlLmlzRGlzanVuY3Rpb24oKTtcblxuICByZXR1cm4gZGlzanVuY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUNvbXB6cmlzb25UZXJtTm9kZShjb21wYXJpc29uVGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gY29tcGFyaXNvblRlcm1Ob2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGFub255bW91c1Byb2NlZHVyZU5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgIHZhbHVlID0gdmFsdWVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSh0eXBlLCB2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUobmFtZSksXG4gICAgICAgIHN0cmluZyA9IHZhcmlhYmxlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIG5hbWUsIHZhbHVlKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlKGV2ZXJ5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlID0gZXZlcnlOb2RlLmdldEFub255bW91c1Byb2NlZHVyZU5vZGUoKSxcbiAgICAgICAgYW5vbnltb3VzUHJvY2VkdXJlID0gYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFub255bW91c1Byb2NlZHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gZXhwcmVzc2lvbk5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUoY29tcGFyaXNvblRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBjb21wYXJpc29uVGVybU5vZGUuZ2V0UmlnaHRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21MaXN0QXNzaWdubWVudE5vZGUobGlzdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IGxpc3RBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nc0Zyb21MaXN0QXNzaWdubWVudE5vZGUobGlzdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJpbmRpbmdzTm9kZSA9IGxpc3RBc3NpZ25tZW50Tm9kZS5nZXRCaW5kaW5nc05vZGUoKSxcbiAgICAgICAgYmluZGluZ3MgPSBiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUoYmluZGluZ3NOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYmluZGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGxpc3RBc3NpZ25tZW50ID0gbnVsbDtcblxuICBjb25zdCBsaXN0QXNzaWdubWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldExpc3RBc3NpZ25tZW50Tm9kZSgpO1xuXG4gIGlmIChsaXN0QXNzaWdubWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBsaXN0QXNzaWdubWVudCA9IGxpc3RBc3NpZ25tZW50RnJvbUxpc3RBc3NpZ25tZW50Tm9kZShsaXN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSh2YXJpYWJsZUFzc2lnbm1lbnRzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFub255bW91c1Byb2NlZHVyZUZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYW5vbnltb3VzUHJvY2VkdXJlTm9kZSA9IHJlZHVjZU5vZGUuZ2V0QW5vbnltb3VzUHJvY2VkdXJlTm9kZSgpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmUgPSBhbm9ueW1vdXNQcm9jZWR1cmVGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZShhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYW5vbnltb3VzUHJvY2VkdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUob2JqZWN0QXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gb2JqZWN0QXNzaWdubWVudE5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0QXNzaWdubWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG9iamVjdEFzc2lnbm1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IG9iamVjdEFzc2lnbm1lbnROb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRPYmplY3RBc3NpZ25tZW50Tm9kZSgpO1xuXG4gIGlmIChvYmplY3RBc3NpZ25tZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIG9iamVjdEFzc2lnbm1lbnQgPSBvYmplY3RBc3NpZ25tZW50RnJvbU9iamVjdEFzc2lnbm1lbnROb2RlKG9iamVjdEFzc2lnbm1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBvYmplY3RBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuU3RhdGVtZW50RnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmV0dXJuU3RhdGVtZW50Tm9kZSA9IHJldHVybkJsb2NrTm9kZS5nZXRSZXR1cm5TdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJldHVyblN0YXRlbWVudCA9IHJldHVyblN0YXRlbWVudEZyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5TdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGVBc3NpZ25tZW50cyA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50c05vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlQXNzaWdubWVudHNOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGVBc3NpZ25tZW50cyA9IHZhcmlhYmxlQXNzaWdubWVudHNGcm9tVmFyaWFibGVBc3NpZ25tZW50c05vZGUodmFyaWFibGVBc3NpZ25tZW50c05vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHByZXNzaW9uRnJvbVZhcmlhYmxlQXNzaWdubWVudE5vZGUodmFyaWFibGVBc3NpZ25tZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBleHByZXNzaW9uTm9kZSA9IHZhcmlhYmxlQXNzaWdubWVudE5vZGUuZ2V0RXhwcmVzc2lvbk5vZGUoKSxcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlKGFub255bW91c1Byb2NlZHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLmdldFBhcmFtZXRlcnNOb2RlKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlcnNOb2RlKHBhcmFtZXRlcnNOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHVybkJsb2NrRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUoYW5vbnltb3VzUHJvY2VkdXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXR1cm5CbG9ja05vZGUgPSBhbm9ueW1vdXNQcm9jZWR1cmVOb2RlLmdldFJldHVybkJsb2NrTm9kZSgpLFxuICAgICAgICByZXR1cm5CbG9jayA9IHJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZShyZXR1cm5CbG9ja05vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXR1cm5CbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlKHR5cGUsIHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNBcnJheUZyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zQXJyYXkgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4geyAvLy9cbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZXNBcnJheUZyb21WYWx1ZU5vZGVzKHZhbHVlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFsdWVzQXJyYXkgPSB2YWx1ZU5vZGVzLm1hcCgodmFsdWVOb2RlKSA9PiB7IC8vL1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVGcm9tVmFsdWVOb2RlKHZhbHVlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0pO1xuXG4gIHJldHVybiB2YWx1ZXNBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdzQXJyYXlGcm9tQmluZGluZ3NOb2RlKGJpbmRpbmdzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBiaW5kaW5nTm9kZXMgPSBiaW5kaW5nc05vZGUuZ2V0QmluZGluZ05vZGVzKCksXG4gICAgICAgIGJpbmRpbmdzQXJyYXkgPSBiaW5kaW5nTm9kZXMubWFwKChiaW5kaW5nTm9kZSkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCBiaW5kaW5nID0gYmluZGluZ0Zyb21CaW5kaW5nTm9kZShiaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gYmluZGluZztcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGJpbmRpbmdzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzQXJyYXlGcm9tUGFyYW1ldGVyc05vZGUocGFyYW1ldGVyc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyTm9kZXMgPSBwYXJhbWV0ZXJzTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzQXJyYXkgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IHsgLy8vXG4gICAgICAgICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVyc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZWRQYXJhbWV0ZXJzQXJyYXlGcm9tTmFtZWRCaW5kaW5nTm9kZXMobmFtZWRCaW5kaW5nTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZWRQYXJhbWV0ZXJzQXJyYXkgPSBuYW1lZEJpbmRpbmdOb2Rlcy5tYXAoKG5hbWVkQmluZGluZ05vZGUpID0+IHsgLy8vXG4gICAgY29uc3QgbmFtZWRCaW5kaW5nID0gbmFtZWRCaW5kaW5nRnJvbU5hbWVkQmluZGluZ05vZGUobmFtZWRCaW5kaW5nTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbmFtZWRCaW5kaW5nO1xuICB9KTtcblxuICByZXR1cm4gbmFtZWRQYXJhbWV0ZXJzQXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXlGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNOb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudE5vZGVzID0gdmFyaWFibGVBc3NpZ25tZW50c05vZGUuZ2V0VmFyaWFibGVBc3NpZ25tZW50Tm9kZXMoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50c0FycmF5ID0gdmFyaWFibGVBc3NpZ25tZW50Tm9kZXMubWFwKCh2YXJpYWJsZUFzc2lnbm1lbnROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnROb2RlKHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheTtcbn1cbiJdLCJuYW1lcyI6WyJhbGlhc0Zyb21OYW1lZEJpbmRpbmdOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbUFub255bW91c1Byb2NlZHVyZU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tRXZlcnlOb2RlIiwiYW5vbnltb3VzUHJvY2VkdXJlRnJvbVJlZHVjZU5vZGUiLCJhbm9ueW1vdXNQcm9jZWR1cmVGcm9tU29tZU5vZGUiLCJhcmd1bWVudFR5cGVGcm9tVHlwZU5vZGUiLCJiaW5kaW5nRnJvbUJpbmRpbmdOb2RlIiwiYmluZGluZ3NBcnJheUZyb21CaW5kaW5nc05vZGUiLCJiaW5kaW5nc0Zyb21CaW5kaW5nc05vZGUiLCJiaW5kaW5nc0Zyb21MaXN0QXNzaWdubWVudE5vZGUiLCJicmFja2V0ZWRUZXJtRnJvbUJyYWNrZXRlZFRlcm1Ob2RlIiwiYnJhY2tldGVkVGVybUZyb21UZXJtTm9kZSIsImNvbXBhcmlzb25UZXJtRnJvbUNvbXBhcmlzb25UZXJtTm9kZSIsImNvbXBhcmlzb25UZXJtRnJvbVRlcm1Ob2RlIiwiY29udGFpbnNGcm9tQ29udGFpbnNOb2RlIiwiY29udGFpbnNGcm9tRXhwcmVzc2lvbk5vZGUiLCJkaXNqdW5jdGlvbkZyb21Mb2dpY2FsVGVybU5vZGUiLCJlbGlkZWRGcm9tQmluZGluZ05vZGUiLCJlbHNlRXhwcmVzc2lvbkZyb21UZXJuYXJ5Tm9kZSIsImVuZHNXaXRoRnJvbUVuZHNXaXRoTm9kZSIsImVuZHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZXZlcnlGcm9tRXZlcnlOb2RlIiwiZXZlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwiZXhwcmVzc2lvbkZyb21WYXJpYWJsZU5vZGUiLCJpZkV4cHJlc3Npb25Gcm9tVGVybmFyeU5vZGUiLCJpbml0aWFsVmFsdWVGcm9tUmVkdWNlTm9kZSIsImxhYmVsRnJvbUxhYmVsTm9kZSIsImxhYmVsRnJvbVByb2NlZHVyZU5vZGUiLCJsZWZ0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUiLCJsZWZ0VGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJsZW5ndGhPZkZyb21FeHByZXNzaW9uTm9kZSIsImxlbmd0aE9mRnJvbUxlbmd0aE9mTm9kZSIsImxpc3RBc3NpZ25tZW50RnJvbUxpc3RBc3NpZ25tZW50Tm9kZSIsImxpc3RBc3NpZ25tZW50RnJvbVN0YXRlbWVudE5vZGUiLCJsb2dpY2FsVGVybUZyb21Mb2dpY2FsVGVybU5vZGUiLCJsb2dpY2FsVGVybUZyb21UZXJtTm9kZSIsIm5hbWVGcm9tQmluZGluZ05vZGUiLCJuYW1lRnJvbUxhYmVsTm9kZSIsIm5hbWVGcm9tTmFtZWRCaW5kaW5nTm9kZSIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsIm5hbWVGcm9tUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVZhcmlhYmxlTm9kZSIsIm5hbWVkQmluZGluZ0Zyb21OYW1lZEJpbmRpbmdOb2RlIiwibmFtZWRCaW5kaW5nc0Zyb21OYW1lZEJpbmRpbmdzTm9kZSIsIm5hbWVkQmluZGluZ3NGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUiLCJuYW1lZFBhcmFtZXRlcnNBcnJheUZyb21OYW1lZEJpbmRpbmdOb2RlcyIsIm5lZ2F0ZWRGcm9tQ29tcGFyaXNvblRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tTmVnYXRlZFRlcm1Ob2RlIiwibmVnYXRlZFRlcm1Gcm9tVGVybU5vZGUiLCJub2RlUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2RlUXVlcnlGcm9tTm9kZVF1ZXJ5Tm9kZSIsIm5vZGVzUXVlcnlGcm9tRXhwcmVzc2lvbk5vZGUiLCJub2Rlc1F1ZXJ5RnJvbU5vZGVzUXVlcnlOb2RlIiwibm9uc2Vuc2ljYWxGcm9tUmV0dXJuQmxvY2tOb2RlIiwib2JqZWN0QXNzaWdubWVudEZyb21PYmplY3RBc3NpZ25tZW50Tm9kZSIsIm9iamVjdEFzc2lnbm1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyc0FycmF5RnJvbVBhcmFtZXRlcnNOb2RlIiwicGFyYW1ldGVyc0Zyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwicGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJzTm9kZSIsInBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlTm9kZSIsInByaW1pdGl2ZUZyb21QcmltaXRpdmVOb2RlIiwicHJpbWl0aXZlRnJvbVRlcm1Ob2RlIiwicHJpbWl0aXZlRnJvbVZhbHVlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tRXhwcmVzc2lvbk5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlRnJvbVByb2NlZHVyZU5vZGUiLCJxdWVyeUZyb21Ob2RlUXVlcnlOb2RlIiwicXVlcnlGcm9tTm9kZXNRdWVyeU5vZGUiLCJyZWR1Y2VGcm9tRXhwcmVzc2lvbk5vZGUiLCJyZWR1Y2VGcm9tUmVkdWNlTm9kZSIsInJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlIiwicmV0dXJuQmxvY2tGcm9tQW5vbnltb3VzUHJvY2VkdXJlTm9kZSIsInJldHVybkJsb2NrRnJvbUV4cHJlc3Npb25Ob2RlIiwicmV0dXJuQmxvY2tGcm9tUHJvY2VkdXJlTm9kZSIsInJldHVybkJsb2NrRnJvbVJldHVybkJsb2NrTm9kZSIsInJldHVyblN0YXRlbWVudEZyb21SZXR1cm5CbG9ja05vZGUiLCJyZXR1cm5TdGF0ZW1lbnRGcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInJpZ2h0VGVybUZyb21Db21wenJpc29uVGVybU5vZGUiLCJyaWdodFRlcm1Gcm9tTG9naWNhbFRlcm1Ob2RlIiwic29tZUZyb21FeHByZXNzaW9uTm9kZSIsInNvbWVGcm9tU29tZU5vZGUiLCJzdGFydHNXaXRoRnJvbUV4cHJlc3Npb25Ob2RlIiwic3RhcnRzV2l0aEZyb21TdGFydHNXaXRoTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50c0Zyb21SZXR1cm5CbG9ja05vZGUiLCJzdWJzdHJpbmdGcm9tQ29udGFpbnNOb2RlIiwic3Vic3RyaW5nRnJvbUVuZHNXaXRoTm9kZSIsInN1YnN0cmluZ0Zyb21TdGFydHNXaXRoTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkVGVybU5vZGUiLCJ0ZXJtRnJvbUV4cHJlc3Npb25Ob2RlIiwidGVybUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UZXJuYXJ5Tm9kZSIsInRlcm1zQXJyYXlGcm9tVGVybU5vZGVzIiwidGVybmFyeUZyb21FeHByZXNzaW9uTm9kZSIsInRlcm5hcnlGcm9tVGVybmFyeU5vZGUiLCJ0b0ludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0b0ludGVnZXJGcm9tVG9JbnRlZ2VyTm9kZSIsInRyeUludGVnZXJGcm9tRXhwcmVzc2lvbk5vZGUiLCJ0cnlJbnRlZ2VyRnJvbVRyeUludGVnZXJOb2RlIiwidHlwZUZyb21Bbm9ueW1vdXNQcm9jZWR1cmVOb2RlIiwidHlwZUZyb21CaW5kaW5nTm9kZSIsInR5cGVGcm9tTG9naWNhbFRlcm1Ob2RlIiwidHlwZUZyb21OYW1lZEJpbmRpbmdOb2RlIiwidHlwZUZyb21OZWdhdGVkVGVybU5vZGUiLCJ0eXBlRnJvbVBhcmFuZXRlck5vZGUiLCJ0eXBlRnJvbVByaW1pdGl2ZU5vZGUiLCJ0eXBlRnJvbVByb2NlZHVyZU5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZUZyb21WYXJpYWJsZUFzc2lnbm1lbnRzTm9kZSIsInR5cGVGcm9tVmFyaWFibGVOb2RlIiwidmFsdWVGcm9tUHJpbWl0aXZlTm9kZSIsInZhbHVlRnJvbVJlZHVjZU5vZGUiLCJ2YWx1ZUZyb21SZXR1cm5TdGF0ZW1lbnROb2RlIiwidmFsdWVGcm9tVHlwZUFuZFZhcmlhYmxlTm9kZSIsInZhbHVlRnJvbVZhbHVlTm9kZSIsInZhbHVlc0FycmF5RnJvbVZhbHVlTm9kZXMiLCJ2YWx1ZXNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJ2YWx1ZXNGcm9tVmFsdWVzTm9kZSIsInZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50Tm9kZSIsInZhcmlhYmxlQXNzaWdubWVudHNBcnJheUZyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVN0YXRlbWVudE5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzRnJvbVZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwidmFyaWFibGVGcm9tQ29udGFpbnNOb2RlIiwidmFyaWFibGVGcm9tRW5kc1dpdGhOb2RlIiwidmFyaWFibGVGcm9tRXZlcnlOb2RlIiwidmFyaWFibGVGcm9tTGVuZ3RoT2ZOb2RlIiwidmFyaWFibGVGcm9tTGlzdEFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVGcm9tTm9kZVF1ZXJ5Tm9kZSIsInZhcmlhYmxlRnJvbU5vZGVzUXVlcnlOb2RlIiwidmFyaWFibGVGcm9tT2JqZWN0QXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21SZWR1Y2VOb2RlIiwidmFyaWFibGVGcm9tU29tZU5vZGUiLCJ2YXJpYWJsZUZyb21TdGFydHNXaXRoTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVG9JbnRlZ2VyTm9kZSIsInZhcmlhYmxlRnJvbVRyeUludGVnZXJOb2RlIiwidmFyaWFibGVGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudE5vZGUiLCJ2YXJpYWJsZUZyb21UeXBlQW5kVmFyaWFibGVOb2RlIiwidmFyaWFibGVGcm9tVmFsdWVOb2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwic29tZU5vZGUiLCJjb250ZXh0IiwiU29tZSIsImVsZW1lbnRzIiwibm9kZSIsInZhcmlhYmxlIiwiYW5vbnltb3VzUHJvY2VkdXJlIiwic29tZVN0cmluZyIsInNvbWVTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUiLCJzdHJpbmciLCJicmVha1BvaW50Iiwic29tZSIsInRlcm1Ob2RlIiwiVGVybSIsInByaW1pdGl2ZSIsIm5lZ2F0ZWRUZXJtIiwibG9naWNhbFRlcm0iLCJicmFja2V0ZWRUZXJtIiwiY29tcGFyaXNvblRlcm0iLCJwcm9wZXJ0aWVzIiwidGVybVN0cmluZyIsInRlcm1TdHJpbmdGcm9tUHJvcGVydGllcyIsInRlcm0iLCJ0eXBlTm9kZSIsIlR5cGUiLCJub2RlQXNTdHJpbmciLCJuYW1lIiwiYXJndW1lbnRUeXBlIiwidHlwZSIsInZhbHVlTm9kZSIsIlZhbHVlIiwidmFsdWVTdHJpbmciLCJ2YWx1ZVN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidmFsdWUiLCJlcnJvck5vZGUiLCJFcnJvciIsImVycm9yIiwiZXZlcnlOb2RlIiwiRXZlcnkiLCJldmVyeVN0cmluZyIsImV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwiZXZlcnkiLCJsYWJlbE5vZGUiLCJMYWJlbCIsImxhYmVsIiwidmFsdWVzTm9kZSIsIlZhbHVlcyIsInZhbHVlTm9kZXMiLCJnZXRWYWx1ZU5vZGVzIiwidmFsdWVzQXJyYXkiLCJhcnJheSIsInZhbHVlcyIsInJlZHVjZU5vZGUiLCJSZWR1Y2UiLCJpbml0aWFsVmFsdWUiLCJyZWR1Y2VTdHJpbmciLCJyZWR1Y2VTdHJpbmdGcm9tVmFyaWFibGVJbml0aWFsRXhwcmVzc2lvbkFuZEFub255bW91c1Byb2NlZHVyZSIsInJlZHVjZSIsImJpbmRpbmdOb2RlIiwiQmluZGluZyIsImVsaWRlZCIsImJpbmRpbmciLCJ0ZXJuYXJ5Tm9kZSIsIlRlcm5hcnkiLCJpZkV4cHJlc3Npb24iLCJlbHNlRXhwcmVzc2lvbiIsInRlcm5hcnlTdHJpbmciLCJ0ZXJuYXJ5U3RyaW5nRnJvbVRlcm0iLCJ0ZXJuYXJ5IiwiY29udGFpbnNOb2RlIiwiQ29udGFpbnMiLCJzdWJzdHJpbmciLCJjb250YWlucyIsImVuZHNXaXRoTm9kZSIsIkVuZHNXaXRoIiwiZW5kc1dpdGgiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImV4cHJlc3Npb24iLCJiaW5kaW5nc05vZGUiLCJCaW5kaW5ncyIsImJpbmRpbmdzQXJyYXkiLCJiaW5kaW5ncyIsImxlbmd0aE9mTm9kZSIsIkxlbmd0aE9mIiwibGVuZ3RoT2YiLCJzdGF0ZW1lbnROb2RlIiwiU3RhdGVtZW50IiwibGlzdEFzc2lnbm1lbnQiLCJvYmplY3RBc3NpZ25tZW50IiwidmFyaWFibGVBc3NpZ25tZW50cyIsInN0YXRlbWVudCIsInByb2NlZHVyZU5vZGUiLCJQcm9jZWR1cmUiLCJwYXJhbWV0ZXJzIiwicmV0dXJuQmxvY2siLCJwcm9jZWR1cmVTdHJpbmciLCJwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrIiwicHJvY2VkdXJlIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJub2RlUXVlcnlOb2RlIiwiTm9kZVF1ZXJ5IiwicXVlcnkiLCJub2RlUXVlcnkiLCJwcmltaXRpdmVOb2RlIiwiUHJpbWl0aXZlIiwidG9JbnRlZ2VyTm9kZSIsIlRvSW50ZWdlciIsInRvSW50ZWdlciIsInN0YXJ0c1dpdGhOb2RlIiwiU3RhcnRzV2l0aCIsInN0YXJ0c1dpdGgiLCJub2Rlc1F1ZXJ5Tm9kZSIsIk5vZGVzUXVlcnkiLCJub2Rlc1F1ZXJ5IiwicGFyYW1ldGVyc05vZGUiLCJQYXJhbWV0ZXJzIiwicGFyYW1ldGVyc0FycmF5IiwiZXhwcmVzc2lvbk5vZGUiLCJFeHByZXNzaW9uIiwidHJ5SW50ZWdlciIsInByb2NlZHVyZUNhbGwiLCJleHByZXNzaW9uU3RyaW5nIiwiZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidHJ5SW50ZWdlck5vZGUiLCJUcnlJbnRlZ2VyIiwicmV0dXJuQmxvY2tOb2RlIiwiUmV0dXJuQmxvY2siLCJzdGF0ZW1lbnRzIiwibm9uc2Vuc2ljYWwiLCJyZXR1cm5TdGF0ZW1lbnQiLCJyZXR1cm5CbG9ja1N0cmluZyIsInJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUiLCJuZWdhdGVkVGVybU5vZGUiLCJOZWdhdGVkVGVybSIsImdldFRlcm1Ob2RlIiwibG9naWNhbFRlcm1Ob2RlIiwiTG9naWNhbFRlcm0iLCJkaXNqdW5jdGlvbiIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwibmFtZWRCaW5kaW5nTm9kZSIsIk5hbWVkQmluZGluZyIsImFsaWFzIiwibmFtZWRCaW5kaW5nIiwibmFtZWRCaW5kaW5nc05vZGUiLCJOYW1lZEJpbmRpbmdzIiwibmFtZWRCaW5kaW5nTm9kZXMiLCJnZXROYW1lZEJpbmRpbmdOb2RlcyIsIm5hbWVkQmluZGluZ3NBcnJheSIsIm5hbWVkQmluZGluZ3MiLCJicmFja2V0ZWRUZXJtTm9kZSIsIkJyYWNrZXRlZFRlcm0iLCJwcm9jZWR1cmVDYWxsTm9kZSIsIlByb2NlZHVyZUNhbGwiLCJjb21wYXJpc29uVGVybU5vZGUiLCJDb21wYXJpc29uVGVybSIsIm5lZ2F0ZWQiLCJsaXN0QXNzaWdubWVudE5vZGUiLCJMaXN0QXNzaWdubWVudCIsIm9iamVjdEFzc2lnbm1lbnROb2RlIiwiZ2V0TmFtZWRCaW5kaW5nc05vZGUiLCJyZXR1cm5TdGF0ZW1lbnROb2RlIiwiUmV0dXJuU3RhdGVtZW50IiwiT2JqZWN0QXNzaWdubWVudCIsImFub255bW91c1Byb2NlZHVyZU5vZGUiLCJBbm9ueW1vdXNQcm9jZWR1cmUiLCJub255bW91c1Byb2NlZHVyZVN0cmluZyIsImFub255bW91c1Byb2NlZHVyZVN0cmluZ0Zyb21UeXBlUGFyYW1ldGVyc0FuZFJldHVybkJsb2NrIiwidmFyaWFibGVBc3NpZ25tZW50c05vZGUiLCJWYXJpYWJsZUFzc2lnbm1lbnRzIiwidmFyaWFibGVBc3NpZ25tZW50c0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nIiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnROb2RlIiwiVmFyaWFibGVBc3NpZ25tZW50IiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSIsImFzc2lnbm1lbnQiLCJnZXROYW1lIiwiZ2V0VmFsdWVOb2RlIiwiZ2V0VHlwZU5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJnZXRQcmltaXRpdmVOb2RlIiwiaXNFbGlkZWQiLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwiZnJvbVR5cGVOYW1lIiwiZ2V0U3RyaW5nIiwiUXVlcnkiLCJmcm9tRXhwcmVzc2lvblN0cmluZyIsImdldFZhbHVlIiwiZ2V0TGFiZWxOb2RlIiwiZ2V0U29tZU5vZGUiLCJnZXROZWdhdGVkVGVybU5vZGUiLCJnZXRMb2dpY2FsVGVybU5vZGUiLCJnZXRFdmVyeU5vZGUiLCJCT09MRUFOX1RZUEVfTkFNRSIsImFyZ3VtZW50VHlwZU5hbWUiLCJnZXRBcmd1bWVudFR5cGVOYW1lIiwiZ2V0UmVkdWNlTm9kZSIsImdldEFsaWFzIiwiZ2V0VGVybmFyeU5vZGUiLCJnZXRCcmFja2V0ZWRUZXJtTm9kZSIsInRlcm1OT2RlIiwiZ2V0Q29tcGFyaXNvblRlcm1Ob2RlIiwiZ2V0TGVuZ3RoT2ZOb2RlIiwiZ2V0Q29udGFpbnNOb2RlIiwiZ2V0RW5kc1dpdGhOb2RlIiwiaWZFeHByZXNzaW9uTm9kZSIsImdldElmRXhwcmVzc2lvbk5vZGUiLCJnZXRQYXJhbWV0ZXJzTm9kZSIsImdldFRvSW50ZWdlck5vZGUiLCJnZXROb2RlUXVlcnlOb2RlIiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwiZ2V0VmFsdWVzTm9kZSIsImdldFJldHVybkJsb2NrTm9kZSIsImdldE5vZGVzUXVlcnlOb2RlIiwiZ2V0VHJ5SW50ZWdlck5vZGUiLCJnZXRTdGFydHNXaXRoTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwiZWxzZUV4cHJlc3Npb25Ob2RlIiwiZ2V0RWxzZUV4cHJlc3Npb25Ob2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsImlzTmVnYXRlZCIsImdldEFub255bW91c1Byb2NlZHVyZU5vZGUiLCJpc05vbnNlbnNpY2FsIiwiaXNEaXNqdW5jdGlvbiIsImdldFJlZmVyZW5jZU5vZGUiLCJ2YXJpYWJsZVN0cmluZyIsInZhcmlhYmxlU3RyaW5nRnJvbU5hbWUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsImdldEJpbmRpbmdzTm9kZSIsImdldExpc3RBc3NpZ25tZW50Tm9kZSIsImdldE9iamVjdEFzc2lnbm1lbnROb2RlIiwiZ2V0UmV0dXJuU3RhdGVtZW50Tm9kZSIsImdldFZhcmlhYmxlQXNzaWdubWVudHNOb2RlIiwiZ2V0RXhwcmVzc2lvbk5vZGUiLCJ0ZXJtTm9kZXMiLCJ0ZXJtc0FycmF5IiwiYmluZGluZ05vZGVzIiwiZ2V0QmluZGluZ05vZGVzIiwicGFyYW1ldGVyTm9kZXMiLCJnZXRQYXJhbWV0ZXJOb2RlcyIsIm5hbWVkUGFyYW1ldGVyc0FycmF5IiwidmFyaWFibGVBc3NpZ25tZW50Tm9kZXMiLCJnZXRWYXJpYWJsZUFzc2lnbm1lbnROb2RlcyIsInZhcmlhYmxlQXNzaWdubWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNmhDZ0JBO2VBQUFBOztRQTFZQUM7ZUFBQUE7O1FBa3VCQUM7ZUFBQUE7O1FBMkRBQztlQUFBQTs7UUFoSEFDO2VBQUFBOztRQTdXQUM7ZUFBQUE7O1FBbnlCQUM7ZUFBQUE7O1FBNjFDQUM7ZUFBQUE7O1FBOXdDQUM7ZUFBQUE7O1FBdXBDQUM7ZUFBQUE7O1FBNzFCQUM7ZUFBQUE7O1FBNmZBQztlQUFBQTs7UUFuZUFDO2VBQUFBOztRQTZmQUM7ZUFBQUE7O1FBLzNCQUM7ZUFBQUE7O1FBeTdCQUM7ZUFBQUE7O1FBbU1BQztlQUFBQTs7UUF0aUJBQztlQUFBQTs7UUFxZkFDO2VBQUFBOztRQTVqQ0FDO2VBQUFBOztRQXM3QkFDO2VBQUFBOztRQWxqQ0FDO2VBQUFBOztRQWFBQztlQUFBQTs7UUFtMEJBQztlQUFBQTs7UUFuZ0JBQztlQUFBQTs7UUE0aUNBQztlQUFBQTs7UUExWEFDO2VBQUFBOztRQStEQUM7ZUFBQUE7O1FBdEVBQztlQUFBQTs7UUEzOUJBQztlQUFBQTs7UUFvdkJBQztlQUFBQTs7UUFxZUFDO2VBQUFBOztRQTNJQUM7ZUFBQUE7O1FBakZBQztlQUFBQTs7UUFoM0JBQztlQUFBQTs7UUFrVkFDO2VBQUFBOztRQTZ6QkFDO2VBQUFBOztRQWw1QkFDO2VBQUFBOztRQXFaQUM7ZUFBQUE7O1FBcE1BQztlQUFBQTs7UUFwQkFDO2VBQUFBOztRQWlVQUM7ZUFBQUE7O1FBck5BQztlQUFBQTs7UUFNQUM7ZUFBQUE7O1FBeEhBQztlQUFBQTs7UUErREFDO2VBQUFBOztRQXhPQUM7ZUFBQUE7O1FBZ0JBQztlQUFBQTs7UUFzRUFDO2VBQUFBOztRQW83QkFD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