occam-verify-cli 1.0.824 → 1.0.826

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.
Files changed (115) hide show
  1. package/lib/context/file/nominal.js +26 -22
  2. package/lib/element/assertion/contained.js +9 -5
  3. package/lib/element/assertion/property.js +9 -5
  4. package/lib/element/assertion/satisfies.js +9 -5
  5. package/lib/element/assertion/subproof.js +9 -5
  6. package/lib/element/assertion/type.js +9 -9
  7. package/lib/element/assertion.js +4 -3
  8. package/lib/element/assumption.js +7 -6
  9. package/lib/element/combinator.js +8 -7
  10. package/lib/element/conclusion.js +8 -7
  11. package/lib/element/constructor.js +7 -6
  12. package/lib/element/declaration/combinator.js +3 -3
  13. package/lib/element/declaration/complexType.js +3 -3
  14. package/lib/element/declaration/constructor.js +3 -3
  15. package/lib/element/declaration/metavariable.js +3 -3
  16. package/lib/element/declaration/simpleType.js +3 -3
  17. package/lib/element/declaration/typePrefix.js +3 -3
  18. package/lib/element/declaration/variable.js +3 -3
  19. package/lib/element/deduction.js +8 -7
  20. package/lib/element/derivation.js +10 -3
  21. package/lib/element/equality.js +8 -7
  22. package/lib/element/equivalence.js +10 -3
  23. package/lib/element/error.js +8 -1
  24. package/lib/element/frame.js +8 -7
  25. package/lib/element/hypothesis.js +8 -7
  26. package/lib/element/judgement.js +8 -7
  27. package/lib/element/label.js +8 -7
  28. package/lib/element/metaType.js +7 -6
  29. package/lib/element/metavariable.js +6 -5
  30. package/lib/element/parameter.js +8 -7
  31. package/lib/element/procedureCall.js +8 -7
  32. package/lib/element/procedureReference.js +8 -7
  33. package/lib/element/proof.js +10 -3
  34. package/lib/element/proofAssertion.js +3 -3
  35. package/lib/element/property.js +7 -6
  36. package/lib/element/propertyRelation.js +8 -7
  37. package/lib/element/reference.js +8 -7
  38. package/lib/element/rule.js +6 -6
  39. package/lib/element/section.js +10 -3
  40. package/lib/element/signature.js +7 -6
  41. package/lib/element/statement.js +6 -5
  42. package/lib/element/subDerivation.js +10 -3
  43. package/lib/element/subproof.js +10 -3
  44. package/lib/element/substitution/frame.js +5 -5
  45. package/lib/element/substitution/reference.js +5 -5
  46. package/lib/element/substitution/statement.js +5 -5
  47. package/lib/element/substitution/term.js +5 -5
  48. package/lib/element/substitution.js +6 -5
  49. package/lib/element/term.js +7 -6
  50. package/lib/element/topLevelAssertion.js +7 -5
  51. package/lib/element/topLevelMetaAssertion.js +7 -5
  52. package/lib/element/type.js +9 -8
  53. package/lib/element/typePrefix.js +8 -7
  54. package/lib/element/variable.js +7 -6
  55. package/lib/utilities/element.js +101 -113
  56. package/lib/utilities/json.js +89 -1
  57. package/package.json +4 -4
  58. package/src/context/file/nominal.js +39 -24
  59. package/src/element/assertion/contained.js +10 -4
  60. package/src/element/assertion/property.js +10 -4
  61. package/src/element/assertion/satisfies.js +10 -4
  62. package/src/element/assertion/subproof.js +10 -4
  63. package/src/element/assertion/type.js +13 -15
  64. package/src/element/assertion.js +3 -1
  65. package/src/element/assumption.js +7 -5
  66. package/src/element/combinator.js +7 -5
  67. package/src/element/conclusion.js +7 -5
  68. package/src/element/constructor.js +6 -4
  69. package/src/element/declaration/combinator.js +2 -2
  70. package/src/element/declaration/complexType.js +2 -2
  71. package/src/element/declaration/constructor.js +2 -2
  72. package/src/element/declaration/metavariable.js +2 -2
  73. package/src/element/declaration/simpleType.js +2 -2
  74. package/src/element/declaration/typePrefix.js +2 -2
  75. package/src/element/declaration/variable.js +2 -2
  76. package/src/element/deduction.js +7 -5
  77. package/src/element/derivation.js +13 -2
  78. package/src/element/equality.js +7 -5
  79. package/src/element/equivalence.js +13 -2
  80. package/src/element/error.js +11 -0
  81. package/src/element/frame.js +7 -5
  82. package/src/element/hypothesis.js +7 -5
  83. package/src/element/judgement.js +7 -5
  84. package/src/element/label.js +7 -5
  85. package/src/element/metaType.js +7 -4
  86. package/src/element/metavariable.js +6 -4
  87. package/src/element/parameter.js +7 -5
  88. package/src/element/procedureCall.js +7 -5
  89. package/src/element/procedureReference.js +7 -5
  90. package/src/element/proof.js +13 -2
  91. package/src/element/proofAssertion.js +2 -2
  92. package/src/element/property.js +6 -4
  93. package/src/element/propertyRelation.js +7 -5
  94. package/src/element/reference.js +7 -5
  95. package/src/element/rule.js +8 -8
  96. package/src/element/section.js +13 -2
  97. package/src/element/signature.js +7 -5
  98. package/src/element/statement.js +5 -3
  99. package/src/element/subDerivation.js +13 -2
  100. package/src/element/subproof.js +13 -2
  101. package/src/element/substitution/frame.js +4 -4
  102. package/src/element/substitution/reference.js +4 -4
  103. package/src/element/substitution/statement.js +4 -4
  104. package/src/element/substitution/term.js +4 -4
  105. package/src/element/substitution.js +5 -3
  106. package/src/element/term.js +6 -4
  107. package/src/element/topLevelAssertion.js +9 -4
  108. package/src/element/topLevelMetaAssertion.js +9 -4
  109. package/src/element/type.js +8 -5
  110. package/src/element/typePrefix.js +7 -5
  111. package/src/element/variable.js +6 -4
  112. package/src/utilities/element.js +195 -154
  113. package/src/utilities/json.js +104 -0
  114. package/lib/process/initialise.js +0 -57
  115. package/src/process/initialise.js +0 -72
@@ -636,216 +636,180 @@ function typeFromTypeNode(typeNode, context) {
636
636
  const baseType = (0, _type.baseTypeFromNothing)();
637
637
  type = baseType; ///
638
638
  } else {
639
- const { Type } = _elements.default, node = typeNode, name = nameFromTypeNode(typeNode, context), prefixName = prefixNameFromTypeNode(typeNode, context), superTypes = superTypesFromTypeNode(typeNode, context), properties = propertiesFromTypeNode(typeNode, context), provisional = provisionalFromTypeNode(typeNode, context), nominalTypeName = nominalTypeNameFromTypeNode(typeNode, context), typeString = (0, _string.typeStringFromNominalTypeName)(nominalTypeName), string = typeString; ///
639
+ const { Type } = _elements.default, node = typeNode, name = nameFromTypeNode(typeNode, context), prefixName = prefixNameFromTypeNode(typeNode, context), superTypes = superTypesFromTypeNode(typeNode, context), properties = propertiesFromTypeNode(typeNode, context), provisional = provisionalFromTypeNode(typeNode, context), nominalTypeName = nominalTypeNameFromTypeNode(typeNode, context), typeString = (0, _string.typeStringFromNominalTypeName)(nominalTypeName), string = typeString, lineIndex = null;
640
640
  context = null;
641
- type = new Type(context, string, node, name, prefixName, superTypes, properties, provisional);
641
+ type = new Type(context, string, node, lineIndex, prefixName, superTypes, properties, provisional);
642
642
  }
643
643
  return type;
644
644
  }
645
645
  function termFromTermNode(termNode, context) {
646
- const { Term } = _elements.default, node = termNode, string = context.nodeAsString(node), type = typeFromTermNode(termNode, context);
646
+ const { Term } = _elements.default, node = termNode, string = context.nodeAsString(node), lineIndex = null, type = typeFromTermNode(termNode, context);
647
647
  context = null;
648
- const term = new Term(context, string, node, type);
648
+ const term = new Term(context, string, node, lineIndex, type);
649
649
  return term;
650
650
  }
651
651
  function stepFromStepNode(stepNode, context) {
652
- const { Step } = _elements.default, node = stepNode, string = context.nodeAsString(node), statement = statementFromStepNode(stepNode, context), reference = referenceFromStepNode(stepNode, context), satisfiesAssertion = satisfiesAssertionFromStepNode(stepNode, context);
652
+ const { Step } = _elements.default, node = stepNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromStepNode(stepNode, context), reference = referenceFromStepNode(stepNode, context), satisfiesAssertion = satisfiesAssertionFromStepNode(stepNode, context);
653
653
  context = null;
654
- const step = new Step(context, string, node, statement, reference, satisfiesAssertion);
654
+ const step = new Step(context, string, node, lineIndex, statement, reference, satisfiesAssertion);
655
655
  return step;
656
656
  }
657
657
  function ruleFromRuleNode(ruleNode, context) {
658
- const { Rule } = _elements.default, proof = proofFromRuleNode(ruleNode, context), labels = labelsFromRuleNode(ruleNode, context), premises = premisesFromRuleNode(ruleNode, context), conclusion = conclusionFromRuleNode(ruleNode, context), ruleString = (0, _string.rulsStringFromLabelsPremisesAndConclusion)(labels, premises, conclusion), node = ruleNode, string = ruleString, rule = new Rule(context, string, node, proof, labels, premises, conclusion);
658
+ const { Rule } = _elements.default, proof = proofFromRuleNode(ruleNode, context), labels = labelsFromRuleNode(ruleNode, context), premises = premisesFromRuleNode(ruleNode, context), conclusion = conclusionFromRuleNode(ruleNode, context), ruleString = (0, _string.rulsStringFromLabelsPremisesAndConclusion)(labels, premises, conclusion), node = ruleNode, string = ruleString, lineIndex = null, rule = new Rule(context, string, node, lineIndex, proof, labels, premises, conclusion);
659
659
  return rule;
660
660
  }
661
661
  function labelFromLabelNode(labelNode, context) {
662
- const { Label } = _elements.default, node = labelNode, string = context.nodeAsString(node), metavariable = metavariableFromLabelNode(labelNode, context), label = new Label(context, string, node, metavariable);
662
+ const { Label } = _elements.default, node = labelNode, string = context.nodeAsString(node), lineIndex = null, metavariable = metavariableFromLabelNode(labelNode, context), label = new Label(context, string, node, lineIndex, metavariable);
663
663
  return label;
664
664
  }
665
665
  function errorFromErrorNode(errorNode, context) {
666
- const { Error } = _elements.default, node = errorNode, string = context.nodeAsString(node), error = new Error(context, string, node);
666
+ const { Error } = _elements.default, node = errorNode, string = context.nodeAsString(node), lineIndex = null, error = new Error(context, string, node, lineIndex);
667
667
  return error;
668
668
  }
