occam-verify-cli 1.0.890 → 1.0.895

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 (41) hide show
  1. package/lib/context/file/nominal.js +9 -3
  2. package/lib/context/mnemic.js +68 -8
  3. package/lib/context/synoptic.js +33 -1
  4. package/lib/context.js +11 -1
  5. package/lib/element/assertion/property.js +7 -7
  6. package/lib/element/declaration/complexType.js +93 -134
  7. package/lib/element/declaration/property.js +81 -0
  8. package/lib/element/declaration/simpleType.js +8 -9
  9. package/lib/element/declaration/typePrefix.js +2 -27
  10. package/lib/element/metavariable.js +4 -4
  11. package/lib/element/property.js +81 -12
  12. package/lib/element/propertyRelation.js +37 -15
  13. package/lib/element/statement.js +2 -2
  14. package/lib/element/substitution/statement.js +2 -2
  15. package/lib/element/typePrefix.js +26 -1
  16. package/lib/preamble.js +2 -1
  17. package/lib/utilities/element.js +119 -18
  18. package/lib/utilities/json.js +10 -24
  19. package/lib/utilities/string.js +20 -2
  20. package/lib/utilities/synoptic.js +23 -1
  21. package/package.json +1 -1
  22. package/src/context/file/nominal.js +10 -2
  23. package/src/context/mnemic.js +123 -14
  24. package/src/context/synoptic.js +49 -1
  25. package/src/context.js +16 -0
  26. package/src/element/assertion/property.js +6 -6
  27. package/src/element/declaration/complexType.js +110 -168
  28. package/src/element/declaration/property.js +99 -0
  29. package/src/element/declaration/simpleType.js +8 -15
  30. package/src/element/declaration/typePrefix.js +1 -38
  31. package/src/element/metavariable.js +3 -3
  32. package/src/element/property.js +122 -13
  33. package/src/element/propertyRelation.js +54 -14
  34. package/src/element/statement.js +1 -1
  35. package/src/element/substitution/statement.js +1 -1
  36. package/src/element/typePrefix.js +36 -0
  37. package/src/preamble.js +1 -0
  38. package/src/utilities/element.js +139 -36
  39. package/src/utilities/json.js +16 -28
  40. package/src/utilities/string.js +37 -12
  41. package/src/utilities/synoptic.js +21 -1
