occam-nominal 1.0.428 → 1.0.430

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.
@@ -423,9 +423,6 @@ _export(exports, {
423
423
  get signatureFromClaimNode () {
424
424
  return signatureFromClaimNode;
425
425
  },
426
- get signatureFromSignatureAssertionNode () {
427
- return signatureFromSignatureAssertionNode;
428
- },
429
426
  get signatureFromSignatureNode () {
430
427
  return signatureFromSignatureNode;
431
428
  },
@@ -591,6 +588,9 @@ _export(exports, {
591
588
  get termsFromEquivalenceNode () {
592
589
  return termsFromEquivalenceNode;
593
590
  },
591
+ get termsFromSignatureAssertionNode () {
592
+ return termsFromSignatureAssertionNode;
593
+ },
594
594
  get termsFromSignatureNode () {
595
595
  return termsFromSignatureNode;
596
596
  },
@@ -976,9 +976,9 @@ function containedAssertionFromContainedAssertionNode(containedAssertionNode, co
976
976
  return containedAssertion;
977
977
  }
978
978
  function signatureAssertionFromSignatureAssertionNode(signatureAssertionNode, context) {
979
- const { SignatureAssertion } = _elements.default, node = signatureAssertionNode, string = context.nodeAsString(node), breakPoint = null, signature = signatureFromSignatureAssertionNode(signatureAssertionNode, context), reference = referenceFromSignatureAssertionNode(signatureAssertionNode, context);
979
+ const { SignatureAssertion } = _elements.default, node = signatureAssertionNode, string = context.nodeAsString(node), breakPoint = null, terms = termsFromSignatureAssertionNode(signatureAssertionNode, context), reference = referenceFromSignatureAssertionNode(signatureAssertionNode, context);
980
980
  context = null;
981
- const signatureAssertion = new SignatureAssertion(context, string, node, breakPoint, signature, reference);
981
+ const signatureAssertion = new SignatureAssertion(context, string, node, breakPoint, terms, reference);
982
982
  return signatureAssertion;
983
983
  }
984
984
  function procedureReferenceFromProcedureReferenceNode(procedureReferenceNode, context) {
@@ -1196,8 +1196,7 @@ function signatureFromClaimNode(claimNode, context) {
1196
1196
  let signature = null;
1197
1197
  const signatureNode = claimNode.getSignatureNode();
1198
1198
  if (signatureNode !== null) {
1199
- const { Signature } = _elements.default, signatureString = context.nodeAsString(signatureNode);
1200
- signature = Signature.fromSignatureString(signatureString, context);
1199
+ signature = signatureFromSignatureNode(signatureNode, context);
1201
1200
  }
1202
1201
  return signature;
1203
1202
  }
@@ -1571,6 +1570,10 @@ function parametersFromProcedureCallNode(procedureCallNode, context) {
1571
1570
  const parameterNodes = procedureCallNode.getParameterNodes(), parameters = parametersFromParameterNodes(parameterNodes, context);
1572
1571
  return parameters;
1573
1572
  }
1573
+ function termsFromSignatureAssertionNode(signatureAssertionNode, context) {
1574
+ const termNodes = signatureAssertionNode.getTermNodes(), terms = termsFromTermNodes(termNodes, context);
1575
+ return terms;
1576
+ }
1574
1577
  function typeFromPropertyDeclarationNode(propertyDeclarationNode, context) {
1575
1578
  const typeNode = propertyDeclarationNode.getTypeNode(), type = typeFromTypeNode(typeNode, context);
1576
1579
  return type;
@@ -1702,10 +1705,6 @@ function statementFromContainedAssertionNode(containedAssertionNode, context) {
1702
1705
  const statementNode = containedAssertionNode.getStatementNode(), statement = statementFromStatementNode(statementNode, context);
1703
1706
  return statement;
1704
1707
  }
1705
- function signatureFromSignatureAssertionNode(signatureAssertionNode, context) {
1706
- const { Signature } = _elements.default, signatureNode = signatureAssertionNode.getSignatureNode(), signatureString = context.nodeAsString(signatureNode), signature = Signature.fromSignatureString(signatureString, context);
1707
- return signature;
1708
- }
1709
1708
  function referenceFromSignatureAssertionNode(signatureAssertionNode, context) {
1710
1709
  const metavariableNode = signatureAssertionNode.getMetavariableNode(), reference = referenceFromMetavariableNode(metavariableNode, context);
1711
1710
  return reference;
@@ -1911,4 +1910,4 @@ function propertyDeclarationsFromPropertyDeclarationNodes(propertyDeclarationnNo
1911
1910
  return propertyDeclrations;
1912
1911
  }
1913
1912
 
1914
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzY2hlbWFTdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uLFxuICAgICAgICAgc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzRGVjbGFyYXRpb25BbmRDbGFpbSxcbiAgICAgICAgIGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbixcbiAgICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyxcbiAgICAgICAgIGNvdHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZTtcblxuICBpZiAodHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByZWZpeE5hbWUgPSBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgc3RyaW5nID0gdHlwZVN0cmluZywgIC8vL1xuICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gICAgY29udGV4dCA9IG51bGw7XG5cbiAgICB0eXBlID0gbmV3IFR5cGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCBwcmVmaXhOYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RlcCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGVwTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzY2hlbWFBc3NlcnRpb24gPSBzY2hlbWFBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXAgPSBuZXcgU3RlcChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcmVmZXJlbmNlLCBwcm9jZWR1cmVDYWxsLCBzY2hlbWFBc3NlcnRpb24sIHNpZ25hdHVyZUFzc2VydGlvbik7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUnVsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBydWxlU3RyaW5nID0gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiksXG4gICAgICAgIG5vZGUgPSBydWxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBydWxlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJ1bGUgPSBuZXcgUnVsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHByb29mLCBsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKTtcblxuICByZXR1cm4gcnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsYWJlbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBuZXcgTGFiZWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjbGFpbU5vZGUgPSBsZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY2xhaW1TdHJpbmcgPSBjbGFpbVN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzaWduYXR1cmUsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGxlbW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWEgPSBuZXcgTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZnJhbWVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mID0gbmV3IFByb29mKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgZGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEF4aW9tIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY2xhaW1Ob2RlID0gYXhpb21Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBheGlvbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGF4aW9tID0gbmV3IEF4aW9tKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NoZW1hRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNjaGVtYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cmFpbnRzID0gY29uc3RyYWludHNGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2NoZW1hU3RyaW5nID0gc2NoZW1hU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBzY2hlbWFOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gc2NoZW1hU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHNjaGVtYSA9IG5ldyBTY2hlbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBjb25zdHJhaW50cyk7XG5cbiAgcmV0dXJuIHNjaGVtYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTZWN0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgaHlwb3RoZXNpc05vZGVzID0gc2VjdGlvbk5vZGUuZ2V0SHlwb3RoZXNpc05vZGVzKCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyhoeXBvdGhlc2lzTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBkZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY2xhaW0gPSBjbGFpbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNlY3Rpb25TdHJpbmcgPSBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNEZWNsYXJhdGlvbkFuZENsYWltKGh5cG90aGVzZXMsIGRlY2xhcmF0aW9uLCBjbGFpbSksXG4gICAgICAgIG5vZGUgPSBzZWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHNlY3Rpb25TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzZWN0aW9uID0gbmV3IFNlY3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBoeXBvdGhlc2VzLCBkZWNsYXJhdGlvbiwgY2xhaW0pO1xuXG4gIHJldHVybiBzZWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByZW1pc2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJlbWlzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJlbWlzZSA9IG5ldyBQcmVtaXNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCByZWZlcmVuY2UsIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBwcmVtaXNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNsYWltTm9kZSA9IHRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSB0aGVvcmVtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGhlb3JlbSA9IG5ldyBUaGVvcmVtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eSA9IG51bGw7XG5cbiAgaWYgKHByb3BlcnR5Tm9kZSAhPSBudWxsKSB7XG4gICAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHByb3BlcnR5Tm9kZSwgLy8vXG4gICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgICAgdGVybSA9IHRlcm1Gcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCk7XG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIHByb3BlcnR5ID0gbmV3IFByb3BlcnR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgaWRlbnRpZmllciwgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJwcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZk5vZGUsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3ViRGVyaXZhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnByb29mU3RyaW5nID0gc3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbihzdXBwb3NpdGlvbnMsIHN1YkRlcml2YXRpb24sIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSBzdWJwcm9vZlN0cmluZzsgIC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mID0gbmV3IFN1YnByb29mKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKTtcblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmVnYXRlZCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWR1Y3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gbmV3IERlZHVjdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1YnN0aXR1dGlvbik7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgaWRlbnRpZmllcik7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvckZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBHZW5lcmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZ2VuZXJhdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgR2VuZXJhdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEh5cG90aGVzaXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gaHlwb3RoZXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBoeXBvaHRlc2lzID0gbmV3IEh5cG90aGVzaXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBoeXBvaHRlc2lzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RyYWludEZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cmFpbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RyYWludE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJhaW50ID0gbmV3IENvbnN0cmFpbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbnN0cmFpbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uamVjdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNsYWltTm9kZSA9IGNvbmplY3R1cmVOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBjb25qZWN0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZSA9IG5ldyBDb25qZWN0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb21iaW5hdG9yID0gbmV3IENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmNsdXNpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uY2x1c2lvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBuZXcgQ29uY2x1c2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZXJpdmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGRlcml2YXRpb24gPSBuZXcgRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlUHJlZml4ID0gbmV3IFR5cGVQcmVmaXgoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gbmV3IENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1cHBvc2l0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1cHBvc2l0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbiA9IG5ldyBTdXBwb3NpdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcmVmZXJlbmNlLCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVpdmFsZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVpdmFsZW5jZU5vZGUsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIHN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nOyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVpdmFsZW5jZSA9IG5ldyBFcXVpdmFsZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm1zKTtcblxuICByZXR1cm4gZXF1aXZhbGVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhVHlwZSA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHRlcm0sIHR5cGUsIG1ldGFUeXBlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZUNhbGwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMocHJvY2VkdXJlUmVmZXJlbmNlLCBwYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlQ2FsbFN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHBhcmFtZXRlcnMsIHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3ViRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJEZXJpdmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRGVyaXZhdGlvbiA9IG5ldyBTdWJEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIHN1YkRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwT3JTdWJwcm9vZiA9IChzdGVwIHx8IHN1YnByb29mKTtcblxuICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRGVjbGFyYXRpb25Gcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlRGVjbGFyYXRpb24gPSBuZXcgVHlwZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB0eXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlbWFBc3NlcnRpb25Gcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2NoZW1hQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNjaGVtYUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUoc2NoZW1hQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNjaGVtYUFzc2VydGlvbiA9IG5ldyBTY2hlbWFBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBmcmFtZSwgcmVmZXJlbmNlKTtcblxuICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZmluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gbmV3IERlZmluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBuZWdhdGVkKTtcblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gbmV3IFRlcm1TdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0VGVybSwgcmVwbGFjZW1lbnRUZXJtKTtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBuZXcgRnJhbWVTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0RnJhbWUsIHJlcGxhY2VtZW50RnJhbWUpO1xuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdWJqZWN0VGVybSA9IHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVRlcm0gPSBwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBuZXcgUHJvcGVydHlBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJqZWN0VGVybSwgcHJvcGVydHlUZXJtKTtcblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvdHlwZURlY2xhcmF0aW9uRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb3R5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY290eXBlRGVjbGFyYXRpb25TdHJpbmcgPSBjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsKHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKSxcbiAgICAgICAgc3RyaW5nID0gY290eXBlRGVjbGFyYXRpb25TdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb3R5cGVEZWNsYXJhdGlvbiA9IG5ldyBDb3R5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsLCBwcm9wZXJ0eURlY2xhcmF0aW9ucyk7XG5cbiAgcmV0dXJuIGNvdHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gbmV3IENvbnRhaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb24gPSBuZXcgU2lnbmF0dXJlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc2lnbmF0dXJlLCByZWZlcmVuY2UpO1xuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZWVuY2UgPSBuZXcgUHJvY2VkdXJlUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZWVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSW1wbGljaXRBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gbmV3IEltcGxpY2l0QXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGltcGxpY2l0QXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eURlY2xhcmF0aW9uID0gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm9wZXJ0eSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHZhcmlhYmxlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRDb21iaW5hdG9yRnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQnJhY2tldGVkQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkQ29tYmluYXRvciA9IG5ldyBCcmFja2V0ZWRDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb25zdHJ1Y3RvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZENvbnN0cnVjdG9yID0gbmV3IEJyYWNrZXRlZENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZENvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEdlbmVyYXRvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGdlbmVyYXRvciA9IGdlbmVyYXRvckZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBnZW5lcmF0b3JEZWNsYXJhdGlvbiA9IG5ldyBHZW5lcmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsLCBnZW5lcmF0b3IpO1xuXG4gIHJldHVybiBnZW5lcmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXhEZWNsYXJhdGlvbiA9IG5ldyBUeXBlUHJlZml4RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlUHJlZml4KTtcblxuICByZXR1cm4gdHlwZVByZWZpeERlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb21iaW5hdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBjb21iaW5hdG9yKTtcblxuICByZXR1cm4gY29tYmluYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlID0gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZSA9IHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uID0gbmV3IFJlZmVyZW5jZVN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0YXJnZXRSZWZlcmVuY2UsIHJlcGxhY2VtZW50UmVmZXJlbmNlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc29sdmVkID0gc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbiA9IG5ldyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc29sdmVkLCB0YXJnZXRTdGF0ZW1lbnQsIHJlcGxhY2VtZW50U3RhdGVtZW50KTtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29uc3RydWN0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsLCBjb25zdHJ1Y3Rvcik7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YVR5cGUsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTmFtZSA9IHR5cGVOb2RlLmdldFR5cGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gcnVsZU5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gY2xhaW1Ob2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSBydWxlTm9kZS5nZXRMYWJlbE5vZGVzKCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gY2xhaW1Ob2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9vZk5vZGUgPSBzY2hlbWFOb2RlLmdldFByb29mTm9kZSgpLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbGFiZWxOb2RlID0gc2NoZW1hTm9kZS5nZXRMYWJlbE5vZGUoKSxcbiAgICAgICAgbGFiZWxTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhsYWJlbE5vZGUpLFxuICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21MYWJlbFN0cmluZyhsYWJlbFN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VOb2RlcyA9IHJ1bGVOb2RlLmdldFByZW1pc2VOb2RlcygpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYWltRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGF4aW9tID0gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZW1tYSA9IGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltID0gKGF4aW9tIHx8IGxlbW1hIHx8IHRoZW9yZW0gfHwgY29uamVjdHVyZSk7XG5cbiAgcmV0dXJuIGNsYWltO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGF4aW9tID0gbnVsbDtcblxuICBjb25zdCBheGlvbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRBeGlvbU5vZGUoKTtcblxuICBpZiAoYXhpb21Ob2RlICE9PSBudWxsKSB7XG4gICAgYXhpb20gPSBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsZW1tYSA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWFOb2RlID0gc2VjdGlvbk5vZGUuZ2V0TGVtbWFOb2RlKCk7XG5cbiAgaWYgKGxlbW1hTm9kZSAhPT0gbnVsbCkge1xuICAgIGxlbW1hID0gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RlcE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBzdGVwTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTm9kZSk7XG5cbiAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gZ2VuZXJhdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwZXJUeXBlcyA9IG51bGw7XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBudWxsO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4TmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHR5cGVOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgIHByZWZpeE5hbWUgPSB0eXBlUHJlZml4TmFtZTsgIC8vL1xuXG4gIHJldHVybiBwcmVmaXhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25jbHVzaW9uTm9kZSA9IHJ1bGVOb2RlLmdldENvbmNsdXNpb25Ob2RlKCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBjbGFpbU5vZGUuZ2V0RGVkdWN0aW9uTm9kZSgpLFxuICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVOb2RlID0gY2xhaW1Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgU2lnbmF0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgIHNpZ25hdHVyZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHNpZ25hdHVyZU5vZGUpO1xuXG4gICAgc2lnbmF0dXJlID0gU2lnbmF0dXJlLmZyb21TaWduYXR1cmVTdHJpbmcoc2lnbmF0dXJlU3RyaW5nLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0aGVvcmVtID0gbnVsbDtcblxuICBjb25zdCB0aGVvcmVtTm9kZSA9IHNlY3Rpb25Ob2RlLmdldFRoZW9yZW1Ob2RlKCk7XG5cbiAgaWYgKHRoZW9yZW1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gc2lnbmF0dXJlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZVByZWZpeE5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVyaXZhdGlvbk5vZGUgPSBwcm9vZk5vZGUuZ2V0RGVyaXZhdGlvbk5vZGUoKSxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gc2NoZW1hTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGVxdWFsaXR5Tm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IG9jbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlcyA9IGZyYW1lTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHByZW1pc2VOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IGVxdWl2YWxlbmNlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICBuYW1lID0gbWV0YW1ldGF2YXJpYWJsZU5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlbU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvY2VkdXJlQ2FsbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gY2xhaW1Ob2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbGFiZWxOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cmFpbnRzRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuXG4gIHJldHVybiBjb25zdHJhaW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbmplY3R1cmUgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmplY3R1cmVOb2RlID0gc2VjdGlvbk5vZGUuZ2V0Q29uamVjdHVyZU5vZGUoKTtcblxuICBpZiAoY29uamVjdHVyZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29uamVjdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0UmlnaHRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGVxdWFsaXR5ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eU5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEVxdWFsaXR5Tm9kZSgpO1xuXG4gIGlmIChlcXVhbGl0eU5vZGUgIT09IG51bGwpIHtcbiAgICBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzY2hlbWFOb2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZ2VuZXJhdG9yRGVjbGFyYXRpb24gPSBnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlY2xhcmF0aW9uID0gKGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gfHwgZ2VuZXJhdG9yRGVjbGFyYXRpb24pO1xuXG4gIHJldHVybiBkZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgaWRlbnRpZmllciA9IHZhcmlhYmxlSWRlbnRpZmllcjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZGVudGlmaWVyID0gcGFyYW1ldGVyTm9kZS5nZXRJZGVudGlmaWVyKCk7XG5cbiAgcmV0dXJuIGlkZW50aWZpZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBkZWR1Y3Rpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RlcCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGUuaXNTdGVwTm9kZSgpO1xuXG4gIGlmIChzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSkge1xuICAgIGNvbnN0IHN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NoZW1hQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzY2hlbWFBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNjaGVtYUFzc2VydGlvbk5vZGUgPSBzdGVwTm9kZS5nZXRTY2hlbWFBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNjaGVtYUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzY2hlbWFBc3NlcnRpb24gPSBzY2hlbWFBc3NlcnRpb25Gcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzY2hlbWFBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBpZGVudGlmaWVyID0gcGFyYW1ldGVyTm9kZS5nZXRJZGVudGlmaWVyKCk7XG5cbiAgcmV0dXJuIGlkZW50aWZpZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZXNtZW50Tm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVzbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbWJpbmF0b3JOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW5vTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29uY2x1c2lub05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBoeXBvdGhlc2lzTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICByZWZlcmVuY2VOb2RlID0gY29uc3RyYWludE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvY2VkdXJlQ2FsbCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRQcm9jZWR1cmVDYWxsTm9kZSgpO1xuXG4gIGlmIChwcm9jZWR1cmVDYWxsTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IHN1YnByb29mTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDsgLy8vXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlbCA9IG51bGw7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZnJhbWVOb2RlID0gc2NoZW1hQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViRGVyaXZhdGlvbk5vZGUgPSBzdWJwcm9vZk5vZGUuZ2V0U3ViRGVyaXZhdGlvbk5vZGUoKSxcbiAgICAgICAgc3ViRGVydmlhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdWJEZXJ2aWF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZVN1YnN0aXR1dGlvbiwgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gRnJhbWVTdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSAoZnJhbWVTdWJzdGl0dXRpb24gfHwgdGVybVN1YnN0aXR1dGlvbik7XG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IG1ldGF2YXJpYWJsZVN0cmluZywgLy8vXG4gICAgICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGNvdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSA9IHN0ZXBOb2RlLmdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VHlwZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGUuaXNTdWJwcm9vZk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSkge1xuICAgIGNvbnN0IHN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGU7ICAvLy9cblxuICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBzY2hlbWFBc3NlcnRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gYnJhY2tldGVkQ2Nuc3RydWN0b3JOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKSxcbiAgICAgICAgdHlwZSA9IGJhc2VUeXBlOyAgLy8vXG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGRlZmluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSB0eXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVzTm9kZSgpO1xuXG4gIGlmICh0eXBlc05vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlcyA9IHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpO1xuXG4gICAgc3VwZXJUeXBlcyA9IHR5cGVzOyAvLy9cbiAgfVxuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICB0YXJnZXRUZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRhcmdldFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRhcmdldFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHlBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gdHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHswXG4gIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGdlbmVyYXRvckRlY2xhcmF0aW9uID0gbnVsbDtcblxuICBjb25zdCBnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUgPSBzZWN0aW9uTm9kZS5nZXRHZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoKTtcblxuICBpZiAoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZ2VuZXJhdG9yRGVjbGFyYXRpb24gPSBnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBnZW5lcmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VwZXJUeXBlcyA9IFtdO1xuXG4gIGNvbnN0IHR5cGVzTm9kZSA9IGNvdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlc21lbnROb2RlID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlc21lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgc2lnbmF0dXJlTm9kZSA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpLFxuICAgICAgICBzaWduYXR1cmVTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhzaWduYXR1cmVOb2RlKSxcbiAgICAgICAgc2lnbmF0dXJlID0gU2lnbmF0dXJlLmZyb21TaWduYXR1cmVTdHJpbmcoc2lnbmF0dXJlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFByb3BlcnR5Tm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViamVjdFRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdWJqZWN0VGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0U3ViamVjdFRlcm1Ob2RlKCksXG4gICAgICAgIHN1YmplY3RUZXJtID0gdGVybUZyb21UZXJtTm9kZShzdWJqZWN0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdWJqZWN0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dCwgLy8vXG4gICAgICAgIHRhcmdldEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0RnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUodGFyZ2V0RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0RnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0Q29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoKTtcblxuICBpZiAoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29uc3RydWN0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5VGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0UHJvcGVydHlUZXJtTm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eVRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHByb3BlcnR5VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eVRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBnZW5lcmF0b3JOb2RlID0gZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLmdldEdlbmVyYXRvck5vZGUoKSxcbiAgICAgICAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbHZlZEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3Qgc29sdmVkID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5pc1NvbHZlZCgpO1xuXG4gIHJldHVybiBzb2x2ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy8vLy9cbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50VGVybU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyZXBsYWNlbWVudFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLmdldFR5cGVQcmVmaXhOb2RlKCksXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbWJpbmF0b3JOb2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRDb21iaW5hdG9yTm9kZSgpLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFUeXBlTmFtZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgbWV0YVR5cGUgPSBjb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7XG5cbiAgcmV0dXJuIG1ldGFUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vXG4gICAgICAgIHJlcGxhY2VtZW50RnJhbWVOb2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50RnJhbWVOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50RnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUocmVwbGFjZW1lbnRGcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudEZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RydWN0b3JOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29uc3RydWN0b3JOb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dCwgLy8vXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcodGFyZ2V0UmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHRhcmdldFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dCwgLy8vXG4gICAgICAgIHRhcmdldFN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUodGFyZ2V0U3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcyA9IGNvdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMoKSxcbiAgICAgICAgcHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbGFyYXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy9cbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy9cbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShyZXBsYWNlbWVudFN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXMgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4ge1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlcyA9IHR5cGVzTm9kZS5nZXRUeXBlTm9kZXMoKSxcbiAgICAgICAgdHlwZXMgPSB0eXBlTm9kZXMubWFwKCh0eXBlTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVscyA9IGxhYmVsTm9kZXMubWFwKChsYWJlbE5vZGUpID0+IHtcbiAgICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKGxhYmVsTm9kZSksXG4gICAgICAgICAgbGFiZWwgPSBMYWJlbC5mcm9tTGFiZWxTdHJpbmcobGFiZWxTdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxhYmVsO1xuICB9KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzKHByZW1pc2VOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlcyA9IHByZW1pc2VOb2Rlcy5tYXAoKHByZW1pc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgcHJlbWlzZSA9IHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByZW1pc2U7XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZW50Tm9kZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzKHBhcmFtZXRlck5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBoeXBvdGhlc2lzTm9kZXMubWFwKChoeXBvdGhlc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgaHlwb3RoZXNpcyA9IGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXNpcztcbiAgfSk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbk5vZGVzLm1hcCgoYXNzdW1wdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbk5vZGVzLm1hcCgoc3VwcG9zaXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSBzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IGRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IHN1YkRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcyhwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbHJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLm1hcCgocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eURlY2xjYXJhdGlvbiA9IHByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5RGVjbGNhcmF0aW9uO1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNscmF0aW9ucztcbn1cbiJdLCJuYW1lcyI6WyJhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzIiwiYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlIiwiYXhpb21Gcm9tQXhpb21Ob2RlIiwiYXhpb21Gcm9tU2VjdGlvbk5vZGUiLCJicmFja2V0ZWRDb21iaW5hdG9yRnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiY2xhaW1Gcm9tU2VjdGlvbk5vZGUiLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUiLCJjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlIiwiY29uY2x1c2lvbkZyb21SdWxlTm9kZSIsImNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RyYWludEZyb21Db25zdHJhaW50Tm9kZSIsImNvbnN0cmFpbnRzRnJvbVNjaGVtYU5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZSIsImNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImNvdHlwZURlY2xhcmF0aW9uRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsImRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbUNsYWltTm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbVNjaGVtYU5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZSIsImRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlIiwiZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZSIsImVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZSIsImVycm9yRnJvbUVycm9yTm9kZSIsImZyYW1lRnJvbUZyYW1lTm9kZSIsImZyYW1lRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZSIsImdlbmVyYXRvckZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJnZW5lcmF0b3JGcm9tR2VuZXJhdG9yTm9kZSIsImh5cG90aGVzZXNGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiaHlwb3RoZXNlc0Zyb21DbGFpbU5vZGUiLCJoeXBvdGhlc2VzRnJvbUNvbnN0cnVjdG9yTm9kZSIsImh5cG90aGVzZXNGcm9tR2VuZXJhdG9yTm9kZSIsImh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzIiwiaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZSIsImlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZSIsImlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlIiwiaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUiLCJpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsImxhYmVsRnJvbUxhYmVsTm9kZSIsImxhYmVsRnJvbVNjaGVtYU5vZGUiLCJsYWJlbHNGcm9tQ2xhaW1Ob2RlIiwibGFiZWxzRnJvbUxhYmVsTm9kZXMiLCJsYWJlbHNGcm9tUnVsZU5vZGUiLCJsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJsZW1tYUZyb21MZW1tYU5vZGUiLCJsZW1tYUZyb21TZWN0aW9uTm9kZSIsIm1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50Tm9kZSIsIm5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm5hbWVGcm9tUGFyYW10ZXJOb2RlIiwibmFtZUZyb21QYXJhbmV0ZXJOb2RlIiwibmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwibmFtZUZyb21UeXBlTm9kZSIsIm5hbWVGcm9tVHlwZVByZWZpeE5vZGUiLCJuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJuZWdhdGVkRnJvbUVxdWFsaXR5Tm9kZSIsIm5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwibm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlIiwicGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzIiwicGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByZWZpeE5hbWVGcm9tVHlwZU5vZGUiLCJwcmVtaXNlRnJvbVByZW1pc2VOb2RlIiwicHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzIiwicHJlbWlzZXNGcm9tUnVsZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbUh5cG90aGVzaXNOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVN0ZXBOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21TdXBwb3NpdGlvbk5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInByb29mRnJvbUNsYWltTm9kZSIsInByb29mRnJvbVByb29mTm9kZSIsInByb29mRnJvbVJ1bGVOb2RlIiwicHJvb2ZGcm9tU2NoZW1hTm9kZSIsInByb3BlcnRpZXNGcm9tVHlwZU5vZGUiLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbkZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25zRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25zRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsInByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlGcm9tUHJvcGVydHlOb2RlIiwicHJvcGVydHlUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVGVybU5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUiLCJwcm92aXNpb25hbEZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21Db25zdHJhaW50Tm9kZSIsInJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbVByZW1pc2VOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbVN0ZXBOb2RlIiwicmVmZXJlbmNlRnJvbVN1cHBvc2l0aW9uTm9kZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJydWxlRnJvbVJ1bGVOb2RlIiwic2NoZW1hQXNzZXJ0aW9uRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUiLCJzY2hlbWFBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzY2hlbWFGcm9tU2NoZW1hTm9kZSIsInNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlIiwic2lnbmF0dXJlRnJvbUNsYWltTm9kZSIsInNpZ25hdHVyZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUiLCJzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db25zdHJhaW50Tm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21QcmVtaXNlTm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50RnJvbVN0ZXBOb2RlIiwic3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUiLCJzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlIiwic3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzdXBlclR5cGVzRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZU5vZGUiLCJzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJ0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwidGVybUZyb21Db25zdHJ1Y3Rvck5vZGUiLCJ0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21HZW5lcmF0b3JOb2RlIiwidGVybUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5Tm9kZSIsInRlcm1Gcm9tVGVybU5vZGUiLCJ0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZSIsInRlcm1zRnJvbVNpZ25hdHVyZU5vZGUiLCJ0ZXJtc0Zyb21UZXJtTm9kZXMiLCJ0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlIiwidGhlb3JlbUZyb21UaGVvcmVtTm9kZSIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRGVjbGFyYXRpb25Gcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwidHlwZUZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JOb2RlIiwidHlwZUZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tR2VuZXJhdG9yTm9kZSIsInR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsInR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVByb3BlcnR5Tm9kZSIsInR5cGVGcm9tVGVybU5vZGUiLCJ0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21UeXBlTm9kZSIsInR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlTm9kZSIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwidHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwidHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVzRnJvbVR5cGVzTm9kZSIsInZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21UZXJtTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZU5vZGUiLCJjb250ZXh0IiwidHlwZSIsImJhc2VUeXBlIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsIlR5cGUiLCJlbGVtZW50cyIsIm5vZGUiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJzdHJpbmciLCJicmVha1BvaW50IiwidGVybU5vZGUiLCJUZXJtIiwibm9kZUFzU3RyaW5nIiwidGVybSIsInN0ZXBOb2RlIiwiU3RlcCIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInByb2NlZHVyZUNhbGwiLCJzY2hlbWFBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb24iLCJzdGVwIiwicnVsZU5vZGUiLCJSdWxlIiwicHJvb2YiLCJsYWJlbHMiLCJwcmVtaXNlcyIsImNvbmNsdXNpb24iLCJydWxlU3RyaW5nIiwicnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24iLCJydWxlIiwibGFiZWxOb2RlIiwiTGFiZWwiLCJtZXRhdmFyaWFibGUiLCJsYWJlbCIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJsZW1tYU5vZGUiLCJMZW1tYSIsImNsYWltTm9kZSIsImRlZHVjdGlvbiIsInN1cHBvc2l0aW9ucyIsInNpZ25hdHVyZSIsImh5cG90aGVzZXMiLCJjbGFpbVN0cmluZyIsImNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImxlbW1hIiwiZnJhbWVOb2RlIiwiRnJhbWUiLCJhc3N1bXB0aW9ucyIsImZyYW1lIiwicHJvb2ZOb2RlIiwiUHJvb2YiLCJkZXJpdmF0aW9uIiwiYXhpb21Ob2RlIiwiQXhpb20iLCJheGlvbSIsInNjaGVtYU5vZGUiLCJTY2hlbWEiLCJjb25zdHJhaW50cyIsInNjaGVtYVN0cmluZyIsInNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInNjaGVtYSIsInNlY3Rpb25Ob2RlIiwiU2VjdGlvbiIsImh5cG90aGVzaXNOb2RlcyIsImdldEh5cG90aGVzaXNOb2RlcyIsImRlY2xhcmF0aW9uIiwiY2xhaW0iLCJzZWN0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzRGVjbGFyYXRpb25BbmRDbGFpbSIsInNlY3Rpb24iLCJwcmVtaXNlTm9kZSIsIlByZW1pc2UiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwidGhlb3JlbSIsInByb3BlcnR5Tm9kZSIsInByb3BlcnR5IiwiUHJvcGVydHkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsInN1YnByb29mTm9kZSIsIlN1YnByb29mIiwic3ViRGVyaXZhdGlvbiIsInN1YnByb29mU3RyaW5nIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1YnByb29mIiwiZXF1YWxpdHlOb2RlIiwiRXF1YWxpdHkiLCJuZWdhdGVkIiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJlcXVhbGl0eSIsImRlZHVjdGlvbk5vZGUiLCJEZWR1Y3Rpb24iLCJzdGF0ZW1lbnROb2RlIiwiU3RhdGVtZW50Iiwic3Vic3RpdHV0aW9uIiwic2lnbmF0dXJlTm9kZSIsIlNpZ25hdHVyZSIsInRlcm1zIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJnZW5lcmF0b3JOb2RlIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiaHlwb3RoZXNlTm9kZSIsIkh5cG90aGVzaXMiLCJoeXBvaHRlc2lzIiwiY29uc3RyYWludE5vZGUiLCJDb25zdHJhaW50IiwiY29uc3RyYWludCIsImNvbmplY3R1cmVOb2RlIiwiQ29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJjb21iaW5hdG9yTm9kZSIsIkNvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY29uY2x1c2lvbk5vZGUiLCJDb25jbHVzaW9uIiwiZGVyaXZhdGlvbk5vZGUiLCJEZXJpdmF0aW9uIiwic3RlcHNPclN1YnByb29mcyIsInR5cGVQcmVmaXhOb2RlIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJhc3N1bXB0aW9uIiwiY29uc3RydWN0b3JOb2RlIiwiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsInN1cHBvc2l0aW9uTm9kZSIsIlN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb24iLCJlcXVpdmFsZW5jZU5vZGUiLCJFcXVpdmFsZW5jZSIsImVxdWl2YWxlbmNlU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMiLCJlcXVpdmFsZW5jZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhVHlwZSIsInByb2NlZHVyZUNhbGxOb2RlIiwiUHJvY2VkdXJlQ2FsbCIsInBhcmFtZXRlcnMiLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVDYWxsU3RyaW5nIiwicHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzIiwic3ViRGVyaXZhdGlvbk5vZGUiLCJTdWJEZXJpdmF0aW9uIiwidHlwZUFzc2VydGlvbk5vZGUiLCJUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mIiwidHlwZURlY2xhcmF0aW9uTm9kZSIsIlR5cGVEZWNsYXJhdGlvbiIsInR5cGVEZWNsYXJhdGlvbiIsInNjaGVtYUFzc2VydGlvbk5vZGUiLCJTY2hlbWFBc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIkRlZmluZWRBc3NlcnRpb24iLCJpc05lZ2F0ZWQiLCJkZWZpbmVkQXNzZXJ0aW9uIiwidGVybVN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsIlRlcm1TdWJzdGl0dXRpb24iLCJjb250ZXh0cyIsInRhcmdldFRlcm0iLCJyZXBsYWNlbWVudFRlcm0iLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJ0YXJnZXRGcmFtZSIsInJlcGxhY2VtZW50RnJhbWUiLCJmcmFtZVN1YnN0aXR1dGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsIlByb3BlcnR5QXNzZXJ0aW9uIiwic3ViamVjdFRlcm0iLCJwcm9wZXJ0eVRlcm0iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50cyIsInN1YnByb29mQXNzZXJ0aW9uIiwiY290eXBlRGVjbGFyYXRpb25Ob2RlIiwiQ290eXBlRGVjbGFyYXRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9ucyIsImNvdHlwZURlY2xhcmF0aW9uU3RyaW5nIiwiY290eXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCIsImNvdHlwZURlY2xhcmF0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIkNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJTaWduYXR1cmVBc3NlcnRpb24iLCJwcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwiUHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlZW5jZSIsImltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJJbXBsaWNpdEFzc3VtcHRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsIlByb3BlcnR5RGVjbGFyYXRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsImJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwiQnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwiZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwiR2VuZXJhdG9yRGVjbGFyYXRpb24iLCJnZW5lcmF0b3JEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJUeXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29tYmluYXRvckRlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIlJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInRhcmdldFJlZmVyZW5jZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInNvbHZlZCIsInRhcmdldFN0YXRlbWVudCIsInJlcGxhY2VtZW50U3RhdGVtZW50Iiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIk1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwiZ2V0UHJvb2ZOb2RlIiwibGFiZWxOb2RlcyIsImdldExhYmVsTm9kZXMiLCJnZXRMYWJlbE5vZGUiLCJsYWJlbFN0cmluZyIsImZyb21MYWJlbFN0cmluZyIsImdldFZhcmlhYmxlTm9kZSIsInByZW1pc2VOb2RlcyIsImdldFByZW1pc2VOb2RlcyIsImdldEF4aW9tTm9kZSIsImdldExlbW1hTm9kZSIsImdldFRlcm1Ob2RlIiwiZ2V0TmFtZSIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlU3RyaW5nIiwiZnJvbVJlZmVyZW5jZVN0cmluZyIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldERlZHVjdGlvbk5vZGUiLCJnZXRTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlU3RyaW5nIiwiZnJvbVNpZ25hdHVyZVN0cmluZyIsImdldFRoZW9yZW1Ob2RlIiwidGVybU5vZGVzIiwiZ2V0VGVybU5vZGVzIiwiZ2V0RGVyaXZhdGlvbk5vZGUiLCJvY25zdHJ1Y3Rvck5vZGUiLCJhc3N1bXB0aW9uTm9kZXMiLCJnZXRBc3N1bXB0aW9uTm9kZXMiLCJsZWZ0VGVybU5vZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJtZXRhbWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJ0eXBlbU5vZGUiLCJnZXRUeXBlTm9kZSIsInN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImdldENvbmplY3R1cmVOb2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJnZXRFcXVhbGl0eU5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJnZXRJZGVudGlmaWVyIiwic3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUiLCJpc1N0ZXBOb2RlIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwiZ2V0U2NoZW1hQXNzZXJ0aW9uTm9kZSIsInN0YXRlc21lbnROb2RlIiwiY29uY2x1c2lub05vZGUiLCJoeXBvdGhlc2lzTm9kZSIsImdldFByb2NlZHVyZUNhbGxOb2RlIiwicmVmZXJlbmNlbCIsImdldEZyYW1lTm9kZSIsImdldFN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVydmlhdGlvbiIsImZyb21TdGF0ZW1lbnROb2RlIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwiZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsImdldFR5cGVBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUiLCJpc1N1YnByb29mTm9kZSIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUiLCJnZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInR5cGVzTm9kZSIsImdldFR5cGVzTm9kZSIsInR5cGVzIiwidGFyZ2V0VGVybU5vZGUiLCJnZXRUYXJnZXRUZXJtTm9kZSIsImdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImlzUHJvdmlzaW9uYWwiLCJnZXRDb250YWluZWRBc3NlcnRpb25Ob2RlIiwiZ2V0R2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsImdldFByb3BlcnR5Tm9kZSIsInN1YmplY3RUZXJtTm9kZSIsImdldFN1YmplY3RUZXJtTm9kZSIsInRhcmdldEZyYW1lTm9kZSIsImdldFRhcmdldEZyYW1lTm9kZSIsImdldENvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlUZXJtTm9kZSIsImdldFByb3BlcnR5VGVybU5vZGUiLCJnZXRHZW5lcmF0b3JOb2RlIiwiaXNTb2x2ZWQiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicmVwbGFjZW1lbnRUZXJtTm9kZSIsImdldFJlcGxhY2VtZW50VGVybU5vZGUiLCJnZXRUeXBlUHJlZml4Tm9kZSIsImdldENvbWJpbmF0b3JOb2RlIiwibWV0YVR5cGVOYW1lIiwiZ2V0TWV0YVR5cGVOYW1lIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJyZXBsYWNlbWVudEZyYW1lTm9kZSIsImdldFJlcGxhY2VtZW50RnJhbWVOb2RlIiwiZ2V0Q29uc3RydWN0b3JOb2RlIiwidGFyZ2V0UmVmZXJlbmNlTm9kZSIsImdldFRhcmdldFJlZmVyZW5jZU5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VTdHJpbmciLCJ0YXJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMiLCJnZXRQcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJyZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUiLCJnZXRSZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZyIsInJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsImdldFJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsIm1hcCIsInR5cGVOb2RlcyIsImdldFR5cGVOb2RlcyIsImh5cG90aGVzaXMiLCJzdGVwT3JTdWJwcm9vZk5vZGVzIiwiZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcyIsInByb3BlcnR5RGVjbHJhdGlvbnMiLCJwcm9wZXJ0eURlY2xjYXJhdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBdWZnQkE7ZUFBQUE7O1FBa3hEQUM7ZUFBQUE7O1FBei9CQUM7ZUFBQUE7O1FBeG1DQUM7ZUFBQUE7O1FBNDRCQUM7ZUFBQUE7O1FBdE9BQztlQUFBQTs7UUFXQUM7ZUFBQUE7O1FBaU5BQztlQUFBQTs7UUF0S0FDO2VBQUFBOztRQXV1Q0FDO2VBQUFBOztRQXpxREFDO2VBQUFBOztRQWNBQztlQUFB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
1913
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzY2hlbWFTdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uLFxuICAgICAgICAgc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzRGVjbGFyYXRpb25BbmRDbGFpbSxcbiAgICAgICAgIGNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbixcbiAgICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyxcbiAgICAgICAgIGNvdHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZTtcblxuICBpZiAodHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByZWZpeE5hbWUgPSBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgc3RyaW5nID0gdHlwZVN0cmluZywgIC8vL1xuICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gICAgY29udGV4dCA9IG51bGw7XG5cbiAgICB0eXBlID0gbmV3IFR5cGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCBwcmVmaXhOYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RlcCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGVwTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzY2hlbWFBc3NlcnRpb24gPSBzY2hlbWFBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXAgPSBuZXcgU3RlcChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcmVmZXJlbmNlLCBwcm9jZWR1cmVDYWxsLCBzY2hlbWFBc3NlcnRpb24sIHNpZ25hdHVyZUFzc2VydGlvbik7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUnVsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBydWxlU3RyaW5nID0gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiksXG4gICAgICAgIG5vZGUgPSBydWxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBydWxlU3RyaW5nLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHJ1bGUgPSBuZXcgUnVsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHByb29mLCBsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKTtcblxuICByZXR1cm4gcnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsYWJlbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBuZXcgTGFiZWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjbGFpbU5vZGUgPSBsZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY2xhaW1TdHJpbmcgPSBjbGFpbVN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzaWduYXR1cmUsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGxlbW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWEgPSBuZXcgTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZnJhbWVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mID0gbmV3IFByb29mKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgZGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEF4aW9tIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY2xhaW1Ob2RlID0gYXhpb21Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBheGlvbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGF4aW9tID0gbmV3IEF4aW9tKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2NoZW1hRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNjaGVtYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cmFpbnRzID0gY29uc3RyYWludHNGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2NoZW1hU3RyaW5nID0gc2NoZW1hU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBzY2hlbWFOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gc2NoZW1hU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHNjaGVtYSA9IG5ldyBTY2hlbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBjb25zdHJhaW50cyk7XG5cbiAgcmV0dXJuIHNjaGVtYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTZWN0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgaHlwb3RoZXNpc05vZGVzID0gc2VjdGlvbk5vZGUuZ2V0SHlwb3RoZXNpc05vZGVzKCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyhoeXBvdGhlc2lzTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBkZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY2xhaW0gPSBjbGFpbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNlY3Rpb25TdHJpbmcgPSBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNEZWNsYXJhdGlvbkFuZENsYWltKGh5cG90aGVzZXMsIGRlY2xhcmF0aW9uLCBjbGFpbSksXG4gICAgICAgIG5vZGUgPSBzZWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHNlY3Rpb25TdHJpbmcsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzZWN0aW9uID0gbmV3IFNlY3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBoeXBvdGhlc2VzLCBkZWNsYXJhdGlvbiwgY2xhaW0pO1xuXG4gIHJldHVybiBzZWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByZW1pc2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJlbWlzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJlbWlzZSA9IG5ldyBQcmVtaXNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCByZWZlcmVuY2UsIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBwcmVtaXNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNsYWltTm9kZSA9IHRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSB0aGVvcmVtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGhlb3JlbSA9IG5ldyBUaGVvcmVtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eSA9IG51bGw7XG5cbiAgaWYgKHByb3BlcnR5Tm9kZSAhPSBudWxsKSB7XG4gICAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHByb3BlcnR5Tm9kZSwgLy8vXG4gICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgICAgdGVybSA9IHRlcm1Gcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCk7XG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIHByb3BlcnR5ID0gbmV3IFByb3BlcnR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgaWRlbnRpZmllciwgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJwcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZk5vZGUsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3ViRGVyaXZhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnByb29mU3RyaW5nID0gc3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbihzdXBwb3NpdGlvbnMsIHN1YkRlcml2YXRpb24sIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSBzdWJwcm9vZlN0cmluZzsgIC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mID0gbmV3IFN1YnByb29mKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKTtcblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmVnYXRlZCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWR1Y3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gbmV3IERlZHVjdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1YnN0aXR1dGlvbik7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgaWRlbnRpZmllcik7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRvckZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBHZW5lcmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZ2VuZXJhdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgR2VuZXJhdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEh5cG90aGVzaXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gaHlwb3RoZXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBoeXBvaHRlc2lzID0gbmV3IEh5cG90aGVzaXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBoeXBvaHRlc2lzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RyYWludEZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cmFpbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RyYWludE5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJhaW50ID0gbmV3IENvbnN0cmFpbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbnN0cmFpbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uamVjdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNsYWltTm9kZSA9IGNvbmplY3R1cmVOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUNsYWltTm9kZShjbGFpbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBjb25qZWN0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNsYWltU3RyaW5nLCAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZSA9IG5ldyBDb25qZWN0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb21iaW5hdG9yID0gbmV3IENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmNsdXNpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uY2x1c2lvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBuZXcgQ29uY2x1c2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZXJpdmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGRlcml2YXRpb24gPSBuZXcgRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlUHJlZml4ID0gbmV3IFR5cGVQcmVmaXgoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lKTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gbmV3IENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1cHBvc2l0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1cHBvc2l0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbiA9IG5ldyBTdXBwb3NpdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcmVmZXJlbmNlLCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVpdmFsZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVpdmFsZW5jZU5vZGUsIC8vL1xuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIHN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nOyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVpdmFsZW5jZSA9IG5ldyBFcXVpdmFsZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm1zKTtcblxuICByZXR1cm4gZXF1aXZhbGVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhVHlwZSA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHRlcm0sIHR5cGUsIG1ldGFUeXBlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZUNhbGwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMocHJvY2VkdXJlUmVmZXJlbmNlLCBwYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gcHJvY2VkdXJlQ2FsbFN0cmluZywgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHBhcmFtZXRlcnMsIHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3ViRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJEZXJpdmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRGVyaXZhdGlvbiA9IG5ldyBTdWJEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIHN1YkRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwT3JTdWJwcm9vZiA9IChzdGVwIHx8IHN1YnByb29mKTtcblxuICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRGVjbGFyYXRpb25Gcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlRGVjbGFyYXRpb24gPSBuZXcgVHlwZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB0eXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlbWFBc3NlcnRpb25Gcm9tU2NoZW1hQXNzZXJ0aW9uTm9kZShzY2hlbWFBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2NoZW1hQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNjaGVtYUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUoc2NoZW1hQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNjaGVtYUFzc2VydGlvbiA9IG5ldyBTY2hlbWFBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBmcmFtZSwgcmVmZXJlbmNlKTtcblxuICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZmluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gbmV3IERlZmluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBuZWdhdGVkKTtcblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gbmV3IFRlcm1TdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0VGVybSwgcmVwbGFjZW1lbnRUZXJtKTtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBuZXcgRnJhbWVTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGFyZ2V0RnJhbWUsIHJlcGxhY2VtZW50RnJhbWUpO1xuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdWJqZWN0VGVybSA9IHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVRlcm0gPSBwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBuZXcgUHJvcGVydHlBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJqZWN0VGVybSwgcHJvcGVydHlUZXJtKTtcblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvdHlwZURlY2xhcmF0aW9uRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb3R5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZShjb3R5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY290eXBlRGVjbGFyYXRpb25TdHJpbmcgPSBjb3R5cGVEZWNsYXJhdGlvblN0cmluZ0Zyb21UeXBlU3VwZXJUeXBlc0FuZFByb3Zpc2lvbmFsKHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKSxcbiAgICAgICAgc3RyaW5nID0gY290eXBlRGVjbGFyYXRpb25TdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb3R5cGVEZWNsYXJhdGlvbiA9IG5ldyBDb3R5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsLCBwcm9wZXJ0eURlY2xhcmF0aW9ucyk7XG5cbiAgcmV0dXJuIGNvdHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gbmV3IENvbnRhaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbmV3IFNpZ25hdHVyZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm1zLCByZWZlcmVuY2UpO1xuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZWVuY2UgPSBuZXcgUHJvY2VkdXJlUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZWVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSW1wbGljaXRBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gbmV3IEltcGxpY2l0QXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGltcGxpY2l0QXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eURlY2xhcmF0aW9uID0gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlLCBwcm9wZXJ0eSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHZhcmlhYmxlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRDb21iaW5hdG9yRnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQnJhY2tldGVkQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkQ29tYmluYXRvciA9IG5ldyBCcmFja2V0ZWRDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb25zdHJ1Y3RvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZENvbnN0cnVjdG9yID0gbmV3IEJyYWNrZXRlZENvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZENvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEdlbmVyYXRvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGdlbmVyYXRvciA9IGdlbmVyYXRvckZyb21HZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUoZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBnZW5lcmF0b3JEZWNsYXJhdGlvbiA9IG5ldyBHZW5lcmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsLCBnZW5lcmF0b3IpO1xuXG4gIHJldHVybiBnZW5lcmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLCAgLy8vXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXhEZWNsYXJhdGlvbiA9IG5ldyBUeXBlUHJlZml4RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0eXBlUHJlZml4KTtcblxuICByZXR1cm4gdHlwZVByZWZpeERlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb21iaW5hdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBjb21iaW5hdG9yKTtcblxuICByZXR1cm4gY29tYmluYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlID0gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZSA9IHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uID0gbmV3IFJlZmVyZW5jZVN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0YXJnZXRSZWZlcmVuY2UsIHJlcGxhY2VtZW50UmVmZXJlbmNlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgc29sdmVkID0gc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbiA9IG5ldyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc29sdmVkLCB0YXJnZXRTdGF0ZW1lbnQsIHJlcGxhY2VtZW50U3RhdGVtZW50KTtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnN0cnVjdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29uc3RydWN0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsLCBjb25zdHJ1Y3Rvcik7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YVR5cGUsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTmFtZSA9IHR5cGVOb2RlLmdldFR5cGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gcnVsZU5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gY2xhaW1Ob2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSBydWxlTm9kZS5nZXRMYWJlbE5vZGVzKCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gY2xhaW1Ob2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9vZk5vZGUgPSBzY2hlbWFOb2RlLmdldFByb29mTm9kZSgpLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVNjaGVtYU5vZGUoc2NoZW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbGFiZWxOb2RlID0gc2NoZW1hTm9kZS5nZXRMYWJlbE5vZGUoKSxcbiAgICAgICAgbGFiZWxTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhsYWJlbE5vZGUpLFxuICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21MYWJlbFN0cmluZyhsYWJlbFN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VOb2RlcyA9IHJ1bGVOb2RlLmdldFByZW1pc2VOb2RlcygpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYWltRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGF4aW9tID0gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZW1tYSA9IGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNsYWltID0gKGF4aW9tIHx8IGxlbW1hIHx8IHRoZW9yZW0gfHwgY29uamVjdHVyZSk7XG5cbiAgcmV0dXJuIGNsYWltO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGF4aW9tID0gbnVsbDtcblxuICBjb25zdCBheGlvbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRBeGlvbU5vZGUoKTtcblxuICBpZiAoYXhpb21Ob2RlICE9PSBudWxsKSB7XG4gICAgYXhpb20gPSBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsZW1tYSA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWFOb2RlID0gc2VjdGlvbk5vZGUuZ2V0TGVtbWFOb2RlKCk7XG5cbiAgaWYgKGxlbW1hTm9kZSAhPT0gbnVsbCkge1xuICAgIGxlbW1hID0gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eU5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RlcE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBzdGVwTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTm9kZSk7XG5cbiAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUGFyYW5ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gZ2VuZXJhdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUdlbmVyYXRvck5vZGUoZ2VuZXJhdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwZXJUeXBlcyA9IG51bGw7XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBudWxsO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4TmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHR5cGVOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgIHByZWZpeE5hbWUgPSB0eXBlUHJlZml4TmFtZTsgIC8vL1xuXG4gIHJldHVybiBwcmVmaXhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25jbHVzaW9uTm9kZSA9IHJ1bGVOb2RlLmdldENvbmNsdXNpb25Ob2RlKCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBjbGFpbU5vZGUuZ2V0RGVkdWN0aW9uTm9kZSgpLFxuICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVOb2RlID0gY2xhaW1Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRoZW9yZW0gPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW1Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0VGhlb3JlbU5vZGUoKTtcblxuICBpZiAodGhlb3JlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0aGVvcmVtID0gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBzaWduYXR1cmVOb2RlLmdldFRlcm1Ob2RlcygpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0eXBlUHJlZml4Tm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICBuYW1lID0gdHlwZVByZWZpeE5hbWU7ICAvLy9cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlKGNsYWltTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gW107XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZXJpdmF0aW9uTm9kZSA9IHByb29mTm9kZS5nZXREZXJpdmF0aW9uTm9kZSgpLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBzY2hlbWFOb2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZXF1YWxpdHlOb2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUob2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gb2Nuc3RydWN0b3JOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGVzID0gZnJhbWVOb2RlLmdldEFzc3VtcHRpb25Ob2RlcygpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gcHJlbWlzZU5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIGxlZnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShsZWZ0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsZWZ0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gZXF1aXZhbGVuY2VOb2RlLmdldFRlcm1Ob2RlcygpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSBtZXRhbWV0YXZhcmlhYmxlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVtTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZW1Ob2RlICE9PSBudWxsKSB7XG4gICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZW1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21DbGFpbU5vZGUoY2xhaW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBjbGFpbU5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZnJhbWVOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBsYWJlbE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RyYWludHNGcm9tU2NoZW1hTm9kZShzY2hlbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cmFpbnRzID0gW107XG5cbiAgcmV0dXJuIGNvbnN0cmFpbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uamVjdHVyZSA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRDb25qZWN0dXJlTm9kZSgpO1xuXG4gIGlmIChjb25qZWN0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmlnaHRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJpZ2h0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZXF1YWxpdHkgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RXF1YWxpdHlOb2RlKCk7XG5cbiAgaWYgKGVxdWFsaXR5Tm9kZSAhPT0gbnVsbCkge1xuICAgIGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZXF1YWxpdHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TY2hlbWFOb2RlKHNjaGVtYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IHNjaGVtYU5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBnZW5lcmF0b3JEZWNsYXJhdGlvbiA9IGdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVjbGFyYXRpb24gPSAoY29uc3RydWN0b3JEZWNsYXJhdGlvbiB8fCBnZW5lcmF0b3JEZWNsYXJhdGlvbik7XG5cbiAgcmV0dXJuIGRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICBpZGVudGlmaWVyID0gdmFyaWFibGVJZGVudGlmaWVyOyAgLy8vXG5cbiAgcmV0dXJuIGlkZW50aWZpZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJhbWV0ZXJOb2RlLmdldElkZW50aWZpZXIoKTtcblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGRlZHVjdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwID0gbnVsbDtcblxuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSA9IHN0ZXBPclN1YnByb29mTm9kZS5pc1N0ZXBOb2RlKCk7XG5cbiAgaWYgKHN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlKSB7XG4gICAgY29uc3Qgc3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGU7ICAvLy9cblxuICAgIHN0ZXAgPSBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gIHJldHVybiBub21pbmFsVHlwZU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlbWFBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNjaGVtYUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2NoZW1hQXNzZXJ0aW9uTm9kZSA9IHN0ZXBOb2RlLmdldFNjaGVtYUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2NoZW1hQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNjaGVtYUFzc2VydGlvbiA9IHNjaGVtYUFzc2VydGlvbkZyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNjaGVtYUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJhbWV0ZXJOb2RlLmdldElkZW50aWZpZXIoKTtcblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tR2VuZXJhdG9yTm9kZShnZW5lcmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBbXTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlc21lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZXNtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29tYmluYXRvck5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpbm9Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb25jbHVzaW5vTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Db25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlZmVyZW5jZU5vZGUgPSBjb25zdHJhaW50Tm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbnN0cmFpbnROb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IHByZW1pc2VOb2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc3VicHJvb2ZOb2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdXBwb3NpdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50OyAvLy9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2VsID0gbnVsbDtcblxuICByZXR1cm4gcmVmZXJlbmNlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUoc2NoZW1hQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBmcmFtZU5vZGUgPSBzY2hlbWFBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdWJEZXJpdmF0aW9uTm9kZSA9IHN1YnByb29mTm9kZS5nZXRTdWJEZXJpdmF0aW9uTm9kZSgpLFxuICAgICAgICBzdWJEZXJ2aWF0aW9uID0gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1YkRlcnZpYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lU3Vic3RpdHV0aW9uLCBUZXJtU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBGcmFtZVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IFRlcm1TdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IChmcmFtZVN1YnN0aXR1dGlvbiB8fCB0ZXJtU3Vic3RpdHV0aW9uKTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBbXTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gbWV0YXZhcmlhYmxlU3RyaW5nLCAvLy9cbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUeXBlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN1YnByb29mT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZS5pc1N1YnByb29mTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gaHlwb3RoZXNpc05vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyTm9kZXMgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gcHJvcGVydHlEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvY2VkdXJlQ2FsbCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbE5vZGUgPSBzdXBwb3NpdGlvbk5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TY2hlbWFBc3NlcnRpb25Ob2RlKHNjaGVtYUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHNjaGVtYUFzc2VydGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpLFxuICAgICAgICB0eXBlID0gYmFzZVR5cGU7ICAvLy9cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlKGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZGVmaW5lZEFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldERlZmluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGRlZmluZWRBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VwZXJUeXBlcyA9IFtdO1xuXG4gIGNvbnN0IHR5cGVzTm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZXNOb2RlKCk7XG5cbiAgaWYgKHR5cGVzTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCk7XG5cbiAgICBzdXBlclR5cGVzID0gdHlwZXM7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dCwgLy8vXG4gICAgICAgIHRhcmdldFRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGFyZ2V0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAocHJvcGVydHlBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHN1YnByb29mQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSB0eXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkgezBcbiAgbGV0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChjb250YWluZWRBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShzaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0b3JEZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZ2VuZXJhdG9yRGVjbGFyYXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSA9IHNlY3Rpb25Ob2RlLmdldEdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSgpO1xuXG4gIGlmIChnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBnZW5lcmF0b3JEZWNsYXJhdGlvbiA9IGdlbmVyYXRvckRlY2xhcmF0aW9uRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGdlbmVyYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gY290eXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVzTm9kZSgpO1xuXG4gIGlmICh0eXBlc05vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlcyA9IHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpO1xuXG4gICAgc3VwZXJUeXBlcyA9IHR5cGVzOyAvLy9cbiAgfVxuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVzbWVudE5vZGUgPSBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVzbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHNpZ25hdHVyZUFzc2VydGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eU5vZGUoKTtcblxuICBpZiAocHJvcGVydHlOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViamVjdFRlcm1Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFN1YmplY3RUZXJtTm9kZSgpLFxuICAgICAgICBzdWJqZWN0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUoc3ViamVjdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViamVjdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICB0YXJnZXRGcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIHRhcmdldEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHRhcmdldEZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldEZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlKGNvdHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGNvdHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBicmFja2V0ZWRDb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eVRlcm1Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFByb3BlcnR5VGVybU5vZGUoKSxcbiAgICAgICAgcHJvcGVydHlUZXJtID0gdGVybUZyb21UZXJtTm9kZShwcm9wZXJ0eVRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHlUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdG9yRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZ2VuZXJhdG9yTm9kZSA9IGdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRHZW5lcmF0b3JOb2RlKCksXG4gICAgICAgIGdlbmVyYXRvciA9IGdlbmVyYXRvckZyb21HZW5lcmF0b3JOb2RlKGdlbmVyYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBnZW5lcmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHNvbHZlZCA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuaXNTb2x2ZWQoKTtcblxuICByZXR1cm4gc29sdmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBbXTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vLy8vXG4gICAgICAgIHJlcGxhY2VtZW50VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFRlcm1Ob2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmVwbGFjZW1lbnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZShnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBnZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOb2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZS5nZXRUeXBlUHJlZml4Tm9kZSgpLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb21iaW5hdG9yTm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29tYmluYXRvck5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvciA9IGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhVHlwZU5hbWUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vL1xuICAgICAgICByZXBsYWNlbWVudEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudEZyYW1lTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHJlcGxhY2VtZW50RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmdldENvbnN0cnVjdG9yTm9kZSgpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICB0YXJnZXRSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHRhcmdldFJlZmVyZW5jZU5vZGUpLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyh0YXJnZXRSZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCkge1xuICBjb25zdCBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQsIC8vL1xuICAgICAgICB0YXJnZXRTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHRhcmdldFN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUoY290eXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMgPSBjb3R5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0UHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKCksXG4gICAgICAgIHByb3BlcnR5RGVjbGFyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKHByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eURlY2xhcmF0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50UmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUocmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zID0gdGVybU5vZGVzLm1hcCgodGVybU5vZGUpID0+IHtcbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZXMgPSB0eXBlc05vZGUuZ2V0VHlwZU5vZGVzKCksXG4gICAgICAgIHR5cGVzID0gdHlwZU5vZGVzLm1hcCgodHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBsYWJlbHMgPSBsYWJlbE5vZGVzLm1hcCgobGFiZWxOb2RlKSA9PiB7XG4gICAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbGFiZWxTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhsYWJlbE5vZGUpLFxuICAgICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUxhYmVsU3RyaW5nKGxhYmVsU3RyaW5nLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlbWlzZXMgPSBwcmVtaXNlTm9kZXMubWFwKChwcmVtaXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2UgPSBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWVudE5vZGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyTm9kZXMubWFwKChwYXJhbWV0ZXJOb2RlKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gaHlwb3RoZXNpc05vZGVzLm1hcCgoaHlwb3RoZXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXMgPSBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25Ob2Rlcy5tYXAoKGFzc3VtcHRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH0pO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25Ob2Rlcy5tYXAoKHN1cHBvc2l0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uID0gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBkZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBzdWJEZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eURlY2xyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbm5Ob2Rlcy5tYXAoKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHlEZWNsY2FyYXRpb24gPSBwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcm9wZXJ0eURlY2xjYXJhdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbHJhdGlvbnM7XG59XG4iXSwibmFtZXMiOlsiYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2RlcyIsImFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZSIsImF4aW9tRnJvbUF4aW9tTm9kZSIsImF4aW9tRnJvbVNlY3Rpb25Ob2RlIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsImJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsImNsYWltRnJvbVNlY3Rpb25Ob2RlIiwiY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlIiwiY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZSIsImNvbmNsdXNpb25Gcm9tUnVsZU5vZGUiLCJjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlIiwiY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZSIsImNvbnN0cmFpbnRGcm9tQ29uc3RyYWludE5vZGUiLCJjb25zdHJhaW50c0Zyb21TY2hlbWFOb2RlIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJjb3R5cGVEZWNsYXJhdGlvbkZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJkZWNsYXJhdGlvbkZyb21TZWN0aW9uTm9kZSIsImRlZHVjdGlvbkZyb21DbGFpbU5vZGUiLCJkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZSIsImRlZHVjdGlvbkZyb21TY2hlbWFOb2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUiLCJkZXJpdmF0aW9uRnJvbVByb29mTm9kZSIsImVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJmcmFtZUZyb21GcmFtZU5vZGUiLCJmcmFtZUZyb21TY2hlbWFBc3NlcnRpb25Ob2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwiZ2VuZXJhdG9yRGVjbGFyYXRpb25Gcm9tU2VjdGlvbk5vZGUiLCJnZW5lcmF0b3JGcm9tR2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwiZ2VuZXJhdG9yRnJvbUdlbmVyYXRvck5vZGUiLCJoeXBvdGhlc2VzRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsImh5cG90aGVzZXNGcm9tQ2xhaW1Ob2RlIiwiaHlwb3RoZXNlc0Zyb21Db25zdHJ1Y3Rvck5vZGUiLCJoeXBvdGhlc2VzRnJvbUdlbmVyYXRvck5vZGUiLCJoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyIsImh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUiLCJpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVBhcmFtdGVyTm9kZSIsImlkZW50aWZpZXJGcm9tVmFyaWFibGVOb2RlIiwiaW1wbGljaXRBc3N1bXB0aW9uRnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJsYWJlbEZyb21MYWJlbE5vZGUiLCJsYWJlbEZyb21TY2hlbWFOb2RlIiwibGFiZWxzRnJvbUNsYWltTm9kZSIsImxhYmVsc0Zyb21MYWJlbE5vZGVzIiwibGFiZWxzRnJvbVJ1bGVOb2RlIiwibGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwibGVtbWFGcm9tTGVtbWFOb2RlIiwibGVtbWFGcm9tU2VjdGlvbk5vZGUiLCJtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUiLCJuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJuYW1lRnJvbVBhcmFtdGVyTm9kZSIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsIm5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVR5cGVQcmVmaXhOb2RlIiwibmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwibmVnYXRlZEZyb21FcXVhbGl0eU5vZGUiLCJuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIm5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSIsInBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyIsInBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcmVmaXhOYW1lRnJvbVR5cGVOb2RlIiwicHJlbWlzZUZyb21QcmVtaXNlTm9kZSIsInByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyIsInByZW1pc2VzRnJvbVJ1bGVOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21IeXBvdGhlc2lzTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21TdGVwTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9vZkZyb21DbGFpbU5vZGUiLCJwcm9vZkZyb21Qcm9vZk5vZGUiLCJwcm9vZkZyb21SdWxlTm9kZSIsInByb29mRnJvbVNjaGVtYU5vZGUiLCJwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25Gcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbUNvdHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVRlcm1Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVR5cGVOb2RlIiwicHJvdmlzaW9uYWxGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21WYXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tQ29uc3RyYWludE5vZGUiLCJyZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZUZyb21QcmVtaXNlTm9kZSIsInJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlRnJvbVNjaGVtYUFzc2VydGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInJlZmVyZW5jZUZyb21TdXBwb3NpdGlvbk5vZGUiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25Gcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwicnVsZUZyb21SdWxlTm9kZSIsInNjaGVtYUFzc2VydGlvbkZyb21TY2hlbWFBc3NlcnRpb25Ob2RlIiwic2NoZW1hQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlIiwic2NoZW1hRnJvbVNjaGVtYU5vZGUiLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGVwTm9kZSIsInNpZ25hdHVyZUZyb21DbGFpbU5vZGUiLCJzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZSIsInNvbHZlZEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlIiwic3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwic3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlIiwic3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlIiwic3RhdGVtZW50RnJvbUNvbnN0cmFpbnROb2RlIiwic3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZSIsInN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZSIsInN0YXRlbWVudEZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwic3RhdGVtZW50RnJvbVByZW1pc2VOb2RlIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RlcE5vZGUiLCJzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzIiwic3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJzdGVwRnJvbVN0ZXBOb2RlIiwic3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlIiwic3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZSIsInN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUiLCJzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUiLCJzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1cGVyVHlwZXNGcm9tQ290eXBlRGVjbGFyYXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21UeXBlTm9kZSIsInN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21DbGFpbU5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU2NoZW1hTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyIsInRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJ0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZSIsInRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbUdlbmVyYXRvck5vZGUiLCJ0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZSIsInRlcm1Gcm9tUHJvcGVydHlOb2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlIiwidGVybXNGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInRlcm1zRnJvbVNpZ25hdHVyZU5vZGUiLCJ0ZXJtc0Zyb21UZXJtTm9kZXMiLCJ0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlIiwidGhlb3JlbUZyb21UaGVvcmVtTm9kZSIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRGVjbGFyYXRpb25Gcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwidHlwZUZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JOb2RlIiwidHlwZUZyb21Db3R5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUdlbmVyYXRvckRlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tR2VuZXJhdG9yTm9kZSIsInR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsInR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVByb3BlcnR5Tm9kZSIsInR5cGVGcm9tVGVybU5vZGUiLCJ0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21UeXBlTm9kZSIsInR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlTm9kZSIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwidHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwidHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVzRnJvbVR5cGVzTm9kZSIsInZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21UZXJtTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZU5vZGUiLCJjb250ZXh0IiwidHlwZSIsImJhc2VUeXBlIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsIlR5cGUiLCJlbGVtZW50cyIsIm5vZGUiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJzdHJpbmciLCJicmVha1BvaW50IiwidGVybU5vZGUiLCJUZXJtIiwibm9kZUFzU3RyaW5nIiwidGVybSIsInN0ZXBOb2RlIiwiU3RlcCIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInByb2NlZHVyZUNhbGwiLCJzY2hlbWFBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb24iLCJzdGVwIiwicnVsZU5vZGUiLCJSdWxlIiwicHJvb2YiLCJsYWJlbHMiLCJwcmVtaXNlcyIsImNvbmNsdXNpb24iLCJydWxlU3RyaW5nIiwicnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24iLCJydWxlIiwibGFiZWxOb2RlIiwiTGFiZWwiLCJtZXRhdmFyaWFibGUiLCJsYWJlbCIsImVycm9yTm9kZSIsIkVycm9yIiwiZXJyb3IiLCJsZW1tYU5vZGUiLCJMZW1tYSIsImNsYWltTm9kZSIsImRlZHVjdGlvbiIsInN1cHBvc2l0aW9ucyIsInNpZ25hdHVyZSIsImh5cG90aGVzZXMiLCJjbGFpbVN0cmluZyIsImNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImxlbW1hIiwiZnJhbWVOb2RlIiwiRnJhbWUiLCJhc3N1bXB0aW9ucyIsImZyYW1lIiwicHJvb2ZOb2RlIiwiUHJvb2YiLCJkZXJpdmF0aW9uIiwiYXhpb21Ob2RlIiwiQXhpb20iLCJheGlvbSIsInNjaGVtYU5vZGUiLCJTY2hlbWEiLCJjb25zdHJhaW50cyIsInNjaGVtYVN0cmluZyIsInNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInNjaGVtYSIsInNlY3Rpb25Ob2RlIiwiU2VjdGlvbiIsImh5cG90aGVzaXNOb2RlcyIsImdldEh5cG90aGVzaXNOb2RlcyIsImRlY2xhcmF0aW9uIiwiY2xhaW0iLCJzZWN0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzRGVjbGFyYXRpb25BbmRDbGFpbSIsInNlY3Rpb24iLCJwcmVtaXNlTm9kZSIsIlByZW1pc2UiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwidGhlb3JlbSIsInByb3BlcnR5Tm9kZSIsInByb3BlcnR5IiwiUHJvcGVydHkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsInN1YnByb29mTm9kZSIsIlN1YnByb29mIiwic3ViRGVyaXZhdGlvbiIsInN1YnByb29mU3RyaW5nIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1YnByb29mIiwiZXF1YWxpdHlOb2RlIiwiRXF1YWxpdHkiLCJuZWdhdGVkIiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJlcXVhbGl0eSIsImRlZHVjdGlvbk5vZGUiLCJEZWR1Y3Rpb24iLCJzdGF0ZW1lbnROb2RlIiwiU3RhdGVtZW50Iiwic3Vic3RpdHV0aW9uIiwic2lnbmF0dXJlTm9kZSIsIlNpZ25hdHVyZSIsInRlcm1zIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJnZW5lcmF0b3JOb2RlIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiaHlwb3RoZXNlTm9kZSIsIkh5cG90aGVzaXMiLCJoeXBvaHRlc2lzIiwiY29uc3RyYWludE5vZGUiLCJDb25zdHJhaW50IiwiY29uc3RyYWludCIsImNvbmplY3R1cmVOb2RlIiwiQ29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJjb21iaW5hdG9yTm9kZSIsIkNvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY29uY2x1c2lvbk5vZGUiLCJDb25jbHVzaW9uIiwiZGVyaXZhdGlvbk5vZGUiLCJEZXJpdmF0aW9uIiwic3RlcHNPclN1YnByb29mcyIsInR5cGVQcmVmaXhOb2RlIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJhc3N1bXB0aW9uIiwiY29uc3RydWN0b3JOb2RlIiwiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsInN1cHBvc2l0aW9uTm9kZSIsIlN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb24iLCJlcXVpdmFsZW5jZU5vZGUiLCJFcXVpdmFsZW5jZSIsImVxdWl2YWxlbmNlU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMiLCJlcXVpdmFsZW5jZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhVHlwZSIsInByb2NlZHVyZUNhbGxOb2RlIiwiUHJvY2VkdXJlQ2FsbCIsInBhcmFtZXRlcnMiLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVDYWxsU3RyaW5nIiwicHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzIiwic3ViRGVyaXZhdGlvbk5vZGUiLCJTdWJEZXJpdmF0aW9uIiwidHlwZUFzc2VydGlvbk5vZGUiLCJUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mIiwidHlwZURlY2xhcmF0aW9uTm9kZSIsIlR5cGVEZWNsYXJhdGlvbiIsInR5cGVEZWNsYXJhdGlvbiIsInNjaGVtYUFzc2VydGlvbk5vZGUiLCJTY2hlbWFBc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIkRlZmluZWRBc3NlcnRpb24iLCJpc05lZ2F0ZWQiLCJkZWZpbmVkQXNzZXJ0aW9uIiwidGVybVN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsIlRlcm1TdWJzdGl0dXRpb24iLCJjb250ZXh0cyIsInRhcmdldFRlcm0iLCJyZXBsYWNlbWVudFRlcm0iLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJ0YXJnZXRGcmFtZSIsInJlcGxhY2VtZW50RnJhbWUiLCJmcmFtZVN1YnN0aXR1dGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsIlByb3BlcnR5QXNzZXJ0aW9uIiwic3ViamVjdFRlcm0iLCJwcm9wZXJ0eVRlcm0iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50cyIsInN1YnByb29mQXNzZXJ0aW9uIiwiY290eXBlRGVjbGFyYXRpb25Ob2RlIiwiQ290eXBlRGVjbGFyYXRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9ucyIsImNvdHlwZURlY2xhcmF0aW9uU3RyaW5nIiwiY290eXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCIsImNvdHlwZURlY2xhcmF0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIkNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJTaWduYXR1cmVBc3NlcnRpb24iLCJwcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwiUHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlZW5jZSIsImltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJJbXBsaWNpdEFzc3VtcHRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsIlByb3BlcnR5RGVjbGFyYXRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsImJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwiQnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwiZ2VuZXJhdG9yRGVjbGFyYXRpb25Ob2RlIiwiR2VuZXJhdG9yRGVjbGFyYXRpb24iLCJnZW5lcmF0b3JEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJUeXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29tYmluYXRvckRlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIlJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInRhcmdldFJlZmVyZW5jZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInNvbHZlZCIsInRhcmdldFN0YXRlbWVudCIsInJlcGxhY2VtZW50U3RhdGVtZW50Iiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIk1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwiZ2V0UHJvb2ZOb2RlIiwibGFiZWxOb2RlcyIsImdldExhYmVsTm9kZXMiLCJnZXRMYWJlbE5vZGUiLCJsYWJlbFN0cmluZyIsImZyb21MYWJlbFN0cmluZyIsImdldFZhcmlhYmxlTm9kZSIsInByZW1pc2VOb2RlcyIsImdldFByZW1pc2VOb2RlcyIsImdldEF4aW9tTm9kZSIsImdldExlbW1hTm9kZSIsImdldFRlcm1Ob2RlIiwiZ2V0TmFtZSIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlU3RyaW5nIiwiZnJvbVJlZmVyZW5jZVN0cmluZyIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldERlZHVjdGlvbk5vZGUiLCJnZXRTaWduYXR1cmVOb2RlIiwiZ2V0VGhlb3JlbU5vZGUiLCJ0ZXJtTm9kZXMiLCJnZXRUZXJtTm9kZXMiLCJnZXREZXJpdmF0aW9uTm9kZSIsIm9jbnN0cnVjdG9yTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImdldEFzc3VtcHRpb25Ob2RlcyIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsIm1ldGFtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsInR5cGVtTm9kZSIsImdldFR5cGVOb2RlIiwic3VwcG9zaXRpb25Ob2RlcyIsImdldFN1cHBvc2l0aW9uTm9kZXMiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwiZ2V0Q29uamVjdHVyZU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsImdldEVxdWFsaXR5Tm9kZSIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImdldElkZW50aWZpZXIiLCJzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSIsImlzU3RlcE5vZGUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJnZXRTY2hlbWFBc3NlcnRpb25Ob2RlIiwic3RhdGVzbWVudE5vZGUiLCJjb25jbHVzaW5vTm9kZSIsImh5cG90aGVzaXNOb2RlIiwiZ2V0UHJvY2VkdXJlQ2FsbE5vZGUiLCJyZWZlcmVuY2VsIiwiZ2V0RnJhbWVOb2RlIiwiZ2V0U3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJ2aWF0aW9uIiwiZnJvbVN0YXRlbWVudE5vZGUiLCJtZXRhdmFyaWFibGVTdHJpbmciLCJnZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSIsImlzU3VicHJvb2ZOb2RlIiwicGFyYW1ldGVyTm9kZXMiLCJnZXRQYXJhbWV0ZXJOb2RlcyIsImJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSIsImdldERlZmluZWRBc3NlcnRpb25Ob2RlIiwidHlwZXNOb2RlIiwiZ2V0VHlwZXNOb2RlIiwidHlwZXMiLCJ0YXJnZXRUZXJtTm9kZSIsImdldFRhcmdldFRlcm1Ob2RlIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiaXNQcm92aXNpb25hbCIsImdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJnZXRHZW5lcmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJzdGF0ZW1lbnROb2RlcyIsImdldFN0YXRlbWVudE5vZGVzIiwiZ2V0UHJvcGVydHlOb2RlIiwic3ViamVjdFRlcm1Ob2RlIiwiZ2V0U3ViamVjdFRlcm1Ob2RlIiwidGFyZ2V0RnJhbWVOb2RlIiwiZ2V0VGFyZ2V0RnJhbWVOb2RlIiwiZ2V0Q29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eVRlcm1Ob2RlIiwiZ2V0UHJvcGVydHlUZXJtTm9kZSIsImdldEdlbmVyYXRvck5vZGUiLCJpc1NvbHZlZCIsImdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJyZXBsYWNlbWVudFRlcm1Ob2RlIiwiZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSIsImdldFR5cGVQcmVmaXhOb2RlIiwiZ2V0Q29tYmluYXRvck5vZGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsInJlcGxhY2VtZW50RnJhbWVOb2RlIiwiZ2V0UmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJnZXRDb25zdHJ1Y3Rvck5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VOb2RlIiwiZ2V0VGFyZ2V0UmVmZXJlbmNlTm9kZSIsInRhcmdldFJlZmVyZW5jZVN0cmluZyIsInRhcmdldFN0YXRlbWVudE5vZGUiLCJnZXRUYXJnZXRTdGF0ZW1lbnROb2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcyIsImdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsInJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsImdldFJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwibWFwIiwidHlwZU5vZGVzIiwiZ2V0VHlwZU5vZGVzIiwiaHlwb3RoZXNpcyIsInN0ZXBPclN1YnByb29mTm9kZXMiLCJnZXRTdGVwT3JTdWJwcm9vZk5vZGVzIiwicHJvcGVydHlEZWNscmF0aW9ucyIsInByb3BlcnR5RGVjbGNhcmF0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUF1ZmdCQTtlQUFBQTs7UUE2d0RBQztlQUFBQTs7UUF2L0JBQztlQUFBQTs7UUFybUNBQztlQUFBQTs7UUE0NEJBQztlQUFBQTs7UUF0T0FDO2VBQUFBOztRQVdBQztlQUFBQTs7UUFpTkFDO2VBQUFBOztRQXRLQUM7ZUFBQUE7O1FBa3VDQUM7ZUFBQUE7O1FBcHFEQUM7ZUFBQUE7O1FBY0FDO2VBQUFBOztRQXN0QkFDO2VBQUFBOztRQXp2QkFDO2VBQUFBOztRQTQ4QkFDO2VBQUFBOztRQXg5QkFDO2VBQUFBOztRQWs5QkFDO2VBQUFBOztRQTliQUM7ZUFBQUE7O1FBeW1DQUM7ZUFBQUE7O1FBOEZBQztlQUFBQTs7UUF0bkRBQztlQUFBQTs7UUFpUEFDO2VBQUFBOztRQTBxQ0FDO2VBQUFBOztRQTVyQ0FDO2VBQUFBOztRQXdzQkFDO2VBQUFBOztRQWhRQUM7ZUFBQUE7O1FBejJCQUM7ZUFBQUE7O1FBKzZCQUM7ZUFBQUE7O1FBNWxCQUM7ZUFBQUE7O1FBNnJDQUM7ZUFBQUE7O1FBejNDQUM7ZUFBQUE7O1FBaXhCQUM7ZUFBQUE7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