669
669
  function lemmaFromLemmaNode(lemmaNode, context) {
670
- const { Lemma } = _elements.default, topLevelAsssertionNode = lemmaNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = hypothesesFromTopLevelAssertionNode(topLevelAsssertionNode, context), topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = lemmaNode, string = topLevelAsssertionString, lemma = new Lemma(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
670
+ const { Lemma } = _elements.default, topLevelAsssertionNode = lemmaNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = hypothesesFromTopLevelAssertionNode(topLevelAsssertionNode, context), topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = lemmaNode, string = topLevelAsssertionString, lineIndex = null, lemma = new Lemma(context, string, node, lineIndex, labels, suppositions, deduction, proof, signature, hypotheses);
671
671
  return lemma;
672
672
  }
673
673
  function frameFromFrameNode(frameNode, context) {
674
- const { Frame } = _elements.default, node = frameNode, string = context.nodeAsString(node), assumptions = assumptionsFromFrameNode(frameNode, context), metavariable = metavariableFromFrameNode(frameNode, context);
675
- context = null;
676
- const frame = new Frame(context, string, node, assumptions, metavariable);
674
+ const { Frame } = _elements.default, node = frameNode, string = context.nodeAsString(node), lineIndex = null, assumptions = assumptionsFromFrameNode(frameNode, context), metavariable = metavariableFromFrameNode(frameNode, context), frame = new Frame(context, string, node, lineIndex, assumptions, metavariable);
677
675
  return frame;
678
676
  }
679
677
  function proofFromProofNode(proofNode, context) {
680
- const { Proof } = _elements.default, node = proofNode, string = null, derivation = derivationFromProofNode(proofNode, context);
681
- context = null;
682
- const proof = new Proof(context, string, node, derivation);
678
+ const { Proof } = _elements.default, node = proofNode, string = null, lineIndex = null, derivation = derivationFromProofNode(proofNode, context), proof = new Proof(context, string, node, lineIndex, derivation);
683
679
  return proof;
684
680
  }
685
681
  function axiomFromAxiomNode(axiomNode, context) {
686
- const { Axiom } = _elements.default, topLevelAsssertionNode = axiomNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = [], topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = axiomNode, string = topLevelAsssertionString, axiom = new Axiom(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
682
+ const { Axiom } = _elements.default, topLevelAsssertionNode = axiomNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = [], topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = axiomNode, string = topLevelAsssertionString, lineIndex = null, axiom = new Axiom(context, string, node, lineIndex, labels, suppositions, deduction, proof, signature, hypotheses);
687
683
  return axiom;
688
684
  }
689
685
  function sectionFromSectionNode(sectionNode, context) {
690
- const hypothesisNodes = sectionNode.getHypothesisNodes(), hypotheses = hypothesesFromHypothesisNodes(hypothesisNodes, context), axiom = axiomFromSectionNode(sectionNode, context), lemma = lemmaFromSectionNode(sectionNode, context), theorem = theoremFromSectionNode(sectionNode, context), conjecture = conjectureFromSectionNode(sectionNode, context), sectionString = (0, _string.sectionStringFromHypothesesTopLevelAssertion)(hypotheses, axiom, lemma, theorem, conjecture), node = sectionNode, string = sectionString; ///
691
- context = null;
692
- const section = new Section(context, string, node, hypotheses, axiom, lemma, theorem, conjecture);
686
+ const hypothesisNodes = sectionNode.getHypothesisNodes(), hypotheses = hypothesesFromHypothesisNodes(hypothesisNodes, context), axiom = axiomFromSectionNode(sectionNode, context), lemma = lemmaFromSectionNode(sectionNode, context), theorem = theoremFromSectionNode(sectionNode, context), conjecture = conjectureFromSectionNode(sectionNode, context), sectionString = (0, _string.sectionStringFromHypothesesTopLevelAssertion)(hypotheses, axiom, lemma, theorem, conjecture), node = sectionNode, string = sectionString, lineIndex = null, section = new Section(context, string, node, lineIndex, hypotheses, axiom, lemma, theorem, conjecture);
693
687
  return section;
694
688
  }
695
689
  function premiseFromPremiseNode(premiseNode, context) {
696
- const { Premise } = _elements.default, node = premiseNode, string = context.nodeAsString(node), statement = statementFromPremiseNode(premiseNode, context), procedureCall = procedureCallFromPremiseNode(premiseNode, context);
697
- context = null;
698
- const premise = new Premise(context, string, node, statement, procedureCall);
690
+ const { Premise } = _elements.default, node = premiseNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromPremiseNode(premiseNode, context), procedureCall = procedureCallFromPremiseNode(premiseNode, context), premise = new Premise(context, string, node, lineIndex, statement, procedureCall);
699
691
  return premise;
700
692
  }
701
693
  function theoremFromTheoremNode(theoremNode, context) {
702
- const { Theorem } = _elements.default, topLevelAsssertionNode = theoremNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = [], topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = theoremNode, string = topLevelAsssertionString, theorem = new Theorem(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
694
+ const { Theorem } = _elements.default, topLevelAsssertionNode = theoremNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = [], topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = theoremNode, string = topLevelAsssertionString, lineIndex = null, theorem = new Theorem(context, string, node, lineIndex, labels, suppositions, deduction, proof, signature, hypotheses);
703
695
  return theorem;
704
696
  }
705
697
  function propertyFromPropertyNode(propertyNode, context) {
706
- const { Property } = _elements.default, node = propertyNode, string = context.nodeAsString(node), propertyName = propertyNode.getPropertyName(), nominalTypeName = null, name = propertyName; ///
707
- context = null;
708
- const property = new Property(context, string, node, name, nominalTypeName);
698
+ const { Property } = _elements.default, node = propertyNode, string = context.nodeAsString(node), lineIndex = null, propertyName = propertyNode.getPropertyName(), nominalTypeName = null, name = propertyName, property = new Property(context, string, node, lineIndex, name, nominalTypeName);
709
699
  return property;
710
700
  }
711
701
  function variableFromVariableNode(variableNode, context) {
712
- const { Variable } = _elements.default, node = variableNode, string = context.nodeAsString(node), type = null, identifier = identifierFromVarialbeNode(variableNode, context), propertyRelations = [];
713
- context = null;
714
- const variable = new Variable(context, string, node, type, identifier, propertyRelations);
702
+ const { Variable } = _elements.default, node = variableNode, string = context.nodeAsString(node), lineIndex = null, type = null, identifier = identifierFromVarialbeNode(variableNode, context), propertyRelations = [], variable = new Variable(context, string, node, lineIndex, type, identifier, propertyRelations);
715
703
  return variable;
716
704
  }
717
705
  function subproofFromSubproofNode(subproofNode, context) {
718
- const { Subproof } = _elements.default, node = subproofNode, suppositions = suppositionsFromSubproofNode(subproofNode, context), subDerivation = subDerivationFromSubproofNode(subproofNode, context), subproofString = (0, _string.subproofStringFromSuppositionsAndSubDerivation)(suppositions, subDerivation, context), string = subproofString; ///
719
- context = null;
720
- const subproof = new Subproof(context, string, node, suppositions, subDerivation);
706
+ const { Subproof } = _elements.default, node = subproofNode, suppositions = suppositionsFromSubproofNode(subproofNode, context), subDerivation = subDerivationFromSubproofNode(subproofNode, context), subproofString = (0, _string.subproofStringFromSuppositionsAndSubDerivation)(suppositions, subDerivation, context), string = subproofString, lineIndex = null, subproof = new Subproof(context, string, node, lineIndex, suppositions, subDerivation);
721
707
  return subproof;
722
708
  }
723
709
  function equalityFromEqualityNode(equalityNode, context) {
724
- const { Equality } = _elements.default, node = equalityNode, string = context.nodeAsString(node), leftTerm = leftTermFromEqualityNode(equalityNode, context), rightTerm = rightTermFromEqualityNode(equalityNode, context);
725
- context = null;
726
- const equality = new Equality(context, string, node, leftTerm, rightTerm);
710
+ const { Equality } = _elements.default, node = equalityNode, string = context.nodeAsString(node), lineIndex = null, leftTerm = leftTermFromEqualityNode(equalityNode, context), rightTerm = rightTermFromEqualityNode(equalityNode, context), equality = new Equality(context, string, node, lineIndex, leftTerm, rightTerm);
727
711
  return equality;
728
712
  }
729
713
  function deductionFromDeductionNode(deductionNode, context) {
730
- const { Deduction } = _elements.default, node = deductionNode, string = context.nodeAsString(node), statement = statementFromDeductionNode(deductionNode, context);
731
- context = null;
732
- const deduction = new Deduction(context, string, node, statement);
714
+ const { Deduction } = _elements.default, node = deductionNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromDeductionNode(deductionNode, context), deduction = new Deduction(context, string, node, lineIndex, statement);
733
715
  return deduction;
734
716
  }
735
717
  function statementFromStatementNode(statementNode, context) {
736
- const { Statement } = _elements.default, node = statementNode, string = context.nodeAsString(node);
737
- context = null;
738
- const statement = new Statement(context, string, node);
718
+ const { Statement } = _elements.default, node = statementNode, string = context.nodeAsString(node), lineIndex = null, statement = new Statement(context, string, node, lineIndex);
739
719
  return statement;
740
720
  }
741
721
  function signatureFromSignatureNode(signatureNode, context) {
742
- const { Signature } = _elements.default, node = signatureNode, string = context.nodeAsString(node), terms = termsFromSignatureNode(signatureNode, context);
743
- context = null;
744
- const signature = new Signature(context, string, node, terms);
722
+ const { Signature } = _elements.default, node = signatureNode, string = context.nodeAsString(node), lineIndex = null, terms = termsFromSignatureNode(signatureNode, context), signature = new Signature(context, string, node, lineIndex, terms);
745
723
  return signature;
746
724
  }
747
725
  function referenceFromReferenceNode(referenceNode, context) {
748
- const { Reference } = _elements.default, node = referenceNode, string = context.nodeAsString(node), metavariable = metavariableFromReferenceNode(referenceNode, context), topLevelMetaAssertion = topLevelMetaAssertionFromReferenceNode(referenceNode, context), reference = new Reference(context, string, node, metavariable, topLevelMetaAssertion);
726
+ const { Reference } = _elements.default, node = referenceNode, string = context.nodeAsString(node), lineIndex = null, metavariable = metavariableFromReferenceNode(referenceNode, context), topLevelMetaAssertion = topLevelMetaAssertionFromReferenceNode(referenceNode, context), reference = new Reference(context, string, node, lineIndex, metavariable, topLevelMetaAssertion);
749
727
  return reference;
750
728
  }
751
729
  function judgementFromJudgementNode(judgementNode, context) {
752
- const { Judgement } = _elements.default, node = judgementNode, string = context.nodeAsString(node), frame = frameFromJudgementNode(judgementNode, context), assumption = assumptionFromJudgementNode(judgementNode, context);
753
- context = null;
754
- const judgement = new Judgement(context, string, node, frame, assumption);
730
+ const { Judgement } = _elements.default, node = judgementNode, string = context.nodeAsString(node), lineIndex = null, frame = frameFromJudgementNode(judgementNode, context), assumption = assumptionFromJudgementNode(judgementNode, context), judgement = new Judgement(context, string, node, lineIndex, frame, assumption);
755
731
  return judgement;
756
732
  }
757
733
  function metaLemmaFromMetaLemmaNode(metaLemmaNode, context) {
758
- const { MetaLemma } = _elements.default, metaLemmaMetathoremNode = metaLemmaNode, proof = proofFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), label = labelFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), deduction = deductionFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), metaLevelAssumptions = metaLevelAssumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), topLevelMetaAssertionString = (0, _string.topLevelMetaAssertionStringFromLabelSuppositionsDeductionAndMetaLevelAssumptions)(label, suppositions, deduction, metaLevelAssumptions), node = metaLemmaMetathoremNode, string = topLevelMetaAssertionString, metaLemma = new MetaLemma(context, string, node, label, suppositions, deduction, proof, metaLevelAssumptions);
734
+ const { MetaLemma } = _elements.default, metaLemmaMetathoremNode = metaLemmaNode, proof = proofFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), label = labelFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), deduction = deductionFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), metaLevelAssumptions = metaLevelAssumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), topLevelMetaAssertionString = (0, _string.topLevelMetaAssertionStringFromLabelSuppositionsDeductionAndMetaLevelAssumptions)(label, suppositions, deduction, metaLevelAssumptions), node = metaLemmaMetathoremNode, string = topLevelMetaAssertionString, lineIndex = null, metaLemma = new MetaLemma(context, string, node, lineIndex, label, suppositions, deduction, proof, metaLevelAssumptions);
759
735
  return metaLemma;
760
736
  }
761
737
  function parameterFromParameterNode(parameterNode, context) {
762
- const { Parameter } = _elements.default, node = parameterNode, string = context.nodeAsString(node), name = parameterNode.getName(), identifier = parameterNode.getIdentifier();
763
- context = null;
764
- const parameter = new Parameter(context, string, node, name, identifier);
738
+ const { Parameter } = _elements.default, node = parameterNode, string = context.nodeAsString(node), lineIndex = null, name = parameterNode.getName(), identifier = parameterNode.getIdentifier(), parameter = new Parameter(context, string, node, lineIndex, name, identifier);
765
739
  return parameter;
766
740
  }
767
741
  function signatureFromJSignatureNode(signatureNode, context) {
768
- const { Signature } = _elements.default, node = signatureNode, string = context.nodeAsString(node), terms = termsFromSignatureNode(signatureNode, context);
769
- context = null;
770
- const signature = new Signature(context, string, node, terms);
742
+ const { Signature } = _elements.default, node = signatureNode, string = context.nodeAsString(node), lineIndex = null, terms = termsFromSignatureNode(signatureNode, context), signature = new Signature(context, string, node, lineIndex, terms);
771
743
  return signature;
772
744
  }
773
745
  function hypothesisFromHypothesisNode(hypotheseNode, context) {
774
- const { Hypothsis } = _elements.default, node = hypotheseNode, string = context.nodeAsString(node), statement = statementFromHypothesisNode(hypotheseNode, context);
775
- context = null;
776
- const hypohtesis = new Hypothsis(context, string, node, statement);
746
+ const { Hypothsis } = _elements.default, node = hypotheseNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromHypothesisNode(hypotheseNode, context), hypohtesis = new Hypothsis(context, string, node, lineIndex, statement);
777
747
  return hypohtesis;
778
748
  }
779
749
  function conjectureFromConjectureNode(conjectureNode, context) {
780
- const { Conjecture } = _elements.default, topLevelAsssertionNode = conjectureNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = [], topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = conjectureNode, string = topLevelAsssertionString, conjecture = new Conjecture(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
750
+ const { Conjecture } = _elements.default, topLevelAsssertionNode = conjectureNode, proof = proofFromTopLevelAssertionNode(topLevelAsssertionNode, context), labels = labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context), deduction = deductionFromTopLevelAssertionNode(topLevelAsssertionNode, context), suppositions = suppositionsFromTopLevelAssertionNode(topLevelAsssertionNode, context), signature = signatureFromTopLevelAssertionNode(topLevelAsssertionNode, context), hypotheses = [], topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = conjectureNode, string = topLevelAsssertionString, lineIndex = null, conjecture = new Conjecture(context, string, node, lineIndex, labels, suppositions, deduction, proof, signature, hypotheses);
781
751
  return conjecture;
782
752
  }
783
753
  function combinatorFromCombinatorNode(combinatorNode, context) {
784
- const { Combinator } = _elements.default, node = combinatorNode, string = context.nodeAsString(node), statement = statementFromCombinatorNode(combinatorNode, context), combinator = new Combinator(context, string, node, statement);
754
+ const { Combinator } = _elements.default, node = combinatorNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromCombinatorNode(combinatorNode, context), combinator = new Combinator(context, string, node, lineIndex, statement);
785
755
  return combinator;
786
756
  }
787
757
  function conclusionFromConclusionNode(conclusionNode, context) {
788
- const { Conclusion } = _elements.default, node = conclusionNode, string = context.nodeAsString(node), statement = statementFromConclusionNode(conclusionNode, context);
789
- context = null;
790
- const conclusion = new Conclusion(context, string, node, statement);
758
+ const { Conclusion } = _elements.default, node = conclusionNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromConclusionNode(conclusionNode, context), conclusion = new Conclusion(context, string, node, lineIndex, statement);
791
759
  return conclusion;
792
760
  }
793
761
  function derivationFromDerivationNode(derivationNode, context) {
794
- const { Derivation } = _elements.default, node = derivationNode, string = null, stepsOrSubproofs = stepsOrSubproofsFromDerivationNode(derivationNode, context);
795
- context = null;
796
- const derivation = new Derivation(context, string, node, stepsOrSubproofs);
762
+ const { Derivation } = _elements.default, node = derivationNode, string = null, lineIndex = null, stepsOrSubproofs = stepsOrSubproofsFromDerivationNode(derivationNode, context), derivation = new Derivation(context, string, node, lineIndex, stepsOrSubproofs);
797
763
  return derivation;
798
764
  }
799
765
  function typePrefixFromTypePrefixNode(typePrefixNode, context) {
800
- const { TypePrefix } = _elements.default, node = typePrefixNode, string = context.nodeAsString(node), term = termFromTypePrefixNode(typePrefixNode, context), type = typeFromTypePrefixNode(typePrefixNode, context);
801
- context = null;
802
- const typePrefix = new TypePrefix(context, string, node, term, type);
766
+ const { TypePrefix } = _elements.default, node = typePrefixNode, string = context.nodeAsString(node), lineIndex = null, term = termFromTypePrefixNode(typePrefixNode, context), type = typeFromTypePrefixNode(typePrefixNode, context), typePrefix = new TypePrefix(context, string, node, lineIndex, term, type);
803
767
  return typePrefix;
804
768
  }
805
769
  function assumptionFromAssumptionNode(assumptionNode, context) {
806
- const { Assumption } = _elements.default, node = assumptionNode, string = context.nodeAsString(node), reference = referenceFromAssumptionNode(assumptionNode, context), statement = statementFromAssumptionNode(assumptionNode, context), assumption = new Assumption(context, string, node, reference, statement);
770
+ const { Assumption } = _elements.default, node = assumptionNode, string = context.nodeAsString(node), lineIndex = null, reference = referenceFromAssumptionNode(assumptionNode, context), statement = statementFromAssumptionNode(assumptionNode, context), assumption = new Assumption(context, string, node, lineIndex, reference, statement);
807
771
  return assumption;
808
772
  }