@@ -138,6 +138,9 @@ _export(exports, {
138
138
  get identifierFromParameterNode () {
139
139
  return identifierFromParameterNode;
140
140
  },
141
+ get identifierFromParamterNode () {
142
+ return identifierFromParamterNode;
143
+ },
141
144
  get identifierFromVarialbeNode () {
142
145
  return identifierFromVarialbeNode;
143
146
  },
@@ -210,6 +213,9 @@ _export(exports, {
210
213
  get nameFromMetavariableNode () {
211
214
  return nameFromMetavariableNode;
212
215
  },
216
+ get nameFromParamterNode () {
217
+ return nameFromParamterNode;
218
+ },
213
219
  get nameFromParaneterNode () {
214
220
  return nameFromParaneterNode;
215
221
  },
@@ -291,6 +297,18 @@ _export(exports, {
291
297
  get propertyAssertionFromStatementNode () {
292
298
  return propertyAssertionFromStatementNode;
293
299
  },
300
+ get propertyDeclarationFromPropertyDeclarationNode () {
301
+ return propertyDeclarationFromPropertyDeclarationNode;
302
+ },
303
+ get propertyDeclarationsFromComplexTypeDeclarationNode () {
304
+ return propertyDeclarationsFromComplexTypeDeclarationNode;
305
+ },
306
+ get propertyDeclarationsFromPropertyDeclarationNodes () {
307
+ return propertyDeclarationsFromPropertyDeclarationNodes;
308
+ },
309
+ get propertyFromPropertyDeclarationNode () {
310
+ return propertyFromPropertyDeclarationNode;
311
+ },
294
312
  get propertyFromPropertyNode () {
295
313
  return propertyFromPropertyNode;
296
314
  },
@@ -303,6 +321,9 @@ _export(exports, {
303
321
  get propertyRelationFromPropertyRelationNode () {
304
322
  return propertyRelationFromPropertyRelationNode;
305
323
  },
324
+ get propertyRelationsFromVariableNode () {
325
+ return propertyRelationsFromVariableNode;
326
+ },
306
327
  get provisionalFromComplexTypeDeclarationNode () {
307
328
  return provisionalFromComplexTypeDeclarationNode;
308
329
  },
@@ -315,6 +336,9 @@ _export(exports, {
315
336
  get provisionalFromTypeNode () {
316
337
  return provisionalFromTypeNode;
317
338
  },
339
+ get provisionalFromVariableDeclarationNode () {
340
+ return provisionalFromVariableDeclarationNode;
341
+ },
318
342
  get referenceFromAssumptionNode () {
319
343
  return referenceFromAssumptionNode;
320
344
  },
@@ -585,6 +609,12 @@ _export(exports, {
585
609
  get typeFromMetavariableNode () {
586
610
  return typeFromMetavariableNode;
587
611
  },
612
+ get typeFromPropertyDeclarationNode () {
613
+ return typeFromPropertyDeclarationNode;
614
+ },
615
+ get typeFromPropertyNode () {
616
+ return typeFromPropertyNode;
617
+ },
588
618
  get typeFromSimpleTypeDeclarationNode () {
589
619
  return typeFromSimpleTypeDeclarationNode;
590
620
  },
@@ -597,6 +627,12 @@ _export(exports, {
597
627
  get typeFromTypeNode () {
598
628
  return typeFromTypeNode;
599
629
  },
630
+ get typeFromVariableDeclarationNode () {
631
+ return typeFromVariableDeclarationNode;
632
+ },
633
+ get typeFromVariableNode () {
634
+ return typeFromVariableNode;
635
+ },
600
636
  get typePrefixDeclarationFromTypePrefixDeclarationNode () {
601
637
  return typePrefixDeclarationFromTypePrefixDeclarationNode;
602
638
  },
@@ -615,6 +651,9 @@ _export(exports, {
615
651
  get variableFromTermNode () {
616
652
  return variableFromTermNode;
617
653
  },
654
+ get variableFromVariableDeclarationNode () {
655
+ return variableFromVariableDeclarationNode;
656
+ },
618
657
  get variableFromVariableNode () {
619
658
  return variableFromVariableNode;
620
659
  }
@@ -686,7 +725,9 @@ function proofFromProofNode(proofNode, context) {
686
725
  return proof;
687
726
  }
688
727
  function axiomFromAxiomNode(axiomNode, context) {
689
- 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);
728
+ 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 = hypothesesFromTopLevelAssertionNode(topLevelAsssertionNode, context), topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = axiomNode, string = topLevelAsssertionString, lineIndex = null;
729
+ context = null;
730
+ const axiom = new Axiom(context, string, node, lineIndex, labels, suppositions, deduction, proof, signature, hypotheses);
690
731
  return axiom;
691
732
  }
692
733
  function sectionFromSectionNode(sectionNode, context) {
@@ -700,25 +741,28 @@ function premiseFromPremiseNode(premiseNode, context) {
700
741
  return premise;
701
742
  }
702
743
  function theoremFromTheoremNode(theoremNode, context) {
703
- 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;
744
+ 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 = hypothesesFromTopLevelAssertionNode(topLevelAsssertionNode, context), topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = theoremNode, string = topLevelAsssertionString, lineIndex = null;
704
745
  context = null;
705
746
  const theorem = new Theorem(context, string, node, lineIndex, labels, suppositions, deduction, proof, signature, hypotheses);
706
747
  return theorem;
707
748
  }
708
749
  function propertyFromPropertyNode(propertyNode, context) {
709
- const { Property } = _elements.default, node = propertyNode, string = context.nodeAsString(node), lineIndex = null, propertyName = propertyNode.getPropertyName(), nominalTypeName = null, name = propertyName; ///
710
- context = null;
711
- const property = new Property(context, string, node, lineIndex, name, nominalTypeName);
750
+ let property = null;
751
+ if (propertyNode != null) {
752
+ const { Property } = _elements.default, node = propertyNode, string = context.nodeAsString(node), lineIndex = null, name = nameFromPropertyNode(propertyNode, context), type = typeFromPropertyNode(propertyNode, context);
753
+ context = null;
754
+ property = new Property(context, string, node, lineIndex, name, type);
755
+ }
712
756
  return property;
713
757
  }
714
758
  function variableFromVariableNode(variableNode, context) {
715
- const { Variable } = _elements.default, node = variableNode, string = context.nodeAsString(node), lineIndex = null, type = null, identifier = identifierFromVarialbeNode(variableNode, context), propertyRelations = [];
759
+ const { Variable } = _elements.default, node = variableNode, string = context.nodeAsString(node), lineIndex = null, type = typeFromVariableNode(variableNode, context), identifier = identifierFromVarialbeNode(variableNode, context), propertyRelations = propertyRelationsFromVariableNode(variableNode, context);
716
760
  context = null;
717
761
  const variable = new Variable(context, string, node, lineIndex, type, identifier, propertyRelations);
718
762
  return variable;
719
763
  }
720
764
  function subproofFromSubproofNode(subproofNode, context) {
721
- 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;
765
+ const { Subproof } = _elements.default, node = subproofNode, lineIndex = null, suppositions = suppositionsFromSubproofNode(subproofNode, context), subDerivation = subDerivationFromSubproofNode(subproofNode, context), subproofString = (0, _string.subproofStringFromSuppositionsAndSubDerivation)(suppositions, subDerivation, context), string = subproofString; ///
722
766
  context = null;
723
767
  const subproof = new Subproof(context, string, node, lineIndex, suppositions, subDerivation);
724
768
  return subproof;
@@ -762,7 +806,7 @@ function metaLemmaFromMetaLemmaNode(metaLemmaNode, context) {
762
806
  return metaLemma;
763
807
  }
764
808
  function parameterFromParameterNode(parameterNode, context) {
765
- const { Parameter } = _elements.default, node = parameterNode, string = context.nodeAsString(node), lineIndex = null, name = parameterNode.getName(), identifier = parameterNode.getIdentifier();
809
+ const { Parameter } = _elements.default, node = parameterNode, string = context.nodeAsString(node), lineIndex = null, name = nameFromParamterNode(parameterNode, context), identifier = identifierFromParamterNode(parameterNode, context);
766
810
  context = null;
767
811
  const parameter = new Parameter(context, string, node, lineIndex, name, identifier);
768
812
  return parameter;
@@ -780,7 +824,7 @@ function hypothesisFromHypothesisNode(hypotheseNode, context) {
780
824
  return hypohtesis;
781
825
  }
782
826
  function conjectureFromConjectureNode(conjectureNode, context) {
783
- 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;
827
+ 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 = hypothesesFromTopLevelAssertionNode(topLevelAsssertionNode, context), topLevelAsssertionString = (0, _string.topLevelAssertionStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = conjectureNode, string = topLevelAsssertionString, lineIndex = null;
784
828
  context = null;
785
829
  const conjecture = new Conjecture(context, string, node, lineIndex, labels, suppositions, deduction, proof, signature, hypotheses);
786
830
  return conjecture;
@@ -802,9 +846,9 @@ function derivationFromDerivationNode(derivationNode, context) {
802
846
  return derivation;
803
847
  }
804
848
  function typePrefixFromTypePrefixNode(typePrefixNode, context) {
805
- const { TypePrefix } = _elements.default, node = typePrefixNode, string = context.nodeAsString(node), lineIndex = null, term = termFromTypePrefixNode(typePrefixNode, context), type = typeFromTypePrefixNode(typePrefixNode, context);
849
+ const { TypePrefix } = _elements.default, node = typePrefixNode, string = context.nodeAsString(node), lineIndex = null, name = nameFromTypePrefixNode(typePrefixNode, context);
806
850
  context = null;
807
- const typePrefix = new TypePrefix(context, string, node, lineIndex, term, type);
851
+ const typePrefix = new TypePrefix(context, string, node, lineIndex, name);
808
852
  return typePrefix;
809
853
  }
810
854
  function assumptionFromAssumptionNode(assumptionNode, context) {
@@ -900,7 +944,7 @@ function subproofAssertionFromSubproofAssertionNode(subproofAssertionNode, conte
900
944
  return subproofAssertion;
901
945
  }
902
946
  function containedAssertionFromContainedAssertionNode(containedAssertionNode, context) {
903
- 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);
947
+ const { ContainedAssertion } = _elements.default, node = containedAssertionNode, string = context.nodeAsString(node), lineIndex = null, term = termFromContainedAssertionNode(containedAssertionNode, context), frame = frameFromContainedAssertionNode(containedAssertionNode, context), negated = negatedFromContainedAssertionNode(containedAssertionNode, context), statement = statementFromContainedAssertionNode(containedAssertionNode, context);
904
948
  context = null;
905
949
  const containedAssertion = new ContainedAssertion(context, string, node, lineIndex, term, frame, negated, statement);
906
950
  return containedAssertion;
@@ -917,8 +961,14 @@ function procedureReferenceFromProcedureReferenceNode(procedureReferenceNode, co
917
961
  const procedureRefereence = new ProcedureReference(context, string, node, lineIndex, name);
918
962
  return procedureRefereence;
919
963
  }
964
+ function propertyDeclarationFromPropertyDeclarationNode(propertyDeclarationNode, context) {
965
+ const { PropertyDeclaration } = _elements.default, node = propertyDeclarationNode, string = context.nodeAsString(node), lineIndex = null, type = typeFromPropertyDeclarationNode(propertyDeclarationNode, context), property = propertyFromPropertyDeclarationNode(propertyDeclarationNode, context);
966
+ context = null;
967
+ const propertyDeclaration = new PropertyDeclaration(context, string, node, lineIndex, property, type);
968
+ return propertyDeclaration;
969
+ }
920
970
  function variableDeclarationFromVariableDeclarationNode(variableDeclarationNode, context) {
921
- 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);
971
+ const { VariableDeclaration } = _elements.default, node = variableDeclarationNode, string = context.nodeAsString(node), lineIndex = null, type = typeFromVariableDeclarationNode(variableDeclarationNode, context), variable = variableFromVariableDeclarationNode(variableDeclarationNode, context), provisional = provisionalFromVariableDeclarationNode(variableDeclarationNode, context);
922
972
  context = null;
923
973
  const variableDeclaration = new VariableDeclaration(context, string, node, lineIndex, type, variable, provisional);
924
974
  return variableDeclaration;
@@ -976,9 +1026,9 @@ function constructorDeclarationFromConstructorDeclarationNode(constructorDeclara
976
1026
  return constructorDeclaration;
977
1027
  }
978
1028
  function complexTypeDeclarationFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context) {
979
- const { ComplexTypeDeclaration } = _elements.default, node = complexTypeDeclarationNode, string = context.nodeAsString(node), lineIndex = null, type = typeFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), superTypes = superTypesFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), provisional = provisionalFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context);
1029
+ const { ComplexTypeDeclaration } = _elements.default, node = complexTypeDeclarationNode, lineIndex = null, type = typeFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), superTypes = superTypesFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), provisional = provisionalFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), propertyDeclarations = propertyDeclarationsFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context), complexTypeDeclarationString = (0, _string.complexTypeDeclarationStringFromTypeSuperTypesAndProvisional)(type, superTypes, provisional), string = complexTypeDeclarationString; ///
980
1030
  context = null;
981
- const complexTypeDeclaration = new ComplexTypeDeclaration(context, string, node, lineIndex, type, superTypes, provisional);
1031
+ const complexTypeDeclaration = new ComplexTypeDeclaration(context, string, node, lineIndex, type, superTypes, provisional, propertyDeclarations);
982
1032
  return complexTypeDeclaration;
983
1033
  }
984
1034
  function metavariableDeclarationFromMetavariableDeclarationNode(metavariableDeclarationNode, context) {
@@ -1036,7 +1086,19 @@ function lemmaFromSectionNode(sectionNode, context) {
1036
1086
  return lemma;
1037
1087
  }
1038
1088
  function nameFromPropertyNode(propertyNode, context) {
1039
- const name = propertyNode.getName();
1089
+ const propertyName = propertyNode.getPropertyName(), name = propertyName;
1090
+ return name;
1091
+ }
1092
+ function typeFromPropertyNode(propertyNode, context) {
1093
+ const type = null; ///
1094
+ return type;
1095
+ }
1096
+ function typeFromVariableNode(variableNode, context) {
1097
+ const type = null;
1098
+ return type;
1099
+ }
1100
+ function nameFromParamterNode(parameterNode, context) {
1101
+ const name = parameterNode.getName();
1040
1102
  return name;
1041
1103
  }
1042
1104
  function statementFromStepNode(stepNode, context) {
@@ -1200,6 +1262,10 @@ function identifierFromVarialbeNode(variableNode, context) {
1200
1262
  const variableIdentifier = variableNode.getVariableIdentifier(), identifier = variableIdentifier; ///
1201
1263
  return identifier;
1202
1264
  }
1265
+ function identifierFromParamterNode(parameterNode, context) {
1266
+ const identifier = parameterNode.getIdentifier();
1267
+ return identifier;
1268
+ }
1203
1269
  function statementFromDeductionNode(deductionNode, context) {
1204
1270
  let statement = null;
1205
1271
  const statementNode = deductionNode.getStatementNode();
@@ -1406,6 +1472,14 @@ function labelsFromTopLevelAssertionNode(topLevelAsssertionNode, context) {
1406
1472
  const labelNodes = topLevelAsssertionNode.getLabelNodes(), labels = labelsFromLabelNodes(labelNodes, context);
1407
1473
  return labels;
1408
1474
  }
1475
+ function typeFromPropertyDeclarationNode(propertyDeclarationNode, context) {
1476
+ const typeNode = propertyDeclarationNode.getTypeNode(), type = typeFromTypeNode(typeNode, context);
1477
+ return type;
1478
+ }
1479
+ function typeFromVariableDeclarationNode(variableDeclarationNode, context) {
1480
+ const typeNode = variableDeclarationNode.getTypeNode(), type = typeFromTypeNode(typeNode, context);
1481
+ return type;
1482
+ }
1409
1483
  function procedureCallFromSuppositionNode(suppositionNode, context) {
1410
1484
  let procedureCall = null;
1411
1485
  const procedureCallNode = suppositionNode.getProcedureCallNode();
@@ -1419,7 +1493,7 @@ function negatedFromJDefinedAssertionNode(definedAssertionNode, context) {
1419
1493
  return negated;
1420
1494
  }
1421
1495
  function propertyFromPropertyRelationNode(propertyRelationNode, context) {
1422
- const propertyNode = propertyRelationNode.getTermNode(), property = propertyFromPropertyNode(propertyNode, context);
1496
+ const propertyNode = propertyRelationNode.getPropertyNode(), property = propertyFromPropertyNode(propertyNode, context);
1423
1497
  return property;
1424
1498
  }
1425
1499
  function termFromBracketedConstructorNode(bracketedCcnstructorNode, context) {
@@ -1430,6 +1504,10 @@ function typeFromBracketedConstructorNode(bracketedCcnstructorNode, context) {
1430
1504
  const baseType = (0, _type.baseTypeFromNothing)(), type = baseType; ///
1431
1505
  return type;
1432
1506
  }
1507
+ function propertyRelationsFromVariableNode(variableNode, context) {
1508
+ const propertyRelations = [];
1509
+ return propertyRelations;
1510
+ }
1433
1511
  function definedAssertionFromStatementNode(statementNode, context) {
1434
1512
  let definedAssertion = null;
1435
1513
  const definedAssertionNode = statementNode.getDefinedAssertionNode();
@@ -1531,6 +1609,14 @@ function hypothesesFromTopLevelAssertionNode(topLevelAsssertionNode, context) {
1531
1609
  const ypotheses = [];
1532
1610
  return ypotheses;
1533
1611
  }
1612
+ function propertyFromPropertyDeclarationNode(propertyDeclarationNode, context) {
1613
+ const propertyNode = propertyDeclarationNode.getPropertyNode(), property = propertyFromPropertyNode(propertyNode, context);
1614
+ return property;
1615
+ }
1616
+ function variableFromVariableDeclarationNode(variableDeclarationNode, context) {
1617
+ const variableNode = variableDeclarationNode.getVariableNode(), variable = variableFromVariableNode(variableNode, context);
1618
+ return variable;
1619
+ }
1534
1620
  function statementFromBracketedCombinatorNode(bracketedCombinatorNode, context) {
1535
1621
  const statementNode = bracketedCombinatorNode.getStatementNode(), statement = statementFromStatementNode(statementNode, context);
1536
1622
  return statement;
@@ -1571,6 +1657,10 @@ function deductionFromTopLevelMetaAssertionNode(metaLemmaMetathoremNode, context
1571
1657
  const deductionNode = metaLemmaMetathoremNode.getDeductionNode(), deduction = deductionFromDeductionNode(deductionNode, context);
1572
1658
  return deduction;
1573
1659
  }
1660
+ function provisionalFromVariableDeclarationNode(variableDeclarationNode, context) {
1661
+ const provisional = variableDeclarationNode.isProvisional();
1662
+ return provisional;
1663
+ }
1574
1664
  function procedureReferenceFromProcedureCallNode(procedureCallNode, context) {
1575
1665
  const procedureReferenceNode = procedureCallNode.getProcedureReferenceNode(), procedureReference = procedureReferenceFromProcedureReferenceNode(procedureReferenceNode, context);
1576
1666
  return procedureReference;
@@ -1681,6 +1771,10 @@ function replacementStatementFromStatementSubstitutionNode(statementSubstitution
1681
1771
  const replacementStatementNode = statementSubstitutionNode.getReplacementStatementNode(), replacementStatement = statementFromStatementNode(replacementStatementNode, context);
1682
1772
  return replacementStatement;
1683
1773
  }
1774
+ function propertyDeclarationsFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context) {
1775
+ const propertyDeclarationnNodes = complexTypeDeclarationNode.getPropertyDeclarationNodes(), propertyDeclarations = propertyDeclarationsFromPropertyDeclarationNodes(propertyDeclarationnNodes, context);
1776
+ return propertyDeclarations;
1777
+ }
1684
1778
  function termsFromTermNodes(termNodes, context) {
1685
1779
  const terms = termNodes.map((termNode)=>{
1686
1780
  const term = termFromTermNode(termNode, context);
@@ -1758,5 +1852,12 @@ function stepsOrSubproofsFromSubDerivationNode(subDerivationNode, context) {
1758
1852
  });
1759
1853
  return stepsOrSubproofs;
1760
1854
  }
1855
+ function propertyDeclarationsFromPropertyDeclarationNodes(propertyDeclarationnNodes, context) {
1856
+ const propertyDeclrations = propertyDeclarationnNodes.map((propertyDeclarationNode)=>{
1857
+ const propertyDeclcaration = propertyDeclarationFromPropertyDeclarationNode(propertyDeclarationNode, context);
1858
+ return propertyDeclcaration;
1859
+ });
1860
+ return propertyDeclrations;
1861
+ }
1761
1862
 
1762
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbixcbiAgICAgICAgIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZTtcblxuICBpZiAodHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByZWZpeE5hbWUgPSBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgc3RyaW5nID0gdHlwZVN0cmluZywgIC8vL1xuICAgICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm0gPSBuZXcgVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RlcCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGVwTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXAgPSBuZXcgU3RlcChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbik7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUnVsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBydWxlU3RyaW5nID0gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiksXG4gICAgICAgIG5vZGUgPSBydWxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBydWxlU3RyaW5nLCAgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBwcm9vZiwgbGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbik7XG5cbiAgcmV0dXJuIHJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBuZXcgTGFiZWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JGcm9tRXJyb3JOb2RlKGVycm9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVycm9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVycm9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gbGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGxlbW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWEgPSBuZXcgTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBsZW1tYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2YgPSBuZXcgUHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGRlcml2YXRpb24pO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBeGlvbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBheGlvbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgYXhpb20gPSBuZXcgQXhpb20oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNpc05vZGVzID0gc2VjdGlvbk5vZGUuZ2V0SHlwb3RoZXNpc05vZGVzKCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyhoeXBvdGhlc2lzTm9kZXMsIGNvbnRleHQpLFxuICAgICAgICBheGlvbSA9IGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGVtbWEgPSBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRoZW9yZW0gPSB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gc2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzVG9wTGV2ZWxBc3NlcnRpb24oaHlwb3RoZXNlcywgYXhpb20sIGxlbW1hLCB0aGVvcmVtLCBjb25qZWN0dXJlKSxcbiAgICAgICAgbm9kZSA9IHNlY3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gc2VjdGlvblN0cmluZywgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2VjdGlvbiA9IG5ldyBTZWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBoeXBvdGhlc2VzLCBheGlvbSwgbGVtbWEsIHRoZW9yZW0sIGNvbmplY3R1cmUpO1xuXG4gIHJldHVybiBzZWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZUZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByZW1pc2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJlbWlzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVtaXNlID0gbmV3IFByZW1pc2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgcmV0dXJuIHByZW1pc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUaGVvcmVtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSA9IHRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gW10sXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IHRoZW9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0aGVvcmVtID0gbmV3IFRoZW9yZW0oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5vZGUuZ2V0UHJvcGVydHlOYW1lKCksXG4gICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBwcm9wZXJ0eU5hbWU7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eSA9IG5ldyBQcm9wZXJ0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSwgbm9taW5hbFR5cGVOYW1lKTtcblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gbnVsbCxcbiAgICAgICAgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tVmFyaWFsYmVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5UmVsYXRpb25zID0gW107XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIGlkZW50aWZpZXIsIHByb3BlcnR5UmVsYXRpb25zKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJEZXJpdmF0aW9uID0gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uKHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbiwgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHN1YnByb29mU3RyaW5nLCAgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2YgPSBuZXcgU3VicHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHkgPSBuZXcgRXF1YWxpdHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWR1Y3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVkdWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gbmV3IERlZHVjdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0YXRlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvbiA9IHRvcExldmVsTWV0YUFzc2VydGlvbkZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBtZXRhdmFyaWFibGUsIHRvcExldmVsTWV0YUFzc2VydGlvbik7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBKdWRnZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0ganVkZ2VtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QganVkZ2VtZW50ID0gbmV3IEp1ZGdlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgZnJhbWUsIGFzc3VtcHRpb24pO1xuXG4gIHJldHVybiBqdWRnZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZShtZXRhTGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YUxlbW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUgPSBtZXRhTGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhTGVtbWEgPSBuZXcgTWV0YUxlbW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBtZXRhTGV2ZWxBc3N1bXB0aW9ucyk7XG5cbiAgcmV0dXJuIG1ldGFMZW1tYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQYXJhbWV0ZXIgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcGFyYW1ldGVyTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBwYXJhbWV0ZXJOb2RlLmdldElkZW50aWZpZXIoKTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBuYW1lLCBpZGVudGlmaWVyKTtcblxuICByZXR1cm4gcGFyYW1ldGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbUpTaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtcyk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEh5cG90aHNpcyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBoeXBvdGhlc2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBoeXBvaHRlc2lzID0gbmV3IEh5cG90aHNpcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gaHlwb2h0ZXNpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25qZWN0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSA9IGNvbmplY3R1cmVOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gW10sXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGNvbmplY3R1cmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25qZWN0dXJlID0gbmV3IENvbmplY3R1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb21iaW5hdG9yID0gbmV3IENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uY2x1c2lvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25jbHVzaW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW9uID0gbmV3IENvbmNsdXNpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZXJpdmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgZGVyaXZhdGlvbiA9IG5ldyBEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXggPSBuZXcgVHlwZVByZWZpeChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IG5ldyBBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1cHBvc2l0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1cHBvc2l0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbiA9IG5ldyBTdXBwb3NpdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVpdmFsZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVpdmFsZW5jZU5vZGUsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIHN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nOyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVpdmFsZW5jZSA9IG5ldyBFcXVpdmFsZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgdGVybXMpO1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF0aGVvcmVtRnJvbU1ldGF0aGVvcmVtTm9kZShtZXRhdGhlb3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlID0gbWV0YXRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhdGhlb3JlbSA9IG5ldyBNZXRhdGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgbWV0YUxldmVsQXNzdW1wdGlvbnMpO1xuXG4gIHJldHVybiBtZXRhdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YVR5cGUgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZSA9IG5ldyBNZXRhdmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG5hbWUsIHRlcm0sIHR5cGUsIG1ldGFUeXBlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YkRlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3ViRGVyaXZhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRGVyaXZhdGlvbiA9IG5ldyBTdWJEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gc3ViRGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb24gPSBuZXcgVHlwZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyhwcm9jZWR1cmVSZWZlcmVuY2UsIHBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsID0gbmV3IFByb2NlZHVyZUNhbGwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHBhcmFtZXRlcnMsIHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwT3JTdWJwcm9vZiA9IChzdGVwIHx8IHN1YnByb29mKTtcblxuICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVmaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb24gPSBuZXcgRGVmaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQpO1xuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5UmVsYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlSZWxhdGlvbiA9IG5ldyBQcm9wZXJ0eVJlbGF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCBwcm9wZXJ0eSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFRlcm0gPSByZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gbmV3IFRlcm1TdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0YXJnZXRUZXJtLCByZXBsYWNlbWVudFRlcm0pO1xuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0RnJhbWUgPSB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gbmV3IEZyYW1lU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGFyZ2V0RnJhbWUsIHJlcGxhY2VtZW50RnJhbWUpO1xuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IG5ldyBQcm9wZXJ0eUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgcHJvcGVydHlSZWxhdGlvbik7XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50cyk7XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBuZWdhdGVkID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb24gPSBuZXcgQ29udGFpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNhdGlzZmllc0Fzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uID0gbmV3IFNhdGlzZmllc0Fzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc2lnbmF0dXJlLCByZWZlcmVuY2UpO1xuXG4gIHJldHVybiBzYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlZW5jZSA9IG5ldyBQcm9jZWR1cmVSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG5hbWUpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVSZWZlcmVlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCksXG4gICAgICAgIHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVEZWNsYXJhdGlvbiA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlLCB2YXJpYWJsZSwgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiB2YXJpYWJsZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YUxldmVsQXNzdW1wdGlvbkZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGFMZXZlbEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbWV0YUxldmVsQXNzdW1wdGlvbiA9IG5ldyBNZXRhTGV2ZWxBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIG1ldGFMZXZlbEFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRDb21iaW5hdG9yRnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQnJhY2tldGVkQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRDb21iaW5hdG9yID0gbmV3IEJyYWNrZXRlZENvbWJpbmF0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZENvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQnJhY2tldGVkQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBuZXcgQnJhY2tldGVkQ29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIHR5cGUpO1xuXG4gIHJldHVybiBicmFja2V0ZWRDb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLCAgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgdHlwZVByZWZpeERlY2xhcmF0aW9uID0gbmV3IFR5cGVQcmVmaXhEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZVByZWZpeCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXhEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21iaW5hdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb21iaW5hdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGNvbWJpbmF0b3IpO1xuXG4gIHJldHVybiBjb21iaW5hdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGVUeXBlRGVjbGFyYXRpb25Gcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2ltcGxlVHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNpbXBsZVR5cGVEZWNsYXJhdGlvbiA9IG5ldyBTaW1wbGVUeXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKTtcblxuICByZXR1cm4gc2ltcGxlVHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2UgPSB0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2UgPSByZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBuZXcgUmVmZXJlbmNlU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGFyZ2V0UmVmZXJlbmNlLCByZXBsYWNlbWVudFJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgcmVzb2x2ZWQgPSByZXNvbHZlZEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50ID0gdGFyZ2V0U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gbmV3IFN0YXRlbWVudFN1YnN0aXR1dGlvbihjb250ZXh0cywgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHJlc29sdmVkLCBzdWJzdGl0dXRpb24sIHRhcmdldFN0YXRlbWVudCwgcmVwbGFjZW1lbnRTdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gbmV3IENvbnN0cnVjdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHByb3Zpc2lvbmFsLCBjb25zdHJ1Y3Rvcik7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4VHlwZURlY2xhcmF0aW9uRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tcGxleFR5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbXBsZXhUeXBlRGVjbGFyYXRpb24gPSBuZXcgQ29tcGxleFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiBjb21wbGV4VHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBtZXRhVHlwZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBydWxlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gcnVsZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VOb2RlcyA9IHJ1bGVOb2RlLmdldFByZW1pc2VOb2RlcygpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBheGlvbSA9IG51bGw7XG5cbiAgY29uc3QgYXhpb21Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0QXhpb21Ob2RlKCk7XG5cbiAgaWYgKGF4aW9tTm9kZSAhPT0gbnVsbCkge1xuICAgIGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVtbWEgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hTm9kZSA9IHNlY3Rpb25Ob2RlLmdldExlbW1hTm9kZSgpO1xuXG4gIGlmIChsZW1tYU5vZGUgIT09IG51bGwpIHtcbiAgICBsZW1tYSA9IGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwcm9wZXJ0eU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGVwTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHN0ZXBOb2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VOb2RlKTtcblxuICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBlclR5cGVzID0gbnVsbDtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgcHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHByZWZpeE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW9uRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbmNsdXNpb25Ob2RlID0gcnVsZU5vZGUuZ2V0Q29uY2x1c2lvbk5vZGUoKSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGhlb3JlbSA9IG51bGw7XG5cbiAgY29uc3QgdGhlb3JlbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRUaGVvcmVtTm9kZSgpO1xuXG4gIGlmICh0aGVvcmVtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRoZW9yZW0gPSB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgIG5hbWUgPSB0eXBlUHJlZml4TmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZXJpdmF0aW9uTm9kZSA9IHByb29mTm9kZS5nZXREZXJpdmF0aW9uTm9kZSgpLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBvY25zdHJ1Y3Rvck5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUob2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9uTm9kZXMgPSBmcmFtZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBlcXVpdmFsZW5jZU5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmFpYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICBuYW1lID0gbWV0YXZhcmFpYmxlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVtTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZW1Ob2RlICE9PSBudWxsKSB7XG4gICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZW1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbGFiZWxOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbmplY3R1cmUgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmplY3R1cmVOb2RlID0gc2VjdGlvbk5vZGUuZ2V0Q29uamVjdHVyZU5vZGUoKTtcblxuICBpZiAoY29uamVjdHVyZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29uamVjdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0UmlnaHRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGVxdWFsaXR5ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eU5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEVxdWFsaXR5Tm9kZSgpO1xuXG4gIGlmIChlcXVhbGl0eU5vZGUgIT09IG51bGwpIHtcbiAgICBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgICAgICBpZGVudGlmaWVyID0gdmFyaWFibGVJZGVudGlmaWVyOyAgLy8vXG5cbiAgcmV0dXJuIGlkZW50aWZpZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBkZWR1Y3Rpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGp1ZGdlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGp1ZGdlbWVudCA9IG51bGw7XG5cbiAgY29uc3QganVkZ2VtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0SnVkZ2VtZW50Tm9kZSgpO1xuXG4gIGlmIChqdWRnZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAganVkZ2VtZW50ID0ganVkZ2VtZW50RnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4ganVkZ2VtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwID0gbnVsbDtcblxuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSA9IHN0ZXBPclN1YnByb29mTm9kZS5pc1N0ZXBOb2RlKCk7XG5cbiAgaWYgKHN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlKSB7XG4gICAgY29uc3Qgc3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGU7ICAvLy9cblxuICAgIHN0ZXAgPSBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gIHJldHVybiBub21pbmFsVHlwZU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9uTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0QXNzdW1wdGlvbk5vZGUoKSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZXNtZW50Tm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVzbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbWJpbmF0b3JOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW5vTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29uY2x1c2lub05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBoeXBvdGhlc2lzTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9jZWR1cmVDYWxsID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsTm9kZSA9IHByZW1pc2VOb2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc3VicHJvb2ZOb2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdXBwb3NpdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50OyAvLy9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3ViRGVyaXZhdGlvbk5vZGUgPSBzdWJwcm9vZk5vZGUuZ2V0U3ViRGVyaXZhdGlvbk5vZGUoKSxcbiAgICAgICAgc3ViRGVydmlhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdWJEZXJ2aWF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gbWV0YXZhcmlhYmxlU3RyaW5nLCAvLy9cbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNhdGlzZmllc0Fzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSA9IHN0ZXBOb2RlLmdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VHlwZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3VicHJvb2ZPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLmlzU3VicHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUpIHtcbiAgICBjb25zdCBzdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUuZ2V0TmFtZSgpO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFBhcmFtZXRlck5vZGVzKCksXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzKHBhcmFtZXRlck5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRMYWJlbE5vZGVzKCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21CcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUoYnJhY2tldGVkQ2Nuc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gYnJhY2tldGVkQ2Nuc3RydWN0b3JOb2RlLmdldFRlcm1Ob2RlKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKSxcbiAgICAgICAgdHlwZSA9IGJhc2VUeXBlOyAgLy8vXG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZGVmaW5lZEFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldERlZmluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGRlZmluZWRBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRUZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRhcmdldFRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGFyZ2V0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldERlZHVjdGlvbk5vZGUoKSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVOb2RlID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRTaWduYXR1cmVOb2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZU5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb29mTm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldFByb29mTm9kZSgpLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIGxhYmVsTm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldExhYmVsTm9kZSgpLFxuICAgICAgICBsYWJlbFN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKGxhYmVsTm9kZSksXG4gICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUxhYmVsU3RyaW5nKGxhYmVsU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkgezBcbiAgbGV0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChjb250YWluZWRBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgc2F0aXNmaWVzQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTYXRpc2ZpZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB5cG90aGVzZXMgPSBbXTtcblxuICByZXR1cm4geXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBicmFja2V0ZWRDb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tSlNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzaWduYXR1cmVOb2RlID0gc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRTaWduYXR1cmVOb2RlKCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21KU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUpTYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhc2lzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICByZWZlcmVuY2VOb2RlID0gc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRhcmdldEZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0RnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUodGFyZ2V0RnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0RnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICByZWZlcmVuY2VOb2RlID0gbWV0YUxldmVsQXNzdW1wdGlvbk5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VOb2RlKSxcbiAgICAgICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZWRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlc29sdmVkID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5pc1Jlc29sdmVkKCk7XG5cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0b3BMZXZlbE1ldGFBc3NlcnRpb24gPSBudWxsO1xuXG4gIHJldHVybiB0b3BMZXZlbE1ldGFBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0RGVkdWN0aW9uTm9kZSgpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVwbGFjZW1lbnRUZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50VGVybU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyZXBsYWNlbWVudFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRUZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1cGVyVHlwZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc05vZGUgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVzTm9kZSgpO1xuXG4gIGlmICh0eXBlc05vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlcyA9IHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpO1xuXG4gICAgc3VwZXJUeXBlcyA9IHR5cGVzOyAvLy9cbiAgfVxuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLmdldFR5cGVQcmVmaXhOb2RlKCksXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbWJpbmF0b3JOb2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRDb21iaW5hdG9yTm9kZSgpLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZShjb21iaW5hdG9yTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFUeXBlTmFtZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgbWV0YVR5cGUgPSBjb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7XG5cbiAgcmV0dXJuIG1ldGFUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZS5pc1Byb3Zpc2lvbmFsKCk7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VwZXJUeXBlcyA9IFtdO1xuXG4gIGNvbnN0IHR5cGVzTm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVzTm9kZSgpO1xuXG4gIGlmICh0eXBlc05vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlcyA9IHR5cGVzRnJvbVR5cGVzTm9kZSh0eXBlc05vZGUsIGNvbnRleHQpO1xuXG4gICAgc3VwZXJUeXBlcyA9IHR5cGVzOyAvLy9cbiAgfVxuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50RnJhbWVOb2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50RnJhbWVOb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50RnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUocmVwbGFjZW1lbnRGcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudEZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5UmVsYXRpb25Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFByb3BlcnR5UmVsYXRpb25Ob2RlKCksXG4gICAgICAgIHByb3BlcnR5UmVsYXRpb24gPSBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udHh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250eHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnR4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gKGZyYW1lU3Vic3RpdHV0aW9uIHx8IHRlcm1TdWJzdGl0dXRpb24pO1xuXG4gIHJldHVybiBzdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRDb25zdHJ1Y3Rvck5vZGUoKSxcbiAgICAgICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHRhcmdldFJlZmVyZW5jZU5vZGUpLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyh0YXJnZXRSZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRhcmdldFN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgdGFyZ2V0U3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUodGFyZ2V0U3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCB0ZXJtU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICBjb25zdCB0ZXJtU3Vic3RpdHV0aW9uTm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAodGVybVN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtU3Vic3RpdHV0aW9uID0gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBsZXQgZnJhbWVTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0RnJhbWVTdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgaWYgKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGFMZXZlbEFzc3VtcHRpb25zID0gW107XG5cbiAgcmV0dXJuIG1ldGFMZXZlbEFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZW1lbnRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRSZWZlcmVuY2VTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhyZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRSZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRSZXBsYWNlbWVudFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShyZXBsYWNlbWVudFN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXMgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4ge1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlc0Zyb21UeXBlc05vZGUodHlwZXNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOb2RlcyA9IHR5cGVzTm9kZS5nZXRUeXBlTm9kZXMoKSxcbiAgICAgICAgdHlwZXMgPSB0eXBlTm9kZXMubWFwKCh0eXBlTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVscyA9IGxhYmVsTm9kZXMubWFwKChsYWJlbE5vZGUpID0+IHtcbiAgICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKGxhYmVsTm9kZSksXG4gICAgICAgICAgbGFiZWwgPSBMYWJlbC5mcm9tTGFiZWxTdHJpbmcobGFiZWxTdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxhYmVsO1xuICB9KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzKHByZW1pc2VOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlcyA9IHByZW1pc2VOb2Rlcy5tYXAoKHByZW1pc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgcHJlbWlzZSA9IHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByZW1pc2U7XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZW50Tm9kZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzKHBhcmFtZXRlck5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gIH0pO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMoaHlwb3RoZXNpc05vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGh5cG90aGVzZXMgPSBoeXBvdGhlc2lzTm9kZXMubWFwKChoeXBvdGhlc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgaHlwb3RoZXNpcyA9IGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXNpcztcbiAgfSk7XG5cbiAgcmV0dXJuIGh5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbk5vZGVzLm1hcCgoYXNzdW1wdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbk5vZGVzLm1hcCgoc3VwcG9zaXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSBzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IGRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IHN1YkRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cbiJdLCJuYW1lcyI6WyJhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbkZyb21KdWRnZW1lbnROb2RlIiwiYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzIiwiYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlIiwiYXhpb21Gcm9tQXhpb21Ob2RlIiwiYXhpb21Gcm9tU2VjdGlvbk5vZGUiLCJicmFja2V0ZWRDb21iaW5hdG9yRnJvbUJyYWNrZXRlZENvbWJpbmF0b3JOb2RlIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsImNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUiLCJjb25jbHVzaW9uRnJvbVJ1bGVOb2RlIiwiY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZSIsImNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUiLCJkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZSIsImRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlIiwiZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZSIsImVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZSIsImVycm9yRnJvbUVycm9yTm9kZSIsImZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbUZyYW1lTm9kZSIsImZyYW1lRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbUp1ZGdlbWVudE5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwiaHlwb3RoZXNlc0Zyb21IeXBvdGhlc2lzTm9kZXMiLCJoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUiLCJpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSIsImp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlIiwianVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJsYWJlbEZyb21MYWJlbE5vZGUiLCJsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwibGFiZWxzRnJvbUxhYmVsTm9kZXMiLCJsYWJlbHNGcm9tUnVsZU5vZGUiLCJsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwibGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwibGVtbWFGcm9tTGVtbWFOb2RlIiwibGVtbWFGcm9tU2VjdGlvbk5vZGUiLCJtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25Gcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwibWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlIiwibmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibmFtZUZyb21QYXJhbmV0ZXJOb2RlIiwibmFtZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwibmFtZUZyb21Qcm9wZXJ0eU5vZGUiLCJuYW1lRnJvbVR5cGVOb2RlIiwibmFtZUZyb21UeXBlUHJlZml4Tm9kZSIsIm5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwibm9taW5hbFR5cGVOYW1lRnJvbVR5cGVOb2RlIiwicGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJzRnJvbVBhcmFtZXRlck5vZGVzIiwicGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByZWZpeE5hbWVGcm9tVHlwZU5vZGUiLCJwcmVtaXNlRnJvbVByZW1pc2VOb2RlIiwicHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzIiwicHJlbWlzZXNGcm9tUnVsZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9vZkZyb21Qcm9vZk5vZGUiLCJwcm9vZkZyb21SdWxlTm9kZSIsInByb29mRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsInByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0aWVzRnJvbVR5cGVOb2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlTm9kZSIsInJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21KU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwicnVsZUZyb21SdWxlTm9kZSIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUpTYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUpTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Gcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudEZyb21TdGVwTm9kZSIsInN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMiLCJzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN0ZXBGcm9tU3RlcE5vZGUiLCJzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZU5vZGUiLCJzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJ0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwidGVybUZyb21Db25zdHJ1Y3Rvck5vZGUiLCJ0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInRlcm1TdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUiLCJ0ZXJtc0Zyb21TaWduYXR1cmVOb2RlIiwidGVybXNGcm9tVGVybU5vZGVzIiwidGhlb3JlbUZyb21TZWN0aW9uTm9kZSIsInRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25Gcm9tUmVmZXJlbmNlTm9kZSIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUiLCJ0eXBlRnJvbUVxdWl2YWxlbmNlTm9kZSIsInR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsInR5cGVGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVGVybU5vZGUiLCJ0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21UeXBlTm9kZSIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwidHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwidHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVzRnJvbVR5cGVzTm9kZSIsInZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21UZXJtTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSIsInR5cGVOb2RlIiwiY29udGV4dCIsInR5cGUiLCJiYXNlVHlwZSIsImJhc2VUeXBlRnJvbU5vdGhpbmciLCJUeXBlIiwiZWxlbWVudHMiLCJub2RlIiwibmFtZSIsInByZWZpeE5hbWUiLCJzdXBlclR5cGVzIiwicHJvcGVydGllcyIsInByb3Zpc2lvbmFsIiwibm9taW5hbFR5cGVOYW1lIiwidHlwZVN0cmluZyIsInR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lIiwic3RyaW5nIiwibGluZUluZGV4IiwidGVybU5vZGUiLCJUZXJtIiwibm9kZUFzU3RyaW5nIiwidGVybSIsInN0ZXBOb2RlIiwiU3RlcCIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInNhdGlzZmllc0Fzc2VydGlvbiIsInN0ZXAiLCJydWxlTm9kZSIsIlJ1bGUiLCJwcm9vZiIsImxhYmVscyIsInByZW1pc2VzIiwiY29uY2x1c2lvbiIsInJ1bGVTdHJpbmciLCJydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbiIsInJ1bGUiLCJsYWJlbE5vZGUiLCJMYWJlbCIsIm1ldGF2YXJpYWJsZSIsImxhYmVsIiwiZXJyb3JOb2RlIiwiRXJyb3IiLCJlcnJvciIsImxlbW1hTm9kZSIsIkxlbW1hIiwidG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSIsImRlZHVjdGlvbiIsInN1cHBvc2l0aW9ucyIsInNpZ25hdHVyZSIsImh5cG90aGVzZXMiLCJ0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmciLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJsZW1tYSIsImZyYW1lTm9kZSIsIkZyYW1lIiwiYXNzdW1wdGlvbnMiLCJmcmFtZSIsInByb29mTm9kZSIsIlByb29mIiwiZGVyaXZhdGlvbiIsImF4aW9tTm9kZSIsIkF4aW9tIiwiYXhpb20iLCJzZWN0aW9uTm9kZSIsImh5cG90aGVzaXNOb2RlcyIsImdldEh5cG90aGVzaXNOb2RlcyIsInRoZW9yZW0iLCJjb25qZWN0dXJlIiwic2VjdGlvblN0cmluZyIsInNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc1RvcExldmVsQXNzZXJ0aW9uIiwic2VjdGlvbiIsIlNlY3Rpb24iLCJwcmVtaXNlTm9kZSIsIlByZW1pc2UiLCJwcm9jZWR1cmVDYWxsIiwicHJlbWlzZSIsInRoZW9yZW1Ob2RlIiwiVGhlb3JlbSIsInByb3BlcnR5Tm9kZSIsIlByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZ2V0UHJvcGVydHlOYW1lIiwicHJvcGVydHkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImlkZW50aWZpZXIiLCJwcm9wZXJ0eVJlbGF0aW9ucyIsInZhcmlhYmxlIiwic3VicHJvb2ZOb2RlIiwiU3VicHJvb2YiLCJzdWJEZXJpdmF0aW9uIiwic3VicHJvb2ZTdHJpbmciLCJzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uIiwic3VicHJvb2YiLCJlcXVhbGl0eU5vZGUiLCJFcXVhbGl0eSIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwiZXF1YWxpdHkiLCJkZWR1Y3Rpb25Ob2RlIiwiRGVkdWN0aW9uIiwic3RhdGVtZW50Tm9kZSIsIlN0YXRlbWVudCIsInNpZ25hdHVyZU5vZGUiLCJTaWduYXR1cmUiLCJ0ZXJtcyIsInJlZmVyZW5jZU5vZGUiLCJSZWZlcmVuY2UiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb24iLCJqdWRnZW1lbnROb2RlIiwiSnVkZ2VtZW50IiwiYXNzdW1wdGlvbiIsImp1ZGdlbWVudCIsIm1ldGFMZW1tYU5vZGUiLCJNZXRhTGVtbWEiLCJtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25zIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwibWV0YUxlbW1hIiwicGFyYW1ldGVyTm9kZSIsIlBhcmFtZXRlciIsImdldE5hbWUiLCJnZXRJZGVudGlmaWVyIiwicGFyYW1ldGVyIiwiaHlwb3RoZXNlTm9kZSIsIkh5cG90aHNpcyIsImh5cG9odGVzaXMiLCJjb25qZWN0dXJlTm9kZSIsIkNvbmplY3R1cmUiLCJjb21iaW5hdG9yTm9kZSIsIkNvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY29uY2x1c2lvbk5vZGUiLCJDb25jbHVzaW9uIiwiZGVyaXZhdGlvbk5vZGUiLCJEZXJpdmF0aW9uIiwic3RlcHNPclN1YnByb29mcyIsInR5cGVQcmVmaXhOb2RlIiwiVHlwZVByZWZpeCIsInRlcm1Gcm9tVHlwZVByZWZpeE5vZGUiLCJ0eXBlRnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZVByZWZpeCIsImFzc3VtcHRpb25Ob2RlIiwiQXNzdW1wdGlvbiIsImNvbnN0cnVjdG9yTm9kZSIsIkNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiLCJzdXBwb3NpdGlvbk5vZGUiLCJTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uIiwiZXF1aXZhbGVuY2VOb2RlIiwiRXF1aXZhbGVuY2UiLCJlcXVpdmFsZW5jZVN0cmluZyIsImVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zIiwiZXF1aXZhbGVuY2UiLCJtZXRhdGhlb3JlbU5vZGUiLCJNZXRhdGhlb3JlbSIsIm1ldGF0aGVvcmVtIiwibWV0YXZhcmlhYmxlTm9kZSIsIk1ldGF2YXJpYWJsZSIsIm1ldGFUeXBlIiwic3ViRGVyaXZhdGlvbk5vZGUiLCJTdWJEZXJpdmF0aW9uIiwidHlwZUFzc2VydGlvbk5vZGUiLCJUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInByb2NlZHVyZUNhbGxOb2RlIiwiUHJvY2VkdXJlQ2FsbCIsInBhcmFtZXRlcnMiLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVDYWxsU3RyaW5nIiwicHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzIiwic3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2YiLCJkZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIkRlZmluZWRBc3NlcnRpb24iLCJuZWdhdGVkIiwiaXNOZWdhdGVkIiwiZGVmaW5lZEFzc2VydGlvbiIsInByb3BlcnR5UmVsYXRpb25Ob2RlIiwiUHJvcGVydHlSZWxhdGlvbiIsInByb3BlcnR5UmVsYXRpb24iLCJ0ZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiVGVybVN1YnN0aXR1dGlvbiIsImNvbnRleHRzIiwidGFyZ2V0VGVybSIsInJlcGxhY2VtZW50VGVybSIsInRlcm1TdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJGcmFtZVN1YnN0aXR1dGlvbiIsInRhcmdldEZyYW1lIiwicmVwbGFjZW1lbnRGcmFtZSIsImZyYW1lU3Vic3RpdHV0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50cyIsInN1YnByb29mQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIkNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJTYXRpc2ZpZXNBc3NlcnRpb24iLCJwcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwiUHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlUmVmZXJlZW5jZSIsInZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiVmFyaWFibGVEZWNsYXJhdGlvbiIsImdldFR5cGVOb2RlIiwiaXNQcm92aXNpb25hbCIsImdldFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlRGVjbGFyYXRpb24iLCJtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsIk1ldGFMZXZlbEFzc3VtcHRpb24iLCJtZXRhTGV2ZWxBc3N1bXB0aW9uIiwiYnJhY2tldGVkQ29tYmluYXRvck5vZGUiLCJCcmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsIkJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3IiLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwiVHlwZVByZWZpeERlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsIkNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJTaW1wbGVUeXBlRGVjbGFyYXRpb24iLCJzaW1wbGVUeXBlRGVjbGFyYXRpb24iLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiUmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwidGFyZ2V0UmVmZXJlbmNlIiwicmVwbGFjZW1lbnRSZWZlcmVuY2UiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwiU3RhdGVtZW50U3Vic3RpdHV0aW9uIiwicmVzb2x2ZWQiLCJzdWJzdGl0dXRpb24iLCJ0YXJnZXRTdGF0ZW1lbnQiLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsInN0YXRlbWVudFN1YnN0aXR1dGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsIkNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsInR5cGVOYW1lIiwiZ2V0VHlwZU5hbWUiLCJnZXRQcm9vZk5vZGUiLCJsYWJlbE5vZGVzIiwiZ2V0TGFiZWxOb2RlcyIsInByZW1pc2VOb2RlcyIsImdldFByZW1pc2VOb2RlcyIsImdldEF4aW9tTm9kZSIsImdldExlbW1hTm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlU3RyaW5nIiwiZnJvbVJlZmVyZW5jZVN0cmluZyIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldFRoZW9yZW1Ob2RlIiwiZ2V0RnJhbWVOb2RlIiwidGVybU5vZGVzIiwiZ2V0QXNzdW1wdGlvbk5vZGVzIiwiZ2V0RGVyaXZhdGlvbk5vZGUiLCJvY25zdHJ1Y3Rvck5vZGUiLCJnZXRUZXJtTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsImdldFRlcm1Ob2RlcyIsIm1ldGF2YXJhaWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwidHlwZW1Ob2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImdldENvbmplY3R1cmVOb2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJnZXRFcXVhbGl0eU5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJnZXRKdWRnZW1lbnROb2RlIiwic3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUiLCJpc1N0ZXBOb2RlIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwiZ2V0QXNzdW1wdGlvbk5vZGUiLCJzdGF0ZXNtZW50Tm9kZSIsImNvbmNsdXNpbm9Ob2RlIiwiaHlwb3RoZXNpc05vZGUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsInN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwiZ2V0U3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJ2aWF0aW9uIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwiZ2V0U2F0aXNmaWVkQXNzZXJ0aW9uTm9kZSIsImdldFR5cGVBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUiLCJpc1N1YnByb29mTm9kZSIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUiLCJnZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRhcmdldFRlcm1Ob2RlIiwiZ2V0VGFyZ2V0VGVybU5vZGUiLCJnZXREZWR1Y3Rpb25Ob2RlIiwiZ2V0U2lnbmF0dXJlTm9kZSIsImdldExhYmVsTm9kZSIsImxhYmVsU3RyaW5nIiwiZnJvbUxhYmVsU3RyaW5nIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudE5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJ5cG90aGVzZXMiLCJzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlIiwidGFyZ2V0RnJhbWVOb2RlIiwiZ2V0VGFyZ2V0RnJhbWVOb2RlIiwiaXNSZXNvbHZlZCIsImdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJyZXBsYWNlbWVudFRlcm1Ob2RlIiwiZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSIsInR5cGVzTm9kZSIsImdldFR5cGVzTm9kZSIsInR5cGVzIiwiZ2V0VHlwZVByZWZpeE5vZGUiLCJnZXRDb21iaW5hdG9yTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwicmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJnZXRSZXBsYWNlbWVudEZyYW1lTm9kZSIsImdldFByb3BlcnR5UmVsYXRpb25Ob2RlIiwiZ2VuZXJhbENvbnR4dCIsImdldENvbnN0cnVjdG9yTm9kZSIsInRhcmdldFJlZmVyZW5jZU5vZGUiLCJnZXRUYXJnZXRSZWZlcmVuY2VOb2RlIiwidGFyZ2V0UmVmZXJlbmNlU3RyaW5nIiwidGFyZ2V0U3RhdGVtZW50Tm9kZSIsImdldFRhcmdldFN0YXRlbWVudE5vZGUiLCJnZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsImdldFJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSIsInJlcGxhY2VtZW50UmVmZXJlbmNlU3RyaW5nIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwiZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlIiwibWFwIiwidHlwZU5vZGVzIiwiZ2V0VHlwZU5vZGVzIiwiaHlwb3RoZXNpcyIsInN0ZXBPclN1YnByb29mTm9kZXMiLCJnZXRTdGVwT3JTdWJwcm9vZk5vZGVzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFvZmdCQTtlQUFBQTs7UUFvMUJBQztlQUFBQTs7UUE2eUJBQztlQUFBQTs7UUFoK0JBQztlQUFBQTs7UUFqL0JBQztlQUFBQTs7UUF1MUJBQztlQUFBQTs7UUF6TUFDO2VBQUFBOztRQVdBQztlQUFBQTs7UUEwQkFDO2VBQUFBOztRQThqQ0FDO2VBQUFBOztRQXY5Q0FDO2VBQUFBOztRQTJlQUM7ZUFBQUE7O1FBN2RBQztlQUFBQTs7UUFpb0JBQztlQUFBQTs7UUFwcUJBQztlQUFBQTs7UUErekJBQztlQUFBQTs7UUEvVUFDO2VBQUFBOztRQTJqQ0FDO2VBQUFBOztRQXA5Q0FDO2VBQUFBOztRQW1PQUM7ZUFBQUE7O1FBNmdDQUM7ZUFBQUE7O1FB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
1863
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyxcbiAgICAgICAgIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbixcbiAgICAgICAgIHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24sXG4gICAgICAgICBjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZTtcblxuICBpZiAodHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKTtcblxuICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByZWZpeE5hbWUgPSBwcmVmaXhOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgc3RyaW5nID0gdHlwZVN0cmluZywgIC8vL1xuICAgICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgIHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm0gPSBuZXcgVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RlcCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGVwTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXAgPSBuZXcgU3RlcChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbik7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUnVsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBydWxlU3RyaW5nID0gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiksXG4gICAgICAgIG5vZGUgPSBydWxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBydWxlU3RyaW5nLCAgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBwcm9vZiwgbGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbik7XG5cbiAgcmV0dXJuIHJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBuZXcgTGFiZWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JGcm9tRXJyb3JOb2RlKGVycm9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVycm9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVycm9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4KTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gbGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGxlbW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHRvcExldmVsQXNzc2VydGlvblN0cmluZywgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGw7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWEgPSBuZXcgTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBsZW1tYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lID0gbmV3IEZyYW1lKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2YgPSBuZXcgUHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGRlcml2YXRpb24pO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBeGlvbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRvcExldmVsQXNzc2VydGlvbk5vZGUgPSBheGlvbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBheGlvbSA9IG5ldyBBeGlvbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VjdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2lzTm9kZXMgPSBzZWN0aW9uTm9kZS5nZXRIeXBvdGhlc2lzTm9kZXMoKSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCksXG4gICAgICAgIGF4aW9tID0gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZW1tYSA9IGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNlY3Rpb25TdHJpbmcgPSBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbihoeXBvdGhlc2VzLCBheGlvbSwgbGVtbWEsIHRoZW9yZW0sIGNvbmplY3R1cmUpLFxuICAgICAgICBub2RlID0gc2VjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzZWN0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzZWN0aW9uID0gbmV3IFNlY3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSk7XG5cbiAgcmV0dXJuIHNlY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJlbWlzZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmVtaXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gcHJlbWlzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRoZW9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gdGhlb3JlbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gdGhlb3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW0gPSBuZXcgVGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eSA9IG51bGw7XG5cbiAgaWYgKHByb3BlcnR5Tm9kZSAhPSBudWxsKSB7XG4gICAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbm9kZSA9IHByb3BlcnR5Tm9kZSwgLy8vXG4gICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgICBuYW1lID0gbmFtZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICB0eXBlID0gdHlwZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgcHJvcGVydHkgPSBuZXcgUHJvcGVydHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG5hbWUsIHR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9ucyA9IHByb3BlcnR5UmVsYXRpb25zRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlLCBpZGVudGlmaWVyLCBwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mTm9kZSwgIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24oc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3VicHJvb2ZTdHJpbmc7ICAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZiA9IG5ldyBTdWJwcm9vZihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKTtcblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWR1Y3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBuZXcgRGVkdWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtcyk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IG5ldyBSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG1ldGF2YXJpYWJsZSwgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVkZ2VtZW50RnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEp1ZGdlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBqdWRnZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBqdWRnZW1lbnQgPSBuZXcgSnVkZ2VtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBmcmFtZSwgYXNzdW1wdGlvbik7XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZW1tYUZyb21NZXRhTGVtbWFOb2RlKG1ldGFMZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSA9IG1ldGFMZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25zID0gbWV0YUxldmVsQXNzdW1wdGlvbnNGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGFMZW1tYSA9IG5ldyBNZXRhTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIG1ldGFMZXZlbEFzc3VtcHRpb25zKTtcblxuICByZXR1cm4gbWV0YUxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFBhcmFtZXRlciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwYXJhbWV0ZXJOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVBhcmFtdGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHBhcmFtZXRlciA9IG5ldyBQYXJhbWV0ZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG5hbWUsIGlkZW50aWZpZXIpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tSlNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVOb2RlLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSHlwb3Roc2lzIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGh5cG90aGVzZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGh5cG9odGVzaXMgPSBuZXcgSHlwb3Roc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBoeXBvaHRlc2lzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlID0gY29uamVjdHVyZU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdG9wTGV2ZWxBc3NzZXJ0aW9uU3RyaW5nID0gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSB0b3BMZXZlbEFzc3NlcnRpb25TdHJpbmcsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbmplY3R1cmUgPSBuZXcgQ29uamVjdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGNvbmplY3R1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29tYmluYXRvck5vZGUoY29tYmluYXRvck5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbWJpbmF0b3IgPSBuZXcgQ29tYmluYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbmNsdXNpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBuZXcgQ29uY2x1c2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlcml2YXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXggfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXggPSBuZXcgVHlwZVByZWZpeChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IG5ldyBBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29uc3RydWN0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1cHBvc2l0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1cHBvc2l0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbiA9IG5ldyBTdXBwb3NpdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVpdmFsZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVpdmFsZW5jZU5vZGUsIC8vL1xuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIHN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nOyAvLy9cblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBlcXVpdmFsZW5jZSA9IG5ldyBFcXVpdmFsZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgdGVybXMpO1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF0aGVvcmVtRnJvbU1ldGF0aGVvcmVtTm9kZShtZXRhdGhlb3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlID0gbWV0YXRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9ucyA9IG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhdGhlb3JlbSA9IG5ldyBNZXRhdGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgbWV0YUxldmVsQXNzdW1wdGlvbnMpO1xuXG4gIHJldHVybiBtZXRhdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YVR5cGUgPSBudWxsO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZSA9IG5ldyBNZXRhdmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIG5hbWUsIHRlcm0sIHR5cGUsIG1ldGFUeXBlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YkRlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3ViRGVyaXZhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRGVyaXZhdGlvbiA9IG5ldyBTdWJEZXJpdmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gc3ViRGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb24gPSBuZXcgVHlwZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyhwcm9jZWR1cmVSZWZlcmVuY2UsIHBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nLCAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbDtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVDYWxsID0gbmV3IFByb2NlZHVyZUNhbGwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHBhcmFtZXRlcnMsIHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwT3JTdWJwcm9vZiA9IChzdGVwIHx8IHN1YnByb29mKTtcblxuICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVmaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb24gPSBuZXcgRGVmaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQpO1xuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5UmVsYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlSZWxhdGlvbiA9IG5ldyBQcm9wZXJ0eVJlbGF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0ZXJtLCBwcm9wZXJ0eSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0VGVybSA9IHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFRlcm0gPSByZXBsYWNlbWVudFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gbmV3IFRlcm1TdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0YXJnZXRUZXJtLCByZXBsYWNlbWVudFRlcm0pO1xuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0LFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dFxuICAgICAgICBdLFxuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGFyZ2V0RnJhbWUgPSB0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IHJlcGxhY2VtZW50RnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gbmV3IEZyYW1lU3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGFyZ2V0RnJhbWUsIHJlcGxhY2VtZW50RnJhbWUpO1xuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IG5ldyBQcm9wZXJ0eUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgcHJvcGVydHlSZWxhdGlvbik7XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50cyk7XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbnRhaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHRlcm0sIGZyYW1lLCBuZWdhdGVkLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2F0aXNmaWVzQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBuZXcgU2F0aXNmaWVzQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBzaWduYXR1cmUsIHJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9jZWR1cmVSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbmFtZSA9IG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVlbmNlID0gbmV3IFByb2NlZHVyZVJlZmVyZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgbmFtZSk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZWVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eURlY2xhcmF0aW9uID0gbmV3IFByb3BlcnR5RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHByb3BlcnR5LCB0eXBlKTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHR5cGUsIHZhcmlhYmxlLCBwcm92aXNpb25hbCk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGV2ZWxBc3N1bXB0aW9uRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YUxldmVsQXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbU1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlKG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCBtZXRhTGV2ZWxBc3N1bXB0aW9uID0gbmV3IE1ldGFMZXZlbEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsaW5lSW5kZXgsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb21iaW5hdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZShicmFja2V0ZWRDb21iaW5hdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIGJyYWNrZXRlZENvbWJpbmF0b3IgPSBuZXcgQnJhY2tldGVkQ29tYmluYXRvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gYnJhY2tldGVkQ29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBCcmFja2V0ZWRDb25zdHJ1Y3RvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IG5ldyBCcmFja2V0ZWRDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZENvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVQcmVmaXhEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksICAvLy9cbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgdHlwZVByZWZpeCA9IHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbnVsbDtcblxuICBjb25zdCB0eXBlUHJlZml4RGVjbGFyYXRpb24gPSBuZXcgVHlwZVByZWZpeERlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlUHJlZml4KTtcblxuICByZXR1cm4gdHlwZVByZWZpeERlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tYmluYXRvckRlY2xhcmF0aW9uID0gbmV3IENvbWJpbmF0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgY29tYmluYXRvcik7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaW1wbGVUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3Qgc2ltcGxlVHlwZURlY2xhcmF0aW9uID0gbmV3IFNpbXBsZVR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpO1xuXG4gIHJldHVybiBzaW1wbGVUeXBlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VTdWJzdGl0dXRpb25Gcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICBjb250ZXh0cyA9IFtcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRcbiAgICAgICAgXSxcbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IHRhcmdldFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZSA9IHJlcGxhY2VtZW50UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvbiA9IG5ldyBSZWZlcmVuY2VTdWJzdGl0dXRpb24oY29udGV4dHMsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0YXJnZXRSZWZlcmVuY2UsIHJlcGxhY2VtZW50UmVmZXJlbmNlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgY29udGV4dHMgPSBbXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0XG4gICAgICAgIF0sXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICByZXNvbHZlZCA9IHJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSB0YXJnZXRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb24gPSBuZXcgU3RhdGVtZW50U3Vic3RpdHV0aW9uKGNvbnRleHRzLCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgcmVzb2x2ZWQsIHN1YnN0aXR1dGlvbiwgdGFyZ2V0U3RhdGVtZW50LCByZXBsYWNlbWVudFN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29uc3RydWN0b3JEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxpbmVJbmRleCwgdHlwZSwgcHJvdmlzaW9uYWwsIGNvbnN0cnVjdG9yKTtcblxuICByZXR1cm4gY29uc3RydWN0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21wbGV4VHlwZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlEZWNsYXJhdGlvbnMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmcgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwodHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpLFxuICAgICAgICBzdHJpbmcgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nOyAgLy8vXG5cbiAgY29udGV4dCA9IG51bGw7XG5cbiAgY29uc3QgY29tcGxleFR5cGVEZWNsYXJhdGlvbiA9IG5ldyBDb21wbGV4VHlwZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCB0eXBlLCBzdXBlclR5cGVzLCBwcm92aXNpb25hbCwgcHJvcGVydHlEZWNsYXJhdGlvbnMpO1xuXG4gIHJldHVybiBjb21wbGV4VHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGluZUluZGV4ID0gbnVsbCxcbiAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGluZUluZGV4LCBtZXRhVHlwZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBydWxlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gcnVsZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZW1pc2VOb2RlcyA9IHJ1bGVOb2RlLmdldFByZW1pc2VOb2RlcygpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBheGlvbSA9IG51bGw7XG5cbiAgY29uc3QgYXhpb21Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0QXhpb21Ob2RlKCk7XG5cbiAgaWYgKGF4aW9tTm9kZSAhPT0gbnVsbCkge1xuICAgIGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGVtbWEgPSBudWxsO1xuXG4gIGNvbnN0IGxlbW1hTm9kZSA9IHNlY3Rpb25Ob2RlLmdldExlbW1hTm9kZSgpO1xuXG4gIGlmIChsZW1tYU5vZGUgIT09IG51bGwpIHtcbiAgICBsZW1tYSA9IGxlbW1hRnJvbUxlbW1hTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Tm9kZS5nZXRQcm9wZXJ0eU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHByb3BlcnR5TmFtZTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBudWxsO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmFtZUZyb21QYXJhbXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0ZXBOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2VOb2RlID0gc3RlcE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpO1xuXG4gIGlmIChyZWZlcmVuY2VOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpO1xuXG4gICAgcmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVmZXJlbmNlU3RyaW5nLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVBhcmFuZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcGFyYW1ldGVyTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cGVyVHlwZXMgPSBudWxsO1xuXG4gIHJldHVybiBzdXBlclR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gbnVsbDtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeE5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZVByZWZpeE5hbWUgPSB0eXBlTm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICBwcmVmaXhOYW1lID0gdHlwZVByZWZpeE5hbWU7ICAvLy9cblxuICByZXR1cm4gcHJlZml4TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29uY2x1c2lvbk5vZGUgPSBydWxlTm9kZS5nZXRDb25jbHVzaW9uTm9kZSgpLFxuICAgICAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0aGVvcmVtID0gbnVsbDtcblxuICBjb25zdCB0aGVvcmVtTm9kZSA9IHNlY3Rpb25Ob2RlLmdldFRoZW9yZW1Ob2RlKCk7XG5cbiAgaWYgKHRoZW9yZW1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZnJhbWVOb2RlID0ganVkZ2VtZW50Tm9kZS5nZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gc2lnbmF0dXJlTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVQcmVmaXhOYW1lID0gdHlwZVByZWZpeE5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgbmFtZSA9IHR5cGVQcmVmaXhOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlcml2YXRpb25Ob2RlID0gcHJvb2ZOb2RlLmdldERlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlKG9jbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IG9jbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbnN0cnVjdG9yTm9kZShvY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZSA9IG51bGw7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlcyA9IGZyYW1lTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHByZW1pc2VOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IGVxdWl2YWxlbmNlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyYWlibGVOYW1lID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSBtZXRhdmFyYWlibGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZW1Ob2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlbU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZnJhbWVOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBsYWJlbE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uamVjdHVyZSA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRDb25qZWN0dXJlTm9kZSgpO1xuXG4gIGlmIChjb25qZWN0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmlnaHRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmlnaHRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJpZ2h0VGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZXF1YWxpdHkgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RXF1YWxpdHlOb2RlKCk7XG5cbiAgaWYgKGVxdWFsaXR5Tm9kZSAhPT0gbnVsbCkge1xuICAgIGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZXF1YWxpdHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tVmFyaWFsYmVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgICAgIGlkZW50aWZpZXIgPSB2YXJpYWJsZUlkZW50aWZpZXI7ICAvLy9cblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW10ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgaWRlbnRpZmllciA9IHBhcmFtZXRlck5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEp1ZGdlbWVudE5vZGUoKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RlcCA9IG51bGw7XG5cbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGUuaXNTdGVwTm9kZSgpO1xuXG4gIGlmIChzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSkge1xuICAgIGNvbnN0IHN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdGVwID0gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbWluYWxUeXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICByZXR1cm4gbm9taW5hbFR5cGVOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbkZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEFzc3VtcHRpb25Ob2RlKCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJhbWV0ZXJOb2RlLmdldElkZW50aWZpZXIoKTtcblxuICByZXR1cm4gaWRlbnRpZmllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVzbWVudE5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlc21lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2lzTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gaHlwb3RoZXNpc05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvY2VkdXJlQ2FsbCA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlQ2FsbE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRQcm9jZWR1cmVDYWxsTm9kZSgpO1xuXG4gIGlmIChwcm9jZWR1cmVDYWxsTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IHN1YnByb29mTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDsgLy8vXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1YkRlcml2YXRpb25Ob2RlID0gc3VicHJvb2ZOb2RlLmdldFN1YkRlcml2YXRpb25Ob2RlKCksXG4gICAgICAgIHN1YkRlcnZpYXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3ViRGVydmlhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IG1ldGF2YXJpYWJsZVN0cmluZywgLy8vXG4gICAgICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgPSBzdGVwTm9kZS5nZXRTYXRpc2ZpZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFR5cGVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN1YnByb29mT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZS5pc1N1YnByb29mTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hbWVGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5hbWUgPSBwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLmdldE5hbWUoKTtcblxuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyTm9kZXMgPSBwcm9jZWR1cmVDYWxsTm9kZS5nZXRQYXJhbWV0ZXJOb2RlcygpLFxuICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpXG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlcyA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLmdldFByb3BlcnR5Tm9kZSgpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlKGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZSA9IGJyYWNrZXRlZENjbnN0cnVjdG9yTm9kZS5nZXRUZXJtTm9kZSgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgIHR5cGUgPSBiYXNlVHlwZTsgIC8vL1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlSZWxhdGlvbnNGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdO1xuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpO1xuXG4gIHJldHVybiBuZWdhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0VGVybU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRUYXJnZXRUZXJtTm9kZSgpLFxuICAgICAgICB0YXJnZXRUZXJtID0gdGVybUZyb21UZXJtTm9kZSh0YXJnZXRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlKHRvcExldmVsQXNzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVkdWN0aW9uTm9kZSA9IHRvcExldmVsQXNzc2VydGlvbk5vZGUuZ2V0RGVkdWN0aW9uTm9kZSgpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmUgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSB0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvb2ZOb2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0UHJvb2ZOb2RlKCksXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbGFiZWxOb2RlID0gbWV0YUxlbW1hTWV0YXRob3JlbU5vZGUuZ2V0TGFiZWxOb2RlKCksXG4gICAgICAgIGxhYmVsU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobGFiZWxOb2RlKSxcbiAgICAgICAgbGFiZWwgPSBMYWJlbC5mcm9tTGFiZWxTdHJpbmcobGFiZWxTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHlBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSh0b3BMZXZlbEFzc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHlwb3RoZXNlcyA9IFtdO1xuXG4gIHJldHVybiB5cG90aGVzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eU5vZGUoKSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQnJhY2tldGVkQ29tYmluYXRvck5vZGUoYnJhY2tldGVkQ29tYmluYXRvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21KU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSBzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlLmdldFNpZ25hdHVyZU5vZGUoKSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUpTaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tSlNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2FzaXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlZmVyZW5jZU5vZGUgPSBzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlLmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0RnJhbWVOb2RlID0gZnJhbWVTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldEZyYW1lTm9kZSgpLFxuICAgICAgICB0YXJnZXRGcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZSh0YXJnZXRGcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0YXJnZXRGcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZShtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHJlZmVyZW5jZU5vZGUgPSBtZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSBSZWZlcmVuY2UuZnJvbVJlZmVyZW5jZVN0cmluZyhyZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUobWV0YUxldmVsQXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IG1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUodG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gdG9wTGV2ZWxBc3NzZXJ0aW9uTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlZEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmlzUmVzb2x2ZWQoKTtcblxuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3BMZXZlbE1ldGFBc3NlcnRpb25Gcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRvcExldmVsTWV0YUFzc2VydGlvbiA9IG51bGw7XG5cbiAgcmV0dXJuIHRvcExldmVsTWV0YUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcm92aXNpb25hbCA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudFRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRUZXJtTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJlcGxhY2VtZW50VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VwZXJUeXBlcyA9IFtdO1xuXG4gIGNvbnN0IHR5cGVzTm9kZSA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZXNOb2RlKCk7XG5cbiAgaWYgKHR5cGVzTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCk7XG5cbiAgICBzdXBlclR5cGVzID0gdHlwZXM7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlUHJlZml4Tm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZVByZWZpeE5vZGUoKSxcbiAgICAgICAgdHlwZVByZWZpeCA9IHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlUHJlZml4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgY29tYmluYXRvck5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLmdldENvbWJpbmF0b3JOb2RlKCksXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGNvbWJpbmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gY29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YVR5cGVOYW1lID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldE1ldGFUeXBlTmFtZSgpLFxuICAgICAgICBtZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTtcblxuICByZXR1cm4gbWV0YVR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb25hbEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvdmlzaW9uYWwgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJvdmlzaW9uYWwoKTtcblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdXBlclR5cGVzID0gW107XG5cbiAgY29uc3QgdHlwZXNOb2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZXNOb2RlKCk7XG5cbiAgaWYgKHR5cGVzTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVzID0gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCk7XG5cbiAgICBzdXBlclR5cGVzID0gdHlwZXM7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudEZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcmVwbGFjZW1lbnRGcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRGcmFtZU5vZGUoKSxcbiAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShyZXBsYWNlbWVudEZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50RnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlSZWxhdGlvbk5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0UHJvcGVydHlSZWxhdGlvbk5vZGUoKSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250eHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgZ2VuZXJhbENvbnR4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udHh0LCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSAoZnJhbWVTdWJzdGl0dXRpb24gfHwgdGVybVN1YnN0aXR1dGlvbik7XG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmdldENvbnN0cnVjdG9yTm9kZSgpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yTm9kZShjb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3Zpc2lvbmFsID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcm92aXNpb25hbCgpO1xuXG4gIHJldHVybiBwcm92aXNpb25hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0UmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldFRhcmdldFJlZmVyZW5jZU5vZGUoKSxcbiAgICAgICAgdGFyZ2V0UmVmZXJlbmNlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcodGFyZ2V0UmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHRhcmdldFJlZmVyZW5jZSA9IFJlZmVyZW5jZS5mcm9tUmVmZXJlbmNlU3RyaW5nKHRhcmdldFJlZmVyZW5jZVN0cmluZywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRhcmdldFJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0U3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICB0YXJnZXRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSh0YXJnZXRTdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGFyZ2V0U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgbGV0IHRlcm1TdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmICh0ZXJtU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZXZlbEFzc3VtcHRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YUxldmVsQXNzdW1wdGlvbnMgPSBbXTtcblxuICByZXR1cm4gbWV0YUxldmVsQXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKHJlcGxhY2VtZW50UmVmZXJlbmNlTm9kZSksXG4gICAgICAgIHJlcGxhY2VtZW50UmVmZXJlbmNlID0gUmVmZXJlbmNlLmZyb21SZWZlcmVuY2VTdHJpbmcocmVwbGFjZW1lbnRSZWZlcmVuY2VTdHJpbmcsIGNvbnRleHQpO1xuXG4gIHJldHVybiByZXBsYWNlbWVudFJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VtZW50U3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCByZXBsYWNlbWVudFN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50U3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcyA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcygpLFxuICAgICAgICBwcm9wZXJ0eURlY2xhcmF0aW9ucyA9IHByb3BlcnR5RGVjbGFyYXRpb25zRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcyhwcm9wZXJ0eURlY2xhcmF0aW9ubk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydHlEZWNsYXJhdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zID0gdGVybU5vZGVzLm1hcCgodGVybU5vZGUpID0+IHtcbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNGcm9tVHlwZXNOb2RlKHR5cGVzTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlTm9kZXMgPSB0eXBlc05vZGUuZ2V0VHlwZU5vZGVzKCksXG4gICAgICAgIHR5cGVzID0gdHlwZU5vZGVzLm1hcCgodHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBsYWJlbHMgPSBsYWJlbE5vZGVzLm1hcCgobGFiZWxOb2RlKSA9PiB7XG4gICAgY29uc3QgeyBMYWJlbCB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgbGFiZWxTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhsYWJlbE5vZGUpLFxuICAgICAgICAgIGxhYmVsID0gTGFiZWwuZnJvbUxhYmVsU3RyaW5nKGxhYmVsU3RyaW5nLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlbWlzZXMgPSBwcmVtaXNlTm9kZXMubWFwKChwcmVtaXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2UgPSBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWVudE5vZGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc0Zyb21QYXJhbWV0ZXJOb2RlcyhwYXJhbWV0ZXJOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyTm9kZXMubWFwKChwYXJhbWV0ZXJOb2RlKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyRnJvbVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1ldGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2VzID0gaHlwb3RoZXNpc05vZGVzLm1hcCgoaHlwb3RoZXNlTm9kZSkgPT4ge1xuICAgIGNvbnN0IGh5cG90aGVzaXMgPSBoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH0pO1xuXG4gIHJldHVybiBoeXBvdGhlc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25Ob2Rlcy5tYXAoKGFzc3VtcHRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH0pO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25Ob2Rlcy5tYXAoKHN1cHBvc2l0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uID0gc3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH0pO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBkZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBzdWJEZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eURlY2xhcmF0aW9uc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbm5Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0eURlY2xyYXRpb25zID0gcHJvcGVydHlEZWNsYXJhdGlvbm5Ob2Rlcy5tYXAoKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHlEZWNsY2FyYXRpb24gPSBwcm9wZXJ0eURlY2xhcmF0aW9uRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcm9wZXJ0eURlY2xjYXJhdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5RGVjbHJhdGlvbnM7XG59XG4iXSwibmFtZXMiOlsiYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZSIsImFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2RlcyIsImFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZSIsImF4aW9tRnJvbUF4aW9tTm9kZSIsImF4aW9tRnJvbVNlY3Rpb25Ob2RlIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsImJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckZyb21Db21iaW5hdG9yTm9kZSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlIiwiY29uY2x1c2lvbkZyb21SdWxlTm9kZSIsImNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlRnJvbVNlY3Rpb25Ob2RlIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JOb2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbVRvcExldmVsQXNzZXJ0aW9uTm9kZSIsImRlZHVjdGlvbkZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUiLCJkZXJpdmF0aW9uRnJvbVByb29mTm9kZSIsImVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJlcnJvckZyb21FcnJvck5vZGUiLCJmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21GcmFtZU5vZGUiLCJmcmFtZUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21KdWRnZW1lbnROb2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsImh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzIiwiaHlwb3RoZXNlc0Zyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJoeXBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlIiwiaWRlbnRpZmllckZyb21QYXJhbWV0ZXJOb2RlIiwiaWRlbnRpZmllckZyb21QYXJhbXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSIsImp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlIiwianVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJsYWJlbEZyb21MYWJlbE5vZGUiLCJsYWJlbEZyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwibGFiZWxzRnJvbUxhYmVsTm9kZXMiLCJsYWJlbHNGcm9tUnVsZU5vZGUiLCJsYWJlbHNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwibGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwibGVtbWFGcm9tTGVtbWFOb2RlIiwibGVtbWFGcm9tU2VjdGlvbk5vZGUiLCJtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZSIsIm1ldGFMZXZlbEFzc3VtcHRpb25Gcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uc0Zyb21Ub3BMZXZlbE1ldGFBc3NlcnRpb25Ob2RlIiwibWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlIiwibmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibmFtZUZyb21QYXJhbXRlck5vZGUiLCJuYW1lRnJvbVBhcmFuZXRlck5vZGUiLCJuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJuYW1lRnJvbVByb3BlcnR5Tm9kZSIsIm5hbWVGcm9tVHlwZU5vZGUiLCJuYW1lRnJvbVR5cGVQcmVmaXhOb2RlIiwibmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwibmVnYXRlZEZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJub21pbmFsVHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJlZml4TmFtZUZyb21UeXBlTm9kZSIsInByZW1pc2VGcm9tUHJlbWlzZU5vZGUiLCJwcmVtaXNlc0Zyb21QcmVtaXNlTm9kZXMiLCJwcmVtaXNlc0Zyb21SdWxlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21TdXBwb3NpdGlvbk5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInByb29mRnJvbVByb29mTm9kZSIsInByb29mRnJvbVJ1bGVOb2RlIiwicHJvb2ZGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwicHJvb2ZGcm9tVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uTm9kZSIsInByb3BlcnRpZXNGcm9tVHlwZU5vZGUiLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbkZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25zRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbnNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwicHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInByb3BlcnR5UmVsYXRpb25zRnJvbVZhcmlhYmxlTm9kZSIsInByb3Zpc2lvbmFsRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvdmlzaW9uYWxGcm9tVHlwZU5vZGUiLCJwcm92aXNpb25hbEZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21KU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhTGV2ZWxBc3N1bXB0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInJlcGxhY2VtZW50VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInJlc29sdmVkRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwicnVsZUZyb21SdWxlTm9kZSIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUpTYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUpTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZUZyb21Ub3BMZXZlbEFzc2VydGlvbk5vZGUiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Gcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21CcmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db21iaW5hdG9yTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tTWV0YUxldmVsQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudEZyb21TdGVwTm9kZSIsInN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMiLCJzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN0ZXBGcm9tU3RlcE5vZGUiLCJzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInN1cGVyVHlwZXNGcm9tVHlwZU5vZGUiLCJzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJzdXBwb3NpdGlvbnNGcm9tVG9wTGV2ZWxBc3NlcnRpb25Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVRvcExldmVsTWV0YUFzc2VydGlvbk5vZGUiLCJ0YXJnZXRGcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInRhcmdldFN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwidGFyZ2V0VGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1Gcm9tQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwidGVybUZyb21Db25zdHJ1Y3Rvck5vZGUiLCJ0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInRlcm1TdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUiLCJ0ZXJtc0Zyb21TaWduYXR1cmVOb2RlIiwidGVybXNGcm9tVGVybU5vZGVzIiwidGhlb3JlbUZyb21TZWN0aW9uTm9kZSIsInRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25Gcm9tUmVmZXJlbmNlTm9kZSIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbUJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21Db25zdHJ1Y3Rvck5vZGUiLCJ0eXBlRnJvbUVxdWl2YWxlbmNlTm9kZSIsInR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsInR5cGVGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVByb3BlcnR5Tm9kZSIsInR5cGVGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVGVybU5vZGUiLCJ0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21UeXBlTm9kZSIsInR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVZhcmlhYmxlTm9kZSIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwidHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwidHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVzRnJvbVR5cGVzTm9kZSIsInZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21UZXJtTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZU5vZGUiLCJjb250ZXh0IiwidHlwZSIsImJhc2VUeXBlIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsIlR5cGUiLCJlbGVtZW50cyIsIm5vZGUiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJzdHJpbmciLCJsaW5lSW5kZXgiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJub2RlQXNTdHJpbmciLCJ0ZXJtIiwic3RlcE5vZGUiLCJTdGVwIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RlcCIsInJ1bGVOb2RlIiwiUnVsZSIsInByb29mIiwibGFiZWxzIiwicHJlbWlzZXMiLCJjb25jbHVzaW9uIiwicnVsZVN0cmluZyIsInJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uIiwicnVsZSIsImxhYmVsTm9kZSIsIkxhYmVsIiwibWV0YXZhcmlhYmxlIiwibGFiZWwiLCJlcnJvck5vZGUiLCJFcnJvciIsImVycm9yIiwibGVtbWFOb2RlIiwiTGVtbWEiLCJ0b3BMZXZlbEFzc3NlcnRpb25Ob2RlIiwiZGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsInRvcExldmVsQXNzc2VydGlvblN0cmluZyIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImxlbW1hIiwiZnJhbWVOb2RlIiwiRnJhbWUiLCJhc3N1bXB0aW9ucyIsImZyYW1lIiwicHJvb2ZOb2RlIiwiUHJvb2YiLCJkZXJpdmF0aW9uIiwiYXhpb21Ob2RlIiwiQXhpb20iLCJheGlvbSIsInNlY3Rpb25Ob2RlIiwiaHlwb3RoZXNpc05vZGVzIiwiZ2V0SHlwb3RoZXNpc05vZGVzIiwidGhlb3JlbSIsImNvbmplY3R1cmUiLCJzZWN0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzVG9wTGV2ZWxBc3NlcnRpb24iLCJzZWN0aW9uIiwiU2VjdGlvbiIsInByZW1pc2VOb2RlIiwiUHJlbWlzZSIsInByb2NlZHVyZUNhbGwiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwicHJvcGVydHlOb2RlIiwicHJvcGVydHkiLCJQcm9wZXJ0eSIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiaWRlbnRpZmllciIsInByb3BlcnR5UmVsYXRpb25zIiwidmFyaWFibGUiLCJzdWJwcm9vZk5vZGUiLCJTdWJwcm9vZiIsInN1YkRlcml2YXRpb24iLCJzdWJwcm9vZlN0cmluZyIsInN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24iLCJzdWJwcm9vZiIsImVxdWFsaXR5Tm9kZSIsIkVxdWFsaXR5IiwibGVmdFRlcm0iLCJyaWdodFRlcm0iLCJlcXVhbGl0eSIsImRlZHVjdGlvbk5vZGUiLCJEZWR1Y3Rpb24iLCJzdGF0ZW1lbnROb2RlIiwiU3RhdGVtZW50Iiwic2lnbmF0dXJlTm9kZSIsIlNpZ25hdHVyZSIsInRlcm1zIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsInRvcExldmVsTWV0YUFzc2VydGlvbiIsImp1ZGdlbWVudE5vZGUiLCJKdWRnZW1lbnQiLCJhc3N1bXB0aW9uIiwianVkZ2VtZW50IiwibWV0YUxlbW1hTm9kZSIsIk1ldGFMZW1tYSIsIm1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlIiwibWV0YUxldmVsQXNzdW1wdGlvbnMiLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJtZXRhTGVtbWEiLCJwYXJhbWV0ZXJOb2RlIiwiUGFyYW1ldGVyIiwicGFyYW1ldGVyIiwiaHlwb3RoZXNlTm9kZSIsIkh5cG90aHNpcyIsImh5cG9odGVzaXMiLCJjb25qZWN0dXJlTm9kZSIsIkNvbmplY3R1cmUiLCJjb21iaW5hdG9yTm9kZSIsIkNvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY29uY2x1c2lvbk5vZGUiLCJDb25jbHVzaW9uIiwiZGVyaXZhdGlvbk5vZGUiLCJEZXJpdmF0aW9uIiwic3RlcHNPclN1YnByb29mcyIsInR5cGVQcmVmaXhOb2RlIiwiVHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJhc3N1bXB0aW9uTm9kZSIsIkFzc3VtcHRpb24iLCJjb25zdHJ1Y3Rvck5vZGUiLCJDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwic3VwcG9zaXRpb25Ob2RlIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsImVxdWl2YWxlbmNlTm9kZSIsIkVxdWl2YWxlbmNlIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImVxdWl2YWxlbmNlIiwibWV0YXRoZW9yZW1Ob2RlIiwiTWV0YXRoZW9yZW0iLCJtZXRhdGhlb3JlbSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhVHlwZSIsInN1YkRlcml2YXRpb25Ob2RlIiwiU3ViRGVyaXZhdGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJwcm9jZWR1cmVDYWxsTm9kZSIsIlByb2NlZHVyZUNhbGwiLCJwYXJhbWV0ZXJzIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsInByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyIsInN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBPclN1YnByb29mIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwibmVnYXRlZCIsImlzTmVnYXRlZCIsImRlZmluZWRBc3NlcnRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uTm9kZSIsIlByb3BlcnR5UmVsYXRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uIiwidGVybVN1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsIlRlcm1TdWJzdGl0dXRpb24iLCJjb250ZXh0cyIsInRhcmdldFRlcm0iLCJyZXBsYWNlbWVudFRlcm0iLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJ0YXJnZXRGcmFtZSIsInJlcGxhY2VtZW50RnJhbWUiLCJmcmFtZVN1YnN0aXR1dGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsIlByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHMiLCJzdWJwcm9vZkFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwiU2F0aXNmaWVzQXNzZXJ0aW9uIiwicHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsIlByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZWVuY2UiLCJwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsIlByb3BlcnR5RGVjbGFyYXRpb24iLCJwcm9wZXJ0eURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb25Ob2RlIiwiTWV0YUxldmVsQXNzdW1wdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb24iLCJicmFja2V0ZWRDb21iaW5hdG9yTm9kZSIsIkJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwiQnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvciIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJUeXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29tYmluYXRvckRlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsIlNpbXBsZVR5cGVEZWNsYXJhdGlvbiIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbiIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJSZWZlcmVuY2VTdWJzdGl0dXRpb24iLCJ0YXJnZXRSZWZlcmVuY2UiLCJyZXBsYWNlbWVudFJlZmVyZW5jZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJTdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJyZXNvbHZlZCIsInN1YnN0aXR1dGlvbiIsInRhcmdldFN0YXRlbWVudCIsInJlcGxhY2VtZW50U3RhdGVtZW50Iiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwiQ29tcGxleFR5cGVEZWNsYXJhdGlvbiIsInByb3BlcnR5RGVjbGFyYXRpb25zIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZyIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwidHlwZU5hbWUiLCJnZXRUeXBlTmFtZSIsImdldFByb29mTm9kZSIsImxhYmVsTm9kZXMiLCJnZXRMYWJlbE5vZGVzIiwiZ2V0VmFyaWFibGVOb2RlIiwicHJlbWlzZU5vZGVzIiwiZ2V0UHJlbWlzZU5vZGVzIiwiZ2V0QXhpb21Ob2RlIiwiZ2V0TGVtbWFOb2RlIiwicHJvcGVydHlOYW1lIiwiZ2V0UHJvcGVydHlOYW1lIiwiZ2V0TmFtZSIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlU3RyaW5nIiwiZnJvbVJlZmVyZW5jZVN0cmluZyIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldFRoZW9yZW1Ob2RlIiwiZ2V0RnJhbWVOb2RlIiwidGVybU5vZGVzIiwiZ2V0QXNzdW1wdGlvbk5vZGVzIiwiZ2V0RGVyaXZhdGlvbk5vZGUiLCJvY25zdHJ1Y3Rvck5vZGUiLCJnZXRUZXJtTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImxlZnRUZXJtTm9kZSIsImdldExlZnRUZXJtTm9kZSIsImdldFRlcm1Ob2RlcyIsIm1ldGF2YXJhaWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwidHlwZW1Ob2RlIiwiZ2V0VHlwZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwiZ2V0Q29uamVjdHVyZU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsImdldEVxdWFsaXR5Tm9kZSIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImdldElkZW50aWZpZXIiLCJnZXRKdWRnZW1lbnROb2RlIiwic3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUiLCJpc1N0ZXBOb2RlIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwiZ2V0QXNzdW1wdGlvbk5vZGUiLCJzdGF0ZXNtZW50Tm9kZSIsImNvbmNsdXNpbm9Ob2RlIiwiaHlwb3RoZXNpc05vZGUiLCJnZXRQcm9jZWR1cmVDYWxsTm9kZSIsInN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwiZ2V0U3ViRGVyaXZhdGlvbk5vZGUiLCJzdWJEZXJ2aWF0aW9uIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwiZ2V0U2F0aXNmaWVkQXNzZXJ0aW9uTm9kZSIsImdldFR5cGVBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUiLCJpc1N1YnByb29mTm9kZSIsInBhcmFtZXRlck5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJnZXRQcm9wZXJ0eU5vZGUiLCJicmFja2V0ZWRDY25zdHJ1Y3Rvck5vZGUiLCJnZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSIsInRhcmdldFRlcm1Ob2RlIiwiZ2V0VGFyZ2V0VGVybU5vZGUiLCJnZXREZWR1Y3Rpb25Ob2RlIiwiZ2V0U2lnbmF0dXJlTm9kZSIsImdldExhYmVsTm9kZSIsImxhYmVsU3RyaW5nIiwiZnJvbUxhYmVsU3RyaW5nIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudE5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJ5cG90aGVzZXMiLCJzYXNpc2ZpZXNBc3NlcnRpb25Ob2RlIiwidGFyZ2V0RnJhbWVOb2RlIiwiZ2V0VGFyZ2V0RnJhbWVOb2RlIiwiaXNSZXNvbHZlZCIsImlzUHJvdmlzaW9uYWwiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicmVwbGFjZW1lbnRUZXJtTm9kZSIsImdldFJlcGxhY2VtZW50VGVybU5vZGUiLCJ0eXBlc05vZGUiLCJnZXRUeXBlc05vZGUiLCJ0eXBlcyIsImdldFR5cGVQcmVmaXhOb2RlIiwiZ2V0Q29tYmluYXRvck5vZGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsInJlcGxhY2VtZW50RnJhbWVOb2RlIiwiZ2V0UmVwbGFjZW1lbnRGcmFtZU5vZGUiLCJnZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSIsImdlbmVyYWxDb250eHQiLCJnZXRDb25zdHJ1Y3Rvck5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VOb2RlIiwiZ2V0VGFyZ2V0UmVmZXJlbmNlTm9kZSIsInRhcmdldFJlZmVyZW5jZVN0cmluZyIsInRhcmdldFN0YXRlbWVudE5vZGUiLCJnZXRUYXJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUiLCJnZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUiLCJnZXRSZXBsYWNlbWVudFJlZmVyZW5jZU5vZGUiLCJyZXBsYWNlbWVudFJlZmVyZW5jZVN0cmluZyIsInJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsImdldFJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25uTm9kZXMiLCJnZXRQcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJtYXAiLCJ0eXBlTm9kZXMiLCJnZXRUeXBlTm9kZXMiLCJoeXBvdGhlc2lzIiwic3RlcE9yU3VicHJvb2ZOb2RlcyIsImdldFN0ZXBPclN1YnByb29mTm9kZXMiLCJwcm9wZXJ0eURlY2xyYXRpb25zIiwicHJvcGVydHlEZWNsY2FyYXRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTBmZ0JBO2VBQUFBOztRQTQzQkFDO2VBQUFBOztRQTQxQkFDO2VBQUFBOztRQXJoQ0FDO2VBQUFBOztRQXhoQ0FDO2VBQUFBOztRQTIyQkFDO2VBQUFBOztRQTNNQUM7ZUFBQUE7O1FBV0FDO2VBQUFBOztRQTBCQUM7ZUFBQUE7O1FBaW9DQUM7ZUFBQUE7O1FBdGlEQUM7ZUFBQUE7O1FBdWZBQztlQUFBQTs7UUF6ZUFDO2VBQUFBOztRQWtxQkFDO2VBQUFBOztR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