809
773
  function constructorFromConstructorNode(constructorNode, context) {
810
- const { Constructor } = _elements.default, node = constructorNode, string = context.nodeAsString(node), term = termFromConstructorNode(constructorNode, context), type = typeFromConstructorNode(constructorNode, context), constructor = new Constructor(context, string, node, term, type);
774
+ const { Constructor } = _elements.default, node = constructorNode, string = context.nodeAsString(node), lineIndex = null, term = termFromConstructorNode(constructorNode, context), type = typeFromConstructorNode(constructorNode, context), constructor = new Constructor(context, string, node, lineIndex, term, type);
811
775
  return constructor;
812
776
  }
813
777
  function suppositionFromSuppositionNode(suppositionNode, context) {
814
- const { Supposition } = _elements.default, node = suppositionNode, string = context.nodeAsString(node), statement = statementFromSuppositionNode(suppositionNode, context), procedureCall = procedureCallFromSuppositionNode(suppositionNode, context);
815
- context = null;
816
- const supposition = new Supposition(context, string, node, statement, procedureCall);
778
+ const { Supposition } = _elements.default, node = suppositionNode, string = context.nodeAsString(node), lineIndex = null, statement = statementFromSuppositionNode(suppositionNode, context), procedureCall = procedureCallFromSuppositionNode(suppositionNode, context), supposition = new Supposition(context, string, node, lineIndex, statement, procedureCall);
817
779
  return supposition;
818
780
  }
819
781
  function equivalenceFromEquivalenceNode(equivalenceNode, context) {
820
- const { Equivalence } = _elements.default, node = equivalenceNode, type = typeFromEquivalenceNode(equivalenceNode, context), terms = termsFromEquivalenceNode(equivalenceNode, context), equivalenceString = (0, _string.equivalenceStringFromTerms)(terms), string = equivalenceString; ///
821
- context = null;
822
- const equivalence = new Equivalence(context, string, node, type, terms);
782
+ const { Equivalence } = _elements.default, node = equivalenceNode, lineIndex = null, type = typeFromEquivalenceNode(equivalenceNode, context), terms = termsFromEquivalenceNode(equivalenceNode, context), equivalenceString = (0, _string.equivalenceStringFromTerms)(terms), string = equivalenceString, equivalence = new Equivalence(context, string, node, lineIndex, type, terms);
823
783
  return equivalence;
824
784
  }
825
785
  function metatheoremFromMetatheoremNode(metatheoremNode, context) {
826
- const { Metatheorem } = _elements.default, metaLemmaMetathoremNode = metatheoremNode, proof = proofFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), label = labelFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), deduction = deductionFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), metaLevelAssumptions = metaLevelAssumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), topLevelMetaAssertionString = (0, _string.topLevelMetaAssertionStringFromLabelSuppositionsDeductionAndMetaLevelAssumptions)(label, suppositions, deduction, metaLevelAssumptions), node = metaLemmaMetathoremNode, string = topLevelMetaAssertionString, metatheorem = new Metatheorem(context, string, node, label, suppositions, deduction, proof, metaLevelAssumptions);
786
+ const { Metatheorem } = _elements.default, metaLemmaMetathoremNode = metatheoremNode, proof = proofFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), label = labelFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), deduction = deductionFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), metaLevelAssumptions = metaLevelAssumptionsFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context), topLevelMetaAssertionString = (0, _string.topLevelMetaAssertionStringFromLabelSuppositionsDeductionAndMetaLevelAssumptions)(label, suppositions, deduction, metaLevelAssumptions), node = metaLemmaMetathoremNode, string = topLevelMetaAssertionString, lineIndex = null;
787
+ context = null;
788
+ const metatheorem = new Metatheorem(context, string, node, lineIndex, label, suppositions, deduction, proof, metaLevelAssumptions);
827
789
  return metatheorem;
828
790
  }
829
791
  function metavariableFromMetavariableNode(metavariableNode, context) {
830
- const { Metavariable } = _elements.default, node = metavariableNode, string = context.nodeAsString(node), name = nameFromMetavariableNode(metavariableNode, context), term = termFromMetavariableNode(metavariableNode, context), type = typeFromMetavariableNode(metavariableNode, context), metaType = null, metavariable = new Metavariable(context, string, node, name, term, type, metaType);
792
+ const { Metavariable } = _elements.default, node = metavariableNode, string = context.nodeAsString(node), lineIndex = null, name = nameFromMetavariableNode(metavariableNode, context), term = termFromMetavariableNode(metavariableNode, context), type = typeFromMetavariableNode(metavariableNode, context), metaType = null;
793
+ context = null;
794
+ const metavariable = new Metavariable(context, string, node, lineIndex, name, term, type, metaType);
831
795
  return metavariable;
832
796
  }
833
797
  function subDerivationFromSubDerivationNode(subDerivationNode, context) {
834
- const { SubDerivation } = _elements.default, node = subDerivationNode, string = null, stepsOrSubproofs = stepsOrSubproofsFromSubDerivationNode(subDerivationNode, context);
798
+ const { SubDerivation } = _elements.default, node = subDerivationNode, string = null, lineIndex = null, stepsOrSubproofs = stepsOrSubproofsFromSubDerivationNode(subDerivationNode, context);
835
799
  context = null;
836
- const subDerivation = new SubDerivation(context, string, node, stepsOrSubproofs);
800
+ const subDerivation = new SubDerivation(context, string, node, lineIndex, stepsOrSubproofs);
837
801
  return subDerivation;
838
802
  }
839
803
  function typeAssertionFromTypeAssertionNode(typeAssertionNode, context) {
840
- const { TypeAssertion } = _elements.default, node = typeAssertionNode, string = context.nodeAsString(node), term = termFromTypeAssertionNode(typeAssertionNode, context), type = typeFromTypeAssertionNode(typeAssertionNode, context);
804
+ const { TypeAssertion } = _elements.default, node = typeAssertionNode, string = context.nodeAsString(node), lineIndex = null, term = termFromTypeAssertionNode(typeAssertionNode, context), type = typeFromTypeAssertionNode(typeAssertionNode, context);
841
805
  context = null;
842
- const typeAssertion = new TypeAssertion(context, string, node, term, type);
806
+ const typeAssertion = new TypeAssertion(context, string, node, lineIndex, term, type);
843
807
  return typeAssertion;
844
808
  }
845
809
  function procedureCallFromProcedureCallNode(procedureCallNode, context) {
846
- const { ProcedureCall } = _elements.default, parameters = parametersFromProcedureCallNode(procedureCallNode, context), procedureReference = procedureReferenceFromProcedureCallNode(procedureCallNode, context), procedureCallString = (0, _string.procedureCallStringFromProcedureReferenceAndParameters)(procedureReference, parameters), node = procedureCallNode, string = procedureCallString; ///
810
+ const { ProcedureCall } = _elements.default, parameters = parametersFromProcedureCallNode(procedureCallNode, context), procedureReference = procedureReferenceFromProcedureCallNode(procedureCallNode, context), procedureCallString = (0, _string.procedureCallStringFromProcedureReferenceAndParameters)(procedureReference, parameters), node = procedureCallNode, string = procedureCallString, lineIndex = null;
847
811
  context = null;
848
- const procedureCall = new ProcedureCall(context, string, node, parameters, procedureReference);
812
+ const procedureCall = new ProcedureCall(context, string, node, lineIndex, parameters, procedureReference);
849
813
  return procedureCall;
850
814
  }
851
815
  function stepOrSubproofFromStepOrSubproofNode(stepOrSubproofNode, context) {
@@ -853,93 +817,117 @@ function stepOrSubproofFromStepOrSubproofNode(stepOrSubproofNode, context) {
853
817
  return stepOrSubproof;
854
818
  }
855
819
  function definedAssertionFromDefinedAssertionNode(definedAssertionNode, context) {
856
- const { DefinedAssertion } = _elements.default, node = definedAssertionNode, string = context.nodeAsString(node), negated = definedAssertionNode.isNegated(), term = termFromDefinedAssertionNode(definedAssertionNode, context), frame = frameFromDefinedAssertionNode(definedAssertionNode, context);
820
+ const { DefinedAssertion } = _elements.default, node = definedAssertionNode, string = context.nodeAsString(node), lineIndex = null, negated = definedAssertionNode.isNegated(), term = termFromDefinedAssertionNode(definedAssertionNode, context), frame = frameFromDefinedAssertionNode(definedAssertionNode, context);
857
821
  context = null;
858
- const definedAssertion = new DefinedAssertion(context, string, node, term, frame, negated);
822
+ const definedAssertion = new DefinedAssertion(context, string, node, lineIndex, term, frame, negated);
859
823
  return definedAssertion;
860
824
  }
861
825
  function propertyRelationFromPropertyRelationNode(propertyRelationNode, context) {
862
- const { PropertyRelation } = _elements.default, node = propertyRelationNode, string = context.nodeAsString(node), term = termFromPropertyRelationNode(propertyRelationNode, context), property = propertyFromPropertyRelationNode(propertyRelationNode, context);
826
+ const { PropertyRelation } = _elements.default, node = propertyRelationNode, string = context.nodeAsString(node), lineIndex = null, term = termFromPropertyRelationNode(propertyRelationNode, context), property = propertyFromPropertyRelationNode(propertyRelationNode, context);
863
827
  context = null;
864
- const propertyRelation = new PropertyRelation(context, string, node, term, property);
828
+ const propertyRelation = new PropertyRelation(context, string, node, lineIndex, term, property);
865
829
  return propertyRelation;
866
830
  }
867
831
  function termSubstitutionFromTermSubstitutionNode(termSubstitutionNode, context) {
868
- const { TermSubstitution } = _elements.default, node = termSubstitutionNode, string = context.nodeAsString(node), generalContext = generalContextFromTermSubstitutionNode(termSubstitutionNode, context), targetTerm = targetTermFromTermSubstitutionNode(termSubstitutionNode, context), replacementTerm = replacementTermFromTermSubstitutionNode(termSubstitutionNode, context), termSubstitution = new TermSubstitution(context, string, node, generalContext, targetTerm, replacementTerm);
832
+ const { TermSubstitution } = _elements.default, node = termSubstitutionNode, string = context.nodeAsString(node), lineIndex = null, generalContext = generalContextFromTermSubstitutionNode(termSubstitutionNode, context), targetTerm = targetTermFromTermSubstitutionNode(termSubstitutionNode, context), replacementTerm = replacementTermFromTermSubstitutionNode(termSubstitutionNode, context);
833
+ context = null;
834
+ const termSubstitution = new TermSubstitution(context, string, node, lineIndex, generalContext, targetTerm, replacementTerm);
869
835
  return termSubstitution;
870
836
  }
871
837
  function frameSubstitutionFromFrameSubstitutionNode(frameSubstitutionNode, context) {
872
- const { FrameSubstitution } = _elements.default, node = frameSubstitutionNode, string = context.nodeAsString(node), generalContext = generalContextFromFrameSubstitutionNode(frameSubstitutionNode, context), targetFrame = targetFrameFromFrameSubstitutionNode(frameSubstitutionNode, context), replacementFrame = replacementFrameFromFrameSubstitutionNode(frameSubstitutionNode, context), frameSubstitution = new FrameSubstitution(context, string, node, generalContext, targetFrame, replacementFrame);
838
+ const { FrameSubstitution } = _elements.default, node = frameSubstitutionNode, string = context.nodeAsString(node), lineIndex = null, generalContext = generalContextFromFrameSubstitutionNode(frameSubstitutionNode, context), targetFrame = targetFrameFromFrameSubstitutionNode(frameSubstitutionNode, context), replacementFrame = replacementFrameFromFrameSubstitutionNode(frameSubstitutionNode, context);
839
+ context = null;
840
+ const frameSubstitution = new FrameSubstitution(context, string, node, lineIndex, generalContext, targetFrame, replacementFrame);
873
841
  return frameSubstitution;
874
842
  }
875
843
  function propertyAssertionFromPropertyAssertionNode(propertyAssertionNode, context) {
876
- const { PropertyAssertion } = _elements.default, node = propertyAssertionNode, string = context.nodeAsString(node), term = termFromPropertyAssertionNode(propertyAssertionNode, context), propertyRelation = propertyRelationFromPropertyAssertionNode(propertyAssertionNode, context);
844
+ const { PropertyAssertion } = _elements.default, node = propertyAssertionNode, string = context.nodeAsString(node), lineIndex = null, term = termFromPropertyAssertionNode(propertyAssertionNode, context), propertyRelation = propertyRelationFromPropertyAssertionNode(propertyAssertionNode, context);
877
845
  context = null;
878
- const propertyAssertion = new PropertyAssertion(context, string, node, term, propertyRelation);
846
+ const propertyAssertion = new PropertyAssertion(context, string, node, lineIndex, term, propertyRelation);
879
847
  return propertyAssertion;
880
848
  }
881
849
  function subproofAssertionFromSubproofAssertionNode(subproofAssertionNode, context) {
882
- const { SubproofAssertion } = _elements.default, node = subproofAssertionNode, string = context.nodeAsString(node), statements = statementsFromSubproofAssertionNode(subproofAssertionNode, context);
850
+ const { SubproofAssertion } = _elements.default, node = subproofAssertionNode, string = context.nodeAsString(node), lineIndex = null, statements = statementsFromSubproofAssertionNode(subproofAssertionNode, context);
883
851
  context = null;
884
- const subproofAssertion = new SubproofAssertion(context, string, node, statements);
852
+ const subproofAssertion = new SubproofAssertion(context, string, node, lineIndex, statements);
885
853
  return subproofAssertion;
886
854
  }
887
855
  function containedAssertionFromContainedAssertionNode(containedAssertionNode, context) {
888
- const { ContainedAssertion } = _elements.default, node = containedAssertionNode, string = context.nodeAsString(node), negated = containedAssertionNode.isNegated(), term = termFromContainedAssertionNode(containedAssertionNode, context), frame = frameFromContainedAssertionNode(containedAssertionNode, context), statement = statementFromContainedAssertionNode(containedAssertionNode, context);
856
+ const { ContainedAssertion } = _elements.default, node = containedAssertionNode, string = context.nodeAsString(node), lineIndex = null, negated = containedAssertionNode.isNegated(), term = termFromContainedAssertionNode(containedAssertionNode, context), frame = frameFromContainedAssertionNode(containedAssertionNode, context), statement = statementFromContainedAssertionNode(containedAssertionNode, context);
889
857
  context = null;
890
- const containedAssertion = new ContainedAssertion(context, string, node, term, frame, negated, statement);
858
+ const containedAssertion = new ContainedAssertion(context, string, node, lineIndex, term, frame, negated, statement);
891
859
  return containedAssertion;
892
860
  }
893
861
  function satisfiesAssertionFromSatisfiesAssertionNode(satisfiesAssertionNode, context) {
894
- const { SatisfiesAssertion } = _elements.default, node = satisfiesAssertionNode, string = context.nodeAsString(node), signature = signatureFromSatisfiesAssertionNode(satisfiesAssertionNode, context), reference = referenceFromSatisfiesAssertionNode(satisfiesAssertionNode, context);
862
+ const { SatisfiesAssertion } = _elements.default, node = satisfiesAssertionNode, string = context.nodeAsString(node), lineIndex = null, signature = signatureFromSatisfiesAssertionNode(satisfiesAssertionNode, context), reference = referenceFromSatisfiesAssertionNode(satisfiesAssertionNode, context);
895
863
  context = null;
896
- const satisfiesAssertion = new SatisfiesAssertion(context, string, node, signature, reference);
864
+ const satisfiesAssertion = new SatisfiesAssertion(context, string, node, lineIndex, signature, reference);
897
865
  return satisfiesAssertion;
898
866
  }
899
867
  function procedureReferenceFromProcedureReferenceNode(procedureReferenceNode, context) {
900
- const { ProcedureReference } = _elements.default, node = procedureReferenceNode, string = context.nodeAsString(node), name = nameFromProcedureReferenceNode(procedureReferenceNode, context);
868
+ const { ProcedureReference } = _elements.default, node = procedureReferenceNode, string = context.nodeAsString(node), lineIndex = null, name = nameFromProcedureReferenceNode(procedureReferenceNode, context);
901
869
  context = null;
902
- const procedureRefereence = new ProcedureReference(context, string, node, name);
870
+ const procedureRefereence = new ProcedureReference(context, string, node, lineIndex, name);
903
871
  return procedureRefereence;
904
872
  }
905
873
  function variableDeclarationFromVariableDeclarationNode(variableDeclarationNode, context) {
906
- const { VariableDeclaration } = _elements.default, node = variableDeclarationNode, string = context.nodeAsString(node), typeNode = variableDeclarationNode.getTypeNode(), provisional = variableDeclarationNode.isProvisional(), variableNode = variableDeclarationNode.getVariableNode(), type = typeFromTypeNode(typeNode, context), variable = variableFromVariableNode(variableNode, context), variableDeclaration = new VariableDeclaration(context, string, node, type, variable, provisional);
874
+ const { VariableDeclaration } = _elements.default, node = variableDeclarationNode, string = context.nodeAsString(node), lineIndex = null, typeNode = variableDeclarationNode.getTypeNode(), provisional = variableDeclarationNode.isProvisional(), variableNode = variableDeclarationNode.getVariableNode(), type = typeFromTypeNode(typeNode, context), variable = variableFromVariableNode(variableNode, context);
875
+ context = null;
876
+ const variableDeclaration = new VariableDeclaration(context, string, node, lineIndex, type, variable, provisional);
907
877
  return variableDeclaration;
908
878
  }
909
879
  function metaLevelAssumptionFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context) {
910
- const { MetaLevelAssumption } = _elements.default, node = metaLevelAssumptionNode, string = context.nodeAsString(node), reference = referenceFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context), statement = statementFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context), metaLevelAssumption = new MetaLevelAssumption(context, string, node, reference, statement);
880
+ const { MetaLevelAssumption } = _elements.default, node = metaLevelAssumptionNode, string = context.nodeAsString(node), lineIndex = null, reference = referenceFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context), statement = statementFromMetaLevelAssumptionNode(metaLevelAssumptionNode, context);
881
+ context = null;
882
+ const metaLevelAssumption = new MetaLevelAssumption(context, string, node, lineIndex, reference, statement);
911
883
  return metaLevelAssumption;
912
884
  }
913
885
  function typePrefixDeclarationFromTypePrefixDeclarationNode(typePrefixDeclarationNode, context) {
914
- const { TypePrefixDeclaration } = _elements.default, node = typePrefixDeclarationNode, string = context.nodeAsString(node), typePrefix = typePrefixFromTypePrefixDeclarationNode(typePrefixDeclarationNode, context), typePrefixDeclaration = new TypePrefixDeclaration(context, string, node, typePrefix);
886
+ const { TypePrefixDeclaration } = _elements.default, node = typePrefixDeclarationNode, string = context.nodeAsString(node), lineIndex = null, typePrefix = typePrefixFromTypePrefixDeclarationNode(typePrefixDeclarationNode, context);
887
+ context = null;
888
+ const typePrefixDeclaration = new TypePrefixDeclaration(context, string, node, lineIndex, typePrefix);
915
889
  return typePrefixDeclaration;
916
890
  }
917
891
  function combinatorDeclarationFromCombinatorDeclarationNode(combinatorDeclarationNode, context) {
918
- const { CombinatorDeclaration } = _elements.default, node = combinatorDeclarationNode, string = context.nodeAsString(node), combinator = combinatorFromCombinatorDeclarationNode(combinatorDeclarationNode, context), combinatorDeclaration = new CombinatorDeclaration(context, string, node, combinator);
892
+ const { CombinatorDeclaration } = _elements.default, node = combinatorDeclarationNode, string = context.nodeAsString(node), lineIndex = null, combinator = combinatorFromCombinatorDeclarationNode(combinatorDeclarationNode, context);
893
+ context = null;
894
+ const combinatorDeclaration = new CombinatorDeclaration(context, string, node, lineIndex, combinator);
919
895
  return combinatorDeclaration;
920
896
  }
921
897
  function simpleTypeDeclarationFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context) {
922
- const { SimpleTypeDeclaration } = _elements.default, node = simpleTypeDeclarationNode, string = context.nodeAsString(node), type = typeFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context), superTypes = superTypesFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context), provisional = provisionalFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context), simpleTypeDeclaration = new SimpleTypeDeclaration(context, string, node, type, superTypes, provisional);
898
+ const { SimpleTypeDeclaration } = _elements.default, node = simpleTypeDeclarationNode, string = context.nodeAsString(node), lineIndex = null, type = typeFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context), superTypes = superTypesFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context), provisional = provisionalFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context);
899
+ context = null;
900
+ const simpleTypeDeclaration = new SimpleTypeDeclaration(context, string, node, lineIndex, type, superTypes, provisional);
923
901
  return simpleTypeDeclaration;
924
902
  }
925
903
  function referenceSubstitutionFromReferenceSubstitutionNode(referenceSubstitutionNode, context) {
926
- const { ReferenceSubstitution } = _elements.default, node = referenceSubstitutionNode, string = context.nodeAsString(node), generalContext = generalContextFromReferenceSubstitutionNode(referenceSubstitutionNode, context), targetReference = targetReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, context), replacementReference = replacementReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, context), referenceSubstitution = new ReferenceSubstitution(context, string, node, generalContext, targetReference, replacementReference);
904
+ const { ReferenceSubstitution } = _elements.default, node = referenceSubstitutionNode, string = context.nodeAsString(node), lineIndex = null, generalContext = generalContextFromReferenceSubstitutionNode(referenceSubstitutionNode, context), targetReference = targetReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, context), replacementReference = replacementReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, context);
905
+ context = null;
906
+ const referenceSubstitution = new ReferenceSubstitution(context, string, node, lineIndex, generalContext, targetReference, replacementReference);
927
907
  return referenceSubstitution;
928
908
  }
929
909
  function statementSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode, context) {
930
- const { StatementSubstitution } = _elements.default, node = statementSubstitutionNode, string = context.nodeAsString(node), generalContext = generalContextFromStatementSubstitutionNode(statementSubstitutionNode, context), resolved = resolvedFromStatementSubstitutionNode(statementSubstitutionNode, context), substitution = substitutionFromStatementSubstitutionNode(statementSubstitutionNode, context), targetStatement = targetStatementFromStatementSubstitutionNode(statementSubstitutionNode, context), replacementStatement = replacementStatementFromStatementSubstitutionNode(statementSubstitutionNode, context), statementSubstitution = new StatementSubstitution(context, string, node, generalContext, resolved, substitution, targetStatement, replacementStatement);
910
+ const { StatementSubstitution } = _elements.default, node = statementSubstitutionNode, string = context.nodeAsString(node), lineIndex = null, generalContext = generalContextFromStatementSubstitutionNode(statementSubstitutionNode, context), resolved = resolvedFromStatementSubstitutionNode(statementSubstitutionNode, context), substitution = substitutionFromStatementSubstitutionNode(statementSubstitutionNode, context), targetStatement = targetStatementFromStatementSubstitutionNode(statementSubstitutionNode, context), replacementStatement = replacementStatementFromStatementSubstitutionNode(statementSubstitutionNode, context);
911
+ context = null;
912
+ const statementSubstitution = new StatementSubstitution(context, string, node, lineIndex, generalContext, resolved, substitution, targetStatement, replacementStatement);
931
913
  return statementSubstitution;
932
914
  }
933
915
  function constructorDeclarationFromConstructorDeclarationNode(constructorDeclarationNode, context) {
934
- const { ConstructorDeclaration } = _elements.default, node = constructorDeclarationNode, string = context.nodeAsString(node), type = typeFromConstructorDeclarationNode(constructorDeclarationNode, context), provisional = provisionalFromConstructorDeclarationNode(constructorDeclarationNode, context), constructor = constructorFromConstructorDeclarationNode(constructorDeclarationNode, context), constructorDeclaration = new ConstructorDeclaration(context, string, node, type, provisional, constructor);
916
+ const { ConstructorDeclaration } = _elements.default, node = constructorDeclarationNode, string = context.nodeAsString(node), lineIndex = null, type = typeFromConstructorDeclarationNode(constructorDeclarationNode, context), provisional = provisionalFromConstructorDeclarationNode(constructorDeclarationNode, context), constructor = constructorFromConstructorDeclarationNode(constructorDeclarationNode, context);
917
+ context = null;
918
+ const constructorDeclaration = new ConstructorDeclaration(context, string, node, lineIndex, type, provisional, constructor);
935
919
  return constructorDeclaration;
936
920
  }
937
921
  function complexTypeDeclarationFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context) {
938
- const { ComplexTypeDeclaration } = _elements.default, node = complexTypeDeclarationNode, string = context.nodeAsString(node), type = typeFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), superTypes = superTypesFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), provisional = provisionalFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), complexTypeDeclaration = new ComplexTypeDeclaration(context, string, node, type, superTypes, provisional);
922
+ const { ComplexTypeDeclaration } = _elements.default, node = complexTypeDeclarationNode, string = context.nodeAsString(node), lineIndex = null, type = typeFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), superTypes = superTypesFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), provisional = provisionalFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context);
923
+ context = null;
924
+ const complexTypeDeclaration = new ComplexTypeDeclaration(context, string, node, lineIndex, type, superTypes, provisional);
939
925
  return complexTypeDeclaration;
940
926
  }
941
927
  function metavariableDeclarationFromMetavariableDeclarationNode(metavariableDeclarationNode, context) {
942
- const { MetavariableDeclaration } = _elements.default, node = metavariableDeclarationNode, string = context.nodeAsString(node), metaType = metaTypeFromMetavariableDeclarationNode(metavariableDeclarationNode, context), metavariable = metavariableFromMetavariableDeclarationNode(metavariableDeclarationNode, context), metavariableDeclaration = new MetavariableDeclaration(context, string, node, metaType, metavariable);
928
+ const { MetavariableDeclaration } = _elements.default, node = metavariableDeclarationNode, string = context.nodeAsString(node), lineIndex = null, metaType = metaTypeFromMetavariableDeclarationNode(metavariableDeclarationNode, context), metavariable = metavariableFromMetavariableDeclarationNode(metavariableDeclarationNode, context);
929
+ context = null;
930
+ const metavariableDeclaration = new MetavariableDeclaration(context, string, node, lineIndex, metaType, metavariable);
943
931
  return metavariableDeclaration;
944
932
  }
945
933
  function nameFromTypeNode(typeNode, context) {
@@ -1734,4 +1722,4 @@ function stepsOrSubproofsFromSubDerivationNode(subDerivationNode, context) {
1734
1722
  return stepsOrSubproofs;
1735
1723
  }
1736
1724
 
1737
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbixcbiAgICAgICAgIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNEZWR1Y3Rpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9ucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlO1xuXG4gIGlmICh0eXBlTm9kZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpO1xuXG4gICAgdHlwZSA9IGJhc2VUeXBlOyAgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBub2RlID0gdHlwZU5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJlZml4TmFtZSA9IHByZWZpeE5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gbm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICB0eXBlU3RyaW5nID0gdHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSxcbiAgICAgICAgICBzdHJpbmcgPSB0eXBlU3RyaW5nOyAgLy8vXG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIHByZWZpeE5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0eXBlKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGVwIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0ZXBOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcCA9IG5ldyBTdGVwKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbik7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUnVsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBydWxlU3RyaW5nID0gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiksXG4gICAgICAgIG5vZGUgPSBydWxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBydWxlU3RyaW5nLCAgLy8vXG4gICAgICAgIHJ1bGUgPSBuZXcgUnVsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHByb29mLCBsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKTtcblxuICByZXR1cm4gcnVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBsYWJlbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JGcm9tRXJyb3JOb2RlKGVycm9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVycm9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVycm9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUpO1xuXG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMZW1tYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBsZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gbGVtbWFOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGVtbWEgPSBuZXcgTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZnJhbWVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9vZk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9vZiA9IG5ldyBQcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGRlcml2YXRpb24pO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBeGlvbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBheGlvbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgYXhpb20gPSBuZXcgQXhpb20oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzaXNOb2RlcyA9IHNlY3Rpb25Ob2RlLmdldEh5cG90aGVzaXNOb2RlcygpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXhpb20gPSBheGlvbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlbW1hID0gbGVtbWFGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0aGVvcmVtID0gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2VjdGlvblN0cmluZyA9IHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc1RvcExldmVsQXNzZXJ0aW9uKGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSksXG4gICAgICAgIG5vZGUgPSBzZWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHNlY3Rpb25TdHJpbmc7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNlY3Rpb24gPSBuZXcgU2VjdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSk7XG5cbiAgcmV0dXJuIHNlY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJlbWlzZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmVtaXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJlbWlzZSA9IG5ldyBQcmVtaXNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gcHJlbWlzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gdGhlb3JlbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gdGhlb3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICB0aGVvcmVtID0gbmV3IFRoZW9yZW0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOb2RlLmdldFByb3BlcnR5TmFtZSgpLFxuICAgICAgICBub21pbmFsVHlwZU5hbWUgPSBudWxsLFxuICAgICAgICBuYW1lID0gcHJvcGVydHlOYW1lOyAgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHkgPSBuZXcgUHJvcGVydHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lLCBub21pbmFsVHlwZU5hbWUpO1xuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSBudWxsLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbnMgPSBbXTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHR5cGUsIGlkZW50aWZpZXIsIHByb3BlcnR5UmVsYXRpb25zKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJEZXJpdmF0aW9uID0gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uKHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbiwgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHN1YnByb29mU3RyaW5nOyAgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2YgPSBuZXcgU3VicHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdXBwb3NpdGlvbnMsIHN1YkRlcml2YXRpb24pO1xuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVhbGl0eU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWR1Y3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGRlZHVjdGlvbiA9IG5ldyBEZWR1Y3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb24gPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25Gcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG1ldGF2YXJpYWJsZSwgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVkZ2VtZW50RnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEp1ZGdlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBqdWRnZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBqdWRnZW1lbnQgPSBuZXcgSnVkZ2VtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgZnJhbWUsIGFzc3VtcHRpb24pO1xuXG4gIHJldHVybiBqdWRnZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZShtZXRhTGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YUxlbW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUgPSBtZXRhTGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNEZWR1Y3Rpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9ucyhsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIG1ldGFMZXZlbEFzc3VtcHRpb25zKSxcbiAgICAgICAgbm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbWV0YUxlbW1hID0gbmV3IE1ldGFMZW1tYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIG1ldGFMZXZlbEFzc3VtcHRpb25zKTtcblxuICByZXR1cm4gbWV0YUxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKSxcbiAgICAgICAgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlciA9IG5ldyBQYXJhbWV0ZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lLCBpZGVudGlmaWVyKTtcblxuICByZXR1cm4gcGFyYW1ldGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbUpTaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBIeXBvdGhzaXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gaHlwb3RoZXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgaHlwb2h0ZXNpcyA9IG5ldyBIeXBvdGhzaXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBoeXBvaHRlc2lzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gY29uamVjdHVyZU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBjb25qZWN0dXJlID0gbmV3IENvbmplY3R1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gY29uamVjdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21iaW5hdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbWJpbmF0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbWJpbmF0b3IgPSBuZXcgQ29tYmluYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uY2x1c2lvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25jbHVzaW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmNsdXNpb24gPSBuZXcgQ29uY2x1c2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZXJpdmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZGVyaXZhdGlvbiA9IG5ldyBEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlUHJlZml4ID0gbmV3IFR5cGVQcmVmaXgoY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBuZXcgQ29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gY29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VwcG9zaXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VwcG9zaXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3VwcG9zaXRpb24gPSBuZXcgU3VwcG9zaXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQsIHByb2NlZHVyZUNhbGwpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWl2YWxlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWl2YWxlbmNlTm9kZSwgLy8vXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlcXVpdmFsZW5jZVN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgc3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmc7IC8vL1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWl2YWxlbmNlID0gbmV3IEVxdWl2YWxlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZSwgdGVybXMpO1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF0aGVvcmVtRnJvbU1ldGF0aGVvcmVtTm9kZShtZXRhdGhlb3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlID0gbWV0YXRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNEZWR1Y3Rpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9ucyhsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIG1ldGFMZXZlbEFzc3VtcHRpb25zKSxcbiAgICAgICAgbm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbWV0YXRoZW9yZW0gPSBuZXcgTWV0YXRoZW9yZW0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBtZXRhTGV2ZWxBc3N1bXB0aW9ucyk7XG5cbiAgcmV0dXJuIG1ldGF0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhVHlwZSA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG5ldyBNZXRhdmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lLCB0ZXJtLCB0eXBlLCBtZXRhVHlwZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YkRlcml2YXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN1YkRlcml2YXRpb24gPSBuZXcgU3ViRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBzdWJEZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZUFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyhwcm9jZWR1cmVSZWZlcmVuY2UsIHBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nOyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsID0gbmV3IFByb2NlZHVyZUNhbGwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBwYXJhbWV0ZXJzLCBwcm9jZWR1cmVSZWZlcmVuY2UpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwID0gc3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RlcE9yU3VicHJvb2YgPSAoc3RlcCB8fCBzdWJwcm9vZik7XG5cbiAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZmluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5lZ2F0ZWQgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gbmV3IERlZmluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCk7XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlSZWxhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uID0gbmV3IFByb3BlcnR5UmVsYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtLCBwcm9wZXJ0eSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBnZW5lcmFsQ29udGV4dEZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRhcmdldFRlcm0gPSB0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IG5ldyBUZXJtU3Vic3RpdHV0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgZ2VuZXJhbENvbnRleHQsIHRhcmdldFRlcm0sIHJlcGxhY2VtZW50VGVybSk7XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxDb250ZXh0RnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gcmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBuZXcgRnJhbWVTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBnZW5lcmFsQ29udGV4dCwgdGFyZ2V0RnJhbWUsIHJlcGxhY2VtZW50RnJhbWUpO1xuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IG5ldyBQcm9wZXJ0eUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRlcm0sIHByb3BlcnR5UmVsYXRpb24pO1xuXG4gIHJldHVybiBwcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJwcm9vZkFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBuZXcgU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnRzKTtcblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNhdGlzZmllc0Fzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uID0gbmV3IFNhdGlzZmllc0Fzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHNpZ25hdHVyZSwgcmVmZXJlbmNlKTtcblxuICByZXR1cm4gc2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZVJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZWVuY2UgPSBuZXcgUHJvY2VkdXJlUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZWVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdHlwZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKSxcbiAgICAgICAgdmFyaWFibGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VmFyaWFibGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvbiA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZSwgdmFyaWFibGUsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZXZlbEFzc3VtcHRpb25Gcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhTGV2ZWxBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uID0gbmV3IE1ldGFMZXZlbEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIG1ldGFMZXZlbEFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeERlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlUHJlZml4RGVjbGFyYXRpb24gPSBuZXcgVHlwZVByZWZpeERlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZVByZWZpeCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXhEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21iaW5hdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21iaW5hdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29tYmluYXRvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgY29tYmluYXRvcik7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaW1wbGVUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpbXBsZVR5cGVEZWNsYXJhdGlvbiA9IG5ldyBTaW1wbGVUeXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHNpbXBsZVR5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2VTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBnZW5lcmFsQ29udGV4dEZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2UgPSB0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSByZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBuZXcgUmVmZXJlbmNlU3Vic3RpdHV0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgZ2VuZXJhbENvbnRleHQsIHRhcmdldFJlZmVyZW5jZSwgcmVwbGFjZW1lbnRSZWZlcmVuY2UpO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG5cbiAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBnZW5lcmFsQ29udGV4dEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXNvbHZlZCA9IHJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSB0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb24gPSBuZXcgU3RhdGVtZW50U3Vic3RpdHV0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgZ2VuZXJhbENvbnRleHQsIHJlc29sdmVkLCBzdWJzdGl0dXRpb24sIHRhcmdldFN0YXRlbWVudCwgcmVwbGFjZW1lbnRTdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZSwgcHJvdmlzaW9uYWwsIGNvbnN0cnVjdG9yKTtcblxuICByZXR1cm4gY29uc3RydWN0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21wbGV4VHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb24gPSBuZXcgQ29tcGxleFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gY29tcGxleFR5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGFUeXBlID0gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBtZXRhVHlwZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBydWxlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gcnVsZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VOb2RlcyA9IHJ1bGVOb2RlLmdldFByZW1pc2VOb2RlcygpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBheGlvbSA9IG51bGw7XG5cbiAgY29uc3QgYXhpb21Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0QXhpb21Ob2RlKCk7XG5cbiAgaWYgKGF4aW9tTm9kZSAhPT0gbnVsbCkge1xuICAgIGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVtbWEgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hTm9kZSA9IHNlY3Rpb25Ob2RlLmdldExlbW1hTm9kZSgpO1xuXG4gIGlmIChsZW1tYU5vZGUgIT09IG51bGwpIHtcbiAgICBsZW1tYSA9IGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwcm9wZXJ0eU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGVwTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHN0ZXBOb2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VOb2RlKTtcblxuICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlUHJlZml4TmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBlclR5cGVzID0gbnVsbDtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgcHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHByZWZpeE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbmNsdXNpb25Ob2RlID0gcnVsZU5vZGUuZ2V0Q29uY2x1c2lvbk5vZGUoKSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGhlb3JlbSA9IG51bGw7XG5cbiAgY29uc3QgdGhlb3JlbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRUaGVvcmVtTm9kZSgpO1xuXG4gIGlmICh0aGVvcmVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRoZW9yZW0gPSB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZXJpdmF0aW9uTm9kZSA9IHByb29mTm9kZS5nZXREZXJpdmF0aW9uTm9kZSgpLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBvY25zdHJ1Y3Rvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUob2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9uTm9kZXMgPSBmcmFtZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBlcXVpdmFsZW5jZU5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmFpYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICBuYW1lID0gbWV0YXZhcmFpYmxlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlbU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxhYmVsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25qZWN0dXJlID0gbnVsbDtcblxuICBjb25zdCBjb25qZWN0dXJlTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbmplY3R1cmVOb2RlKCk7XG5cbiAgaWYgKGNvbmplY3R1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRFcXVhbGl0eU5vZGUoKTtcblxuICBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgaWRlbnRpZmllciA9IHZhcmlhYmxlSWRlbnRpZmllcjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEp1ZGdlbWVudE5vZGUoKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RlcCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGUuaXNTdGVwTm9kZSgpO1xuXG4gIGlmIChzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSkge1xuICAgIGNvbnN0IHN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbkZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEFzc3VtcHRpb25Ob2RlKCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJhbWV0ZXJOb2RlLmdldElkZW50aWZpZXIoKTtcblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBoeXBvdGhlc2lzTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IHByZW1pc2VOb2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc3VicHJvb2ZOb2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdXBwb3NpdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50OyAvLy9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViRGVyaXZhdGlvbk5vZGUgPSBzdWJwcm9vZk5vZGUuZ2V0U3ViRGVyaXZhdGlvbk5vZGUoKSxcbiAgICAgICAgc3ViRGVydmlhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdWJEZXJ2aWF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gbWV0YXZhcmlhYmxlU3RyaW5nLCAvLy9cbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNhdGlzZmllc0Fzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSA9IHN0ZXBOb2RlLmdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VHlwZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3VicHJvb2ZPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLmlzU3VicHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUpIHtcbiAgICBjb25zdCBzdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFBhcmFtZXRlck5vZGVzKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzKHBhcmFtZXRlck5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRMYWJlbE5vZGVzKCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGRlZmluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1TdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmICh0ZXJtU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0YXJnZXRUZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRhcmdldFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRhcmdldFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9vZk5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXRQcm9vZk5vZGUoKSxcbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbE5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXRMYWJlbE5vZGUoKSxcbiAgICAgICAgbGFiZWxTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhsYWJlbE5vZGUpLFxuICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21MYWJlbFN0cmluZyhsYWJlbFN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHlBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiB5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tSlNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzaWduYXR1cmVOb2RlID0gc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRTaWduYXR1cmVOb2RlKCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21KU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUpTYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhc2lzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICByZWZlcmVuY2VOb2RlID0gc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRhcmdldEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0RnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUodGFyZ2V0RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0RnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlZmVyZW5jZU5vZGUgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlc29sdmVkID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5pc1Jlc29sdmVkKCk7XG5cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0b3BMZXZlbE1ldGFBc3NlcnRpb24gPSBudWxsO1xuXG4gIHJldHVybiB0b3BMZXZlbE1ldGFBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmFsQ29udGV4dEZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IG51bGw7XG5cbiAgcmV0dXJuIGdlbmVyYWxDb250ZXh0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFRlcm1Ob2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmVwbGFjZW1lbnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYWxDb250ZXh0RnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBudWxsO1xuXG4gIHJldHVybiBnZW5lcmFsQ29udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOb2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZS5nZXRUeXBlUHJlZml4Tm9kZSgpLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb21iaW5hdG9yTm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29tYmluYXRvck5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvciA9IGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhVHlwZU5hbWUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudEZyYW1lTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHJlcGxhY2VtZW50RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IChmcmFtZVN1YnN0aXR1dGlvbiB8fCB0ZXJtU3Vic3RpdHV0aW9uKTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RydWN0b3JOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29uc3RydWN0b3JOb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhbENvbnRleHRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gbnVsbDtcblxuICByZXR1cm4gZ2VuZXJhbENvbnRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmFsQ29udGV4dEZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBudWxsO1xuXG4gIHJldHVybiBnZW5lcmFsQ29udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcodGFyZ2V0UmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHRhcmdldFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSh0YXJnZXRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1TdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmICh0ZXJtU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50UmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUocmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFMZXZlbEFzc3VtcHRpb25zID0gW107XG5cbiAgcmV0dXJuIG1ldGFMZXZlbEFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCB0ZXJtcyA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7XG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGVzID0gdHlwZXNOb2RlLmdldFR5cGVOb2RlcygpLFxuICAgICAgICB0eXBlcyA9IHR5cGVOb2Rlcy5tYXAoKHR5cGVOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiB0eXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxzID0gbGFiZWxOb2Rlcy5tYXAoKGxhYmVsTm9kZSkgPT4ge1xuICAgIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIGxhYmVsU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobGFiZWxOb2RlKSxcbiAgICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21MYWJlbFN0cmluZyhsYWJlbFN0cmluZywgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VzID0gcHJlbWlzZU5vZGVzLm1hcCgocHJlbWlzZU5vZGUpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlID0gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1lbnROb2RlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyhoeXBvdGhlc2lzTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IGh5cG90aGVzaXNOb2Rlcy5tYXAoKGh5cG90aGVzZU5vZGUpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzID0gaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzO1xuICB9KTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uTm9kZXMubWFwKChhc3N1bXB0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uTm9kZXMubWFwKChzdXBwb3NpdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gZGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gc3ViRGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuIl0sIm5hbWVzIjpbImFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUiLCJhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMiLCJhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUiLCJheGlvbUZyb21BeGlvbU5vZGUiLCJheGlvbUZyb21TZWN0aW9uTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlIiwiY29uY2x1c2lvbkZyb21SdWxlTm9kZSIsImNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUiLCJkZXJpdmF0aW9uRnJvbVByb29mTm9kZSIsImVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21GcmFtZU5vZGUiLCJmcmFtZUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21KdWRnZW1lbnROb2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsQ29udGV4dEZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsQ29udGV4dEZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiZ2VuZXJhbENvbnRleHRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsImdlbmVyYWxDb250ZXh0RnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMiLCJoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUiLCJpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSIsImp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlIiwianVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJsYWJlbEZyb21MYWJlbE5vZGUiLCJsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwibGFiZWxzRnJvbUxhYmVsTm9kZXMiLCJsYWJlbHNGcm9tUnVsZU5vZGUiLCJsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwibGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwibGVtbWFGcm9tTGVtbWFOb2RlIiwibGVtbWFGcm9tU2VjdGlvbk5vZGUiLCJtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25Gcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwibWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlIiwibmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibmFtZUZyb21QYXJhbmV0ZXJOb2RlIiwibmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwibmFtZUZyb21Qcm9wZXJ0eU5vZGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwibmFtZUZyb21UeXBlUHJlZml4Tm9kZSIsIm5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwibm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlIiwicGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzIiwicGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByZWZpeE5hbWVGcm9tVHlwZU5vZGUiLCJwcmVtaXNlRnJvbVByZW1pc2VOb2RlIiwicHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzIiwicHJlbWlzZXNGcm9tUnVsZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9vZkZyb21Qcm9vZk5vZGUiLCJwcm9vZkZyb21SdWxlTm9kZSIsInByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsInByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlTm9kZSIsInJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21KU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwicnVsZUZyb21SdWxlTm9kZSIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUpTYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUpTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Gcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudEZyb21TdGVwTm9kZSIsInN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMiLCJzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN0ZXBGcm9tU3RlcE5vZGUiLCJzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZU5vZGUiLCJzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJ0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIiwidGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21NZXRhdmFyaWFibGVOb2RlIiwidGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlIiwidGVybXNGcm9tU2lnbmF0dXJlTm9kZSIsInRlcm1zRnJvbVRlcm1Ob2RlcyIsInRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUiLCJ0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uRnJvbVJlZmVyZW5jZU5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlIiwidHlwZUZyb21NZXRhdmFyaWFibGVOb2RlIiwidHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21UZXJtTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZXNGcm9tVHlwZXNOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZU5vZGUiLCJjb250ZXh0IiwidHlwZSIsImJhc2VUeXBlIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsIlR5cGUiLCJlbGVtZW50cyIsIm5vZGUiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJzdHJpbmciLCJ0ZXJtTm9kZSIsIlRlcm0iLCJub2RlQXNTdHJpbmciLCJ0ZXJtIiwic3RlcE5vZGUiLCJTdGVwIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RlcCIsInJ1bGVOb2RlIiwiUnVsZSIsInByb29mIiwibGFiZWxzIiwicHJlbWlzZXMiLCJjb25jbHVzaW9uIiwicnVsZVN0cmluZyIsInJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uIiwicnVsZSIsImxhYmVsTm9kZSIsIkxhYmVsIiwibWV0YXZhcmlhYmxlIiwibGFiZWwiLCJlcnJvck5vZGUiLCJFcnJvciIsImVycm9yIiwibGVtbWFOb2RlIiwiTGVtbWEiLCJ0b3BMZXZlbEFzc3NlcnRpb25Ob2RlIiwiZGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsInRvcExldmVsQXNzc2VydGlvblN0cmluZyIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImxlbW1hIiwiZnJhbWVOb2RlIiwiRnJhbWUiLCJhc3N1bXB0aW9ucyIsImZyYW1lIiwicHJvb2ZOb2RlIiwiUHJvb2YiLCJkZXJpdmF0aW9uIiwiYXhpb21Ob2RlIiwiQXhpb20iLCJheGlvbSIsInNlY3Rpb25Ob2RlIiwiaHlwb3RoZXNpc05vZGVzIiwiZ2V0SHlwb3RoZXNpc05vZGVzIiwidGhlb3JlbSIsImNvbmplY3R1cmUiLCJzZWN0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzVG9wTGV2ZWxBc3NlcnRpb24iLCJzZWN0aW9uIiwiU2VjdGlvbiIsInByZW1pc2VOb2RlIiwiUHJlbWlzZSIsInByb2NlZHVyZUNhbGwiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwicHJvcGVydHlOb2RlIiwiUHJvcGVydHkiLCJwcm9wZXJ0eU5hbWUiLCJnZXRQcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eSIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiaWRlbnRpZmllciIsInByb3BlcnR5UmVsYXRpb25zIiwidmFyaWFibGUiLCJzdWJwcm9vZk5vZGUiLCJTdWJwcm9vZiIsInN1YkRlcml2YXRpb24iLCJzdWJwcm9vZlN0cmluZyIsInN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24iLCJzdWJwcm9vZiIsImVxdWFsaXR5Tm9kZSIsIkVxdWFsaXR5IiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJlcXVhbGl0eSIsImRlZHVjdGlvbk5vZGUiLCJEZWR1Y3Rpb24iLCJzdGF0ZW1lbnROb2RlIiwiU3RhdGVtZW50Iiwic2lnbmF0dXJlTm9kZSIsIlNpZ25hdHVyZSIsInRlcm1zIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInRvcExldmVsTWV0YUFzc2VydGlvbiIsImp1ZGdlbWVudE5vZGUiLCJKdWRnZW1lbnQiLCJhc3N1bXB0aW9uIiwianVkZ2VtZW50IiwibWV0YUxlbW1hTm9kZSIsIk1ldGFMZW1tYSIsIm1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlIiwibWV0YUxldmVsQXNzdW1wdGlvbnMiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNEZWR1Y3Rpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9ucyIsIm1ldGFMZW1tYSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJnZXROYW1lIiwiZ2V0SWRlbnRpZmllciIsInBhcmFtZXRlciIsImh5cG90aGVzZU5vZGUiLCJIeXBvdGhzaXMiLCJoeXBvaHRlc2lzIiwiY29uamVjdHVyZU5vZGUiLCJDb25qZWN0dXJlIiwiY29tYmluYXRvck5vZGUiLCJDb21iaW5hdG9yIiwiY29tYmluYXRvciIsImNvbmNsdXNpb25Ob2RlIiwiQ29uY2x1c2lvbiIsImRlcml2YXRpb25Ob2RlIiwiRGVyaXZhdGlvbiIsInN0ZXBzT3JTdWJwcm9vZnMiLCJ0eXBlUHJlZml4Tm9kZSIsIlR5cGVQcmVmaXgiLCJ0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZUZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJjb25zdHJ1Y3Rvck5vZGUiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwic3VwcG9zaXRpb25Ob2RlIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsImVxdWl2YWxlbmNlTm9kZSIsIkVxdWl2YWxlbmNlIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImVxdWl2YWxlbmNlIiwibWV0YXRoZW9yZW1Ob2RlIiwiTWV0YXRoZW9yZW0iLCJtZXRhdGhlb3JlbSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhVHlwZSIsInN1YkRlcml2YXRpb25Ob2RlIiwiU3ViRGVyaXZhdGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJwcm9jZWR1cmVDYWxsTm9kZSIsIlByb2NlZHVyZUNhbGwiLCJwYXJhbWV0ZXJzIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsInByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyIsInN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwibmVnYXRlZCIsImlzTmVnYXRlZCIsImRlZmluZWRBc3NlcnRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uTm9kZSIsIlByb3BlcnR5UmVsYXRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uIiwidGVybVN1YnN0aXR1dGlvbk5vZGUiLCJUZXJtU3Vic3RpdHV0aW9uIiwiZ2VuZXJhbENvbnRleHQiLCJ0YXJnZXRUZXJtIiwicmVwbGFjZW1lbnRUZXJtIiwidGVybVN1YnN0aXR1dGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsIkZyYW1lU3Vic3RpdHV0aW9uIiwidGFyZ2V0RnJhbWUiLCJyZXBsYWNlbWVudEZyYW1lIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJQcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnRzIiwic3VicHJvb2ZBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsIlNhdGlzZmllc0Fzc2VydGlvbiIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJQcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVlbmNlIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwiZ2V0VHlwZU5vZGUiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0VmFyaWFibGVOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwiTWV0YUxldmVsQXNzdW1wdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwiVHlwZVByZWZpeERlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsIkNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJTaW1wbGVUeXBlRGVjbGFyYXRpb24iLCJzaW1wbGVUeXBlRGVjbGFyYXRpb24iLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiUmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwidGFyZ2V0UmVmZXJlbmNlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2UiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwiU3RhdGVtZW50U3Vic3RpdHV0aW9uIiwicmVzb2x2ZWQiLCJzdWJzdGl0dXRpb24iLCJ0YXJnZXRTdGF0ZW1lbnQiLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsInN0YXRlbWVudFN1YnN0aXR1dGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsIkNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsInR5cGVOYW1lIiwiZ2V0VHlwZU5hbWUiLCJnZXRQcm9vZk5vZGUiLCJsYWJlbE5vZGVzIiwiZ2V0TGFiZWxOb2RlcyIsInByZW1pc2VOb2RlcyIsImdldFByZW1pc2VOb2RlcyIsImdldEF4aW9tTm9kZSIsImdldExlbW1hTm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlU3RyaW5nIiwiZnJvbVJlZmVyZW5jZVN0cmluZyIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldFRoZW9yZW1Ob2RlIiwiZ2V0RnJhbWVOb2RlIiwidGVybU5vZGVzIiwiZ2V0QXNzdW1wdGlvbk5vZGVzIiwiZ2V0RGVyaXZhdGlvbk5vZGUiLCJvY25zdHJ1Y3Rvck5vZGUiLCJnZXRUZXJtTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsImdldFRlcm1Ob2RlcyIsIm1ldGF2YXJhaWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidHlwZW1Ob2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImdldENvbmplY3R1cmVOb2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJnZXRFcXVhbGl0eU5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJnZXRKdWRnZW1lbnROb2RlIiwic3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUiLCJpc1N0ZXBOb2RlIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwiZ2V0QXNzdW1wdGlvbk5vZGUiLCJjb25jbHVzaW5vTm9kZSIsImh5cG90aGVzaXNOb2RlIiwiZ2V0UHJvY2VkdXJlQ2FsbE5vZGUiLCJzdXBwb3NpdGlvbk5vZGVzIiwiZ2V0U3VwcG9zaXRpb25Ob2RlcyIsImdldFN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVydmlhdGlvbiIsIm1ldGF2YXJpYWJsZVN0cmluZyIsImdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUiLCJnZXRUeXBlQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlIiwiaXNTdWJwcm9vZk5vZGUiLCJwYXJhbWV0ZXJOb2RlcyIsImdldFBhcmFtZXRlck5vZGVzIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJnZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFRlcm1Ob2RlIiwiZ2V0VGFyZ2V0VGVybU5vZGUiLCJnZXREZWR1Y3Rpb25Ob2RlIiwiZ2V0U2lnbmF0dXJlTm9kZSIsImdldExhYmVsTm9kZSIsImxhYmVsU3RyaW5nIiwiZnJvbUxhYmVsU3RyaW5nIiwiZ2V0RnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudE5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJ5cG90aGVzZXMiLCJzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlIiwidGFyZ2V0RnJhbWVOb2RlIiwiZ2V0VGFyZ2V0RnJhbWVOb2RlIiwiaXNSZXNvbHZlZCIsImdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJyZXBsYWNlbWVudFRlcm1Ob2RlIiwiZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSIsInR5cGVzTm9kZSIsImdldFR5cGVzTm9kZSIsInR5cGVzIiwiZ2V0VHlwZVByZWZpeE5vZGUiLCJnZXRDb21iaW5hdG9yTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwicmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJnZXRSZXBsYWNlbWVudEZyYW1lTm9kZSIsImdldFByb3BlcnR5UmVsYXRpb25Ob2RlIiwiZ2V0Q29uc3RydWN0b3JOb2RlIiwidGFyZ2V0UmVmZXJlbmNlTm9kZSIsImdldFRhcmdldFJlZmVyZW5jZU5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VTdHJpbmciLCJ0YXJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsImdldFJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwibWFwIiwidHlwZU5vZGVzIiwiZ2V0VHlwZU5vZGVzIiwiaHlwb3RoZXNpcyIsInN0ZXBPclN1YnByb29mTm9kZXMiLCJnZXRTdGVwT3JTdWJwcm9vZk5vZGVzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUF5Y2dCQTtlQUFBQTs7UUFvdkJBQztlQUFBQTs7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
1725
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbixcbiAgICAgICAgIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNEZWR1Y3Rpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9ucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlO1xuXG4gIGlmICh0eXBlTm9kZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpO1xuXG4gICAgdHlwZSA9IGJhc2VUeXBlOyAgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBub2RlID0gdHlwZU5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJlZml4TmFtZSA9IHByZWZpeE5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gbm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICB0eXBlU3RyaW5nID0gdHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSxcbiAgICAgICAgICBzdHJpbmcgPSB0eXBlU3RyaW5nLCAgLy8vXG4gICAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgdHlwZSA9IG5ldyBUeXBlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBwcmVmaXhOYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdGVybSA9IG5ldyBUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGVwIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0ZXBOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcCA9IG5ldyBTdGVwKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSdWxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJ1bGVTdHJpbmcgPSBydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbihsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKSxcbiAgICAgICAgbm9kZSA9IHJ1bGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IHJ1bGVTdHJpbmcsICAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgcnVsZSA9IG5ldyBSdWxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBwcm9vZiwgbGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbik7XG5cbiAgcmV0dXJuIHJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBuZXcgTGFiZWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JGcm9tRXJyb3JOb2RlKGVycm9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVycm9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVycm9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCk7XG5cbiAgcmV0dXJuIGVycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSA9IGxlbW1hTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIG5vZGUgPSBsZW1tYU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBsZW1tYSA9IG5ldyBMZW1tYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gbmV3IEZyYW1lKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb29mID0gbmV3IFByb29mKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBkZXJpdmF0aW9uKTtcblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXhpb20gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gYXhpb21Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gW10sXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGF4aW9tTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGF4aW9tID0gbmV3IEF4aW9tKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzaXNOb2RlcyA9IHNlY3Rpb25Ob2RlLmdldEh5cG90aGVzaXNOb2RlcygpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSxcbiAgICAgICAgYXhpb20gPSBheGlvbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxlbW1hID0gbGVtbWFGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0aGVvcmVtID0gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2VjdGlvblN0cmluZyA9IHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc1RvcExldmVsQXNzZXJ0aW9uKGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSksXG4gICAgICAgIG5vZGUgPSBzZWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHNlY3Rpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzZWN0aW9uID0gbmV3IFNlY3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSk7XG5cbiAgcmV0dXJuIHNlY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJlbWlzZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmVtaXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gcHJlbWlzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gdGhlb3JlbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gdGhlb3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0aGVvcmVtID0gbmV3IFRoZW9yZW0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5vZGUuZ2V0UHJvcGVydHlOYW1lKCksXG4gICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBwcm9wZXJ0eU5hbWUsICAvLy9cbiAgICAgICAgcHJvcGVydHkgPSBuZXcgUHJvcGVydHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG5hbWUsIG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IG51bGwsXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdLFxuICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgaWRlbnRpZmllciwgcHJvcGVydHlSZWxhdGlvbnMpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJwcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZk5vZGUsIC8vL1xuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3VicHJvb2ZTdHJpbmcsICAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3VicHJvb2YgPSBuZXcgU3VicHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gZXF1YWxpdHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVkdWN0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlZHVjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IG5ldyBEZWR1Y3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvbiA9IHRvcExldmVsTWV0YUFzc2VydGlvbkZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBtZXRhdmFyaWFibGUsIHRvcExldmVsTWV0YUFzc2VydGlvbik7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBKdWRnZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0ganVkZ2VtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGp1ZGdlbWVudCA9IG5ldyBKdWRnZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGZyYW1lLCBhc3N1bXB0aW9uKTtcblxuICByZXR1cm4ganVkZ2VtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YUxlbW1hRnJvbU1ldGFMZW1tYU5vZGUobWV0YUxlbW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGFMZW1tYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlID0gbWV0YUxlbW1hTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbnMgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zRGVkdWN0aW9uQW5kTWV0YUxldmVsQXNzdW1wdGlvbnMobGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBtZXRhTGV2ZWxBc3N1bXB0aW9ucyksXG4gICAgICAgIG5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG1ldGFMZW1tYSA9IG5ldyBNZXRhTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIG1ldGFMZXZlbEFzc3VtcHRpb25zKTtcblxuICByZXR1cm4gbWV0YUxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBwYXJhbWV0ZXJOb2RlLmdldE5hbWUoKSxcbiAgICAgICAgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpLFxuICAgICAgICBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBuYW1lLCBpZGVudGlmaWVyKTtcblxuICByZXR1cm4gcGFyYW1ldGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbUpTaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBIeXBvdGhzaXMgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gaHlwb3RoZXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG9odGVzaXMgPSBuZXcgSHlwb3Roc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBoeXBvaHRlc2lzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gY29uamVjdHVyZU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBjb25qZWN0dXJlID0gbmV3IENvbmplY3R1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29tYmluYXRvciA9IG5ldyBDb21iaW5hdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmNsdXNpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uY2x1c2lvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbiA9IG5ldyBDb25jbHVzaW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVyaXZhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGVQcmVmaXggPSBuZXcgVHlwZVByZWZpeChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IG5ldyBBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBuZXcgQ29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIHR5cGUpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdXBwb3NpdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdXBwb3NpdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb24gPSBuZXcgU3VwcG9zaXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1aXZhbGVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1aXZhbGVuY2VOb2RlLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVxdWl2YWxlbmNlU3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICBzdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZywgLy8vXG4gICAgICAgIGVxdWl2YWxlbmNlID0gbmV3IEVxdWl2YWxlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlLCB0ZXJtcyk7XG5cbiAgcmV0dXJuIGVxdWl2YWxlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlKG1ldGF0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF0aGVvcmVtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUgPSBtZXRhdGhlb3JlbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zID0gbWV0YUxldmVsQXNzdW1wdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0RlZHVjdGlvbkFuZE1ldGFMZXZlbEFzc3VtcHRpb25zKGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgbWV0YUxldmVsQXNzdW1wdGlvbnMpLFxuICAgICAgICBub2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF0aGVvcmVtID0gbmV3IE1ldGF0aGVvcmVtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBtZXRhTGV2ZWxBc3N1bXB0aW9ucyk7XG5cbiAgcmV0dXJuIG1ldGF0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhVHlwZSA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSwgdGVybSwgdHlwZSwgbWV0YVR5cGUpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3ViRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJEZXJpdmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJEZXJpdmF0aW9uID0gbmV3IFN1YkRlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBzdWJEZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZUFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVDYWxsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nID0gcHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzKHByb2NlZHVyZVJlZmVyZW5jZSwgcGFyYW1ldGVycyksXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHByb2NlZHVyZUNhbGxTdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgcGFyYW1ldGVycywgcHJvY2VkdXJlUmVmZXJlbmNlKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcCA9IHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0ZXBPclN1YnByb29mID0gKHN0ZXAgfHwgc3VicHJvb2YpO1xuXG4gIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWZpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbiA9IG5ldyBEZWZpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCk7XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlSZWxhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uID0gbmV3IFByb3BlcnR5UmVsYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIHByb3BlcnR5KTtcblxuICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxDb250ZXh0RnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFRlcm0gPSByZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1TdWJzdGl0dXRpb24gPSBuZXcgVGVybVN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgZ2VuZXJhbENvbnRleHQsIHRhcmdldFRlcm0sIHJlcGxhY2VtZW50VGVybSk7XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxDb250ZXh0RnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gcmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbiA9IG5ldyBGcmFtZVN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgZ2VuZXJhbENvbnRleHQsIHRhcmdldEZyYW1lLCByZXBsYWNlbWVudEZyYW1lKTtcblxuICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBuZXcgUHJvcGVydHlBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIHByb3BlcnR5UmVsYXRpb24pO1xuXG4gIHJldHVybiBwcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJwcm9vZkFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBuZXcgU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0YXRlbWVudHMpO1xuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb250YWluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gbmV3IENvbnRhaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTYXRpc2ZpZXNBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvbiA9IG5ldyBTYXRpc2ZpZXNBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHNpZ25hdHVyZSwgcmVmZXJlbmNlKTtcblxuICByZXR1cm4gc2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb2NlZHVyZVJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBuYW1lID0gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZWVuY2UgPSBuZXcgUHJvY2VkdXJlUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBuYW1lKTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpLFxuICAgICAgICB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgdmFyaWFibGUsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gdmFyaWFibGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZXZlbEFzc3VtcHRpb25Gcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhTGV2ZWxBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGFMZXZlbEFzc3VtcHRpb24gPSBuZXcgTWV0YUxldmVsQXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBtZXRhTGV2ZWxBc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXhEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksICAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZVByZWZpeCA9IHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlUHJlZml4RGVjbGFyYXRpb24gPSBuZXcgVHlwZVByZWZpeERlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlUHJlZml4KTtcblxuICByZXR1cm4gdHlwZVByZWZpeERlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvckRlY2xhcmF0aW9uID0gbmV3IENvbWJpbmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgY29tYmluYXRvcik7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaW1wbGVUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2ltcGxlVHlwZURlY2xhcmF0aW9uID0gbmV3IFNpbXBsZVR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiBzaW1wbGVUeXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VTdWJzdGl0dXRpb25Gcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGdlbmVyYWxDb250ZXh0ID0gZ2VuZXJhbENvbnRleHRGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlID0gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlID0gcmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBuZXcgUmVmZXJlbmNlU3Vic3RpdHV0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBnZW5lcmFsQ29udGV4dCwgdGFyZ2V0UmVmZXJlbmNlLCByZXBsYWNlbWVudFJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcblxuICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxDb250ZXh0RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlc29sdmVkID0gcmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRhcmdldFN0YXRlbWVudCA9IHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gbmV3IFN0YXRlbWVudFN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgZ2VuZXJhbENvbnRleHQsIHJlc29sdmVkLCBzdWJzdGl0dXRpb24sIHRhcmdldFN0YXRlbWVudCwgcmVwbGFjZW1lbnRTdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gbmV3IENvbnN0cnVjdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHByb3Zpc2lvbmFsLCBjb25zdHJ1Y3Rvcik7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4VHlwZURlY2xhcmF0aW9uRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tcGxleFR5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbXBsZXhUeXBlRGVjbGFyYXRpb24gPSBuZXcgQ29tcGxleFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiBjb21wbGV4VHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBtZXRhVHlwZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBydWxlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gcnVsZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VOb2RlcyA9IHJ1bGVOb2RlLmdldFByZW1pc2VOb2RlcygpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBheGlvbSA9IG51bGw7XG5cbiAgY29uc3QgYXhpb21Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0QXhpb21Ob2RlKCk7XG5cbiAgaWYgKGF4aW9tTm9kZSAhPT0gbnVsbCkge1xuICAgIGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVtbWEgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hTm9kZSA9IHNlY3Rpb25Ob2RlLmdldExlbW1hTm9kZSgpO1xuXG4gIGlmIChsZW1tYU5vZGUgIT09IG51bGwpIHtcbiAgICBsZW1tYSA9IGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwcm9wZXJ0eU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGVwTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHN0ZXBOb2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VOb2RlKTtcblxuICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlUHJlZml4TmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBlclR5cGVzID0gbnVsbDtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgcHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHByZWZpeE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbmNsdXNpb25Ob2RlID0gcnVsZU5vZGUuZ2V0Q29uY2x1c2lvbk5vZGUoKSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGhlb3JlbSA9IG51bGw7XG5cbiAgY29uc3QgdGhlb3JlbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRUaGVvcmVtTm9kZSgpO1xuXG4gIGlmICh0aGVvcmVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRoZW9yZW0gPSB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZXJpdmF0aW9uTm9kZSA9IHByb29mTm9kZS5nZXREZXJpdmF0aW9uTm9kZSgpLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBvY25zdHJ1Y3Rvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUob2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9uTm9kZXMgPSBmcmFtZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBlcXVpdmFsZW5jZU5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmFpYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICBuYW1lID0gbWV0YXZhcmFpYmxlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlbU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxhYmVsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25qZWN0dXJlID0gbnVsbDtcblxuICBjb25zdCBjb25qZWN0dXJlTm9kZSA9IHNlY3Rpb25Ob2RlLmdldENvbmplY3R1cmVOb2RlKCk7XG5cbiAgaWYgKGNvbmplY3R1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRFcXVhbGl0eU5vZGUoKTtcblxuICBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgaWRlbnRpZmllciA9IHZhcmlhYmxlSWRlbnRpZmllcjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEp1ZGdlbWVudE5vZGUoKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RlcCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGUuaXNTdGVwTm9kZSgpO1xuXG4gIGlmIChzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSkge1xuICAgIGNvbnN0IHN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbkZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEFzc3VtcHRpb25Ob2RlKCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJhbWV0ZXJOb2RlLmdldElkZW50aWZpZXIoKTtcblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBoeXBvdGhlc2lzTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IHByZW1pc2VOb2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc3VicHJvb2ZOb2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdXBwb3NpdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50OyAvLy9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViRGVyaXZhdGlvbk5vZGUgPSBzdWJwcm9vZk5vZGUuZ2V0U3ViRGVyaXZhdGlvbk5vZGUoKSxcbiAgICAgICAgc3ViRGVydmlhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdWJEZXJ2aWF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gbWV0YXZhcmlhYmxlU3RyaW5nLCAvLy9cbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNhdGlzZmllc0Fzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSA9IHN0ZXBOb2RlLmdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VHlwZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3VicHJvb2ZPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLmlzU3VicHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUpIHtcbiAgICBjb25zdCBzdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFBhcmFtZXRlck5vZGVzKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzKHBhcmFtZXRlck5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRMYWJlbE5vZGVzKCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGRlZmluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1TdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmICh0ZXJtU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0YXJnZXRUZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRhcmdldFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRhcmdldFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9vZk5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXRQcm9vZk5vZGUoKSxcbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBsYWJlbE5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXRMYWJlbE5vZGUoKSxcbiAgICAgICAgbGFiZWxTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhsYWJlbE5vZGUpLFxuICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21MYWJlbFN0cmluZyhsYWJlbFN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHlBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiB5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tSlNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzaWduYXR1cmVOb2RlID0gc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRTaWduYXR1cmVOb2RlKCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21KU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUpTYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhc2lzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICByZWZlcmVuY2VOb2RlID0gc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRhcmdldEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0RnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUodGFyZ2V0RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0RnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlZmVyZW5jZU5vZGUgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlc29sdmVkID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5pc1Jlc29sdmVkKCk7XG5cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0b3BMZXZlbE1ldGFBc3NlcnRpb24gPSBudWxsO1xuXG4gIHJldHVybiB0b3BMZXZlbE1ldGFBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmFsQ29udGV4dEZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IG51bGw7XG5cbiAgcmV0dXJuIGdlbmVyYWxDb250ZXh0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFRlcm1Ob2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmVwbGFjZW1lbnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYWxDb250ZXh0RnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBudWxsO1xuXG4gIHJldHVybiBnZW5lcmFsQ29udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOb2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZS5nZXRUeXBlUHJlZml4Tm9kZSgpLFxuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb21iaW5hdG9yTm9kZSA9IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29tYmluYXRvck5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvciA9IGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhVHlwZU5hbWUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlc05vZGUoKTtcblxuICBpZiAodHlwZXNOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KTtcblxuICAgIHN1cGVyVHlwZXMgPSB0eXBlczsgLy8vXG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudEZyYW1lTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKHJlcGxhY2VtZW50RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IChmcmFtZVN1YnN0aXR1dGlvbiB8fCB0ZXJtU3Vic3RpdHV0aW9uKTtcblxuICByZXR1cm4gc3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uc3RydWN0b3JOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0Q29uc3RydWN0b3JOb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlKGNvbnN0cnVjdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhbENvbnRleHRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gbnVsbDtcblxuICByZXR1cm4gZ2VuZXJhbENvbnRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmFsQ29udGV4dEZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBudWxsO1xuXG4gIHJldHVybiBnZW5lcmFsQ29udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcodGFyZ2V0UmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHRhcmdldFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSh0YXJnZXRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1TdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmICh0ZXJtU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50UmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUocmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRTdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFMZXZlbEFzc3VtcHRpb25zID0gW107XG5cbiAgcmV0dXJuIG1ldGFMZXZlbEFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCB0ZXJtcyA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7XG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGVzID0gdHlwZXNOb2RlLmdldFR5cGVOb2RlcygpLFxuICAgICAgICB0eXBlcyA9IHR5cGVOb2Rlcy5tYXAoKHR5cGVOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiB0eXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxzID0gbGFiZWxOb2Rlcy5tYXAoKGxhYmVsTm9kZSkgPT4ge1xuICAgIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIGxhYmVsU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobGFiZWxOb2RlKSxcbiAgICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21MYWJlbFN0cmluZyhsYWJlbFN0cmluZywgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VzID0gcHJlbWlzZU5vZGVzLm1hcCgocHJlbWlzZU5vZGUpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlID0gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnRzID0gc3RhdGVtZW50Tm9kZXMubWFwKChzdGF0ZW1lbnROb2RlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyhoeXBvdGhlc2lzTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IGh5cG90aGVzaXNOb2Rlcy5tYXAoKGh5cG90aGVzZU5vZGUpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzID0gaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzO1xuICB9KTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uTm9kZXMubWFwKChhc3N1bXB0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uTm9kZXMubWFwKChzdXBwb3NpdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gZGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gc3ViRGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcE9yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuIl0sIm5hbWVzIjpbImFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUiLCJhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMiLCJhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUiLCJheGlvbUZyb21BeGlvbU5vZGUiLCJheGlvbUZyb21TZWN0aW9uTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlIiwiY29uY2x1c2lvbkZyb21SdWxlTm9kZSIsImNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUiLCJkZXJpdmF0aW9uRnJvbVByb29mTm9kZSIsImVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21GcmFtZU5vZGUiLCJmcmFtZUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21KdWRnZW1lbnROb2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsQ29udGV4dEZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsQ29udGV4dEZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiZ2VuZXJhbENvbnRleHRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsImdlbmVyYWxDb250ZXh0RnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMiLCJoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUiLCJpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSIsImp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlIiwianVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJsYWJlbEZyb21MYWJlbE5vZGUiLCJsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwibGFiZWxzRnJvbUxhYmVsTm9kZXMiLCJsYWJlbHNGcm9tUnVsZU5vZGUiLCJsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwibGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwibGVtbWFGcm9tTGVtbWFOb2RlIiwibGVtbWFGcm9tU2VjdGlvbk5vZGUiLCJtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25Gcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwibWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlIiwibmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibmFtZUZyb21QYXJhbmV0ZXJOb2RlIiwibmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwibmFtZUZyb21Qcm9wZXJ0eU5vZGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwibmFtZUZyb21UeXBlUHJlZml4Tm9kZSIsIm5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwibm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlIiwicGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzIiwicGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByZWZpeE5hbWVGcm9tVHlwZU5vZGUiLCJwcmVtaXNlRnJvbVByZW1pc2VOb2RlIiwicHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzIiwicHJlbWlzZXNGcm9tUnVsZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9vZkZyb21Qcm9vZk5vZGUiLCJwcm9vZkZyb21SdWxlTm9kZSIsInByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsInByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlTm9kZSIsInJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21KU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwicnVsZUZyb21SdWxlTm9kZSIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUpTYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUpTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Gcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudEZyb21TdGVwTm9kZSIsInN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMiLCJzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN0ZXBGcm9tU3RlcE5vZGUiLCJzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZU5vZGUiLCJzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJ0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIiwidGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21NZXRhdmFyaWFibGVOb2RlIiwidGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlIiwidGVybXNGcm9tU2lnbmF0dXJlTm9kZSIsInRlcm1zRnJvbVRlcm1Ob2RlcyIsInRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUiLCJ0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uRnJvbVJlZmVyZW5jZU5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tRXF1aXZhbGVuY2VOb2RlIiwidHlwZUZyb21NZXRhdmFyaWFibGVOb2RlIiwidHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21UZXJtTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZXNGcm9tVHlwZXNOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZU5vZGUiLCJjb250ZXh0IiwidHlwZSIsImJhc2VUeXBlIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsIlR5cGUiLCJlbGVtZW50cyIsIm5vZGUiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJzdHJpbmciLCJsaW5lSW5kZXgiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJub2RlQXNTdHJpbmciLCJ0ZXJtIiwic3RlcE5vZGUiLCJTdGVwIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RlcCIsInJ1bGVOb2RlIiwiUnVsZSIsInByb29mIiwibGFiZWxzIiwicHJlbWlzZXMiLCJjb25jbHVzaW9uIiwicnVsZVN0cmluZyIsInJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uIiwicnVsZSIsImxhYmVsTm9kZSIsIkxhYmVsIiwibWV0YXZhcmlhYmxlIiwibGFiZWwiLCJlcnJvck5vZGUiLCJFcnJvciIsImVycm9yIiwibGVtbWFOb2RlIiwiTGVtbWEiLCJ0b3BMZXZlbEFzc3NlcnRpb25Ob2RlIiwiZGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsInRvcExldmVsQXNzc2VydGlvblN0cmluZyIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImxlbW1hIiwiZnJhbWVOb2RlIiwiRnJhbWUiLCJhc3N1bXB0aW9ucyIsImZyYW1lIiwicHJvb2ZOb2RlIiwiUHJvb2YiLCJkZXJpdmF0aW9uIiwiYXhpb21Ob2RlIiwiQXhpb20iLCJheGlvbSIsInNlY3Rpb25Ob2RlIiwiaHlwb3RoZXNpc05vZGVzIiwiZ2V0SHlwb3RoZXNpc05vZGVzIiwidGhlb3JlbSIsImNvbmplY3R1cmUiLCJzZWN0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzVG9wTGV2ZWxBc3NlcnRpb24iLCJzZWN0aW9uIiwiU2VjdGlvbiIsInByZW1pc2VOb2RlIiwiUHJlbWlzZSIsInByb2NlZHVyZUNhbGwiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwicHJvcGVydHlOb2RlIiwiUHJvcGVydHkiLCJwcm9wZXJ0eU5hbWUiLCJnZXRQcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eSIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiaWRlbnRpZmllciIsInByb3BlcnR5UmVsYXRpb25zIiwidmFyaWFibGUiLCJzdWJwcm9vZk5vZGUiLCJTdWJwcm9vZiIsInN1YkRlcml2YXRpb24iLCJzdWJwcm9vZlN0cmluZyIsInN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24iLCJzdWJwcm9vZiIsImVxdWFsaXR5Tm9kZSIsIkVxdWFsaXR5IiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJlcXVhbGl0eSIsImRlZHVjdGlvbk5vZGUiLCJEZWR1Y3Rpb24iLCJzdGF0ZW1lbnROb2RlIiwiU3RhdGVtZW50Iiwic2lnbmF0dXJlTm9kZSIsIlNpZ25hdHVyZSIsInRlcm1zIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInRvcExldmVsTWV0YUFzc2VydGlvbiIsImp1ZGdlbWVudE5vZGUiLCJKdWRnZW1lbnQiLCJhc3N1bXB0aW9uIiwianVkZ2VtZW50IiwibWV0YUxlbW1hTm9kZSIsIk1ldGFMZW1tYSIsIm1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlIiwibWV0YUxldmVsQXNzdW1wdGlvbnMiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNEZWR1Y3Rpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9ucyIsIm1ldGFMZW1tYSIsInBhcmFtZXRlck5vZGUiLCJQYXJhbWV0ZXIiLCJnZXROYW1lIiwiZ2V0SWRlbnRpZmllciIsInBhcmFtZXRlciIsImh5cG90aGVzZU5vZGUiLCJIeXBvdGhzaXMiLCJoeXBvaHRlc2lzIiwiY29uamVjdHVyZU5vZGUiLCJDb25qZWN0dXJlIiwiY29tYmluYXRvck5vZGUiLCJDb21iaW5hdG9yIiwiY29tYmluYXRvciIsImNvbmNsdXNpb25Ob2RlIiwiQ29uY2x1c2lvbiIsImRlcml2YXRpb25Ob2RlIiwiRGVyaXZhdGlvbiIsInN0ZXBzT3JTdWJwcm9vZnMiLCJ0eXBlUHJlZml4Tm9kZSIsIlR5cGVQcmVmaXgiLCJ0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZUZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJjb25zdHJ1Y3Rvck5vZGUiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwic3VwcG9zaXRpb25Ob2RlIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsImVxdWl2YWxlbmNlTm9kZSIsIkVxdWl2YWxlbmNlIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImVxdWl2YWxlbmNlIiwibWV0YXRoZW9yZW1Ob2RlIiwiTWV0YXRoZW9yZW0iLCJtZXRhdGhlb3JlbSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhVHlwZSIsInN1YkRlcml2YXRpb25Ob2RlIiwiU3ViRGVyaXZhdGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJwcm9jZWR1cmVDYWxsTm9kZSIsIlByb2NlZHVyZUNhbGwiLCJwYXJhbWV0ZXJzIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsInByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyIsInN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwibmVnYXRlZCIsImlzTmVnYXRlZCIsImRlZmluZWRBc3NlcnRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uTm9kZSIsIlByb3BlcnR5UmVsYXRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uIiwidGVybVN1YnN0aXR1dGlvbk5vZGUiLCJUZXJtU3Vic3RpdHV0aW9uIiwiZ2VuZXJhbENvbnRleHQiLCJ0YXJnZXRUZXJtIiwicmVwbGFjZW1lbnRUZXJtIiwidGVybVN1YnN0aXR1dGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsIkZyYW1lU3Vic3RpdHV0aW9uIiwidGFyZ2V0RnJhbWUiLCJyZXBsYWNlbWVudEZyYW1lIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJQcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnRzIiwic3VicHJvb2ZBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsIlNhdGlzZmllc0Fzc2VydGlvbiIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJQcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVlbmNlIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwiZ2V0VHlwZU5vZGUiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0VmFyaWFibGVOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwiTWV0YUxldmVsQXNzdW1wdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwiVHlwZVByZWZpeERlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsIkNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJTaW1wbGVUeXBlRGVjbGFyYXRpb24iLCJzaW1wbGVUeXBlRGVjbGFyYXRpb24iLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiUmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwidGFyZ2V0UmVmZXJlbmNlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2UiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwiU3RhdGVtZW50U3Vic3RpdHV0aW9uIiwicmVzb2x2ZWQiLCJzdWJzdGl0dXRpb24iLCJ0YXJnZXRTdGF0ZW1lbnQiLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsInN0YXRlbWVudFN1YnN0aXR1dGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsIkNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsInR5cGVOYW1lIiwiZ2V0VHlwZU5hbWUiLCJnZXRQcm9vZk5vZGUiLCJsYWJlbE5vZGVzIiwiZ2V0TGFiZWxOb2RlcyIsInByZW1pc2VOb2RlcyIsImdldFByZW1pc2VOb2RlcyIsImdldEF4aW9tTm9kZSIsImdldExlbW1hTm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlU3RyaW5nIiwiZnJvbVJlZmVyZW5jZVN0cmluZyIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldFRoZW9yZW1Ob2RlIiwiZ2V0RnJhbWVOb2RlIiwidGVybU5vZGVzIiwiZ2V0QXNzdW1wdGlvbk5vZGVzIiwiZ2V0RGVyaXZhdGlvbk5vZGUiLCJvY25zdHJ1Y3Rvck5vZGUiLCJnZXRUZXJtTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsImdldFRlcm1Ob2RlcyIsIm1ldGF2YXJhaWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidHlwZW1Ob2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImdldENvbmplY3R1cmVOb2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJnZXRFcXVhbGl0eU5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJnZXRKdWRnZW1lbnROb2RlIiwic3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUiLCJpc1N0ZXBOb2RlIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwiZ2V0QXNzdW1wdGlvbk5vZGUiLCJjb25jbHVzaW5vTm9kZSIsImh5cG90aGVzaXNOb2RlIiwiZ2V0UHJvY2VkdXJlQ2FsbE5vZGUiLCJzdXBwb3NpdGlvbk5vZGVzIiwiZ2V0U3VwcG9zaXRpb25Ob2RlcyIsImdldFN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVydmlhdGlvbiIsIm1ldGF2YXJpYWJsZVN0cmluZyIsImdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUiLCJnZXRUeXBlQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlIiwiaXNTdWJwcm9vZk5vZGUiLCJwYXJhbWV0ZXJOb2RlcyIsImdldFBhcmFtZXRlck5vZGVzIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJnZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFRlcm1Ob2RlIiwiZ2V0VGFyZ2V0VGVybU5vZGUiLCJnZXREZWR1Y3Rpb25Ob2RlIiwiZ2V0U2lnbmF0dXJlTm9kZSIsImdldExhYmVsTm9kZSIsImxhYmVsU3RyaW5nIiwiZnJvbUxhYmVsU3RyaW5nIiwiZ2V0RnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudE5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJ5cG90aGVzZXMiLCJzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlIiwidGFyZ2V0RnJhbWVOb2RlIiwiZ2V0VGFyZ2V0RnJhbWVOb2RlIiwiaXNSZXNvbHZlZCIsImdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJyZXBsYWNlbWVudFRlcm1Ob2RlIiwiZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSIsInR5cGVzTm9kZSIsImdldFR5cGVzTm9kZSIsInR5cGVzIiwiZ2V0VHlwZVByZWZpeE5vZGUiLCJnZXRDb21iaW5hdG9yTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwicmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJnZXRSZXBsYWNlbWVudEZyYW1lTm9kZSIsImdldFByb3BlcnR5UmVsYXRpb25Ob2RlIiwiZ2V0Q29uc3RydWN0b3JOb2RlIiwidGFyZ2V0UmVmZXJlbmNlTm9kZSIsImdldFRhcmdldFJlZmVyZW5jZU5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VTdHJpbmciLCJ0YXJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsImdldFJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwibWFwIiwidHlwZU5vZGVzIiwiZ2V0VHlwZU5vZGVzIiwiaHlwb3RoZXNpcyIsInN0ZXBPclN1YnByb29mTm9kZXMiLCJnZXRTdGVwT3JTdWJwcm9vZk5vZGVzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFrYmdCQTtlQUFBQTs7UUFvekJBQztlQUFBQTs7UUF3MEJBQztlQUFBQTs7UUEzL0JBQztlQUFBQTs7UUE5NUJBQztlQUFBQTs7UUFvd0JBQztlQUFBQTs7UUFuS0FDO2VBQUFBOztRQTRrQ0FDO2VBQUFBOztRQTc3Q0FDO2VBQUFBOztRQWtjQUM7ZUFBQUE7O1FBdmJBQztlQUFBQTs7UUFrbUJBQztlQUFBQTs7UUEvbkJBQztlQUFBQTs7UUFteEJBQztlQUFBQTs7UUEvVUFDO2VBQUFBOztRQTBrQ0FDO2VBQUFBOztRQW44Q0FDO2VBQUFBOztRQTJOQUM7ZUFBQUE7O1FBKy9CQUM7ZUFBQUE7O1FBaDVDQUM7ZUFBQUE7O1FBMnpDQUM7ZUFBQUE7O1FBK01BQztlQUFBQTs7UUFydENBQztlQUFBQTs7UUEwOUJBQztlQUFBQTs7UUE1bkNBQztlQUFBQTs7UUE4bkJBQztlQUFBQTs7UUE3eEJBQztlQUFBQTs7UUE2NUJBQztlQUFBQTs7UUFuc0JBQztlQUFBQTs7UUFwWEFDO2VBQUFBOztRQXk0Q0FDO2VBQUFBOztRQTFHQUM7ZUFBQUE7O1FBbndDQUM7ZUFBQUE7O1FBOHlDQUM7ZUFBQUE7O1FBdmFBQztlQUFBQTs7UUF6WkFDO2VBQUFBOztRQTAvQkFDO2VBQUFBOztRQTZWQUM7ZUFBQUE7O1FBNUpBQztlQUFBQTs7UUFtSEFDO2VBQUFBOztRQU5BQztlQUFBQTs7UUF4SUFDO2VBQUFBOztRQXdS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