openstack-uicore-foundation 3.0.77 → 3.0.78

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 (2) hide show
  1. package/lib/components.js +7 -20
  2. package/package.json +1 -1
package/lib/components.js CHANGED
@@ -937,6 +937,7 @@ const ExtraQuestionsForm = ({
937
937
  let submit = null;
938
938
  const questionRef = Object(react__WEBPACK_IMPORTED_MODULE_0__["useRef"])({});
939
939
  const [answers, setAnswers] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])({});
940
+ const [formErrors, setFormErrors] = Object(react__WEBPACK_IMPORTED_MODULE_0__["useState"])({});
940
941
  Object(react__WEBPACK_IMPORTED_MODULE_0__["useEffect"])(() => {
941
942
  formatUserAnswers();
942
943
  }, [extraQuestions]);
@@ -963,27 +964,12 @@ const ExtraQuestionsForm = ({
963
964
 
964
965
  const Error = ({
965
966
  name
966
- }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_final_form__WEBPACK_IMPORTED_MODULE_8__["Field"], {
967
- name: name,
968
- subscription: {
969
- error: true,
970
- submitError: true,
971
- invalid: true,
972
- touched: true
973
- }
974
- }, ({
975
- meta: {
976
- error,
977
- submitError,
978
- invalid,
979
- touched
980
- }
981
967
  }) => {
982
- console.log(`name ${name} error ${error} submitError ${submitError} invalid ${invalid} touched ${touched}`);
983
- return invalid && (error || submitError || touched) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
968
+ const error = formErrors[name] || '';
969
+ return error ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
984
970
  className: "extra-question-error"
985
- }, error ? error : submitError) : null;
986
- });
971
+ }, "error") : null;
972
+ };
987
973
 
988
974
  const checkRule = (value, rule) => {
989
975
  let values = rule.answer_values;
@@ -1242,6 +1228,7 @@ const ExtraQuestionsForm = ({
1242
1228
  extraQuestions.forEach(q => {
1243
1229
  validateQuestion(q, values, errors);
1244
1230
  });
1231
+ setFormErrors(_objectSpread({}, errors));
1245
1232
  return errors;
1246
1233
  };
1247
1234
 
@@ -11138,4 +11125,4 @@ module.exports = require("video.js/dist/video-js.css");
11138
11125
 
11139
11126
  /******/ });
11140
11127
  });
11141
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9hamF4bG9hZGVyL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2F0dGVuZGFuY2UtdHJhY2tlci5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9jaXJjbGUtYnV0dG9uL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2NpcmNsZS1idXR0b24vaW5kZXgubW9kdWxlLnNjc3M/NGMyNiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9jbG9jay5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9leGNsdXNpdmUtd3JhcHBlci5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9leHRyYS1xdWVzdGlvbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvZm9ybXMvcnN2cC1mb3JtLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2Zvcm1zL3NpbXBsZS1mb3JtLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2ZyYWdtZW4tcGFyc2VyLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2ZyZWUtdGV4dC1zZWFyY2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvZ29vZ2xlLW1hcC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvYWNjZXNzLWxldmVscy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvYWN0aW9uLWRyb3Bkb3duL2FjdGlvbi1kcm9wZG93bi5sZXNzP2Q3NDMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2FjdGlvbi1kcm9wZG93bi9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY2hlY2tib3gtbGlzdC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY29tcGFueS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY291bnRyeS1kcm9wZG93bi5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY291bnRyeS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZGF0ZXRpbWVwaWNrZXIvZGF0ZXRpbWVwaWNrZXIubGVzcz84Y2Q1Iiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9kYXRldGltZXBpY2tlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZHJvcGRvd24uanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2VkaXRvci1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZXZlbnQtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2ZyZWUtbXVsdGktdGV4dC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZ3JvdXAtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vT3B0aW9uR3JvdXAuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vb3B0aW9uZ3JvdXAubGVzcz9hNDAxIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9sYW5ndWFnZS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvbWVtYmVyLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9vcmdhbml6YXRpb24taW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3JhZGlvLWxpc3QuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3JlZ2lzdHJhdGlvbi1jb21wYW55LWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zcGVha2VyLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zcG9uc29yLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zdW1taXQtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3RhZy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdGV4dC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdGV4dGFyZWEtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3RpY2tldC10eXBlcy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0LXYyL2Ryb3B6b25lLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaWNvbi5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0LXYyL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaW5kZXgubGVzcz9hZDBlIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQvZmlsZS5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L2pwZy5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC9tb3YucG5nIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQvbXA0LnBuZyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L3BkZi5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC91cGxvYWQubGVzcz80NjNmIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3Jhdy1odG1sL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3Rpb25zL3BhbmVsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3VyaXR5L2Fic3RyYWN0LWF1dGgtY2FsbGJhY2stcm91dGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvc2VjdXJpdHkvYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zZWN1cml0eS9tZXRob2RzLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3VyaXR5L3Nlc3Npb24tY2hlY2tlci9vcC1zZXNzaW9uLWNoZWNrZXIuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvc2ltcGxlLWxpbmstbGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zaW1wbGUtbGluay1saXN0L3NpbXBsZS1saW5rLWxpc3QubGVzcz8xYzlkIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3N1bW1pdC1kcm9wZG93bi9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zdW1taXQtZHJvcGRvd24vc3VtbWl0LWRyb3Bkb3duLmxlc3M/ZThiNSIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtZWRpdGFibGUvRWRpdGFibGVUYWJsZS5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlQ2VsbC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlSGVhZGluZy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlUm93LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLWVkaXRhYmxlL2VkaXRhYmxlLXRhYmxlLmNzcz83ZTBjIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNlbGVjdGFibGUvU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNlbGVjdGFibGUvU2VsZWN0YWJsZVRhYmxlSGVhZGluZy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zZWxlY3RhYmxlL1NlbGVjdGFibGVUYWJsZVJvdy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zZWxlY3RhYmxlL3NlbGVjdGFibGUtdGFibGUuY3NzPzVlM2QiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVBY3Rpb25zVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNvcnRhYmxlL1NvcnRhYmxlVGFibGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZUhlYWRpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZVJvdy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zb3J0YWJsZS90YWJsZS1zb3J0YWJsZS5jc3M/ZjhmMiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS9BY3Rpb25zVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlL1RhYmxlLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlL1RhYmxlQ2VsbC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS9UYWJsZUhlYWRpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUvVGFibGVSb3cuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY3NzPzM3OTMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdXNlLWZpdC10ZXh0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3ZpZGVvLXN0cmVhbS5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvaTE4biBzeW5jIF5cXC5cXC8uKlxcLmpzb24kIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9hY3Rpb25zLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9tZXRob2RzLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9xdWVyeS1hY3Rpb25zLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9xdWVzdGlvbnMtc2V0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImF3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94L2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94LmNzc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImJyb3dzZXItdGFicy1sb2NrXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwiY3J5cHRvXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwiZHJvcHpvbmVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJkcm9wem9uZS9kaXN0L2Ryb3B6b25lLmNzc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImV4dGVuZFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImkxOG4tcmVhY3RcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImlkdG9rZW4tdmVyaWZpZXJcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJpbW11dGFiaWxpdHktaGVscGVyXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwibG9kYXNoXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwibW9tZW50LXRpbWV6b25lXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicHJvcC10eXBlc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZGF0ZXRpbWVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1kbmRcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1kbmQtaHRtbDUtYmFja2VuZFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWRvbVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWRyb3B6b25lXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZmluYWwtZm9ybVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWdvb2dsZS1tYXBzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZ29vZ2xlLW1hcHMvbGliL2NvbXBvbmVudHMvYWRkb25zL01hcmtlckNsdXN0ZXJlclwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXJlZHV4XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtcnRlXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3Qtc2VsZWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3Qtc2VsZWN0L2xpYi9Bc3luY1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNDcmVhdGFibGVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1zZWxlY3QvbGliL0NyZWF0YWJsZVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXNlbGVjdC9saWIvY29tcG9uZW50c1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXRvb2x0aXBcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJzdXBlcmFnZW50XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwic3dlZXRhbGVydDJcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJ1cmlqc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInZpZGVvLmpzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwidmlkZW8uanMvZGlzdC92aWRlby1qcy5jc3NcIiJdLCJuYW1lcyI6WyJsYW5ndWFnZSIsImdldEN1cnJlbnRVc2VyTGFuZ3VhZ2UiLCJsZW5ndGgiLCJzcGxpdCIsIlQiLCJzZXRUZXh0cyIsInJlcXVpcmUiLCJlIiwiQWpheExvYWRlciIsInNob3ciLCJyZWxhdGl2ZSIsImNvbG9yIiwic2l6ZSIsImNoaWxkcmVuIiwic3R5bGVzIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwicG9zaXRpb24iLCJ6SW5kZXgiLCJtYXJnaW4iLCJjdXJzb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ0b3AiLCJsZWZ0Iiwic3R5bGVTcGlubmVyIiwiZm9udFNpemUiLCJzdHlsZVNwaW5uZXJDb250YWluZXIiLCJ0ZXh0QWxpZ24iLCJyaWdodCIsImJvdHRvbSIsInN0eWxlQmFja2dyb3VuZCIsImJhY2tncm91bmQiLCJvcGFjaXR5IiwiQXR0ZW5kYW5jZVRyYWNrZXIiLCJSZWFjdCIsIkNvbXBvbmVudCIsImFwaUJhc2VVcmwiLCJzdW1taXRJZCIsInNvdXJjZUlkIiwic291cmNlTmFtZSIsInByb3BzIiwibG9jYXRpb24iLCJnZXRMb2NhdGlvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QWNjZXNzVG9rZW4iLCJodHRwIiwicHV0Iiwic2VuZCIsImFjY2Vzc190b2tlbiIsInR5cGUiLCJzb3VyY2VfaWQiLCJlbmQiLCJjb25zb2xlIiwibG9nIiwicG9zdCIsIm5hdmlnYXRvciIsInNlbmRCZWFjb24iLCJ1bmRlZmluZWQiLCJ3aW5kb3ciLCJlbmNvZGVVUklDb21wb25lbnQiLCJocmVmIiwiY29tcG9uZW50RGlkTW91bnQiLCJ0cmFja0VudGVyIiwib25CZWZvcmVVbmxvYWQiLCJhZGRFdmVudExpc3RlbmVyIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ0cmFja0xlYXZlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbmRlciIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsIm51bWJlciIsImlzUmVxdWlyZWQiLCJkZWZhdWx0UHJvcHMiLCJpc0xpdmUiLCJldmVudCIsIm5vd1V0YyIsImhhc0VuZGVkIiwiZW5kX2RhdGUiLCJoYXNTdGFydGVkIiwic3RhcnRfZGF0ZSIsIkNpcmNsZUJ1dHRvbiIsImlzU2NoZWR1bGVkIiwiYWRkVG9TY2hlZHVsZSIsInJlbW92ZUZyb21TY2hlZHVsZSIsImVudGVyQ2xpY2siLCJhbHdheXNTaG93RW50ZXIiLCJpc0xpdmVOb3ciLCJidXR0b25DbGFzcyIsImljb25DbGFzcyIsIm9uQ2xpY2siLCJoYW5kbGVDbGljayIsImV2IiwiYWN0aW9uIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJlbnRlciIsImFkZGVkIiwiYWRkIiwiY2lyY2xlQnV0dG9uIiwib2JqZWN0IiwiYm9vbCIsImZ1bmMiLCJDbG9jayIsImNvbnN0cnVjdG9yIiwicmVzcG9uc2UiLCJmZXRjaCIsImNhdGNoIiwiZXJyIiwianNvbiIsInRpbWVzdGFtcCIsInN0YXRlIiwib25UaWNrIiwic2V0U3RhdGUiLCJmcmFnbWVudFBhcnNlciIsIkZyYWdtZW50UGFyc2VyIiwiaW50ZXJ2YWwiLCJ0aW1lem9uZSIsIm5vdyIsIm5vd1FTIiwiZ2V0UGFyYW0iLCJtb21lbnRRUyIsIm1vbWVudCIsInR6IiwiaXNWYWxpZCIsInZhbHVlT2YiLCJsb2NhbCIsInVuaXgiLCJzZXJ2ZXJUaW1lIiwiZ2V0U2VydmVyVGltZSIsImxvY2FsQWZ0ZXIiLCJzZXRJbnRlcnZhbCIsInRpY2siLCJjbGVhckludGVydmFsIiwibWFyZ2luVG9wIiwiZm9ybWF0IiwiRXhjbHVzaXZlIiwic2hvd0ZpZWxkIiwiYmluZCIsIm5hbWUiLCJleGNsdXNpdmVTZWN0aW9ucyIsIkVYQ0xVU0lWRV9TRUNUSU9OUyIsImluY2x1ZGVzIiwiRXh0cmFRdWVzdGlvbnNGb3JtIiwiZXh0cmFRdWVzdGlvbnMiLCJ1c2VyQW5zd2VycyIsIm9uQW5zd2VyQ2hhbmdlcyIsImNsYXNzTmFtZSIsInF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lIiwicXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZSIsInF1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZSIsImZvcm1SZWYiLCJyZWFkT25seSIsImRlYnVnIiwiYnV0dG9uVGV4dCIsInN1Ym1pdCIsInF1ZXN0aW9uUmVmIiwidXNlUmVmIiwiYW5zd2VycyIsInNldEFuc3dlcnMiLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsImZvcm1hdFVzZXJBbnN3ZXJzIiwicXMiLCJRdWVzdGlvbnNTZXQiLCJmb3JtYXRBbnN3ZXJzIiwiQ29uZGl0aW9uIiwid2hlbiIsInJ1bGUiLCJ2YWx1ZSIsImlucHV0IiwiY2hlY2tWaXNpYmlsaXR5IiwiY2hlY2tSdWxlIiwiRXJyb3IiLCJlcnJvciIsInN1Ym1pdEVycm9yIiwiaW52YWxpZCIsInRvdWNoZWQiLCJtZXRhIiwidmFsdWVzIiwiYW5zd2VyX3ZhbHVlcyIsIkFycmF5IiwiaXNBcnJheSIsInJlcyIsImFud2VyX3ZhbHVlc19vcGVyYXRvciIsImZvckVhY2giLCJ2IiwicGFyc2VJbnQiLCJ0b1N0cmluZyIsInJ1bGVSZXN1bHQiLCJ2aXNpYmlsaXR5IiwidmlzaWJpbGl0eV9jb25kaXRpb24iLCJjdXJyZW50Iiwic3ViX3F1ZXN0aW9uIiwiaWQiLCJyZW5kZXJRdWVzdGlvbiIsInEiLCJxdWVzdGlvblZhbHVlcyIsImVsIiwibWFuZGF0b3J5IiwibGFiZWwiLCJlbmRzV2l0aCIsInJlcGxhY2UiLCJvbkNoYW5nZSIsInBsYWNlaG9sZGVyIiwic3ViX3F1ZXN0aW9uX3J1bGVzIiwibWFwIiwiciIsInZhbCIsImlzVmlzaWJsZSIsInZhbGlkYXRlUXVlc3Rpb24iLCJlcnJvcnMiLCJoYXNPd25Qcm9wZXJ0eSIsIm9uU3VibWl0IiwidmFsaWRhdGUiLCJPYmplY3QiLCJrZXlzIiwiaGFuZGxlU3VibWl0IiwiZm9ybSIsInN1Ym1pdHRpbmciLCJwcmlzdGluZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJhcnJheSIsIm9uZU9mVHlwZSIsInNoYXBlIiwiYW55IiwiUnN2cEZvcm0iLCJxdWVzdGlvbnMiLCJxdWVzdGlvbl9pZCIsImhhbmRsZUNoYW5nZSIsImhhc0Vycm9ycyIsImZpbmQiLCJhIiwiY2xhc3NfbmFtZSIsImlzX2NvdW50cnlfc2VsZWN0b3IiLCJpc19tdWx0aXNlbGVjdCIsImVtcHR5X3N0cmluZyIsInRhcmdldCIsImFuc3dlciIsImZpZWxkIiwiaXNfbWFuZGF0b3J5IiwiU2ltcGxlRm9ybSIsImVudGl0eSIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInByZXZTdGF0ZSIsInNuYXBzaG90Iiwic2Nyb2xsVG9FcnJvciIsInNoYWxsb3dFcXVhbCIsImlzRW1wdHkiLCJjaGVja2VkIiwiY3JlYXRlRmllbGQiLCJmaWVsZHMiLCJmIiwidHJhbnNsYXRlIiwib3JpZ2luYWxIYXNoIiwiaGFzaCIsImNvbnZlcnRUb0hhc2giLCJzdHJIYXNoIiwic3Vic3RyIiwidG9Mb3dlckNhc2UiLCJwYXJhbXMiLCJwYXJhbSIsInRyaW0iLCJjbGVhclBhcmFtcyIsImtleSIsImdldFBhcmFtcyIsImRlbGV0ZVBhcmFtIiwiZGVsZXRlUGFyYW1zIiwic2V0UGFyYW0iLCJzZXJpYWxpemUiLCJGcmVlVGV4dFNlYXJjaCIsIm9uU2VhcmNoQ2xpY2siLCJvbkNsZWFyQ2xpY2siLCJvbktleVByZXNzZWQiLCJkb0ZpbHRlcmluZyIsInRlcm0iLCJvblNlYXJjaCIsImNvZGUiLCJrZXlDb2RlIiwid2hpY2giLCJNQVAiLCJkZWZhdWx0Wm9vbSIsImRlZmF1bHRDZW50ZXIiLCJsYXQiLCJsbmciLCJvcHRpb25zIiwibWluWm9vbSIsIm1heFpvb20iLCJHb29nbGVNYXBXcmFwcGVyIiwid2l0aEdvb2dsZU1hcCIsIm9uTWFwTG9hZCIsInpvb20iLCJjZW50ZXIiLCJvbk1hcENoYW5nZSIsIm9uTWFwQ2xpY2siLCJzaG93TWFya2VycyIsIm1hcmtlcnMiLCJtYXJrZXIiLCJvblRvZ2dsZUluZm9XaW5kb3ciLCJvbk1hcmtlckRyYWciLCJkcmFnZ2FibGUiLCJpc0luZm9XaW5kb3dPcGVuIiwiR01hcCIsImhhbmRsZU1hcExvYWQiLCJoYW5kbGVNYXBDaGFuZ2UiLCJoYW5kbGVNYXJrZXJEcmFnIiwiaGFuZGxlTWFwQ2xpY2siLCJuZXdfbWFya2VycyIsImFycmF5c0VxdWFsIiwib2xkX21hcmtlcnNfc3RyIiwibSIsInNvcnQiLCJqb2luIiwibmV3X21hcmtlcnNfc3RyIiwibWFya2VyQm91bmRzIiwiZ29vZ2xlIiwibWFwcyIsIkxhdExuZ0JvdW5kcyIsIm1hcmtlcl9sb2MiLCJMYXRMbmciLCJleHRlbmQiLCJfbWFwQ29tcG9uZW50IiwiZml0Qm91bmRzIiwidmlzaWJsZV9tYXJrZXJzIiwiZmlsdGVyIiwiZ2V0Qm91bmRzIiwiY29udGFpbnMiLCJvbkNoYW5nZUNhbGxiYWNrIiwiaGFuZGxlTWFya2VyQ2xpY2siLCJtYXJrZXJfaWQiLCJpc19vcGVuIiwib25NYXJrZXJEcmFnZ2VkIiwibGF0TG5nIiwiQWNjZXNzTGV2ZWxzSW5wdXQiLCJnZXRBY2Nlc3NMZXZlbHMiLCJnZXRPcHRpb25WYWx1ZSIsImdldE9wdGlvbkxhYmVsIiwiYWNjZXNzTGV2ZWwiLCJjYWxsYmFjayIsIlByb21pc2UiLCJyZXNvbHZlIiwicXVlcnlBY2Nlc3NMZXZlbHMiLCJtdWx0aSIsInJlc3QiLCJpc011bHRpIiwiaGFzX2Vycm9yIiwiQWN0aW9uRHJvcGRvd24iLCJhY3Rpb25MYWJlbCIsInNtYWxsRGRsIiwic21hbGxCdG4iLCJ0aGVWYWx1ZSIsIm9wdCIsIkNoZWNrYm94TGlzdCIsIm90aGVyVmFsdWUiLCJvcCIsIm90aGVyQ2hlY2tlZCIsImhhbmRsZU90aGVyQ0JDaGFuZ2UiLCJvcHRpb25WYWx1ZXMiLCJ0aGVWYWwiLCJpc05hTiIsInB1c2giLCJkaXNhYmxlZCIsImlubGluZSIsImh0bWwiLCJhbGxvd090aGVyIiwiaXNEaXNhYmxlZCIsInN0eWxlIiwicGFkZGluZ0xlZnQiLCJtYXJnaW5MZWZ0IiwiZmxvYXQiLCJDb21wYW55SW5wdXQiLCJoYW5kbGVOZXciLCJnZXRDb21wYW5pZXMiLCJ0cmFuc2xhdGVWYWx1ZSIsIm5ld1ZhbHVlIiwib25DcmVhdGUiLCJ0cmFuc2xhdGVPcHRpb25zIiwibmV3T3B0aW9ucyIsImMiLCJxdWVyeUNvbXBhbmllcyIsImFsbG93Q3JlYXRlIiwiQXN5bmNDb21wb25lbnQiLCJBc3luY0NyZWF0YWJsZVNlbGVjdCIsIkFzeW5jU2VsZWN0IiwiQ291bnRyeURyb3Bkb3duIiwic2V0T3B0aW9ucyIsImFib3J0Q29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImdldENvdW50cnlMaXN0Iiwic2lnbmFsIiwiYWJvcnQiLCJjb3VudHJ5TGlzdCIsImlzb19jb2RlIiwiQ291bnRyeUlucHV0IiwiRGF0ZVRpbWVQaWNrZXIiLCJpc1ZhbGlkRGF0ZSIsImRhdGUiLCJpc01vbWVudCIsImN1cnJlbnREYXRlIiwic2VsZWN0ZWREYXRlIiwidmFsaWRhdGlvbiIsImFmdGVyIiwiYmVmb3JlIiwiaXNCZWZvcmUiLCJpc0FmdGVyIiwiYWZ0ZXJEYXRlIiwic3VidHJhY3QiLCJiZWZvcmVEYXRlIiwiaW5wdXRQcm9wcyIsImlucHV0RGlzYWJsZWQiLCJ0aW1lIiwiYXV0b0NvbXBsZXRlIiwiRHJvcGRvd24iLCJzZWxlY3Rpb24iLCJjbGVhcmFibGUiLCJvdmVycmlkZUNTUyIsImlzQ2xlYXJhYmxlIiwic2VsZWN0Q2xhc3NOYW1lIiwic2VsZWN0U3R5bGVzIiwibWVudSIsIlRleHRFZGl0b3IiLCJSaWNoVGV4dEVkaXRvciIsImRlZmF1bHQiLCJlZGl0b3JWYWx1ZSIsImNyZWF0ZUVtcHR5VmFsdWUiLCJjdXJyZW50VmFsdWUiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJzZXRDb250ZW50RnJvbVN0cmluZyIsIm9sZEVkaXRvclZhbHVlIiwib2xkQ29udGVudFN0YXRlIiwiZ2V0RWRpdG9yU3RhdGUiLCJnZXRDdXJyZW50Q29udGVudCIsIm5ld0NvbnRlbnRTdGF0ZSIsInN0cmluZ1ZhbHVlIiwiRXZlbnRJbnB1dCIsImdldEV2ZW50cyIsInN1bW1pdCIsIm9ubHlQdWJsaXNoZWQiLCJxdWVyeUV2ZW50cyIsIm9wdGlvbiIsInRpdGxlIiwiRnJlZU11bHRpVGV4dElucHV0IiwiaW5wdXRWYWx1ZSIsImhhbmRsZUlucHV0Q2hhbmdlIiwiaGFuZGxlS2V5RG93biIsImxpbWl0IiwiRHJvcGRvd25JbmRpY2F0b3IiLCJHcm91cElucHV0IiwiZ2V0R3JvdXBzIiwicXVlcnlHcm91cHMiLCJPcHRpb25Hcm91cCIsImkiLCJHcm91cGVkRHJvcGRvd24iLCJMYW5ndWFnZUlucHV0Iiwic2hvdWxkVXNlSWQiLCJnZXRMYW5ndWFnZUxpc3QiLCJsYW5ndWFnZUxpc3QiLCJsIiwiTWVtYmVySW5wdXQiLCJnZXRNZW1iZXJzIiwibWVtYmVyIiwiZmlyc3RfbmFtZSIsImxhc3RfbmFtZSIsInF1ZXJ5TWVtYmVycyIsIk9yZ2FuaXphdGlvbklucHV0IiwiZ2V0T3JnYW5pemF0aW9ucyIsIm9yZyIsInF1ZXJ5T3JnYW5pemF0aW9ucyIsIlJhZGlvTGlzdCIsImdldExhYmVsIiwic2ltcGxlIiwiZGVzY3JpcHRpb24iLCJSZWdpc3RyYXRpb25Db21wYW55SW5wdXQiLCJvbkVycm9yIiwic2V0VGhlVmFsdWUiLCJmcmVlSW5wdXQiLCJzZXRGcmVlSW5wdXQiLCJzZXRJbnB1dFZhbHVlIiwiaXNNdWx0aU9wdGlvbmFsIiwic2V0SXNNdWx0aU9wdGlvbmFsIiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsImV2ZW50VmFsdWUiLCJuZXdWYWx1ZVN0YXRlIiwiaGFuZGxlSW5wdXRDbGVhciIsImV2dCIsIm90aGVyT3B0aW9uIiwicXVlcnlSZWdpc3RyYXRpb25Db21wYW5pZXMiLCJwYWRkaW5nUmlnaHQiLCJTcGVha2VySW5wdXQiLCJnZXRTcGVha2VycyIsInNwZWFrZXJJZCIsImhpc3RvcnkiLCJxdWVyeVNwZWFrZXJzIiwic3BlYWtlciIsIk11bHRpVmFsdWVMYWJlbCIsImRhdGEiLCJzIiwiU3BvbnNvcklucHV0IiwiZ2V0U3BvbnNvcnMiLCJxdWVyeVNwb25zb3JzIiwiY29tcGFueSIsInNwb25zb3JzaGlwIiwiU3VtbWl0SW5wdXQiLCJnZXRTdW1taXRzIiwicXVlcnlTdW1taXRzIiwiVGFnSW5wdXQiLCJ0IiwidGFnIiwiZ2V0VGFncyIsIm5leHRWYWx1ZSIsInF1ZXJ5VGFncyIsIm9yZGVyZWRUYWdzIiwiYiIsIklucHV0IiwiVGV4dEFyZWEiLCJUaWNrZXRUeXBlc0lucHV0IiwiZ2V0VGlja2V0VHlwZXMiLCJ0aWNrZXRUeXBlIiwicXVlcnlUaWNrZXRUeXBlcyIsIkRyb3B6b25lIiwiRHJvcHpvbmVKUyIsImZpbGVzIiwib25VcGxvYWRDb21wbGV0ZSIsImdldERqc0NvbmZpZyIsImRlZmF1bHRzIiwidXJsIiwiY29uZmlnIiwicG9zdFVybCIsImRqc0NvbmZpZyIsImFjY2VwdCIsImZpbGUiLCJkb25lIiwibWF4RmlsZXMiLCJ1cGxvYWRDb3VudCIsImF1dG9EaXNjb3ZlciIsImV2ZW50SGFuZGxlcnMiLCJkcm9wIiwiaW5mbyIsImRyb3B6b25lTm9kZSIsImRyb3B6b25lU2VsZWN0b3IiLCJSZWFjdERPTSIsImZpbmRET01Ob2RlIiwiZHJvcHpvbmUiLCJzZXR1cEV2ZW50cyIsImdldEFjdGl2ZUZpbGVzIiwicXVldWVEZXN0cm95IiwiZGVzdHJveUludGVydmFsIiwiZGVzdHJveSIsImRqc0NvbmZpZ09iaiIsInBvc3RVcmxDb25maWdPYmoiLCJpY29ucyIsInNob3dGaWxldHlwZUljb24iLCJpY29uRmlsZXR5cGVzIiwiZXZlbnRIYW5kbGVyIiwicHJvdG90eXBlIiwiY2FsbCIsIm9uIiwiZmlsZUluRmlsZXMiLCJzcGxpY2UiLCJwcm9ncmVzcyIsImJ5dGVzU2VudCIsInByZXZpZXdFbGVtZW50IiwiZWxlbSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJ4aHIiLCJmb3JtRGF0YSIsImFwcGVuZCIsIl90aGlzIiwiZHJvcHpvbmVPbkxvYWQiLCJvbmxvYWQiLCJ1cGxvYWRSZXNwb25zZSIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwib2ZmIiwiSWNvbiIsImZpbGV0eXBlIiwiVXBsb2FkSW5wdXRWMiIsIm9uUmVtb3ZlIiwibWVkaWFUeXBlIiwidGltZU91dCIsImFsbG93ZWRFeHQiLCJhbGxvd2VkX2V4dGVuc2lvbnMiLCJleHQiLCJtYXhTaXplIiwibWF4X3NpemUiLCJjYW5VcGxvYWQiLCJkanNDb25maWdTZXQiLCJwYXJhbU5hbWUiLCJtYXhGaWxlc2l6ZSIsInRpbWVvdXQiLCJjaHVua2luZyIsInJldHJ5Q2h1bmtzIiwicGFyYWxsZWxDaHVua1VwbG9hZHMiLCJhZGRSZW1vdmVMaW5rcyIsImFjY2VwdGVkRmlsZXMiLCJjb21wb25lbnRDb25maWciLCJtZWRpYV90eXBlIiwibWVkaWFfdXBsb2FkIiwicmVtb3ZlZGZpbGUiLCJwcml2YXRlX3VybCIsInB1YmxpY191cmwiLCJmaWxlbmFtZSIsIlVwbG9hZElucHV0Iiwic2hvd19yZW1vdmUiLCJsb2dvX3ByZXZpZXciLCJwcmV2aWV3IiwiZmlsZUhhc1ByZXZpZXciLCJvbkRyb3AiLCJmaWxlUmVqZWN0aW9ucyIsImhhbmRsZVVwbG9hZCIsImhhbmRsZUVycm9yIiwiaGFuZGxlUmVtb3ZlIiwic2hvd1ZlaWwiLCJoaWRlVmVpbCIsImZpbGVOYW1lIiwicGF0dGVybiIsInRlc3QiLCJpY29uIiwiZmlsZV9pY29uIiwic2xpY2UiLCJsYXN0SW5kZXhPZiIsInBkZl9pY29uIiwibW92X2ljb24iLCJtcDRfaWNvbiIsIlJhd0hUTUwiLCJfX2h0bWwiLCJQYW5lbCIsInRoZUlkIiwidGhlQ2xhc3MiLCJBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlIiwiaXNzdWVyIiwiYXVkaWVuY2UiLCJpZF90b2tlbl9pc192YWxpZCIsImVycm9yX2Rlc2NyaXB0aW9uIiwiZmxvdyIsImdldE9BdXRoMkZsb3ciLCJfaW1wbGljaXRGbG93IiwiaWRfdG9rZW4iLCJzZXNzaW9uX3N0YXRlIiwiZXhwaXJlc19pbiIsImV4dHJhY3RIYXNoUGFyYW1zIiwiZG9Mb2dpbiIsImdldEN1cnJlbnRQYXRoTmFtZSIsInZhbGlkYXRlSWRUb2tlbiIsIm9uVXNlckF1dGgiLCJwYXJlbnQiLCJwb3N0TWVzc2FnZSIsIm9yaWdpbiIsIl9jb2RlRmxvdyIsIlVSSSIsImdldEN1cnJlbnRIcmVmIiwicXVlcnkiLCJzZWFyY2giLCJiYWNrVXJsIiwiZW1pdEFjY2Vzc1Rva2VuIiwidGhlbiIsInJlZnJlc2hfdG9rZW4iLCJlcnJvcjIiLCJlcnJvcl9kZXNjcmlwdGlvbjIiLCJSRVNQT05TRV9UWVBFX0lNUExJQ0lUIiwiUkVTUE9OU0VfVFlQRV9DT0RFIiwicGFyc2VRdWVyeSIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsIm5leHRQcm9wcyIsIm5leHRTdGF0ZSIsIm5leHRDb250ZXh0IiwiZnJhZ21lbnQiLCJsZW5naHQiLCJidWlsZFF1ZXJ5IiwiX2NhbGxiYWNrIiwiX3JlZGlyZWN0MkVycm9yIiwiU0VUX0xPR0dFRF9VU0VSIiwiTE9HT1VUX1VTRVIiLCJSRVFVRVNUX1VTRVJfSU5GTyIsIlJFQ0VJVkVfVVNFUl9JTkZPIiwiQ0xFQVJfU0VTU0lPTl9TVEFURSIsIlVQREFURV9TRVNTSU9OX1NUQVRFX1NUQVRVUyIsIlNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCIsIlNFU1NJT05fU1RBVEVfU1RBVFVTX0NIQU5HRUQiLCJTRVNTSU9OX1NUQVRFX1NUQVRVU19FUlJPUiIsIlVQREFURV9VU0VSX0lORk8iLCJpZFRva2VuIiwic2Vzc2lvblN0YXRlIiwiZXhwaXJlc0luIiwicmVmcmVzaFRva2VuIiwiZGlzcGF0Y2giLCJzdG9yZUF1dGhJbmZvIiwicGF5bG9hZCIsImRvTG9nb3V0IiwiZ2V0U3RhdGUiLCJnZXRVc2VySW5mbyIsImV4cGFuZCIsImVycm9ySGFuZGxlciIsIkFsbG93ZWRVc2VyR3JvdXBzIiwiZ2V0QWxsb3dlZFVzZXJHcm91cHMiLCJsb2dnZWRVc2VyU3RhdGUiLCJhdXRoRXJyb3JIYW5kbGVyIiwic3RhcnRMb2FkaW5nIiwiZ2V0UmVxdWVzdCIsImNyZWF0ZUFjdGlvbiIsImJ1aWxkQVBJQmFzZVVybCIsInN0b3BMb2FkaW5nIiwiZXJyb3JfbWVzc2FnZSIsInNob3dNZXNzYWdlIiwiaW5pdExvZ091dCIsImFsbG93ZWRHcm91cHMiLCJncm91cHMiLCJncm91cCIsImlkeCIsInVwZGF0ZVVzZXJJbmZvIiwidXBkYXRlZE1lbWJlciIsInVwZGF0ZVNlc3Npb25TdGF0ZVN0YXR1cyIsIm5ld1N0YXR1cyIsInNlc3Npb25TdGF0ZVN0YXR1cyIsInJlcXVlc3QiLCJsb2NrIiwiTG9jayIsIkdFVF9UT0tFTl9TSUxFTlRMWV9MT0NLX0tFWSIsIk5PTkNFX0xFTiIsIkFDQ0VTU19UT0tFTl9TS0VXX1RJTUUiLCJBVVRIX0lORk8iLCJOT05DRSIsIlBLQ0UiLCJnZXRBdXRoVXJsIiwicHJvbXB0IiwidG9rZW5JZEhpbnQiLCJwcm92aWRlciIsIm9hdXRoMkNsaWVudElkIiwiZ2V0T0F1dGgyQ2xpZW50SWQiLCJyZWRpcmVjdFVyaSIsImdldEF1dGhDYWxsYmFjayIsImJhc2VVcmwiLCJnZXRPQXV0aDJJRFBCYXNlVXJsIiwic2NvcGVzIiwiZ2V0T0F1dGgyU2NvcGVzIiwiZW5jb2RlVVJJIiwibm9uY2UiLCJjcmVhdGVOb25jZSIsInB1dE9uTG9jYWxTdG9yYWdlIiwicGtjZSIsImNyZWF0ZVBLQ0VDb2RlcyIsImNvZGVDaGFsbGVuZ2UiLCJnZXRMb2dvdXRVcmwiLCJwb3N0TG9nT3V0VXJpIiwiZ2V0T3JpZ2luIiwibGVuIiwicG9zc2libGUiLCJjaGFyQXQiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJnZXRDdXJyZW50TG9jYXRpb24iLCJkb0xvZ2luQmFzaWNMb2dpbiIsImNvZGVWZXJpZmllciIsImJhc2U2NFVSTEVuY29kZSIsInJhbmRvbUJ5dGVzIiwic2hhMjU2IiwiQnVmZmVyIiwiZnJvbSIsImNyZWF0ZWRBdCIsIkRhdGUiLCJjb2RlUGFpciIsImdldEZyb21Mb2NhbFN0b3JhZ2UiLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIm1lc3NhZ2UiLCJjbGVhckFjY2Vzc1Rva2VuIiwicmV0cnlQcm9taXNlIiwiYWNxdWlyZUxvY2siLCJhdXRoSW5mbyIsImdldEF1dGhJbmZvIiwiYWNjZXNzVG9rZW5VcGRhdGVkQXQiLCJyZWxlYXNlTG9jayIsInRpbWVFbGFwc2VkU2VjcyIsInVzZU9BdXRoMlJlZnJlc2hUb2tlbiIsImNsZWFyQXV0aEluZm8iLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJzdGF0dXMiLCJjdXJyZW50TG9jYXRpb24iLCJzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSIsInN0YXR1c1RleHQiLCJmb3JtZXJBdXRoSW5mbyIsInJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UiLCJnZXRJZFRva2VuIiwiT0FVVEgyX0NMSUVOVF9JRCIsIk9BVVRIMl9GTE9XIiwiQm9vbGVhbiIsIk9BVVRIMl9VU0VfUkVGUkVTSF9UT0tFTiIsIklEUF9CQVNFX1VSTCIsIlNDT1BFUyIsInZlcmlmaWVyIiwiSWRUb2tlblZlcmlmaWVyIiwic3RvcmVkTm9uY2UiLCJqd3QiLCJkZWNvZGUiLCJhbGciLCJoZWFkZXIiLCJraWQiLCJhdWQiLCJpc3MiLCJleHAiLCJuYmYiLCJ0bm9uY2UiLCJwYXNzd29yZGxlc3NTdGFydCIsImNvbm5lY3Rpb24iLCJlbWFpbCIsInBob25lX251bWJlciIsInJlcSIsInJlamVjdCIsInBhc3N3b3JkbGVzc0xvZ2luIiwib3RwIiwiQ0hFQ0tfU0VTU0lPTl9JTlRFUlZBTCIsIk9QU2Vzc2lvbkNoZWNrZXIiLCJvcEZyYW1lX3NyYyIsInJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmMiLCJyZWNlaXZlTWVzc2FnZSIsInJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkIiwic2V0VGltZXIiLCJjaGVja1Nlc3Npb24iLCJvblNldHVwQ2hlY2tTZXNzaW9uUlAiLCJycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQiLCJvcEZyYW1lIiwicnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lIiwic2V0T1BGcmFtZVJlZiIsImVsZW1lbnQiLCJzZXRDaGVja1Nlc3Npb25TdGF0ZUZyYW1lUmVmIiwiaXNMb2dnZWRVc2VyIiwiZnJhbWUiLCJjb250ZW50RG9jdW1lbnQiLCJyZXN1bHRVcmwiLCJVUkwiLCJ0b0xvY2FsZVN0cmluZyIsImNsaWVudElkIiwidGFyZ2V0T3JpZ2luIiwiaWRwQmFzZVVybCIsImNvbnRlbnRXaW5kb3ciLCJzZXNzaW9uQ2hlY2tFbmRwb2ludCIsIlN0cmluZyIsImJvcmRlciIsIm1hcFN0YXRlVG9Qcm9wcyIsImNvbm5lY3QiLCJTaW1wbGVMaW5rTGlzdCIsImdldE9wdGlvbnMiLCJoYW5kbGVMaW5rIiwiZmlsdGVyT3B0aW9uIiwiZ2V0TmV3T3B0aW9uRGF0YSIsImlzVmFsaWROZXdPcHRpb24iLCJkZWZhdWx0T3B0aW9ucyIsImFjdGlvbnMiLCJvcHRpb25MYWJlbCIsInNlbGVjdFZhbHVlIiwic2VsZWN0T3B0aW9ucyIsImxhYmVsS2V5Iiwib3B0aW9uRm91bmQiLCJvbkNyZWF0ZVRhZyIsImNhbmRpZGF0ZSIsImFsbG93RHVwbGljYXRlcyIsImNvbHVtbnMiLCJkaXNhYmxlZEFkZCIsInZhbHVlS2V5IiwidGFibGVPcHRpb25zIiwiZGVsZXRlIiwiZWRpdCIsImN1c3RvbSIsIml0ZW1BIiwic29ydENvbCIsIml0ZW1CIiwiU3VtbWl0RHJvcGRvd24iLCJzdW1taXRWYWx1ZSIsInN1bW1pdHMiLCJhY3Rpb25DbGFzcyIsInN1bW1pdE9wdGlvbnMiLCJiaWdDbGFzcyIsIkVkaXRhYmxlQWN0aW9uc1RhYmxlQ2VsbCIsImlzX2VkaXRpbmciLCJvbkRlbGV0ZSIsIm9uU2F2ZSIsInNhdmUiLCJvbkVkaXQiLCJvbkNhbmNlbCIsImNhbmNlbCIsImNvbFdpZHRoIiwiY3JlYXRlUm93Iiwicm93Iiwic2hvdWxkVXNlVGV4dEFyZWEiLCJhY3Rpb25fYnV0dG9ucyIsImNlbGxzIiwiY29sIiwiY29sdW1uS2V5IiwiaXNfZWRpdCIsImNyZWF0ZU5ld1JvdyIsIm5ld19yb3ciLCJhZGROZXciLCJjZWxsX3ZhbHVlIiwiRWRpdGFibGVUYWJsZSIsInJvd3MiLCJlZGl0Um93Iiwic2F2ZVJvdyIsImRlbGV0ZUNsaWNrIiwib25DaGFuZ2VDZWxsIiwiZWRpdFJvd0NhbmNlbCIsInNhdmVOZXdSb3ciLCJoYW5kbGVOZXdDaGFuZ2UiLCJvbkNoYW5nZU5ld0NlbGwiLCJlZGl0aW5nX3JvdyIsIm5vQWxlcnQiLCJTd2FsIiwiZmlyZSIsInRleHQiLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY29uZmlybUJ1dHRvblRleHQiLCJyZXN1bHQiLCJyb3dJZHgiLCJmaW5kSW5kZXgiLCJ0YWJsZUNsYXNzIiwidGV4dEFyZWEiLCJ3YXJuIiwiRWRpdGFibGVUYWJsZUNlbGwiLCJFZGl0YWJsZVRhYmxlSGVhZGluZyIsIkVkaXRhYmxlVGFibGVSb3ciLCJldmVuIiwiU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwiLCJoYW5kbGVBY3Rpb24iLCJzaG91bGREaXNwbGF5QWN0aW9uIiwidG9vbHRpcCIsInNvcnRGdW5jIiwic29ydGFibGUiLCJzb3J0RGlyIiwiZ2V0U29ydERpciIsImNvbHVtbkluZGV4IiwiU2VsZWN0YWJsZVRhYmxlIiwic2VsZWN0ZWRJZHMiLCJvblNlbGVjdGVkQWxsIiwic2VsZWN0ZWRBbGwiLCJvblNvcnQiLCJhY3Rpb25zSGVhZGVyIiwiU2VsZWN0YWJsZVRhYmxlQ2VsbCIsImlzVmFsaWRFbGVtZW50IiwiU2VsZWN0YWJsZVRhYmxlSGVhZGluZyIsImhhbmRsZVNvcnQiLCJnZXRTb3J0Q2xhc3MiLCJTZWxlY3RhYmxlVGFibGVSb3ciLCJoYW5kbGVFZGl0IiwiaGFuZGxlU2VsZWN0Iiwib25TZWxlY3RlZCIsImNhbkVkaXQiLCJyb3dDbGFzcyIsIlNvcnRhYmxlQWN0aW9uc1RhYmxlQ2VsbCIsIlNvcnRhYmxlVGFibGUiLCJtb3ZlUm93IiwiZHJvcFJvdyIsImRyYWdJbmRleCIsImhvdmVySW5kZXgiLCJkcmFnUm93IiwidXBkYXRlIiwiJHNwbGljZSIsImluZGV4Iiwib3JkZXJGaWVsZCIsIm5ld09yZGVyIiwiJHNldCIsImRyb3BDYWxsYmFjayIsImFycmF5T2YiLCJEcmFnRHJvcENvbnRleHQiLCJIVE1MNUJhY2tlbmQiLCJTb3J0YWJsZVRhYmxlQ2VsbCIsIlNvcnRhYmxlVGFibGVIZWFkaW5nIiwicGFkZGluZyIsIm1hcmdpbkJvdHRvbSIsInJvd1NvdXJjZSIsImJlZ2luRHJhZyIsImVuZERyYWciLCJtb25pdG9yIiwiZGlkRHJvcCIsImRyb3BDYXJkIiwicm93VGFyZ2V0IiwiaG92ZXIiLCJjb21wb25lbnQiLCJnZXRJdGVtIiwiaG92ZXJCb3VuZGluZ1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJob3Zlck1pZGRsZVkiLCJjbGllbnRPZmZzZXQiLCJnZXRDbGllbnRPZmZzZXQiLCJob3ZlckNsaWVudFkiLCJ5IiwibW92ZUNhcmQiLCJTb3J0YWJsZVRhYmxlUm93IiwiaXNEcmFnZ2luZyIsImNvbm5lY3REcmFnU291cmNlIiwiY29ubmVjdERyb3BUYXJnZXQiLCJEcmFnU291cmNlIiwiZHJhZ1NvdXJjZSIsIkRyb3BUYXJnZXQiLCJkcm9wVGFyZ2V0IiwiQWN0aW9uc1RhYmxlQ2VsbCIsIlRhYmxlIiwiVGFibGVDZWxsIiwiVGFibGVIZWFkaW5nIiwiVGFibGVSb3ciLCJ1c2VGaXRUZXh0IiwibWluU2l6ZSIsIk1JTl9GT05UX1NJWkUiLCJNQVhfRk9OVF9TSVpFIiwiUkVTT0xVVElPTiIsInJlZiIsImZvbnRTaXplUHJldiIsImZvbnRTaXplTWF4IiwiZm9udFNpemVNaW4iLCJpc0RvbmUiLCJhYnMiLCJpc092ZXJmbG93Iiwic2Nyb2xsSGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0Iiwic2Nyb2xsV2lkdGgiLCJvZmZzZXRXaWR0aCIsImlzQXNjIiwiZm9udFNpemVOZXciLCJkZWx0YSIsIm5ld01heCIsIm5ld01pbiIsIm1pbiIsIm1heCIsImxpbmVIZWlnaHQiLCJZb3V0dWJlVmlkZW9Db21wb25lbnQiLCJ2aWRlb1NyY1VSTCIsInZpZGVvVGl0bGUiLCJMaXZlVmlkZW9QbGF5ZXIiLCJwbGF5ZXIiLCJ2aWRlb2pzIiwidmlkZW9Ob2RlIiwiZGlzcG9zZSIsIm5vZGUiLCJWaWRlb1N0cmVhbSIsImxheW91dCIsImNoZWNrTGl2ZVZpZGVvIiwiaXNMaXZlVmlkZW8iLCJtYXRjaCIsInZpZGVvSnNPcHRpb25zIiwiYXV0b3BsYXkiLCJjb250cm9scyIsImZsdWlkIiwic291cmNlcyIsInNyYyIsIkdFTkVSSUNfRVJST1IiLCJSRVNFVF9MT0FESU5HIiwiU1RBUlRfTE9BRElORyIsIlNUT1BfTE9BRElORyIsIlZBTElEQVRFIiwiQ0xFQVJfTUVTU0FHRSIsIlNIT1dfTUVTU0FHRSIsInJlc2V0TG9hZGluZyIsInhocnMiLCJzY2hlZHVsZSIsImlzT2JqZWN0RW1wdHkiLCJvYmoiLCJtc2ciLCJjbGVhcmluZ19zZXNzaW9uX3N0YXRlIiwiaXNDbGVhcmluZ1Nlc3Npb25TdGF0ZSIsImVudHJpZXMiLCJyZXF1ZXN0QWN0aW9uQ3JlYXRvciIsInJlY2VpdmVBY3Rpb25DcmVhdG9yIiwiZW5kcG9pbnQiLCJkZWZhdWx0RXJyb3JIYW5kbGVyIiwicmVxdWVzdEFjdGlvblBheWxvYWQiLCJnZXQiLCJkZWFkbGluZSIsInJlc3BvbnNlSGFuZGxlciIsInB1dFJlcXVlc3QiLCJkZWxldGVSZXF1ZXN0IiwicG9zdFJlcXVlc3QiLCJzZXQiLCJwb3N0RmlsZSIsImZpbGVNZXRhZGF0YSIsImF0dGFjaCIsInB1dEZpbGUiLCJvayIsImZldGNoRXJyb3JIYW5kbGVyIiwiZmV0Y2hSZXNwb25zZUhhbmRsZXIiLCJzZXR0aW5ncyIsInNob3dTdWNjZXNzTWVzc2FnZSIsImRvd25sb2FkRmlsZUJ5Q29udGVudCIsImNvbnRlbnQiLCJtaW1lIiwibGluayIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInRleHRDb250ZW50IiwiZG93bmxvYWQiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwicmVtb3ZlQ2hpbGQiLCJnZXRDU1YiLCJjc3YiLCJnZXRSYXdDU1YiLCJlc2NhcGVGaWx0ZXJWYWx1ZSIsImZpbmRFbGVtZW50UG9zIiwiY3VydG9wIiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0VG9wIiwiZXBvY2hUb01vbWVudCIsImF0aW1lIiwiZXBvY2hUb01vbWVudFRpbWVab25lIiwidGltZV96b25lIiwiZm9ybWF0RXBvY2giLCJvYmplY3RUb1F1ZXJ5U3RyaW5nIiwic3RyIiwiZ2V0QmFja1VSTCIsInBhdGhuYW1lIiwiQUxMT1dFRF9VU0VSX0dST1VQUyIsInJlbGF0aXZlVXJsIiwiQVBJX0JBU0VfVVJMIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsInJlbW92ZUl0IiwicmVtb3ZlSXRlbSIsImxhbmd1YWdlcyIsInVzZXJMYW5ndWFnZSIsImZpcnN0RXJyb3IiLCJmaXJzdE5vZGUiLCJnZXRFbGVtZW50QnlJZCIsInNjcm9sbFRvIiwib2JqZWN0MSIsIm9iamVjdDIiLCJrZXlzMSIsImtleXMyIiwiYTEiLCJhMiIsImV2ZXJ5IiwibyIsImJ1ZmZlciIsImNyZWF0ZUhhc2giLCJkaWdlc3QiLCJjYiIsIm1heE51bWJlck9mUmV0cmllcyIsIlJFQ0VJVkVfQ09VTlRSSUVTIiwiY2FsbERlbGF5IiwiXyIsImRlYm91bmNlIiwiZmlsdGVycyIsImFwaVVybCIsInF1ZXJ5VHJhY2tzIiwicXVlcnlUcmFja0dyb3VwcyIsImFkZFF1ZXJ5IiwiZ2VvY29kZXIiLCJnZW9Db2RlQWRkcmVzcyIsImFkZHJlc3MiLCJHZW9jb2RlciIsImdlb2NvZGUiLCJyZXN1bHRzIiwiR2VvY29kZXJTdGF0dXMiLCJPSyIsImdlb0NvZGVMYXRMbmciLCJsYXRsbmciLCJwYXJzZUZsb2F0IiwiQ2hlY2tCb3hRdWVzdGlvblR5cGUiLCJDb21ib0JveFF1ZXN0aW9uVHlwZSIsIkNoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSIsIlJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZSIsIkFsbG93ZWRNdWx0aXBsZVZhbHVlUXVlc3Rpb25UeXBlIiwiQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kIiwiQW5zd2VyVmFsdWVzT3BlcmF0b3JfT3IiLCJWaXNpYmlsaXR5Q29uZGl0aW9uX0VxdWFsIiwiVmlzaWJpbGl0eUNvbmRpdGlvbl9Ob3RFcXVhbCIsIlZpc2liaWxpdHlfVmlzaWJsZSIsIk1haW5RdWVzdGlvbkNsYXNzVHlwZSIsInF1ZXN0aW9uQnlOYW1lIiwicXVlc3Rpb25CeUlkIiwicnVsZXMiLCJfcGFyc2VRdWVzdGlvbiIsImF2IiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwiaW5pdGlhbENvbmRpdGlvbiIsImFuc3dlcl92YWx1ZXNfb3BlcmF0b3IiLCJwYXJlbnRRdWVzdGlvbkFuc3dlciIsIl9nZXRBbnN3ZXJGb3IiLCJwYXJlbnRfcXVlc3Rpb25faWQiLCJhbnN3ZXJWYWx1ZSIsIl9hbnN3ZXJDb250YWlucyIsImNsYXNzIiwiX2hhc1ZhbHVlIiwiX2FsbG93c1ZhbHVlcyIsIl9hbGxvd3NWYWx1ZSIsInJ1bGVJZCIsInBhcmVudF9ydWxlcyIsIl9pc1N1YlF1ZXN0aW9uVmlzaWJsZSIsIl9pc0Fuc3dlcmVkIiwiX2NoZWNrUXVlc3Rpb24iLCJxdWVzdGlvbiIsInVzZXJBbnN3ZXIiLCJvcmlnaW5hbEFuc3dlcnMiLCJhbnNWYWwiLCJyZXMxIiwiX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyIiwiX3BhcnNlUXVlc3Rpb25zIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztRQ1ZBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7OztBQ2xGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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S0FBS2s4QixlQUFuQixFQUNJLEtBQUs3Z0MsT0FBTCxDQUFhMkUsQ0FBQyxDQUFDSixXQUFmLElBQThCSSxDQUE5Qjs7SUFDSixLQUFLeTZCLGNBQUwsR0FBc0IsRUFBdEI7SUFDQSxLQUFLQyxZQUFMLEdBQW9CLEVBQXBCLENBUmlDLENBU2pDOztJQUNBLEtBQUtDLEtBQUwsR0FBYSxFQUFiOztJQUNBLEtBQUsyQixlQUFMO0VBQ0g7O0FBZDZCLEM7Ozs7Ozs7Ozs7O0FDWmxDLHNGOzs7Ozs7Ozs7OztBQ0FBLDhDOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLHFDOzs7Ozs7Ozs7OztBQ0FBLHVEOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLHVDOzs7Ozs7Ozs7OztBQ0FBLHVEOzs7Ozs7Ozs7OztBQ0FBLDZDOzs7Ozs7Ozs7OztBQ0FBLGdEOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLDRDOzs7Ozs7Ozs7OztBQ0FBLHVDOzs7Ozs7Ozs7OztBQ0FBLGtDOzs7Ozs7Ozs7OztBQ0FBLDJDOzs7Ozs7Ozs7OztBQ0FBLHNDOzs7Ozs7Ozs7OztBQ0FBLG9EOzs7Ozs7Ozs7OztBQ0FBLHNDOzs7Ozs7Ozs7OztBQ0FBLDJDOzs7Ozs7Ozs7OztBQ0FBLDZDOzs7Ozs7Ozs7OztBQ0FBLDhDOzs7Ozs7Ozs7OztBQ0FBLG9GOzs7Ozs7Ozs7OztBQ0FBLHdDOzs7Ozs7Ozs7OztBQ0FBLHNDOzs7Ozs7Ozs7OztBQ0FBLHlDOzs7Ozs7Ozs7OztBQ0FBLG1EOzs7Ozs7Ozs7OztBQ0FBLDREOzs7Ozs7Ozs7OztBQ0FBLHVEOzs7Ozs7Ozs7OztBQ0FBLHdEOzs7Ozs7Ozs7OztBQ0FBLDBDOzs7Ozs7Ozs7OztBQ0FBLHVDOzs7Ozs7Ozs7OztBQ0FBLHdDOzs7Ozs7Ozs7OztBQ0FBLGtDOzs7Ozs7Ozs7OztBQ0FBLHFDOzs7Ozs7Ozs7OztBQ0FBLHVEIiwiZmlsZSI6ImNvbXBvbmVudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvblwiLCBbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb25cIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvY29tcG9uZW50cy5qc1wiKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0JztcblxuaW1wb3J0IHsgQWpheExvYWRlciB9IGZyb20gJy4vY29tcG9uZW50cy9hamF4bG9hZGVyJztcbmltcG9ydCBSYXdIVE1MIGZyb20gJy4vY29tcG9uZW50cy9yYXctaHRtbC9pbmRleCc7XG5pbXBvcnQgRnJlZVRleHRTZWFyY2ggZnJvbSAnLi9jb21wb25lbnRzL2ZyZWUtdGV4dC1zZWFyY2gvaW5kZXgnO1xuaW1wb3J0IEdNYXAgZnJvbSAnLi9jb21wb25lbnRzL2dvb2dsZS1tYXAvaW5kZXgnO1xuaW1wb3J0IERhdGVUaW1lUGlja2VyIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvZGF0ZXRpbWVwaWNrZXIvaW5kZXgnXG5pbXBvcnQgR3JvdXBlZERyb3Bkb3duIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvZ3JvdXBlZC1kcm9wZG93bi9pbmRleCdcbmltcG9ydCBVcGxvYWRJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC9pbmRleCdcbmltcG9ydCBVcGxvYWRJbnB1dFYyIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0LXYyL2luZGV4J1xuaW1wb3J0IENvbXBhbnlJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2NvbXBhbnktaW5wdXQnXG5pbXBvcnQgU3BvbnNvcklucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvc3BvbnNvci1pbnB1dCdcbmltcG9ydCBPcmdhbml6YXRpb25JbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL29yZ2FuaXphdGlvbi1pbnB1dCdcbmltcG9ydCBDb3VudHJ5RHJvcGRvd24gZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9jb3VudHJ5LWRyb3Bkb3duJ1xuaW1wb3J0IERyb3Bkb3duIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvZHJvcGRvd24nXG5pbXBvcnQgVGV4dEVkaXRvciBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2VkaXRvci1pbnB1dCdcbmltcG9ydCBUZXh0QXJlYSBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3RleHRhcmVhLWlucHV0J1xuaW1wb3J0IEV2ZW50SW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9ldmVudC1pbnB1dCdcbmltcG9ydCBHcm91cElucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvZ3JvdXAtaW5wdXQnXG5pbXBvcnQgTWVtYmVySW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9tZW1iZXItaW5wdXQnXG5pbXBvcnQgU3VtbWl0SW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9zdW1taXQtaW5wdXQnXG5pbXBvcnQgU3BlYWtlcklucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvc3BlYWtlci1pbnB1dCdcbmltcG9ydCBUYWdJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3RhZy1pbnB1dCdcbmltcG9ydCBJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3RleHQtaW5wdXQnXG5pbXBvcnQgUGFuZWwgZnJvbSAnLi9jb21wb25lbnRzL3NlY3Rpb25zL3BhbmVsJ1xuaW1wb3J0IFNpbXBsZUxpbmtMaXN0IGZyb20gJy4vY29tcG9uZW50cy9zaW1wbGUtbGluay1saXN0L2luZGV4J1xuaW1wb3J0IFN1bW1pdERyb3Bkb3duIGZyb20gJy4vY29tcG9uZW50cy9zdW1taXQtZHJvcGRvd24vaW5kZXgnXG5pbXBvcnQgVGFibGUgZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlL1RhYmxlJ1xuaW1wb3J0IFNvcnRhYmxlVGFibGUgZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLXNvcnRhYmxlL1NvcnRhYmxlVGFibGUnXG5pbXBvcnQgRWRpdGFibGVUYWJsZSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtZWRpdGFibGUvRWRpdGFibGVUYWJsZSdcbmltcG9ydCBTZWxlY3RhYmxlVGFibGUgZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLXNlbGVjdGFibGUvU2VsZWN0YWJsZVRhYmxlJ1xuaW1wb3J0IFNpbXBsZUZvcm0gZnJvbSAnLi9jb21wb25lbnRzL2Zvcm1zL3NpbXBsZS1mb3JtJ1xuaW1wb3J0IFJzdnBGb3JtIGZyb20gJy4vY29tcG9uZW50cy9mb3Jtcy9yc3ZwLWZvcm0nO1xuaW1wb3J0IFJhZGlvTGlzdCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3JhZGlvLWxpc3QnXG5pbXBvcnQgQ2hlY2tib3hMaXN0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvY2hlY2tib3gtbGlzdCdcbmltcG9ydCBBY3Rpb25Ecm9wZG93biBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2FjdGlvbi1kcm9wZG93bidcbmltcG9ydCBDb3VudHJ5SW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9jb3VudHJ5LWlucHV0J1xuaW1wb3J0IExhbmd1YWdlSW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9sYW5ndWFnZS1pbnB1dCdcbmltcG9ydCBGcmVlTXVsdGlUZXh0SW5wdXQgZnJvbSBcIi4vY29tcG9uZW50cy9pbnB1dHMvZnJlZS1tdWx0aS10ZXh0LWlucHV0XCI7XG5pbXBvcnQgT1BTZXNzaW9uQ2hlY2tlciBmcm9tIFwiLi9jb21wb25lbnRzL3NlY3VyaXR5L3Nlc3Npb24tY2hlY2tlci9vcC1zZXNzaW9uLWNoZWNrZXJcIjtcbmltcG9ydCBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlIGZyb20gIFwiLi9jb21wb25lbnRzL3NlY3VyaXR5L2Fic3RyYWN0LWF1dGgtY2FsbGJhY2stcm91dGVcIjtcbmltcG9ydCBFeGNsdXNpdmUgZnJvbSBcIi4vY29tcG9uZW50cy9leGNsdXNpdmUtd3JhcHBlclwiO1xuaW1wb3J0IEZyYWdtZW50UGFyc2VyIGZyb20gXCIuL2NvbXBvbmVudHMvZnJhZ21lbi1wYXJzZXJcIjtcbmltcG9ydCBDbG9jayBmcm9tIFwiLi9jb21wb25lbnRzL2Nsb2NrXCI7XG5pbXBvcnQgQ2lyY2xlQnV0dG9uIGZyb20gXCIuL2NvbXBvbmVudHMvY2lyY2xlLWJ1dHRvblwiO1xuaW1wb3J0IFZpZGVvU3RyZWFtIGZyb20gXCIuL2NvbXBvbmVudHMvdmlkZW8tc3RyZWFtXCI7XG5pbXBvcnQgQXR0ZW5kYW5jZVRyYWNrZXIgZnJvbSBcIi4vY29tcG9uZW50cy9hdHRlbmRhbmNlLXRyYWNrZXJcIjtcbmltcG9ydCB7Z2V0Q3VycmVudFVzZXJMYW5ndWFnZX0gZnJvbSAnLi91dGlscy9tZXRob2RzJztcbmltcG9ydCB1c2VGaXRUZXh0IGZyb20gJy4vY29tcG9uZW50cy91c2UtZml0LXRleHQnO1xuaW1wb3J0IEFjY2Vzc0xldmVsc0lucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvYWNjZXNzLWxldmVscy1pbnB1dCc7XG5pbXBvcnQgUmVnaXN0cmF0aW9uQ29tcGFueUlucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvcmVnaXN0cmF0aW9uLWNvbXBhbnktaW5wdXQnO1xuaW1wb3J0IFRpY2tldFR5cGVzSW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy90aWNrZXQtdHlwZXMtaW5wdXQnO1xuaW1wb3J0IEV4dHJhUXVlc3Rpb25zRm9ybSBmcm9tICcuL2NvbXBvbmVudHMvZXh0cmEtcXVlc3Rpb25zJztcblxubGV0IGxhbmd1YWdlID0gZ2V0Q3VycmVudFVzZXJMYW5ndWFnZSgpO1xuXG4vLyBsYW5ndWFnZSB3b3VsZCBiZSBzb21ldGhpbmcgbGlrZSBlcy1FUyBvciBlc19FU1xuLy8gSG93ZXZlciB3ZSBzdG9yZSBvdXIgZmlsZXMgd2l0aCBmb3JtYXQgZXMuanNvbiBvciBlbi5qc29uXG4vLyB0aGVyZWZvcmUgcmV0cmlldmUgb25seSB0aGUgZmlyc3QgMiBkaWdpdHNcblxuaWYgKGxhbmd1YWdlLmxlbmd0aCA+IDIpIHtcbiAgICBsYW5ndWFnZSA9IGxhbmd1YWdlLnNwbGl0KFwiLVwiKVswXTtcbiAgICBsYW5ndWFnZSA9IGxhbmd1YWdlLnNwbGl0KFwiX1wiKVswXTtcbn1cblxudHJ5IHtcbiAgICBULnNldFRleHRzKHJlcXVpcmUoYC4vaTE4bi8ke2xhbmd1YWdlfS5qc29uYCkpO1xufSBjYXRjaCAoZSkge1xuICAgIFQuc2V0VGV4dHMocmVxdWlyZShgLi9pMThuL2VuLmpzb25gKSk7XG59XG5cbmV4cG9ydCB7XG4gICAgQWpheExvYWRlcixcbiAgICBSYXdIVE1MLFxuICAgIEZyZWVUZXh0U2VhcmNoLFxuICAgIEdNYXAsXG4gICAgRGF0ZVRpbWVQaWNrZXIsXG4gICAgR3JvdXBlZERyb3Bkb3duLFxuICAgIFVwbG9hZElucHV0LFxuICAgIFVwbG9hZElucHV0VjIsXG4gICAgQ29tcGFueUlucHV0LFxuICAgIFNwb25zb3JJbnB1dCxcbiAgICBDb3VudHJ5SW5wdXQsXG4gICAgTGFuZ3VhZ2VJbnB1dCxcbiAgICBPcmdhbml6YXRpb25JbnB1dCxcbiAgICBDb3VudHJ5RHJvcGRvd24sXG4gICAgRHJvcGRvd24sXG4gICAgRXZlbnRJbnB1dCxcbiAgICBHcm91cElucHV0LFxuICAgIFN1bW1pdElucHV0LFxuICAgIE1lbWJlcklucHV0LFxuICAgIFNwZWFrZXJJbnB1dCxcbiAgICBUYWdJbnB1dCxcbiAgICBUZXh0RWRpdG9yLFxuICAgIFRleHRBcmVhLFxuICAgIElucHV0LFxuICAgIFBhbmVsLFxuICAgIFNpbXBsZUxpbmtMaXN0LFxuICAgIFN1bW1pdERyb3Bkb3duLFxuICAgIFRhYmxlLFxuICAgIFNvcnRhYmxlVGFibGUsXG4gICAgRWRpdGFibGVUYWJsZSxcbiAgICBTaW1wbGVGb3JtLFxuICAgIFJzdnBGb3JtLFxuICAgIFJhZGlvTGlzdCxcbiAgICBDaGVja2JveExpc3QsXG4gICAgQWN0aW9uRHJvcGRvd24sXG4gICAgRnJlZU11bHRpVGV4dElucHV0LFxuICAgIE9QU2Vzc2lvbkNoZWNrZXIsXG4gICAgQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZSxcbiAgICBFeGNsdXNpdmUsXG4gICAgRnJhZ21lbnRQYXJzZXIsXG4gICAgQ2xvY2ssXG4gICAgQ2lyY2xlQnV0dG9uLFxuICAgIFZpZGVvU3RyZWFtLFxuICAgIEF0dGVuZGFuY2VUcmFja2VyLFxuICAgIFNlbGVjdGFibGVUYWJsZSxcbiAgICB1c2VGaXRUZXh0LFxuICAgIEFjY2Vzc0xldmVsc0lucHV0LFxuICAgIFJlZ2lzdHJhdGlvbkNvbXBhbnlJbnB1dCxcbiAgICBUaWNrZXRUeXBlc0lucHV0LFxuICAgIEV4dHJhUXVlc3Rpb25zRm9ybSxcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBjb25zdCBBamF4TG9hZGVyID0gICh7XG4gICAgc2hvdyxcbiAgICByZWxhdGl2ZSxcbiAgICBjb2xvcixcbiAgICBzaXplLFxuICAgIGNoaWxkcmVuLFxufSkgPT4ge1xuXG4gICAgbGV0IHN0eWxlcyA9IHtcbiAgICAgICAgZGlzcGxheSA6IHNob3cgPyAnYmxvY2snOiAnbm9uZScsXG4gICAgICAgIHdpZHRoOicxMDAlJyxcbiAgICAgICAgaGVpZ2h0OicxMDAlJyxcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlID8gJ2Fic29sdXRlJyA6ICdmaXhlZCcsXG4gICAgICAgIHpJbmRleDoxMDAwMDAwMCxcbiAgICAgICAgbWFyZ2luOidhdXRvJyxcbiAgICAgICAgY3Vyc29yOiAnd2FpdCcsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC4yKScsXG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgbGVmdDogMFxuICAgIH07XG5cbiAgICBsZXQgc3R5bGVTcGlubmVyID0ge1xuICAgICAgICBmb250U2l6ZTogc2l6ZSArICdweCcsXG4gICAgICAgIGNvbG9yOiAnYmxhY2snLFxuICAgIH07XG5cbiAgICBsZXQgc3R5bGVTcGlubmVyQ29udGFpbmVyID0ge1xuICAgICAgICB3aWR0aDogJzI1MHB4JyxcbiAgICAgICAgaGVpZ2h0Oic3NXB4JyxcbiAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlID8gJ3JlbGF0aXZlJyA6ICdmaXhlZCcsXG4gICAgICAgIHRvcDogcmVsYXRpdmUgPyAnNTAlJyA6ICcwJyxcbiAgICAgICAgbGVmdDogcmVsYXRpdmUgPyAnJyA6ICcwJyxcbiAgICAgICAgcmlnaHQ6JzAnLFxuICAgICAgICBib3R0b206JzAnLFxuICAgICAgICBtYXJnaW46J2F1dG8nLFxuICAgICAgICB6SW5kZXg6MTAsXG4gICAgICAgIGNvbG9yOicjZmZmZmZmJ1xuICAgIH07XG5cbiAgICBsZXQgc3R5bGVCYWNrZ3JvdW5kID0ge1xuICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvcixcbiAgICAgICAgb3BhY2l0eTonMC44JyxcbiAgICAgICAgd2lkdGg6JzEwMCUnLFxuICAgICAgICBoZWlnaHQ6JzEwMCUnLFxuICAgICAgICBwb3NpdGlvbjonYWJzb2x1dGUnLFxuICAgICAgICB0b3A6MFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFqYXgtbG9hZGVyLWNvbnRhaW5lclwiIHN0eWxlPXtzdHlsZXN9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17c3R5bGVTcGlubmVyQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS1zcGlubmVyIGZhLXNwaW5cIiBzdHlsZT17c3R5bGVTcGlubmVyfT48L2k+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3N0eWxlQmFja2dyb3VuZH0gY2xhc3NOYW1lPVwibG9hZGVyLWJhY2tncm91bmRcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4pO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjAgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgaHR0cCBmcm9tICdzdXBlcmFnZW50JztcbmltcG9ydCB7Z2V0QWNjZXNzVG9rZW59IGZyb20gJy4vc2VjdXJpdHkvbWV0aG9kcyc7XG5cbi8vIFNDT1BFUyBORUVERURcbi8vICVzL21lL3N1bW1pdHMvZXZlbnRzL2xlYXZlXG4vLyAlcy9tZS9zdW1taXRzL2V2ZW50cy9lbnRlclxuXG5jbGFzcyBBdHRlbmRhbmNlVHJhY2tlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgY29uc3Qge3RyYWNrRW50ZXIsIG9uQmVmb3JlVW5sb2FkfSA9IHRoaXM7XG5cbiAgICAgICAgLy8gdHJhY2sgZW50ZXJcbiAgICAgICAgdHJhY2tFbnRlcigpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgb25CZWZvcmVVbmxvYWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIGNvbnN0IHt0cmFja0xlYXZlLCBvbkJlZm9yZVVubG9hZH0gPSB0aGlzO1xuXG4gICAgICAgIC8vIHRyYWNrIGxlYXZlXG4gICAgICAgIHRyYWNrTGVhdmUoKTtcblxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIG9uQmVmb3JlVW5sb2FkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRyYWNrRW50ZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHthcGlCYXNlVXJsLCBzdW1taXRJZCwgc291cmNlSWQsIHNvdXJjZU5hbWV9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLmdldExvY2F0aW9uKCk7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgICAgICAgIGh0dHAucHV0KGAke2FwaUJhc2VVcmx9L2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L21ldHJpY3MvZW50ZXJgKVxuICAgICAgICAgICAgICAgIC5zZW5kKHthY2Nlc3NfdG9rZW46IGFjY2Vzc1Rva2VuLCB0eXBlOiBzb3VyY2VOYW1lLCBzb3VyY2VfaWQ6IHNvdXJjZUlkLCBsb2NhdGlvbjogbG9jYXRpb259KVxuICAgICAgICAgICAgICAgIC5lbmQoKCkgPT4gY29uc29sZS5sb2coJ0VOVEVSIFBBR0UnKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdHJhY2tMZWF2ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qge2FwaUJhc2VVcmwsIHN1bW1pdElkLCBzb3VyY2VJZCwgc291cmNlTmFtZX0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcblxuICAgICAgICAgICAgaHR0cC5wb3N0KGAke2FwaUJhc2VVcmx9L2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L21ldHJpY3MvbGVhdmVgKVxuICAgICAgICAgICAgICAgIC5zZW5kKHthY2Nlc3NfdG9rZW46IGFjY2Vzc1Rva2VuLCB0eXBlOiBzb3VyY2VOYW1lLCBzb3VyY2VfaWQ6IHNvdXJjZUlkLCBsb2NhdGlvbjogbG9jYXRpb259KVxuICAgICAgICAgICAgICAgIC5lbmQoKCkgPT4gY29uc29sZS5sb2coJ0xFRlQgUEFHRScpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBvbkJlZm9yZVVubG9hZCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qge2FwaUJhc2VVcmwsIHN1bW1pdElkLCBzb3VyY2VJZCwgc291cmNlTmFtZX0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgICAgICAgIG5hdmlnYXRvci5zZW5kQmVhY29uKFxuICAgICAgICAgICAgICAgIGAke2FwaUJhc2VVcmx9L2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L21ldHJpY3MvbGVhdmU/YWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59JnR5cGU9JHtzb3VyY2VOYW1lfSZzb3VyY2VfaWQ9JHtzb3VyY2VJZH0mbG9jYXRpb249JHtsb2NhdGlvbn1gLCB7fSk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGdldExvY2F0aW9uID0gKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5BdHRlbmRhbmNlVHJhY2tlci5wcm9wVHlwZXMgPSB7XG4gICAgc291cmNlTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3VyY2VJZDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBzdW1taXRJZDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIGFwaUJhc2VVcmw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxufTtcblxuQXR0ZW5kYW5jZVRyYWNrZXIuZGVmYXVsdFByb3BzID0ge1xuICAgIHNvdXJjZUlkOiAwLFxuICAgIHNvdXJjZU5hbWU6ICdHRU5FUkFMJ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXR0ZW5kYW5jZVRyYWNrZXI7XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjAgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9pbmRleC5tb2R1bGUuc2Nzcyc7XG5cbmNvbnN0IGlzTGl2ZSA9IChldmVudCwgbm93VXRjKSA9PiB7XG4gICAgY29uc3QgaGFzRW5kZWQgPSBub3dVdGMgPiBldmVudC5lbmRfZGF0ZTtcbiAgICBjb25zdCBoYXNTdGFydGVkID0gKGV2ZW50LnN0YXJ0X2RhdGUgLSBub3dVdGMpIDwgMTtcbiAgICByZXR1cm4gaGFzU3RhcnRlZCAmJiAhaGFzRW5kZWQ7XG59O1xuXG5jb25zdCBDaXJjbGVCdXR0b24gPSAoe2V2ZW50LCBpc1NjaGVkdWxlZCwgbm93VXRjLCBhZGRUb1NjaGVkdWxlLCByZW1vdmVGcm9tU2NoZWR1bGUsIGVudGVyQ2xpY2ssIGFsd2F5c1Nob3dFbnRlcn0pID0+IHtcblxuICAgIGNvbnN0IGlzTGl2ZU5vdyA9IGlzTGl2ZShldmVudCwgbm93VXRjKTtcbiAgICBsZXQgYnV0dG9uQ2xhc3MgPSBudWxsO1xuICAgIGxldCBpY29uQ2xhc3MgPSBudWxsO1xuICAgIGxldCBvbkNsaWNrID0gbnVsbDtcbiAgICBjb25zdCBoYW5kbGVDbGljayA9IChldiwgYWN0aW9uKSA9PiB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBhY3Rpb24oZXZlbnQpO1xuICAgIH07XG5cblxuICAgIGlmIChpc0xpdmVOb3cgfHwgYWx3YXlzU2hvd0VudGVyKSB7XG4gICAgICAgIGJ1dHRvbkNsYXNzID0gYCR7c3R5bGVzLmVudGVyfSBlbnRlcmA7XG4gICAgICAgIGljb25DbGFzcyA9ICdmYS1zaWduLWluJztcbiAgICAgICAgb25DbGljayA9IGV2ID0+IGhhbmRsZUNsaWNrKGV2LCBlbnRlckNsaWNrKTtcbiAgICB9IGVsc2UgaWYgKHJlbW92ZUZyb21TY2hlZHVsZSAmJiBhZGRUb1NjaGVkdWxlICYmIGlzU2NoZWR1bGVkKSB7XG4gICAgICAgIGJ1dHRvbkNsYXNzID0gYCR7c3R5bGVzLmFkZGVkfSBhZGRlZGA7XG4gICAgICAgIGljb25DbGFzcyA9ICdmYS1jaGVjayc7XG4gICAgICAgIG9uQ2xpY2sgPSBldiA9PiBoYW5kbGVDbGljayhldiwgcmVtb3ZlRnJvbVNjaGVkdWxlKTtcbiAgICB9IGVsc2UgaWYgKHJlbW92ZUZyb21TY2hlZHVsZSAmJiBhZGRUb1NjaGVkdWxlKSB7XG4gICAgICAgIGJ1dHRvbkNsYXNzID0gYCR7c3R5bGVzLmFkZH0gYWRkYDtcbiAgICAgICAgaWNvbkNsYXNzID0gJ2ZhLXBsdXMnO1xuICAgICAgICBvbkNsaWNrID0gZXYgPT4gaGFuZGxlQ2xpY2soZXYsIGFkZFRvU2NoZWR1bGUpO1xuICAgIH1cblxuICAgIGlmICghb25DbGljaykgcmV0dXJuIG51bGw7XG5cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxidXR0b24gY2xhc3NOYW1lPXtgJHtzdHlsZXMuY2lyY2xlQnV0dG9ufSAke2J1dHRvbkNsYXNzfWB9IG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgICAgICAgPGkgY2xhc3NOYW1lPXtgZmEgJHtpY29uQ2xhc3N9YH0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgKTtcbn07XG5cbkNpcmNsZUJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gICAgZXZlbnQ6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBub3dVdGM6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBpc1NjaGVkdWxlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBlbnRlckNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGFkZFRvU2NoZWR1bGU6IFByb3BUeXBlcy5mdW5jLFxuICAgIHJlbW92ZUZyb21TY2hlZHVsZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWx3YXlzU2hvd0VudGVyOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbkNpcmNsZUJ1dHRvbi5kZWZhdWx0UHJvcHMgPSB7XG4gICAgYWRkVG9TY2hlZHVsZTogbnVsbCxcbiAgICByZW1vdmVGcm9tU2NoZWR1bGU6IG51bGwsXG4gICAgYWx3YXlzU2hvd0VudGVyOiBmYWxzZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlQnV0dG9uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImNpcmNsZUJ1dHRvblwiOlwiXzM0bDJXbVlqc2VaR3RZWXdFQzI2WlJcIixcImFkZFwiOlwiXzEtcGMxbFlOWjI1alZSSmNDaVNFQnRcIixcImFkZGVkXCI6XCJfMkJMc193VHpyMkdfUEhHR0t1V3ZDdFwiLFwiZW50ZXJcIjpcIl8xdmJzZzZ4ZjVPV0YzaUdEUHlxXzAzXCJ9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjAgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudC10aW1lem9uZVwiO1xuaW1wb3J0IEZyYWdtZW50UGFyc2VyIGZyb20gXCIuL2ZyYWdtZW4tcGFyc2VyXCI7XG5cbmNsYXNzIENsb2NrIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5mcmFnbWVudFBhcnNlciA9IG5ldyBGcmFnbWVudFBhcnNlcigpO1xuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbnVsbFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIGNvbnN0IHt0aW1lem9uZSA9ICdVVEMnLCBub3d9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3Qgbm93UVMgPSB0aGlzLmZyYWdtZW50UGFyc2VyLmdldFBhcmFtKCdub3cnKTtcbiAgICAgICAgY29uc3QgbW9tZW50UVMgPSBtb21lbnQudHoobm93UVMsICdZWVlZLU1NLURELGhoOm1tOnNzJywgdGltZXpvbmUpO1xuICAgICAgICBsZXQgdGltZXN0YW1wO1xuXG4gICAgICAgIGlmIChtb21lbnRRUy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRpbWVzdGFtcCA9IG1vbWVudFFTLnZhbHVlT2YoKSAvIDEwMDA7XG4gICAgICAgIH0gZWxzZSBpZiAobm93KSB7XG4gICAgICAgICAgICB0aW1lc3RhbXAgPSBub3dcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsID0gbW9tZW50KCkudW5peCgpO1xuICAgICAgICAgICAgY29uc3Qgc2VydmVyVGltZSA9ICBhd2FpdCB0aGlzLmdldFNlcnZlclRpbWUoKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsQWZ0ZXIgPSBtb21lbnQoKS51bml4KCk7XG5cbiAgICAgICAgICAgIGlmIChzZXJ2ZXJUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGltZXN0YW1wID0gc2VydmVyVGltZS50aW1lc3RhbXAgKyAobG9jYWxBZnRlciAtIGxvY2FsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGltZXN0YW1wID0gbG9jYWxBZnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3RpbWVzdGFtcH0pO1xuICAgICAgICB0aGlzLnByb3BzLm9uVGljayh0aW1lc3RhbXApO1xuXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCh0aGlzLnRpY2ssIDEwMDApO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgIH1cblxuICAgIGdldFNlcnZlclRpbWUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwczovL3RpbWVpbnRlcnZhbHNpbmNlMTk3MC5hcHBzcG90LmNvbS9gKVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgfTtcblxuICAgIHRpY2sgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHt0aW1lc3RhbXB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgaWYgKHRpbWVzdGFtcCAhPT0gbnVsbCkgeyAgIFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5vblRpY2sodGltZXN0YW1wICsgMSk7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt0aW1lc3RhbXA6IHRpbWVzdGFtcCArIDF9KVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIGVwb2NoIHV0YyB0aW1lIGluIHNlY29uZHNcbiAgICBub3cgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnRpbWVzdGFtcDtcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7ZGlzcGxheSwgdGltZXpvbmUgPSAnVVRDJ30gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCB7dGltZXN0YW1wfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgaWYgKCFkaXNwbGF5IHx8ICF0aW1lc3RhbXApIHJldHVybiBudWxsO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7bWFyZ2luVG9wOiAnNTBweCcsIHRleHRBbGlnbjogJ2NlbnRlcicsIGZvbnRTaXplOiAnMjBweCd9fT5cbiAgICAgICAgICAgICAgICB7bW9tZW50LnR6KHRpbWVzdGFtcCoxMDAwLCB0aW1lem9uZSkuZm9ybWF0KCdZWVlZLU1NLUREIGhoOm1tOnNzJyl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2xvY2s7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE5IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeGNsdXNpdmUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc2hvd0ZpZWxkID0gdGhpcy5zaG93RmllbGQuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBzaG93RmllbGQoKSB7XG4gICAgICAgIGxldCB7bmFtZX0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgZXhjbHVzaXZlU2VjdGlvbnMgPSB3aW5kb3cuRVhDTFVTSVZFX1NFQ1RJT05TO1xuXG4gICAgICAgIHJldHVybiBleGNsdXNpdmVTZWN0aW9ucyA/IGV4Y2x1c2l2ZVNlY3Rpb25zLmluY2x1ZGVzKG5hbWUpIDogZmFsc2U7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2NoaWxkcmVufSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0ZpZWxkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QsIHt1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJ1xuaW1wb3J0IElucHV0IGZyb20gJy4uL2lucHV0cy90ZXh0LWlucHV0J1xuaW1wb3J0IERyb3Bkb3duIGZyb20gJy4uL2lucHV0cy9kcm9wZG93bidcbmltcG9ydCBSYWRpb0xpc3QgZnJvbSAnLi4vaW5wdXRzL3JhZGlvLWxpc3QnXG5pbXBvcnQgQ2hlY2tib3hMaXN0IGZyb20gJy4uL2lucHV0cy9jaGVja2JveC1saXN0J1xuaW1wb3J0IFF1ZXN0aW9uc1NldCBmcm9tICcuLi8uLi91dGlscy9xdWVzdGlvbnMtc2V0JztcbmltcG9ydCB7RmllbGQsIEZvcm19IGZyb20gXCJyZWFjdC1maW5hbC1mb3JtXCI7XG5cbmNvbnN0IEV4dHJhUXVlc3Rpb25zRm9ybSA9ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyQW5zd2VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25BbnN3ZXJDaGFuZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAncXVlc3Rpb25zLWZvcm0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZSA9ICdxdWVzdGlvbi1jb250YWluZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lID0gJ3F1ZXN0aW9uLWxhYmVsLWNvbnRhaW5lcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZT0gJ3F1ZXN0aW9uLWNvbnRyb2wtY29udGFpbmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVJlZiA9IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRPbmx5ID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblRleHQgPSAnU3VibWl0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pID0+IHtcblxuICAgIGxldCBzdWJtaXQgPSBudWxsO1xuXG4gICAgY29uc3QgcXVlc3Rpb25SZWYgPSB1c2VSZWYoe30pO1xuXG4gICAgY29uc3QgW2Fuc3dlcnMsIHNldEFuc3dlcnNdID0gdXNlU3RhdGUoe30pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZm9ybWF0VXNlckFuc3dlcnMoKTtcbiAgICB9LCBbZXh0cmFRdWVzdGlvbnNdKVxuXG4gICAgY29uc3QgZm9ybWF0VXNlckFuc3dlcnMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHFzID0gbmV3IFF1ZXN0aW9uc1NldChleHRyYVF1ZXN0aW9ucywgdXNlckFuc3dlcnMpO1xuICAgICAgICBzZXRBbnN3ZXJzKHFzLmZvcm1hdEFuc3dlcnMoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgQ29uZGl0aW9uID0gKHt3aGVuLCBydWxlLCBjaGlsZHJlbn0pID0+IChcbiAgICAgICAgPEZpZWxkIG5hbWU9e3doZW59IHN1YnNjcmlwdGlvbj17e3ZhbHVlOiB0cnVlfX0+XG4gICAgICAgICAgICB7KHtpbnB1dDoge3ZhbHVlfX0pID0+XG4gICAgICAgICAgICAgICAgY2hlY2tWaXNpYmlsaXR5KHJ1bGUsIGNoZWNrUnVsZSh2YWx1ZSwgcnVsZSksIGNoaWxkcmVuKVxuICAgICAgICAgICAgfVxuICAgICAgICA8L0ZpZWxkPlxuICAgICk7XG5cbiAgICBjb25zdCBFcnJvciA9ICh7bmFtZX0pID0+IChcbiAgICAgICAgPEZpZWxkIG5hbWU9e25hbWV9IHN1YnNjcmlwdGlvbj17e2Vycm9yOiB0cnVlLCBzdWJtaXRFcnJvcjp0cnVlLCBpbnZhbGlkOiB0cnVlLCB0b3VjaGVkOiB0cnVlfX0+XG4gICAgICAgICAgICB7KHttZXRhOiB7ZXJyb3IsIHN1Ym1pdEVycm9yLCBpbnZhbGlkLCB0b3VjaGVkfX0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgbmFtZSAke25hbWV9IGVycm9yICR7ZXJyb3J9IHN1Ym1pdEVycm9yICR7c3VibWl0RXJyb3J9IGludmFsaWQgJHtpbnZhbGlkfSB0b3VjaGVkICR7dG91Y2hlZH1gKVxuICAgICAgICAgICAgICAgIHJldHVybiBpbnZhbGlkICYmIChlcnJvciB8fCBzdWJtaXRFcnJvciB8fCB0b3VjaGVkKSA/XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nZXh0cmEtcXVlc3Rpb24tZXJyb3InPntlcnJvciA/IGVycm9yIDogc3VibWl0RXJyb3J9PC9zcGFuPiA6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9GaWVsZD5cbiAgICApO1xuXG4gICAgY29uc3QgY2hlY2tSdWxlID0gKHZhbHVlLCBydWxlKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZXMgPSBydWxlLmFuc3dlcl92YWx1ZXM7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgbGV0IHJlcyA9IHJ1bGUuYW53ZXJfdmFsdWVzX29wZXJhdG9yID09PSBcIkFuZFwiO1xuICAgICAgICAgICAgdmFsdWVzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocnVsZS5hbndlcl92YWx1ZXNfb3BlcmF0b3IgPT09IFwiQW5kXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzID0gcmVzICYmIHZhbHVlLmluY2x1ZGVzKHBhcnNlSW50KHYpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBPclxuICAgICAgICAgICAgICAgICAgICByZXMgPSByZXMgfHwgdmFsdWUuaW5jbHVkZXMocGFyc2VJbnQodikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVzLmluY2x1ZGVzKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGVja1Zpc2liaWxpdHkgPSAocnVsZSwgcnVsZVJlc3VsdCwgY2hpbGRyZW4pID0+IHtcbiAgICAgICAgaWYgKHJ1bGUudmlzaWJpbGl0eSA9PT0gXCJWaXNpYmxlXCIpIHtcbiAgICAgICAgICAgIGlmIChydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uID09PSBcIkVxdWFsXCIpIHtcbiAgICAgICAgICAgICAgICBpZihydWxlUmVzdWx0KSByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgZGVsZXRlIHF1ZXN0aW9uUmVmLmN1cnJlbnRbcnVsZS5zdWJfcXVlc3Rpb24uaWRdXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBOb24gRXF1YWxcbiAgICAgICAgICAgIGlmKCFydWxlUmVzdWx0KXtcbiAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHF1ZXN0aW9uUmVmLmN1cnJlbnRbcnVsZS5zdWJfcXVlc3Rpb24uaWRdXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3QgdmlzaWJsZVxuICAgICAgICBpZiAocnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbiA9PT0gXCJFcXVhbFwiKSB7XG4gICAgICAgICAgICBpZighcnVsZVJlc3VsdCkgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgZGVsZXRlIHF1ZXN0aW9uUmVmLmN1cnJlbnRbcnVsZS5zdWJfcXVlc3Rpb24uaWRdXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZihydWxlUmVzdWx0KSByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgIGRlbGV0ZSBxdWVzdGlvblJlZi5jdXJyZW50W3J1bGUuc3ViX3F1ZXN0aW9uLmlkXVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyUXVlc3Rpb24gPSAocSkgPT4ge1xuICAgICAgICBsZXQgcXVlc3Rpb25WYWx1ZXMgPSBxLnZhbHVlcztcbiAgICAgICAgLy8gQHNlZSBodHRwczovL2NvZGVzYW5kYm94LmlvL3MvdmcwNXk/ZmlsZT0vaW5kZXguanNcbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJUZXh0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3EubmFtZX0gcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgY2xhc3NOYW1lPXtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfT57cS5tYW5kYXRvcnkgPyBxLmxhYmVsPy5lbmRzV2l0aCgnPC9wPicpID8gcS5sYWJlbC5yZXBsYWNlKC88XFwvcD4kL2csIFwiIDxiPio8L2I+PC9wPlwiKSA6IGAke3EubGFiZWx9IDxiPio8L2I+YCA6IHEubGFiZWx9PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIG5hbWU9e3EubmFtZX0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcyA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake3EuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9wcy5pbnB1dC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtwcm9wcy5pbnB1dC5vbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtxLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3EubmFtZX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJUZXh0QXJlYVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtxLm5hbWV9IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIGNsYXNzTmFtZT17cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX0+e3EubWFuZGF0b3J5ID8gcS5sYWJlbD8uZW5kc1dpdGgoJzwvcD4nKSA/IHEubGFiZWwucmVwbGFjZSgvPFxcL3A+JC9nLCBcIiA8Yj4qPC9iPjwvcD5cIikgOiBgJHtxLmxhYmVsfSA8Yj4qPC9iPmAgOiBxLmxhYmVsfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0gbmFtZT17cS5uYW1lfSBpZD17YCR7cS5pZH1gfSBjb21wb25lbnQ9XCJ0ZXh0YXJlYVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXtxLm5hbWV9Lz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiB3aGVuPXtxLm5hbWV9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxLnR5cGUgPT09IFwiQ2hlY2tCb3hcIikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cS5uYW1lfSByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gc3R5bGU9e3tkaXNwbGF5OiAnZmxleCd9fSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0gbmFtZT17cS5uYW1lfSBpZD17YCR7cS5pZH1gfSBjb21wb25lbnQ9XCJpbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIGNsYXNzTmFtZT17YGVxLWNoZWNrYm94LWxhYmVsICR7cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cS5tYW5kYXRvcnkgPyBxLmxhYmVsPy5lbmRzV2l0aCgnPC9wPicpID8gcS5sYWJlbC5yZXBsYWNlKC88XFwvcD4kL2csIFwiIDxiPio8L2I+PC9wPlwiKSA6IGAke3EubGFiZWx9IDxiPio8L2I+YCA6IHEubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RXJyb3IgbmFtZT17cS5uYW1lfS8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7cS5zdWJfcXVlc3Rpb25fcnVsZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXMubWFwKChyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25kaXRpb24gd2hlbj17cS5uYW1lfSBydWxlPXtyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NvbmRpdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocS50eXBlID09PSBcIlJhZGlvQnV0dG9uTGlzdFwiKSB7XG4gICAgICAgICAgICBxdWVzdGlvblZhbHVlcyA9IHF1ZXN0aW9uVmFsdWVzLm1hcCh2YWwgPT4gKHsuLi52YWwsIHZhbHVlOiB2YWwuaWR9KSk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtxLm5hbWV9IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIGNsYXNzTmFtZT17cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX0+e3EubWFuZGF0b3J5ID8gcS5sYWJlbD8uZW5kc1dpdGgoJzwvcD4nKSA/IHEubGFiZWwucmVwbGFjZSgvPFxcL3A+JC9nLCBcIiA8Yj4qPC9iPjwvcD5cIikgOiBgJHtxLmxhYmVsfSA8Yj4qPC9iPmAgOiBxLmxhYmVsfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBuYW1lPXtxLm5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvcHMgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJhZGlvTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgJHtxLmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVDU1M9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb3BzLmlucHV0LnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3F1ZXN0aW9uVmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtwcm9wcy5pbnB1dC5vbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXJyb3IgbmFtZT17cS5uYW1lfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiB3aGVuPXtxLm5hbWV9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxLnR5cGUgPT09IFwiQ29tYm9Cb3hcIikge1xuICAgICAgICAgICAgcXVlc3Rpb25WYWx1ZXMgPSBxdWVzdGlvblZhbHVlcy5tYXAodmFsID0+ICh7Li4udmFsLCB2YWx1ZTogdmFsLmlkfSkpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cS5uYW1lfSByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PntxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbmFtZT17cS5uYW1lfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YCR7cS5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVDU1M9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvcHMuaW5wdXQudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtxdWVzdGlvblZhbHVlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtwcm9wcy5pbnB1dC5vbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXtxLm5hbWV9Lz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiB3aGVuPXtxLm5hbWV9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxLnR5cGUgPT09IFwiQ2hlY2tCb3hMaXN0XCIpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uVmFsdWVzID0gcXVlc3Rpb25WYWx1ZXMubWFwKHZhbCA9PiAoey4uLnZhbCwgdmFsdWU6IHZhbC5pZH0pKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3EubmFtZX0gcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgY2xhc3NOYW1lPXtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfT57cS5tYW5kYXRvcnkgPyBxLmxhYmVsPy5lbmRzV2l0aCgnPC9wPicpID8gcS5sYWJlbC5yZXBsYWNlKC88XFwvcD4kL2csIFwiIDxiPio8L2I+PC9wPlwiKSA6IGAke3EubGFiZWx9IDxiPio8L2I+YCA6IHEubGFiZWx9PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIG5hbWU9e3EubmFtZX0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcyA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDaGVja2JveExpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgJHtxLmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtxLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvcHMuaW5wdXQudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtxdWVzdGlvblZhbHVlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtwcm9wcy5pbnB1dC5vbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXtxLm5hbWV9Lz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiB3aGVuPXtxLm5hbWV9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1Zpc2libGUgPSAocSkgPT4ge1xuICAgICAgICByZXR1cm4gISFxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdO1xuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZGF0ZVF1ZXN0aW9uID0gKHEsIHZhbHVlcywgZXJyb3JzKSA9PiB7XG4gICAgICAgIGlmIChxLm1hbmRhdG9yeSAmJiBpc1Zpc2libGUocSkpIHtcbiAgICAgICAgICAgIGlmICghdmFsdWVzLmhhc093blByb3BlcnR5KHEubmFtZSkgfHwgdmFsdWVzW3EubmFtZV0gPT09IFwiXCIgfHwgdmFsdWVzW3EubmFtZV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzW3EubmFtZV0gPSBcIlJlcXVpcmVkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdmFsaWRhdGUgc3ViIHJ1bGVzXG4gICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzPy5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgICAgICB2YWxpZGF0ZVF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uLCB2YWx1ZXMsIGVycm9ycyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBvblN1Ym1pdCA9ICh2YWx1ZXMpID0+IHtcbiAgICAgICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZSh2YWx1ZXMpO1xuICAgICAgIGlmKE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgb25BbnN3ZXJDaGFuZ2VzKHZhbHVlcylcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsaWRhdGUgPSAodmFsdWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHt9O1xuICAgICAgICBleHRyYVF1ZXN0aW9ucy5mb3JFYWNoKCBxID0+IHtcbiAgICAgICAgICAgIHZhbGlkYXRlUXVlc3Rpb24ocSwgdmFsdWVzLCBlcnJvcnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAgICA8Rm9ybVxuICAgICAgICAgICAgICAgIG9uU3VibWl0PXtvblN1Ym1pdH1cbiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWVzPXthbnN3ZXJzfVxuICAgICAgICAgICAgICAgIHZhbGlkYXRlPXt2YWxpZGF0ZX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7KHtoYW5kbGVTdWJtaXQsIGZvcm0sIHN1Ym1pdHRpbmcsIHByaXN0aW5lLCB2YWx1ZXN9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pdCA9IGhhbmRsZVN1Ym1pdDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9IHJlZj17Zm9ybVJlZn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlYWRPbmx5ID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtleHRyYVF1ZXN0aW9ucy5tYXAoKHEpID0+IHJlbmRlclF1ZXN0aW9uKHEpKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYVF1ZXN0aW9ucy5tYXAoKHEpID0+IHJlbmRlclF1ZXN0aW9uKHEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGVidWcgJiYgPHByZT57SlNPTi5zdHJpbmdpZnkodmFsdWVzLCAwLCAyKX08L3ByZT59XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICAgIHshZm9ybVJlZiAmJlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWJtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgc3R5bGU9e3ttYXJnaW5Ub3A6IDEwfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7YnV0dG9uVGV4dH1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICApXG59XG5cbkV4dHJhUXVlc3Rpb25zRm9ybS5wcm9wVHlwZXMgPSB7XG4gICAgZXh0cmFRdWVzdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIHVzZXJBbnN3ZXJzOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBvbkFuc3dlckNoYW5nZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZvcm1SZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgICBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgUHJvcFR5cGVzLnNoYXBlKHtjdXJyZW50OiBQcm9wVHlwZXMuYW55fSlcbiAgICBdKSxcbiAgICBkZWJ1ZzogUHJvcFR5cGVzLmJvb2wsXG4gICAgYnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lIDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFeHRyYVF1ZXN0aW9uc0Zvcm07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgJ2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94L2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94LmNzcydcbmltcG9ydCBJbnB1dCBmcm9tICcuLi9pbnB1dHMvdGV4dC1pbnB1dCdcbmltcG9ydCBEcm9wZG93biBmcm9tICcuLi9pbnB1dHMvZHJvcGRvd24nXG5pbXBvcnQgUmF3SFRNTCBmcm9tICcuLi9yYXctaHRtbCdcbmltcG9ydCBDaGVja2JveExpc3QgZnJvbSAnLi4vaW5wdXRzL2NoZWNrYm94LWxpc3QnXG5pbXBvcnQgUmFkaW9MaXN0IGZyb20gJy4uL2lucHV0cy9yYWRpby1saXN0J1xuXG5cbmNsYXNzIFJzdnBGb3JtIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGFuc3dlcnM6IHByb3BzLnF1ZXN0aW9ucy5tYXAocSA9PiAoe3F1ZXN0aW9uX2lkOiBxLmlkLCB2YWx1ZTogbnVsbH0pKSxcbiAgICAgICAgICAgIGVycm9yczogcHJvcHMuZXJyb3JzXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhc0Vycm9ycyA9IHRoaXMuaGFzRXJyb3JzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlU3VibWl0ID0gdGhpcy5oYW5kbGVTdWJtaXQuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICByZW5kZXJRdWVzdGlvbihxKSB7XG4gICAgICAgIGNvbnN0IHthbnN3ZXJzfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYW5zd2Vycy5maW5kKGEgPT4gYS5xdWVzdGlvbl9pZCA9PT0gcS5pZCkudmFsdWU7XG5cbiAgICAgICAgc3dpdGNoKHEuY2xhc3NfbmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnUlNWUE1lbWJlckVtYWlsUXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICBjYXNlICdSU1ZQTWVtYmVyRmlyc3ROYW1lUXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICBjYXNlICdSU1ZQTWVtYmVyTGFzdE5hbWVRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBUZXh0Qm94UXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17cS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZSB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj17dGhpcy5oYXNFcnJvcnMocS5pZCl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBUZXh0QXJlYVF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3EuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWUgfHwgJyd9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAvPik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSU1ZQTGl0ZXJhbENvbnRlbnRRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKDxkaXY+PFJhd0hUTUw+e3EudmFsdWV9PC9SYXdIVE1MPjwvZGl2Pik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSU1ZQQ2hlY2tCb3hMaXN0UXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94TGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3EuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtxLnZhbHVlcy5tYXAodiA9PiAoe3ZhbHVlOiBgJHt2LmlkfWAsIGxhYmVsOiB2LmxhYmVsfSkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I9e3RoaXMuaGFzRXJyb3JzKHEuaWQpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSU1ZQUmFkaW9CdXR0b25MaXN0UXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPFJhZGlvTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3EuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtxLnZhbHVlcy5tYXAodiA9PiAoe3ZhbHVlOiBgJHt2LmlkfWAsIGxhYmVsOiB2LmxhYmVsfSkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I9e3RoaXMuaGFzRXJyb3JzKHEuaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBEcm9wRG93blF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZXMgPSAocS5pc19jb3VudHJ5X3NlbGVjdG9yKSA/IHEudmFsdWVzLm1hcCh2ID0+ICh7dmFsdWU6di5pZCwgbGFiZWw6IHYudmFsdWV9KSkgOiBxLnZhbHVlcztcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxEcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3EuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtxLmlzX211bHRpc2VsZWN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3EuZW1wdHlfc3RyaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17dmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZXYpIHtcbiAgICAgICAgbGV0IGFuc3dlcnMgPSBbLi4udGhpcy5zdGF0ZS5hbnN3ZXJzXTtcbiAgICAgICAgbGV0IHt2YWx1ZSwgaWR9ID0gZXYudGFyZ2V0O1xuXG4gICAgICAgIGlmIChldi50YXJnZXQudHlwZSA9PT0gJ2RhdGV0aW1lJykge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZU9mKCkgLyAxMDAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFuc3dlciA9IGFuc3dlcnMuZmluZChhID0+IGEucXVlc3Rpb25faWQgPT09IHBhcnNlSW50KGlkKSk7XG4gICAgICAgIGFuc3dlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2Fuc3dlcnN9KTtcbiAgICB9XG5cbiAgICBoYXNFcnJvcnMoZmllbGQpIHtcbiAgICAgICAgbGV0IHtlcnJvcnN9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgaWYoZmllbGQgaW4gZXJyb3JzKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JzW2ZpZWxkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBoYW5kbGVTdWJtaXQoZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBsZXQgeyBvblN1Ym1pdCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHthbnN3ZXJzfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgb25TdWJtaXQoYW5zd2Vycyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgeyBxdWVzdGlvbnMsIG9uU3VibWl0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Zm9ybSBjbGFzc05hbWU9XCJyc3ZwLWZvcm1cIj5cbiAgICAgICAgICAgICAgICB7cXVlc3Rpb25zLm1hcChxID0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXsncXVlc3Rpb25fJytxLmlkfSBjbGFzc05hbWU9XCJyb3cgZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MPntxLmxhYmVsfTwvUmF3SFRNTD4ge3EuaXNfbWFuZGF0b3J5ICYmICcqJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlclF1ZXN0aW9uKHEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge29uU3VibWl0ICYmXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5XCIgb25DbGljaz17dGhpcy5oYW5kbGVTdWJtaXR9PlN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJzdnBGb3JtO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdCdcbmltcG9ydCAnYXdlc29tZS1ib290c3RyYXAtY2hlY2tib3gvYXdlc29tZS1ib290c3RyYXAtY2hlY2tib3guY3NzJ1xuaW1wb3J0IElucHV0IGZyb20gJy4uL2lucHV0cy90ZXh0LWlucHV0J1xuaW1wb3J0IHsgc2Nyb2xsVG9FcnJvciwgaXNFbXB0eSwgc2hhbGxvd0VxdWFsLCBoYXNFcnJvcnMgfSBmcm9tICcuLi8uLi91dGlscy9tZXRob2RzJ1xuXG5cbmNsYXNzIFNpbXBsZUZvcm0gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZW50aXR5OiB7Li4ucHJvcHMuZW50aXR5fSxcbiAgICAgICAgICAgIGVycm9yczogcHJvcHMuZXJyb3JzXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZVN1Ym1pdCA9IHRoaXMuaGFuZGxlU3VibWl0LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHt9O1xuICAgICAgICBzY3JvbGxUb0Vycm9yKHRoaXMucHJvcHMuZXJyb3JzKTtcblxuICAgICAgICBpZihwcmV2UHJvcHMuZW50aXR5LmlkICE9PSB0aGlzLnByb3BzLmVudGl0eS5pZCkge1xuICAgICAgICAgICAgc3RhdGUuZW50aXR5ID0gey4uLnRoaXMucHJvcHMuZW50aXR5fTtcbiAgICAgICAgICAgIHN0YXRlLmVycm9ycyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzaGFsbG93RXF1YWwocHJldlByb3BzLmVycm9ycywgdGhpcy5wcm9wcy5lcnJvcnMpKSB7XG4gICAgICAgICAgICBzdGF0ZS5lcnJvcnMgPSB7Li4udGhpcy5wcm9wcy5lcnJvcnN9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0VtcHR5KHN0YXRlKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgLi4uc3RhdGV9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGV2KSB7XG4gICAgICAgIGxldCBlbnRpdHkgPSB7Li4udGhpcy5zdGF0ZS5lbnRpdHl9O1xuICAgICAgICBsZXQgZXJyb3JzID0gey4uLnRoaXMuc3RhdGUuZXJyb3JzfTtcbiAgICAgICAgbGV0IHt2YWx1ZSwgaWR9ID0gZXYudGFyZ2V0O1xuXG4gICAgICAgIGlmIChldi50YXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgdmFsdWUgPSBldi50YXJnZXQuY2hlY2tlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yc1tpZF0gPSAnJztcbiAgICAgICAgZW50aXR5W2lkXSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtlbnRpdHk6IGVudGl0eSwgZXJyb3JzOiBlcnJvcnN9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVTdWJtaXQoZXYpIHtcbiAgICAgICAgbGV0IGVudGl0eSA9IHsuLi50aGlzLnN0YXRlLmVudGl0eX07XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vblN1Ym1pdCh0aGlzLnN0YXRlLmVudGl0eSk7XG4gICAgfVxuXG4gICAgY3JlYXRlRmllbGQoZmllbGQpIHtcbiAgICAgICAgbGV0IHtlbnRpdHksIGVycm9yc30gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e1wiZmllbGRfXCIrZmllbGQubmFtZX0gY2xhc3NOYW1lPVwicm93IGZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+IHtmaWVsZC5sYWJlbH0gPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2ZpZWxkLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtlbnRpdHlbZmllbGQubmFtZV19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I9e2hhc0Vycm9ycyhmaWVsZC5uYW1lLCBlcnJvcnMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtcImZpZWxkX1wiK2ZpZWxkLm5hbWV9IGNsYXNzTmFtZT1cInJvdyBmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiB7ZmllbGQubGFiZWx9IDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtmaWVsZC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZW50aXR5W2ZpZWxkLm5hbWVdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjaGVja2JveCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e1wiZmllbGRfXCIrZmllbGQubmFtZX0gY2xhc3NOYW1lPVwicm93IGZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tY2hlY2sgYWJjLWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD17ZmllbGQubmFtZX0gY2hlY2tlZD17ZW50aXR5W2ZpZWxkLm5hbWVdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfSBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWlucHV0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZvcm0tY2hlY2stbGFiZWxcIiBodG1sRm9yPXtmaWVsZC5uYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmaWVsZC5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtlbnRpdHl9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IHtmaWVsZHN9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGZvcm0gY2xhc3NOYW1lPVwic2ltcGxlLWZvcm1cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiaWRcIiB2YWx1ZT17ZW50aXR5LmlkfSAvPlxuXG4gICAgICAgICAgICAgICAge2ZpZWxkcy5tYXAoZiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZpZWxkKGYpO1xuICAgICAgICAgICAgICAgIH0pfVxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtMTIgc3VibWl0LWJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17dGhpcy5oYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5IHB1bGwtcmlnaHRcIiB2YWx1ZT17VC50cmFuc2xhdGUoXCJnZW5lcmFsLnNhdmVcIil9Lz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaW1wbGVGb3JtO1xuIiwiXG5jbGFzcyBGcmFnbWVudFBhcnNlciB7XG5cbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB0aGlzLm9yaWdpbmFsSGFzaCA9ICcnO1xuICAgICAgICB0aGlzLmhhc2ggICAgICAgICA9IHt9O1xuICAgIH1cblxuICAgIGNvbnZlcnRUb0hhc2goc3RySGFzaClcbiAgICB7XG4gICAgICAgIHN0ckhhc2ggICAgPSBzdHJIYXNoLnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgcGFyYW1zID0gc3RySGFzaC5zcGxpdCgnJicpO1xuICAgICAgICBsZXQgcmVzID0ge307XG4gICAgICAgIGZvcihsZXQgcGFyYW0gb2YgcGFyYW1zKVxuICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbSA9IHBhcmFtLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgICBpZihwYXJhbS5sZW5ndGggIT09ICAyKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCB2YWwgPSBwYXJhbVsxXS50cmltKCk7XG4gICAgICAgICAgICBpZih2YWwgPT09ICcnKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gJ3RydWUnIHx8IHZhbCA9PT0gJ2ZhbHNlJylcbiAgICAgICAgICAgICAgICBwYXJhbVsxXSA9IHZhbCA9PSAndHJ1ZSc7XG5cbiAgICAgICAgICAgIHJlc1twYXJhbVswXV0gPSBwYXJhbVsxXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGNsZWFyUGFyYW1zKCl7XG4gICAgICAgIHRoaXMub3JpZ2luYWxIYXNoID0gJyc7XG4gICAgICAgIHRoaXMuaGFzaCAgICAgICAgID0ge307XG4gICAgfVxuXG4gICAgZ2V0UGFyYW0oa2V5KXtcbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcmlnaW5hbEhhc2ggIT09IHdpbmRvdy5sb2NhdGlvbi5oYXNoKXtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxIYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7XG4gICAgICAgICAgICB0aGlzLmhhc2ggPSB0aGlzLmNvbnZlcnRUb0hhc2godGhpcy5vcmlnaW5hbEhhc2gpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIXRoaXMuaGFzaC5oYXNPd25Qcm9wZXJ0eShrZXkpICkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc2hba2V5XTtcbiAgICB9XG5cbiAgICBnZXRQYXJhbXMoKXtcbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcmlnaW5hbEhhc2ggIT09ICB3aW5kb3cubG9jYXRpb24uaGFzaCl7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbmFsSGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuICAgICAgICAgICAgdGhpcy5oYXNoID0gdGhpcy5jb252ZXJ0VG9IYXNoKHRoaXMub3JpZ2luYWxIYXNoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IC4uLiB0aGlzLmhhc2ggfTtcbiAgICB9XG5cbiAgICBkZWxldGVQYXJhbShwYXJhbSl7XG4gICAgICAgIHZhciBoYXNoICAgID0gdGhpcy5nZXRQYXJhbXMoKTtcbiAgICAgICAgdGhpcy5jbGVhclBhcmFtcygpO1xuICAgICAgICBmb3IobGV0IGtleSBpbiBoYXNoKSB7XG4gICAgICAgICAgICBpZihrZXkgPT0gcGFyYW0pIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5oYXNoW2tleV0gPSBoYXNoW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZWxldGVQYXJhbXMocGFyYW1zKXtcbiAgICAgICAgdmFyIGhhc2ggICAgPSB0aGlzLmdldFBhcmFtcygpO1xuICAgICAgICB0aGlzLmNsZWFyUGFyYW1zKCk7XG4gICAgICAgIGZvcihsZXQga2V5IGluIGhhc2gpIHtcbiAgICAgICAgICAgIGlmKHBhcmFtcy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMuaGFzaFtrZXldID0gaGFzaFtrZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0UGFyYW0oa2V5LCB2YWx1ZSl7XG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3JpZ2luYWxIYXNoICE9PSAgd2luZG93LmxvY2F0aW9uLmhhc2gpe1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcbiAgICAgICAgICAgIHRoaXMuaGFzaCA9IHRoaXMuY29udmVydFRvSGFzaCh0aGlzLm9yaWdpbmFsSGFzaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnKVxuICAgICAgICAgICAgdGhpcy5oYXNoW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuaGFzaFtrZXldO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKXtcbiAgICAgICAgbGV0IHJlcyA9ICcnO1xuICAgICAgICBmb3IobGV0IGtleSBpbiB0aGlzLmhhc2gpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCB2YWwgPSB0aGlzLmhhc2hba2V5XTtcbiAgICAgICAgICAgIGlmKHJlcyAhPT0gJycpIHJlcyArPSAnJic7XG4gICAgICAgICAgICByZXMgKz0ga2V5Kyc9Jyt2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZyYWdtZW50UGFyc2VyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUIGZyb20gXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiO1xuXG5jbGFzcyBGcmVlVGV4dFNlYXJjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5vblNlYXJjaENsaWNrICA9IHRoaXMub25TZWFyY2hDbGljay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uQ2xlYXJDbGljayAgID0gdGhpcy5vbkNsZWFyQ2xpY2suYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbktleVByZXNzZWQgICA9IHRoaXMub25LZXlQcmVzc2VkLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgICAgICAgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBvblNlYXJjaENsaWNrKCl7XG4gICAgICAgIHRoaXMuZG9GaWx0ZXJpbmcodGhpcy5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgb25DbGVhckNsaWNrKCl7XG4gICAgICAgIHRoaXMuZG9GaWx0ZXJpbmcoJycpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogJyd9KTtcbiAgICB9XG5cbiAgICBkb0ZpbHRlcmluZyh0ZXJtKXtcbiAgICAgICAgdGhpcy5wcm9wcy5vblNlYXJjaCh0ZXJtLnRyaW0oKSk7XG4gICAgfVxuXG4gICAgb25LZXlQcmVzc2VkKGV2ZW50KXtcbiAgICAgICAgdmFyIGNvZGUgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoO1xuICAgICAgICBpZihjb2RlID09PSAxMykge1xuICAgICAgICAgICAgdGhpcy5kb0ZpbHRlcmluZyh0aGlzLnN0YXRlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2hhbmdlKGV2ZW50KXtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2YWx1ZTogZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBsZXQge3ZhbHVlfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgcmV0dXJuKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3cgc2VhcmNoLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25LZXlQcmVzcz17dGhpcy5vbktleVByZXNzZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaW5wdXQtZ3JvdXAtYnRuXCIgc3R5bGU9e3t3aWR0aDogNSArJyUnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXt0aGlzLm9uU2VhcmNoQ2xpY2t9IGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdFwiIHRpdGxlPXtULnRyYW5zbGF0ZShcImdlbmVyYWwuc2VhcmNoXCIpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtc2VhcmNoXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9e3RoaXMub25DbGVhckNsaWNrfSBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHRcIiB0aXRsZT17VC50cmFuc2xhdGUoXCJnZW5lcmFsLmNsZWFyXCIpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtdGltZXNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApXG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGcmVlVGV4dFNlYXJjaDsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB3aXRoU2NyaXB0anMsIHdpdGhHb29nbGVNYXAsIEdvb2dsZU1hcCwgTWFya2VyLCBJbmZvV2luZG93IH0gZnJvbSBcInJlYWN0LWdvb2dsZS1tYXBzXCI7XG5pbXBvcnQgTWFya2VyQ2x1c3RlcmVyIGZyb20gXCJyZWFjdC1nb29nbGUtbWFwcy9saWIvY29tcG9uZW50cy9hZGRvbnMvTWFya2VyQ2x1c3RlcmVyXCI7XG5pbXBvcnQge2FycmF5c0VxdWFsfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWV0aG9kc1wiO1xuXG5jb25zdCBNQVAgPSB7XG4gICAgZGVmYXVsdFpvb206IDIsXG4gICAgZGVmYXVsdENlbnRlcjogeyBsYXQ6IDMwLjI3MDE2NiwgbG5nOiAtOTcuNzMxMjcxIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgICBtaW5ab29tOiAxLFxuICAgICAgICBtYXhab29tOiAxOVxuICAgIH1cbn07XG5cbmNvbnN0IEdvb2dsZU1hcFdyYXBwZXIgPSB3aXRoR29vZ2xlTWFwKChwcm9wcykgPT4ge1xuICAgICAgICByZXR1cm4gIDxHb29nbGVNYXBcbiAgICAgICAgICAgIHJlZj17cHJvcHMub25NYXBMb2FkfVxuICAgICAgICAgICAgem9vbT17IHByb3BzLnpvb20gfVxuICAgICAgICAgICAgY2VudGVyPXsgcHJvcHMuY2VudGVyIH1cbiAgICAgICAgICAgIG9uQm91bmRzQ2hhbmdlZD17cHJvcHMub25NYXBDaGFuZ2V9XG4gICAgICAgICAgICBvbkNsaWNrPXtwcm9wcy5vbk1hcENsaWNrfVxuICAgICAgICA+XG4gICAgICAgICAgICB7cHJvcHMuc2hvd01hcmtlcnMgJiZcbiAgICAgICAgICAgIDxNYXJrZXJDbHVzdGVyZXJcbiAgICAgICAgICAgICAgICBhdmVyYWdlQ2VudGVyXG4gICAgICAgICAgICAgICAgZW5hYmxlUmV0aW5hSWNvbnNcbiAgICAgICAgICAgICAgICBncmlkU2l6ZT17NjB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3Byb3BzLm1hcmtlcnMubWFwKG1hcmtlciA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxNYXJrZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17bWFya2VyLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249e3sgbGF0OiBtYXJrZXIubGF0LCBsbmc6IG1hcmtlci5sbmcgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHByb3BzLm9uVG9nZ2xlSW5mb1dpbmRvdyhtYXJrZXIuaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25EcmFnRW5kPXtwcm9wcy5vbk1hcmtlckRyYWd9XG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9e3Byb3BzLmRyYWdnYWJsZX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge21hcmtlci5pc0luZm9XaW5kb3dPcGVuICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8SW5mb1dpbmRvdyBvbkNsb3NlQ2xpY2s9eygpID0+IHByb3BzLm9uVG9nZ2xlSW5mb1dpbmRvdyhtYXJrZXIuaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PnttYXJrZXIubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvSW5mb1dpbmRvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9NYXJrZXI+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L01hcmtlckNsdXN0ZXJlcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9Hb29nbGVNYXA+XG4gICAgfVxuKTtcblxuZXhwb3J0IGNsYXNzIEdNYXAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBtYXJrZXJzOiBwcm9wcy5tYXJrZXJzXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVNYXBMb2FkID0gdGhpcy5oYW5kbGVNYXBMb2FkLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTWFwQ2hhbmdlID0gdGhpcy5oYW5kbGVNYXBDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVNYXJrZXJEcmFnID0gdGhpcy5oYW5kbGVNYXJrZXJEcmFnLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTWFwQ2xpY2sgPSB0aGlzLmhhbmRsZU1hcENsaWNrLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBjb25zdCBuZXdfbWFya2VycyA9IHRoaXMucHJvcHMubWFya2VycztcblxuICAgICAgICBpZiAoIWFycmF5c0VxdWFsKG5ld19tYXJrZXJzLCBwcmV2UHJvcHMubWFya2VycykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBtYXJrZXJzOiBuZXdfbWFya2VycyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvbGRfbWFya2Vyc19zdHIgPSBwcmV2UHJvcHMubWFya2Vycy5tYXAoIG0gPT4gbS5pZCApLnNvcnQoKS5qb2luKCk7XG4gICAgICAgIGxldCBuZXdfbWFya2Vyc19zdHIgPSBuZXdfbWFya2Vycy5tYXAoIG0gPT4gbS5pZCApLnNvcnQoKS5qb2luKCk7XG5cbiAgICAgICAgaWYgKG5ld19tYXJrZXJzLmxlbmd0aCA+IDEgJiYgb2xkX21hcmtlcnNfc3RyICE9PSBuZXdfbWFya2Vyc19zdHIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlckJvdW5kcyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMoKTtcbiAgICAgICAgICAgIGZvciAobGV0IG1hcmtlciBvZiBuZXdfbWFya2Vycykge1xuICAgICAgICAgICAgICAgIGxldCBtYXJrZXJfbG9jID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhtYXJrZXIubGF0LCBtYXJrZXIubG5nKTtcbiAgICAgICAgICAgICAgICBtYXJrZXJCb3VuZHMuZXh0ZW5kKG1hcmtlcl9sb2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbWFwQ29tcG9uZW50LmZpdEJvdW5kcyhtYXJrZXJCb3VuZHMpO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIGhhbmRsZU1hcExvYWQobWFwKSB7XG4gICAgICAgIHRoaXMuX21hcENvbXBvbmVudCA9IG1hcDtcbiAgICB9XG5cbiAgICBoYW5kbGVNYXBDaGFuZ2UoKSB7XG4gICAgICAgIGxldCB2aXNpYmxlX21hcmtlcnMgPSB0aGlzLnByb3BzLm1hcmtlcnMuZmlsdGVyKG0gPT4ge1xuICAgICAgICAgICAgbGV0IG1hcmtlcl9sb2MgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKG0ubGF0LCBtLmxuZyk7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuX21hcENvbXBvbmVudC5nZXRCb3VuZHMoKS5jb250YWlucyhtYXJrZXJfbG9jKSkgO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnb25DaGFuZ2VDYWxsYmFjaycpKVxuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZUNhbGxiYWNrKHZpc2libGVfbWFya2Vycyk7XG4gICAgfTtcblxuICAgIGhhbmRsZU1hcmtlckNsaWNrKG1hcmtlcl9pZCkge1xuICAgICAgICBsZXQgbWFya2VycyA9IHRoaXMuc3RhdGUubWFya2VycztcbiAgICAgICAgbGV0IGlzX29wZW4gPSBtYXJrZXJzLmZpbmQobSA9PiBtLmlkID09IG1hcmtlcl9pZCkuaXNJbmZvV2luZG93T3BlbjtcbiAgICAgICAgbWFya2Vycy5maW5kKG0gPT4gbS5pZCA9PSBtYXJrZXJfaWQpLmlzSW5mb1dpbmRvd09wZW4gPSAhaXNfb3BlbjtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgbWFya2VyczogbWFya2VycyB9KTtcbiAgICB9O1xuXG4gICAgaGFuZGxlTWFya2VyRHJhZyhldikge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWFya2VyRHJhZ2dlZChldi5sYXRMbmcubGF0KCksIGV2LmxhdExuZy5sbmcoKSk7XG4gICAgfTtcblxuICAgIGhhbmRsZU1hcENsaWNrKGV2KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25NYXBDbGljayhldi5sYXRMbmcubGF0KCksIGV2LmxhdExuZy5sbmcoKSk7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHttYXJrZXJzfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCB7em9vbSwgY2VudGVyfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBkcmFnZ2FibGUgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdkcmFnZ2FibGUnKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEdvb2dsZU1hcFdyYXBwZXJcbiAgICAgICAgICAgICAgICBzaG93TWFya2Vycz17bWFya2Vycy5sZW5ndGggPiAwfVxuICAgICAgICAgICAgICAgIG1hcmtlcnM9e21hcmtlcnN9XG4gICAgICAgICAgICAgICAgem9vbT17IHpvb20gPyB6b29tIDogTUFQLmRlZmF1bHRab29tIH1cbiAgICAgICAgICAgICAgICBjZW50ZXI9eyBjZW50ZXIubGF0ID8gY2VudGVyIDogTUFQLmRlZmF1bHRDZW50ZXIgfVxuICAgICAgICAgICAgICAgIGxvYWRpbmdFbGVtZW50PXs8ZGl2IHN0eWxlPXt7IGhlaWdodDogYDEwMCVgIH19IC8+fVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZW1lbnQ9ezxkaXYgc3R5bGU9e3sgaGVpZ2h0OiBgNDAwcHhgIH19IC8+fVxuICAgICAgICAgICAgICAgIG1hcEVsZW1lbnQ9ezxkaXYgc3R5bGU9e3sgaGVpZ2h0OiBgMTAwJWAgfX0gLz59XG4gICAgICAgICAgICAgICAgb25NYXBMb2FkPXt0aGlzLmhhbmRsZU1hcExvYWR9XG4gICAgICAgICAgICAgICAgb25NYXBDaGFuZ2U9e3RoaXMuaGFuZGxlTWFwQ2hhbmdlfVxuICAgICAgICAgICAgICAgIG9uVG9nZ2xlSW5mb1dpbmRvdz17dGhpcy5oYW5kbGVNYXJrZXJDbGlja31cbiAgICAgICAgICAgICAgICBvbk1hcmtlckRyYWc9e3RoaXMuaGFuZGxlTWFya2VyRHJhZ31cbiAgICAgICAgICAgICAgICBkcmFnZ2FibGU9e2RyYWdnYWJsZX1cbiAgICAgICAgICAgICAgICBvbk1hcENsaWNrPXt0aGlzLmhhbmRsZU1hcENsaWNrfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdNYXA7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5QWNjZXNzTGV2ZWxzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWNjZXNzTGV2ZWxzSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0QWNjZXNzTGV2ZWxzID0gdGhpcy5nZXRBY2Nlc3NMZXZlbHMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25MYWJlbCA9IHRoaXMuZ2V0T3B0aW9uTGFiZWwuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25WYWx1ZShhY2Nlc3NMZXZlbCl7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25WYWx1ZVwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25WYWx1ZShhY2Nlc3NMZXZlbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiBhY2Nlc3NMZXZlbC5pZDtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25MYWJlbChhY2Nlc3NMZXZlbCl7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25MYWJlbFwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25MYWJlbChhY2Nlc3NMZXZlbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiBgJHthY2Nlc3NMZXZlbC5uYW1lfWA7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2FjY2Vzc2xldmVsaW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRBY2Nlc3NMZXZlbHMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQge3N1bW1pdElkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXJ5QWNjZXNzTGV2ZWxzKHN1bW1pdElkLGlucHV0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBlcnJvciwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0QWNjZXNzTGV2ZWxzfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17bSA9PiB0aGlzLmdldE9wdGlvblZhbHVlKG0pfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17bSA9PiB0aGlzLmdldE9wdGlvbkxhYmVsKG0pfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICcuL2FjdGlvbi1kcm9wZG93bi5sZXNzJztcbmltcG9ydCBTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWN0aW9uRHJvcGRvd24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiB2YWx1ZX0pO1xuICAgIH1cblxuICAgIGhhbmRsZUNsaWNrKGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucHJvcHMub25DbGljayh0aGlzLnN0YXRlLnZhbHVlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvcHRpb25zLCBhY3Rpb25MYWJlbCwgcGxhY2Vob2xkZXIsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHt2YWx1ZX0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIGxldCBzbWFsbERkbCA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ3NtYWxsJykgPyAnc21hbGwnIDogJyc7XG4gICAgICAgIGxldCBzbWFsbEJ0biA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ3NtYWxsJykgPyAnYnRuLWdyb3VwLXNtJyA6ICdub3JtYWwnO1xuXG4gICAgICAgIGxldCB0aGVWYWx1ZSA9ICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCB8fCB2YWx1ZSA9PSBudWxsKSA/IHZhbHVlIDogb3B0aW9ucy5maW5kKG9wdCA9PiBvcHQudmFsdWUgPT0gdmFsdWUpO1xuXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcImFjdGlvbi1kcm9wZG93biBidG4tZ3JvdXAgXCIgKyBzbWFsbEJ0bn0+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhlVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1wiYnRuLWdyb3VwIGFjdGlvbi1zZWxlY3QgdGV4dC1sZWZ0XCIgKyBzbWFsbERkbH1cbiAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmFibGU9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IGFjdGlvbi1idXR0b25cIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfT5cbiAgICAgICAgICAgICAgICAgICAge2FjdGlvbkxhYmVsfVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnO1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGVja2JveExpc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIGxldCBvdGhlclZhbHVlID0gcHJvcHMudmFsdWUgPyBwcm9wcy52YWx1ZS5maW5kKCB2ID0+ICFwcm9wcy5vcHRpb25zLm1hcChvcCA9PiBvcC52YWx1ZSkuaW5jbHVkZXModikgKSA6IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBvdGhlckNoZWNrZWQ6ICEhb3RoZXJWYWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVPdGhlckNCQ2hhbmdlID0gdGhpcy5oYW5kbGVPdGhlckNCQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGxldCBvcHRpb25WYWx1ZXMgPSB0aGlzLnByb3BzLm9wdGlvbnMubWFwKG9wID0+IG9wLnZhbHVlKTtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5wcm9wcy52YWx1ZSA/IFsuLi50aGlzLnByb3BzLnZhbHVlXSA6IFtdO1xuXG4gICAgICAgIGlmIChldmVudC50YXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGhlVmFsID0gaXNOYU4oZXZlbnQudGFyZ2V0LnZhbHVlKSA/IGV2ZW50LnRhcmdldC52YWx1ZSA6IHBhcnNlSW50KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdmFsdWUucHVzaCh0aGVWYWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlciggdiA9PiB2ICE9IGV2ZW50LnRhcmdldC52YWx1ZSApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlcih2ID0+IG9wdGlvblZhbHVlcy5pbmNsdWRlcyh2KSk7XG4gICAgICAgICAgICB2YWx1ZS5wdXNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveGxpc3QnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBoYW5kbGVPdGhlckNCQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe290aGVyQ2hlY2tlZDogZXZlbnQudGFyZ2V0LmNoZWNrZWR9KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGNsYXNzTmFtZSwgb3B0aW9ucywgaWQsIGNoaWxkcmVuLCBlcnJvciwgZGlzYWJsZWQsbmFtZSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgeyBvdGhlckNoZWNrZWQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgbGV0IGlubGluZSA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaW5saW5lJykgKTtcbiAgICAgICAgbGV0IGh0bWwgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2h0bWwnKSApO1xuICAgICAgICBsZXQgYWxsb3dPdGhlciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnYWxsb3dPdGhlcicpICk7XG4gICAgICAgIGxldCBvdGhlclZhbHVlID0gdmFsdWUgPyB2YWx1ZS5maW5kKCB2ID0+ICFvcHRpb25zLm1hcChvcCA9PiBvcC52YWx1ZSkuaW5jbHVkZXModikgKSA6IGZhbHNlIDtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPT0gJycgKTtcbiAgICAgICAgbGV0IGlzRGlzYWJsZWQgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSAmJiBkaXNhYmxlZCA9PSB0cnVlKTtcblxuXG4gICAgICAgIGxldCBzdHlsZSwgbGFiZWw7XG5cbiAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcyMnB4JyxcbiAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnMjBweCcsXG4gICAgICAgICAgICAgICAgZmxvYXQ6ICdsZWZ0J1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAnMjJweCcsXG4gICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnN3B4J1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgaWQ9e2BjaGxfd3JhcHBlcl8ke2lkfWB9PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcImNoZWNrYm94ZXMtZGl2XCIgKyAoaGFzX2Vycm9yID8gJyBlcnJvcicgOiAnJykgfT5cbiAgICAgICAgICAgICAgICAgICAgeyBvcHRpb25zLm1hcChvcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hlY2tlZCA9IHZhbHVlID8gdmFsdWUuaW5jbHVkZXMob3AudmFsdWUpIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1jaGVjayBhYmMtY2hlY2tib3hcIiBrZXk9e1wicmFkaW9fa2V5X1wiICsgb3AudmFsdWV9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2BjYl8ke2lkfV8ke29wLnZhbHVlfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lPyBuYW1lIDogaWQgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfSBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWlucHV0XCIgdmFsdWU9e29wLnZhbHVlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2BjYl8ke2lkfV8ke29wLnZhbHVlfWAgIH0gPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2h0bWwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTD57b3AubGFiZWx9PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyFodG1sICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICAgICAgICAge2FsbG93T3RoZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNoZWNrIGFiYy1jaGVja2JveFwiIHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9e1wiY2Jfb3RoZXJcIiArIGlkfSBjaGVja2VkPXtvdGhlckNoZWNrZWR9IGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU90aGVyQ0JDaGFuZ2V9IGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIiB2YWx1ZT1cIm90aGVyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17XCJjYl9vdGhlclwiICsgaWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtULnRyYW5zbGF0ZShcImdlbmVyYWwub3RoZXJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHthbGxvd090aGVyICYmIG90aGVyQ2hlY2tlZCAmJlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7cGFkZGluZ0xlZnQ6ICcyMnB4Jywgd2lkdGg6ICc1MCUnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCIgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX0gdmFsdWU9e290aGVyVmFsdWV9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5cbkNoZWNrYm94TGlzdC5wcm9wVHlwZXMgPSB7XG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5Q29tcGFuaWVzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcbmltcG9ydCBBc3luY0NyZWF0YWJsZVNlbGVjdCBmcm9tIFwicmVhY3Qtc2VsZWN0L2xpYi9Bc3luY0NyZWF0YWJsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21wYW55SW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVOZXcgPSB0aGlzLmhhbmRsZU5ldy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldENvbXBhbmllcyA9IHRoaXMuZ2V0Q29tcGFuaWVzLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSB8fCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdpc011bHRpJykpO1xuICAgICAgICBjb25zdCB0aGVWYWx1ZSA9IGlzTXVsdGkgPyB2YWx1ZS5tYXAodiA9PiAoe2lkOiB2LnZhbHVlLCBuYW1lOiB2LmxhYmVsfSkpIDoge2lkOiB2YWx1ZS52YWx1ZSwgbmFtZTogdmFsdWUubGFiZWx9O1xuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhlVmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NvbXBhbnlpbnB1dCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGhhbmRsZU5ldyh2YWx1ZSkge1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hcCBpbnRvIHZhbHVlL2xhYmVsIGJlY2F1c2Ugb2YgYSBidWcgaW4gcmVhY3Qtc2VsZWN0IDJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVWYWx1ZSA9IChuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2Uoe3ZhbHVlOiBuZXdWYWx1ZS5pZCwgbGFiZWw6IG5ld1ZhbHVlLm5hbWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvcHMub25DcmVhdGUodmFsdWUsIHRyYW5zbGF0ZVZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRDb21wYW5pZXMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hcCBpbnRvIHZhbHVlL2xhYmVsIGJlY2F1c2Ugb2YgYSBidWcgaW4gcmVhY3Qtc2VsZWN0IDJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVPcHRpb25zID0gKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCBuZXdPcHRpb25zID0gb3B0aW9ucy5tYXAoYyA9PiAoe3ZhbHVlOiBjLmlkLnRvU3RyaW5nKCksIGxhYmVsOiBjLm5hbWV9KSk7XG4gICAgICAgICAgICBjYWxsYmFjayhuZXdPcHRpb25zKTtcbiAgICAgICAgfTtcblxuICAgICAgICBxdWVyeUNvbXBhbmllcyhpbnB1dCwgdHJhbnNsYXRlT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2Vycm9yLCB2YWx1ZSwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykgfHwgdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaXNNdWx0aScpKTtcbiAgICAgICAgbGV0IGFsbG93Q3JlYXRlID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnYWxsb3dDcmVhdGUnKTtcblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hcCBpbnRvIHZhbHVlL2xhYmVsIGJlY2F1c2Ugb2YgYSBidWcgaW4gcmVhY3Qtc2VsZWN0IDJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcblxuICAgICAgICBsZXQgdGhlVmFsdWUgPSBudWxsO1xuXG4gICAgICAgIGlmIChpc011bHRpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gdmFsdWUubWFwKHYgPT4gKHt2YWx1ZTogdi5pZC50b1N0cmluZygpLCBsYWJlbDogdi5uYW1lfSApKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNNdWx0aSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSB7dmFsdWU6IHZhbHVlLmlkLnRvU3RyaW5nKCksIGxhYmVsOiB2YWx1ZS5uYW1lfTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgY29uc3QgQXN5bmNDb21wb25lbnQgPSBhbGxvd0NyZWF0ZVxuICAgICAgICAgICAgPyBBc3luY0NyZWF0YWJsZVNlbGVjdFxuICAgICAgICAgICAgOiBBc3luY1NlbGVjdDtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoZVZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldENvbXBhbmllc31cbiAgICAgICAgICAgICAgICAgICAgb25DcmVhdGVPcHRpb249e3RoaXMuaGFuZGxlTmV3fVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IERyb3Bkb3duIGZyb20gJy4vZHJvcGRvd24nO1xuaW1wb3J0IHtnZXRDb3VudHJ5TGlzdH0gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvdW50cnlEcm9wZG93biBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIG9wdGlvbnM6IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNldE9wdGlvbnMgPSB0aGlzLnNldE9wdGlvbnMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQgKCkge1xuICAgICAgICBsZXQge29wdGlvbnN9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBpZihvcHRpb25zLmxlbmd0aCA9PSAwKXtcbiAgICAgICAgICAgIGdldENvdW50cnlMaXN0KHRoaXMuc2V0T3B0aW9ucywgdGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY291bnRyeWRkbCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHNldE9wdGlvbnMocmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGNvdW50cnlMaXN0ID0gcmVzcG9uc2UubWFwKGMgPT4gKHtsYWJlbDogYy5uYW1lLCB2YWx1ZTogYy5pc29fY29kZX0pKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3B0aW9uczogY291bnRyeUxpc3R9KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvcHRpb25zfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxEcm9wZG93biBvcHRpb25zPXtvcHRpb25zfSB7Li4udGhpcy5wcm9wc30gLz5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0JztcbmltcG9ydCB7Z2V0Q291bnRyeUxpc3R9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3VudHJ5SW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBvcHRpb25zOiBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zID0gdGhpcy5zZXRPcHRpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgICAgZ2V0Q291bnRyeUxpc3QodGhpcy5zZXRPcHRpb25zKTtcbiAgICB9XG5cbiAgICBzZXRPcHRpb25zKHJlc3BvbnNlKSB7XG4gICAgICAgIGxldCBjb3VudHJ5TGlzdCA9IHJlc3BvbnNlLm1hcChjID0+ICh7bGFiZWw6IGMubmFtZSwgdmFsdWU6IGMuaXNvX2NvZGV9KSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wdGlvbnM6IGNvdW50cnlMaXN0fSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuICAgICAgICBsZXQgdGhlVmFsdWUgPSBudWxsO1xuXG4gICAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHZhbHVlLm1hcCh2ID0+IHYudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhlVmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NvdW50cnlpbnB1dCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgZXJyb3IsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHtvcHRpb25zfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuICAgICAgICBsZXQgdGhlVmFsdWUgPSBudWxsO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG5cbiAgICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gb3B0aW9ucy5maWx0ZXIob3AgPT4gdmFsdWUuaW5jbHVkZXMob3AudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0IHx8IHZhbHVlID09IG51bGwpID8gdmFsdWUgOiBvcHRpb25zLmZpbmQob3B0ID0+IG9wdC52YWx1ZSA9PSB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17XCJkcm9wZG93blwiICsgKGhhc19lcnJvciA/ICcgZXJyb3InIDogJycpfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJy4vZGF0ZXRpbWVwaWNrZXIubGVzcyc7XG5pbXBvcnQgRGF0ZXRpbWUgZnJvbSAncmVhY3QtZGF0ZXRpbWUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRlVGltZVBpY2tlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5pc1ZhbGlkRGF0ZSA9IHRoaXMuaXNWYWxpZERhdGUuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnZhbHVlICE9PSBwcmV2UHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiB0aGlzLnByb3BzLnZhbHVlfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShkYXRlKSB7XG5cbiAgICAgICAgbGV0IHsgdGltZXpvbmUgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKGRhdGUgJiYgbW9tZW50LmlzTW9tZW50KGRhdGUpKSB7XG4gICAgICAgICAgICBkYXRlID0gbW9tZW50LnR6KGRhdGUuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJyksIHRpbWV6b25lKVxuICAgICAgICB9IGVsc2UgaWYgKGRhdGUgPT09ICcnKSB7XG4gICAgICAgICAgICBkYXRlID0gbW9tZW50KDApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkYXRldGltZSdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIGlmIChkYXRlICYmIG1vbWVudC5pc01vbWVudChkYXRlKSkge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGlzVmFsaWREYXRlKGN1cnJlbnREYXRlLCBzZWxlY3RlZERhdGUpIHtcbiAgICAgICAgbGV0IHsgdGltZXpvbmUsIHZhbGlkYXRpb24gfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7YWZ0ZXIsIGJlZm9yZX0gPSB2YWxpZGF0aW9uO1xuXG4gICAgICAgIGlmIChhZnRlciA9PSAnPCcpXG4gICAgICAgICAgICByZXR1cm4gKGN1cnJlbnREYXRlLmlzQmVmb3JlKG1vbWVudC50eihiZWZvcmUgKiAxMDAwLCB0aW1lem9uZSkpKTtcbiAgICAgICAgZWxzZSBpZihhZnRlciA9PSAnPicpXG4gICAgICAgICAgICByZXR1cm4gKGN1cnJlbnREYXRlLmlzQWZ0ZXIobW9tZW50LnR6KGJlZm9yZSAqIDEwMDAsIHRpbWV6b25lKSkpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBhZnRlckRhdGUgPSBtb21lbnQudHooYWZ0ZXIgKiAxMDAwLCB0aW1lem9uZSkuc3VidHJhY3QoMSwgJ2RheScpO1xuICAgICAgICAgICAgbGV0IGJlZm9yZURhdGUgPSBtb21lbnQudHooYmVmb3JlICogMTAwMCwgdGltZXpvbmUpO1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmlzQWZ0ZXIoYWZ0ZXJEYXRlKSAmJiBjdXJyZW50RGF0ZS5pc0JlZm9yZShiZWZvcmVEYXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHZhbGlkYXRlID0gKHR5cGVvZiB0aGlzLnByb3BzLnZhbGlkYXRpb24gIT0gJ3VuZGVmaW5lZCcpO1xuICAgICAgICBsZXQge29uQ2hhbmdlLCBpZCwgdmFsdWUsIGZvcm1hdCwgZXJyb3IsIGlucHV0UHJvcHMsIGRpc2FibGVkLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9ICdmb3JtLWNvbnRyb2wgJyArIChoYXNfZXJyb3IgPyAnZXJyb3InIDogJycpO1xuICAgICAgICBsZXQgaW5wdXREaXNhYmxlZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpKSA/IGRpc2FibGVkIDogZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAge3ZhbGlkYXRlID8gKFxuICAgICAgICAgICAgICAgICAgICA8RGF0ZXRpbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWREYXRlPXt0aGlzLmlzVmFsaWREYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdD17Zm9ybWF0LmRhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0PXtmb3JtYXQudGltZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRQcm9wcz17ey4uLmlucHV0UHJvcHMsIGlkOiBpZCwgY2xhc3NOYW1lOiBjbGFzc05hbWUsIGRpc2FibGVkOiBpbnB1dERpc2FibGVkLCBhdXRvQ29tcGxldGU6ICdvZmYnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxEYXRldGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdD17Zm9ybWF0LmRhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0PXtmb3JtYXQudGltZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRQcm9wcz17ey4uLmlucHV0UHJvcHMsIGlkOiBpZCwgY2xhc3NOYW1lOiBjbGFzc05hbWUsIGRpc2FibGVkOiBpbnB1dERpc2FibGVkLCBhdXRvQ29tcGxldGU6ICdvZmYnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJvcGRvd24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2Uoc2VsZWN0aW9uKSB7XG5cbiAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuaXNNdWx0aSkge1xuICAgICAgICAgICAgdmFsdWUgPSBzZWxlY3Rpb24gPyBzZWxlY3Rpb24ubWFwKHZhbCA9PiB2YWwudmFsdWUpIDogbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gc2VsZWN0aW9uID8gc2VsZWN0aW9uLnZhbHVlIDogbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Ryb3Bkb3duJ1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBjbGFzc05hbWUsIGVycm9yLCBjbGVhcmFibGUsIGRpc2FibGVkLCBvdmVycmlkZUNTUywgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBpc0NsZWFyYWJsZSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdjbGVhcmFibGUnKSk7XG4gICAgICAgIGxldCBpc0Rpc2FibGVkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykgJiYgZGlzYWJsZWQgPT0gdHJ1ZSk7XG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IG51bGw7XG5cbiAgICAgICAgbGV0IHNlbGVjdENsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ292ZXJyaWRlQ1NTJykgfHwgb3ZlcnJpZGVDU1MgPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzTmFtZSA9ICdkcm9wZG93biAnICsgY2xhc3NOYW1lICsgJyAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wcm9wcy5pc011bHRpKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHRoaXMucHJvcHMub3B0aW9ucy5maWx0ZXIob3AgPT4gdmFsdWUuaW5jbHVkZXMob3AudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0IHx8IHZhbHVlID09IG51bGwpID8gdmFsdWUgOiB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChvcHQgPT4gb3B0LnZhbHVlID09IHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdFN0eWxlcyA9IHsgbWVudTogc3R5bGVzID0+ICh7IC4uLnN0eWxlcywgekluZGV4OiA5OTkgfSkgfTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c2VsZWN0Q2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhlVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmFibGU9e2lzQ2xlYXJhYmxlfVxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZXM9e3NlbGVjdFN0eWxlc31cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dEVkaXRvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuUmljaFRleHRFZGl0b3IgPSBudWxsO1xuXG4gICAgICAgIC8vIHRoaXMgaXMgZG9uZSBiYyBkdWUgU1NSIGlzc3Vlc1xuICAgICAgICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zc3R1ci9yZWFjdC1ydGUvaXNzdWVzLzM3M1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuUmljaFRleHRFZGl0b3IgPSByZXF1aXJlKCdyZWFjdC1ydGUnKS5kZWZhdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGVkaXRvclZhbHVlOiB0aGlzLlJpY2hUZXh0RWRpdG9yPy5jcmVhdGVFbXB0eVZhbHVlKCksXG4gICAgICAgICAgICBjdXJyZW50VmFsdWU6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcbiAgICAgICAgY29uc3Qge3ZhbHVlfSA9IHByb3BzO1xuICAgICAgICBjb25zdCB7ZWRpdG9yVmFsdWUsIGN1cnJlbnRWYWx1ZX0gPSBzdGF0ZTtcblxuICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgZWRpdG9yVmFsdWU6IGVkaXRvclZhbHVlLnNldENvbnRlbnRGcm9tU3RyaW5nKHZhbHVlLCAnaHRtbCcpLCBjdXJyZW50VmFsdWU6IHZhbHVlfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShlZGl0b3JWYWx1ZSkge1xuXG4gICAgICAgIGxldCBvbGRFZGl0b3JWYWx1ZSA9IHRoaXMuc3RhdGUuZWRpdG9yVmFsdWU7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2VkaXRvclZhbHVlfSk7XG5cbiAgICAgICAgbGV0IG9sZENvbnRlbnRTdGF0ZSA9IG9sZEVkaXRvclZhbHVlID8gb2xkRWRpdG9yVmFsdWUuZ2V0RWRpdG9yU3RhdGUoKS5nZXRDdXJyZW50Q29udGVudCgpIDogbnVsbDtcbiAgICAgICAgbGV0IG5ld0NvbnRlbnRTdGF0ZSA9IGVkaXRvclZhbHVlLmdldEVkaXRvclN0YXRlKCkuZ2V0Q3VycmVudENvbnRlbnQoKTtcblxuICAgICAgICBpZiAob2xkQ29udGVudFN0YXRlICE9PSBuZXdDb250ZW50U3RhdGUpIHtcbiAgICAgICAgICAgIGxldCBzdHJpbmdWYWx1ZSA9IGVkaXRvclZhbHVlLnRvU3RyaW5nKCdodG1sJyk7XG4gICAgICAgICAgICBzdHJpbmdWYWx1ZSA9IHN0cmluZ1ZhbHVlID09PSAnPHA+PGJyPjwvcD4nID8gJycgOiBzdHJpbmdWYWx1ZTtcblxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y3VycmVudFZhbHVlOiBzdHJpbmdWYWx1ZX0pO1xuXG4gICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWUgIT09IHRoaXMucHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzdHJpbmdWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0ZWRpdG9yJ1xuICAgICAgICAgICAgICAgICAgICB9fTtcblxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBlcnJvciwgY2xhc3NOYW1lLCBpZCwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9PSAnJyApO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIHt0aGlzLlJpY2hUZXh0RWRpdG9yICYmXG4gICAgICAgICAgICAgICAgICAgIDx0aGlzLlJpY2hUZXh0RWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZSArICcgJyArIChoYXNfZXJyb3IgPyAnZXJyb3InIDogJycpfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZWRpdG9yVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeUV2ZW50c30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50SW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRFdmVudHMgPSB0aGlzLmdldEV2ZW50cy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgdHlwZTogJ2V2ZW50aW5wdXQnXG4gICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldEV2ZW50cyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCB7c3VtbWl0LCBvbmx5UHVibGlzaGVkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcXVlcnlFdmVudHMoc3VtbWl0LmlkLCBpbnB1dCwgb25seVB1Ymxpc2hlZCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRFdmVudHN9XG4gICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wdGlvbiA9PiBvcHRpb24uaWR9XG4gICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wdGlvbiA9PiBvcHRpb24udGl0bGV9XG4gICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ3JlYXRhYmxlU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQ3JlYXRhYmxlJztcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0JztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGcmVlTXVsdGlUZXh0SW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBpbnB1dFZhbHVlOiAnJ1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZSA9IHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVLZXlEb3duID0gdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBsaW1pdCA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2xpbWl0JykgPyB0aGlzLnByb3BzLmxpbWl0IDogZmFsc2U7XG5cbiAgICAgICAgaWYgKCFsaW1pdCB8fCBsaW1pdCA+PSB2YWx1ZS5sZW5ndGggKSB7XG4gICAgICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdmcmVldGV4dGxpc3QnXG4gICAgICAgICAgICAgICAgfX07XG5cbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlSW5wdXRDaGFuZ2UoaW5wdXRWYWx1ZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgaW5wdXRWYWx1ZSB9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgaW5wdXRWYWx1ZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFpbnB1dFZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWU6ICcnLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UoWy4uLnZhbHVlLCB7bGFiZWw6IGlucHV0VmFsdWUsIHZhbHVlOiBpbnB1dFZhbHVlfV0pXG5cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgaW5wdXRWYWx1ZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IHtpZCwgdmFsdWUsIG9uQ2hhbmdlLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxDcmVhdGFibGVTZWxlY3RcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzPXt7RHJvcGRvd25JbmRpY2F0b3I6IG51bGx9fVxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgY2xlYXJhYmxlXG4gICAgICAgICAgICAgICAgaXNNdWx0aVxuICAgICAgICAgICAgICAgIG1lbnVDb250YWluZXJTdHlsZT17e2Rpc3BsYXk6ICdub25lJ319XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIG9uSW5wdXRDaGFuZ2U9e3RoaXMuaGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgb25JbnB1dEtleURvd249e3RoaXMuaGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17VC50cmFuc2xhdGUoXCJnZW5lcmFsLnR5cGVfc29tZXRoaW5nXCIpfVxuICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeUdyb3Vwc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdyb3VwSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRHcm91cHMgPSB0aGlzLmdldEdyb3Vwcy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgdHlwZTogJ2dyb3VwaW5wdXQnXG4gICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldEdyb3VwcyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHF1ZXJ5R3JvdXBzKGlucHV0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBvbkNoYW5nZSwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldEdyb3Vwc31cbiAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17b3B0aW9uID0+IG9wdGlvbi5pZH1cbiAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17b3B0aW9uID0+IG9wdGlvbi50aXRsZX1cbiAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgY29uc3QgT3B0aW9uR3JvdXAgPSAgKHtcbiAgICB2YWx1ZSxcbiAgICBsYWJlbCxcbiAgICBvcHRpb25zXG59KSA9PiB7XG4gICAgcmV0dXJuIChbXG4gICAgICAgIDxvcHRpb24ga2V5PXtcImdyb3VwXCIgKyB2YWx1ZX0gY2xhc3NOYW1lPVwib3B0aW9uLWdyb3VwXCIgdmFsdWU9e3ZhbHVlfT57bGFiZWx9PC9vcHRpb24+LFxuICAgICAgICBvcHRpb25zLm1hcCgob3B0LGkpID0+IChcbiAgICAgICAgICAgIDxvcHRpb24gY2xhc3NOYW1lPVwib3B0aW9uLWNoaWxkXCIga2V5PXtvcHQudmFsdWV9IHZhbHVlPXtvcHQudmFsdWV9PiAtIHtvcHQubGFiZWx9PC9vcHRpb24+XG4gICAgICAgICkpXG4gICAgXSk7XG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE9wdGlvbkdyb3VwIH0gZnJvbSAnLi9PcHRpb25Hcm91cCc7XG5pbXBvcnQgJy4vb3B0aW9uZ3JvdXAubGVzcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdyb3VwZWREcm9wZG93biBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnZhbHVlICE9PSBwcmV2UHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiB0aGlzLnByb3BzLnZhbHVlfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldikge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7aWQsIG9wdGlvbnMsIHBsYWNlaG9sZGVyLCBjbGFzc05hbWUsIGVycm9yfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IHt2YWx1ZX0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZSArICcgZm9ybS1jb250cm9sICcgKyAoaGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIGRpc2FibGVkPntwbGFjZWhvbGRlcn08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtvcHRpb25zLm1hcCgob3B0LGkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdC5vcHRpb25zICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25Hcm91cCBrZXk9eydncm91cF9vcHRfJytpfSBsYWJlbD17b3B0LmxhYmVsfSB2YWx1ZT17b3B0LnZhbHVlfSBvcHRpb25zPXtvcHQub3B0aW9uc30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e29wdC52YWx1ZX0gdmFsdWU9e29wdC52YWx1ZX0+e29wdC5sYWJlbH08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufSIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0JztcbmltcG9ydCB7Z2V0TGFuZ3VhZ2VMaXN0fSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGFuZ3VhZ2VJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgICAgc2hvdWxkVXNlSWQ6IHByb3BzLmhhc093blByb3BlcnR5KCdzaG91bGRVc2VJZCcpID8gcHJvcHMuc2hvdWxkVXNlSWQgOiBmYWxzZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyA9IHRoaXMuc2V0T3B0aW9ucy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgICAgICBnZXRMYW5ndWFnZUxpc3QodGhpcy5zZXRPcHRpb25zLCB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfVxuXG4gICAgc2V0T3B0aW9ucyhyZXNwb25zZSkge1xuICAgICAgICBsZXQgbGFuZ3VhZ2VMaXN0ID0gKHRoaXMuc3RhdGUuc2hvdWxkVXNlSWQpID9cbiAgICAgICAgICAgIHJlc3BvbnNlLm1hcChsID0+ICh7bGFiZWw6IGwubmFtZSwgdmFsdWU6IGwuaWR9KSk6XG4gICAgICAgICAgICByZXNwb25zZS5tYXAobCA9PiAoe2xhYmVsOiBsLm5hbWUsIHZhbHVlOiBsLmlzb19jb2RlfSkpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcHRpb25zOiBsYW5ndWFnZUxpc3R9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gdmFsdWUubWFwKHYgPT4gdi52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGVWYWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGFndWFnZWlucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBvbkNoYW5nZSwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7b3B0aW9uc30gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IHRoZVZhbHVlID0gbnVsbDtcblxuICAgICAgICBpZiAoaXNNdWx0aSkge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSBvcHRpb25zLmZpbHRlcihvcCA9PiB2YWx1ZS5pbmNsdWRlcyhvcC52YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgfHwgdmFsdWUgPT0gbnVsbCkgPyB2YWx1ZSA6IG9wdGlvbnMuZmluZChvcHQgPT4gb3B0LnZhbHVlID09IHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVWYWx1ZX1cbiAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlNZW1iZXJzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVtYmVySW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0TWVtYmVycyA9IHRoaXMuZ2V0TWVtYmVycy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvbkxhYmVsID0gdGhpcy5nZXRPcHRpb25MYWJlbC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGdldE9wdGlvblZhbHVlKG1lbWJlcil7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25WYWx1ZVwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25WYWx1ZShtZW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gbWVtYmVyLmlkO1xuICAgIH1cblxuICAgIGdldE9wdGlvbkxhYmVsKG1lbWJlcil7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25MYWJlbFwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25MYWJlbChtZW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gYCR7bWVtYmVyLmZpcnN0X25hbWV9ICR7bWVtYmVyLmxhc3RfbmFtZX0gKCR7bWVtYmVyLmlkfSlgO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHR5cGU6ICdtZW1iZXJpbnB1dCdcbiAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0TWVtYmVycyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBxdWVyeU1lbWJlcnMoaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIGVycm9yLCBvbkNoYW5nZSwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRNZW1iZXJzfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17bSA9PiB0aGlzLmdldE9wdGlvblZhbHVlKG0pfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17bSA9PiB0aGlzLmdldE9wdGlvbkxhYmVsKG0pfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IEFzeW5jQ3JlYXRhYmxlU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmNDcmVhdGFibGUnO1xuaW1wb3J0IHtxdWVyeU9yZ2FuaXphdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcmdhbml6YXRpb25JbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU5ldyA9IHRoaXMuaGFuZGxlTmV3LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3JnYW5pemF0aW9ucyA9IHRoaXMuZ2V0T3JnYW5pemF0aW9ucy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hcCBpbnRvIHZhbHVlL2xhYmVsIGJlY2F1c2Ugb2YgYSBidWcgaW4gcmVhY3Qtc2VsZWN0IDJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHtpZDogdmFsdWUudmFsdWUsIG5hbWU6IHZhbHVlLmxhYmVsfSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnb3JnYW5pemF0aW9uaW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBoYW5kbGVOZXcodmFsdWUpIHtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KZWRXYXRzb24vcmVhY3Qtc2VsZWN0L2lzc3Vlcy8yOTk4XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlVmFsdWUgPSAobmV3VmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHt2YWx1ZTogbmV3VmFsdWUuaWQsIGxhYmVsOiBuZXdWYWx1ZS5uYW1lfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb3BzLm9uQ3JlYXRlKHZhbHVlLCB0cmFuc2xhdGVWYWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0T3JnYW5pemF0aW9ucyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZU9wdGlvbnMgPSAob3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld09wdGlvbnMgPSBvcHRpb25zLm1hcChvcmcgPT4gKHt2YWx1ZTogb3JnLmlkLnRvU3RyaW5nKCksIGxhYmVsOiBvcmcubmFtZX0pKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ld09wdGlvbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHF1ZXJ5T3JnYW5pemF0aW9ucyhpbnB1dCwgdHJhbnNsYXRlT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2Vycm9yLCB2YWx1ZSwgaWQsIG9uQ2hhbmdlLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGFsbG93Q3JlYXRlID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnYWxsb3dDcmVhdGUnKTtcblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hcCBpbnRvIHZhbHVlL2xhYmVsIGJlY2F1c2Ugb2YgYSBidWcgaW4gcmVhY3Qtc2VsZWN0IDJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcbiAgICAgICAgbGV0IHRoZVZhbHVlID0gdmFsdWUgPyB7dmFsdWU6IHZhbHVlLmlkLnRvU3RyaW5nKCksIGxhYmVsOiB2YWx1ZS5uYW1lfSA6IG51bGw7XG5cbiAgICAgICAgY29uc3QgQXN5bmNDb21wb25lbnQgPSBhbGxvd0NyZWF0ZVxuICAgICAgICAgICAgPyBBc3luY0NyZWF0YWJsZVNlbGVjdFxuICAgICAgICAgICAgOiBBc3luY1NlbGVjdDtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoZVZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldE9yZ2FuaXphdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uPXt0aGlzLmhhbmRsZU5ld31cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSYWRpb0xpc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShzZWxlY3Rpb24pIHtcblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgIHZhbHVlOiBzZWxlY3Rpb24udGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgdHlwZTogJ3JhZGlvJ1xuICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRMYWJlbChvcHRpb24sIGlkLCBpbmxpbmUsIHNpbXBsZSwgaHRtbCkge1xuICAgICAgICBpZiAoaW5saW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17YHJhZGlvXyR7aWR9XyR7b3B0aW9uLnZhbHVlfWB9IHN0eWxlPXt7ZGlzcGxheTogJ2lubGluZS1ibG9jayd9fT5cbiAgICAgICAgICAgICAgICAgICAge2h0bWwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeyFodG1sICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24ubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHNpbXBsZSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2ByYWRpb18ke2lkfV8ke29wdGlvbi52YWx1ZX1gfSA+XG4gICAgICAgICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17YHJhZGlvXyR7aWR9XyR7b3B0aW9uLnZhbHVlfWB9IHN0eWxlPXt7ZGlzcGxheTogJ2lubGluZS1ibG9jayd9fT5cbiAgICAgICAgICAgICAgICAgICAgPGg0IHN0eWxlPXt7bWFyZ2luVG9wOiAnMHB4J319PntvcHRpb24ubGFiZWx9PC9oND5cbiAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUw+e29wdGlvbi5kZXNjcmlwdGlvbn08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGNsYXNzTmFtZSwgZXJyb3IsIGRpc2FibGVkLCBvcHRpb25zLGlkLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGlubGluZSA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaW5saW5lJykgKTtcbiAgICAgICAgbGV0IHNpbXBsZSA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnc2ltcGxlJykgKTtcbiAgICAgICAgbGV0IGh0bWwgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2h0bWwnKSApO1xuICAgICAgICBsZXQgaXNEaXNhYmxlZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpICYmIGRpc2FibGVkID09IHRydWUpO1xuXG4gICAgICAgIGxldCBzdHlsZSwgbGFiZWw7XG5cbiAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcyMnB4JyxcbiAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnMjBweCcsXG4gICAgICAgICAgICAgICAgZmxvYXQ6ICdsZWZ0J1xuICAgICAgICAgICAgfTtcblxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzIycHgnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBpZD17YHJsX3dyYXBwZXJfJHtpZH1gfT5cbiAgICAgICAgICAgICAgICB7IG9wdGlvbnMubWFwKG9wID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrZWQgPSAob3AudmFsdWUgPT0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNoZWNrIGFiYy1yYWRpb1wiIGtleT17YHJhZGlvX2tleV8ke2lkfV8ke29wLnZhbHVlfWB9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YHJhZGlvXyR7aWR9XyR7b3AudmFsdWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e29wLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtgcmFkaW9fJHtpZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMuZ2V0TGFiZWwob3AsIGlkLCBpbmxpbmUsIHNpbXBsZSwgaHRtbCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pfVxuXG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuUmFkaW9MaXN0LnByb3BUeXBlcyA9IHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQgeyBxdWVyeVJlZ2lzdHJhdGlvbkNvbXBhbmllcyB9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5jb25zdCBSZWdpc3RyYXRpb25Db21wYW55SW5wdXQgPSAoeyBlcnJvciwgdmFsdWUsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIGlzTXVsdGksIGNsYXNzTmFtZSwgc3VtbWl0SWQsIG9uRXJyb3IsIC4uLnJlc3QgfSkgPT4ge1xuXG4gICAgY29uc3QgW3RoZVZhbHVlLCBzZXRUaGVWYWx1ZV0gPSB1c2VTdGF0ZSh7IHZhbHVlOiBudWxsLCBsYWJlbDogJycgfSk7XG4gICAgY29uc3QgW2ZyZWVJbnB1dCwgc2V0RnJlZUlucHV0XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XG4gICAgY29uc3QgW2lzTXVsdGlPcHRpb25hbCwgc2V0SXNNdWx0aU9wdGlvbmFsXSA9IHVzZVN0YXRlKG11bHRpIHx8IGlzTXVsdGkpO1xuICAgIGNvbnN0IFtoYXNFcnJvciwgc2V0SGFzRXJyb3JdID0gdXNlU3RhdGUoZXJyb3IpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB9LCBbXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIXZhbHVlLmlkICYmIHZhbHVlLm5hbWUpIHsgICAgICAgICAgICBcbiAgICAgICAgICAgIHNldEZyZWVJbnB1dCh0cnVlKTtcbiAgICAgICAgICAgIHNldElucHV0VmFsdWUodmFsdWUubmFtZSk7XG4gICAgICAgICAgICBzZXRUaGVWYWx1ZSh7IHZhbHVlOiBudWxsLCBsYWJlbDogdmFsdWUubmFtZSB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzTXVsdGkgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNldFRoZVZhbHVlKHZhbHVlLm1hcCh2ID0+ICh7IHZhbHVlOiB2LmlkLCBsYWJlbDogdi5uYW1lIH0pKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc011bHRpICYmIHZhbHVlLmlkKSB7XG4gICAgICAgICAgICAgICAgc2V0VGhlVmFsdWUoeyB2YWx1ZTogdmFsdWUuaWQsIGxhYmVsOiB2YWx1ZS5uYW1lIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW3ZhbHVlXSlcblxuICAgIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChldmVudFZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChldmVudFZhbHVlLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICBzZXRGcmVlSW5wdXQodHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZVN0YXRlID0gaXNNdWx0aU9wdGlvbmFsID8gZXZlbnRWYWx1ZS5tYXAodiA9PiAoeyB2YWx1ZTogdi52YWx1ZSwgbGFiZWw6ICcnIH0pKSA6IHsgdmFsdWU6IGV2ZW50VmFsdWUudmFsdWUsIGxhYmVsOiAnJyB9O1xuICAgICAgICAgICAgc2V0VGhlVmFsdWUobmV3VmFsdWVTdGF0ZSk7XG4gICAgICAgICAgICBsZXQgZXYgPSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG5ld1ZhbHVlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb21wYW55aW5wdXQnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG9uQ2hhbmdlKGV2KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gaXNNdWx0aU9wdGlvbmFsID8gZXZlbnRWYWx1ZS5tYXAodiA9PiAoeyBpZDogdi52YWx1ZSwgbmFtZTogdi5sYWJlbCB9KSkgOiB7IGlkOiBldmVudFZhbHVlLnZhbHVlLCBuYW1lOiBldmVudFZhbHVlLmxhYmVsIH07XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlU3RhdGUgPSBpc011bHRpT3B0aW9uYWwgPyBldmVudFZhbHVlLm1hcCh2ID0+ICh7IHZhbHVlOiB2LnZhbHVlLCBsYWJlbDogdi5sYWJlbCB9KSkgOiB7IHZhbHVlOiBldmVudFZhbHVlLnZhbHVlLCBsYWJlbDogZXZlbnRWYWx1ZS5sYWJlbCB9O1xuICAgICAgICBzZXRUaGVWYWx1ZShuZXdWYWx1ZVN0YXRlKTtcblxuXG4gICAgICAgIGxldCBldiA9IHtcbiAgICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NvbXBhbnlpbnB1dCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUlucHV0Q2xlYXIgPSAoKSA9PiB7XG4gICAgICAgIHNldEZyZWVJbnB1dCghZnJlZUlucHV0KTtcbiAgICAgICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgICAgIHNldFRoZVZhbHVlKHsgdmFsdWU6IG51bGwsIGxhYmVsOiAnJyB9KTtcbiAgICAgICAgbGV0IGV2ID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB7IGlkOiBudWxsLCBuYW1lOiAnJyB9LFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjb21wYW55aW5wdXQnXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9IChldnQpID0+IHtcbiAgICAgICAgc2V0SW5wdXRWYWx1ZShldnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgbGV0IGV2ID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB7IGlkOiBudWxsLCBuYW1lOiBldnQudGFyZ2V0LnZhbHVlIH0sXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NvbXBhbnlpbnB1dCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGNvbnN0IGdldENvbXBhbmllcyA9IChpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVPcHRpb25zID0gKG9wdGlvbnMpID0+IHtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIG9uRXJyb3Iob3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hcCBpbnRvIHZhbHVlL2xhYmVsIGJlY2F1c2Ugb2YgYSBidWcgaW4gcmVhY3Qtc2VsZWN0IDJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KZWRXYXRzb24vcmVhY3Qtc2VsZWN0L2lzc3Vlcy8yOTk4XG4gICAgICAgICAgICBjb25zdCBvdGhlck9wdGlvbiA9IHsgdmFsdWU6IG51bGwsIGxhYmVsOiAnT3RoZXInIH07XG4gICAgICAgICAgICBsZXQgbmV3T3B0aW9ucyA9IFsuLi5vcHRpb25zLm1hcChjID0+ICh7IHZhbHVlOiBjLmlkLnRvU3RyaW5nKCksIGxhYmVsOiBjLm5hbWUgfSkpLCBvdGhlck9wdGlvbl07XG4gICAgICAgICAgICBjYWxsYmFjayhuZXdPcHRpb25zKTtcbiAgICAgICAgfTtcblxuICAgICAgICBxdWVyeVJlZ2lzdHJhdGlvbkNvbXBhbmllcyhzdW1taXRJZCwgaW5wdXQsIHRyYW5zbGF0ZU9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICB7ZnJlZUlucHV0ID9cbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB5b3VyIGNvbXBhbnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHBhZGRpbmdSaWdodDogMjUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8aSBhcmlhLWxhYmVsPSdDbGVhcicgc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScsIGJvdHRvbTogMTAsIHJpZ2h0OiAyNSwgY3Vyc29yOiAncG9pbnRlcicsIG9wYWNpdHk6ICc2NSUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVJbnB1dENsZWFyfSBjbGFzc05hbWU9J2ZhIGZhLWNsb3NlJz48L2k+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgLy8gUGFzc2luZyBudWxsIGlmIG5vIGxhYmVsIGFuZCB2YWx1ZSB0byBzaG93IHRoZSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhlVmFsdWUubGFiZWwgJiYgdGhlVmFsdWUudmFsdWUgPyB0aGVWYWx1ZSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSdTZWxlY3QgYSBjb21wYW55J1xuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0T3B0aW9ucz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e2dldENvbXBhbmllc31cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aU9wdGlvbmFsfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHtoYXNFcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcblxufVxuXG5leHBvcnQgZGVmYXVsdCBSZWdpc3RyYXRpb25Db21wYW55SW5wdXQ7XG5cblJlZ2lzdHJhdGlvbkNvbXBhbnlJbnB1dC5wcm9wVHlwZXMgPSB7XG4gICAgb25FcnJvcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQgeyBjb21wb25lbnRzIH0gZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9jb21wb25lbnRzJ1xuaW1wb3J0IHsgcXVlcnlTcGVha2VycyB9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcGVha2VySW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRTcGVha2VycyA9IHRoaXMuZ2V0U3BlYWtlcnMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDbGljayA9IHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25MYWJlbCA9IHRoaXMuZ2V0T3B0aW9uTGFiZWwuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3BlYWtlcmlucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2xpY2soc3BlYWtlcklkKSB7XG4gICAgICAgIGxldCB7aGlzdG9yeX0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGhpc3RvcnkucHVzaChgL2FwcC9zcGVha2Vycy8ke3NwZWFrZXJJZH1gKTtcbiAgICB9XG5cbiAgICBnZXRTcGVha2VycyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdW1taXRJZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdzdW1taXRJZCcpKSA/IHRoaXMucHJvcHMuc3VtbWl0SWQgOiBudWxsO1xuXG4gICAgICAgIHF1ZXJ5U3BlYWtlcnMoc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uVmFsdWUoc3BlYWtlcil7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25WYWx1ZVwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25WYWx1ZShzcGVha2VyKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIHNwZWFrZXIuaWQ7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uTGFiZWwoc3BlYWtlcil7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25MYWJlbFwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25MYWJlbChzcGVha2VyKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIGAke3NwZWFrZXIuZmlyc3RfbmFtZX0gJHtzcGVha2VyLmxhc3RfbmFtZX0gKCR7c3BlYWtlci5pZH0pYDtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIG9uQ2hhbmdlLCBoaXN0b3J5LCBzdW1taXRJZCwgZXJyb3IsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuXG4gICAgICAgIGNvbnN0IE11bHRpVmFsdWVMYWJlbCA9IChwcm9wcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8YSBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUNsaWNrKHByb3BzLmRhdGEuaWQpfSBzdHlsZT17e2N1cnNvcjogJ3BvaW50ZXInfX0+XG4gICAgICAgICAgICAgICAgICAgIDxjb21wb25lbnRzLk11bHRpVmFsdWVMYWJlbCB7Li4ucHJvcHN9IC8+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldFNwZWFrZXJzfVxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzPXt7IE11bHRpVmFsdWVMYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17cyA9PiB0aGlzLmdldE9wdGlvblZhbHVlKHMpfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17cyA9PiB0aGlzLmdldE9wdGlvbkxhYmVsKHMpfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlTcG9uc29yc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNwb25zb3JJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldFNwb25zb3JzID0gdGhpcy5nZXRTcG9uc29ycy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHR5cGU6ICdzcG9uc29yaW5wdXQnXG4gICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldFNwb25zb3JzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IHtzdW1taXRJZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHF1ZXJ5U3BvbnNvcnMoc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2Vycm9yLCB2YWx1ZSwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgc3VtbWl0SWQsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17b3B0aW9uID0+IG9wdGlvbi5pZH1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wdGlvbiA9PiBgJHtvcHRpb24uY29tcGFueS5uYW1lfSAoJHtvcHRpb24uc3BvbnNvcnNoaXAubGFiZWx9KWB9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0U3BvbnNvcnN9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeVN1bW1pdHN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdW1taXRJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRTdW1taXRzID0gdGhpcy5nZXRTdW1taXRzLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgdHlwZTogJ3N1bW1pdGlucHV0J1xuICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRTdW1taXRzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcXVlcnlTdW1taXRzKGlucHV0LCBjYWxsYmFjayk7XG4gICAgfVxuXG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIGVycm9yLCBvbkNoYW5nZSwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRTdW1taXRzfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17b3AgPT4gb3AuaWR9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXtvcCA9PiAoYCR7b3AubmFtZX0gKCR7b3AuaWR9KWApfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeVRhZ3N9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuaW1wb3J0IHtzaGFsbG93RXF1YWx9IGZyb20gXCIuLi8uLi91dGlscy9tZXRob2RzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhZ0lucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLm1hcCgodCkgPT4gKHt0YWc6IHQudGFnfSkpXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldFRhZ3MgPSB0aGlzLmdldFRhZ3MuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGlmKCFzaGFsbG93RXF1YWwodGhpcy5wcm9wcy52YWx1ZSwgcHJldlByb3BzLnZhbHVlKSkge1xuICAgICAgICAgICAgbGV0IG5leHRWYWx1ZSA9IHRoaXMucHJvcHMudmFsdWUubWFwKCh0KSA9PiAoe3RhZzogdC50YWd9KSk7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiBuZXh0VmFsdWV9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0YWdpbnB1dCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldFRhZ3MgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3VtbWl0SWQgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnc3VtbWl0SWQnKSkgPyB0aGlzLnByb3BzLnN1bW1pdElkIDogbnVsbDtcblxuICAgICAgICBxdWVyeVRhZ3Moc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2NsYXNzTmFtZSwgZXJyb3IsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuXG4gICAgICAgIGxldCBvcmRlcmVkVGFncyA9IHRoaXMuc3RhdGUudmFsdWUuc29ydCgoYSwgYikgPT4gKGEudGFnLnRvTG93ZXJDYXNlKCkgPiBiLnRhZy50b0xvd2VyQ2FzZSgpID8gMSA6IChhLnRhZy50b0xvd2VyQ2FzZSgpIDwgYi50YWcudG9Mb3dlckNhc2UoKSA/IC0xIDogMCkpKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lICsgJyAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyl9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGlcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e29yZGVyZWRUYWdzfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldFRhZ3N9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXtvcHRpb24gPT4gb3B0aW9uLnRhZ31cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wdGlvbiA9PiBvcHRpb24udGFnfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudmFsdWUgIT09IHByZXZQcm9wcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IHRoaXMucHJvcHMudmFsdWV9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGV2KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29uQ2hhbmdlLCB2YWx1ZSwgY2xhc3NOYW1lLCBlcnJvciwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBjbGFzc19uYW1lID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBjbGFzc05hbWUgOiAnZm9ybS1jb250cm9sJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc19uYW1lICsgJyAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyl9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRleHRBcmVhIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnZhbHVlICE9PSBwcmV2UHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiB0aGlzLnByb3BzLnZhbHVlfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldikge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGNsYXNzTmFtZSwgZXJyb3IsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgY2xhc3NfbmFtZSA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2NsYXNzTmFtZScpID8gY2xhc3NOYW1lIDogJ2Zvcm0tY29udHJvbCc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NfbmFtZSArICcgJyArIChoYXNfZXJyb3IgPyAnZXJyb3InIDogJycpfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5VGlja2V0VHlwZXN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaWNrZXRUeXBlc0lucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldFRpY2tldFR5cGVzID0gdGhpcy5nZXRUaWNrZXRUeXBlcy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvbkxhYmVsID0gdGhpcy5nZXRPcHRpb25MYWJlbC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGdldE9wdGlvblZhbHVlKHRpY2tldFR5cGUpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uVmFsdWVcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uVmFsdWUodGlja2V0VHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiB0aWNrZXRUeXBlLmlkO1xuICAgIH1cblxuICAgIGdldE9wdGlvbkxhYmVsKHRpY2tldFR5cGUpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uTGFiZWxcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uTGFiZWwodGlja2V0VHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiBgJHt0aWNrZXRUeXBlLm5hbWV9YDtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGlja2V0dHlwZWlucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0VGlja2V0VHlwZXMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQge3N1bW1pdElkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXJ5VGlja2V0VHlwZXMoc3VtbWl0SWQsaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHt2YWx1ZSwgZXJyb3IsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldFRpY2tldFR5cGVzfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17bSA9PiB0aGlzLmdldE9wdGlvblZhbHVlKG0pfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17bSA9PiB0aGlzLmdldE9wdGlvbkxhYmVsKG0pfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCBleHRlbmQgZnJvbSAnZXh0ZW5kJ1xuaW1wb3J0ICdkcm9wem9uZS9kaXN0L2Ryb3B6b25lLmNzcyc7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnLi9pY29uJ1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxubGV0IERyb3B6b25lID0gbnVsbDtcbi8qKlxuICogY2xhc3MgRHJvcHpvbmVKU1xuICovXG5leHBvcnQgY2xhc3MgRHJvcHpvbmVKUyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7ZmlsZXM6IFtdfTtcbiAgICAgICAgdGhpcy5vblVwbG9hZENvbXBsZXRlID0gdGhpcy5vblVwbG9hZENvbXBsZXRlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgb25VcGxvYWRDb21wbGV0ZShyZXNwb25zZSl7XG4gICAgICAgIGlmKHRoaXMucHJvcHMub25VcGxvYWRDb21wbGV0ZSlcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25VcGxvYWRDb21wbGV0ZShyZXNwb25zZSwgdGhpcy5wcm9wcy5pZCwgdGhpcy5wcm9wcy5kYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIG9mIERyb3B6b25lLmpzLiBEZWZhdWx0cyBhcmVcbiAgICAgKiBvdmVycmlkZW4gYnkgdGhlICdkanNDb25maWcnIHByb3BlcnR5XG4gICAgICogRm9yIGEgZnVsbCBsaXN0IG9mIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zLFxuICAgICAqIHBsZWFzZSBjb25zdWx0XG4gICAgICogaHR0cDovL3d3dy5kcm9wem9uZWpzLmNvbS8jY29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIGdldERqc0NvbmZpZyAoKSB7XG4gICAgICAgIGxldCBvcHRpb25zID0gbnVsbDtcbiAgICAgICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICB1cmw6IHRoaXMucHJvcHMuY29uZmlnLnBvc3RVcmwgPyB0aGlzLnByb3BzLmNvbmZpZy5wb3N0VXJsIDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRqc0NvbmZpZykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh0cnVlLCB7fSwgZGVmYXVsdHMsIHRoaXMucHJvcHMuZGpzQ29uZmlnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGRlZmF1bHRzXG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLmFjY2VwdCA9IChmaWxlLCBkb25lKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5tYXhGaWxlcyA8ICh0aGlzLnN0YXRlLmZpbGVzLmxlbmd0aCArIHRoaXMucHJvcHMudXBsb2FkQ291bnQpKSB7XG4gICAgICAgICAgICAgICAgZG9uZSgnTWF4IGZpbGVzIHJlYWNoZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhY3QgJ2NvbXBvbmVudERpZE1vdW50JyBtZXRob2RcbiAgICAgKiBTZXRzIHVwIGRyb3B6b25lLmpzIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldERqc0NvbmZpZygpO1xuXG4gICAgICAgIERyb3B6b25lID0gRHJvcHpvbmUgfHwgcmVxdWlyZSgnZHJvcHpvbmUnKTtcbiAgICAgICAgRHJvcHpvbmUuYXV0b0Rpc2NvdmVyID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLmNvbmZpZy5wb3N0VXJsICYmICF0aGlzLnByb3BzLmV2ZW50SGFuZGxlcnMuZHJvcCkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKCdOZWl0aGVyIHBvc3RVcmwgbm9yIGEgXCJkcm9wXCIgZXZlbnRIYW5kbGVyIHNwZWNpZmllZCwgdGhlIFJlYWN0LURyb3B6b25lIGNvbXBvbmVudCBtaWdodCBtaXNiZWhhdmUuJylcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkcm9wem9uZU5vZGUgPSB0aGlzLnByb3BzLmNvbmZpZy5kcm9wem9uZVNlbGVjdG9yIHx8IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgICAgICB0aGlzLmRyb3B6b25lID0gbmV3IERyb3B6b25lKGRyb3B6b25lTm9kZSwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5zZXR1cEV2ZW50cygpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhY3QgJ2NvbXBvbmVudFdpbGxVbm1vdW50J1xuICAgICAqIFJlbW92ZXMgZHJvcHpvbmUuanMgKGFuZCBhbGwgaXRzIGdsb2JhbHMpIGlmIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgdW5tb3VudGVkXG4gICAgICovXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQgKCkge1xuICAgICAgICBpZiAodGhpcy5kcm9wem9uZSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSB0aGlzLmRyb3B6b25lLmdldEFjdGl2ZUZpbGVzKCk7XG5cbiAgICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gV2VsbCwgc2VlbXMgbGlrZSB3ZSBzdGlsbCBoYXZlIHN0dWZmIHVwbG9hZGluZy5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGRpcnR5LCBidXQgbGV0J3Mga2VlcCB0cnlpbmcgdG8gZ2V0IHJpZFxuICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBkcm9wem9uZSB1bnRpbCB3ZSdyZSBkb25lIGhlcmUuXG4gICAgICAgICAgICAgICAgdGhpcy5xdWV1ZURlc3Ryb3kgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZGVzdHJveUludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucXVldWVEZXN0cm95ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5jbGVhckludGVydmFsKGRlc3Ryb3lJbnRlcnZhbClcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyb3B6b25lLmdldEFjdGl2ZUZpbGVzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3B6b25lID0gdGhpcy5kZXN0cm95KHRoaXMuZHJvcHpvbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5jbGVhckludGVydmFsKGRlc3Ryb3lJbnRlcnZhbClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIDUwMClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wem9uZSA9IHRoaXMuZGVzdHJveSh0aGlzLmRyb3B6b25lKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhY3QgJ2NvbXBvbmVudERpZFVwZGF0ZSdcbiAgICAgKiBJZiB0aGUgRHJvcHpvbmUgaGFzbid0IGJlZW4gY3JlYXRlZCwgY3JlYXRlIGl0XG4gICAgICovXG4gICAgY29tcG9uZW50RGlkVXBkYXRlICgpIHtcbiAgICAgICAgY29uc3Qge2NvbmZpZywgZGpzQ29uZmlnfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IGRqc0NvbmZpZ09iaiA9IGRqc0NvbmZpZyA/IGRqc0NvbmZpZyA6IHt9O1xuICAgICAgICBjb25zdCBwb3N0VXJsQ29uZmlnT2JqID0gY29uZmlnICYmIGNvbmZpZy5wb3N0VXJsID8geyB1cmw6IGNvbmZpZy5wb3N0VXJsIH0gOiB7fTtcbiAgICAgICAgdGhpcy5xdWV1ZURlc3Ryb3kgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXRoaXMuZHJvcHpvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRyb3B6b25lTm9kZSA9IHRoaXMucHJvcHMuY29uZmlnLmRyb3B6b25lU2VsZWN0b3IgfHwgUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRyb3B6b25lID0gbmV3IERyb3B6b25lKGRyb3B6b25lTm9kZSwgdGhpcy5nZXREanNDb25maWcoKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRyb3B6b25lLm9wdGlvbnMgPSBleHRlbmQodHJ1ZSwge30sIHRoaXMuZHJvcHpvbmUub3B0aW9ucywgZGpzQ29uZmlnT2JqLCBwb3N0VXJsQ29uZmlnT2JqKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFjdCAncmVuZGVyJ1xuICAgICAqL1xuICAgIHJlbmRlciAoKSB7XG4gICAgICAgIGNvbnN0IGljb25zID0gW107XG4gICAgICAgIGNvbnN0IHsgZmlsZXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGNvbnN0IHsgY29uZmlnIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSAodGhpcy5wcm9wcy5jbGFzc05hbWUpID8gJ2ZpbGVwaWNrZXIgZHJvcHpvbmUgJyArIHRoaXMucHJvcHMuY2xhc3NOYW1lIDogJ2ZpbGVwaWNrZXIgZHJvcHpvbmUnO1xuXG4gICAgICAgIGlmIChjb25maWcuc2hvd0ZpbGV0eXBlSWNvbiAmJiBjb25maWcuaWNvbkZpbGV0eXBlcyAmJiAoIWZpbGVzIHx8IGZpbGVzLmxlbmd0aCA8IDEpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucHJvcHMuY29uZmlnLmljb25GaWxldHlwZXMubGVuZ3RoOyBpID0gaSArIDEpIHtcbiAgICAgICAgICAgICAgICBpY29ucy5wdXNoKDxJY29uIGZpbGV0eXBlPXtjb25maWcuaWNvbkZpbGV0eXBlc1tpXX0ga2V5PXsnaWNvbi1jb21wb25lbnQnICsgaX0gLz4pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuY29uZmlnLnBvc3RVcmwgJiYgdGhpcy5wcm9wcy5hY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPXt0aGlzLnByb3BzLmFjdGlvbn0gY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICB7aWNvbnN9XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9e3RoaXMucHJvcHMuaWR9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT4ge2ljb25zfSB7dGhpcy5wcm9wcy5jaGlsZHJlbn0gPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFrZXMgZXZlbnQgaGFuZGxlcnMgaW4gdGhpcy5wcm9wcy5ldmVudEhhbmRsZXJzXG4gICAgICogYW5kIGJpbmRzIHRoZW0gdG8gZHJvcHpvbmUuanMgZXZlbnRzXG4gICAgICovXG4gICAgc2V0dXBFdmVudHMgKCkge1xuICAgICAgICBjb25zdCBldmVudEhhbmRsZXJzID0gdGhpcy5wcm9wcy5ldmVudEhhbmRsZXJzO1xuXG4gICAgICAgIGlmICghdGhpcy5kcm9wem9uZSB8fCAhZXZlbnRIYW5kbGVycykgcmV0dXJuO1xuXG4gICAgICAgIGZvciAodmFyIGV2ZW50SGFuZGxlciBpbiBldmVudEhhbmRsZXJzKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnRIYW5kbGVycy5oYXNPd25Qcm9wZXJ0eShldmVudEhhbmRsZXIpICYmIGV2ZW50SGFuZGxlcnNbZXZlbnRIYW5kbGVyXSkge1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlJ3MgYW4gYXJyYXkgb2YgZXZlbnQgaGFuZGxlcnNcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGV2ZW50SGFuZGxlcnNbZXZlbnRIYW5kbGVyXSkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudEhhbmRsZXJzW2V2ZW50SGFuZGxlcl0ubGVuZ3RoOyBpID0gaSArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgYW4gaW5pdCBoYW5kbGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnRIYW5kbGVyID09PSAnaW5pdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudEhhbmRsZXJzW2V2ZW50SGFuZGxlcl1baV0odGhpcy5kcm9wem9uZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wem9uZS5vbihldmVudEhhbmRsZXIsIGV2ZW50SGFuZGxlcnNbZXZlbnRIYW5kbGVyXVtpXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudEhhbmRsZXIgPT09ICdpbml0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVyc1tldmVudEhhbmRsZXJdKHRoaXMuZHJvcHpvbmUpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3B6b25lLm9uKGV2ZW50SGFuZGxlciwgZXZlbnRIYW5kbGVyc1tldmVudEhhbmRsZXJdKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kcm9wem9uZS5vbignYWRkZWRmaWxlJywgKGZpbGUpID0+IHtcbiAgICAgICAgICAgIGlmICghZmlsZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuc3RhdGUuZmlsZXMgfHwgW107XG5cbiAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZmlsZXMgfSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kcm9wem9uZS5vbigncmVtb3ZlZGZpbGUnLCAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWxlKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5zdGF0ZS5maWxlcyB8fCBbXTtcbiAgICAgICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGVJbkZpbGVzLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVJbkZpbGVzLm5hbWUgPT09IGZpbGUubmFtZSAmJiBmaWxlSW5GaWxlcy5zaXplID09PSBmaWxlLnNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZXMuc3BsaWNlKGksIDEpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBmaWxlcyB9KVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRyb3B6b25lLm9uKCd1cGxvYWRwcm9ncmVzcycsIChmaWxlLCBwcm9ncmVzcywgYnl0ZXNTZW50KSA9PiB7XG4gICAgICAgICAgICBwcm9ncmVzcyA9IGJ5dGVzU2VudCAvIGZpbGUuc2l6ZSAqIDEwMDtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VzL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9xdWVyeVNlbGVjdG9yXG4gICAgICAgICAgICAvL2xldCBlbGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dGhpcy5wcm9wcy5pZH0gLmR6LXVwbG9hZGApO1xuICAgICAgICAgICAgaWYoZmlsZS5wcmV2aWV3RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtID0gZmlsZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtZHotdXBsb2FkcHJvZ3Jlc3NdXCIpO1xuXG4gICAgICAgICAgICAgICAgaWYoZWxlbS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbVswXTtcblxuICAgICAgICAgICAgICAgIGlmIChlbGVtKVxuICAgICAgICAgICAgICAgICAgICBlbGVtLnN0eWxlLndpZHRoID0gcHJvZ3Jlc3MgKyBcIiVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kcm9wem9uZS5vbignc2VuZGluZycgLCAoZmlsZSwgeGhyLCBmb3JtRGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnYWNjZXNzX3Rva2VuJykpIHtcbiAgICAgICAgICAgICAgICAvLyBvYXV0aDIgdG9rZW5cbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJhY2Nlc3NfdG9rZW5cIiwgdGhpcy5wcm9wcy5hY2Nlc3NfdG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIC8vIFRoaXMgd2lsbCB0cmFjayBhbGwgcmVxdWVzdCBzbyB3ZSBjYW4gZ2V0IHRoZSBjb3JyZWN0IHJlcXVlc3QgdGhhdCByZXR1cm5zIGZpbmFsIHJlc3BvbnNlOlxuICAgICAgICAgICAgLy8gV2Ugd2lsbCBjaGFuZ2UgdGhlIGxvYWQgY2FsbGJhY2sgYnV0IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ugd2lsbCBjYWxsIG9yaWdpbmFsXG4gICAgICAgICAgICAvLyBsb2FkIGNhbGxiYWNrIGZyb20gZHJvcHpvbmVcbiAgICAgICAgICAgIGxldCBkcm9wem9uZU9uTG9hZCA9IHhoci5vbmxvYWQ7XG4gICAgICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBkcm9wem9uZU9uTG9hZChlKTtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgZmluYWwgY2h1bmsgYW5kIGdldCB0aGUgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICBsZXQgdXBsb2FkUmVzcG9uc2UgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdXBsb2FkUmVzcG9uc2UubmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMub25VcGxvYWRDb21wbGV0ZSh1cGxvYWRSZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgQUxMIGxpc3RlbmVycyBhbmQgRGVzdHJveXMgZHJvcHpvbmUuIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW55by9kcm9wem9uZS9pc3N1ZXMvMTE3NVxuICAgICAqL1xuICAgIGRlc3Ryb3kgKGRyb3B6b25lKSB7XG4gICAgICAgIGRyb3B6b25lLm9mZigpO1xuICAgICAgICByZXR1cm4gZHJvcHpvbmUuZGVzdHJveSgpXG4gICAgfVxufVxuXG5Ecm9wem9uZUpTLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBkanNDb25maWc6IHt9LFxuICAgIGNvbmZpZzoge30sXG4gICAgZXZlbnRIYW5kbGVyczoge30sXG4gICAgZGF0YToge30sXG59O1xuXG5Ecm9wem9uZUpTLnByb3BUeXBlcyA9IHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBEcm9wem9uZUpTOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNvbnN0IEljb24gPSAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gKDxkaXYgZGF0YS1maWxldHlwZT17cHJvcHMuZmlsZXR5cGV9IGNsYXNzTmFtZT0nZmlsZXBpY2tlci1maWxlLWljb24nIC8+KVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IERyb3B6b25lSlMgZnJvbSAnLi9kcm9wem9uZSdcbmltcG9ydCAnLi9pbmRleC5sZXNzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXBsb2FkSW5wdXRWMiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIG9uUmVtb3ZlLCBlcnJvciwgbWVkaWFUeXBlLCBwb3N0VXJsLCBtYXhGaWxlcyA9IDEsIHRpbWVPdXQsIG9uVXBsb2FkQ29tcGxldGUsIGRqc0NvbmZpZywgaWQgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT09ICcnICk7XG4gICAgICAgIGNvbnN0IGFsbG93ZWRFeHQgPSBtZWRpYVR5cGUgJiYgbWVkaWFUeXBlLnR5cGUgPyBtZWRpYVR5cGUudHlwZS5hbGxvd2VkX2V4dGVuc2lvbnMubWFwKChleHQpID0+IGAuJHtleHQudG9Mb3dlckNhc2UoKX1gKS5qb2luKFwiLFwiKSA6ICcnO1xuICAgICAgICBjb25zdCBtYXhTaXplID0gbWVkaWFUeXBlID8gbWVkaWFUeXBlLm1heF9zaXplIC8gMTAyNCA6IDEwMDtcbiAgICAgICAgY29uc3QgY2FuVXBsb2FkID0gdmFsdWUubGVuZ3RoIDwgbWF4RmlsZXM7XG5cbiAgICAgICAgY29uc3QgZGpzQ29uZmlnU2V0ID0ge1xuICAgICAgICAgICAgcGFyYW1OYW1lOiBcImZpbGVcIiwgLy8gVGhlIG5hbWUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gdHJhbnNmZXIgdGhlIGZpbGUsXG4gICAgICAgICAgICBtYXhGaWxlc2l6ZTogbWF4U2l6ZSwgLy8gTUIsXG4gICAgICAgICAgICB0aW1lb3V0OiB0aW1lT3V0IHx8ICgxMDAwICogNjAgKiAxMCksXG4gICAgICAgICAgICBjaHVua2luZzogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q2h1bmtzOiB0cnVlLFxuICAgICAgICAgICAgcGFyYWxsZWxDaHVua1VwbG9hZHM6IGZhbHNlLFxuICAgICAgICAgICAgYWRkUmVtb3ZlTGlua3M6IHRydWUsXG4gICAgICAgICAgICBtYXhGaWxlczogbWF4RmlsZXMsXG4gICAgICAgICAgICBhY2NlcHRlZEZpbGVzOiBhbGxvd2VkRXh0LFxuICAgICAgICAgICAgZHJvcHpvbmVTZWxlY3RvcjogYG1lZGlhX3VwbG9hZF8ke21lZGlhVHlwZS5pZH1gLFxuICAgICAgICAgICAgLi4uZGpzQ29uZmlnXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudENvbmZpZyA9IHtcbiAgICAgICAgICAgIHNob3dGaWxldHlwZUljb246IGZhbHNlLFxuICAgICAgICAgICAgcG9zdFVybDogcG9zdFVybFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgbWVkaWFfdHlwZTogbWVkaWFUeXBlLFxuICAgICAgICAgICAgbWVkaWFfdXBsb2FkOiB2YWx1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgZXZlbnRIYW5kbGVycyA9IHt9O1xuICAgICAgICBpZiAob25SZW1vdmUpIHtcbiAgICAgICAgICAgIGV2ZW50SGFuZGxlcnMgPSB7cmVtb3ZlZGZpbGU6IG9uUmVtb3ZlfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTZcIiAgc3R5bGU9e3toZWlnaHQ6IDE4MH19PlxuICAgICAgICAgICAgICAgICAgICB7Y2FuVXBsb2FkID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3B6b25lSlNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGpzQ29uZmlnPXtkanNDb25maWdTZXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtjb21wb25lbnRDb25maWd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVycz17ZXZlbnRIYW5kbGVyc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPXtkYXRhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZENvdW50PXt2YWx1ZS5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25VcGxvYWRDb21wbGV0ZT17b25VcGxvYWRDb21wbGV0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbGVwaWNrZXIgZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXggbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIGZvciB0aGlzIHR5cGUgLSBSZW1vdmUgdXBsb2FkZWQgZmlsZSB0byBhZGQgbmV3IGZpbGUuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAge3ZhbHVlLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlVwbG9hZGVkPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dmFsdWUubWFwKCh2LGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtgdXBsb2FkZWQtJHtpfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e3YucHJpdmF0ZV91cmwgfHwgdi5wdWJsaWNfdXJsfSB0YXJnZXQ9XCJfYmxhbmtcIj57di5maWxlbmFtZX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge29uUmVtb3ZlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiAtIDxhIG9uQ2xpY2s9e2V2ID0+IG9uUmVtb3ZlKHYpfT5SZW1vdmU8L2E+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwibW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBZ0FBQUFJQUNBWUFBQUQwZU5UNkFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFBTEV3QUFDeE1CQUpxY0dBQUFFSDFKUkVGVWVKenQzWC9zN1hWQngvSFg1ZkpMdUFoTUt4Q0hQOWdVUkNPVmlING9pV1UxeUxKMGhJaFVxN2h0cnZWcklXNVJ0R3B1NWNwcGxPV3ZqRkxLaXNJZnVibmxLbTNWSDlYTVpXa2tXS05pbVpJL0lIN2MvamhnbU5FOTU5N3pPZS9QT2EvSFkvdit4WWZQZVYyK1g4NzNlYytQejBrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSUIxMmpONkFJZmxqQ1FYSmprM3lST1RQQzdKaVVuMkpkazdjQmN3RDg5TGN1TkJqdm5lSks5UGN0ZjBjNWlUSTBjUFlHV25KN2tpeVl1U1BHSHdGbUQ3WFpEa0dVa3VTM0pnOEJZMlNBQnNqek9UdkN6SnBmRjlBOWJyMGlTM0pubnA2Q0ZzemhHakIzQlErNUs4SXNuN2sxd2V2L3lCYVZ5VlpQL29FV3lPWHliemRsNlNHNUk4ZHZBT29NT3JrM3cweWR0SEQyRjZIZ0dZcnl1VC9Fbjg4Z2MyWjI4V2YrbDQrdWdoVEU4QXpOTzFTWDRweVZHamh3QjFqcy9pRVlESER0N0J4QVRBL1B4NGttdEdqd0NxZlZHU2R5UTVlZlFRcGlNQTV1WEtKRDgyZWdSQWtyT3l1SWJBTWFPSE1BMEJNQi9uSlhuVjZCRUFEL0xNSkcrSWk4YnRKTzhDbUlkOVdienc1bkNlOC85b2tqOUxjbk9TTzVMY3U0WmR3UHpzeWZKL0svL2dHbTd2MGlTM0pMbDZEZWNDL3BkWFpIRUZybFcvUHBuazU1TThaZk9UZ1IzeGxpeDNmM1BscUlHd3E4NU1jbmRXLytWL2ZSWXYxQUU0SE1zR3dEMUpMaHEwRVhiU203TGFMLzY3a3J4NHlGSmdGeTBiQUE4ODZ1Z2FBYkFHcDJlMXYvM2ZsZVRyaGl3RmR0VXFBWEFneVcxSkhqTmtLV3ZsWFFCalhaSFZYb2o1M1VuZU5kRVdnR1dja3VTZFNVNGFQUVMyMmQ5bHRlZjhBZFp0MVVjQUh2aDZUNUtqTno4WHR0OFpXZTE1TnkvNEE2WndxQUZ3SU1sdnhEVUN0cGFuQU1hNWNJVmpYNXZrWDZjYUFuQ0lMazN5MDZOSHdMWjVUWmF2Yk8vekI2WnlPSThBUFBEbEdnR3dndmRrdWYreGJobTBEK2l3amdCd2pZQXQ1Q21BY1I2MzVIRi9QdWtLZ01PM040dkxtYnRHd0JZUkFPT2N1T1J4TjArNkFtQTlqay95dHJoR3dOWVFBT1BzVy9LNE95WmRBYkErcmhHd1JRVEFPSHVYUE02bitnSGI1S3drTjhZMUFtWlBBQUN3Ymhja2VVTmNJMkRXQkFBQVUzaGhrcDhhUFlLSEpnQUFtTXJWV1h5R0NUTWtBQUNZMG5WSnZtSDBDRDZmQUFCZ1NrY20rYzBrVHgwOWhNOGxBQUNZMnI0a2IwOXkrdWdoL0E4QkFNQW1uSnJrSFZuK0ltaE1UQUFBc0NsbkovbWRKRWVOSG9JQUFHQ3pMa3p5dXRFakVBQUFiTjdsU1g1aTlJaDJBZ0NBRVg0MHlYZU9IdEZNQUFBd3ltdVNQR2YwaUZZQ0FJQlJqa3p5MWlUbmpCN1NTQUFBTU5JSldWd2o0TkdqaDdRUkFBQ01kbG9XRWZEdzBVT2FDQUFBNXVDTHMzZzY0TWpSUTFvSUFBRG00bXVUL1BMb0VTMEVBQUJ6OGgxSnJoazlvb0VBQUdCdXJrM3k0dEVqZHAwQUFHQ09YcHZGWllPWmlBQUFZSTZPeXVLRGc4NGVQV1JYQ1FBQTV1ckVMRDVDK05UUlEzYVJBQUJnems1UDhyWWt4NDhlc21zRUFBQno5N1FrTnlUWk8zcklMaEVBQUd5RGk1SzhldlNJWFNJQUFOZ1crNVA4eU9nUnUwSUFBTEJOWHA3a2t0RWpkb0VBQUdDYjdFbnlxMG0rYXZTUWJTY0FBTmcyeHlTNU1ja1RSZy9aWmdJQWdHMzBpQ3l1RWZBRm80ZHNLd0VBd0xZNkk4bE5TUjQyZXNnMkVnQUFiTE12UzNKOS9ENWJtZjlnQUd5N2IwbnlzNk5IYkJzQkFNQXUrSUVrTHhrOVlwc0lBQUIyeFN1VFBIZjBpRzBoQUFEWUZVY2tlWE9TYzBjUDJRWUNBSUJkY2x3Vzd3eDR6T2doY3ljQUFOZzFwMlJ4allDVFJnK1pNd0VBd0M1NlVwTGZUbkxVNkNGekpRQUEyRlVYSnZtVjBTUG1TZ0FBc011dVNITE42QkZ6SkFBQTJIWFhKbm5SNkJGekl3QUFhUEM2SkJlTUhqRW5BZ0NBQmtjbitkMGtUeHc5WkM3MmpCNndJdzZNSGdBbGJranliYU5IN0ppM0pMbGs5SWdOdWpuSitVbHVIejFrTkk4QUFORGs4VWwrUDhteG80ZU1KZ0FBYUhOK2tqZWwvRkZ3QVFCQW94Y2srY25SSTBZU0FBQzBlbG1TYng4OVlwUWpSdzhBWUtqM2pSNHcyTE95ZUUzQXgwWVAyYlRxNXovV3lMc0FZRE84Q3dEV3hGTUFBRkJJQUFCQUlRRUFBSVVFQUFBVUVnQUFVTWpiQUxmWGZVbHVHejNpSWV4TGN1SkJqdmxVa28rdmNNN1REbjNPVnBuejkvWEJqa255eU5FamdFTW5BTGJYN1VrZVBYckVRL2poSkQ5emtHT3VUN0oveWZNZG0rUXpLOXorOTJYNUQvcDRmcEp2WGVIY1UvdVB6UGY3K21CZm4rU2RvMGNBaDA0QXNJdHVTdktSSlk4OU0vTUtBR0E5amtoeTNKTEgzcG5rbmdtM3pKTFhBQUN3aTU2VTVEK1gvSHIrb0kxRENRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pEckFQVFluK1RKRzdxdEw5blE3YkRaNyt1RG5UN2dOb0UxRWdBOUxrNXkwZWdSckozdkszQklQQVVBQUlVRUFBQzc2TzdSQStaT0FBQ3dpKzRkUFdEdUJBQUFGQklBQUZCSUFBQkFJUUVBQUlVRUFBQVVFZ0FBVUVnQUFFQWhsd0tHN2ZhSkpQKyt3ZHM3TnNueEc3dzlZQ0lDb01jSGtwdzAwYm1QUy9MVWljN04vKyt5RGQvZS9pUy91T0hiQkNZZ0FIcGNOZUc1bjV6ay9ST2VINEExOHhvQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFxNERBTnR0ZnhiWFlkaVVzemQ0VzhDRUJFQ1BhNUtjTjlHNVQ1am92QnpjeFVrdUdqMEMyRDRDb01kNThZc0NnUHQ1RFFBQUZCSUFBRkJJQUFCQUlRRUFBSVVFQUFBVUVnQUFVRWdBQUVBaEFRQUFoUVFBQUJRU0FBQlFTQUFBUUNFQkFBQ0ZmQmdRN1c1Tjh0NE4zdDYrSk9lczhYd2ZTSExTR3MrM2luWC9XWUFORWdDMGUvMzlYNXR5YnBLL1dPUDVybHJqdVZhMTdqOExzRUdlQWdDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQXNCYmErVGs3eDdoZVBuZHNXMmk3UDgvbFZEOWZva2Q2NzQ3MnpLQ1FmNTV3L1BhdC9Ya1E3Mlp3Rm1UQUJzcjZPVFBIdjBpTU53MnYxZlUvaktpYzY3Q1VkbHU3K3Z3SmJ3RkFBQUZCSUFBRkJJQUFCQUlRRUFBSVVFQUFBVUVnQUFVRWdBQUVBaEFRQUFoUVFBQUJRU0FBQlFTQUFBUUNHZkJiQWVldzdoM3ptdzVIRlhKM241SVp3ZkFCNlNSd0FBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdDQWRnZEdEeGhCQUl4eno1TEhIVFhwQ29EZGRNd0t4OTQ5MllvWkV3RGpmSExKNDA2WmRBWEFianAxaFdQdm1HekZqQW1BY1c1YjhyaW5UTG9DWURldGN0LzVMNU90bURFQk1NNC9MSG5jZVVtT24zSUl3QTU2MXBMSDNaZms1aW1IekpVQUdPZXZsanp1bUNUZk5PVVFnQjF6Y3BMbkxIbnNoNU44ZXNJdHN5VUF4bm5mQ3NkKy8yUXJBSGJQL2l6L0lzRDNUamtFL2kvSEpia3ppN2VmTFBQMWdqRXpBYmJLSTVOOExNdmZ0MTR5WmlidGJzenlQNlMzSmZuQ01UTUJ0c1p2WmZuNzFjOGtPV0hNVE5wOWM1Yi9RVDJRNUkrU0hEdGtLY0Q4dlRTcjNhZisrcGlaa094TjhvOVo3UWYyWFVuMmpSZ0xNR00vbE5YdVN3OGtPWC9JVXJqZmxWbjloL1p2NHZvQUFNbmlJZnczWnZYNzBYY1AyQXFmNDhna2Y1dlZmM2ovSzhuUFpiV3JYUUhzaXFPVGZGZVNmODdxOTUvM0pubjY1aWZENTN0V1Z2OEJmbkFJL0Y2UzcwbHlUcnlnQmRoTlJ5ZDVmSkxuSmJrdXliL2wwTzgzZjJIRDIyZHB6K2dCZk5hcmtyeGtUZWU2TDRzZmNvQmRzWGRONS9sUWtxZGwrYzlqMlZrQ1lENk9TZkxIU2I1MDlCQ0FIZlhwSkYrUjVLOUhENWtEVndLY2o3dXl1T1R2TGFPSEFPeWdlNU5jRnIvOFAwc0F6TXR0U2I0bXlUK05IZ0t3USs3TDRnV0RONDRlTWljQ1lINCtuT1FaU1Q0NGVnakFEcmd6aTh2OXZuSHdqdGtSQVBQMGtTUmZudVNtd1RzQXR0bXRTWjZaNUsyamg4elJ1bDVWeWZyZG1lVE5TVzVQY2tFV2I0RUJZRG5YSjNsdWtwdEhENWtyandETTMzVkp6a3J5YTFrOGp3WEFRL3ZMSk05T2NubVNqdy9lTW12ZUJyaGR6a3p5ZzBsZW1PVDR3VnNBNXVKQWtqOU04c29zbmpwMUhaUWxDSUR0dEMvSnhVbStNY2xYSjNuVTBEVUFtL2VwSkgrYTVBK3llSTdmVzZoWEpBQjJ3Nk95ZUpyZzlDU1BTUEt3ZUgwSHNEc09aSEd0bEU5a2NlMy9EeVg1K3l6ZTJ3OEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFMQjkvaHQ4eG1YeFNnTmUrUUFBQUFCSlJVNUVya0pnZ2c9PVwiIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IERyb3B6b25lIGZyb20gJ3JlYWN0LWRyb3B6b25lJztcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0JztcbmltcG9ydCAnLi91cGxvYWQubGVzcyc7XG5cbmltcG9ydCBmaWxlX2ljb24gZnJvbSAnLi9maWxlLnBuZyc7XG5pbXBvcnQgcGRmX2ljb24gZnJvbSAnLi9wZGYucG5nJztcbmltcG9ydCBtb3ZfaWNvbiBmcm9tICcuL21vdi5wbmcnO1xuaW1wb3J0IG1wNF9pY29uIGZyb20gJy4vbXA0LnBuZyc7XG5pbXBvcnQganBnX2ljb24gZnJvbSAnLi9qcGcucG5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXBsb2FkSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBzaG93X3JlbW92ZTogZmFsc2UsXG4gICAgICAgICAgICBsb2dvX3ByZXZpZXc6IHtcbiAgICAgICAgICAgICAgICBwcmV2aWV3OiBudWxsLFxuICAgICAgICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsZUhhc1ByZXZpZXcgPSB0aGlzLmZpbGVIYXNQcmV2aWV3LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgb25Ecm9wKGFjY2VwdGVkRmlsZXMsIGZpbGVSZWplY3Rpb25zLCBldnQpIHsgICAgICAgIFxuICAgICAgICBpZihhY2NlcHRlZEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBmaWxlID0gYWNjZXB0ZWRGaWxlc1swXTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuaGFuZGxlVXBsb2FkKGZpbGUsIHRoaXMucHJvcHMpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGxvZ29fcHJldmlldzpcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlldzogZmlsZS5wcmV2aWV3LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGlmKGZpbGVSZWplY3Rpb25zLmxlbmd0aCA+IDAgJiYgdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImhhbmRsZUVycm9yXCIpKVxuICAgICAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVFcnJvcihmaWxlUmVqZWN0aW9ucywgdGhpcy5wcm9wcylcbiAgICB9XG5cbiAgICBvblJlbW92ZShldil7XG4gICAgICAgIHRoaXMucHJvcHMuaGFuZGxlUmVtb3ZlKGV2LCB0aGlzLnByb3BzKTtcbiAgICB9XG5cbiAgICBzaG93VmVpbCgpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgc2hvd19yZW1vdmU6dHJ1ZX0pO1xuICAgIH1cblxuICAgIGhpZGVWZWlsKCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsuLi50aGlzLnN0YXRlLCBzaG93X3JlbW92ZTpmYWxzZX0pO1xuICAgIH1cblxuICAgIGZpbGVIYXNQcmV2aWV3KGZpbGVOYW1lKXtcbiAgICAgICAgaWYoIWZpbGVOYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGxldCBwYXR0ZXJuID0gLyguKilcXC4oZ2lmfGJtcHxzdmd8anBlP2d8cG5nKS9nXG4gICAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QoZmlsZU5hbWUpO1xuICAgIH1cblxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBmaWxlLCBoYW5kbGVSZW1vdmUsIGhhbmRsZVVwbG9hZCwgaGFuZGxlRXJyb3IsIGZpbGVOYW1lLCBlcnJvciwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQge2xvZ29fcHJldmlldywgc2hvd19yZW1vdmV9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPT0gJycgKTtcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSAoIHJlc291cmNlIClcbiAgICAgICAgbGV0IGljb24gPSBmaWxlX2ljb247XG5cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBpZighZmlsZU5hbWUpIGZpbGVOYW1lID0gdmFsdWUuc2xpY2UodmFsdWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZSAmJiBmaWxlLmhhc093blByb3BlcnR5KFwibmFtZVwiKSAmJiBmaWxlLm5hbWUpIHtcbiAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZS5uYW1lO1xuICAgICAgICB9XG4gICAgICAgICAvLyBmaWxlcyB3aXRob3V0IHByZXZpZXdcbiAgICAgICAgaWNvbiA9ICAoZmlsZU5hbWUgJiYgZmlsZU5hbWUuZW5kc1dpdGgoJ3BkZicpID8gcGRmX2ljb246IGljb24pO1xuICAgICAgICBpY29uID0gIChmaWxlTmFtZSAmJiBmaWxlTmFtZS5lbmRzV2l0aCgnbW92JykgPyBtb3ZfaWNvbjogaWNvbik7XG4gICAgICAgIGljb24gPSAgKGZpbGVOYW1lICYmIGZpbGVOYW1lLmVuZHNXaXRoKCdtcDQnKSA/IG1wNF9pY29uOiBpY29uKTtcblxuICAgICAgICAvLyBpZiBmaWxlIGhhcyBwcmV2aWV3ICggYWxyZWFkeSBvbiBkYXRhIG1vZGVsKVxuICAgICAgICBpZih0aGlzLmZpbGVIYXNQcmV2aWV3KGZpbGVOYW1lKSAmJiB2YWx1ZSl7XG4gICAgICAgICAgICBpY29uID0gdmFsdWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2dvX3ByZXZpZXcucHJldmlldyAmJiBsb2dvX3ByZXZpZXcubmFtZSkge1xuICAgICAgICAgICAgaWNvbiA9IGxvZ29fcHJldmlldy5wcmV2aWV3O1xuICAgICAgICAgICAgZmlsZU5hbWUgPSBsb2dvX3ByZXZpZXcubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbGUtdXBsb2FkXCI+XG4gICAgICAgICAgICAgICAgPERyb3B6b25lXG4gICAgICAgICAgICAgICAgICAgIG9uRHJvcD17dGhpcy5vbkRyb3AuYmluZCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXY+e1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5kcm9wX2ZpbGVzXCIpfTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvRHJvcHpvbmU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWxlY3RlZC1maWxlcy1ib3ggY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+U2VsZWN0ZWQgRmlsZXM8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VsZWN0ZWQtZmlsZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWxlLWJveFwiIG9uTW91c2VFbnRlcj17dGhpcy5zaG93VmVpbC5iaW5kKHRoaXMpfSBvbk1vdXNlTGVhdmU9e3RoaXMuaGlkZVZlaWwuYmluZCh0aGlzKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9e2ljb259IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj17dmFsdWV9IHRhcmdldD1cIl9ibGFua1wiPntmaWxlTmFtZX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Nob3dfcmVtb3ZlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZW1vdmVcIiBvbkNsaWNrPXt0aGlzLm9uUmVtb3ZlLmJpbmQodGhpcyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10aW1lc1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWdBQUFBSUFDQU1BQUFERHBpVElBQUFBQTNOQ1NWUUlDQWpiNFUvZ0FBQUFDWEJJV1hNQUFBemVBQUFNM2dFVFVCQjZBQUFBR1hSRldIUlRiMlowZDJGeVpRQjNkM2N1YVc1cmMyTmhjR1V1YjNKbm0rNDhHZ0FBQXZwUVRGUkYvLy8vQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVdzQWM5d0FBQVAxMFVrNVRBQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdkSGg4Z0lTSWpKQ1VtSnlncEtpc3NMUzR2TURFeU16UTFOamM0T1RvN1BEMCtQMEJCUWtORVJVWkhTRWxLUzB4TlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBZ1lLRGhJV0doNGlKaW91TWpZNlBrSkdTazVTVmxwZVltWnFibkoyZW42Q2hvcU9rcGFhb3FhcXJySzJ1c0xHeXM3UzF0cmU0dWJxN3ZMMit2OERCd3NQRXhjYkh5TW5LeTh6TnpzL1EwZExUMU5YVzE5aloydHZjM2Q3ZjRPSGk0K1RsNXVmbzZlcnI3TzN1Ny9EeDh2UDA5ZmIzK1BuNisvejkvbzlhSEpjQUFCVTdTVVJCVkhqYTdkMTVmRTFuR2dmd2M3T0prSVJJQ2JGRWE2SkNoZHFteHI2MjJnbHRVRVFzZzZGMFVZVFd0SmhZeXBTbVJhdkRsSXlsb1liYUl2WmxXbHBiMGdpcHBWS3Q2SkNJV0VLMiszdytROWRvN3IzbnZmY3NlZCs4djkvZjNuUGU4enhmTi9lK1oxTVVBK0xiZittMjVDdFdraTQ1SitJN0tyTEhQWHJyWFpJNHFaM2s3bjlFR2ttZW9yRVN0ei9rSUNFMFg5citkN3lLN3QvUFpFbjdQN29BdmY4eDF1ZWw3UDhnZFA2WDNHMHZZZjliNUtIeHYrYmFvOUwxdi9wRnRMMUVMdFNRRFVBOG12NUFqbFNTcS8vaHhlajVnOW5zTGhXQUpIVDg5MWtpVS85Ym85K2xNMFVpQUhQUmJodkxBUVBrQVhBYTdiYTFITkJCbHY2SG90bTJsd01hU1FJZ0NyMjJzeHdRSkFlQUdMVGFUbzdLc1J3UWgwN2J5eFlwbGdNUzBHaTcrVkFHQUlrMkRueDBrQng1VEUzQWF4SUEyRzdqdUdYNUVSeWt1aHd3RUFDa0JrRDVIUUZBYWdDVTB3Z0FwQVpBR1VFQUlEVUFPbFlKQUtRR1FGdmRBVUJxQVBSUEFKQWJBTDBPQUhJRHNBNENBS2tCVUg0bkFKQWFBT1dFQVlEVUFDaWpKZ0JJRFlDT1ZRWUFxUUhRTmc4QWtCb0FMUVVBdVFIUVZBQ1FHNEExQ2dDa0JrRDVuUUZBYWdDVTB4Z0FwQVpBMzlZRUFLa0IwUEhLQUNBMUFFcjBBQUNwQWRBeUFKQWJBUDBOQU9RR1FJTUJRRzRBK1YwQVFHb0FkTDB4QUVnTmdDN1dBZ0NwQWRBSlh3Q1FHZ0J0OXdBQXFRSFF2d0JBYmdEMEJnRElEWUNpQVVCdUFBVmRBVUJxQUhTOUNRQklEYUI4TEFjQWdJWWsrd0tBMUFBb3lRTUFwQVpBSHdHQTNBQm9HZ0RJRFlDR0FJRGNBRVJmRGdBQXJjbDlEQUNrQmtEZkJRT0ExQURFWGc0QUFCMnl3d01BcEFaQXl3RkFiZ0EwSFFEa0JrQkRBVUJ1QUFYZEFFQnFBSlRiRkFDa0JpRHFjZ0FBNkpZVVB3Q1FHZ0R0OEFRQXFRSFFDZ0NRR3dETkFBQzVBZEJ3QUpBYlFFRjNBSkFhZ0hqTEFRQ2djNzZ2RFFCU0E2Q3YvQUJBYWdDMDB4TUFwQVpBOFFBZ053RDZPd0RJRFlEK0FnQnlBeWpzQVFCU0E2QWI0UUFnTlFDNlZBY0FwQVpBcWY0QUlEVUEydVVKQUZJRG9IOERnTndBS0JZQTVBWkFJd0JBYmdDRlBRRkFhZ0Iwb3hrQVNBMUFnT1VBQURBMjNDOEhBSURCMmUwSkFGSURvSlVBSURjQW1na0FjZ09na1FBZ040RENKd0ZBYWdCMHN6a0FTQTJBTXVzQ2dOUUE2S1EvQUVnTmdQWjRBWURVQUdnVkFNZ05nR1lCZ053QWFCUUF5QTJnOENrQWtCb0FuOHNCQUdCaWVGd09BQUF6azFZRkFLUUdRSHU5QUVCcUFMVGFBZ0JTQTZDWEFFQnVBRG1CQUNBMUFQb1FBT1FHVUJ3QUFGSURvSTRBSURlQWNRREFTV3FVRFlBUEFJQ1RXSExMQk1CR0FPQWxlOG9Fd0hZQTRDVnpBVUJ1QUJFQUlEY0F5MTRBa0JxQUVuSVRBS1FHb0l3Q0FMa0JLSDJ2QW9EVUFKVHFHd0JBYWdDS0VqcHcvdDUwZzNMSlJua1RBVUNlRE1BbkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdOUUFBbnVQbmJVaUtUV2pSTzdZbU9HbGRNVEFWOGJjS1ZuLzFLUVZzOGIyRGpTaiszK1lkS0NZRUM1VHRHOThpTEhkcnpEeEZNck1kMDZNOHpTcy9XN1IzNkxBL09mOFFJc3gvZTl4QXNVVkk4ZTZHOUIrcjJVb3JEaFo1cVYzL3g4NmdLcUtsQU1QNmR2L3BobW9xVmpKYUtycm4vOWJxS2hvdWRWRHYvNkg1YUtlNGlVM1RLLytCNXhETlVYTXVRQjkrdSt4RzdVVU03czlkQUd3RUpVVU5ZdjA2SDhyS3dvcGFxeXRkQUN3RjNVVU4zdTE5LzlwVkZIa1BLMzVCRkFxaWloeVV0MDBBaGlDR29xZElSb0I3RUFKeGM0T2JmMzNLMEFKeFU2Qm55WUF6Nk9Db3VkNVRRRFdvSUNpWjQybVZlQWNGRkQwNUdoWkQyNk0rcG1WT3ptWjMrVVVHckhseGhvQWRCZXhsTVc1MzUwNnZPTS9LeGJPZjJ2bXRLbVRYMzFwek1paFVmMmY2L2VYOFcvK1k4bnFUWHVQZnAxNWs0dmw3WnVudGk5N2Mxalh4eG9FQjFUOCtUcE83OEQ2anozUjQ3a2g0NmJNaXYvc2lqNjcwWEtCNERDRFN6Qm52RW9tTVhmOTBxRzFiNy9jcDNYRFdwVlpyb2wxcS9MSHY3NS84SHBadGY3R2dYZUhOS3VpT2t2L2xnT25yVHlVcFhGbnd6UUFtR3B3SVI1Vm00QzMyaFp5VTdjdW1UcTRRNGhyRjhPSFJMenh5ZGZtM3VkeWErZThBYUhPWGJkZDlZbVlyUm91eVptcUFjQmlyZ0c4M2F1SnZ3NW51M3hhVFRoUVpFNzNUNy9UcllKcmszUnZOV21MaXdnV2E2ak5CcTRCZE5MeGRzZmhHL01NUHRiYm0xL1FlTitXZTh0Smgxelk4UWFkYi9vdGx3RHV4WGRzbW9GZlRKUDZWZEJsbG1FTG5QNXF1QjBBV05QcEUwTitoMUhHOUxyNlRkSXpjbHNSQUJnRDRONjN3dFc2LzBETVg5dkRUZWRaOWdVQW93QW9Tdk9kdWg1aFhseVEvbk9jRFFER0FWQ1VudWYxYS84N1FVYk04REFBR0FsQThWMnUwL2YrQlRVTW1aOC92Z01ZQzBCUklyTzBIMXZSZTlVTm1sMEVmZ1VZRFVDcGRWVHJvUjFyWWRqazNnTUF3d0VvbFpPMExmaSs2bTdjM0U0Q2dQRUFGTTlWR281cmMxMERaeGFFaFNBekFDaVdEMXc5cXF5K2hrNXNFQUNZQWtCeFcrL2lYLzk2eHM3ckl3QXdCNERpN2RKamNlSzlEWjVXQmdDWUJFQ3A0dnpwb1lLeFJrL3FFWndNTWcyQTBzalpjOFNaYlEyZjAxOEJ3RHdBeW92T0hVOUtUZU9udEJZQVRBU2dKRHB6T0VjRGpKK1FCZGNEbUFvZ0tKdjlhQTc1bXpDaGNBSUFNd0VvcnpBZnpBRmZNK1l6QVFETUJlREZlbko0ZHlVenBxTnNBUURYQUxqNUJRZTZkSlBVQUxaRDJlbHRTdjg5YmdLQU13Q3F0aHV6YU12KzQyY3YvL1NvMDl5TTQ3c1dSdjNCdVc5ZFRDY0cwLzFONmIvU2xnQ0FIVURvSmRzRHM3ZS9YSlc5Q0pFTUI1SVRxbjNsT2NDZjRSUHFUUUJ3QWtBeisyUHZyR3JQL0ttYnFYN3h4NU91VnJqbXMyUGZpRnU1OWRDWjdQczNLT1ZuWHp4MVpOK1d0Y3ZuREd0cit3VkErd0JBSHdEM2tzcTZhaGVyZWh3VFhWdlVIYjc4cklPTlhqdTg4bzMralI0YzRwTVBBTG9Cb09JRkZabXFVRWZ0R3J4L08xL1pwaSt1eldRcVVlYXFvYlYvRzlhREFFQS9BRVJmdDlUanA5Y3haMi82OFJxUzdGU1owaGYzcWZ6VHlIa0FvQ3NBeW1VU01NcmhOZ3JEblN0cXdPdVhuSy9VcmZpTzkyOHBQZ29BK2dLZ3JDWU1aUWgydUluWlRwVzB3ZnUzWFN6VytXbjFxaFlEZ000QTZISURoanFrT1BwOGR1WVBRSXVOV3A1R1lIWHA5bFVBVUZuQ1o2akRXdzZhMHM2Sm4vcXZGNUw1QVFDVjlGT3ZReGY3bzk5bnIyYXRzbm56QmdDbzVJTDZaM2lnM2NFWDJVOEJQbk9WQUlCSEFCU2pYZ2k3VjJFTVpTMWxoVEo3OFFvQXFDVkZ2UkQ3N1F3OXkzb0RVS01VQWdCZUFaRDZoZnhMN0l4a2ZSaDd5eko3SWgwQU1HU2NxOWNGbldIOEFHaCtqUUNBWXdCSnFvV0lzajB3bW5IaFA0c0FnR2NBVjlXL3dkcytsY0QyQVJEOFB3SUFyZ0ZZVmEvRWFHOXozR0NtSW5wK1RnREFOd0JTdloranFhMVJWOWllVDF2V0w5NEVBUFdvbnMrcloydFVIRk1OeS95bEt3Q2dIdFUzclQ5c2ExUXpsaElHWmdFQS93QzZxRzNwanpZR0pUT1ZjRGtCQVA4QXd0UzJaT3ZCWE9OWkt0ak9DZ0FDQUtpbXRxV1JwY2NVc2p3RnpwMkRGNjhDZ0dvS1ZGL2dZT1BOR1oreUZIQWdBWUFBQUw1WExjUzdwUWYxWnlsZ01nQ0lBR0MvYWlFK0xyMTRGTWhRdjZjSUFFUUFNRW0xRUx0S2pmbUtwWDc3QUVBSUFPclhoWDVWYXN4Q2h2THg4ZHBGQUZCTHFub2hMcGNhOUN4RCtXWUNnQkFBWXRYUDU1UzZPY3hhamFGOFp3QkFCQUQ1ajZqV29aTkx5NENQRXdDSUFHQ2VlaDFLM3hmd0xrUDE1Z0dBQ0FBeUdTN3NQbDVxVktUaXlpZ0E0QkFBdzRYZE5Vb3Y2RGRTSCtWYkJBQUNBRWhrZUkvdjRGS2ppcnpVUi9IeTZuVUFjSlFEUGd4bEtQM3VpUE1NbzJZQUFQOEF2bVM1czh0UytxTE9iUXpEZGdFQTl3Q1NtUjRXWnVQbkhNdVBBTVpyZ2EvUGNDMnJBVUFyQU90Q0g2WXF2RjU2S01OYkFTb3gxaUREeGQ0OENRQWFBWnhsZlZDY2pYTzZYZFZITlFFQXJnSGNudS9EV0lTdU5rYlhVUi8yWndEZ0dNREpGOWtmN1dycmxRRU10d1M5REFDOEFyaTAwb25IdXRqOEtNOWpHTGNBQU1vY1FOQ0h1eTQ4K0ZDbXZNOFc5S3ZqWEExc2ZkditIOE80cFFCUTVnRHV4eXUwVmZ0dXowUkdEZXJWdGxITmlzNlhvSTJ0NjdwWjFvSFdBQUFYQURURzhvV3RQVE04VTBUWkNBRGxBY0F3bTN2K2pHSGtUZ0FvQndBQ2ZuQzVwcDhEUURrQXNNbjJudGN6REQzQ1dJTUxBTUF2Z0ZmdDdEbWVZV3dTUGdHRUI5QzZ3TTZlbDduNDh4RUFoQUlRL0syOVBhOWlHUDB1QUFnT0lQQ1UzVDJ6ZkFmNEd3Q0lEY0RQd2NzWnRqS01IdzBBUWdQdzNlOWd6M3NZTmhBSkFDSURxSC9TMFo0UE1XeWhBd0FJREtDRDQwZTduMkRZUkJnQWlBdGdaSUhqZWFjemJLTTZBSWdLb05JSGF2Tyt6TEFWZHlzQWlBbWdaNGJxdkswc0w0cjZIZ0JFQkZCdEpjdkVXVjVBdmdvQXhBUGdOdVFLMDhTN01XeHJLQUNJQnNBOU9wMXg0aU5aVnBJQlFDd0FuaVBPTVU5OEZzc0dUek50Nm1JVjJ3RUFjd0hVaXNsd1l1SXNaNE0wUGlmZUd3RE1BK0FUbGVUY3pmd0hXYllhQVFCQ0FQQjlac1ZOWnlkK2xXWERma1VBb0pLR1pRM0E0MDh6L3V2UyszeFpmZ2NxbndPQVN1cXFmalliQjhDcmFkVGN4QnV1enB6cGhZR3hBS0FTMWR2enEyb0NVS2wxdzVvUDNnSnE4YXNiM3FuUDhBa3pQejVab0dubVMxaktGMllGQU1kUmZWdFhrQ1lBUDk0YldKaDlJZm5BNWpYL1dyZmp5TGtzM1o3YmxNSlV2MDhBd0dIdXFFNGdSRHNBWTFMTTlOYndwbFlBY0pRcnFoTm95Q3NBbGtkRUtPejNoMGtLNEp6NmZ5RnVBVXhqS21BTEFIQVU5UXRyV25FTDRCaGJCYmNBZ0lPb3Y2bWpQYmNBNkdHbUNyWUJBQWRSdjhHbUQ3OEFKck9WTUFrQTdPY2wxUW1NNVJmQUViWVN0aWtDQUx2cG9EcUJXZndDb1Bwc05ad0lBSGFqZXM3YjhZdFh5eGhBREdNUkV3REFUcjdWK0JlMGpBRXcvZzFRS3FVQ2dPMXNVcDlBS3NjQXFBVmpGUnZrQUlDcjM2T3plUWF3aHJXTVQxc0J3RWFLYXFudXZ4cnhES0N3Tm1zZHB3T0FqVERjWTkyWmF3QXNyNXY2K1N4MEFnQ1VUbC8xL2IvQ040Q2N5c3dDL200RmdOOGxpK0cxT3gveERZQmVaaTlsMzFzQThHRG1NT3ovQ09jQXZ2RmtyMlY0QmdDVVREckRjM3ZkOGpnSHdQRGU4ZC95MEg0QStDM0ZUekRzWHVXbEd4d0F1QkhrUkRVOVB3U0FYL00yeSs0bmNBK0FWamhWejRoa0FQZ3ArNzFaZHAvRVB3QnJHNmNLYW5rdUJRRHU1V09XQnl3b0ZlL3dENEMrc0RoWFVrdmZWQUNZelZhMG5pUUFBQnJ1YkZFdC9kUEtPNEM3RGxjOVV2b3c3ajFPQ0FEWEgzYTZyRzQ5NDA2V2F3RC9yTlo3L3BkMmJyazcvR2ZXejB6TGVTRUEwRkV2VjBvYlBPeGpCdzhqdWI1cGdwdkFBSDQ4elZlNWUrenVNdytlQ0wzOG40bXQySGZlbWNRQVFJdGNySzZsK1pSUHY3ancreFZDYS9iV1NTMFpYa3ZITTRESUVyOTlhNFYzRy9US3JMY21qK3JicGI1ek8xOGxDb0NTeCt0Q2ZPcTE2alVzWnVia01RTjcvYWxKSFgvV0QwaWVBWVFyT3NRL1R4Z0FMbndOMEI2ZUFWVFc0d0RIa0RBQTZHZ2xBQ2lSSDNRNXdCTUNBYUJkRlFEZ3QzeW14L0U5UnlJQm9FMGVBUEJyVnVwd2VHNXBZZ0dnQkRjQStDWFRkRGk4YUJJTUFIMWtBWUNmRTZYOTZEeS9FUTRBTGJJQXdFOXBvLzNvcHBCNEFHaXROd0Q4bUVETkI5Zmtyb2dBNlBOQUFMaS9MS0w5RDhBSkVoSUFuUXNGQU9ablp6aklMQklVQUdWM0FBQmFwL1hRdWhRSkM0RHl4MXFrQnpCSDQ1RTF5eVZ4QVJEdHFDTTdnQkhhRGl3a2s0UUdRTmVIU1E2Z2s2YmpDdnlhQkFkQXRDbElhZ0MxdFJ4V3ZaTWtQZ0RLR3VFdUw0QTdXcjRGdGJ4TTVRRUFVWHAvaTZ3QTBqVHNyL2R0S2ljQWlJNzNraFRBSnBmMzVqMjNtTW9QQUtLRFJpNEtORi9HSzRBNFYzZldOdDNKUGZFTzRONm53QXYrUmpUZnU5ZVM3OWtuWVRhQWNhN3Rxdkk3eFZUdUFCRGRqbStuYy9kcmpOam8xQjlLMHdFODZjcU9mR0t1R3ZCN2t3TUE5M0o2WXJCZXpROTY5dTB2bkg3VWlOa0FHamkvbTRxdi9tRElnZ01mQU80bFpXNUhUNDI5ZDI4K2J2VTNMdTNjWkFCRlRoOXBxMFZacnBWVkhBRDNrcnRobE1zTEpBRlB6OTV6eStVOW13eWdjTVhBNnV3N3NEUjg3WlRMUnlZVWdQdkoyRGlqVDRoVC8rMGY2VFYreVo1TDJ2WnEvZ1VoMWhQL2VLcW0rc2FyOUp5K0xWdkxrZTFKVU1sMjRqRFg5Nzgzb250anRjY2tWMnM3Zk82R3RIdzlkbGhHdDRkbjdYMXZaSnRnT3hkSnVUY2JFMy9hU2pMbjlwbTlxK2U5TW56Z3MwOTFmcUo1by9xMUhubThVOFRnc2EvTldienEwNzNIemw3VGNVOWwrM3lBdk8rU2Q2OWJNbnZDMEdmYTllZzNLbWJXNHRXYkQ2WmV2RU9JYWRFQ1lEM0tKMzdXYXdDd0VPVVRQd3MxQUppQzhvbWZLUm9BUktOODRpZGFBNEN1S0ovNDZhb0J3S01vbi9oNVZBTUF0eXVvbitpNW91bTI1ZVVvb09oWnJ1a2NWRzhVVVBUMDFnVEFKdzhWRkR0NVB0cE9RMjlDQ2NYT0ptMzlWeUpSUXJFVHFSR0FjaGcxRkRtSE5WK0cxZ0ZGRkRrNlhKbU9id0VTZndPNG43QWkxRkhVRklYcGNTM3lkQlJTMUV6WDVXSjB5enBVVXN5czAra0dWWjlqcUtXSU9lYWo2SlRhbDFGTjhYSzV0cUpiSG9jQThmci91SjUzSk5ZNWpvcUtsZU02UDZ2S0J4Y0lDNVgxUG9yT3NjUmFVVlpSWW8wMTRnRTE0WW1vckJoSkRGZU1TZWN2VVZ6KzgyVm5BNTlNRTVtWWp3cnpuUHpFU01YWStEMmZrSXM2ODVuY2hBRitpZ254YXQzbmhkaGxXL2FWaUsyN1dVL3RRM1NLcldjb1hDdjVEN1lzaTMyaFQyc3ZwY3hpNnpiaUFRcWlVd2JZS085MnJtWUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNBeGdFQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFLQnhBSUJJREdEOURFU25yQmNTQUdKb0FBQUFBQUFBQUFBQXVFZ2lHbUoyRXJrQ2tJQ0dtSjBFcmdERW9TRm1KNDRyQURGb2lObUo0UXBBRkJwaWRxSzRBaENLaHBpZFVMNVdxMCtqSStibU5HZW5LK2FpSmVabUxtY0FXcU1sNXFZMWIyY3NrOUFUTTVQRTNTbnI4R0oweGJ3VWgvTjMwVUk4Mm1KZTRqbThhcVg2UmZURnJGeXN6dU4xU3kzeTBCbHprdGVDenl2WEJxRTE1bVFRcjljdWppNUFjNHhQd1doK3IxN3RlQlg5TVRwWE8vSjgvWExJUVhUSTJCd000ZndTOW9nME5NbTRwRVh3ZnhPRGUvVFd1K2lVRWJtN05kcGRqQnRaZlBzdjNaWjh4WXFXNlJYcmxlUnRTL3Y3R3RHci93TUl3amxpVEdCdjF3QUFBQUJKUlU1RXJrSmdnZz09XCIiLCJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFnQUFBQUlBQ0FNQUFBRERwaVRJQUFBQUEzTkNTVlFJQ0FqYjRVL2dBQUFBQ1hCSVdYTUFBQXplQUFBTTNnRVRVQkI2QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUIzZDNjdWFXNXJjMk5oY0dVdWIzSm5tKzQ4R2dBQUF3QlFURlJGLy8vL0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUN5TzM0UUFBQVA5MFVrNVRBQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdkSGg4Z0lTSWpKQ1VtSnlncEtpc3NMUzR2TURFeU16UTFOamM0T1RvN1BEMCtQMEJCUWtORVJVWkhTRWxLUzB4TlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBZ1lLRGhJV0doNGlKaW91TWpZNlBrSkdTazVTVmxwZVltWnFibkoyZW42Q2hvcU9rcGFhbnFLbXFxNnl0cnErd3NiS3p0TFcydDdpNXVydTh2YjYvd01IQ3c4VEZ4c2ZJeWNyTHpNM096OURSMHRQVTFkYlgyTm5hMjl6ZDN0L2c0ZUxqNU9YbTUranA2dXZzN2U3djhQSHk4L1QxOXZmNCtmcjcvUDMrNndqWk5RQUFKakJKUkVGVWVOcnRuWGVBMVVUWHhyUGNaWmUyaXl4dDZVdVZSUkJXQkY1QVdCQUVWSXErSWxMMVU2cUlLQjFVVkVTS0lxS2cxQmRCQVFVVWxGNVVxZ3BJVllvZ1NKVzZkTGEzZkhUMkp1Y2tNOG5rM3R6a1BIL3VuVGt6eWZsdE1qbHpaa2FTTEZCWW02bkxkNTNMbEYyblN6dG54a3B1bDZmVHNtVFp4ZHJkME4zK2I3bFhkcm5TZTd2WS9WRWJaWkk4enJYK2o0MGo3OS9RUUpmNnYzc3ErZjZtTXA5enBmL2JrK2Z2S0xtZUMvMWZQWkVjZjFjWEs3ck8vNFdPazl1ejZIQmh0d0V3azV6dXBhMjUzZVgvcWhua2MyOHQ4YmdLZ0ZYa2NhVW11c24vTmNuZjdnNEhqQ1ozQStHQXR1NEI0Qzl5TnhRT3FPOFcvMWNnWjdzN0hOQ0JmQTNyaUV2Q0FRUEkxZTRPQjR3alQ3czdIRENYSEkxcWtoc0FXQUZjZVBkSWQ2aUtIZ0dEWEFEQVN1QzYzZklSSEVuaEFBTEE5ZUVBQXNEbDRRQUN3T1hoQUFKQVI5dHlFd0N1QmtCZTZpRUFYQTJBdzhNQkJJQytCaEVBN2dZZ3N4MEI0R29BSEIwT0lBQ1lzZ09pQ1FCWEF5QWZpU1FBWEEyQWM4TUJCQUNqbkJvT0lBQllOWmtBY0RjQThtQUN3TjBBT0RNY1FBQ3dLeVdXQUhBMUFJNE1CeEFBUERvYVNRQzRHZ0FIaGdNSUFENHQ4eEFBcmdiQWNlRUFBb0JYZ3drQWR3T1EyWjRBY0RVQURnc0hFQUQ4dWhSTkFMZ2FBRWVGQXdnQUk5cWVtd0J3TlFBT0NnY1FBTVkwaFFCd053RHlFQUxBM1FBNEpSeEFBQmhWU2dNQ3dOVUF5SmNxRVFDdUJzQVo0UUFDd0lTMjV5RUFYQTJBRThJQkJJQXBUU0VBM0EyQS9BWUI0RzRBTWpzUUFLNEdJT0REQVFTQVdRVjRPSUFBTUsxalJRZ0FWd01nNzhoREFMZ2FBSGw1TUFIZ2FnRGtxUVNBdXdFSTRIQUFBU0JFZ1JzT0lBREVLS1VoQWVCcUFPUkxEeEFBcmdZZ1VNTUJCSUF3QldZNGdBQVFwNEFNQnhBQUFqV1ZBSEEzQVBLYkJJQzdBWkE3RWdEdUJpRHd3Z0VFZ0ZoZGZvQUFjRFVBQVJjT0lBQkVLOERDQVFTQWNLMElKZ0JjRFlBOGpRQndOd0FCRlE0Z0FLeFFSd0xBM1FBRVVEaUFBTEJFZ1JNT0lBQ3MwYkdpQklDckFaQjM1aUVBWEExQW9JUURDQURMTkkwQWNEY0E4bHNFZ0xzQmtEc1JBTzRHSVBWUkFzRFZBTWlYS3hNQXJnWkFQbDZVQUhBMUFQTE9NQUxBMVFESUs0TUpBRmNESVArUEFIQTNBRFlQQndRbUFKNjh4YU9qaStmMUJBUUE5ZzRIQkJBQXdlV2U3RE41NmZvZEI4OGszT2xwd3BtRE85WXZuZHpueVhMQk5nYkExdUdBZ0FBZ3BFN1hNWXYycDJyZTVQMkx4blN0RTJKTEFHd2REckE5QUo1YWcxY25zTjdwaE5XRGEzbnNCNENkd3dHMkJpQ29XcDhsVjNodjlwVWxmYW9GMlF3QUc0Y0RiQXhBN1lseFJ1OTMzTVRhOWdMQXZ1RUF1d0lRTmZSdmMzZjg3NkZSZGdMQXR1RUFXd0tRdDh1R1RQTzNQSE5EbDd6MkFVQWVTZ0F3S3VickpGRTNQZW5yR05zQUlEOVBBREM5K1plSnZlM0xhdHNGZ05SR0JJQ3VHcTBSZitQWE5MSUhBUFlNQjlnS2dPYWJyTG56bTVyYkFnQmJoZ05zQkVEVFhkYmQrbDFON1FDQXZDdU1BTUJVL0Z0cjcvMjN4VzBBZ0x3cW1BQ0FKM3I2WDdQNjNsL3JIK3gvQU9UcEJBQ2tlcnM1NzJQQ2xqWExGODc1Yms4S1Q2WGQ5ZndQZ055TkFGQ3AwSmQ4LzhyTEJ2MG4rNTBueC8xUFRiaklYdlhMUW40SDRId0VBYUJRMjBzOE4vQmtmK1ZBS2tlN241ampocGZhK2hzQWVTSUI0S1hRU1R4M2IvOUw0SlIvTkh2NFlGS29ud0hJaUNBQXNxamNUcDdvL2tkb3hzZno1NWhuWnN2NUZ3QTVsZ0M0cCtldWN0eTUwMDAwTEVWOHcycm02blArQmVBVkF1RHU0MzhpejQzN3VhQ21zYUJQMlYvRHQxNERoV1VhQlBnVmdMSTdlTzdiaGx4NjlvWXoyOXBSOWlZeVYvd0N3QThFd0MzVjRFcjQyUmF1YjNFZ2U4cFF6UnZsMS9nRmdKVUV3RTAxNFlyOTdjM1BZbk1XczczNFp0ZUxqeVlBL0FkQXUxU2VtNVpTa2NsbzJEL3NzL01kSmFrbEFlQTNBRjdqeS9rYXhtajJQMm5zMzVUOXBhQzFCSUNmQUJqSmQ4LzJoN0lhSHNaaDlhT2dxR3NFZ0Q4QThFeTNMSGFTbDJka1B5dDdWd0xBRHdBRXplYThaZXM1akgvSVkzaCt0dFp4QklEUEFSakhlOHRlNERCZWxHdUcrRE9wMEVJQ3dNY0FET0pPNWNqTlkvNExMdHR2U1ZLRmRoK3QzVytSVGdKTnJuQTVBQzlhbkVYVGdzOTRGMHN2dGkwOUFWVCtTZU1Hb0FsWEEva3l1SXludHlJQWZBbEEzVVQrbDJaaHZpWTRrNHNUSHlFQWZBZkFBeGY1L1grZXM0M3huUFl2UGtBQStBcUE4RU1HUnMzck9SdnB5TnZBb1hBQ3dFY0F6UGZGL0hrTDdoYm1Fd0MrQWFDbm9lOW0zbTNXR3ZFMzBaTUE4QVVBTWNtR0FIaWZzNWs2L0Uwa3h4QUExZ01RZnRCWTVPeGp6bmFxR1dqallEZ0JZRGtBY3cyR1RpZnpQbWlNTkRLWEFMQWFnQjVHWStkZmNqYlV6bEFyUFFnQWF3R0lOcnp2eTFyT2x0NDMxRXBTTkFGZ0tRREdFekFUK2ZiL2xMNzNEV2NFQUpmYW01Zy9yY3ZYbE5IOTVUb1FBTllCRUg3YUJBQnZjRFZWTk1OZ00yZnlFZ0NXQWZDcENmL0xxN21hZXNOd081OFJBRllCVUMzZERBQVpaVG1hQ2pwa3ZKM3FCSUExQUFTWjNQMXJFa2RiRFV5MDgzczJBc0FTQUxxWXpLSkxLc1RlMWpkbUducVpBTEFDZ0xEelp2TW8yYWNESGpHMXlmREZjQUxBQWdBR212Vy9ISDgvWTFQWjk1aHJhQWdCSUI2QW5HZk1wMUp2Wnd3R0RUSFp6cmxjQklCd0FGNFZrVXovRVZ1OE9kRnNPNjhSQUtJQnlINWNCQUNaVFJtYUtuWENkRHNuUWdnQXdRQjBGck9lSnFHWmJrdVJCd1cwMDVVQUVBdUE1NkFZQU9SVXZXNUY3QmJSekNFUEFTQVVnUGF5S0dWb2Y2WFgra2RNTSswSkFLRUE3SmJGYVg0azJreTJOOU1FTmJLYkFCQUpRRjFacEM1MVJVNEVyTEJPWENOMUNRQ0I5cWZJWXJXaE9mQ09ydmxkaHNBbXBoQUE0c3pudUNTTDFxbFI1YjJheU45NnJkZ0dMdVVnQUlUcFdka0svVEhuemY5V3pGK3M3QVBWbi90OGQ2Wnc4ODhTQU1LMFJBNUFMU0VBUktsUVdpQUNrRmFJQUJDazErV0ExT3NFZ0NEdENFd0FkaEFBWWxSSkRsQlZJZ0NFcUUrZ0F0Q0hBQkNpeGRxeC9UOVdMcHd6N2JPbFJ6SnRCOEJpQWtESVJPQmxmSHAveTRmTjc3dFRMbmVON2h2dEJjQmxEd0VnUURYUW1kMlpxbjJaS254d3hrNEUxQ0FBQkFqWkVqUmhiSEdvZEhDZmEvWUJZQkFCWUpIdDY5OVlhSVp2aVI5c0E4QktBc0M4c3NkREwvK3hXa2wzclM3WkJJRDQ3QVNBYVVHcEFGZDFjanVybmJVSkFYVUpBTk1hcXJhY1dGK3YwdjBuTFBOcDZ0a2plN2YrY295dDhGQUN3TFRVTzNXa1BxNWZxOVJoSzV4L1plV2JzVGx2TlJCVzY2WHgrcnNWZkU4QW1OWStwZDMwMWl6VnFxY0tkLy9PZHNHS0w0N21DM1JhMlVjQW1BNERxVzR4NDRaL0F3UzcvMmR3dS9tQ24yaW1rYVY2Q0FDVEtxODBlendQVzhXZ24wUzYvOEpUV0RzUGF4NWNYcDRBTUtubVNyUE1Kek1VdVNyTy8ydUthVHlqK211Y0w5U2NBRENwZmdxckhHY21qeFhsL3N3aDJudCtORTFBcS9ZakFFeHFtdkh3ZW5IOWNXRGFhWmFOSjEvUmEra1I5SmpCYVFTQVNXMVFaUEx5MUoyaDZkWXpVNXNYdWY2Zm5iL2VoenJyRGhtMmUzZ0lPemR3QXdGZ1VvcVlYbStldWxxcFJKbWYzenRGTHRzQXJSM29SN0UwMVJENUdEaExBSmhUbUxmTjVBaXUydmkvOXZIRzNxaHNRMHN5bnM4M0Fxa2VSZ0NZVWdsdm0wdjVhdjhQOCtvYzVYYWV3ZThpSlJOTHN6VVZqT3hoVjRJQU1DWEZVM3drWCszbkVhOXVEVmFYUlk0S0hjemFWdWw0NnhKRFhReEFMVytibkRzeFI4Rk9UWVpPZUFzSDk2RFp3ejZoQzU5bFhJc0FNS1hHM2phcmNWYVA0L2l2Ymd4bGxiWm1iNnNFdUg2cE1RRmdTazk3WndEenJyZzlBdm5rZHlSQVAxRmROSTVuczZldm9NYWVKZ0JNeWZzdEhzZGJmUi9raytmWVh4aGNKMDFWaGhwN25nQXdwVmU4VTZ4NHEwT0x5bExDMkV2ekhRZTcxMGdVa1FEUTFHRHZWd0J2OWQrQWZxMURTNDlXWlFEd3RUYkp6RmNFQWNBU1grRWRBL3dPOUdzMldycVhzdWgwdnRhZ2c4WkdFQUNtOUpHM3pRak82dENNTUw1ZGJHdGwwYjU4clJYamFvMEFZTkV3YjV1Y1o3T1drTTBCMEpTenQwQW9ZUmdCWUVyOXZXMXlic0xjVERiM0Npak8yVnNnT2FnL0FXQkszYjF0THVDcjNROENBRC9aYjVReS9aUzN0NytxVyt0T0FKaVNZb3ZZdUNDdTJ1REM4aVEwcVZBMUpjaWIwdm1qdXJYMkJJQXB0VkFZcmN4VHVUQzh1UlMyZjF0SjAzTzVpOVNOdFNBQVRFbDVlaGZYb1h6OTRibWczNUFNUC9XcGhMejdmQzFVTjlhQUFEQ2w2c3JwK1FJbUkzTjRwbWFzZWpJb2lyTzN3SmJXMVFrQVU2cGc0clBxRVN3ZEpBbGFXcDRIV0V4V202K3p3VUIrZUFVQ3dKU0txRlpvNUdhdDZzRjNsOXNFdkFRbUErVUc4SFUyR2pCUmhBQXdwVkJWc3VXbnByNEJiMnVHOGt2QUF4NFV4cG1CMWxwdElTT1VBREFuOVFFZVQ3QlZMQld2bGVwOXBLRlg0WXFid1ZLWCtBNkJCVmFpL0NNUkFPYTBYSjFwWFpqcEJiQktaN1hQaEN4cDRmMnc1U0Zjb2VkZ1lJT3E1UVNBU1FHWmRxc1k0ak5CTTNUWCs1eVoyQ1QvOVpKaE5VZitqWllaejlQVlZvQ0JjUVNBU2ZVQUxDOE1OY0lOcEpSVENacS9KK1EzRndhU2V4QUFKdFVROHN1UGVwOEM3NGhhRi9vT2UwK0xRbkhIaGdTQTZPL0FXOTl4bW9rQllWOEpXeGNleDM0SzhHelpxcTlBZDI4UkE2L3lQL2tNWGtQVTBYOThHVDFOb2RwWEpRTEFyTFlpbmxtTUxMcktOVlRvK1NJWnNXemR6QVZtb0c4bEFFeHJGdWFhYThOS3Frc1hHSFplRnFzVCtZeCtyVnpYTEFMQXRIcHEvSGV1Zk5acjRVYm9JeE1TWk9GaVNrSjVHYTdia3dBd3JXaE43MXo4ZVh6M1J3b1hLVnVsWnJQMzFpWEpsbWlpZmhaS1cyUjdnR2dDd0x4T3lmN1dyR0NkTGo2T2JFWnpTaUlBekd1TzN3R1F2OWVPUEhWUHhMWWhJQUFFcUxQL0FaQzNhVXdLUkN4RXEzVW1BQVNvakEwQWtOTS93b0tQamY3RmE1VWhBRVRvcUIwSWtJKzBoZDREajJzZE9IOVVJZ0JFNkF2Wkhyb3dRZkVpQ092NHAyYUZMd2dBSWVvbzIwWi9UdXJWOEVhcWNIQjR5ZGFmYmsvWEtkMlJBQkNpQXFteXJYVDVNbHVIVWdzUUFHSzBTQTVJTFpJSUFERjZKakFCZUlZQUVLVFFpNEhvLzR1aEJJQW9UUmJ1bldzbkQvNjVlY3NWS3dHWUpCRUFvbFJIcUdkT2Z0MmowdTM1bmVKTiszNmZaaEVBZFFnQWNUb29McVEzVDNuaVFPRUJmMW5oLzRNU0FTQk9id3Z5U3Z4NGNPL24ySjNpQVhpYkFCQm92MHltRUtkc3dQYnU5dlNORit6L3pESUVnTWdHRm90NCtyK3RzYUtreERLeEFDeVdDQUNSRGRRU01QYlRQc2czMjFTaEFOUWlBSVFDSUprK0JUQk9OejNySTRIKy8wa2lBTVFDME1Da1I2NHdiTlh4dGpnQUdoQUFnZ0dBdG1EamtQNkI0emMwUTVUL2Y1VUlBTkVBUEdIS0kyekpXYmtQQ0FMZ0NRSkFPQURTRGhNT1djdllSa3lLRVAvdmtBZ0E4UUNZbUJOTVl0NnFxWi9ONWdFSmdDemZhYnNNTytSTjVrWkNUZ3J3LzY1c0JJQUZBRWgxaklZREwzQk16UFlYRUFTc0l4RUFWZ0FnVFRmb0VaNk5Yc0l1bXdaZ3VrUUFXQU5BZ1F2R1BNSjEyTndvMDhuREJRZ0Fpd0NRdWhueXlIYXVOcXFhQmFDYlJBQllCVURRWmlNZTZjTTMxalQ1RHRnY1JBQllCb0FVazI3QUpiRjhiU3czTitVWUl4RUExZ0VnVFREZ0U4NU4zOTh3QmNBRWlRQ3dFb0M4L0FzRnozTTIwZENNLzQvbUpRQXNCVUNxeGIxTWFDTm5DMlpHZ2FtMUpBTEFXZ0Q0ZzdXek9Sc29id0tBZmhJQllEVUEzTmxoOHpqdEY3TkpIaGdCZ0NqaUdKOVhlSmZvNVRQcy8yTVJCSUFQQUpCcTh5M2xXTVZwUHR5by85TnFTd1NBTHdDUUJuRDVaVDJuOVllTUFqQkFJZ0I4QTBEUUVoNi9IT0MwM3NtZy81Y0VFUUErQWtES3M4M0NRTkJvWS83ZmxrY2lBSHdGZ0ZUd2IrdnljNVlZOHYvZkJTVUN3SGNBU0ZFYys0ZCt5bVU1MjJrai9qOFZKUkVBdmdSQWVwQjkwbTRubCtGbVJ2eC8rVUdKQVBBdEFGSjk5cTJocS9MWW5XY2s2YlMrUkFENEdnRHBLZWFwWVo0dGV5T1NEVXdCUHlVUkFMNEhRT3Fjd1JxaEtjVnV0RGUvL3pNNlN3U0FQd0NRMnJBdTQyRFBDbzA0eSszL2xEWVNBZUFmQUtSR1Z4bFhCaklmM01DZmVIeTFrVVFBK0FzQUtlWU1tNWYrWUZ3WkVNdTk5T0JNakVRQStBOEFxZXdoa1MrQm5QdDUvWCtvckVRQStCTUFxZEIyTmsrMVlMQVZzb0k3NDd5UVJBRDRGd0FwN0VjbVY4VTMxclhrK1piWC96K0dTUVNBdndHUVBDT1pYdHpKclhUc01CdzRybGdET01JakVRRCtCMENTbXNVeFJRTTZhQnJKOXgybi84ODE4ZGtGRWdBNktyYVJLV0F6WHVPSlhmODRwLy9YRlpVSUFMc0FJSGxHTWIwR1RtQ3ZnWkQzTS9qY256SGNJeEVBOWdGQWtoNW5lZzNJQzZIUDl2Q0J2TnRDbkgzTXB4ZEhBRENvT09OV256dDc1L2V1V0dZMDkzTFFSVVVrQXNCdUFFalMwNHo1NGluTFIzV015WG05UW81OFZWLzU1bC91NE8rUkZyNitNZ0tBVGJsSHM2OGJ5emdmbnlFYlVjcUluQklCWUU4QUpDbDZyV3l4ZnE3b2g4c2lBTmpWNGJTVjdqL2QzaThYUlFCd0tPOHd5NDZZdWpnc3IwUUEyQjBBU1FvYmROWUs5NThkSE9hdkt5SUFPSld6OXduUjdqL1JPNmYvcm9jQTRGWkkxME1pM1grb2E0Zy9yNFlBTUJJZGJyTThYWXozMDVlMzhmajNXZ2dBWTRyc0srQTBzSjE5SS8xK0lRU0FZVlVaWTJyMzU1TmpxdGpoS2dnQU02K0NKdE9QR3ZQKzBlbE5QUGE0QmdMQXBFcDNubk9Lei9tbjVuUXViWi8rRXdBQ1ZMSG5kK2NZVTMyKzYxblJYbjBuQUFTcFlMMHVZeFlmUUxjWVNqdXdlRXlYZWdYdDEyOENRS2l5VjJ6VmE4aklDVE1Yck42MDU5aXhQWnRXTDVnNVllU1FYcTBxWnJkcmp3a0FsNHNBSUFBSUFBS0FBQ0FBQ0FBQ2dBQWdBQWdBQW9BQUlBQUlBQUtBQUNBQUNBQUNnQUFnQUFnQUFvQUFJQUFJQUFLQUFDQUFDQUFDZ0FBZ0FBZ0FBb0FBSUFBSUFBS0FBQ0FBQ0FBQ2dBQWdBQWdBQW9BQUlBQUlBQUtBQUNBQUNBQUNnQUFnQUFnQUFvQUFJQUFJQUFLQUFDQUFDQUFDZ0FBZ0FBZ0FBb0FBSUFBSUFBS0FBQ0FBQ0FBQ2dBQWdBQWdBQW9BQUlBQUlBQUtBSDREdWtTUkI2aDZRQUpBc0ZRRkFBQkFBQkFBQlFBQVFBQVFBQVVBQUVBQUVBQUZBQUJBQUJBQUJRQUFRQUFRQUFVQUFFQUFFQUFGQUFCQUFCQUFCUUFBUUFBUUFBVUFBRUFBRUFBRkFBQkFBQkFBQlFBQVFBQVFBQWVDdGpNTXJwbjM4YnI5dUhUcS85dFlIbjgvZGRvVUFjQTBBS1J2ZmU3cFNxUEtpSXV0MS9mSTRBU0FNZ0NQYUpucXlYZmRDVFNQVkROekozU01hNThJdGx1czJMNEhGU2p2TXdCaU9aMUFCeE1ZRVJ3Q3dVOXRFS2JhYjFGSFRTQmxlNzU4ZEY2TjdjZUZkZnRFMzlDMVd1eUY3WjM1RlRHUTc1UWdBMXVyWTJNTnlqMUx2MDdSUmdNLzlHNXNIczExZitiR0pPcWJpY3lCVnMxOWw3czRReEVTc00xNEJDM1ZzakJidzVndmhjbjlqaml1TS9DUkoyMW9yck9aQzVnNVZRU3g4N2d3QXZ0Q3hVWS9sSG5YVE1aTE1mTGQzTk9hOHhxS1RNclRzZlluVjY4TGFvNk9JQWM4Wlp3RHdzWTROejBXR1lWSmhIU1BuR0c5MjBxQmcvcXVzdTEvRDRrWE1ZREZXQUQ3akdrVUVIZ0JEOVl4OG8yOWpnNTZOUTJ6M2VtMTVRNWVaNDhOMDNPWmpXSzFkakFBMFErcFBjZ2dBcitvWjZhaHY0M1U5R3p0WTduUjYveUNqRjFybk5HcDFFbFpuRkp2LzQwT1JKK001aHdEUVNjOUkvZ3hkR3lYMWJLeGo2RWpjb3lhdXREaUsyT2xzWmdZM3N2dzlVcjJ4VXdKQnpYV3QvS3BuWXB1dWljWDYvZGhhMHRTbDVwcVBHYTZMMUFpK3hBUkFaNlQ2VktjQThJaXVsVGYwVEx5aGEySzIvb2RrRHBQWEd2UXBZbmtzVm1NK2kvOHpJeEY4empzRmdNcTZWcXJxbWJoZjE4UkV5LzJQZlpkcnhMci9qd1dBMzVIS1RSd3pGMUJNMzh3SmJRdDc5UzJNOW9IL3BhQXBzSEVzcWh5WnlYQjcza1lxLzg4eEFPVFdOek5GMjhKd3lleGJaRjBPSVpjYjlBMWYvN1l6M0o2SGtFanlCYWNBa01wZ3BxVzJDZjE1RzZtWHBvRnpSUVJkYjloaHJpZlVjUDNiOHk5UzlYSEhUQWVmWXhsaEo1bVlUNzZwNXpYSFdjMkVYWENkZEo0eFNtMzkyek1GcVRyRE1RRDh6V0puaFphRnNRd0dudEl5OEtGdTlaQXlEVi80djlpU0h2MkczdU9aenN0Mlh2ZjJ0RUE2ZE1reEFQek9Za2Z6Q1Y2WHdjQ2pHdlczWk5lc212T0ZuMDdlRGtXbC9yT2lZNmgyUThGYm9CQURWdnBydmJ1VGlPU2tQT21jaktCVkxIWktheGhBSTIxWjlUQmUvM0pwcllwVkppaisxODZQS2FmWlV2bDRqa2lsYnBSN0tWTHhTK2NBTUkvSjBENlpQOWFlVlJYdytzOXFWQ3UwREJveUxDcWsxVlJYb01wclNObUNlbEh1SG5DOTBNdk9BUUFhNWFnZnMyTTRadHVnNzhwSTdsSFd6UmZIS2JqT1NjM281US9xQ3V1eHNsdDA3azV4N3MraWdBTmdORkJ0b09vdnNleno3VVdnTVYwdXJQcUpuR2puUGNQUi84KzBBUnJ6aHNWUzFma0syRFBqSFdQNWtyTWRCTUJnb05weTlkZ0tmZWJOVkwxWFA0RjZrb1pVNzRNUDU1WnBkWHVCUnVMSUxQYU1wUnFHUWx3NXJqb0lBT2d0ZDBnZG1KbUgxVytwR2g5OUR2VUVTU3U2bUljM3NxK1hwM05kTWV4dUNkSk9WYXJGLzFFYmNBQThCMVE3M1lvNWtxUE91ajA1RGVySkViajZlMmpYWDlYcmVFLzhzdFhaQjZsNWthSmZhU2FuQi9GL1BRWWNBRTJCYWxmZlp4NHZ6MWNXakZhL0ZHN29EL2d6dXlEVzgyYnBlaDFQYTh3VHVzYldMYlExa0MrYjg1cVRBSUNlY2hsQWNHQXpYRjExQkZWditXdW9KeHZCMmhPd2pwZGdXQUY0cVF4V085dmZ6TW52RVZxZy9SZXU4MS9aU1FCVUFNWTQ4Z1gxSDk4Q2F5ZUhLY3N0aGhmamdDTzZ0Q2pKeUpOWno2blFlcllFYkptWlJycFRDakpBbWVjb0FJQVBwUHl5WEpabFpBVkZ5b0t2eWo5QVBRRW5hbWRqL1g2SVphWmVsdXVnczFjWFdmK2JwVGU1ZzZTNTRoMEZRSWk2Vmlud2NNR1RVTzJYVk5OeHNyd2M2Z21ZVW9BdHVaRitac3ZYL0JXOThGSE1zTVZ3NTBzL0t6c0pnQVNnVmlWd3RjZzBLSkU3UHhCWitSSHFDUlJLWElkMSswbkdqSDM1YWN4Q1RmV1VRd2p5SVhnS3RZNU1VbnpyS0FCT3d0R1JqV3dmdjJ1Z3dSN28xNkZBN1RleGJyTXUyWkFQWUJOUndlcUJPcFowOEFWbnBsdnVSRWNCQUYxbGcrc1BCdlhVZXg1Z2ZWOHZWYUZVV2Y0TjZzbHJISy93QjJWbXhXSlh2a3BWZENwU3NqVlBrUHk2bnBNZEJjQXZ5Qk80Q3NzOVZTZVVOc2RtMzE5VVY3NkdSWE5Ic2dNd0VidHlkUkxpV2VScGtUZU5MMTkrZ2JNQWdDYTgyMENqTzBrYW9LcjhwNnJNSjlmLytnZlVrMmZVVFMvSGVuMllIWUJ6V0pKUVhYWFora2pSOWJEcDg3RHBQRW5PQW1BMjh0OEt6UEpYVjFWV0R4VnY3Q2F4RCtySlkrcW0reU9kcmlWenFBbGlKRVQ5cHY0RUtUb0l0andMTHQxZWRoWUFVQ3p1UmdMWWRpQytwc3FEZTBKWnBNaU52eDVrOUdwMXBOT2Y4QUF3SGJ2ME5hcWl4NUNTVmRnblNTUXcyeUNnQVJpTy9FdWtodXBmZTZvcVV0WUp2ZEhSNm9uQWJPYmZBTmV0WUlrQndFei93MGhSY04xTEdyenBUWGl5d3dEb0I5UjZENWtqVUk3azFkK0tOMVBsVGtFOVVXL0hnSzI2elNkekNjc1FiS0F1T2hJcENpN3pSTFpPMHMwaUREUUFnTUdlTkJiOHdsTS9LOStCbzRWeFVFL0NXT05zR3NsSG9OcGcwV0IxMGYxSVVYQjZ2eTljZHJIVEFJQkM1Sk52L0FEc3JSTVVwNU1QWHVubW42K0FBVGZWZERLeTVncU1HSENtdE4wVWtMVlRDUzRabHNJMlNYYmptekhGYVFCQW16TGNUS21DRm94NHI2ZStxdnFPNzM5cmtoL3NpbXArRjFzT05vTVBBRFN0SFVoQmVZdDk2Z0ZaTC9PQzdEUUFvSFY5QzdHRTJKZTlxaTZCNHNBM0pnallSbHJZY3BBZGZBREVZZGUrVlYxMkIxSzBuN29vc3R4cG1lTUFLSTJHVVlHdFl5cHFKOXZmeVJvQ0IrWjdsZWtjV0JRL2hROEFkSG43U3ZicG5jcHNUOGJyQTlSVXh3R1FENmgxYXdmV0djQXZYak5uRDJEaFhuRGViUlBiTS9aV0tJRkgyTWZkYk1adm5ydURWNjlVUjNqdThFWFphUUJrUWgvak85RzR5WndzVlUraGNZSThMTE16MkZ4K05DOEFqUkJEbjNJa0VLakdIVXZnY2lzY0I4QmxxTmJ0akRvZzVhNnpWcWcwWjRMR1UwVTFpLzREMHVYYXZBQThneGlDSnFBemtaRm5POTFwenB1S1NITWNBRWNsL0VIZlJmMUwxbDIvWDFEKzJGSWp5MHk5cGNvMHBNdk5lQUY0Q1RFRTduUC9NbHkyWUNaVGVJbGxkOWtBQTJDbnhoY2JsTjE3VkdQd05mM09MK0NDdW84WnczSnRlUUZBSWpZMzV6UlYraEVwck5nczVoKzQxR3JuQVFBR1BHOW5TcC9XZkZuK3Bab3JPcXM1MW41WDBUSzJKcXdITHdEREVFT1BnUkgrZkhCaFJRNGh1TGhKS3BEbVBBQ2dnSHpvblIrajFiODlqMDhqM3B1QkIzZGs2YXRvR1Z1cE1aZ1hnREU4QVY3MWkrdVdGQnMvdHdRTGRaT2RCd0MwOWlYaXpvK3ZxSDhyZnJlbWF2WFloM2QvcXN6eS9td2hDZ0JzSHpmNGhiMElMaHdTcnozTmVWTS9PUkFBYUsvNEVuZCsvRTVqRUpDdVdteTNYek82cUhvbGR4VDFDc0EyZjREelBKS1F4UjVMOVdjQ0M2VTdFQURvMytkdXZPODhFTks3c3lwbWsvS0grKzhacmNVeXVuOWQxQ0FRZWFoamUxb2dHNUwwemxwbWtBazBBd3dBYUU3Mlh1cFhOZldQZmJCRWtvRTYyWlIxRkMyL2ozVDVjVjRBc0ROaGtIVHZiK0RTWGxIdWFtQ1J0VTRFQU5vcnZyN1dTTDBPbG8rZFpZMWRRNVo0K3lSUmdTQXNNeHladWIrS2JET1c1U1RDMCtCa1JtU0dFd0Zvb2ZrL0NBUkVjOXlhRGtsUXhzb0xaN2s5MElwenFhU2k1VzlGaFlLcklZWitROG8vQ1JmUEVxaUNqeGw2UlhZaUFQV0FTdmRXU2x3Qk1xTnZ6Ykt1MEFvU2d5Y1EzTWVXY2lVVjVRVUEyY2RKT3NDWFJwcGxrTm9lTExEZWtRQkFYMnhaa2g1cXFuK2RBRStyTGRiSk1wSThpcFozSTEzT3pqa2RmQm03ZG13MzV6ZzQzei9pN2lNTVBpaTBTSVlqQVNpdUhVUUhkcEM2bFJWWlZmSFhYSW02Q2RXS1JkV25zVDV2NHdNQU82OHFHK3F3aG5DRnV6dkd3ZnVLdmlvN0VnRG9xempMQ3FEVjZsL0wzZmo3dVNDdHNCdjhpYTlZaFl2dVVqNkZENER4aUJuOHNGSmtXNUwzdFRMbHNTMU9BaDJBTkoyb2ZSS3dpOStORFpibkt2ODRVMzkrVG5tNFh6alM1KzU4QUdCSCtsUkdhL3dMTHlWb292bUVLSmJwU0FEaTlDSW93SUIrR1RCVDdQSGFkcnM3MkpmZkZXM1hSdnI4TUI4QTJQcWlUbmdWZVBPM3ZMZmZHV25nWmpLdnk0NEVBRnpGTlVrN1ZQejI5VDlIS2Y0V3l6RFJwNHlrWTN1NGg2YnkrRDhOTzJ0a1BGN25BN2pHN2x1L2J1SDZxQXh3QU1DOTRyTnV0TGtIZkZRZVV2NXRuSmRWZU9PSGhheDNhanNQQUw5Z1ZqWnhZbjkzOEFIbUE1ZklkQ1lBcTZGSzMydm4zTjZYS1U5Vy9zMTdPZDhJc0M4ekZXMmoyd084d1FNQU5oV1VYV3NWOTROZ2xkdUhpSUhienZTVm5RbkFmS2pTanpvRHVyL2sxb3EvS0xiMEdNZjJURWIyWVpXaU10bjluNGtsaFQra1ZldGRzRW9GallTMnpRNEZZSXJ1dzNPdSt2Y1pHUkhBc0VEUDZyM1ByRHNhaVBYNkYzWUFObUkyQm1yVitoT3VjM01rZXdENnBaVHNVQUErMEJnTTNkSUZkZDU0RDlWSnNZckZQTFBZWExJTTZ6VkhTa0J2WXhEQk9aOUwwRWp4QUtjQ0FJN0VqM2dWVVVlRHE0M1dtZWRad09iV0s5ajJMdm1adndNeWlpSW1kSTRDR1lnUFBsNkVmdG5xVkFEQUUxRzgxd0NyRjFRRzVkU0prcTRBKzZMZVd3VmIwNk85RjJ0V3pjRXM2SndLdXhtc2RITkxnZkxBRDJWa3B3TFFGcXFVeFBhV3ZTZmw0bHI0Z0pZblplWkJRRm5HQ2FHVUtNekNRaU5qeDl4cHNud1crbUdRWXdHQU5rOE1Wa1Jhd3ZVYXlhZk1sb1pQazYrbi9oNUh6eHNidzNhejBSTUxJM1MyOGtKVy9teEhYbC9iSFFzQTlDV1dWMUhtS2IxR1ZMdW1nTnVFUVdlUW82YnpubU81MTVjaXNQcjk5YXF1QWF0TmdLT1k1V1RIQWdCbDhCZGp6TjI2cSsrVVZvK0N4VXF6VCtVeXpnZ053R3BuKzBldmFub0JaSmhTdzJ4a0tyQUFLQXpVcWFnb2MxaW5qUnlxYlhuaDQ0anpBKzNYd0l4Nk51amY2alhvaWFOUDZGY0daeXlqNUhnb1BMbkx1UUNFc016R2FaL1VDUXp1NHVIZ0xORCtYTlJxeEY5NmQzcC9QclR5Y24wL3dVZUNudm9aanhBNkVZQkU5R01vcTE3UmJrTzlqWHdHWEJBWW1LV1hRczFHbmRidSszbWN5Lzh3K0VsOTFNa05MWUFXR3I3bFhBREFIZjJhSzBzdDFtd2kyeG0xWFhpSzlpelFnNDl4d3c5ZDAvd0NySS9YWkVyZkJMK0ErejBHL1BGUDV3SUE3b2l2V3BwelRmTjA3enFBWFhoMGZoQW9lVlhqSTdQQkdiem5aeHZ6dkpPWTU4RnlCZXVQaVp3RUFMaGppbnBSWmF4V0V4OHlaMnFEWDlORE5Vd1hYSVNPL3lJMUhrbHMvN0h4T1JqdjRkc09CZ0NjamxFblA0M1VhZ0pLdjRjM1dWd0xQc3BqdEl4M0JjOW55bmhINjhSNnhnVWN5Qkp3dGZZNkdBRHdJQ1gxbUdlYlJndmdRaDdZcWZELzg3NmNXaGRRYnBKcWkvTEVMeC9XcWxFMm50RlRNOWx1NFFPeWd3RUF6OThkclk2Y0Y4UmJHQUxaclFzV25RVjNZcUpPbUtIZDZxd3plM3Q2NTlNZWsyNWc5ZFRGWUtaYk9NekpBSUFyZEQ5VGwydVB0N0FGc3ZzWVdCUTdEYnE1M2xVVWJkWnR4T3dOMnhaKzNMdGxKYjJ5ZmRoZDFaanBGdjdsWkFEQWZSTm44and0aTRMcFcvQ0s3VkhZaUw2d3VBdXVtY1R1cW9rc0JxdklUZ2FnTTFOb0g0a1gzQlNjdk5PTy9XMmhtUnJFcmFpekhLNDZIY1JnY2JpakFYaUd0YzZEZkExMDVoeWU5eEowdWZmdDQvSlZYUWFUQnh3TkFMZ2pNcFJOaDUzdkZBNW5ic0JuUWVCcmRaS2JDTG5ha0ovNWZEVlczMlExMmRFQWdHYzJRSE5mMlA2S3lDR0s4QjQ3clRRbUpSNFZjTEU1VjNMNjZyQyt6WkhPQnFBTVZPY1E5QytLSEw3K0RXd1gzcnV4b1VaUEVtSk5YMnY0Qm01bnhlZ2FQZVJzQU1CUDZqT3N1V09TbFAweWJCZmV1N0c2VmxldW1YMEw1Ti9HN1N0a0lYaldDU25aMFFDQWU4VkxZQ1FOWHV6VGhPc0RxN3gyanM1cnBxNDA1aUMvcjdEam9iV0NZbzRDQUQ3ZENmeXloOVA4Sm5KRldRdnIzTHBwSWNZdnRFZXliRVQzNjVnOTdHd0Fqa0pWOHNCbFMwQ3MvTXN6MVNybDBMdDN2NVl6ZUpsaGMyVmpHcUp0dDRic2JBQjJRVlVpMldOR05manlyU1RkQlQrSi9UMUdyckxkU1lQK1I3WUR1cXN4RGdkZ0hUai94djVQUFlJdjZWbzZyMy83ZnEvQ2ZZMlYxOG5HVlZMVDlGR0hBL0E5UitnRE91bDNEMlo0cy9FM2F2cFhmTytCTXBQU1RQaGYxaHg1MXBJZERnQjBMaGl3Z09lV2FyRStLMlIwK1RWYmVuWGFGNldacjYvNnZIVFpsTlpyV1IvcmRBREFienRzcytiSkRaUWFoeG8rQlBlR05WS1R0dWdabGcrQ3FKZlh5R2FWVVFpM0gzVGM2UUNBUnkwOEs1c1hNbnU0bE4zQ2hjL3JhdVpyaERZZXUwOFdvYTU0RzdWbHB3UHcyMlJBYXdUYzFlVEpvUDdoTW5KMXlXdVZzWC85eGZHeUlPMmZqR3F6NHdHd3Z5NXYvWHBZeHpxVlN0em5rWUlpb21QYjlCbys1WWZmanRxNnl3U0FOVXBNRFpDT3JpQUEzQzE2QWhBQUJBQUJRQUFRQUFRQUFVQUFFQUFFQUFGQUFCQUFCQUFCUUFBUUFBUUFBVUFBRUFBRUFBRkFBQkFBQkFBQlFBQVFBQVFBQVVBQUVBQUVBQUZBQUJBQUJBQUJJRjRyeUNHK2xyMnlndWVTUTN5dHViWUNZQnc1eE5jYVp5c0FCcEJEZkswQnRnS2dBem5FMStwZ0t3QXFrRU44clFxMkFvQjdzM09TU2YxbEwvOGIyZWlPWkVhamJRWkFUWEtKYjFYVFpnQklxOGdudnRRcXUvbGZxcHBCWHZHZE1xcmFEZ0RvQkJpU1ZacHBQLzlMaFk2VFgzeWw0NFZzQ0lCVVBaRTg0eHNsVnBkc3FmYmtHdCtvdldSVGRVOGw1MWl2MU82U2JSVWJSLzZ4V25HeGtvMFZ0WkU4WkswMlJrbjJWc3U5NUNUcnRMZWxaSHQ1T2kxTEprOVpvZVJsblR4U1FDaXN6ZFRsdTg1bGtzdEVLZlBjcnVWVDI0Ulo0YXYvQndSTmRRaXlhYmx4QUFBQUFFbEZUa1N1UW1DQ1wiIiwibW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBZ0FBQUFJQUNBTUFBQUREcGlUSUFBQUFBM05DU1ZRSUNBamI0VS9nQUFBQUNYQklXWE1BQUF6ZUFBQU0zZ0VUVUJCNkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCM2QzY3VhVzVyYzJOaGNHVXViM0pubSs0OEdnQUFBd0JRVEZSRi8vLy9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDeU8zNFFBQUFQOTBVazVUQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEhoOGdJU0lqSkNVbUp5Z3BLaXNzTFM0dk1ERXlNelExTmpjNE9UbzdQRDArUDBCQlFrTkVSVVpIU0VsS1MweE5UazlRVVZKVFZGVldWMWhaV2x0Y1hWNWZZR0ZpWTJSbFptZG9hV3ByYkcxdWIzQnhjbk4wZFhaM2VIbDZlM3g5Zm4rQWdZS0RoSVdHaDRpSmlvdU1qWTZQa0pHU2s1U1ZscGVZbVpxYm5KMmVuNkNob3FPa3BhYW5xS21xcTZ5dHJxK3dzYkt6dExXMnQ3aTV1cnU4dmI2L3dNSEN3OFRGeHNmSXljckx6TTNPejlEUjB0UFUxZGJYMk5uYTI5emQzdC9nNGVMajVPWG01K2pwNnV2czdlN3Y4UEh5OC9UMTl2ZjQrZnI3L1AzKzZ3alpOUUFBRm45SlJFRlVlTnJ0blFkNFZGVVd4KytraHlRbUtCQlNLTExVQUNrUWxCWUpoRUFBTjdEQ2duUkVJQUZFbWtJRXBPcUNJRVZFT2l1S0xOSUZTYWpTVllwQ2tHcFFRYnFoaEVDb0labUZCREU0NTg2OG1jeTh2TXo1Lzc1dnY1VjczcndwOXpmbjNIZmVteGNIWVFPODJzNU5TazdOMXJNajdlRENCcUp3NFdEMVBUcDJUcnk4dEdlemtPSTZ3UTZmMEs3YkQwZnlGaUQycDgrYnV3ckdWTnZTaDdFQVpYZXRDUkxNY2Z6a1E3WUNOTmhmWHdBeGVBaFRBZUkyRjhQc1AySkNPNVlDZEpqdGpMblBRZmRaQkVNQmFzN0h6UCtKNjVySzdBUW9zZG9kRS8rRW91dDl1UWt3c1JTbVBlL3gwRG9QWGdLRWRNYWtQMFg0bDQ2c0JKam9nRGwvbXBkbmNCTGdoU2FZOGI4VFA1U1JBSzlndmcwWi95b2ZBVnBpdW9sMndNS1h1QWhRc1RLbW0yb0hmRldGaVFDMU1ObDBPeUNwSkE4Qi9ESFhoYlFkQUFGc1RNMmxqaHdFOE1OTXkyanhDUWNCdktuRFlEOGVWREx4MmNRbE1CQ0F1djR2L1JJUFVrMTlPUDlwejZBUEFJeTFBeHBBQU5hNGFMZ2RBQUhVd0dkOVNRakFtaktKSGhDQU5UV1dPVUlBMWpTZkNRRjQwK3NkQ01DYjl6dEFBTjd0Z0U4aklRRHZkc0RxSUFqQXV4MlE1QWNCZUxjRDFubENBT2J0QUNjSXdKcG1NeUVBYjNvT2d3QzhlYThqQk9EZER2aHZRd2pBdXgyd3Fpb0VRRHNBQWpDbWRLSW5CR0JOMkhJbkNNQ2FtRmtRZ0RjOWhrTUE1dTJBVGhDQU53c2FRUUMwQXlBQVk3elgrME1BMXBSSzlJSUFyQW5WUURzQUFoUWtUV2REQU42OFBnSUM4R1pjWndqQXZCMFFCUUZZNDd5eUdnVGczUTVJOG9jQXZOc0JTVjRRZ0RVaEs1d2dBR3VheklFQXZPaytFZ0x3Wmt3WENNQ2IrVkVRZ0hjN1lGVjFDTUNhWjVJQ0lBQnJBZ3ZtNmdBSW9KMTJ3RW9uQ01DYTZMa1FnRGV2allJQXZCbmRGUUx3Wmw1akNNQzdIYkF5R0FMd2JnY2tCa0FBM3UyQXBHY2dBR3VDVnpoREFMUURJQUJqdW8yR0FMd1o5Um9FNE0yY2FBakF1eDJ3SWhnQzhHNEhKQVZDQU5ZRXFOVU9nQUFhcGZwS1p3akFtc2J6SUFCdnVvNkJBTHdaMlIwQ01HOEhOSUVBckhGYUVRSUJXT09WVkFvQ3NNWS95UnNDc0thYXJkc0JFRURqUk0ySEFMenBNaFlDOE9iZDF5RUFiMlkzaFFDODJ3SExReUVBNzNaQVlpa0lnSFlBQk9EY0RsamxEQUZZMDJnQkJPQk41M0VRZ0RjamVrQUEzc3lLZ1FETTJ3RmhFSUExbm9tbElRQnIvR3pRRG9BQWhZbXFxMTBnQUdzYUxvQUF2T24wSGdUZ3pmQ2VFSUEzTTV0QkFON3RnR1ZoRUFEdEFBakF1UjJ3M2djQ3NDYklpdTBBQ0ZBWWlmeXZEZ0t3cHVNYkVJQTNZNHRCQU5iNHZBY0JlTlB6V1FqQUdvZnFFSUEzMVNDQVJ0QVh6Tk5XaFFBYUlmMXFnVHl0UHdUUUNqOFd5TE82UVFEZUF1QXdVRFBzZ1FDOCtYbzdCRkNES2RlMVNRZjlheGtRUUFXS2VHc1RGM0Y2RUFUZ3pieC9YNEVBYXJDbG1kWTRsL3ZDVmxSZERRRlU0UHdHclhIcjhTdExmYVZTaDhuYmY3WVJGNGpQUXM5UkFDMlRzdVN0aHBWdHhHRGkrWFFRQURBVklEaVNvSDV1akFwRlZzNEpsU1ZqdVIzVmNDb1VEZ0cweWNSdEJPdHlZMVJvVzBKT3FCc1pLNWtUbTArRkh0K21PZXcwUlVjSXdBWFhNaFJlRUFCQUFBQUJBQVFBRUFCQUFBQUJWQ0lqblNJM1JvWnU1NFR1a3JIc25OaE5LblFUQW1pVE5qNEVaWEpqVk1pblQwNW9BaGs3a3hPTG9FSVJ1YnM4VHA0R1RJUUFYRWduVHdPZWhRQUFBZ0FJQUNDQWVyUzdwRFhLUXdBMWNmTzluYXdoenZuNk9rSUFkVmtXb3lGR29BU295ZnoyRDdud3BZYUllUFNLMnUrQUFPcnd3NlBQdkVnN0RWRXpSNE5URUFCQUFBQUJBQVFBRUFCQUFBQUJBQVFBRUFCQUFBQUJBQVFBRUFCQUFBQUJBQVFBRUFCQUFEVzVoV2xtTGNBbXorSno5WmhwdmdKTUYxZmlJbi9HVkxNVklPdmgvM2FHdkplSnllYThDTHozYm8yOW1HM1dSd0ZINnI2Wmdmbm1mQmlZL1hGUUlpYWNkUi9nN011dnBtTEtHUXNneE5JcW4yTE9PUXNncm5XUCtnV3p6bGdBSWJZR2YvQUE4ODVZQUhFbm9kWVBtSGpHQWdpUlhIdndiVXc5WXdGRTFwU3FHekgzakFVUTRuUk01eXVZZmNINWVvQXZxbnlCNldkOVFjaVZ6azFQUVFEV1Z3UnRxallsQ3dKdzV2YmdGNU1oQUd0K3JKVndCd0p3NXNFSDFiK0JBS3o1dFhIM2F4Q0FOWjlXK1JJQ3NDYTEvY3RuSUFCckVxdE96NFlBbk1ub1gvY3dCR0ROM3BvajdrRUF6bVMrSDd3VEFyQW1KYkxYZFFqQUdmMjhvSlVRZ0RVWDI3UTZEd0ZZc3lab0ZnUmd6WTArbXlFQWI5SWhBR2VjaHJ3Q0FSaFRZOThIRGhDQUxVVW03UXZEVVFCZm9nKy81U2dnQUZlZSsyeFRPV1p2R1FMa29jUHhMdXplTXdSNFFwbWt4Y1VGQk9DS1EvK2p6VmkrYjB4OUR0Vy9uK1loSUFCWDNONy84UVd1bVErekwwU0RROE9jQlFUZ2lzL2NiUlVacjMzWXozL3JZejExQWdKd0plQ3JGWDY4ajM1WXYzdGQ3Mk10dVIvK2NuN3pWWGJOZkVaQUFLNjRqRXl1aHlVd1h3SHFIQnpqZ3Zsbks0RFhqTjFCbUgyK0F2enpXRjhjQVBNVndIZnAya0JNUFY4QnVoOXZpNG5uSzBENXJRdUtZdDdaQ3VDVWNMZ2hacDJ2QU9FL2pIZkRwTE1Wd0dQeW5oQk1PVjhCbWg0WjVJZ1paeXRBc1VVYnltSysrUXJRNlhnbnpEWmZBY3B1V0ZRTWs4MVVnUGJDY2VDUnBwaHF0Z0owV1hsaWltMHUrZFpEZ0VMQksrVnR0R01kQkFBUUFFQUFBQUVBQkFBUUFFQUFBQUVBQkFBUUFFQUFBQUVBQkFBUUFFQUFBQUVBQkFBUXdHSUNReDl5OTVDR09QUG9GWVUrQ3dIVVljVEJoNVFNMVJDckhyMmlnN0VRUUVXaXBtbUlPSlFBMVFudnJ5RmFRUUNWV1ZKVWE1eUVBR3B5LzdyV3lJWUFBQUlBQ0tBbVlRTW9jdi9lVHhzcTFETzNqMEErTFBkdWdmWElXSkhjNS9QMklmQ0FBQVZHZzZrVUFUbXhONmpRdUp4UWVmSmh1WDhwNUo5azdQR05oSDlQSTFnTUFRQUVBQkFBUUFBQUFRQUVBQkFBUUFBMU9MZURJaU1ubGt5RnZzc0pYU2NmZGlrbjloc1p1dzhCTk1tS1NJcGZjbUlEcU5BcnVXNlFEOXVRRTV0THhxN2xQbDlGUDRKdUVJQU5xWmNJcmtNQUFBRUFCRkFWejdKYXd4a0NxRW5yVTFxakhBUUFFQUJBQUJVWTRxZE5sa0lBZGJoeFNadmNnUUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFVRnNBNzVMQVNuZ1hTZ0ZtWHdSV1lqWktBSUFBQUFJQUNBQWdBSUFBQUFJQUNBQWdBSUFBQUFJQUNBQWdBSUFBQUFJQUNBQWdBSUFBQUFJQUNBQWdBTkNDQUxmU1RaRmgzZDFsSzl2UmphTzdOcTlkOXRuc2FlTkhEdW5YczFQckZvM3FobFV1RzFncHZHRnN4L2kzeDA2ZHYvSjRGZ1N3QXMxOVRGSGFuQTg2Mk9UdURodDlmT2JwblYrTTc5MGkyTWU3Mmt0TldyYnIxbnZnc0hHVFpzeGZ2Q3BwMi9mSlAvOStQdVhIN1YvL2I4Nkhvd2IxYkJQa1diUDd0SzFYSVVEK3VHNXlpN1R2bE84dCtUZlRYMjFwNUxPMmRRTGNubS9RZWRqc3BNUHBDcDdzN29GUEIwWVZDMmcyOVJJRXNLVUFJbEg1M2xhSmZBaXdZZm1lQzlsbXY0RUxHd1lGeGl5K0RRRXNKRTA3QWxoTTFzWk92bDAyWjBNQVN6NjdtNmEzT1hKRzZkNVNqcHJlSnQwbTd5TmpVWk5TOC9SVzJGRjdkK1Bzc3pNQkZFMUhvaFVUZ0MweXdPTmEwQ3ZpV0w1M3N2N0x1OGJSMjVrQWFmWWpnQkRmaG82NG03ODkzT25MclFSY1Y3TFIxanZLZG5aMmY4RUtJRExmcjc0bFh6c1lld29DVU4rTGJkWkxBRFlWUUloZm92dm5JMGtmbmN4dUVhaW9CQ2l0QVJvUVFJanBmUzAyUUIrWEtaQUJMQmNnZGJjV0JCQ3pMRFpnd2JjQ0FwRDhma1RKVm11eU5TR0F4UVpjSHNxd0Q2Q3NCQ2hMQVlvcWdBb0NXR3JBNEdzQ0dTQWZBcVJ2MVlvQVl0WllDeDYwZFpHQUFESytVNUFwMXQzWGpBRGlQOGZOZnNpOTNvS2pBQXBMUU5aR2ExVUFjVXVOMC9qMzQ4d3VBaE5TQkRKQWZtckE3UTBLZDNWVGpmZTFhNEdaRDBnWkx5Q0FFVGFZWE9GdlVIcEdWcFVhSUlha21yZDk3M3M4QlZCWUFzU1Z2VmFxQUJZTDRGbXlRbGhFc3pZdDZsVUxkRlh5eGdhWnRmY3Z0Z3BrZ0h6VmdQdnJiQ2hBdjltN3J0MjhtSEpnWjlMeWRic1BuODA0TU9mMWY1aDZ6R0p6dWpwcGd3VlBBZTdkdFpZQVc5TnRLTUQwdVBwRjgvelRLYXpYL0pOYjJqZ2JmOURuWmp6QjBGU21BcVFwM2pMNXZKVXFnSlhXQUxxbzViKzNOYnJGeWdlS2QvYnRmTUZVZ092S056V2VBckxYcUN6QVEveVdyaWhoSkh4Vjhabmh6SGc5QkhqcTIxWFZiQUYyRytiUVlrRTJQd3BvZmJDY2tlaFNwYnVaWW5pcXc3VUM1eExnM3BVWS9PYWVtUlhnNVRxMlB3ejAzK0l2RDM2bHJEVXBUaE9ONC9pK25ET0F4d3ZFNEszdFpnclEyRkdGUHNEem05emxiMjZqc24zME5leGd1QTI1eFZxQW1nNW0xb0Q5Wnd0SUFGSDFiWGxzdWFJOXJFZ3lIT3ZoZjV1SEFIUUo4UENzWXFZQVJBS283cXVLQUdKb29EU2s2Q3FHRy8wTngxd1RCTzhNSUtnYThOc0pzd1NJRms2cUNGRGtYV25vckpMSEQ3OWdPUFo2Z0xqTlc0QmE1aDBJSGlYT3BEVVc2bVFBOFMvcFozVkZRWnZyaDVtR1l5NEpna3NHU0RNakF4Z1JnRWdBTGkrcEpVRHhGNldoY3lZZm5CVkhuT1hxWGtwd3p3REIxUG1XM1RmTUVLQ09oMW9DaUJiNXFBRWZIekFjYzM1SENONXJnQ0xDT1l3WXp0d2syY3R2eWRRU1FLVTFnQkFWTFJmZzNFaGlzRnRwd1NZRHlFb0F2UWlRbmZCYkxhZ2xnQ3dEM0xSMjM5WFhjZ0hlSks1T2NSNG11R2VBaHdLUWk0RDFrcWxiYVRqa0V5NFZJTnZhbjIxSmFjVEVDU3p4TmFWdWw3SkNzRjhEMEFLazByLzl1N2pIY0t5aG8xUUFxLzlBdktnMFl1TEtrVnY5aUVHbllZSlBCcmlaSlJPZ2dvL3k0NERWZW5JSklGc0RXSDBSY00yQzRwREQ2TitKd2M2NTU1ZDRaQURKMmVDSEF1akNsUXV3aWw0Q1NET0F0UVg0UXhvcFlmUnhQMDBqQmgySEMwWVpRQzRBWFFNT1hLYm1jNGZoV0prS0tncHd5YklNb0kranJoanBtSHV0V2RZOUZnS2ttU21BZmpzeHVQVUJuUUJVRStDOFpRTE0yVU1sZ0JGQ0V4V2c0RE1BZVJ3b3FHdG5xWk91MFVMRk5jQVdpd1Q0NHgxcXRIMEZDSkFyZ0g4QUZkbW1UQUJkbElvWklPTWJpOVlBQTZrMzd6QkNhR01KVVBBbGdLNEJQeHVlT2p0SjNGVWx0SmlLQW15UWxtdHZJNGVCbTVkUW82OVdFc2dBandXZ2E4QTJSUldnc1ZCUmdNK2trVnJ5QjkzdEk0d2xBQzRaNExxNUdVQ2hBTkZDdlRYQUp2a3ZVcHJLSC9YK0w5Um9weWNYd3R6bElZQ3hFaEN1VTdRS3ZFOHNDMXpycTVjQk12c0xDd1E0TVpFYTlaa2tORVBCWndEdnlsVG8xTitiWjk4U3liS0J1M29DVEpCZnArUmZYUnFLSnk4WUhsOENBanpDSlRkM1J5cXFBVlFGaUJXcUNUQnZwRHpXUkJwWnVJTWFmYUdYNENaQW1qd0JDTkZRVVNlQUVxQmw3djg1MjE2QS84VUxDeXJBVmZKS1lzZlpEZ0laSUk4QWtUb0ZHZURTSWNOTmFqeStUdGZOMWdKa1RlaHE1TFlGRHRHeXlOdFhxTkcrWVFJQzVCV2dlRFVxZU83cDVmTW12VFFCMkZ5QVkzWGZNZmI3ejVqbkpJR2RDNmxSdjNHQ25RQ1NlOFUvRmtCUkRUQlNBWVM3VFFYNDlhMGF4bS9kUGtZeWZwLytLZWpVWi9nSmtLNDNLa0FqMDZ0QS9XYkREY3FFbU1nQUQrN2srNVhmWHhOVFliTHhFM1l0d3lXQlNlUWR4S0xiQ1g0Q0dEc0tmSFEwNTJCU0FPcjhjS3d3SVlENUtlRGo5U2Yvdkl0djFwWGpTd2JVZWFiVlJoTlhGdXBrQ2VEWDk2aFIxMDhFUXdIU2pBdmdRNjZLL2ppbXNBSllVWUEzbTFkMDkvWXRVeW00bkk5ejhhQU9IKzB4ZmJhK1RZZ2swSWRzOGlWVUVNZ0FmeGRBc2dqWVpsd0Fud2JXRitEUk4vOUc2cG1VdzZmU0ZWNVM3REJhRXZpU3ZMYTlmSUpBQmxBcVFKNVY0TTN2RGNQTm41d0NjTGVtQUdiU1RYSjNpdlNCNVBBTU40RU1ZQ2hBQkhrNlo4ZGZYOEt0bVVZcWdIVXpnSG1FejVBRTNpR3ZIMnZiVkVDQXZ5ank1Mzk0a1F2cHF6LzkxUVV3akxyRVBQbFBSNmVDRWlCZ2pTVDc3SjFEalhwTkZUd0ZNRlVDSkRYZ2UvcUlJSmZJUElmVGJnVWtRSkcxa2h2SFBJZ2pPNGZqL0FVeUFDa0EzUWw0Y2pIbEg4ZU5WWUFDRTBEM2VRMUo1S05EMUdqb0d3SUMwQUxVY3pFcXdIWmhwQXNnYk4wS2xES3V0U1J3WmhUcHkyeEhyZ0tZTEFIdXRhbDRTcHBjZ0pxQkJaMEJIQ1lNbDRYNmtSZDY5WHBSSUFOSUJLQVhBZnA5Y2dIeVZvQUNFY0J6dGZRdi8zeTFsaG90UGw1QUFQTUUrTE1HWERxaFBRSEtmaGNyQzJYMEk0Y25GZVVyZ01rU0lHcTdHeEdBU0FCbGd3dFVBRjJmUS9MTHdFYVNONHg1cWF0QUJwQUw0RnFYMm1DZlhuWVErUFRYVHlaQXVvM2VUOUR1VCtUbmRBOU9wMGFkWndtK0FzanVGWjlIQUxvR1hEdXBhQW1nOGxGQThZa0g2OHFqMlhIa1QrRUhCVEVXUUhhditMd0NSTWtYQVJjTTd3MVg5Q1ZGR2NBV0F2aCtlT3B0RnlQeFdlVE5MWnliN0tXUi9pSDZJM20zT2wrNEJiaXVRSUJhNUJKcHJ5UUJ0SEFxSUFGQ3BwOGE3R0ZzZzR2RHlPSE1xTm8wZldRNzZwRjNxL2wyS1lCRDNubHpqSkptQUVLQVZrS1JBUGZ1Vy9mTFB6QTV1Wis3OFcwR3FQT25xdXlpQkR6OVRTSXZydi9wRHJrR2RJdDUrdDlGaE0xVFFFRHJTYnZPVFFreHRWbktNZ0VCbEdZQXo2ZitSWjRvZmZDREVPY05mMTNYMkVOTkFkenFEbHAyNXR5S3QrbzdtZDcyam9BQUZncFF1cEprRVdEeUdNQ0tBc1IzYUJFUlhMYW80OFAwRkZndElyWnIvOUVmZmI3L3hyZVQvMTFLMkNzRldBS2VGb0JPQVh1b0N1RHc5eWFjMVM0Sm1yVjQzYzVEcDY0OXVIVS80K3pobldzV1RodjFadWR3WjJIUGFDWUQwSXVBUFZRR3FGUENWaG5neVE3dGU5SzFLVUFrZFhSOS92elpYMDBkQTZpeUNJUUFOaThCSHZYSUZLQmdDUUFCN0NJRFNCWUJoZ0lFVllBQWRpa0F1UWlZczhSMEJZQUFkbEVDUkNoMTM0eWJkeFFJNEE0QjdDRUQ2S0lWN1MwZ0hCbkFQZ1VReW40MUVhdURBSVZMQU1tOTRnMEZpTllwMlYwckFRRUtsd0N5czhFR0FwUU1WckEzNzRZUXdGNEZNSEs3cmI5bzdnd0JDcGtBYVlvRlVMSUlJQ3FBY0hhQ0FIYVJBZW9YTWJremwyYlVxRHNFc0FzQlhCdVkzRmtqTDJwVUpzNnRMSlUvemtySlppSzkyT3Z6dkZ2RjIyVUpJSzZ0TTcwSWFDWE1FVURjVkZrQXR4QXpLUy9iVThXOFcva3l5UUNtRndHNldQTUVRQTBvWEFKVUNUU3hyeGY4SUlDOWxBQTM2c2ZTcGxJQVhRRWdRR0hNQUo3VVlCUExCTURaSUhzUm9MSHgxMU9wTWpLQTNaUUFVb0Jud3kxSkFCREFiaktBaVVWQVN3aGc3d0lZWFFTVXJHMnVBT21ZNFFJWFFIS3ZlSWtBdFkzZFREMVdod3hRK0FTUTNYV1hGc0Nwa1FWTEFBaWdaUUhNNkFPWldBUjRTZVhBWWFDR0JVZ3pUd0FqaTRBWVYyUUErODhBNWNxYlh3RWdnQjBKSUU4QnppMGdBSU1TSUY4RVJIcERBQTRab0tHejJSVUFBdGlUQUY1MTZIRmRyUHc1cEVjQkdYcE1jV0VyQWJKRlFNMUFDekpBZGdhbVdLc1pRSHEzdGFabVZ3QzVBS2dCaGE4RWlCclBRUURXSllEK1k4emxxMElBSmhtQVhnUzBGQkNBaXdBeHJ4SjBNdlljMHA4R1FRRE5sZ0JIK1o5UTlGdENFR3IwU1hBMlNMTUM2QWNra0F5MzZyTU1TWkJBWFVUWVpyUU05VC8vMHJJWDdtOHZBdWpHMDR5eDZyT01rRHpMZUtxcjFIcVVEUFVGZUY3Mndrdlppd0NBK3hvQVFBQUFBUUFFQUJBQVFBQUFBUUFFQUJBQVFBQmdOd0xnMmt2VjBXdEtBUHdNVzNYU05TWEFSVXlJMmx6VWxBQVhNQ0ZxY3dFQ1FBRHRDTEFmRTZJMit6VWxRTW9KeklpNm5FalJWaDlnRGFaRVhhejFnVnRMZ0ZXWUVuVlpwVEVCOW0zR25Lako1bjBhRTBBTVJUTlFSZlJEaGRZRU9MZ1kwNkllaXc5cVRnQXhCTDBBOVhvQVE0VDJCTGpZNmk1bVJoM3V0cnFvUVFIRS9oNllHblhvWWNXK216V3ZCMWdjbjRuSnNUMlo4ZFpjYmxuMWdwQTUwVmN3UDdibVN2UWNvVlVCeEk1YXV6RkR0bVYzclIxQ3V3S0kweEV0ajJHU2JNZXhsaEduaFpZRkVHSnRjSmVrZTVncFczQXZxVXZ3V212djFQb1hoV1l0YWxHODNiejFoeTZqTldnMTlKY1ByWi9Ycm5pTFJkYi9VN2ovQjkydkZveFdKekZsQUFBQUFFbEZUa1N1UW1DQ1wiIiwibW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBZ0FBQUFJQUNBTUFBQUREcGlUSUFBQURBRkJNVkVVQUFBRC9BQUQvQUFEL0FBRC9BRC8vTXpQL0tpcitKQ1RmSHgvaUhCemxHUm5uRnk3cEZTcnJFeWZzSkNUdUlpTHZIeC93SGg3d0hDcnhHaWp5R1NieUdDVG5GeUxvSVNIcEh4L3FIaWpySFNmc0hDWHNHeVR0R2lQdUdTTHVHQ0R2SHlmdkhpYndIaVh3SFNUcEhDUHFHeUxxR2lIckdpZnJHU2JzSHlYc0hpVHRIU1B0SENMdEhDSHVHeUh1R3lYdkdpWHZHaVRxR1NQckhpUHJIU0xySENIc0hDWHNHeVhzR3lUdEdpUHRHaVB0R1NMdUhTTHVIU1h1SENYdUhDVHJHeVByR3lQckd5THJHaUxzR2lYc0hTVHNIU1R0SENQdEhDUHRHeUx0R3lMdEd5WHVHaVR1R2lUckhTUHJIU1BySENQc0hDTHNHeVhzR3lUc0d5VHRHeVR0R2lQdEhTUHRIQ0x0SENYdEhDVHVIQ1R1R3lUckd5UHNHeVBzR2lMc0hTWHNIQ1RzSENUc0hDVHRIQ1B0R3lQdEd5UHRHeVh0R2lUdEhTVHVIQ1RySENQc0hDUHNIQ1BzR3lYc0d5VHNHeVRzR3lUdEhTUHRIQ1B0SENQdEhDWHRIQ1R0R3lUdUd5VHNHeVBzR3lQc0hTUHNIQ1hzSENUc0hDVHNIQ1R0R3lQdEd5UHRHeVB0R3lQdEd5VHRIQ1R0SENUc0hDUHNIQ1BzR3lQc0d5UHNHeVRzR3lUckd5VHRIQ0x0SENQdEhDUHRIQ1B0R2lUdEd5VHRHeVRzR3lMc0d5UHNIQ1BzSENQc0hDVHNIQ1RyR2lUdEd5THRHeVB0R3lQdEd5UHRIQ1R0SENUdEhDVHNIQ0xzR2lQc0dpUHNHeVBzR3lUckd5VHJIQ1R0SENUdEhDTHRIQ1B0SENQdEdpVHRHeVR0R3lUdEd5VHNIQ0xzSENQc0hDUHNIQ1RySENUckdpVHJHaVR0R3lMdEd5UHRIQ1B0SENUdEhDVHRIQ1R0SENUc0dpTHNHaUxzR3lQckd5VHJIQ1RySENUckhDVHRIQ0x0SENMdEdpUHRHaVR0R2lUdEd5VHRIQ1RzSENMc0hDTHJIQ1BySENUckdpVHJHaVRyR2lUdEd5THRHeUx0SENQdEhDUHRIQ1R0SENUdEdpVHNHaUxzR2lMckd5THJHeVBySENUckhDVHJIQ1R0SENMdEdpTHRHaUx0R2lQdEdpVHRHeVR0SENUc0hDTHJIQ0xySENMckdpUHJHaVRyR2lUckdpVHRHeUx0SENMdEhDTHRIQ0x0SENUdEdpVHRHaVRzR2lMckdpTHJHaUxySENMckhDVHJIQ1RySENUdEhDVEN6SEc5QUFBQS8zUlNUbE1BQVFJREJBVUdCd2dKQ2dzTURRNFBFQkVTRXhRVkZoY1lHUm9iSEIwZUh5QWhJaU1rSlNZbktDa3FLeXd0TGk4d01USXpORFUyTnpnNU9qczhQVDQvUUVGQ1EwUkZSa2RJU1VwTFRFMU9UMUJSVWxOVVZWWlhXRmxhVzF4ZFhsOWdZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYcDdmSDErZjRDQmdvT0VoWWFIaUltS2k0eU5qbytRa1pLVGxKV1dsNWlabXB1Y25aNmZvS0dpbzZTbHBxZW9xYXFycksydXI3Q3hzck8wdGJhM3VMbTZ1N3k5dnIvQXdjTER4TVhHeDhqSnlzdk16YzdQME5IUzA5VFYxdGZZMmRyYjNOM2UzK0RoNHVQazVlYm42T25xNit6dDd1L3c4Zkx6OVBYMjkvajUrdnY4L2Y3ckNOazFBQUFVL1VsRVFWUjQydTNkZDV3VVpaN0g4V2Z5d0JDR0hJYTRZRVFCQStiRUtpaUtoRDB6aUxxTGlpSzZvdWlKQjRJSjVGdzhYVkVFeE1DS3NJcWdJaWhoUlJCWUVCVVVFRUhKT1E3RERBT1Q2bUIzNzdhNnE1NmU2YXB1bnFmcitYei83dGRUditmNXZXZTZLd3RCQ0NHRUVFSUlJU2N1OVgvYjk5WFBGcXhZdi9lb0ZhZ1VMQnZTa081R1Rzb0ZnK1lkc0lLYnc0L1FZM2xxM1RzbHlNMy9aOTVJb3RHdVNlNDQrYWhsUXNZbjAyeG42ZzdaWkptU2R4QVFudG9qQ2l5RDhwY1VXbTVQemVjUFdXWmxVaXBkLy9kMy93TUhMZVB5QVFMK0w2Y3Zza3pNUjJtMC9ualNoeDYxek16SDZYUmZpQllyTEdNelBZUCtYM3ZBTWpnek13MXZmOUxnVXN2b3pLcGtkUDhyZjJ5Wm5ybVZEZTUvMWZrV21aZGxiUDlyTEtIOXg3S2dpcUg5cjdPYzV2OGpDNnVaK2ZlL3NrS3JVN2g3YTZKbVIwVUYvTDI2aVlkL3ZpcG5WVFpQZnVxbU0yc204c0d5UnVGVHl0MGdtZXZTYlBNQS9DVlM4NHVtOXpzMThhZm9BTEMxeWErU0NYOWIwN1QrRDQzUS90V1AxQTNFSEowQVJPTjFramwvWDh1cy92ZVF0MzkrKzZCTTBnV0F5UGxaTXUwVmRVenFmMHZweWY5RlZ3Vm5sbTRBUklPZkpETmZXZGVjL3FmS0RnRHMvMzJRcHVrS1FOUmJKZnZtcTI4TWdHZGtsMGdFYXduY0FZaTZQMHFtdjhhVUd3WXVMbkdkLzVFL0JHeWVFZ0NpdHV3RStMcEdaaHdCY1A4bHZMbWRNQVNBcVBXZFJNQ3ZUVXdBOEpqcjNKY0U3MWV3RklDb3NVd2lZRU96NFBlL1hwN3J6bDlWWVJBQWtiMVVJbURqYndJUDRFMjNlYzhKNGxueENBQkU5Y1d5SStBdEE5Ny9jOXd1QWZwN0lLK0xpUVJBVkYwb0ViRDE1R0FEbU9reTUvWEJQQVlTRVlDb0lyc2FadnVwUWU3L21XNkhmd0k2NDhnQVJOWThpWUNkcHdjWXdEc3VFKzRpakFRZ0tzK1ZDTmg5Wm1EN24xUGtuTzVvWVNnQVVXbVdSTUNlTmtGZGt4RXVCMEFyR3d0QVpINHVFYkR2ckdBdVNZYkxYU0FYQ1hNQmlJelBaS2ZGemcza2tuUjN6dlE5WVRJQWtmNkpSRUR1K1VGY2tyODY1bG5ReUd3QUltMnFSTURCQzRPM0lsVVBPNlk1UkJnT1FLUjlLQkdRZDBuZ1ZxU25ZNUtIYWhnUFFLUk9sZ2pJdnp4b0t6TGRNY2VYQlFCRXlrU0pnSUxmQm10QjBoeFBnU3BwQm9EakFpWklCQnp1RUtnRnVjQXh3YWtDQU1lVC9MYnN2cWlyZzdRZ3ppdEJiZ1RBdndTTWt3ZzRjbTJBRnNSeDBDT3ZFZ0QrbGFRM0pBS09YaCtZOVVqT0RaL2NCQUdBL3hmd211dzJ1VzVCV1k4ekhITzdHUUMydkNJUlVIeERRTmJqQnNmVTZnUEFucGRrQWdMeWgvSkUrTVRXQ2dDRTVFV0pnSkxiQXJFZTQ4UG5OUllBWVJrdUVWRGFLd2pyc1NCOFd2Y0JJRHpQeWdUY0ZZRDEyQmsrcTZzQTRJanN1UWxsdlJOK09USWNrMm9LQUdjR3l3VGNtK2pMVWNkeGtDc1pBQzRaS0JQUU44R1hvN25qYmdBQkFMYzhKbnQ0eGtPSnZSeU9Pd0orQUlCNytzc0U5RS9vNWJqUThUUVlBRWp5a0V6QVk0bThIQjBkRDhvR2dDeDl5eVFDQmlid2NuUU5uOHcwQUVqVFJ5WmdjT0l1UnpjQVZCeUF1RnNtNEdrQUdBRkEzQ1Y3azhaekFEQUNnT2dsRS9BQ0FJd0FJSHFVU0FUOENRQkdBQkMzeUFTOERBQWpBSWdiaXlVQ1JpVUJ3QVFBNG5kRkVnR2prd0JnQWdEUlZmWlMxWEhKQURBQmdPaDhSQ0xncldRQW1BQkFkSklKbUpBQ0FNMlRFd3NBb21PaFJNREVGQURvblhyaE05N2xhWmlyRGtzRVRFNEZnTmJKRHAveEFXL2p0QytRQ0ppU0JnQ2RVOGx4ZmIvSEgyNlh5ZDZ3TXkwZEFEckhzUS9uOWVWd2wrUkpCSHlhQVFDTnN6MTh5bWQ0SGVtaWd4SUJNeklCb0c5K0NKK3k5MXU5ejgrVkNQZ2lFd0RheHZGazlFZThqOVh1Z0VUQW5Fb0EwRFd2aDAvNVhSK0RuYjFQSXVCdldRRFFOSTRyL0ZmNkdhM3RYb21BcjZvQVFNOTBjZHpkaysxbnVOYTdKUUsrcmdvQUxlTzRHY3J5OThDZlZyc2tBaFpYQTRDT1NYTHN2TDNtYjhEVGRrZ0VMTWtHZ0k1eHZCSmtzODhCVDlrbUViQ3NCZ0EwalBNbHlYNGZBWDdTVm9tQTcyb0JRTDljNCtqVHEzNkhiTEZaSW1CRmJRQm9seXpIMVJ3SGZCKzJhYjVSSXVESHVnRFFMck1kYmZML2l2U202eVVDVnRVRGdHNXgzdXEveXYvMXZFMStsUWo0cVFFQXREOFNZSFh6UDJxamRSSUJQK2NBUUxNNDN4TCtRd3d1NTIzNHMwVEFMNDBCb1B0M2dIVkhESWF0djFvaVlIMVRBR2lWdXM1N2U3Ykg0c2g5dlpVU0FSdWJBMENyZkJDbmV6dnIvQ0FSc0trRkFIVEtsUzdQZmIwNEZnUFhYaTRSc09Va0FPZ1Vsejc5R3BPVGR6Vy9rd2pZZGdvQU5Fb3ZseGE5SDVPUmF5eVRDTmh4R2dEMFNacmJnYnVIWXpKMDloS0pnRjJ0QUtCUDduSjdCVVNubUF4ZGJaRkV3TzdXQU5BbUtXdmRYZ3NibTlmRFYvMWFJbUJ2V3dEb08vTi9kT2pNbUl4ZFpiNUV3UDV6QUtCTjVycCtUN2VKeWRoWlgwb0VIR2dIQUYxeWh1dWpmZzdFNUhDQXFEeEhJaUQzQWdEb0V2ZFhBUlhlRXBQQks4MlNDTWk3R0FDYUpHT04rMHRBWG9qSlF6NHlaMG9FSExvVUFKcWtuZVNKZi9NYXhjVFhkSW1BL0NzQW9FbWVsUDFVNnhtTDBkTS9sZ3hmY0NVQTlFaXk3S2VhOVVYTEdBeWZObFV5K3VHT0FOQWpkV1NYYzF0SC8xVFQvL0NwSDBoR0wrd0VBRTErQnNnZTkyWlpCNS94ZjAxLzZpVEo0RWM2QTBDUDNGQW1GV0FkSHUzN3NGREtlN0wvTUYwQm9FY2V0U0psMmNNK0wraE1lVmN5Y3RIdkFLQkhoa1VVWUpWOVA2eURuK3NGazkrU0RGemNIUUI2NU05V2VTbGROV25RN1plZVdpZkx5MU5BazhiSzlnWlBCb0FXU1hyWlVwTlBBYUJKbmxjRG9LdzVBRFRKZzZWS0JEd0FBRjNTcFVBRmdERUEwQ2F0ZjFFQTRDTUE2SlBzVDA4OGdHa0EwQ245Q2dGZ05BRFI2aHNBR0ExQXBQUXZBSUF3T2swbUFjRHdYTElJQUlibjJtVUFNRHhYemdTQTRUbmx4VDBBTUR2cDNkN1BCNERacWRSNTFIb0FHSjdHdDc2Nk1BOEFaaWVwV1lkN25oLy95YUlmZnQ2d1phdVA3QVdBMmVrR0FBQUFBQUFBQUFBQUFBQUFBQUFBQU5RRUFHb0NBRFVCZ0pvQVFFMEFvQ1lBVUJNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXNOZ0FZTEVCd0dJRGdNVUdBSXNOQUJZYkFDdzJBQUFBQUFBQUFBQUFBQUFBQUFBQUFOQW5BQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDb0NRRFVCQUJxQWdBMUFZQ2FBRUJOQUtBbUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHQ3hBY0JpQTRERkJnQ0xEUUFXR3dBc05nQlliQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ2dUd0FnQUNBQUlJRlo3RTU5cEhrOXZLYmxmUkkyOS82K3h3MGR6MnFVQm9Ed1RMZE1TdW5HMmFQdU9Uc05BS1lDK0dlT0xCaDZlVG9BekFWd1BBY24zbEFaQUFZRE9KYThjUmNEd0dRQXg3THE3a3dBbUozZGc2b0J3T3pzRzFnRkFHWm4rNTFKQURBN1M4OEZnTmtwZWJFU0FNek91Z3NBWUhhS24wd0dnTm41V3gwQW1KMU5ad1BBN0JUZUJBQ3pVOVlmQUlabkpBQU16K2drQUppZDhja0FNUHgvQUFBTXp6QUFHSjcrQURBN3BWMEJZSGJ5endLQTJkbFlFd0JtWjBZU0FNek9md0hBN0JTZkJ3Q3pzN1l5QU16T3F3QXdPMlVYQWNEc3JFd0RnTmw1QWdCbTUxQjlBSmlkOFFBdy9LeFFHd0E0czc5M3BOelRiK0RJU1V2enloOW1xR3lFdSs4Zk1QenRlVHNxWGxEdktCUEZYRDhHZ0ROYkt6QnVVb3VlYisyS1BFemJjb2FvM1duNDl4VXJLTnBKUnpQWmN3SGdDY0R4SkYvMWZyRVBBTWZUYk9BNnhRQ21BOEF6Z0dOcE1xYkVGNEJqLzBxdVc2Z1VnTlVLQUQ0QUNORjZxVDhBeDNMdEdwVUEzZ0tBTHdBaWRiaGZBQ0o5U0pFNkFFY2JBc0FYQUNGNkZQa0VJRVM3OWNvQVdJTUI0Qk9BNkZMa0Y0Q29NVnNaZ00wcEFQQUpRUFQwRFVDa3Zhc0tnTlVaQUg0QmlCRytBWWlrc2FvQWZBaUFDQUM2REFuTGt3OTBQOFZ4UVdYcTBzZ0FUcldQTVBqUk82K283WEpZNGYyS0FPZ3lydnhFT2QvQ2FnQ1FBM0JkelQxdlhSSytOMWdTRVVBMzV3VlpyMXpvMkJsWVVBRUFRK0p3UnVBT0FFUUo0Rmptbmh5Nm9URlJBamlXYjd1RUZWdHZoeG9BTXdBUVBRQXIvL3FRRFRVdGpocUFaYzNNQ2EyMlk1a1NBRWV5QUJBOUFLdjRtcEF0ZmVBQmdMWG5zdEJ5eHlvQllIVUhnQWNBVm00eit3Yzdld0ZnSFFuZEI2dTFYd21BOFFEd0FzQ2FhZjlnUnI0WEFOYVJTMFBxSGFBRXdHWUFlQUpnWFdILzVBeFBBS3pkamV5RFZONmpBb0RWQWdDZUFJUWNRaG5rRFlBMU4rU293dE5LQVBRR2dDY0FoZlpuY0hmM0NNQzYwNzY5UnFVcUFMd0xBRThBclBhMlQ3YnhDbUI3eUtQYzU2Z0E4Qk1BdkFIb1p6K000eFdBOWFCOWcvZXBBRkJhRlFDZUFMeGcrMlNtWndCcjdSdHNwZ0pBNk05WkFGUVl3Q2o3NlR6UEFLeVFGL3h0VkFIZ1FRQjRBdkNLL1l5Z2R3RC9iZC9pSkJVQVhnT0FKd0JQMlQ2WjdSM0FjdnNXSDFjQjRFc0FlQUxRMC9iSkZ0NEJsTnBmN2RkVkJZQWRBUEFFd0g1T3VMMTNBSmI5alU2dFZRQW95d0NBQndDLzJEL1p4d2VBMiswbmhGUUFpUGZCNElBQ2VETFNKNk1COEovMnZZbFNGUUN1QUVEMEFQYlhzSDl5clE4QUkrd0RIVlFCNERZQVJBL2dIdnNIVzFvK0FJUThzR3UzQ2dBUEFDQnFBSDhOMmRLVGZnQzhiaDlwcHdvQWd3QVFMWURQUTg3aHBLejNBMkIwaFFHYzNEbFMvdWdad0VnQVJBZWdaSGhxeUladXRVNE1nTWc1MXpPQXNRQ0lCa0RSNUROQ3Q1TytMc0VCdkFPQUNnTEkzemgvMUcyT3ArMFBzaEljd1BzQWNBZFFzYlFyU25RQVV3RGdBMEQ5elZhaUEvZ1FBTjRCMUZodUpUeUFpUUR3REtDK2EvOFRETURiQVBBSzRMd3RWZ0FBdkFFQWJ3RFNCc2tlOEpSWUFFWUF3Qk9BenF1bHc4VG5VUERsRVI4Tk1jMHpnQ2NBRUQyQWpOdVdSUmpHODhtZ1BaRUE5SW5UdVlBK0FJZ1NRTlhyeCs2UE9FdzBBSWJiUjg1WEFlQkdBTGdEU0U0TlMyWjJrM082UER6dXUrTHlob2tHd0dQMjAwcVdDZ0FYQWNETE5ZR3hBbUMvSEtPK0VnQ05BYUFTd0hrUmY4bWZBQUFsS1FCUUNLREUvZzdIbTFVQTJDZ0FvQkRBdC9ZdFBxMEN3RXdBcUFRUXNoUHdtUW9BTHdGQUpZRHo3YnNkKzFVQXVBY0FDZ0g4Vk03UjNCTUE0RHdBS0FSd3YzMkRRMVFBS01vQWdEb0FXekx0RzF5dEFzQzNBZ0RxQU5odk1SYnRMQlVBWGdPQU9nQmZoQlQ4amhJQU53TkFHWUNkRGV5YmExeWtCRUE5QUtnQ2NEajBMTXdZU3dXQVZRSUFpZ0FVWGgxU2J1c1NKUUJHQWtBUmdGMGh6d2NUeWU1dkVZMDdnUFlBVUFQZzR3YWgxVDVxS1FHUW13b0FGUUNXZGdvcjl2d2lOUUFtQ2dDY2NBQ3JSN1lMcnpWbm02VUdRQmNBeEJ0QXlHdmpCdlh2ZFZsTlo2blpLeXcxQVBhbkF5RGVBQ3FRNm9zdFJRREdDZ0NvQjlEZ2Uwc1ZnQXNBb0I3QTJac3RWUUJXQ0FBb0IzQi9vYVVNd1AwQVVBM2dON01panhSWEFMbFZBYUFXUVBhd1Frc2hnQmNFQUZRQ3lIayt0OXlSNGduZ2FFTUFxQU5RdmNlbnhSVVlLWjRBeGdrQUtBR1EzTHpyYzE4WFYyeWtPQUlvYWdvQVJ3cnNkOXl2OGJ5Mkg4bHU0bjl6d3RTdjFoWkc4MWRxeTlleEJmQzZBSURKS2NnQmdORVpLZ0JnY3JabEFjRG85QlFBTURtekJRQk16dUVXQURBNkF3UUFUTTVYeVFBd09RZWJDZ0NZbkZzRUFFek9ud1VBVE03aWRBQ1luQzMxQlFBTVRuNWJBUUNEVTN5OUFJREJLYnRkQU1EazlCTUFNRGwvRkFBdytmLy9mUUlBQnFlb2x3Q0F3Y25ySUFCZ2NEYTFGUUF3T0YvV0VRQXcrT2ZmeUZRQkFIT3o4eG9oQUdCdXB0VVRBREEzdTI0U0FnREdwdVMxV2dJQTVtYnVtVUlBd05nc3VsSUlBQmliT2RjSUFRQlRVekMrdFJBQU1QVzR6OExlVllVQWdKbmRQenEzYjQ3UUtRQTRnZi80RjQ2NHVyTFFMQUE0QVRtOGFjbDdRM3EwU2hFYVJobUE1bTJsZWRoeHNxeHR3cWJOYWMwYlZoRWFSeG1BQktzcHNBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQWFnSUFOUUdBbWdCQVRRQ2dKZ0FvU0ZjQUtBUXdWWDFOMTRYWE5KMCt4UzAzaFMvMlpQVTFkUWl2YVJaOWlsdHVEMS9zQ2VwcnVpeThwcVgwS1c3cEY3N1k0OVRYMURxOHBsL29VOXp5VlBoaXY2aStwaHpISlZYMEtXNFpFNzdZQTlYWGxPbTRxSzRPallwWHZnaGY2M3MxS0dwdmVGRVgwNmg0WlVQNFdsK3JRVkhmNnFneW1Na3FDMS9yVmhwVU5TVzhxRGZvVkp4eWllUHJWb2RybUo4Tkwyb0ZuWXBUSGcxZjZpMDZWSFZyZUZXbE5XbFZmT0s0UCtkekhhcHE1ZmkvZENPdGlrdlNEbWw0R0VDSTVMendzdDZsVjNGSkIwMy8xT2FHbDdVL2pXYkZJNjg3QURUV29xNm5IWFYxcFZueCtBWndISEhackVkaGp0TkJPcHlsRG1BY0Z3Tlk0M1g5YlZMY21IYkZQck1kQUc3VHBMS3Bqc3FHMGE0VHNMZFZvc3RabDE2TzBnNW0wN0JZNXozSEtzL1RwYlRzSWtkdFEyaFlqSE5LaVdPUkg5U211RThjdFIycVI4dGltMm5PYjRBRzJoVFgzZm1rblRkcFdVelQzcm5FTXpUYVE5M3RmTDRlVndYRU11bXJuUUJ1MXFpKzU1emxyY21rYmJITHM4NEYzcTdUOGRhY1ltZUIvMFBiWXBiem5iOEFyY0dhNzZOWVZoY2FGNnZkckEwdWp6T3NxOWRSaWpKbmlRZE9wblV4U2ZJTWx6K3ZselVyOGtPWEd0ZHdaVWhNOHFMYlk0eHpOQ3Z5OUJLM3R5eFVvbnYrODVEYkEyMWYwcTdNc1c1bHptSlh3SGZ1ZHZsMnRYSnJhVmRuZ3p3M0FiT3IwRUYvNmV2V2YydUFocFUrN1ByczdhVjE2YUdQSkQzanVxcXJkTHptS21XNWE2MmIydEJHejZrMDJmMlI5dTIxclBhc0l2Zm43L2Vta1I1ejZvL3UvZGYxMXB1bkpLOWdtTUx0b3A3Ky9UOVE0TDZlRzNUOVlaVzZTQ0pnengrUzZHZTBPV08rN0EybWwycGJjNU45c3Zld2ZOT2Vqa2FWK3FPTFpXczVVT095cnl1VnZvcm55dzUwdGNKcC9QSmg2VUxPMFBxLzZlTVIzc2EwK2lGMkNTdjBUWHJkMUJMNUt2NVVYZS9xMzRuMFFxN2lXZjFhMHVDSXFkN3R6ZDJSbG5EZlNacFBJTzN6Y3Q3S3R1M0RRZi9SdGs0eXJRNVB0WllkKzQ3OXJyU2N0eGxlcVAwOHNoWlg1T1Y4cFlmMjdpVC96cTdjb3hWWnRxTE9pZkJQYklsRjRwT2k3b254TmJhWVZzWG5WY2JkRStUYkxHc216WXBEOHE1TW1OOHphVy9UcnBobjJ6bUo5Sk4yUUNrZGkyMithWmhZT3pWWDc2Rm5zY3liQ1hkMVhjNTh1aGF6NVBkS3dBTWJ5UU9PMExuWVpINkx4RHkyZGZvQ2VoZURISHd3WVkrYkp0MjVpLzc1emNRR0lvRlRkV2crTGZTVGVlY2wram1PZWkvazBVYXYrYXBqRUU1ejFYaDhBNjMwY3VSL2NtQ2VzWkRjK1lOQ0docGRWZzFzSUlLVTZuZE1PVVJYSzVydm4ya2J3Q3NlTWk0ZlBPY0F6UzBuSlN2SDlNZ1J3VTN6cm8rTW1yNWsvYjc4RW5wdFMxbGg3cllWY3lZTTdkV08yMmtKSVlRUVFnZ2hzYzcvQW54UGErbTMyakxPQUFBQUFFbEZUa1N1UW1DQ1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgUmF3SFRNTCA9ICh7Y2hpbGRyZW4sIGNsYXNzTmFtZSA9IFwiXCJ9KSA9PlxuICAgIDxzcGFuIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogY2hpbGRyZW4/LnJlcGxhY2UoL1xcbi9nLCAnPGJyIC8+Jyl9fSAvPlxuXG5leHBvcnQgZGVmYXVsdCBSYXdIVE1MOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYW5lbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtjaGlsZHJlbiwgc2hvdywgdGl0bGUsIGhhbmRsZUNsaWNrLCBjbGFzc05hbWUsIGlkfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB0aGVJZCA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2lkJykgPyBpZCA6IGBpZF8ke3RpdGxlfWA7XG4gICAgICAgIGxldCB0aGVDbGFzcyA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2NsYXNzTmFtZScpID8gY2xhc3NOYW1lIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInBhbmVsLWdyb3VwIFwiICsgdGhlQ2xhc3N9IGlkPXt0aGVJZH0gPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwgcGFuZWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9e3Nob3cgPyAnY29sbGFwc2VkJyA6ICcnfSBvbkNsaWNrPXtoYW5kbGVDbGlja30+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3NOYW1lPVwicGFuZWwtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWNvbGxhcHNlIGNvbGxhcHNlIGluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7c2hvdyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBVUkkgZnJvbSBcInVyaWpzXCI7XG5pbXBvcnQge1xuICAgIGRvTG9naW4sXG4gICAgZW1pdEFjY2Vzc1Rva2VuLFxuICAgIGdldE9BdXRoMkZsb3csXG4gICAgUkVTUE9OU0VfVFlQRV9JTVBMSUNJVCxcbiAgICBSRVNQT05TRV9UWVBFX0NPREUsXG4gICAgdmFsaWRhdGVJZFRva2VuXG59IGZyb20gXCIuL21ldGhvZHNcIjtcbmltcG9ydCB7Z2V0Q3VycmVudFBhdGhOYW1lLCBnZXRDdXJyZW50SHJlZn0gZnJvbSAnLi4vLi4vdXRpbHMvbWV0aG9kcyc7XG5cbmNsYXNzIEFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IoaXNzdWVyLCBhdWRpZW5jZSwgcHJvcHMpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ0Fic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGU6OmNvbnN0cnVjdG9yIGluaXQnKTtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIC8vIGluaXRpYWwgc3RhdGVcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGlkX3Rva2VuX2lzX3ZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogbnVsbCxcbiAgICAgICAgICAgIGlzc3VlcjogaXNzdWVyLFxuICAgICAgICAgICAgYXVkaWVuY2U6IGF1ZGllbmNlLFxuICAgICAgICAgICAgYWNjZXNzVG9rZW46IG51bGwsXG4gICAgICAgICAgICBmbG93OiBnZXRPQXV0aDJGbG93KCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgX2ltcGxpY2l0RmxvdygpIHtcbiAgICAgICAgLy8gZ2V0IGRhdGEgZnJvbSB1cmwgaGFzaFxuICAgICAgICBjb25zdCB7YWNjZXNzX3Rva2VuLCBpZF90b2tlbiwgc2Vzc2lvbl9zdGF0ZSwgZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9uLCBleHBpcmVzX2lufSA9IHRoaXMuZXh0cmFjdEhhc2hQYXJhbXMoKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIGlmIGVycm9yIGNvbmRpdGlvbiBzaG9ydCBjdXQuLi5cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoey4uLnRoaXMuc3RhdGUsIGVycm9yOiBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yX2Rlc2NyaXB0aW9ufSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWNjZXNzX3Rva2VuKSB7XG4gICAgICAgICAgICAvLyByZSBzdGFydCBmbG93XG4gICAgICAgICAgICBkb0xvZ2luKGdldEN1cnJlbnRQYXRoTmFtZSgpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlkX3Rva2VuX2lzX3ZhbGlkID0gaWRfdG9rZW4gPyB2YWxpZGF0ZUlkVG9rZW5cbiAgICAgICAgKFxuICAgICAgICAgICAgaWRfdG9rZW4sXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmlzc3VlcixcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuYXVkaWVuY2VcbiAgICAgICAgKSA6IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIGlkX3Rva2VuX2lzX3ZhbGlkOiBpZF90b2tlbl9pc192YWxpZCxcbiAgICAgICAgICAgIGVycm9yOiAhaWRfdG9rZW5faXNfdmFsaWQgPyBcIkludmFsaWQgVG9rZW5cIiA6IG51bGwsXG4gICAgICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogIWlkX3Rva2VuX2lzX3ZhbGlkID8gXCJJbnZhbGlkIFRva2VuXCIgOiBudWxsLFxuICAgICAgICAgICAgYWNjZXNzVG9rZW46IGFjY2Vzc190b2tlbixcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoYWNjZXNzX3Rva2VuICYmIGlkX3Rva2VuX2lzX3ZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uVXNlckF1dGgoYWNjZXNzX3Rva2VuLCBpZF90b2tlbiwgc2Vzc2lvbl9zdGF0ZSwgZXhwaXJlc19pbik7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24gIT09IHdpbmRvdy5wYXJlbnQubG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlOjpfaW1wbGljaXRGbG93IHJ1bm5pbmcgaW5zaWRlIGlmcmFtZSwgc2VuZGluZyBhdXRoIHN0YXRlIHRvIHBhcmVudFwiKTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdTRVRfQVVUSF9JTkZPX1NJTEVOVExZJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWRfdG9rZW46IGlkX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZTogc2Vzc2lvbl9zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyZXNfaW46IGV4cGlyZXNfaW4sXG4gICAgICAgICAgICAgICAgICAgIH0pLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY29kZUZsb3coKSB7XG5cbiAgICAgICAgY29uc3Qge2NvZGUsIHNlc3Npb25fc3RhdGUsIGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbn0gPSB0aGlzLmV4dHJhY3RIYXNoUGFyYW1zKCk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBpZiBlcnJvciBjb25kaXRpb24gc2hvcnQgY3V0Li4uXG4gICAgICAgICAgICAvLyB3ZSBzZXQgaGVyZSBkaXJlY3RseSBiYyB3ZSBhcmUgYXQgY29uc3RydWN0aW9uIHRpbWVcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoey4uLnRoaXMuc3RhdGUsIGVycm9yOiBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yX2Rlc2NyaXB0aW9ufSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29kZSkge1xuICAgICAgICAgICAgLy8gcmUgc3RhcnQgZmxvd1xuICAgICAgICAgICAgZG9Mb2dpbihnZXRDdXJyZW50UGF0aE5hbWUoKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdXJsID0gVVJJKGdldEN1cnJlbnRIcmVmKCkpO1xuICAgICAgICBsZXQgcXVlcnkgPSB1cmwuc2VhcmNoKHRydWUpO1xuICAgICAgICBsZXQgYmFja1VybCA9IHF1ZXJ5Lmhhc093blByb3BlcnR5KCdCYWNrVXJsJykgPyBxdWVyeVsnQmFja1VybCddIDogbnVsbDtcbiAgICAgICAgLy8gYXN5bmMgY29kZVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhgQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTo6X2NvZGVGbG93IGdldHRpbmcgYWNjZXNzIHRva2VuIHdpdGggY29kZSAke2NvZGV9YClcblxuICAgICAgICBlbWl0QWNjZXNzVG9rZW4oY29kZSwgYmFja1VybCkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTo6X2NvZGVGbG93IFtBU1lOQ10gZ290IHJlc3BvbnNlICR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpfWApO1xuICAgICAgICAgICAgbGV0IHtpZF90b2tlbiwgYWNjZXNzX3Rva2VuLCByZWZyZXNoX3Rva2VuLCBleHBpcmVzX2luLCBlcnJvcjogZXJyb3IyLCBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3JfZGVzY3JpcHRpb24yfSA9IHJlc3BvbnNlO1xuXG4gICAgICAgICAgICBpZiAoZXJyb3IyKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IHdpdGhcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yMixcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yX2Rlc2NyaXB0aW9uMlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaWRfdG9rZW5faXNfdmFsaWQgPSBpZF90b2tlbiA/IHZhbGlkYXRlSWRUb2tlblxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIGlkX3Rva2VuLFxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuaXNzdWVyLFxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuYXVkaWVuY2VcbiAgICAgICAgICAgICkgOiBmYWxzZTtcblxuICAgICAgICAgICAgLy8gdGhpcy5zdGF0ZS5pZF90b2tlbl9pc192YWxpZCA9IGlkX3Rva2VuX2lzX3ZhbGlkO1xuICAgICAgICAgICAgLy90aGlzLnN0YXRlLmVycm9yID0gIWlkX3Rva2VuX2lzX3ZhbGlkID8gXCJJbnZhbGlkIFRva2VuXCIgOiBlcnJvcjtcbiAgICAgICAgICAgIC8vdGhpcy5zdGF0ZS5lcnJvcl9kZXNjcmlwdGlvbiA9ICFpZF90b2tlbl9pc192YWxpZCA/IFwiSW52YWxpZCBUb2tlblwiIDogZXJyb3JfZGVzY3JpcHRpb247XG5cbiAgICAgICAgICAgIC8vIHNldCB3aXRoXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTo6X2NvZGVGbG93IFtBU1lOQ10gc2V0dGluZyBzdGF0ZWApO1xuICAgICAgICAgICAgLy8gc2V0IHRoZSBzdGF0ZSBhc3luY2hyb251c2x5IGJjIHdlIGFyZSBub3QgIG9uIGNvbnN0cnVjdG9yIGNvbnRleHRcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgICAgICAgICAgaWRfdG9rZW5faXNfdmFsaWQ6IGlkX3Rva2VuX2lzX3ZhbGlkLFxuICAgICAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgZXJyb3I6ICFpZF90b2tlbl9pc192YWxpZCA/IFwiSW52YWxpZCBUb2tlblwiIDogZXJyb3IsXG4gICAgICAgICAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246ICFpZF90b2tlbl9pc192YWxpZCA/IFwiSW52YWxpZCBUb2tlblwiIDogZXJyb3JfZGVzY3JpcHRpb24sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGFjY2Vzc190b2tlbiAmJiBpZF90b2tlbl9pc192YWxpZCkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlOjpfY29kZUZsb3cgW0FTWU5DXSBvblVzZXJBdXRoYCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblVzZXJBdXRoKGFjY2Vzc190b2tlbiwgaWRfdG9rZW4sIHNlc3Npb25fc3RhdGUsIGV4cGlyZXNfaW4sIHJlZnJlc2hfdG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uICE9PSB3aW5kb3cucGFyZW50LmxvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGU6Ol9jb2RlRmxvdyBydW5uaW5nIGluc2lkZSBpZnJhbWUsIHNlbmRpbmcgYXV0aCBzdGF0ZSB0byBwYXJlbnRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdTRVRfQVVUSF9JTkZPX1NJTEVOVExZJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfdG9rZW46IGFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZF90b2tlbjogaWRfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZTogc2Vzc2lvbl9zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmVzX2luOiBleHBpcmVzX2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hfdG9rZW46IHJlZnJlc2hfdG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG5cbiAgICAgICAgbGV0IHtmbG93fSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgaWYgKGZsb3cgPT09IFJFU1BPTlNFX1RZUEVfSU1QTElDSVQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ltcGxpY2l0RmxvdygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZsb3cgPT09IFJFU1BPTlNFX1RZUEVfQ09ERSkge1xuICAgICAgICAgICAgdGhpcy5fY29kZUZsb3coKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4dHJhY3RIYXNoUGFyYW1zKCkge1xuICAgICAgICByZXR1cm4gVVJJLnBhcnNlUXVlcnkodGhpcy5wcm9wcy5sb2NhdGlvbi5oYXNoLnN1YnN0cigxKSk7XG4gICAgfVxuXG4gICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCkge1xuXG4gICAgICAgIGlmIChuZXh0U3RhdGUuYWNjZXNzVG9rZW4gIT09IHRoaXMuc3RhdGUuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXh0U3RhdGUuZXJyb3IgIT09IHRoaXMuc3RhdGUuZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRTdGF0ZS5pZF90b2tlbl9pc192YWxpZCAhPT0gdGhpcy5zdGF0ZS5pZF90b2tlbl9pc192YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICAvLyBpZiB3ZSBoYXZlIGFuIGFjY2VzcyB0b2tlbiByZWZyZXNoIC4uLlxuICAgICAgICBpZiAocHJldlN0YXRlLmFjY2Vzc1Rva2VuICE9PSB0aGlzLnN0YXRlLmFjY2Vzc1Rva2VuKSB7XG5cbiAgICAgICAgICAgIGxldCB1cmwgPSBVUkkoZ2V0Q3VycmVudEhyZWYoKSk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB1cmwuc2VhcmNoKHRydWUpO1xuICAgICAgICAgICAgbGV0IGZyYWdtZW50ID0gVVJJLnBhcnNlUXVlcnkodXJsLmZyYWdtZW50KCkpO1xuXG4gICAgICAgICAgICAvLyBwdXJnZSBmcmFnbWVudFxuICAgICAgICAgICAgZGVsZXRlIGZyYWdtZW50Wydjb2RlJ107XG4gICAgICAgICAgICBkZWxldGUgZnJhZ21lbnRbJ2FjY2Vzc190b2tlbiddO1xuICAgICAgICAgICAgZGVsZXRlIGZyYWdtZW50WydleHBpcmVzX2luJ107XG4gICAgICAgICAgICBkZWxldGUgZnJhZ21lbnRbJ3Rva2VuX3R5cGUnXTtcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudFsnc2NvcGUnXTtcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudFsnaWRfdG9rZW4nXTtcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudFsnc2Vzc2lvbl9zdGF0ZSddO1xuXG4gICAgICAgICAgICBsZXQgYmFja1VybCA9IHF1ZXJ5Lmhhc093blByb3BlcnR5KCdCYWNrVXJsJykgPyBxdWVyeVsnQmFja1VybCddIDogJy9hcHAnO1xuXG4gICAgICAgICAgICBpZiAoZnJhZ21lbnQubGVuZ2h0ID4gMCkge1xuICAgICAgICAgICAgICAgIGJhY2tVcmwgKz0gYCMke1VSSS5idWlsZFF1ZXJ5KGZyYWdtZW50KX1gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFjayhiYWNrVXJsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFic3RyYWN0XG4gICAgICogQHBhcmFtIGVycm9yXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfY2FsbGJhY2soYmFja1VybCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFic3RyYWN0XG4gICAgICogQHBhcmFtIGVycm9yXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVkaXJlY3QyRXJyb3IoZXJyb3IpIHtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtpZF90b2tlbl9pc192YWxpZCwgZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9ufSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdDJFcnJvcihgJHtlcnJvcn0gLSAke2Vycm9yX2Rlc2NyaXB0aW9ufS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaWRfdG9rZW5faXNfdmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdDJFcnJvcihcIlRva2VuIFZhbGlkYXRpb24gRXJyb3IgLSBUb2tlbiBpcyBpbnZhbGlkLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTtcblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgVCBmcm9tIFwiaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3RcIjtcbmltcG9ydCB7YXV0aEVycm9ySGFuZGxlciwgY3JlYXRlQWN0aW9uLCBnZXRSZXF1ZXN0LCBzaG93TWVzc2FnZSwgc3RhcnRMb2FkaW5nLCBzdG9wTG9hZGluZ30gZnJvbSBcIi4uLy4uL3V0aWxzL2FjdGlvbnNcIjtcbmltcG9ydCB7YnVpbGRBUElCYXNlVXJsLCBnZXRBbGxvd2VkVXNlckdyb3Vwc30gZnJvbSAnLi4vLi4vdXRpbHMvbWV0aG9kcyc7XG5pbXBvcnQgeyBnZXRBY2Nlc3NUb2tlbiwgc3RvcmVBdXRoSW5mbywgaW5pdExvZ091dH0gZnJvbSAnLi9tZXRob2RzJztcblxuLyoqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBjb25zdCBTRVRfTE9HR0VEX1VTRVIgPSAnU0VUX0xPR0dFRF9VU0VSJztcbmV4cG9ydCBjb25zdCBMT0dPVVRfVVNFUiA9ICdMT0dPVVRfVVNFUic7XG5leHBvcnQgY29uc3QgUkVRVUVTVF9VU0VSX0lORk8gPSAnUkVRVUVTVF9VU0VSX0lORk8nO1xuZXhwb3J0IGNvbnN0IFJFQ0VJVkVfVVNFUl9JTkZPID0gJ1JFQ0VJVkVfVVNFUl9JTkZPJztcbmV4cG9ydCBjb25zdCBDTEVBUl9TRVNTSU9OX1NUQVRFID0gJ0NMRUFSX1NFU1NJT05fU1RBVEUnO1xuZXhwb3J0IGNvbnN0IFVQREFURV9TRVNTSU9OX1NUQVRFX1NUQVRVUyA9ICdVUERBVEVfU0VTU0lPTl9TVEFURV9TVEFUVVMnO1xuZXhwb3J0IGNvbnN0IFNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCA9ICd1bmNoYW5nZWQnO1xuZXhwb3J0IGNvbnN0IFNFU1NJT05fU1RBVEVfU1RBVFVTX0NIQU5HRUQgPSAnY2hhbmdlZCc7XG5leHBvcnQgY29uc3QgU0VTU0lPTl9TVEFURV9TVEFUVVNfRVJST1IgPSAnZXJyb3InO1xuZXhwb3J0IGNvbnN0IFVQREFURV9VU0VSX0lORk8gPSAnVVBEQVRFX1VTRVJfSU5GTyc7XG5cbmV4cG9ydCBjb25zdCBvblVzZXJBdXRoID0gKGFjY2Vzc1Rva2VuLCBpZFRva2VuLCBzZXNzaW9uU3RhdGUsIGV4cGlyZXNJbiA9IDAsIHJlZnJlc2hUb2tlbiA9IG51bGwpID0+IChkaXNwYXRjaCkgPT4ge1xuXG4gICAgc3RvcmVBdXRoSW5mbyhhY2Nlc3NUb2tlbiwgZXhwaXJlc0luLCByZWZyZXNoVG9rZW4sIGlkVG9rZW4pO1xuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBTRVRfTE9HR0VEX1VTRVIsXG4gICAgICAgIHBheWxvYWQ6IHsgc2Vzc2lvblN0YXRlIH1cbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGRvTG9nb3V0ID0gKGJhY2tVcmwpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IExPR09VVF9VU0VSLFxuICAgICAgICBwYXlsb2FkOiB7YmFja1VybDogYmFja1VybH1cbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFVzZXJJbmZvID0gKGV4cGFuZCA9ICdncm91cHMnLCBmaWVsZHM9JycsIGJhY2tVcmwgPSBudWxsLCBoaXN0b3J5ID0gbnVsbCwgZXJyb3JIYW5kbGVyID0gbnVsbCApID0+XG4gICAgYXN5bmMgKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuXG4gICAgbGV0IEFsbG93ZWRVc2VyR3JvdXBzID0gZ2V0QWxsb3dlZFVzZXJHcm91cHMoKTtcbiAgICBBbGxvd2VkVXNlckdyb3VwcyA9IEFsbG93ZWRVc2VyR3JvdXBzICE9PSAnJyA/IEFsbG93ZWRVc2VyR3JvdXBzLnNwbGl0KCcgJykgOiBbXTtcbiAgICBsZXQge2xvZ2dlZFVzZXJTdGF0ZX0gPSBnZXRTdGF0ZSgpO1xuICAgIGxldCB7bWVtYmVyfSA9IGxvZ2dlZFVzZXJTdGF0ZTtcblxuICAgIGxldCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG5cbiAgICBpZiAobWVtYmVyICE9IG51bGwpIHtcbiAgICAgICAgaWYoaGlzdG9yeSAhPSBudWxsICYmIGJhY2tVcmwgIT0gbnVsbClcbiAgICAgICAgICAgIGhpc3RvcnkucHVzaChiYWNrVXJsKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGlmKGVycm9ySGFuZGxlciA9PSBudWxsKVxuICAgICAgICBlcnJvckhhbmRsZXIgPSBhdXRoRXJyb3JIYW5kbGVyO1xuXG4gICAgZGlzcGF0Y2goc3RhcnRMb2FkaW5nKCkpO1xuXG4gICAgbGV0IHBhcmFtcyA9IHtcbiAgICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgICAgZXhwYW5kIDogZXhwYW5kLFxuICAgIH1cblxuICAgIGlmKGZpZWxkcyl7XG4gICAgICAgIHBhcmFtc1snZmllbGRzJ10gPSBmaWVsZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldFJlcXVlc3QoXG4gICAgICAgIGNyZWF0ZUFjdGlvbihSRVFVRVNUX1VTRVJfSU5GTyksXG4gICAgICAgIGNyZWF0ZUFjdGlvbihSRUNFSVZFX1VTRVJfSU5GTyksXG4gICAgICAgIGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9tZW1iZXJzL21lYCksXG4gICAgICAgIGVycm9ySGFuZGxlclxuICAgICkocGFyYW1zKShkaXNwYXRjaCwgZ2V0U3RhdGUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG5cbiAgICAgICAgICAgIGxldCB7bWVtYmVyfSA9IGdldFN0YXRlKCkubG9nZ2VkVXNlclN0YXRlO1xuICAgICAgICAgICAgaWYgKG1lbWJlciA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVycm9yX21lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnRVJST1InLFxuICAgICAgICAgICAgICAgICAgICBodG1sOiBULnRyYW5zbGF0ZShcImVycm9ycy51c2VyX25vdF9zZXRcIiksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcidcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHNob3dNZXNzYWdlKGVycm9yX21lc3NhZ2UsIGluaXRMb2dPdXQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgdXNlciBncm91cHMgKCBpZiBkZWZpbmVkIClcbiAgICAgICAgICAgIGlmIChBbGxvd2VkVXNlckdyb3Vwcy5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYWxsb3dlZEdyb3VwcyA9IG1lbWJlci5ncm91cHMuZmlsdGVyKChncm91cCwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBbGxvd2VkVXNlckdyb3Vwcy5pbmNsdWRlcyhncm91cC5jb2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChhbGxvd2VkR3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJvcl9tZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdFUlJPUicsXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sOiBULnRyYW5zbGF0ZShcImVycm9ycy51c2VyX25vdF9hdXRoelwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcidcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChzaG93TWVzc2FnZShlcnJvcl9tZXNzYWdlLCBpbml0TG9nT3V0KSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGhpc3RvcnkgIT0gbnVsbCAmJiBiYWNrVXJsICE9IG51bGwpXG4gICAgICAgICAgICAgICAgaGlzdG9yeS5wdXNoKGJhY2tVcmwpO1xuICAgICAgICB9XG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVVc2VySW5mbyA9ICh1cGRhdGVkTWVtYmVyKSA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgbGV0IHtsb2dnZWRVc2VyU3RhdGV9ID0gZ2V0U3RhdGUoKTtcbiAgICBsZXQge21lbWJlcn0gPSBsb2dnZWRVc2VyU3RhdGU7XG4gICAgaWYobWVtYmVyID09IG51bGwpe1xuICAgICAgICB0aHJvdyBFcnJvcihcIk1lbWJlciBpcyBub3Qgc2V0LlwiKTtcbiAgICB9XG4gICAgaWYodXBkYXRlZE1lbWJlci5pZCAhPSBtZW1iZXIuaWQpe1xuICAgICAgICB0aHJvdyBFcnJvcihcIk1lbWJlciBpcyBub3QgdGhlIHNhbWUuXCIpO1xuICAgIH1cbiAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVQREFURV9VU0VSX0lORk8sXG4gICAgICAgIHBheWxvYWQ6IHsuLi51cGRhdGVkTWVtYmVyfVxuICAgIH0pO1xuXG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVTZXNzaW9uU3RhdGVTdGF0dXMgPSAobmV3U3RhdHVzKSA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVUERBVEVfU0VTU0lPTl9TVEFURV9TVEFUVVMsXG4gICAgICAgIHBheWxvYWQ6IHtzZXNzaW9uU3RhdGVTdGF0dXM6IG5ld1N0YXR1c31cbiAgICB9KTtcbn0iLCJpbXBvcnQge1xuICAgIGJhc2U2NFVSTEVuY29kZSxcbiAgICBnZXRBdXRoQ2FsbGJhY2ssXG4gICAgZ2V0Q3VycmVudExvY2F0aW9uLFxuICAgIGdldEN1cnJlbnRQYXRoTmFtZSxcbiAgICBnZXRGcm9tTG9jYWxTdG9yYWdlLFxuICAgIHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UsXG4gICAgZ2V0T3JpZ2luLFxuICAgIHB1dE9uTG9jYWxTdG9yYWdlLFxuICAgIHJldHJ5UHJvbWlzZSxcbiAgICBzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSxcbiAgICBzaGEyNTZcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL21ldGhvZHNcIjtcbmltcG9ydCByZXF1ZXN0IGZyb20gJ3N1cGVyYWdlbnQnO1xuaW1wb3J0IHtyYW5kb21CeXRlc30gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IExvY2sgZnJvbSAnYnJvd3Nlci10YWJzLWxvY2snO1xubGV0IGh0dHAgPSByZXF1ZXN0O1xuXG4vKipcbiAqIEBpZ25vcmVcbiAqL1xuY29uc3QgbG9jayA9IG5ldyBMb2NrKCk7XG5cbmNvbnN0IEdFVF9UT0tFTl9TSUxFTlRMWV9MT0NLX0tFWSA9ICdvcGVuc3RhY2t1aWNvcmUubG9jay5nZXRUb2tlblNpbGVudGx5JztcbmNvbnN0IE5PTkNFX0xFTiA9IDE2O1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19UT0tFTl9TS0VXX1RJTUUgPSAyMDtcbmV4cG9ydCBjb25zdCBSRVNQT05TRV9UWVBFX0lNUExJQ0lUID0gXCJ0b2tlbiBpZF90b2tlblwiO1xuZXhwb3J0IGNvbnN0IFJFU1BPTlNFX1RZUEVfQ09ERSA9ICdjb2RlJztcbmNvbnN0IEFVVEhfSU5GTyA9ICdhdXRoSW5mbyc7XG5jb25zdCBOT05DRSA9ICdub25jZSc7XG5jb25zdCBQS0NFID0gJ3BrY2UnO1xuXG5pbXBvcnQgVVJJIGZyb20gXCJ1cmlqc1wiO1xuaW1wb3J0IElkVG9rZW5WZXJpZmllciBmcm9tIFwiaWR0b2tlbi12ZXJpZmllclwiO1xuaW1wb3J0IHtTRVRfTE9HR0VEX1VTRVJ9IGZyb20gXCIuL2FjdGlvbnNcIjtcblxuZXhwb3J0IGNvbnN0IGdldEF1dGhVcmwgPSAoYmFja1VybCA9IG51bGwsIHByb21wdCA9IG51bGwsIHRva2VuSWRIaW50ID0gbnVsbCwgcHJvdmlkZXIgPSBudWxsKSA9PiB7XG5cbiAgICBsZXQgb2F1dGgyQ2xpZW50SWQgPSBnZXRPQXV0aDJDbGllbnRJZCgpO1xuICAgIGxldCByZWRpcmVjdFVyaSA9IGdldEF1dGhDYWxsYmFjaygpO1xuICAgIGxldCBiYXNlVXJsID0gZ2V0T0F1dGgySURQQmFzZVVybCgpO1xuICAgIGxldCBzY29wZXMgPSBnZXRPQXV0aDJTY29wZXMoKTtcbiAgICBsZXQgZmxvdyA9IGdldE9BdXRoMkZsb3coKTtcblxuICAgIGlmIChiYWNrVXJsICE9IG51bGwpXG4gICAgICAgIHJlZGlyZWN0VXJpICs9IGA/QmFja1VybD0ke2VuY29kZVVSSShiYWNrVXJsKX1gO1xuXG4gICAgbGV0IG5vbmNlID0gY3JlYXRlTm9uY2UoTk9OQ0VfTEVOKTtcblxuICAgIC8vIHN0b3JlIG5vbmNlIHRvIGNoZWNrIGl0IGxhdGVyXG4gICAgcHV0T25Mb2NhbFN0b3JhZ2UoTk9OQ0UsIG5vbmNlKTtcbiAgICBsZXQgdXJsID0gVVJJKGAke2Jhc2VVcmx9L29hdXRoMi9hdXRoYCk7XG5cbiAgICBsZXQgcXVlcnkgPSB7XG4gICAgICAgIFwicmVzcG9uc2VfdHlwZVwiOiBlbmNvZGVVUkkoZmxvdyksXG4gICAgICAgIFwic2NvcGVcIjogZW5jb2RlVVJJKHNjb3BlcyksXG4gICAgICAgIFwibm9uY2VcIjogbm9uY2UsXG4gICAgICAgIFwicmVzcG9uc2VfbW9kZVwiIDogJ2ZyYWdtZW50JyxcbiAgICAgICAgXCJjbGllbnRfaWRcIjogZW5jb2RlVVJJKG9hdXRoMkNsaWVudElkKSxcbiAgICAgICAgXCJyZWRpcmVjdF91cmlcIjogZW5jb2RlVVJJKHJlZGlyZWN0VXJpKVxuICAgIH07XG5cbiAgICBpZihmbG93ID09PSBSRVNQT05TRV9UWVBFX0NPREUpe1xuICAgICAgICBjb25zdCBwa2NlID0gY3JlYXRlUEtDRUNvZGVzKClcbiAgICAgICAgcHV0T25Mb2NhbFN0b3JhZ2UoUEtDRSwgSlNPTi5zdHJpbmdpZnkocGtjZSkpO1xuICAgICAgICBxdWVyeVsnY29kZV9jaGFsbGVuZ2UnXSA9IHBrY2UuY29kZUNoYWxsZW5nZTtcbiAgICAgICAgcXVlcnlbJ2NvZGVfY2hhbGxlbmdlX21ldGhvZCddID0gJ1MyNTYnO1xuICAgICAgICBxdWVyeVsnYXBwcm92YWxfcHJvbXB0J10gPSAnZm9yY2UnO1xuICAgIH1cblxuICAgIGlmIChwcm9tcHQpIHtcbiAgICAgICAgcXVlcnlbJ3Byb21wdCddID0gcHJvbXB0O1xuICAgIH1cblxuICAgIGlmICh0b2tlbklkSGludCkge1xuICAgICAgICBxdWVyeVsnaWRfdG9rZW5faGludCddID0gdG9rZW5JZEhpbnQ7XG4gICAgfVxuXG4gICAgaWYgKHByb3ZpZGVyKSB7XG4gICAgICAgIHF1ZXJ5Wydwcm92aWRlciddID0gcHJvdmlkZXI7XG4gICAgfVxuXG4gICAgdXJsID0gdXJsLnF1ZXJ5KHF1ZXJ5KTtcbiAgICAvL2NvbnNvbGUubG9nKGBnZXRBdXRoVXJsICR7dXJsLnRvU3RyaW5nKCl9YCk7XG4gICAgcmV0dXJuIHVybDtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvZ291dFVybCA9IChpZFRva2VuKSA9PiB7XG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IG9hdXRoMkNsaWVudElkID0gZ2V0T0F1dGgyQ2xpZW50SWQoKTtcbiAgICBsZXQgdXJsID0gVVJJKGAke2Jhc2VVcmx9L29hdXRoMi9lbmQtc2Vzc2lvbmApO1xuICAgIGxldCBzdGF0ZSA9IGNyZWF0ZU5vbmNlKE5PTkNFX0xFTik7XG4gICAgbGV0IHBvc3RMb2dPdXRVcmkgPSBnZXRPcmlnaW4oKSArICcvYXV0aC9sb2dvdXQnO1xuICAgIC8vIHN0b3JlIG5vbmNlIHRvIGNoZWNrIGl0IGxhdGVyXG4gICAgcHV0T25Mb2NhbFN0b3JhZ2UoJ3Bvc3RfbG9nb3V0X3N0YXRlJywgc3RhdGUpO1xuICAgIC8qKlxuICAgICAqIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSBzaG91bGQgYmUgbGlzdGVkIG9uIG9hdXRoMiBjbGllbnQgc2V0dGluZ3NcbiAgICAgKiBvbiBJRFBcbiAgICAgKiBcIlNlY3VyaXR5IFNldHRpbmdzXCIgVGFiIC0+IExvZ291dCBPcHRpb25zIC0+IFBvc3QgTG9nb3V0IFVyaXNcbiAgICAgKi9cbiAgICByZXR1cm4gdXJsLnF1ZXJ5KHtcbiAgICAgICAgXCJpZF90b2tlbl9oaW50XCI6IGlkVG9rZW4sXG4gICAgICAgIFwicG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpXCI6IGVuY29kZVVSSShwb3N0TG9nT3V0VXJpKSxcbiAgICAgICAgXCJjbGllbnRfaWRcIjogZW5jb2RlVVJJKG9hdXRoMkNsaWVudElkKSxcbiAgICAgICAgXCJzdGF0ZVwiOiBzdGF0ZSxcbiAgICB9KTtcbn1cblxuY29uc3QgY3JlYXRlTm9uY2UgPSAobGVuKSA9PiB7XG4gICAgbGV0IHBvc3NpYmxlID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OVwiO1xuICAgIGxldCBub25jZSA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgbm9uY2UgKz0gcG9zc2libGUuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHBvc3NpYmxlLmxlbmd0aCkpO1xuICAgIH1cbiAgICByZXR1cm4gbm9uY2U7XG59XG5cbmV4cG9ydCBjb25zdCBkb0xvZ2luID0gKGJhY2tVcmwgPSBudWxsLCBwcm92aWRlciA9IG51bGwsIHByb21wdCA9ICdjb25zZW50JykgPT4ge1xuICAgIGxldCB1cmwgPSBnZXRBdXRoVXJsKGJhY2tVcmwsIHByb21wdCAsbnVsbCwgcHJvdmlkZXIpO1xuICAgIGxldCBsb2NhdGlvbiA9IGdldEN1cnJlbnRMb2NhdGlvbigpXG4gICAgbG9jYXRpb24ucmVwbGFjZSh1cmwudG9TdHJpbmcoKSk7XG59XG5cbmV4cG9ydCBjb25zdCBkb0xvZ2luQmFzaWNMb2dpbiA9IChiYWNrVXJsID0gbnVsbCkgPT4ge1xuICAgIGRvTG9naW4oYmFja1VybCwgbnVsbCwgbnVsbCk7XG59XG5cbmNvbnN0IGNyZWF0ZVBLQ0VDb2RlcyA9ICgpID0+IHtcbiAgICBjb25zdCBjb2RlVmVyaWZpZXIgPSBiYXNlNjRVUkxFbmNvZGUocmFuZG9tQnl0ZXMoNjQpKVxuICAgIGNvbnN0IGNvZGVDaGFsbGVuZ2UgPSBiYXNlNjRVUkxFbmNvZGUoc2hhMjU2KEJ1ZmZlci5mcm9tKGNvZGVWZXJpZmllcikpKVxuICAgIGNvbnN0IGNyZWF0ZWRBdCA9IG5ldyBEYXRlKClcbiAgICBjb25zdCBjb2RlUGFpciA9IHtcbiAgICAgICAgY29kZVZlcmlmaWVyLFxuICAgICAgICBjb2RlQ2hhbGxlbmdlLFxuICAgICAgICBjcmVhdGVkQXRcbiAgICB9XG4gICAgcmV0dXJuIGNvZGVQYWlyXG59XG5cbmV4cG9ydCBjb25zdCBlbWl0QWNjZXNzVG9rZW4gPSBhc3luYyAoY29kZSwgYmFja1VybCA9IG51bGwpID0+IHtcblxuICAgIGxldCBiYXNlVXJsID0gZ2V0T0F1dGgySURQQmFzZVVybCgpO1xuICAgIGxldCBvYXV0aDJDbGllbnRJZCA9IGdldE9BdXRoMkNsaWVudElkKCk7XG4gICAgbGV0IHJlZGlyZWN0VXJpID0gZ2V0QXV0aENhbGxiYWNrKCk7XG4gICAgbGV0IHBrY2UgPSBKU09OLnBhcnNlKGdldEZyb21Mb2NhbFN0b3JhZ2UoUEtDRSwgdHJ1ZSkpO1xuXG4gICAgaWYgKGJhY2tVcmwgIT0gbnVsbClcbiAgICAgICAgcmVkaXJlY3RVcmkgKz0gYD9CYWNrVXJsPSR7ZW5jb2RlVVJJKGJhY2tVcmwpfWA7XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAnY29kZScgOiAgY29kZSxcbiAgICAgICAgJ2dyYW50X3R5cGUnIDogJ2F1dGhvcml6YXRpb25fY29kZScsXG4gICAgICAgICdjb2RlX3ZlcmlmaWVyJyA6IHBrY2UuY29kZVZlcmlmaWVyLFxuICAgICAgICBcImNsaWVudF9pZFwiOiBlbmNvZGVVUkkob2F1dGgyQ2xpZW50SWQpLFxuICAgICAgICBcInJlZGlyZWN0X3VyaVwiOiBlbmNvZGVVUkkocmVkaXJlY3RVcmkpXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICAgIC8vY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBodHRwLnBvc3QoYCR7YmFzZVVybH0vb2F1dGgyL3Rva2VuYCwgcGF5bG9hZCk7XG4gICAgICAgIC8vY29uc3Qge2JvZHk6IHthY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIGlkX3Rva2VuLCBleHBpcmVzX2lufX0gPSByZXNwb25zZTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS9vYXV0aDIvdG9rZW5gLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlcXVlc3QgZmFpbGVkOicsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgbGV0IHthY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIGlkX3Rva2VuLCBleHBpcmVzX2luLCBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb259ID0ganNvbjtcbiAgICAgICAgcmV0dXJuIHthY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIGlkX3Rva2VuLCBleHBpcmVzX2luLCBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb259XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyQWNjZXNzVG9rZW4gPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgICBhd2FpdCByZXRyeVByb21pc2UoXG4gICAgICAgICAgICAoKSA9PiBsb2NrLmFjcXVpcmVMb2NrKEdFVF9UT0tFTl9TSUxFTlRMWV9MT0NLX0tFWSwgNTAwMCksXG4gICAgICAgICAgICAxMFxuICAgICAgICApXG4gICAgKSB7XG4gICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgIGxldCBhdXRoSW5mbyA9ICBnZXRBdXRoSW5mbygpO1xuXG4gICAgICAgICAgICBpZiggIWF1dGhJbmZvICkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiTWlzc2luZyBBdXRoIGluZm8uXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgeyBhY2Nlc3NUb2tlbiwgZXhwaXJlc0luLCBhY2Nlc3NUb2tlblVwZGF0ZWRBdCwgcmVmcmVzaFRva2VuIH0gPSBhdXRoSW5mbztcblxuICAgICAgICAgICAgc3RvcmVBdXRoSW5mbyhudWxsLCAwICwgcmVmcmVzaFRva2VuIClcblxuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgYXdhaXQgbG9jay5yZWxlYXNlTG9jayhHRVRfVE9LRU5fU0lMRU5UTFlfTE9DS19LRVkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0QWNjZXNzVG9rZW4gPSBhc3luYyAoKSA9PiB7XG5cbiAgICBpZiAoXG4gICAgICAgIGF3YWl0IHJldHJ5UHJvbWlzZShcbiAgICAgICAgICAgICgpID0+IGxvY2suYWNxdWlyZUxvY2soR0VUX1RPS0VOX1NJTEVOVExZX0xPQ0tfS0VZLCA1MDAwKSxcbiAgICAgICAgICAgIDEwXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgbGV0IGF1dGhJbmZvID0gIGdldEF1dGhJbmZvKCk7XG5cbiAgICAgICAgICAgIGlmKCAhYXV0aEluZm8gKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJNaXNzaW5nIEF1dGggaW5mby5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB7IGFjY2Vzc1Rva2VuLCBleHBpcmVzSW4sIGFjY2Vzc1Rva2VuVXBkYXRlZEF0LCByZWZyZXNoVG9rZW4gfSA9IGF1dGhJbmZvO1xuICAgICAgICAgICAgbGV0IGZsb3cgPSBnZXRPQXV0aDJGbG93KCk7XG4gICAgICAgICAgICAvLyBjaGVjayBsaWZlIHRpbWVcbiAgICAgICAgICAgIGxldCBub3cgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgICAgICAgIGxldCB0aW1lRWxhcHNlZFNlY3MgPSAobm93IC0gYWNjZXNzVG9rZW5VcGRhdGVkQXQpO1xuICAgICAgICAgICAgZXhwaXJlc0luID0gKGV4cGlyZXNJbiAtIEFDQ0VTU19UT0tFTl9TS0VXX1RJTUUpO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgZ2V0QWNjZXNzVG9rZW4gbm93ICR7bm93fSBhY2Nlc3NUb2tlblVwZGF0ZWRBdCAke2FjY2Vzc1Rva2VuVXBkYXRlZEF0fSB0aW1lRWxhcHNlZFNlY3MgJHt0aW1lRWxhcHNlZFNlY3N9IGV4cGlyZXNJbiAke2V4cGlyZXNJbn0uYCk7XG5cbiAgICAgICAgICAgIGlmICh0aW1lRWxhcHNlZFNlY3MgPiBleHBpcmVzSW4gfHwgYWNjZXNzVG9rZW4gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBnZXRBY2Nlc3NUb2tlbiBhY2Nlc3MgdG9rZW4gZXhwaXJlZGApXG4gICAgICAgICAgICAgICAgaWYoZmxvdyA9PT0gUkVTUE9OU0VfVFlQRV9DT0RFICYmIHVzZU9BdXRoMlJlZnJlc2hUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2dldEFjY2Vzc1Rva2VuIGdldHRpbmcgbmV3IGFjY2VzcyB0b2tlbiwgYWNjZXNzIHRva2VuIGdvdCB2b2lkJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckF1dGhJbmZvKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIm1pc3NpbmcgUmVmcmVzaCBUb2tlblwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCByZWZyZXNoQWNjZXNzVG9rZW4ocmVmcmVzaFRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHthY2Nlc3NfdG9rZW4sIGV4cGlyZXNfaW4sIHJlZnJlc2hfdG9rZW59ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coYGdldEFjY2Vzc1Rva2VuIGFjY2Vzc190b2tlbiAke2FjY2Vzc190b2tlbn0gZXhwaXJlc19pbiAke2V4cGlyZXNfaW59IHJlZnJlc2hfdG9rZW4gJHtyZWZyZXNoX3Rva2VufWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlZnJlc2hfdG9rZW4gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuID0gbnVsbDsgLy8gbm90IHVzaW5nIHJvdGF0ZSBwb2xpY3lcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdG9yZUF1dGhJbmZvKGFjY2Vzc190b2tlbiwgZXhwaXJlc19pbiwgcmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coYGdldEFjY2Vzc1Rva2VuIGFjY2Vzc190b2tlbiAke2FjY2Vzc190b2tlbn0gW05FV11gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY2Vzc190b2tlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2xlYXJBdXRoSW5mbygpO1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiQWNjZXNzIFRva2VuIEV4cGlyZWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgZ2V0QWNjZXNzVG9rZW4gYWNjZXNzX3Rva2VuICR7YWNjZXNzVG9rZW59IFtDQUNIRURdYCk7XG4gICAgICAgICAgICByZXR1cm4gYWNjZXNzVG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCBsb2NrLnJlbGVhc2VMb2NrKEdFVF9UT0tFTl9TSUxFTlRMWV9MT0NLX0tFWSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgRXJyb3IoXCJMb2NrIGFjcXVpcmUgZXJyb3IuXCIpO1xufVxuXG5leHBvcnQgY29uc3QgcmVmcmVzaEFjY2Vzc1Rva2VuID0gYXN5bmMgKHJlZnJlc2hfdG9rZW4pID0+IHtcblxuICAgIGxldCBiYXNlVXJsID0gZ2V0T0F1dGgySURQQmFzZVVybCgpO1xuICAgIGxldCBvYXV0aDJDbGllbnRJZCA9IGdldE9BdXRoMkNsaWVudElkKCk7XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAnZ3JhbnRfdHlwZScgOiAncmVmcmVzaF90b2tlbicsXG4gICAgICAgIFwiY2xpZW50X2lkXCI6IGVuY29kZVVSSShvYXV0aDJDbGllbnRJZCksXG4gICAgICAgIFwicmVmcmVzaF90b2tlblwiOiByZWZyZXNoX3Rva2VuXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YmFzZVVybH0vb2F1dGgyL3Rva2VuYCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZClcbiAgICAgICAgfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCl7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRMb2NhdGlvbiA9IGdldEN1cnJlbnRQYXRoTmFtZSgpO1xuICAgICAgICAgICAgICAgIHNldFNlc3Npb25DbGVhcmluZ1N0YXRlKHRydWUpO1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGAke3Jlc3BvbnNlLnN0YXR1c30gLSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG5cbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBSZXF1ZXN0IGZhaWxlZDogICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgbGV0IHthY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIGV4cGlyZXNfaW59ID0ganNvbjtcbiAgICAgICAgcmV0dXJuIHthY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIGV4cGlyZXNfaW59XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBzdG9yZUF1dGhJbmZvID0gKGFjY2Vzc1Rva2VuLCBleHBpcmVzSW4sIHJlZnJlc2hUb2tlbiA9IG51bGwsIGlkVG9rZW4gPSBudWxsKSA9PiB7XG5cbiAgICBsZXQgZm9ybWVyQXV0aEluZm8gPSBnZXRBdXRoSW5mbygpO1xuXG4gICAgbGV0IGF1dGhJbmZvID0ge1xuICAgICAgICBhY2Nlc3NUb2tlbiA6IGFjY2Vzc1Rva2VuLFxuICAgICAgICBleHBpcmVzSW46IGV4cGlyZXNJbixcbiAgICAgICAgYWNjZXNzVG9rZW5VcGRhdGVkQXQgOiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSxcbiAgICB9O1xuXG4gICAgaWYocmVmcmVzaFRva2VuID09PSBudWxsICYmIGZvcm1lckF1dGhJbmZvKXtcbiAgICAgICAgcmVmcmVzaFRva2VuID0gZm9ybWVyQXV0aEluZm8ucmVmcmVzaFRva2VuO1xuICAgIH1cblxuICAgIGlmKGlkVG9rZW4gPT09IG51bGwgJiYgZm9ybWVyQXV0aEluZm8pe1xuICAgICAgICBpZFRva2VuID0gZm9ybWVyQXV0aEluZm8uaWRUb2tlbjtcbiAgICB9XG5cbiAgICBpZihyZWZyZXNoVG9rZW4pe1xuICAgICAgICBhdXRoSW5mb1sncmVmcmVzaFRva2VuJ10gPSByZWZyZXNoVG9rZW47XG4gICAgfVxuXG4gICAgaWYoaWRUb2tlbil7XG4gICAgICAgIGF1dGhJbmZvWydpZFRva2VuJ10gPSBpZFRva2VuO1xuICAgIH1cblxuICAgIHB1dE9uTG9jYWxTdG9yYWdlKEFVVEhfSU5GTywgSlNPTi5zdHJpbmdpZnkoYXV0aEluZm8pKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEF1dGhJbmZvID0gKCkgPT4ge1xuICAgIGxldCByZXMgPSBnZXRGcm9tTG9jYWxTdG9yYWdlKEFVVEhfSU5GTywgZmFsc2UpXG4gICAgaWYocmVzID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpO1xufVxuXG5leHBvcnQgY29uc3QgY2xlYXJBdXRoSW5mbyA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyl7XG4gICAgICAgIHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UoQVVUSF9JTkZPKTtcbiAgICAgICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZShOT05DRSk7XG4gICAgICAgIHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UoUEtDRSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SWRUb2tlbiA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zdCBhdXRoSW5mbyA9IGdldEF1dGhJbmZvKCk7XG4gICAgICAgIGlmKGF1dGhJbmZvKXtcbiAgICAgICAgICAgIHJldHVybiBhdXRoSW5mby5pZFRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRPQXV0aDJDbGllbnRJZCA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93Lk9BVVRIMl9DTElFTlRfSUQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE9BdXRoMkZsb3cgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5PQVVUSDJfRkxPVyB8fCBcInRva2VuIGlkX3Rva2VuXCI7XG4gICAgfVxuICAgIHJldHVybiBcInRva2VuIGlkX3Rva2VuXCI7XG59XG5cbmV4cG9ydCBjb25zdCB1c2VPQXV0aDJSZWZyZXNoVG9rZW4gPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuKHdpbmRvdy5PQVVUSDJfVVNFX1JFRlJFU0hfVE9LRU4gfHwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0T0F1dGgySURQQmFzZVVybCA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LklEUF9CQVNFX1VSTDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0T0F1dGgyU2NvcGVzID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuU0NPUEVTO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBpbml0TG9nT3V0ID0gKCkgPT4ge1xuICAgIGxldCBsb2NhdGlvbiA9IGdldEN1cnJlbnRMb2NhdGlvbigpO1xuICAgIGxvY2F0aW9uLnJlcGxhY2UoZ2V0TG9nb3V0VXJsKGdldElkVG9rZW4oKSkudG9TdHJpbmcoKSk7XG59XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUlkVG9rZW4gPSAoaWRUb2tlbiwgaXNzdWVyLCBhdWRpZW5jZSkgPT4ge1xuXG4gICAgbGV0IHZlcmlmaWVyID0gbmV3IElkVG9rZW5WZXJpZmllcih7XG4gICAgICAgIGlzc3VlcjogaXNzdWVyLFxuICAgICAgICBhdWRpZW5jZTogYXVkaWVuY2VcbiAgICB9KTtcblxuICAgIGxldCBzdG9yZWROb25jZSA9IGdldEZyb21Mb2NhbFN0b3JhZ2UoTk9OQ0UsIHRydWUpO1xuICAgIGxldCBqd3QgPSB2ZXJpZmllci5kZWNvZGUoaWRUb2tlbik7XG4gICAgbGV0IGFsZyA9IGp3dC5oZWFkZXIuYWxnO1xuICAgIGxldCBraWQgPSBqd3QuaGVhZGVyLmtpZDtcbiAgICBsZXQgYXVkID0gand0LnBheWxvYWQuYXVkO1xuICAgIGxldCBpc3MgPSBqd3QucGF5bG9hZC5pc3M7XG4gICAgbGV0IGV4cCA9IGp3dC5wYXlsb2FkLmV4cDtcbiAgICBsZXQgbmJmID0gand0LnBheWxvYWQubmJmO1xuICAgIGxldCB0bm9uY2UgPSBqd3QucGF5bG9hZC5ub25jZSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRub25jZSA9PSBzdG9yZWROb25jZSAmJiBhdWQgPT0gYXVkaWVuY2UgJiYgaXNzID09IGlzc3Vlcjtcbn1cblxuZXhwb3J0IGNvbnN0IHBhc3N3b3JkbGVzc1N0YXJ0ID0gKHBhcmFtcykgPT4ge1xuXG4gICAgbGV0IG9hdXRoMkNsaWVudElkID0gZ2V0T0F1dGgyQ2xpZW50SWQoKTtcbiAgICBsZXQgc2NvcGVzID0gZ2V0T0F1dGgyU2NvcGVzKCk7XG4gICAgbGV0IG5vbmNlID0gY3JlYXRlTm9uY2UoTk9OQ0VfTEVOKTtcbiAgICAvLyBzdG9yZSBub25jZSB0byBjaGVjayBpdCBsYXRlclxuICAgIHB1dE9uTG9jYWxTdG9yYWdlKE5PTkNFLCBub25jZSk7XG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IHVybCA9IFVSSShgJHtiYXNlVXJsfS9vYXV0aDIvYXV0aGApO1xuXG4gICAgbGV0IHBheWxvYWQgPSB7XG4gICAgICAgIFwicmVzcG9uc2VfdHlwZVwiOiBcIm90cFwiLFxuICAgICAgICBcInNjb3BlXCI6IGVuY29kZVVSSShzY29wZXMpLFxuICAgICAgICBcIm5vbmNlXCI6IG5vbmNlLFxuICAgICAgICBcImNsaWVudF9pZFwiOiBlbmNvZGVVUkkob2F1dGgyQ2xpZW50SWQpLFxuICAgICAgICBcImNvbm5lY3Rpb25cIjogcGFyYW1zLmNvbm5lY3Rpb24gfHwgXCJlbWFpbFwiLFxuICAgICAgICBcInNlbmRcIjogcGFyYW1zLnNlbmQgfHwgXCJjb2RlXCIsXG4gICAgfTtcblxuICAgIGlmKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnZW1haWwnKSl7XG4gICAgICAgIHBheWxvYWRbXCJlbWFpbFwiXSA9IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbXMuZW1haWwpO1xuICAgIH1cblxuICAgIGlmKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgncGhvbmVfbnVtYmVyJykpe1xuICAgICAgICBwYXlsb2FkW1wicGhvbmVfbnVtYmVyXCJdID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5waG9uZV9udW1iZXIpO1xuICAgIH1cblxuICAgIGxldCByZXEgPSBodHRwLnBvc3QodXJsLnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIHJlcS5zZW5kKHBheWxvYWQpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBsZXQganNvbiA9IHJlcy5ib2R5O1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtyZXNwb25zZTpqc29ufSk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9KTtcblxufVxuXG5leHBvcnQgY29uc3QgcGFzc3dvcmRsZXNzTG9naW4gPSAocGFyYW1zKSA9PiAoZGlzcGF0Y2gpID0+IHtcblxuICAgIGxldCBvYXV0aDJDbGllbnRJZCA9IGdldE9BdXRoMkNsaWVudElkKCk7XG4gICAgbGV0IHNjb3BlcyA9IGdldE9BdXRoMlNjb3BlcygpO1xuICAgIGxldCBiYXNlVXJsID0gZ2V0T0F1dGgySURQQmFzZVVybCgpO1xuICAgIGxldCB1cmwgPSBVUkkoYCR7YmFzZVVybH0vb2F1dGgyL3Rva2VuYCk7XG5cbiAgICBpZighcGFyYW1zLmhhc093blByb3BlcnR5KFwib3RwXCIpKXtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJvdHAgcGFyYW0gaXMgbWFuZGF0b3J5LlwiKTtcbiAgICB9XG5cbiAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgICAgXCJncmFudF90eXBlXCI6IFwicGFzc3dvcmRsZXNzXCIsXG4gICAgICAgIFwiY29ubmVjdGlvblwiOiBwYXJhbXMuY29ubmVjdGlvbiB8fCBcImVtYWlsXCIsXG4gICAgICAgIFwic2NvcGVcIjogZW5jb2RlVVJJKHNjb3BlcyksXG4gICAgICAgIFwiY2xpZW50X2lkXCI6IGVuY29kZVVSSShvYXV0aDJDbGllbnRJZCksXG4gICAgICAgIFwib3RwXCI6IHBhcmFtcy5vdHBcbiAgICB9O1xuXG4gICAgaWYocGFyYW1zLmhhc093blByb3BlcnR5KCdlbWFpbCcpKXtcbiAgICAgICAgcGF5bG9hZFtcImVtYWlsXCJdID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5lbWFpbCk7XG4gICAgfVxuXG4gICAgaWYocGFyYW1zLmhhc093blByb3BlcnR5KCdwaG9uZV9udW1iZXInKSl7XG4gICAgICAgIHBheWxvYWRbXCJwaG9uZV9udW1iZXJcIl0gPSBlbmNvZGVVUklDb21wb25lbnQocGFyYW1zLnBob25lX251bWJlcik7XG4gICAgfVxuXG4gICAgbGV0IHJlcSA9IGh0dHAucG9zdCh1cmwudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gcmVxLnNlbmQocGF5bG9hZCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBub3cgd2UgZ290IHRva2VuXG4gICAgICAgICAgICBsZXQganNvbiA9IHJlcy5ib2R5O1xuICAgICAgICAgICAgbGV0IHthY2Nlc3NfdG9rZW4sIGV4cGlyZXNfaW4sIHJlZnJlc2hfdG9rZW4sIGlkX3Rva2VufSA9IGpzb247XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmcmVzaF90b2tlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuID0gbnVsbDsgLy8gbm90IHVzaW5nIHJvdGF0ZSBwb2xpY3lcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpZF90b2tlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBpZF90b2tlbiA9IG51bGw7IC8vIG5vdCB1c2luZyByb3RhdGUgcG9saWN5XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHZlcmlmeSBpZCB0b2tlblxuXG4gICAgICAgICAgICBpZiAoaWRfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlSWRUb2tlbihpZF90b2tlbiwgYmFzZVVybCwgb2F1dGgyQ2xpZW50SWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiaWQgdG9rZW4gaXMgbm90IHZhbGlkLlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0b3JlQXV0aEluZm8oYWNjZXNzX3Rva2VuLCBleHBpcmVzX2luLCByZWZyZXNoX3Rva2VuLCBpZF90b2tlbik7XG5cbiAgICAgICAgICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogU0VUX0xPR0dFRF9VU0VSLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7c2Vzc2lvblN0YXRlOiBudWxsfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtyZXNwb25zZToganNvbn0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH0pO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjAgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7Y29ubmVjdH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XG5cbmltcG9ydCB7XG4gICAgZG9Mb2dvdXQsXG4gICAgU0VTU0lPTl9TVEFURV9TVEFUVVNfQ0hBTkdFRCxcbiAgICBTRVNTSU9OX1NUQVRFX1NUQVRVU19FUlJPUixcbiAgICBTRVNTSU9OX1NUQVRFX1NUQVRVU19VTkNIQU5HRUQsXG4gICAgdXBkYXRlU2Vzc2lvblN0YXRlU3RhdHVzLFxuICAgIG9uVXNlckF1dGhcbn0gZnJvbSBcIi4uL2FjdGlvbnNcIjtcblxuaW1wb3J0IHtcbiAgICBnZXRBdXRoVXJsLFxuICAgIGluaXRMb2dPdXRcbn0gZnJvbSBcIi4uL21ldGhvZHNcIjtcblxuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIlxuLy8gaW4gbWludXRlc1xuY29uc3QgQ0hFQ0tfU0VTU0lPTl9JTlRFUlZBTCA9ICgxMDAwICogNjApICogMzA7XG5cbmNsYXNzIE9QU2Vzc2lvbkNoZWNrZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNvbnN0cnVjdG9yXCIpO1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPXtcbiAgICAgICAgICAgIG9wRnJhbWVfc3JjOiBcIlwiLFxuICAgICAgICAgICAgcnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lX3NyYyA6IFwiXCJcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlY2VpdmVNZXNzYWdlID0gdGhpcy5yZWNlaXZlTWVzc2FnZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkID0gdGhpcy5yZWNlaXZlTWVzc2FnZUZyb21DaGlsZC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNldFRpbWVyID0gdGhpcy5zZXRUaW1lci5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmNoZWNrU2Vzc2lvbiA9IHRoaXMuY2hlY2tTZXNzaW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25TZXR1cENoZWNrU2Vzc2lvblJQID0gdGhpcy5vblNldHVwQ2hlY2tTZXNzaW9uUlAuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5ycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQgPSB0aGlzLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMub3BGcmFtZSA9IG51bGw7XG4gICAgICAgIHRoaXMucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lID0gbnVsbDtcblxuICAgICAgICB0aGlzLnNldE9QRnJhbWVSZWYgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMub3BGcmFtZSA9IGVsZW1lbnQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zZXRDaGVja1Nlc3Npb25TdGF0ZUZyYW1lUmVmID0gZWxlbWVudCA9PiB7XG4gICAgICAgICAgICB0aGlzLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZSA9IGVsZW1lbnQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYE9QU2Vzc2lvbkNoZWNrZXI6OmNvbXBvbmVudFdpbGxVbm1vdW50YCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcnZhbCkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLnJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkLCBmYWxzZSk7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5yZWNlaXZlTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIGlmKCF0aGlzLnByb3BzLmlzTG9nZ2VkVXNlcikgcmV0dXJuO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y29tcG9uZW50RGlkTW91bnRcIik7XG4gICAgICAgIC8vIGFkZCBldmVudCBsaXN0ZW5lciB0byByZWNlaXZlIG1lc3NhZ2VzIGZyb20gaWRwIHRocm91Z2ggT1AgZnJhbWVcbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmICggd2luZG93LmxvY2F0aW9uICE9PSB3aW5kb3cucGFyZW50LmxvY2F0aW9uICkge1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRNb3VudCBydW5uaW5nIGluc2lkZSBpZnJhbWUsIHNraXBwaW5nXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNldCB1cCBvcCBmcmFtZVxuICAgICAgICAgICAgdGhpcy5vblNldHVwQ2hlY2tTZXNzaW9uUlAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZChldmVudCl7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWRcIik7XG4gICAgICAgIGxldCBmcmFtZSA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5ycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVfc3JjID09IFwiXCIpIHJldHVybjtcblxuICAgICAgICAvL2NvbnNvbGUubG9nKGBPUFNlc3Npb25DaGVja2VyOjpycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQgZnJhbWUuc3JjICR7ZnJhbWUuc3JjfWApO1xuICAgICAgICAvLyB0aGlzIGlzIGNhbGxlZCBiYyB3ZSBzZXQgdGhlIFJQIGZyYW1lIHRvIGNoZWNrIHRoZSBzZXNzaW9uIHN0YXRlIHdpdGggcHJvbXA9bm9uZVxuICAgICAgICBpZighZnJhbWUuY29udGVudERvY3VtZW50KXtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQgIWZyYW1lLmNvbnRlbnREb2N1bWVudCkgaXMgbnVsbFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5yZWNlaXZlTWVzc2FnZUZyb21DaGlsZCwgZmFsc2UpO1xuICAgICAgICBsZXQgcmVzdWx0VXJsID0gbmV3IFVSSShmcmFtZS5jb250ZW50RG9jdW1lbnQuVVJMKTtcbiAgICAgICAgLy8gdGVzdCB0aGUgcmVzdWx0IFVybDFxYVxuICAgICAgICBjb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCAtIHJlc3VsdFVybCBcIiArIHJlc3VsdFVybCk7XG4gICAgICAgIGxldCBxdWVyeSA9IHJlc3VsdFVybC5zZWFyY2godHJ1ZSk7XG4gICAgICAgIGxldCBmcmFnbWVudCA9IFVSSS5wYXJzZVF1ZXJ5KHJlc3VsdFVybC5mcmFnbWVudCgpKTtcbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSBzb21lIGVycm9yIG9uIHF1ZXJ5IHN0cmluZyBvciBmcmFnbWVudFxuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgICAgICBpZihxdWVyeS5oYXNPd25Qcm9wZXJ0eShcImVycm9yXCIpKSBlcnJvciA9IHF1ZXJ5WydlcnJvciddO1xuICAgICAgICBpZihmcmFnbWVudC5oYXNPd25Qcm9wZXJ0eShcImVycm9yXCIpKSBlcnJvciA9IGZyYWdtZW50WydlcnJvciddO1xuICAgICAgICBpZihlcnJvcil7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCAtIGVycm9yIFwiICsgZXJyb3IpO1xuICAgICAgICAgICAgLy8gY2hlY2sgc2Vzc2lvbiBzdGF0ZSB3aXRoIHByb21wdCBub25lIGZhaWxlZCBkbyBsb2dvdXQ7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdPUFNlc3Npb25DaGVja2VyOjpycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQgLSBpbml0aWF0aW5nIGxvZ291dCcpO1xuICAgICAgICAgICAgaW5pdExvZ091dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vIGVycm9yIHdlIHN0aWxsIGxvZ2dlZCBzbyByZSBpbml0IHRoZSBjaGVja2luZ1xuICAgICAgICAvLyBzZXQgdXAgb3AgZnJhbWVcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgT1BTZXNzaW9uQ2hlY2tlcjo6cnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkIHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzICR7dGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXN9YCk7XG4gICAgICAgIHRoaXMucHJvcHMudXBkYXRlU2Vzc2lvblN0YXRlU3RhdHVzKFNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y29tcG9uZW50RGlkVXBkYXRlXCIpO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgIT09IHByZXZQcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMpIHtcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzID09PSBTRVNTSU9OX1NUQVRFX1NUQVRVU19DSEFOR0VEKXtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y29tcG9uZW50RGlkVXBkYXRlIHNlc3Npb25TdGF0ZVN0YXR1cyA9PT0gY2hhbmdlZFwiKTtcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gZ2V0QXV0aFVybChudWxsLCAnbm9uZScpO1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1zZXNzaW9uLTFfMC5odG1sI1JQaWZyYW1lXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBmcmFtZSB0byBpZHBcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmMgPT0gXCJcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgb3BGcmFtZV9zcmMgOiBcIlwiLCBycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVfc3JjIDogdXJsLnRvU3RyaW5nKCl9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cyA9PT0gU0VTU0lPTl9TVEFURV9TVEFUVVNfVU5DSEFOR0VEKXtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y29tcG9uZW50RGlkVXBkYXRlIHNlc3Npb25TdGF0ZVN0YXR1cyA9PT0gdW5jaGFuZ2VkXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMub25TZXR1cENoZWNrU2Vzc2lvblJQKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlICE9PSBwcmV2UHJvcHMuc2Vzc2lvblN0YXRlKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRVcGRhdGUgdXBkYXRlZCBzZXNzaW9uIHN0YXRlICR7dGhpcy5wcm9wcy5zZXNzaW9uU3RhdGV9YCk7XG4gICAgICAgICAgICB0aGlzLm9uU2V0dXBDaGVja1Nlc3Npb25SUCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hlY2tTZXNzaW9uKClcbiAgICB7XG5cbiAgICAgICAgbGV0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBPUFNlc3Npb25DaGVja2VyOjpjaGVja1Nlc3Npb24gbm93ICR7bm93LnRvTG9jYWxlU3RyaW5nKCl9YCk7XG5cbiAgICAgICAgaWYodGhpcy5vcEZyYW1lID09IG51bGwgKXtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjaGVja1Nlc3Npb24gLSB0aGlzLm9wRnJhbWUgPT0gbnVsbCBcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLnByb3BzLnNlc3Npb25TdGF0ZSA9PSBudWxsKXtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjaGVja1Nlc3Npb24gLSB0aGlzLnByb3BzLnNlc3Npb25TdGF0ZSA9PSBudWxsIFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMucHJvcHMuY2xpZW50SWQgPT0gbnVsbCl7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y2hlY2tTZXNzaW9uIC0gdGhpcy5wcm9wcy5jbGllbnRJZCA9PSBudWxsIFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0YXJnZXRPcmlnaW4gPSB0aGlzLnByb3BzLmlkcEJhc2VVcmw7XG4gICAgICAgIGxldCBmcmFtZSA9IHRoaXMub3BGcmFtZS5jb250ZW50V2luZG93O1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRoaXMucHJvcHMuY2xpZW50SWQgKyBcIiBcIiArIHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y2hlY2tTZXNzaW9uIC0gbWVzc2FnZVwiICsgbWVzc2FnZSk7XG4gICAgICAgIC8vIHBvc3RNZXNzYWdlIHRvIHRoZSBPUCBpZnJhbWVcbiAgICAgICAgZnJhbWUucG9zdE1lc3NhZ2UobWVzc2FnZSwgdGFyZ2V0T3JpZ2luKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lcihldmVudClcbiAgICB7XG4gICAgICAgIGxldCBmcmFtZSA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5vcEZyYW1lX3NyYyA9PSBcIlwiKSByZXR1cm47XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpzZXRUaW1lclwiKTtcblxuICAgICAgICBpZighdGhpcy5wcm9wcy5pc0xvZ2dlZFVzZXIpe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnNldFRpbWVyIC0gIXRoaXMucHJvcHMuaXNMb2dnZWRVc2VyXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgIT09IFNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCApe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnNldFRpbWVyIC0gdGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXNcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYE9QU2Vzc2lvbkNoZWNrZXI6OnNldFRpbWVyIHNldHRpbmcgaW50ZXJ2YWwgJHtDSEVDS19TRVNTSU9OX0lOVEVSVkFMfWApO1xuICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLmNoZWNrU2Vzc2lvbiwgQ0hFQ0tfU0VTU0lPTl9JTlRFUlZBTCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNldHVwQ2hlY2tTZXNzaW9uUlAoKXtcbiAgICAgICAgLy8gaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LXNlc3Npb24tMV8wLmh0bWwjT1BpZnJhbWVcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpvblNldHVwQ2hlY2tTZXNzaW9uUlBcIik7XG4gICAgICAgIGlmKHRoaXMub3BGcmFtZSA9PSBudWxsKXtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpvblNldHVwQ2hlY2tTZXNzaW9uUlAgLSBvcEZyYW1lIGlzIG51bGxcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMucmVjZWl2ZU1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbkNoZWNrRW5kcG9pbnQgPSBgJHt0aGlzLnByb3BzLmlkcEJhc2VVcmx9L29hdXRoMi9jaGVjay1zZXNzaW9uYDtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6Om9uU2V0dXBDaGVja1Nlc3Npb25SUCAtIHNlc3Npb25DaGVja0VuZHBvaW50IFwiKyBzZXNzaW9uQ2hlY2tFbmRwb2ludCk7XG4gICAgICAgIGlmKHRoaXMuc3RhdGUub3BGcmFtZV9zcmMgPT0gXCJcIilcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoey4uLnRoaXMuc3RhdGUsIG9wRnJhbWVfc3JjIDogc2Vzc2lvbkNoZWNrRW5kcG9pbnQsIHJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmMgOiBcIlwifSk7XG4gICAgfVxuXG4gICAgcmVjZWl2ZU1lc3NhZ2VGcm9tQ2hpbGQoZSl7XG4gICAgICAgIGlmICh0eXBlb2YgZS5kYXRhID09PSAnc3RyaW5nJyB8fCBlLmRhdGEgaW5zdGFuY2VvZiBTdHJpbmcpe1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgYXV0aEluZm8gPSBKU09OLnBhcnNlKGUuZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKGF1dGhJbmZvLmhhc093blByb3BlcnR5KCdhY3Rpb24nKSAmJiBhdXRoSW5mby5hY3Rpb24gPT0gJ1NFVF9BVVRIX0lORk9fU0lMRU5UTFknKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5yZWNlaXZlTWVzc2FnZUZyb21DaGlsZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uVXNlckF1dGgoXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoSW5mby5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoSW5mby5pZF90b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhJbmZvLnNlc3Npb25fc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoSW5mby5leHBpcmVzX2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aEluZm8uaGFzT3duUHJvcGVydHkoXCJyZWZyZXNoX3Rva2VuXCIpID8gYXV0aEluZm8ucmVmcmVzaF90b2tlbiA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWNlaXZlTWVzc2FnZShlKVxuICAgIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlY2VpdmVNZXNzYWdlIC0gZS5vcmlnaW4gXCIgKyBlLm9yaWdpbik7XG4gICAgICAgIGlmIChlLm9yaWdpbiAhPT0gdGhpcy5wcm9wcy5pZHBCYXNlVXJsICkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlY2VpdmVNZXNzYWdlIC0gZS5vcmlnaW4gIT09IHRoaXMucHJvcHMuaWRwQmFzZVVybFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RhdHVzID0gZS5kYXRhO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cmVjZWl2ZU1lc3NhZ2UgLSBzdGF0dXMgXCIrIHN0YXR1cyk7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZWNlaXZlTWVzc2FnZSAtIHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzIFwiKyB0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cyk7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZWNlaXZlTWVzc2FnZSAtIHRoaXMucHJvcHMuaXNMb2dnZWRVc2VyIFwiKyB0aGlzLnByb3BzLmlzTG9nZ2VkVXNlcik7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzID09PSBTRVNTSU9OX1NUQVRFX1NUQVRVU19VTkNIQU5HRUQgJiYgdGhpcy5wcm9wcy5pc0xvZ2dlZFVzZXIpe1xuICAgICAgICAgICAgaWYoc3RhdHVzID09PSBTRVNTSU9OX1NUQVRFX1NUQVRVU19DSEFOR0VEKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZWNlaXZlTWVzc2FnZSAtIHNlc3Npb24gc3RhdGUgaGFzIGNoYW5nZWQgb24gT1BcIik7XG4gICAgICAgICAgICAgICAgLy8gc2lnbmFsIHNlc3Npb24gc3RhcnQgY2hlY2tcbiAgICAgICAgICAgICAgICAvLyBraWxsIHRpbWVyXG5cbiAgICAgICAgICAgICAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogV2hlbiB0aGUgUlAgZGV0ZWN0cyBhIHNlc3Npb24gc3RhdGUgY2hhbmdlLCBpdCBTSE9VTEQgZmlyc3QgdHJ5IGEgcHJvbXB0PW5vbmUgcmVxdWVzdCB3aXRoaW4gYW5cbiAgICAgICAgICAgICAgICAgKiBpZnJhbWUgdG8gb2J0YWluIGEgbmV3IElEIFRva2VuIGFuZCBzZXNzaW9uIHN0YXRlLCBzZW5kaW5nIHRoZSBvbGQgSUQgVG9rZW4gYXMgdGhlIGlkX3Rva2VuX2hpbnQuXG4gICAgICAgICAgICAgICAgICogSWYgdGhlIFJQIHJlY2VpdmVzIGFuIElEIHRva2VuIGZvciB0aGUgc2FtZSBFbmQtVXNlciwgaXQgU0hPVUxEIHNpbXBseSB1cGRhdGUgdGhlIHZhbHVlIG9mIHRoZVxuICAgICAgICAgICAgICAgICAqIHNlc3Npb24gc3RhdGUuIElmIGl0IGRvZXMgbm90IHJlY2VpdmUgYW4gSUQgdG9rZW4gb3IgcmVjZWl2ZXMgYW4gSUQgdG9rZW4gZm9yIGFub3RoZXIgRW5kLVVzZXIsXG4gICAgICAgICAgICAgICAgICogdGhlbiBpdCBuZWVkcyB0byBoYW5kbGUgdGhpcyBjYXNlIGFzIGEgbG9nb3V0IGZvciB0aGUgb3JpZ2luYWwgRW5kLVVzZXIuIElmIHRoZSBvcmlnaW5hbCBFbmQtVXNlclxuICAgICAgICAgICAgICAgICAqIGlzIGFscmVhZHkgbG9nZ2VkIG91dCBhdCB0aGUgUlAgd2hlbiB0aGUgc3RhdGUgY2hhbmdlcyBpbmRpY2F0ZSB0aGF0IEVuZC1Vc2VyIHNob3VsZCBiZSBsb2dnZWQgb3V0LFxuICAgICAgICAgICAgICAgICAqIHRoZSBsb2dvdXQgaXMgY29uc2lkZXJlZCB0byBoYXZlIHN1Y2NlZWRlZC5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMucmVjZWl2ZU1lc3NhZ2VGcm9tQ2hpbGQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5yZWNlaXZlTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMudXBkYXRlU2Vzc2lvblN0YXRlU3RhdHVzKFNFU1NJT05fU1RBVEVfU1RBVFVTX0NIQU5HRUQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBpZighdGhpcy5wcm9wcy5pc0xvZ2dlZFVzZXIpIHJldHVybiBudWxsO1xuICAgICAgICBpZighdGhpcy5wcm9wcy5zZXNzaW9uU3RhdGUpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAoIHdpbmRvdy5sb2NhdGlvbiAhPT0gd2luZG93LnBhcmVudC5sb2NhdGlvbiApIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cmVuZGVyIHJ1bm5pbmcgaW5zaWRlIGlmcmFtZSwgc2tpcHBpbmdcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cmVuZGVyXCIpO1xuICAgICAgICByZXR1cm4oXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7aGVpZ2h0OiAnMHB4J319PlxuICAgICAgICAgICAgICAgIDxpZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgcmVmPXt0aGlzLnNldE9QRnJhbWVSZWZ9XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiT1BGcmFtZVwiIG9uTG9hZD17dGhpcy5zZXRUaW1lcn1cbiAgICAgICAgICAgICAgICAgICAgc3JjPXt0aGlzLnN0YXRlLm9wRnJhbWVfc3JjfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e3Zpc2liaWxpdHk6J2hpZGRlbicsIHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBsZWZ0OiAwLCB0b3A6IDAsIGJvcmRlcjogJ25vbmUnLCB3aWR0aDowICwgaGVpZ2h0OjB9fT4+PC9pZnJhbWU+XG4gICAgICAgICAgICAgICAgPGlmcmFtZSByZWY9e3RoaXMuc2V0Q2hlY2tTZXNzaW9uU3RhdGVGcmFtZVJlZn1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiUlBDSGVja1Nlc3Npb25TdGF0ZUZyYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17dGhpcy5zdGF0ZS5ycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVfc3JjfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25Mb2FkPXt0aGlzLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7dmlzaWJpbGl0eTonaGlkZGVuJywgcG9zaXRpb246ICdhYnNvbHV0ZScsIGxlZnQ6IDAsIHRvcDogMCwgYm9yZGVyOiAnbm9uZScsIHdpZHRoOjAgLCBoZWlnaHQ6MH19Pj48L2lmcmFtZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgbG9nZ2VkVXNlclN0YXRlIH0pID0+ICh7XG4gICAgc2Vzc2lvblN0YXRlOiBsb2dnZWRVc2VyU3RhdGUuc2Vzc2lvblN0YXRlLFxuICAgIGlzTG9nZ2VkVXNlcjogbG9nZ2VkVXNlclN0YXRlLmlzTG9nZ2VkVXNlcixcbiAgICBzZXNzaW9uU3RhdGVTdGF0dXM6IGxvZ2dlZFVzZXJTdGF0ZS5zZXNzaW9uU3RhdGVTdGF0dXMsXG59KVxuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywge1xuICAgIGRvTG9nb3V0LCB1cGRhdGVTZXNzaW9uU3RhdGVTdGF0dXMsIG9uVXNlckF1dGhcbn0pKE9QU2Vzc2lvbkNoZWNrZXIpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCAnLi9zaW1wbGUtbGluay1saXN0Lmxlc3MnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IFRhYmxlIGZyb20gXCIuLi90YWJsZS9UYWJsZVwiO1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnO1xuaW1wb3J0IEFzeW5jQ3JlYXRhYmxlU2VsZWN0IGZyb20gXCJyZWFjdC1zZWxlY3QvbGliL0FzeW5jQ3JlYXRhYmxlXCI7XG5cblxuY2xhc3MgU2ltcGxlTGlua0xpc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogJydcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUxpbmsgPSB0aGlzLmhhbmRsZUxpbmsuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5maWx0ZXJPcHRpb24gPSB0aGlzLmZpbHRlck9wdGlvbi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU5ldyA9IHRoaXMuaGFuZGxlTmV3LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0TmV3T3B0aW9uRGF0YSA9IHRoaXMuZ2V0TmV3T3B0aW9uRGF0YS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmlzVmFsaWROZXdPcHRpb24gPSB0aGlzLmlzVmFsaWROZXdPcHRpb24uYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25zKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQge29wdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGRlZmF1bHRPcHRpb25zID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdE9wdGlvbnMnKSA/IG9wdGlvbnMuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKCFpbnB1dCAmJiAhZGVmYXVsdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5hY3Rpb25zLnNlYXJjaChpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZX0pO1xuICAgIH1cblxuICAgIGhhbmRsZUxpbmsoZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFjdGlvbnMuYWRkLm9uQ2xpY2sodGhpcy5zdGF0ZS52YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiAnJ30pO1xuICAgIH1cblxuICAgIGdldE5ld09wdGlvbkRhdGEoaW5wdXRWYWx1ZSwgb3B0aW9uTGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHt0YWc6IG9wdGlvbkxhYmVsLCBpZDppbnB1dFZhbHVlfTtcbiAgICB9XG5cbiAgICBpc1ZhbGlkTmV3T3B0aW9uKGlucHV0VmFsdWUsIHNlbGVjdFZhbHVlLCBzZWxlY3RPcHRpb25zKSB7XG4gICAgICAgIGxldCB7b3B0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgbGFiZWxLZXkgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdsYWJlbEtleScpID8gb3B0aW9ucy5sYWJlbEtleSA6ICdsYWJlbCc7XG4gICAgICAgIGxldCBvcHRpb25Gb3VuZCA9IHNlbGVjdE9wdGlvbnMuZmluZChvcCA9PiBvcFtsYWJlbEtleV0gPT0gaW5wdXRWYWx1ZSk7XG4gICAgICAgIHJldHVybiAoIWlucHV0VmFsdWUgfHwgb3B0aW9uRm91bmQpID8gZmFsc2UgOiB0cnVlO1xuICAgIH1cblxuICAgIGhhbmRsZU5ldyh2YWx1ZSkge1xuICAgICAgICB0aGlzLnByb3BzLm9wdGlvbnMub25DcmVhdGVUYWcodmFsdWUsIHRoaXMuaGFuZGxlQ2hhbmdlKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJPcHRpb24oY2FuZGlkYXRlLCBpbnB1dFZhbHVlKSB7XG4gICAgICAgIGxldCB7b3B0aW9ucywgdmFsdWVzfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBhbGxvd0R1cGxpY2F0ZXMgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdhbGxvd0R1cGxpY2F0ZXMnKTtcbiAgICAgICAgbGV0IGxhYmVsS2V5ID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGFiZWxLZXknKSA/IG9wdGlvbnMubGFiZWxLZXkgOiAnbGFiZWwnO1xuXG4gICAgICAgIGlmIChhbGxvd0R1cGxpY2F0ZXMpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGxldCBvcHRpb25Gb3VuZCA9IHZhbHVlcy5maW5kKHZhbCA9PiB2YWxbbGFiZWxLZXldID09PSBjYW5kaWRhdGUubGFiZWwpO1xuXG4gICAgICAgIHJldHVybiAhb3B0aW9uRm91bmQ7XG4gICAgfVxuXG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvcHRpb25zLCB2YWx1ZXMsIGNvbHVtbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGRpc2FibGVkQWRkID0gKCF0aGlzLnN0YXRlLnZhbHVlKTtcblxuICAgICAgICBsZXQgdGl0bGUgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCd0aXRsZScpID8gb3B0aW9ucy50aXRsZSA6ICdUYWJsZSc7XG4gICAgICAgIGxldCB2YWx1ZUtleSA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ3ZhbHVlS2V5JykgPyBvcHRpb25zLnZhbHVlS2V5IDogJ3ZhbHVlJztcbiAgICAgICAgbGV0IGxhYmVsS2V5ID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGFiZWxLZXknKSA/IG9wdGlvbnMubGFiZWxLZXkgOiAnbGFiZWwnO1xuICAgICAgICBsZXQgYWxsb3dDcmVhdGUgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdvbkNyZWF0ZVRhZycpO1xuICAgICAgICBsZXQgZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdkZWZhdWx0T3B0aW9ucycpID8gb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgdGFibGVPcHRpb25zID0ge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZGF0YVRhYmxlJyxcbiAgICAgICAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBkZWxldGU6IG9wdGlvbnMuYWN0aW9ucy5kZWxldGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykpIHtcbiAgICAgICAgICAgIHRhYmxlT3B0aW9ucy5jbGFzc05hbWUgPSBvcHRpb25zLmNsYXNzTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmFjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2VkaXQnKSkge1xuICAgICAgICAgICAgdGFibGVPcHRpb25zLmFjdGlvbnMuZWRpdCA9IG9wdGlvbnMuYWN0aW9ucy5lZGl0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY3VzdG9tJykpIHtcbiAgICAgICAgICAgIHRhYmxlT3B0aW9ucy5hY3Rpb25zLmN1c3RvbSA9IG9wdGlvbnMuYWN0aW9ucy5jdXN0b207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnc29ydENvbCcpKSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuc29ydChcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtQSA9IGlzTmFOKGFbb3B0aW9ucy5zb3J0Q29sXSkgPyBhW29wdGlvbnMuc29ydENvbF0udG9Mb3dlckNhc2UoKSA6IGFbb3B0aW9ucy5zb3J0Q29sXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbUIgPSBpc05hTihiW29wdGlvbnMuc29ydENvbF0pID8gYltvcHRpb25zLnNvcnRDb2xdLnRvTG93ZXJDYXNlKCkgOiBiW29wdGlvbnMuc29ydENvbF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaXRlbUEgPiBpdGVtQiA/IDEgOiAoaXRlbUEgPCBpdGVtQiA/IC0xIDogMCkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IEFzeW5jQ29tcG9uZW50ID0gbnVsbDtcblxuICAgICAgICBpZiAoYWxsb3dDcmVhdGUpIHtcbiAgICAgICAgICAgIEFzeW5jQ29tcG9uZW50ID1cbiAgICAgICAgICAgICAgICA8QXN5bmNDcmVhdGFibGVTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibGluay1zZWxlY3QgYnRuLWdyb3VwIHRleHQtbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17b3B0aW9uID0+IG9wdGlvblt2YWx1ZUtleV19XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXtvcHRpb24gPT4gb3B0aW9uW2xhYmVsS2V5XX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJPcHRpb249e3RoaXMuZmlsdGVyT3B0aW9ufVxuICAgICAgICAgICAgICAgICAgICBvbkNyZWF0ZU9wdGlvbj17dGhpcy5oYW5kbGVOZXd9XG4gICAgICAgICAgICAgICAgICAgIGdldE5ld09wdGlvbkRhdGE9e3RoaXMuZ2V0TmV3T3B0aW9uRGF0YX1cbiAgICAgICAgICAgICAgICAgICAgaXNWYWxpZE5ld09wdGlvbj17dGhpcy5pc1ZhbGlkTmV3T3B0aW9ufVxuICAgICAgICAgICAgICAgIC8+O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgQXN5bmNDb21wb25lbnQgPVxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJsaW5rLXNlbGVjdCBidG4tZ3JvdXAgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcHRpb24gPT4gb3B0aW9uW3ZhbHVlS2V5XX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wdGlvbiA9PiBvcHRpb25bbGFiZWxLZXldfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlck9wdGlvbj17dGhpcy5maWx0ZXJPcHRpb259XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRPcHRpb25zPXtkZWZhdWx0T3B0aW9uc31cbiAgICAgICAgICAgICAgICAvPjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvdyBzaW1wbGUtbGluay1saXN0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNCBzaW1wbGUtbGluay1saXN0LXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoND57dGl0bGV9PC9oND5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZCBwdWxsLXJpZ2h0IGJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICB7QXN5bmNDb21wb25lbnR9XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBhZGQtYnV0dG9uXCIgb25DbGljaz17dGhpcy5oYW5kbGVMaW5rfSBkaXNhYmxlZD17ZGlzYWJsZWRBZGR9PlxuICAgICAgICAgICAgICAgICAgICAgICAge1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5hZGRcIil9XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZGF0YVRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3RhYmxlT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9e3ZhbHVlc31cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuU2ltcGxlTGlua0xpc3QucHJvcFR5cGVzID0ge1xuICAgIHZhbHVlczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIHNvcnRDb2w6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIHZhbHVlS2V5OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgIGxhYmVsS2V5OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgYWN0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgICAgIHNlYXJjaDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgICAgICAgIGRlbGV0ZTogUHJvcFR5cGVzLnNoYXBlKHtvbkNsaWNrOlByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWR9KSxcbiAgICAgICAgICAgIGFkZDogUHJvcFR5cGVzLnNoYXBlKHtvbkNsaWNrOlByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWR9KSxcbiAgICAgICAgICAgIGVkaXQ6IFByb3BUeXBlcy5zaGFwZSh7b25DbGljazpQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkfSksXG4gICAgICAgICAgICBjdXN0b206IFByb3BUeXBlcy5hcnJheSxcbiAgICAgICAgfSkuaXNSZXF1aXJlZFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWRcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2ltcGxlTGlua0xpc3Q7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJy4vc3VtbWl0LWRyb3Bkb3duLmxlc3MnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QnO1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdW1taXREcm9wZG93biBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHN1bW1pdFZhbHVlOiBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDbGljayA9IHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2Uoc3VtbWl0KSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3N1bW1pdFZhbHVlOiBzdW1taXR9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVDbGljayhldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2xpY2sodGhpcy5zdGF0ZS5zdW1taXRWYWx1ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7c3VtbWl0cywgYWN0aW9uTGFiZWwsIGFjdGlvbkNsYXNzfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBzdW1taXRPcHRpb25zID0gc3VtbWl0c1xuICAgICAgICAgICAgLnNvcnQoXG4gICAgICAgICAgICAgICAgKGEsIGIpID0+IChhLnN0YXJ0X2RhdGUgPCBiLnN0YXJ0X2RhdGUgPyAxIDogKGEuc3RhcnRfZGF0ZSA+IGIuc3RhcnRfZGF0ZSA/IC0xIDogMCkpXG4gICAgICAgICAgICApLm1hcChzID0+ICh7bGFiZWw6IHMubmFtZSwgdmFsdWU6IHMuaWR9KSk7XG5cbiAgICAgICAgbGV0IGJpZ0NsYXNzID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnYmlnJykgPyAnYmlnJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdW1taXQtZHJvcGRvd24gYnRuLWdyb3VwIFwiICsgYmlnQ2xhc3N9PlxuICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzdW1taXQtc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuc3VtbWl0VmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17c3VtbWl0T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5zZWxlY3Rfc3VtbWl0XCIpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4tZ3JvdXAgc3VtbWl0LXNlbGVjdCB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICBpc0NsZWFyYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9e2BidG4gYnRuLWRlZmF1bHQgJHthY3Rpb25DbGFzc31gfSBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfT5cbiAgICAgICAgICAgICAgICAgICAge2FjdGlvbkxhYmVsfVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBpc19lZGl0aW5nOiBmYWxzZVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBvbkRlbGV0ZShpZCwgZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLmRlbGV0ZShpZCk7XG4gICAgfVxuXG4gICAgb25TYXZlKGlkLCBldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGlzX2VkaXRpbmc6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5zYXZlKGlkKTtcbiAgICB9XG5cbiAgICBvbkVkaXQoaWQsIGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXNfZWRpdGluZzogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuZWRpdChpZCk7XG4gICAgfVxuXG4gICAgb25DYW5jZWwoaWQsIGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXNfZWRpdGluZzogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLmNhbmNlbChpZCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2FjdGlvbnMsIGlkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuaXNfZWRpdGluZykge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgb25DbGljaz17dGhpcy5vblNhdmUuYmluZCh0aGlzLGlkKX0gZGF0YS10aXA9XCJzYXZlXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtZmxvcHB5LW9cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIG9uQ2xpY2s9e3RoaXMub25DYW5jZWwuYmluZCh0aGlzLGlkKX0gZGF0YS10aXA9XCJjYW5jZWxcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10aW1lc1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICB7J2VkaXQnIGluIGFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBvbkNsaWNrPXt0aGlzLm9uRWRpdC5iaW5kKHRoaXMsaWQpfSBkYXRhLXRpcD1cImVkaXRcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtcGVuY2lsLXNxdWFyZS1vXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHsnZGVsZXRlJyBpbiBhY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgb25DbGljaz17dGhpcy5vbkRlbGV0ZS5iaW5kKHRoaXMsaWQpfSBkYXRhLXRpcD1cImRlbGV0ZVwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10cmFzaC1vIGRlbGV0ZS1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBFZGl0YWJsZVRhYmxlSGVhZGluZyBmcm9tICcuL0VkaXRhYmxlVGFibGVIZWFkaW5nJztcbmltcG9ydCBFZGl0YWJsZVRhYmxlQ2VsbCBmcm9tICcuL0VkaXRhYmxlVGFibGVDZWxsJztcbmltcG9ydCBFZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwgZnJvbSAnLi9FZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwnO1xuaW1wb3J0IEVkaXRhYmxlVGFibGVSb3cgZnJvbSAnLi9FZGl0YWJsZVRhYmxlUm93JztcbmltcG9ydCBTd2FsIGZyb20gXCJzd2VldGFsZXJ0MlwiO1xuaW1wb3J0IFQgZnJvbSBcImkxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0XCI7XG5pbXBvcnQgJy4vZWRpdGFibGUtdGFibGUuY3NzJztcbmltcG9ydCBSZWFjdFRvb2x0aXAgZnJvbSBcInJlYWN0LXRvb2x0aXBcIjtcbmltcG9ydCB7IHNoYWxsb3dFcXVhbCB9IGZyb20gJy4uLy4uL3V0aWxzL21ldGhvZHMnXG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICAgIGNvbFdpZHRoOiAnJ1xufTtcblxuY29uc3QgY3JlYXRlUm93ID0gKHJvdywgY29sdW1ucywgYWN0aW9ucywgc2hvdWxkVXNlVGV4dEFyZWEpID0+IHtcblxuICAgIHZhciBhY3Rpb25fYnV0dG9ucyA9ICcnO1xuICAgIHZhciBjZWxscyA9IGNvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEVkaXRhYmxlVGFibGVDZWxsIHNob3VsZFVzZVRleHRBcmVhPXtzaG91bGRVc2VUZXh0QXJlYX0ga2V5PXtyb3dbJ2lkJ10gKyAnX2ZpZWxkJyArIGl9IG5hbWU9e2NvbC5jb2x1bW5LZXl9IGlkPXtyb3cuaWR9IGlzX2VkaXQ9e3Jvdy5pc19lZGl0fSBoYW5kbGVDaGFuZ2U9e2FjdGlvbnMuaGFuZGxlQ2hhbmdlfT5cbiAgICAgICAgICAgICAgICB7cm93W2NvbC5jb2x1bW5LZXldfVxuICAgICAgICAgICAgPC9FZGl0YWJsZVRhYmxlQ2VsbD5cbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmIChhY3Rpb25zKSB7XG4gICAgICAgIGNlbGxzLnB1c2goPEVkaXRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBrZXk9eydhY3Rpb25zXycgKyByb3dbJ2lkJ119IGlkPXtyb3dbJ2lkJ119IGFjdGlvbnM9e2FjdGlvbnN9Lz4pO1xuICAgIH1cblxuICAgIHJldHVybiBjZWxscztcbn07XG5cbmNvbnN0IGNyZWF0ZU5ld1JvdyA9IChjb2x1bW5zLCBuZXdfcm93LCBhZGROZXcsIGhhbmRsZUNoYW5nZSwgc2hvdWxkVXNlVGV4dEFyZWEpID0+IHtcblxuICAgIHZhciBjZWxscyA9IGNvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuICAgICAgICBsZXQgY2VsbF92YWx1ZSA9ICh0eXBlb2YgbmV3X3Jvd1tjb2wuY29sdW1uS2V5XSAhPT0gJ3VuZGVmaW5lZCcpID8gbmV3X3Jvd1tjb2wuY29sdW1uS2V5XSA6ICcnO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkIGtleT17J25ld19yb3dfJyArIGl9PlxuICAgICAgICAgICAgICAgIHtzaG91bGRVc2VUZXh0QXJlYSAmJlxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCIgaWQ9eyduZXdfJyArIGNvbC5jb2x1bW5LZXl9IG5hbWU9e2NvbC5jb2x1bW5LZXl9IG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2VsbF92YWx1ZX0vPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7IXNob3VsZFVzZVRleHRBcmVhICYmXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiBpZD17J25ld18nICsgY29sLmNvbHVtbktleX0gbmFtZT17Y29sLmNvbHVtbktleX0gb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjZWxsX3ZhbHVlfS8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGNlbGxzLnB1c2goXG4gICAgICAgIDx0ZCBrZXk9J2FkZF9uZXcnPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHRcIiBvbkNsaWNrPXthZGROZXd9PiBBZGQgPC9idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgKTtcblxuICAgIHJldHVybiBjZWxscztcbn07XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRpdGFibGVUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHJvd3M6IHByb3BzLmRhdGEsXG4gICAgICAgICAgICBuZXdfcm93OiB7fVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHdlIHN0b3JlIHRoZSBkZWxldGUgYW5kIHNhdmUgZnVuY3Rpb25zIGluIHByb3BzIGNhdXNlIHdlIG5lZWQgdG8gZXh0ZW5kIHRoZW1cbiAgICAgICAgdGhpcy5vblNhdmUgPSBwcm9wcy5vcHRpb25zLmFjdGlvbnMuc2F2ZS5vbkNsaWNrO1xuXG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHsuLi5wcm9wcy5vcHRpb25zLmFjdGlvbnN9O1xuICAgICAgICB0aGlzLmFjdGlvbnMuZWRpdCA9IHRoaXMuZWRpdFJvdy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFjdGlvbnMuc2F2ZSA9IHRoaXMuc2F2ZVJvdy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFjdGlvbnMuZGVsZXRlID0gdGhpcy5kZWxldGVDbGljay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFjdGlvbnMuaGFuZGxlQ2hhbmdlID0gdGhpcy5vbkNoYW5nZUNlbGwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hY3Rpb25zLmNhbmNlbCA9IHRoaXMuZWRpdFJvd0NhbmNlbC5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuc2F2ZU5ld1JvdyA9IHRoaXMuc2F2ZU5ld1Jvdy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU5ld0NoYW5nZSA9IHRoaXMub25DaGFuZ2VOZXdDZWxsLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZighc2hhbGxvd0VxdWFsKHRoaXMucHJvcHMuZGF0YSwgcHJldlByb3BzLmRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtyb3dzOiB0aGlzLnByb3BzLmRhdGF9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2F2ZVJvdyhpZCwgZXYpIHtcbiAgICAgICAgY29uc3QgeyByb3dzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgcm93ID0gcm93cy5maW5kKHIgPT4gci5pZCA9PSBpZCk7XG4gICAgICAgIHJvdy5pc19lZGl0ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5lZGl0aW5nX3JvdyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICByb3dzOiByb3dzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25TYXZlKHJvdyk7XG4gICAgfVxuXG4gICAgZGVsZXRlQ2xpY2soaWQpIHtcbiAgICAgICAgbGV0IG9uRGVsZXRlID0gdGhpcy5wcm9wcy5vcHRpb25zLmFjdGlvbnMuZGVsZXRlLm9uQ2xpY2s7XG4gICAgICAgIGxldCBub0FsZXJ0ID0gdGhpcy5wcm9wcy5vcHRpb25zLmhhc093blByb3BlcnR5KCdub0FsZXJ0Jyk7XG5cbiAgICAgICAgaWYgKG5vQWxlcnQpIHtcbiAgICAgICAgICAgIG9uRGVsZXRlKGlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFQudHJhbnNsYXRlKFwiZ2VuZXJhbC5hcmVfeW91X3N1cmVcIiksXG4gICAgICAgICAgICAgICAgdGV4dDogVC50cmFuc2xhdGUoXCJnZW5lcmFsLnJlbW92ZV93YXJuaW5nXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwid2FybmluZ1wiLFxuICAgICAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiBcIiNERDZCNTVcIixcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogVC50cmFuc2xhdGUoXCJnZW5lcmFsLnllc19kZWxldGVcIilcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVkaXRSb3coaWQsIGV2KSB7XG4gICAgICAgIGNvbnN0IHsgcm93cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IHJvdyA9IHJvd3MuZmluZChyID0+IHIuaWQgPT0gaWQpO1xuXG4gICAgICAgIC8vc2F2ZSBlZGl0aW5nIHJvdyBmb3IgY2FuY2VsXG4gICAgICAgIHRoaXMuZWRpdGluZ19yb3cgPSB7Li4ucm93fTtcblxuICAgICAgICByb3cuaXNfZWRpdCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICByb3dzOiByb3dzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGVkaXRSb3dDYW5jZWwoaWQsIGV2KSB7XG4gICAgICAgIGNvbnN0IHsgcm93cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgcm93cy5mb3JFYWNoKHIgPT4ge1xuICAgICAgICAgICAgci5pc19lZGl0ID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCByb3dJZHggPSByb3dzLmZpbmRJbmRleChyID0+IHIuaWQgPT0gaWQpO1xuXG4gICAgICAgIHJvd3Nbcm93SWR4XSA9IHRoaXMuZWRpdGluZ19yb3c7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICByb3dzOiByb3dzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlQ2VsbChldikge1xuICAgICAgICBjb25zdCB7IHJvd3MgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCBmaWVsZCA9IGV2LnRhcmdldDtcbiAgICAgICAgbGV0IHJvdyA9IHJvd3MuZmluZChyID0+IHIuaWQgPT0gZmllbGQuaWQpO1xuXG4gICAgICAgIHJvd1tmaWVsZC5uYW1lXSA9IGZpZWxkLnZhbHVlO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgcm93czogcm93c1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZU5ld0NlbGwoZXYpIHtcbiAgICAgICAgY29uc3Qge25ld19yb3d9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IGZpZWxkID0gZXYudGFyZ2V0O1xuXG4gICAgICAgIG5ld19yb3dbZmllbGQubmFtZV0gPSBmaWVsZC52YWx1ZTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIG5ld19yb3c6IG5ld19yb3dcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2F2ZU5ld1Jvdyhldikge1xuICAgICAgICBjb25zdCB7bmV3X3Jvd30gPSB0aGlzLnN0YXRlO1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIHRoaXMub25TYXZlKG5ld19yb3cpO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgbmV3X3Jvdzoge31cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge29wdGlvbnMsIGNvbHVtbnMgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB0YWJsZUNsYXNzID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBvcHRpb25zLmNsYXNzTmFtZSA6ICcnO1xuICAgICAgICBsZXQgdGV4dEFyZWEgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwidGV4dEFyZWFcIik7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e1widGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ib3JkZXJlZCBlZGl0YWJsZVRhYmxlIFwiICsgdGFibGVDbGFzc30+XG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2xXaWR0aCA9IChjb2wud2lkdGgpID8gY29sLndpZHRoIDogZGVmYXVsdHMuY29sV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RWRpdGFibGVUYWJsZUhlYWRpbmcgd2lkdGg9e2NvbFdpZHRofSBrZXk9eydoZWFkaW5nXycgKyBpfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRWRpdGFibGVUYWJsZUhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMuYWN0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RWRpdGFibGVUYWJsZUhlYWRpbmcga2V5PSdhY3Rpb25zX2hlYWRpbmcnID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FZGl0YWJsZVRhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5sZW5ndGggPiAwICYmIHRoaXMuc3RhdGUucm93cy5tYXAoKHJvdyxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyb3cpICYmIHJvdy5sZW5ndGggIT09IGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRGF0YSBhdCByb3cgJHtpfSBpcyAke3Jvdy5sZW5ndGh9LiBJdCBzaG91bGQgYmUgJHtjb2x1bW5zLmxlbmd0aH0uYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8dHIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEVkaXRhYmxlVGFibGVSb3cgZXZlbj17aSUyID09PSAwfSBrZXk9eydyb3dfJyArIHJvdy5pZH0gaWQ9e3Jvdy5pZH0gPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NyZWF0ZVJvdyhyb3csIGNvbHVtbnMsIHRoaXMuYWN0aW9ucywgdGV4dEFyZWEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0VkaXRhYmxlVGFibGVSb3c+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8RWRpdGFibGVUYWJsZVJvdyBldmVuPXswfSBpZD0nbmV3X3Jvdycga2V5PSduZXdfcm93Jz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3JlYXRlTmV3Um93KGNvbHVtbnMsIHRoaXMuc3RhdGUubmV3X3JvdywgdGhpcy5zYXZlTmV3Um93LCB0aGlzLmhhbmRsZU5ld0NoYW5nZSwgdGV4dEFyZWEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9FZGl0YWJsZVRhYmxlUm93PlxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPFJlYWN0VG9vbHRpcCBkZWxheVNob3c9ezEwfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IEVkaXRhYmxlVGFibGVDZWxsID0gKHByb3BzKSA9PiB7XG5cbiAgICBpZiAocHJvcHMuaXNfZWRpdCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIHshcHJvcHMuc2hvdWxkVXNlVGV4dEFyZWEgJiZcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCIgZGVmYXVsdFZhbHVlPXtwcm9wcy5jaGlsZHJlbn0gbmFtZT17cHJvcHMubmFtZX0gaWQ9e3Byb3BzLmlkfSBvbkNoYW5nZT17cHJvcHMuaGFuZGxlQ2hhbmdlfS8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtwcm9wcy5zaG91bGRVc2VUZXh0QXJlYSAmJlxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCIgZGVmYXVsdFZhbHVlPXtwcm9wcy5jaGlsZHJlbn0gbmFtZT17cHJvcHMubmFtZX0gaWQ9e3Byb3BzLmlkfSBvbkNoYW5nZT17cHJvcHMuaGFuZGxlQ2hhbmdlfS8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkPntwcm9wcy5jaGlsZHJlbn08L3RkPlxuICAgICAgICApO1xuICAgIH1cblxufTtcblxuZXhwb3J0IGRlZmF1bHQgRWRpdGFibGVUYWJsZUNlbGw7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY2xhc3MgRWRpdGFibGVUYWJsZUhlYWRpbmcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICByZW5kZXIgKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRoIHdpZHRoPXt0aGlzLnByb3BzLndpZHRofT5cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICApO1xuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBFZGl0YWJsZVRhYmxlSGVhZGluZzsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0YWJsZVRhYmxlUm93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyBjaGlsZHJlbiwgZXZlbiwgaWQgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0ciBpZD17aWR9IHJvbGU9XCJyb3dcIiBjbGFzc05hbWU9e2V2ZW4gPyAnZXZlbicgOiAnb2RkJ30+XG4gICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3RhYmxlQWN0aW9uc1RhYmxlQ2VsbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb24gPSB0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24gPSB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24uYmluZCh0aGlzKTtcblxuICAgIH1cblxuICAgIHNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9uKSB7XG4gICAgICAgIGxldCB7aWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheScpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uZGlzcGxheShpZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVBY3Rpb24oYWN0aW9uLCBpZCwgZXYpIHtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgYWN0aW9uKGlkKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7YWN0aW9ucywgaWR9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJhY3Rpb25zXCIga2V5PVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIHthY3Rpb25zLmhhc093blByb3BlcnR5KCdkZWxldGUnKSAmJiB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9ucy5kZWxldGUpICAmJlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgZGF0YS10aXA9XCJkZWxldGVcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMsIGFjdGlvbnMuZGVsZXRlLm9uQ2xpY2ssIGlkKX0gPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtdHJhc2gtbyBkZWxldGUtaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7YWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY3VzdG9tJykgJiYgYWN0aW9ucy5jdXN0b20ubWFwKGEgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uKGEpICYmXG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLXRpcD17YS50b29sdGlwfSBrZXk9eydjdXN0b21fJyArIGEubmFtZX0gb25DbGljaz17dGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzLCBhLm9uQ2xpY2ssIGlkKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YS5pY29ufVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICk7XG4gICAgfVxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU2VsZWN0YWJsZVRhYmxlSGVhZGluZyBmcm9tICcuL1NlbGVjdGFibGVUYWJsZUhlYWRpbmcnO1xuaW1wb3J0IFNlbGVjdGFibGVUYWJsZUNlbGwgZnJvbSAnLi9TZWxlY3RhYmxlVGFibGVDZWxsJztcbmltcG9ydCBTZWxlY3RhYmxlVGFibGVSb3cgZnJvbSAnLi9TZWxlY3RhYmxlVGFibGVSb3cnO1xuaW1wb3J0IFNlbGVjdGFibGVBY3Rpb25zVGFibGVDZWxsIGZyb20gJy4vU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwnO1xuaW1wb3J0IFJlYWN0VG9vbHRpcCBmcm9tICdyZWFjdC10b29sdGlwJ1xuaW1wb3J0ICcuL3NlbGVjdGFibGUtdGFibGUuY3NzJztcblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgc29ydEZ1bmM6IChhLGIpID0+IChhIDwgYiA/IC0xIDogKGEgPiBiID8gMSA6IDApKSxcbiAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgc29ydENvbDogMCxcbiAgICBzb3J0RGlyOiAxLFxuICAgIGNvbFdpZHRoOiAnJ1xufVxuXG5jb25zdCBjcmVhdGVSb3cgPSAocm93LCBjb2x1bW5zLCBhY3Rpb25zKSA9PiB7XG5cbiAgICB2YXIgYWN0aW9uX2J1dHRvbnMgPSAnJztcbiAgICB2YXIgY2VsbHMgPSBjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxTZWxlY3RhYmxlVGFibGVDZWxsIGtleT17cm93WydpZCddICsgJ19maWVsZCcgKyBpfSBuYW1lPXtjb2wuY29sdW1uS2V5fSBpZD17cm93LmlkfT5cbiAgICAgICAgICAgICAgICB7cm93W2NvbC5jb2x1bW5LZXldfVxuICAgICAgICAgICAgPC9TZWxlY3RhYmxlVGFibGVDZWxsPlxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgICAgY2VsbHMucHVzaCg8U2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwga2V5PSdhY3Rpb25zX2NlbGwnIGlkPXtyb3dbJ2lkJ119IGFjdGlvbnM9e2FjdGlvbnN9IC8+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbHM7XG59O1xuXG5jb25zdCBnZXRTb3J0RGlyID0gKGNvbHVtbktleSwgY29sdW1uSW5kZXgsIHNvcnRDb2wsIHNvcnREaXIpID0+IHtcbiAgICBpZihjb2x1bW5LZXkgJiYgKGNvbHVtbktleSA9PT0gc29ydENvbCkpIHtcbiAgICAgICAgcmV0dXJuIHNvcnREaXI7XG4gICAgfVxuICAgIGlmKHNvcnRDb2wgPT09IGNvbHVtbkluZGV4KSB7XG4gICAgICAgIHJldHVybiBzb3J0RGlyO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbFxufTtcblxuXG5jbGFzcyBTZWxlY3RhYmxlVGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtvcHRpb25zLCBjb2x1bW5zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBzZWxlY3RlZElkcyA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ3NlbGVjdGVkSWRzJykgPyBvcHRpb25zLnNlbGVjdGVkSWRzIDogW107XG4gICAgICAgIGxldCB0YWJsZUNsYXNzID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBvcHRpb25zLmNsYXNzTmFtZSA6ICcnO1xuICAgICAgICB0YWJsZUNsYXNzICs9IChvcHRpb25zLmFjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2VkaXQnKSkgPyAnIHRhYmxlLWhvdmVyJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e1widGFibGUgdGFibGUtc3RyaXBlZCBkYXRhVGFibGUgXCIgKyB0YWJsZUNsYXNzfT5cbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwic2VsZWN0X2FsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3RfYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e29wdGlvbnMuYWN0aW9ucy5lZGl0Lm9uU2VsZWN0ZWRBbGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e29wdGlvbnMuc2VsZWN0ZWRBbGx9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc29ydENvbCA9ICh0eXBlb2Ygb3B0aW9ucy5zb3J0Q29sICE9ICd1bmRlZmluZWQnKSA/IG9wdGlvbnMuc29ydENvbCA6IGRlZmF1bHRzLnNvcnRDb2w7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnREaXIgPSAodHlwZW9mIG9wdGlvbnMuc29ydERpciAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLnNvcnREaXIgOiBkZWZhdWx0cy5zb3J0RGlyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0RnVuYyA9ICh0eXBlb2Ygb3B0aW9ucy5zb3J0RnVuYyAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLnNvcnRGdW5jIDogZGVmYXVsdHMuc29ydEZ1bmM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnRhYmxlID0gKHR5cGVvZiBjb2wuc29ydGFibGUgIT0gJ3VuZGVmaW5lZCcpID8gY29sLnNvcnRhYmxlIDogZGVmYXVsdHMuc29ydGFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFdpZHRoID0gKHR5cGVvZiBjb2wud2lkdGggIT0gJ3VuZGVmaW5lZCcpID8gY29sLndpZHRoIDogZGVmYXVsdHMuY29sV2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0YWJsZVRhYmxlSGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Tb3J0PXt0aGlzLnByb3BzLm9uU29ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnREaXI9e2dldFNvcnREaXIoY29sLmNvbHVtbktleSwgaSwgc29ydENvbCwgc29ydERpcil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZT17c29ydGFibGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0RnVuYz17c29ydEZ1bmN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleD17aX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbktleT17Y29sLmNvbHVtbktleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXtjb2xXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17J2hlYWRpbmdfJytpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29sLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdGFibGVUYWJsZUhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbnMuYWN0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdGFibGVUYWJsZUhlYWRpbmcga2V5PSdhY3Rpb25zX2hlYWRpbmcnID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3B0aW9ucy5hY3Rpb25zSGVhZGVyIHx8ICcgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0YWJsZVRhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5sZW5ndGggPiAwICYmIHRoaXMucHJvcHMuZGF0YS5tYXAoKHJvdyxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJvdykgJiYgcm93Lmxlbmd0aCAhPT0gY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYERhdGEgYXQgcm93ICR7aX0gaXMgJHtyb3cubGVuZ3RofS4gSXQgc2hvdWxkIGJlICR7Y29sdW1ucy5sZW5ndGh9LmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8dHIga2V5PXsncm93XycraX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0YWJsZVRhYmxlUm93IGNoZWNrZWQ9e29wdGlvbnMuc2VsZWN0ZWRBbGwgfHwgc2VsZWN0ZWRJZHMuaW5jbHVkZXMocm93WydpZCddKX0gZXZlbj17aSUyID09PSAwfSBrZXk9eydyb3dfJytyb3dbJ2lkJ119IGlkPXtyb3dbJ2lkJ119IGFjdGlvbnM9e29wdGlvbnMuYWN0aW9uc30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjcmVhdGVSb3cocm93LCBjb2x1bW5zLCBvcHRpb25zLmFjdGlvbnMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0YWJsZVRhYmxlUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICA8UmVhY3RUb29sdGlwIGRlbGF5U2hvdz17MTB9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0YWJsZVRhYmxlO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJztcblxuY29uc3QgU2VsZWN0YWJsZVRhYmxlQ2VsbCA9IChwcm9wcykgPT4ge1xuICAgIGxldCB7Y2hpbGRyZW59ID0gcHJvcHM7XG5cdGxldCB2YWx1ZSA9ICcnO1xuXHRpZihjaGlsZHJlbikge1xuXHQgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuXHQgICAgICAgIHZhbHVlID0gY2hpbGRyZW47XG4gICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdmFsdWUgPSA8UmF3SFRNTD57Y2hpbGRyZW4udG9TdHJpbmcoKX08L1Jhd0hUTUw+XG4gICAgICAgIH1cbiAgICB9XG5cblx0cmV0dXJuIChcblx0XHQ8dGQgey4uLnByb3BzfT5cbiAgICAgICAgICAgIHt2YWx1ZX1cblx0XHQ8L3RkPlxuXHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0YWJsZVRhYmxlQ2VsbDtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5jbGFzcyBTZWxlY3RhYmxlVGFibGVIZWFkaW5nIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuXHRjb25zdHJ1Y3RvciAocHJvcHMpIHtcblx0XHRzdXBlcihwcm9wcyk7XG5cdFx0dGhpcy5oYW5kbGVTb3J0ID0gdGhpcy5oYW5kbGVTb3J0LmJpbmQodGhpcyk7XG5cdH1cblxuXHRnZXRTb3J0Q2xhc3MoKSB7XG5cblx0XHRpZiAoIXRoaXMucHJvcHMuc29ydGFibGUpIHJldHVybiBudWxsO1xuXG5cdFx0c3dpdGNoKHRoaXMucHJvcHMuc29ydERpcikge1xuXHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRyZXR1cm4gJ3NvcnRpbmdfYXNjJztcblx0XHRcdGNhc2UgLTE6XG5cdFx0XHRcdHJldHVybiAnc29ydGluZ19kZXNjJztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb3BzLnNvcnRhYmxlID8gJ3NvcnRpbmcnIDogbnVsbFxuXHRcdH1cblx0fVxuXG5cdGhhbmRsZVNvcnQoZSkge1xuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRpZighdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnb25Tb3J0JykgfHwgIXRoaXMucHJvcHMuc29ydGFibGUpIHJldHVybjtcblxuXHRcdHRoaXMucHJvcHMub25Tb3J0KFxuXHRcdFx0dGhpcy5wcm9wcy5jb2x1bW5JbmRleCxcblx0XHRcdHRoaXMucHJvcHMuY29sdW1uS2V5LFxuXHRcdFx0dGhpcy5wcm9wcy5zb3J0RGlyID8gdGhpcy5wcm9wcy5zb3J0RGlyKi0xIDogMSxcblx0XHRcdHRoaXMucHJvcHMuc29ydEZ1bmNcblx0XHQpO1xuXHR9XG5cblx0cmVuZGVyICgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PHRoIG9uQ2xpY2s9e3RoaXMuaGFuZGxlU29ydH1cblx0XHRcdFx0Y2xhc3NOYW1lPXt0aGlzLmdldFNvcnRDbGFzcygpfVxuXHRcdFx0XHR3aWR0aD17dGhpcy5wcm9wcy53aWR0aH1cblx0XHRcdFx0PlxuXHRcdFx0XHR7dGhpcy5wcm9wcy5jaGlsZHJlbn1cblx0XHRcdDwvdGg+XG5cdFx0KTtcdFxuXHR9XG5cdFxufVxuXG5TZWxlY3RhYmxlVGFibGVIZWFkaW5nLnByb3BUeXBlcyA9IHtcblx0b25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcblx0c29ydERpcjogUHJvcFR5cGVzLm51bWJlcixcblx0Y29sdW1uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG5cdGNvbHVtbktleTogUHJvcFR5cGVzLmFueSxcblx0c29ydGFibGU6IFByb3BUeXBlcy5ib29sLFxuXHRzb3J0RnVuYzogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdGFibGVUYWJsZUhlYWRpbmc7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0YWJsZVRhYmxlUm93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFZGl0ID0gdGhpcy5oYW5kbGVFZGl0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0ID0gdGhpcy5oYW5kbGVTZWxlY3QuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBzaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbikge1xuICAgICAgICBsZXQge2lkfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmICghYWN0aW9uLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNwbGF5KGlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUVkaXQoaWQsIGV2KSB7XG4gICAgICAgIC8vIGJ5IHBhc3NcbiAgICAgICAgaWYoZXYudGFyZ2V0LnR5cGUgPT09IFwiY2hlY2tib3hcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5lZGl0Lm9uQ2xpY2soaWQpO1xuICAgIH1cblxuICAgIGhhbmRsZVNlbGVjdChpZCwgZXYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLmVkaXQub25TZWxlY3RlZChpZCwgZXYudGFyZ2V0LmNoZWNrZWQpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge2V2ZW4sIGFjdGlvbnMsIGlkLCBjaGlsZHJlbiwgY2hlY2tlZH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgY2FuRWRpdCA9IChhY3Rpb25zLmhhc093blByb3BlcnR5KCdlZGl0JykgJiYgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbnMuZWRpdCkpO1xuICAgICAgICBsZXQgcm93Q2xhc3MgPSBldmVuID8gJ2V2ZW4nIDogJ29kZCc7XG5cbiAgICAgICAgaWYgKGNhbkVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHRyIHJvbGU9XCJyb3dcIiBjbGFzc05hbWU9e3Jvd0NsYXNzICsgXCIgY2FuLWVkaXRcIn0gb25DbGljaz17dGhpcy5oYW5kbGVFZGl0LmJpbmQodGhpcywgaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGtleT17aWQgKyAnX3NlbGVjdCd9PjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD17aWQgKyAnX3NlbGVjdCd9IG5hbWU9e2lkICsgJ19zZWxlY3QnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlU2VsZWN0LmJpbmQodGhpcywgaWQpfS8+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dHIgcm9sZT1cInJvd1wiIGNsYXNzTmFtZT17cm93Q2xhc3N9PlxuICAgICAgICAgICAgICAgICAgICA8dGQga2V5PXtpZCArICdfc2VsZWN0J30gPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD17aWQgKyAnX3NlbGVjdCd9IG5hbWU9e2lkICsgJ19zZWxlY3QnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlU2VsZWN0LmJpbmQodGhpcywgaWQpfS8+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICk7XG5cbiAgICB9XG59O1xuXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTb3J0YWJsZUFjdGlvbnNUYWJsZUNlbGwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uID0gdGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzKTtcblxuICAgIH1cblxuICAgIHNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9uKSB7XG4gICAgICAgIGxldCB7aWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheScpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uZGlzcGxheShpZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVBY3Rpb24oYWN0aW9uLCBpZCwgZXYpIHtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgYWN0aW9uKGlkKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7YWN0aW9ucywgaWR9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJhY3Rpb25zXCIga2V5PVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIHthY3Rpb25zLmhhc093blByb3BlcnR5KCdlZGl0JykgJiYgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbnMuZWRpdCkgJiZcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgZGF0YS10aXA9XCJlZGl0XCIgb25DbGljaz17dGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzLCBhY3Rpb25zLmVkaXQub25DbGljaywgaWQpfSA+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHthY3Rpb25zLmhhc093blByb3BlcnR5KCdkZWxldGUnKSAmJiB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9ucy5kZWxldGUpICAmJlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLXRpcD1cImRlbGV0ZVwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcywgYWN0aW9ucy5kZWxldGUub25DbGljaywgaWQpfSA+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRyYXNoLW8gZGVsZXRlLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7J2N1c3RvbScgaW4gYWN0aW9ucyAmJiBhY3Rpb25zLmN1c3RvbS5tYXAoYSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYSwgaWQpICYmXG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLXRpcD17YS50b29sdGlwfSBrZXk9eydjdXN0b21fJyArIGEubmFtZX0gb25DbGljaz17dGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzLCBhLm9uQ2xpY2ssIGlkKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YS5pY29ufVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICk7XG4gICAgfVxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHVwZGF0ZSBmcm9tICdpbW11dGFiaWxpdHktaGVscGVyJztcbmltcG9ydCB7IERyYWdEcm9wQ29udGV4dCB9IGZyb20gJ3JlYWN0LWRuZCc7XG5pbXBvcnQgSFRNTDVCYWNrZW5kIGZyb20gJ3JlYWN0LWRuZC1odG1sNS1iYWNrZW5kJztcbmltcG9ydCBTb3J0YWJsZVRhYmxlSGVhZGluZyBmcm9tICcuL1NvcnRhYmxlVGFibGVIZWFkaW5nJztcbmltcG9ydCBTb3J0YWJsZVRhYmxlQ2VsbCBmcm9tICcuL1NvcnRhYmxlVGFibGVDZWxsJztcbmltcG9ydCBTb3J0YWJsZUFjdGlvbnNUYWJsZUNlbGwgZnJvbSAnLi9Tb3J0YWJsZUFjdGlvbnNUYWJsZUNlbGwnO1xuaW1wb3J0IFNvcnRhYmxlVGFibGVSb3cgZnJvbSAnLi9Tb3J0YWJsZVRhYmxlUm93JztcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0JztcbmltcG9ydCAnLi90YWJsZS1zb3J0YWJsZS5jc3MnO1xuaW1wb3J0IHtzaGFsbG93RXF1YWx9IGZyb20gXCIuLi8uLi91dGlscy9tZXRob2RzXCI7XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICAgIGNvbFdpZHRoOiAnJ1xufVxuXG5jb25zdCBjcmVhdGVSb3cgPSAocm93LCBjb2x1bW5zLCBhY3Rpb25zKSA9PiB7XG5cbiAgICB2YXIgYWN0aW9uX2J1dHRvbnMgPSAnJztcblx0dmFyIGNlbGxzID0gY29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG5cdFx0cmV0dXJuIChcblx0XHQ8U29ydGFibGVUYWJsZUNlbGwga2V5PXtpfT5cbiAgICAgICAgICAgIHtyb3dbY29sLmNvbHVtbktleV19XG5cdFx0PC9Tb3J0YWJsZVRhYmxlQ2VsbD5cblx0XHQpO1xuXHR9KTtcblxuICAgIGlmIChhY3Rpb25zKSB7XG4gICAgICAgIGNlbGxzLnB1c2goPFNvcnRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBrZXk9J2FjdGlvbnMnIGlkPXtyb3dbJ2lkJ119IGFjdGlvbnM9e2FjdGlvbnN9Lz4pO1xuICAgIH1cblxuICAgIHJldHVybiBjZWxscztcbn07XG5cblxuY2xhc3MgU29ydGFibGVUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMubW92ZVJvdyA9IHRoaXMubW92ZVJvdy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmRyb3BSb3cgPSB0aGlzLmRyb3BSb3cuYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgcm93czogcHJvcHMuZGF0YVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgaWYoIXNoYWxsb3dFcXVhbCh0aGlzLnByb3BzLmRhdGEsIHByZXZQcm9wcy5kYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cm93czogdGhpcy5wcm9wcy5kYXRhfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1vdmVSb3coZHJhZ0luZGV4LCBob3ZlckluZGV4KSB7XG4gICAgICAgIGNvbnN0IHsgcm93cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgY29uc3QgZHJhZ1JvdyA9IHJvd3NbZHJhZ0luZGV4XTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHVwZGF0ZSh0aGlzLnN0YXRlLCB7XG4gICAgICAgICAgICByb3dzOiB7XG4gICAgICAgICAgICAgICAgJHNwbGljZTogW1xuICAgICAgICAgICAgICAgICAgICBbZHJhZ0luZGV4LCAxXSxcbiAgICAgICAgICAgICAgICAgICAgW2hvdmVySW5kZXgsIDAsIGRyYWdSb3ddLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgZHJvcFJvdyhpZCwgaW5kZXgpIHtcbiAgICAgICAgbGV0IHtvcmRlckZpZWxkfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBuZXdPcmRlciA9IGluZGV4ICsgMTtcbiAgICAgICAgbGV0IHJvd3MgPSBbLi4udGhpcy5zdGF0ZS5yb3dzXTtcblxuICAgICAgICBmb3IodmFyIGkgaW4gcm93cykge1xuICAgICAgICAgICAgcm93c1tpXVtvcmRlckZpZWxkXSA9IHBhcnNlSW50KGkpICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUodXBkYXRlKHRoaXMuc3RhdGUsIHtyb3dzOiB7JHNldDogcm93c319KSk7XG5cbiAgICAgICAgdGhpcy5wcm9wcy5kcm9wQ2FsbGJhY2socm93cywgaWQsIG5ld09yZGVyKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7b3B0aW9ucywgY29sdW1uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgdGFibGVDbGFzcyA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2NsYXNzTmFtZScpID8gb3B0aW9ucy5jbGFzc05hbWUgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzb3J0YWJsZS10YWJsZS1ib3hcIj5cbiAgICAgICAgICAgICAgICA8aT57VC50cmFuc2xhdGUoXCJnZW5lcmFsLmRyYWdfYW5kX2Ryb3BcIil9PC9pPlxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e1widGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciBzb3J0YWJsZVRhYmxlIFwiICsgdGFibGVDbGFzc30+XG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2xXaWR0aCA9IChjb2wud2lkdGgpID8gY29sLndpZHRoIDogZGVmYXVsdHMuY29sV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNvcnRhYmxlVGFibGVIZWFkaW5nIHdpZHRoPXtjb2xXaWR0aH0ga2V5PXtpfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29sLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NvcnRhYmxlVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtvcHRpb25zLmFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTb3J0YWJsZVRhYmxlSGVhZGluZyBrZXk9J2FjdGlvbnMnID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NvcnRhYmxlVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLmxlbmd0aCA+IDAgJiYgdGhpcy5zdGF0ZS5yb3dzLm1hcCgocm93LGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocm93KSAmJiByb3cubGVuZ3RoICE9PSBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRGF0YSBhdCByb3cgJHtpfSBpcyAke3Jvdy5sZW5ndGh9LiBJdCBzaG91bGQgYmUgJHtjb2x1bW5zLmxlbmd0aH0uYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDx0ciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U29ydGFibGVUYWJsZVJvdyBldmVuPXtpJTIgPT09IDB9IGtleT17cm93LmlkfSBpbmRleD17aX0gaWQ9e3Jvdy5pZH0gbW92ZUNhcmQ9e3RoaXMubW92ZVJvd30gZHJvcENhcmQ9e3RoaXMuZHJvcFJvd30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjcmVhdGVSb3cocm93LCBjb2x1bW5zLCBvcHRpb25zLmFjdGlvbnMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU29ydGFibGVUYWJsZVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG5Tb3J0YWJsZVRhYmxlLnByb3BUeXBlcyA9IHtcbiAgICBkYXRhOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGFjdGlvbnM6IFByb3BUeXBlcy5vYmplY3RcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGNvbHVtbktleTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG4gICAgfSkpLmlzUmVxdWlyZWQsXG4gICAgb3JkZXJGaWVsZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGRyb3BDYWxsYmFjazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxufVxuXG5leHBvcnQgZGVmYXVsdCBEcmFnRHJvcENvbnRleHQoSFRNTDVCYWNrZW5kKShTb3J0YWJsZVRhYmxlKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IFNvcnRhYmxlVGFibGVDZWxsID0gKHByb3BzKSA9PiAoXG5cdDx0ZCB7Li4ucHJvcHN9Pntwcm9wcy5jaGlsZHJlbn08L3RkPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgU29ydGFibGVUYWJsZUNlbGw7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY2xhc3MgU29ydGFibGVUYWJsZUhlYWRpbmcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG5cdGNvbnN0cnVjdG9yIChwcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0fVxuXG5cdHJlbmRlciAoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDx0aCB3aWR0aD17dGhpcy5wcm9wcy53aWR0aH0+XG5cdFx0XHRcdHt0aGlzLnByb3BzLmNoaWxkcmVufVxuXHRcdFx0PC90aD5cblx0XHQpO1x0XG5cdH1cblx0XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNvcnRhYmxlVGFibGVIZWFkaW5nOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZmluZERPTU5vZGUgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgRHJhZ1NvdXJjZSwgRHJvcFRhcmdldCB9IGZyb20gJ3JlYWN0LWRuZCc7XG5cbmNvbnN0IHN0eWxlID0ge1xuICAgIGJvcmRlcjogJzFweCBkYXNoZWQgZ3JheScsXG4gICAgcGFkZGluZzogJzAuNXJlbSAxcmVtJyxcbiAgICBtYXJnaW5Cb3R0b206ICcuNXJlbScsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICAgIGN1cnNvcjogJ21vdmUnLFxufTtcblxuY29uc3Qgcm93U291cmNlID0ge1xuICAgIGJlZ2luRHJhZyhwcm9wcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHByb3BzLmlkLFxuICAgICAgICAgICAgaW5kZXg6IHByb3BzLmluZGV4LFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgZW5kRHJhZyhwcm9wcywgbW9uaXRvcikge1xuICAgICAgICBpZiAobW9uaXRvci5kaWREcm9wKCkpIHtcbiAgICAgICAgICAgIHByb3BzLmRyb3BDYXJkKHByb3BzLmlkLCBwcm9wcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5jb25zdCByb3dUYXJnZXQgPSB7XG4gICAgaG92ZXIocHJvcHMsIG1vbml0b3IsIGNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBkcmFnSW5kZXggPSBtb25pdG9yLmdldEl0ZW0oKS5pbmRleDtcbiAgICAgICAgY29uc3QgaG92ZXJJbmRleCA9IHByb3BzLmluZGV4O1xuXG4gICAgICAgIC8vIERvbid0IHJlcGxhY2UgaXRlbXMgd2l0aCB0aGVtc2VsdmVzXG4gICAgICAgIGlmIChkcmFnSW5kZXggPT09IGhvdmVySW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGVybWluZSByZWN0YW5nbGUgb24gc2NyZWVuXG4gICAgICAgIGNvbnN0IGhvdmVyQm91bmRpbmdSZWN0ID0gZmluZERPTU5vZGUoY29tcG9uZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAvLyBHZXQgdmVydGljYWwgbWlkZGxlXG4gICAgICAgIGNvbnN0IGhvdmVyTWlkZGxlWSA9IChob3ZlckJvdW5kaW5nUmVjdC5ib3R0b20gLSBob3ZlckJvdW5kaW5nUmVjdC50b3ApIC8gMjtcblxuICAgICAgICAvLyBEZXRlcm1pbmUgbW91c2UgcG9zaXRpb25cbiAgICAgICAgY29uc3QgY2xpZW50T2Zmc2V0ID0gbW9uaXRvci5nZXRDbGllbnRPZmZzZXQoKTtcblxuICAgICAgICAvLyBHZXQgcGl4ZWxzIHRvIHRoZSB0b3BcbiAgICAgICAgY29uc3QgaG92ZXJDbGllbnRZID0gY2xpZW50T2Zmc2V0LnkgLSBob3ZlckJvdW5kaW5nUmVjdC50b3A7XG5cbiAgICAgICAgLy8gT25seSBwZXJmb3JtIHRoZSBtb3ZlIHdoZW4gdGhlIG1vdXNlIGhhcyBjcm9zc2VkIGhhbGYgb2YgdGhlIGl0ZW1zIGhlaWdodFxuICAgICAgICAvLyBXaGVuIGRyYWdnaW5nIGRvd253YXJkcywgb25seSBtb3ZlIHdoZW4gdGhlIGN1cnNvciBpcyBiZWxvdyA1MCVcbiAgICAgICAgLy8gV2hlbiBkcmFnZ2luZyB1cHdhcmRzLCBvbmx5IG1vdmUgd2hlbiB0aGUgY3Vyc29yIGlzIGFib3ZlIDUwJVxuXG4gICAgICAgIC8vIERyYWdnaW5nIGRvd253YXJkc1xuICAgICAgICBpZiAoZHJhZ0luZGV4IDwgaG92ZXJJbmRleCAmJiBob3ZlckNsaWVudFkgPCBob3Zlck1pZGRsZVkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERyYWdnaW5nIHVwd2FyZHNcbiAgICAgICAgaWYgKGRyYWdJbmRleCA+IGhvdmVySW5kZXggJiYgaG92ZXJDbGllbnRZID4gaG92ZXJNaWRkbGVZKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaW1lIHRvIGFjdHVhbGx5IHBlcmZvcm0gdGhlIGFjdGlvblxuICAgICAgICBwcm9wcy5tb3ZlQ2FyZChkcmFnSW5kZXgsIGhvdmVySW5kZXgpO1xuXG4gICAgICAgIC8vIE5vdGU6IHdlJ3JlIG11dGF0aW5nIHRoZSBtb25pdG9yIGl0ZW0gaGVyZSFcbiAgICAgICAgLy8gR2VuZXJhbGx5IGl0J3MgYmV0dGVyIHRvIGF2b2lkIG11dGF0aW9ucyxcbiAgICAgICAgLy8gYnV0IGl0J3MgZ29vZCBoZXJlIGZvciB0aGUgc2FrZSBvZiBwZXJmb3JtYW5jZVxuICAgICAgICAvLyB0byBhdm9pZCBleHBlbnNpdmUgaW5kZXggc2VhcmNoZXMuXG4gICAgICAgIG1vbml0b3IuZ2V0SXRlbSgpLmluZGV4ID0gaG92ZXJJbmRleDtcbiAgICB9LFxufTtcblxuY2xhc3MgU29ydGFibGVUYWJsZVJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgdGV4dCwgaXNEcmFnZ2luZywgY29ubmVjdERyYWdTb3VyY2UsIGNvbm5lY3REcm9wVGFyZ2V0LCBjaGlsZHJlbiwgZXZlbiwgaWQgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IG9wYWNpdHkgPSBpc0RyYWdnaW5nID8gMCA6IDE7XG5cbiAgICAgICAgcmV0dXJuIGNvbm5lY3REcmFnU291cmNlKGNvbm5lY3REcm9wVGFyZ2V0KFxuICAgICAgICAgICAgPHRyIGlkPXtpZH0gcm9sZT1cInJvd1wiIGNsYXNzTmFtZT17ZXZlbiA/ICdldmVuJyA6ICdvZGQnfSBzdHlsZT17eyAuLi5zdHlsZSwgb3BhY2l0eSB9fT5cblx0XHQgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgIDwvdHI+LFxuICAgICAgICApKTtcbiAgICB9XG59XG5cblNvcnRhYmxlVGFibGVSb3cucHJvcFR5cGVzID0ge1xuICAgIGNvbm5lY3REcmFnU291cmNlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNvbm5lY3REcm9wVGFyZ2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgaXNEcmFnZ2luZzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBpZDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgIG1vdmVDYXJkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHRcbiAgICBEcmFnU291cmNlKCdjYXJkJywgcm93U291cmNlLCAoY29ubmVjdCwgbW9uaXRvcikgPT4gKHtcbiAgICAgICAgY29ubmVjdERyYWdTb3VyY2U6IGNvbm5lY3QuZHJhZ1NvdXJjZSgpLFxuICAgICAgICBpc0RyYWdnaW5nOiBtb25pdG9yLmlzRHJhZ2dpbmcoKSxcbiAgICAgICAgfSkpKFxuICAgIERyb3BUYXJnZXQoJ2NhcmQnLCByb3dUYXJnZXQsIGNvbm5lY3QgPT4gKHtcbiAgICAgICAgY29ubmVjdERyb3BUYXJnZXQ6IGNvbm5lY3QuZHJvcFRhcmdldCgpLFxuICAgICAgICB9KSlcbiAgICAoU29ydGFibGVUYWJsZVJvdykpO1xuXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY3Rpb25zVGFibGVDZWxsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbiA9IHRoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbiA9IHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbi5iaW5kKHRoaXMpO1xuXG4gICAgfVxuXG4gICAgc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb24pIHtcbiAgICAgICAgbGV0IHtpZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghYWN0aW9uLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNwbGF5KGlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUFjdGlvbihhY3Rpb24sIGlkLCBldikge1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBhY3Rpb24oaWQpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHthY3Rpb25zLCBpZH0gPSB0aGlzLnByb3BzO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cImFjdGlvbnNcIiBrZXk9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAge2FjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2RlbGV0ZScpICYmIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb25zLmRlbGV0ZSkgICYmXG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLXRpcD1cImRlbGV0ZVwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcywgYWN0aW9ucy5kZWxldGUub25DbGljaywgaWQpfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10cmFzaC1vIGRlbGV0ZS1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHthY3Rpb25zLmhhc093blByb3BlcnR5KCdjdXN0b20nKSAmJiBhY3Rpb25zLmN1c3RvbS5tYXAoYSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYSkgJiZcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPXthLnRvb2x0aXB9IGtleT17J2N1c3RvbV8nICsgYS5uYW1lfSBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMsIGEub25DbGljaywgaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthLmljb259XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUYWJsZUhlYWRpbmcgZnJvbSAnLi9UYWJsZUhlYWRpbmcnO1xuaW1wb3J0IFRhYmxlQ2VsbCBmcm9tICcuL1RhYmxlQ2VsbCc7XG5pbXBvcnQgVGFibGVSb3cgZnJvbSAnLi9UYWJsZVJvdyc7XG5pbXBvcnQgQWN0aW9uc1RhYmxlQ2VsbCBmcm9tICcuL0FjdGlvbnNUYWJsZUNlbGwnO1xuaW1wb3J0IFJlYWN0VG9vbHRpcCBmcm9tICdyZWFjdC10b29sdGlwJ1xuXG5pbXBvcnQgJy4vdGFibGUuY3NzJztcblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgc29ydEZ1bmM6IChhLGIpID0+IChhIDwgYiA/IC0xIDogKGEgPiBiID8gMSA6IDApKSxcbiAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgc29ydENvbDogMCxcbiAgICBzb3J0RGlyOiAxLFxuICAgIGNvbFdpZHRoOiAnJ1xufVxuXG5jb25zdCBjcmVhdGVSb3cgPSAocm93LCBjb2x1bW5zLCBhY3Rpb25zKSA9PiB7XG5cbiAgICB2YXIgYWN0aW9uX2J1dHRvbnMgPSAnJztcbiAgICB2YXIgY2VsbHMgPSBjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcbiAgICAgICAgaWYoY29sLmhhc093blByb3BlcnR5KFwicmVuZGVyXCIpKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8VGFibGVDZWxsIGtleT17J2NlbGxfJytpfSA+XG4gICAgICAgICAgICAgICAgICAgIHtjb2wucmVuZGVyKHJvdywgcm93W2NvbC5jb2x1bW5LZXldKX1cbiAgICAgICAgICAgICAgICA8L1RhYmxlQ2VsbD5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxUYWJsZUNlbGwga2V5PXsnY2VsbF8nK2l9ID5cbiAgICAgICAgICAgICAgICB7cm93W2NvbC5jb2x1bW5LZXldfVxuICAgICAgICAgICAgPC9UYWJsZUNlbGw+XG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpZiAoYWN0aW9ucykge1xuICAgICAgICBjZWxscy5wdXNoKDxBY3Rpb25zVGFibGVDZWxsIGtleT0nYWN0aW9uc19jZWxsJyBpZD17cm93WydpZCddfSBhY3Rpb25zPXthY3Rpb25zfSAvPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNlbGxzO1xufTtcblxuY29uc3QgZ2V0U29ydERpciA9IChjb2x1bW5LZXksIGNvbHVtbkluZGV4LCBzb3J0Q29sLCBzb3J0RGlyKSA9PiB7XG4gICAgaWYoY29sdW1uS2V5ICYmIChjb2x1bW5LZXkgPT09IHNvcnRDb2wpKSB7XG4gICAgICAgIHJldHVybiBzb3J0RGlyO1xuICAgIH1cbiAgICBpZihzb3J0Q29sID09PSBjb2x1bW5JbmRleCkge1xuICAgICAgICByZXR1cm4gc29ydERpcjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbn07XG5cbmNvbnN0IFRhYmxlID0gKHByb3BzKSA9PiB7XG4gICAgbGV0IHtvcHRpb25zLCBjb2x1bW5zfSA9IHByb3BzO1xuICAgIGxldCB0YWJsZUNsYXNzID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBvcHRpb25zLmNsYXNzTmFtZSA6ICcnO1xuICAgIHRhYmxlQ2xhc3MgKz0gKG9wdGlvbnMuYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZWRpdCcpKSA/ICcgdGFibGUtaG92ZXInIDogJyc7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIGRhdGFUYWJsZSBcIiArIHRhYmxlQ2xhc3N9PlxuICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0Q29sID0gKHR5cGVvZiBvcHRpb25zLnNvcnRDb2wgIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5zb3J0Q29sIDogZGVmYXVsdHMuc29ydENvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0RGlyID0gKHR5cGVvZiBvcHRpb25zLnNvcnREaXIgIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5zb3J0RGlyIDogZGVmYXVsdHMuc29ydERpcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0RnVuYyA9ICh0eXBlb2Ygb3B0aW9ucy5zb3J0RnVuYyAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLnNvcnRGdW5jIDogZGVmYXVsdHMuc29ydEZ1bmM7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc29ydGFibGUgPSAodHlwZW9mIGNvbC5zb3J0YWJsZSAhPSAndW5kZWZpbmVkJykgPyBjb2wuc29ydGFibGUgOiBkZWZhdWx0cy5zb3J0YWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2xXaWR0aCA9ICh0eXBlb2YgY29sLndpZHRoICE9ICd1bmRlZmluZWQnKSA/IGNvbC53aWR0aCA6IGRlZmF1bHRzLmNvbFdpZHRoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUhlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Tb3J0PXtwcm9wcy5vblNvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnREaXI9e2dldFNvcnREaXIoY29sLmNvbHVtbktleSwgaSwgc29ydENvbCwgc29ydERpcil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlPXtzb3J0YWJsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydEZ1bmM9e3NvcnRGdW5jfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleD17aX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uS2V5PXtjb2wuY29sdW1uS2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17Y29sV2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17J2hlYWRpbmdfJytpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICB7b3B0aW9ucy5hY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVIZWFkaW5nIGtleT0nYWN0aW9uc19oZWFkaW5nJyA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbnMuYWN0aW9uc0hlYWRlciB8fCAnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5sZW5ndGggPiAwICYmIHByb3BzLmRhdGEubWFwKChyb3csaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyb3cpICYmIHJvdy5sZW5ndGggIT09IGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBEYXRhIGF0IHJvdyAke2l9IGlzICR7cm93Lmxlbmd0aH0uIEl0IHNob3VsZCBiZSAke2NvbHVtbnMubGVuZ3RofS5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHRyIGtleT17J3Jvd18nK2l9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGV2ZW49e2klMiA9PT0gMH0ga2V5PXsncm93XycraX0gaWQ9e3Jvd1snaWQnXX0gYWN0aW9ucz17b3B0aW9ucy5hY3Rpb25zfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NyZWF0ZVJvdyhyb3csIGNvbHVtbnMsIG9wdGlvbnMuYWN0aW9ucyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPFJlYWN0VG9vbHRpcCBkZWxheVNob3c9ezEwfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGU7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnO1xuXG5jb25zdCBUYWJsZUNlbGwgPSAocHJvcHMpID0+IHtcbiAgICBsZXQge2NoaWxkcmVufSA9IHByb3BzO1xuXHRsZXQgdmFsdWUgPSAnJztcblx0aWYoY2hpbGRyZW4pIHtcblx0ICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcblx0ICAgICAgICB2YWx1ZSA9IGNoaWxkcmVuO1xuICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHZhbHVlID0gPFJhd0hUTUw+e2NoaWxkcmVuLnRvU3RyaW5nKCl9PC9SYXdIVE1MPlxuICAgICAgICB9XG4gICAgfVxuXG5cdHJldHVybiAoXG5cdFx0PHRkIHsuLi5wcm9wc30+XG4gICAgICAgICAgICB7dmFsdWV9XG5cdFx0PC90ZD5cblx0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlQ2VsbDtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5jbGFzcyBUYWJsZUhlYWRpbmcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG5cdGNvbnN0cnVjdG9yIChwcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLmhhbmRsZVNvcnQgPSB0aGlzLmhhbmRsZVNvcnQuYmluZCh0aGlzKTtcblx0fVxuXG5cdGdldFNvcnRDbGFzcygpIHtcblxuXHRcdGlmICghdGhpcy5wcm9wcy5zb3J0YWJsZSkgcmV0dXJuIG51bGw7XG5cblx0XHRzd2l0Y2godGhpcy5wcm9wcy5zb3J0RGlyKSB7XG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdHJldHVybiAnc29ydGluZ19hc2MnO1xuXHRcdFx0Y2FzZSAtMTpcblx0XHRcdFx0cmV0dXJuICdzb3J0aW5nX2Rlc2MnO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvcHMuc29ydGFibGUgPyAnc29ydGluZycgOiBudWxsXG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlU29ydChlKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGlmKCF0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdvblNvcnQnKSB8fCAhdGhpcy5wcm9wcy5zb3J0YWJsZSkgcmV0dXJuO1xuXG5cdFx0dGhpcy5wcm9wcy5vblNvcnQoXG5cdFx0XHR0aGlzLnByb3BzLmNvbHVtbkluZGV4LFxuXHRcdFx0dGhpcy5wcm9wcy5jb2x1bW5LZXksXG5cdFx0XHR0aGlzLnByb3BzLnNvcnREaXIgPyB0aGlzLnByb3BzLnNvcnREaXIqLTEgOiAxLFxuXHRcdFx0dGhpcy5wcm9wcy5zb3J0RnVuY1xuXHRcdCk7XG5cdH1cblxuXHRyZW5kZXIgKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8dGggb25DbGljaz17dGhpcy5oYW5kbGVTb3J0fVxuXHRcdFx0XHRjbGFzc05hbWU9e3RoaXMuZ2V0U29ydENsYXNzKCl9XG5cdFx0XHRcdHdpZHRoPXt0aGlzLnByb3BzLndpZHRofVxuXHRcdFx0XHQ+XG5cdFx0XHRcdHt0aGlzLnByb3BzLmNoaWxkcmVufVxuXHRcdFx0PC90aD5cblx0XHQpO1x0XG5cdH1cblx0XG59XG5cblRhYmxlSGVhZGluZy5wcm9wVHlwZXMgPSB7XG5cdG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG5cdHNvcnREaXI6IFByb3BUeXBlcy5udW1iZXIsXG5cdGNvbHVtbkluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRjb2x1bW5LZXk6IFByb3BUeXBlcy5hbnksXG5cdHNvcnRhYmxlOiBQcm9wVHlwZXMuYm9vbCxcblx0c29ydEZ1bmM6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRpbmc7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlRWRpdCA9IHRoaXMuaGFuZGxlRWRpdC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9uKSB7XG4gICAgICAgIGxldCB7aWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheScpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uZGlzcGxheShpZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVFZGl0KGlkLCBldikge1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuZWRpdC5vbkNsaWNrKGlkKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7ZXZlbiwgYWN0aW9ucywgaWQsIGNoaWxkcmVufSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBjYW5FZGl0ID0gKGFjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2VkaXQnKSAmJiB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9ucy5lZGl0KSk7XG4gICAgICAgIGxldCByb3dDbGFzcyA9IGV2ZW4gPyAnZXZlbicgOiAnb2RkJztcblxuICAgICAgICBpZiAoY2FuRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dHIgcm9sZT1cInJvd1wiIGNsYXNzTmFtZT17cm93Q2xhc3MgKyBcIiBjYW4tZWRpdFwifSBvbkNsaWNrPXt0aGlzLmhhbmRsZUVkaXQuYmluZCh0aGlzLCBpZCl9PlxuICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx0ciByb2xlPVwicm93XCIgY2xhc3NOYW1lPXtyb3dDbGFzc30+XG4gICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCB7IHVzZVJlZiwgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuY29uc3QgdXNlRml0VGV4dCA9IChtYXhTaXplID0gNTAsIG1pblNpemUgPSAxMzApID0+IHtcbiAgICBjb25zdCBNSU5fRk9OVF9TSVpFID0gbWluU2l6ZTtcbiAgICBjb25zdCBNQVhfRk9OVF9TSVpFID0gbWF4U2l6ZTtcbiAgICBjb25zdCBSRVNPTFVUSU9OID0gNTtcblxuICAgIGNvbnN0IHJlZiA9IHVzZVJlZihudWxsKTtcblxuICAgIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGUoe1xuICAgICAgICBmb250U2l6ZTogTUFYX0ZPTlRfU0laRSxcbiAgICAgICAgZm9udFNpemVQcmV2OiBNSU5fRk9OVF9TSVpFLFxuICAgICAgICBmb250U2l6ZU1heDogTUFYX0ZPTlRfU0laRSxcbiAgICAgICAgZm9udFNpemVNaW46IE1JTl9GT05UX1NJWkUsXG4gICAgfSk7XG4gICAgY29uc3QgeyBmb250U2l6ZSwgZm9udFNpemVNYXgsIGZvbnRTaXplTWluLCBmb250U2l6ZVByZXYgfSA9IHN0YXRlO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgaXNEb25lID0gTWF0aC5hYnMoZm9udFNpemUgLSBmb250U2l6ZVByZXYpIDw9IFJFU09MVVRJT047XG4gICAgICAgIGNvbnN0IGlzT3ZlcmZsb3cgPVxuICAgICAgICAgICAgISFyZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgKHJlZi5jdXJyZW50LnNjcm9sbEhlaWdodCA+IHJlZi5jdXJyZW50Lm9mZnNldEhlaWdodCB8fFxuICAgICAgICAgICAgICAgIHJlZi5jdXJyZW50LnNjcm9sbFdpZHRoID4gcmVmLmN1cnJlbnQub2Zmc2V0V2lkdGgpO1xuICAgICAgICBjb25zdCBpc0FzYyA9IGZvbnRTaXplID4gZm9udFNpemVQcmV2O1xuXG4gICAgICAgIC8vIHJldHVybiBpZiB0aGUgZm9udCBzaXplIGhhcyBiZWVuIGFkanVzdGVkIFwiZW5vdWdoXCIgKGNoYW5nZSB3aXRoaW4gUkVTT0xVVElPTilcbiAgICAgICAgLy8gcmVkdWNlIGZvbnQgc2l6ZSBieSBvbmUgaW5jcmVtZW50IGlmIGl0J3Mgb3ZlcmZsb3dpbmdcbiAgICAgICAgaWYgKGlzRG9uZSkge1xuICAgICAgICAgICAgaWYgKGlzT3ZlcmZsb3cpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb250U2l6ZU5ldyA9XG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplUHJldiA8IGZvbnRTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGZvbnRTaXplUHJldlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBmb250U2l6ZSAtIChmb250U2l6ZVByZXYgLSBmb250U2l6ZSk7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogZm9udFNpemVOZXcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplTWF4LFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZU1pbixcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemVQcmV2LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmluYXJ5IHNlYXJjaCB0byBhZGp1c3QgZm9udCBzaXplXG4gICAgICAgIGxldCBkZWx0YTtcbiAgICAgICAgbGV0IG5ld01heCA9IGZvbnRTaXplTWF4O1xuICAgICAgICBsZXQgbmV3TWluID0gZm9udFNpemVNaW47XG4gICAgICAgIGlmIChpc092ZXJmbG93KSB7XG4gICAgICAgICAgICBkZWx0YSA9IGlzQXNjID8gZm9udFNpemVQcmV2IC0gZm9udFNpemUgOiBmb250U2l6ZU1pbiAtIGZvbnRTaXplO1xuICAgICAgICAgICAgbmV3TWF4ID0gTWF0aC5taW4oZm9udFNpemVNYXgsIGZvbnRTaXplKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbHRhID0gaXNBc2MgPyBmb250U2l6ZU1heCAtIGZvbnRTaXplIDogZm9udFNpemVQcmV2IC0gZm9udFNpemU7XG4gICAgICAgICAgICBuZXdNaW4gPSBNYXRoLm1heChmb250U2l6ZU1pbiwgZm9udFNpemUpO1xuICAgICAgICB9XG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgIGZvbnRTaXplOiBmb250U2l6ZSArIGRlbHRhIC8gMixcbiAgICAgICAgICAgIGZvbnRTaXplTWF4OiBuZXdNYXgsXG4gICAgICAgICAgICBmb250U2l6ZU1pbjogbmV3TWluLFxuICAgICAgICAgICAgZm9udFNpemVQcmV2OiBmb250U2l6ZSxcbiAgICAgICAgfSk7XG4gICAgfSwgW2ZvbnRTaXplLCBmb250U2l6ZU1heCwgZm9udFNpemVNaW4sIGZvbnRTaXplUHJldiwgcmVmXSk7XG5cbiAgICByZXR1cm4geyBmb250U2l6ZTogYCR7Zm9udFNpemV9JWAsIGxpbmVIZWlnaHQ6IGAke2ZvbnRTaXplIC0gMTB9JWAsIHJlZiB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdXNlRml0VGV4dDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjAgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB2aWRlb2pzIGZyb20gJ3ZpZGVvLmpzJ1xuXG5pbXBvcnQgJ3ZpZGVvLmpzL2Rpc3QvdmlkZW8tanMuY3NzJ1xuXG5jb25zdCBZb3V0dWJlVmlkZW9Db21wb25lbnQgPSAoeyB2aWRlb1NyY1VSTCwgdmlkZW9UaXRsZSB9KSA9PiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ2aWRlb1wiPlxuICAgICAgICA8aWZyYW1lXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiNzIwXCJcbiAgICAgICAgICAgIHRpdGxlPXt2aWRlb1RpdGxlfVxuICAgICAgICAgICAgc3JjPXt2aWRlb1NyY1VSTH1cbiAgICAgICAgICAgIGZyYW1lQm9yZGVyPVwiMFwiXG4gICAgICAgICAgICBhbGxvdz1cImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlXCJcbiAgICAgICAgICAgIGFsbG93RnVsbFNjcmVlblxuICAgICAgICAvPlxuICAgIDwvZGl2PlxuKTtcblxuXG5jbGFzcyBMaXZlVmlkZW9QbGF5ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIHRoaXMucGxheWVyID0gdmlkZW9qcyh0aGlzLnZpZGVvTm9kZSwgdGhpcy5wcm9wcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIGlmICh0aGlzLnBsYXllcikge1xuICAgICAgICAgICAgdGhpcy5wbGF5ZXIuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBkYXRhLXZqcy1wbGF5ZXI9XCJcIj5cbiAgICAgICAgICAgICAgICA8dmlkZW8gcmVmPXtub2RlID0+IHRoaXMudmlkZW9Ob2RlID0gbm9kZX0gY2xhc3NOYW1lPVwidmlkZW8tanMgdmpzLWJpZy1wbGF5LWNlbnRlcmVkXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cblxuY29uc3QgVmlkZW9TdHJlYW0gPSAoeyB1cmwgfSkgPT4ge1xuICAgIGxldCBsYXlvdXQgPSBudWxsO1xuICAgIGNvbnN0IGNoZWNrTGl2ZVZpZGVvID0gKCkgPT4ge1xuICAgICAgICBsZXQgaXNMaXZlVmlkZW8gPSBudWxsO1xuICAgICAgICB1cmwubWF0Y2goLy5tM3U4LykgPyBpc0xpdmVWaWRlbyA9IHRydWUgOiBpc0xpdmVWaWRlbyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gaXNMaXZlVmlkZW87XG4gICAgfTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgICAgaWYgKGNoZWNrTGl2ZVZpZGVvKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZGVvSnNPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGF1dG9wbGF5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZsdWlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNvdXJjZXM6IFt7XG4gICAgICAgICAgICAgICAgICAgIHNyYzogdXJsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24veC1tcGVnVVJMJ1xuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXlvdXQgPSA8TGl2ZVZpZGVvUGxheWVyIHsuLi52aWRlb0pzT3B0aW9uc30gLz47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYXlvdXQgPSA8WW91dHViZVZpZGVvQ29tcG9uZW50IHZpZGVvU3JjVVJMPXt1cmx9IC8+O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGF5b3V0ID0gPHNwYW4gY2xhc3NOYW1lPVwibm8tdmlkZW9cIj5ObyB2aWRlbyBVUkwgUHJvdmlkZWQ8L3NwYW4+O1xuICAgIH1cblxuICAgIHJldHVybiBsYXlvdXQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBWaWRlb1N0cmVhbTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9lbi5qc29uXCI6IFwiLi9zcmMvaTE4bi9lbi5qc29uXCIsXG5cdFwiLi9lcy5qc29uXCI6IFwiLi9zcmMvaTE4bi9lcy5qc29uXCIsXG5cdFwiLi96aC5qc29uXCI6IFwiLi9zcmMvaTE4bi96aC5qc29uXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4vc3JjL2kxOG4gc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanNvbiRcIjsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCByZXF1ZXN0IGZyb20gJ3N1cGVyYWdlbnQnO1xuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIjtcbmxldCBodHRwID0gcmVxdWVzdDtcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcbmltcG9ydCBUIGZyb20gXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiO1xuaW1wb3J0IHtvYmplY3RUb1F1ZXJ5U3RyaW5nLCBpc0NsZWFyaW5nU2Vzc2lvblN0YXRlLCBzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSwgZ2V0Q3VycmVudFBhdGhOYW1lfSBmcm9tICcuL21ldGhvZHMnO1xuaW1wb3J0IHtkb0xvZ2luLCBpbml0TG9nT3V0LCBDTEVBUl9TRVNTSU9OX1NUQVRFLCBMT0dPVVRfVVNFUn0gZnJvbSAnLi4vY29tcG9uZW50cy9zZWN1cml0eS9hY3Rpb25zJztcblxuZXhwb3J0IGNvbnN0IEdFTkVSSUNfRVJST1IgID0gXCJZaWtlcy4gU29tZXRoaW5nIHNlZW1zIHRvIGJlIGJyb2tlbi4gT3VyIHdlYiB0ZWFtIGhhcyBiZWVuIG5vdGlmaWVkLCBhbmQgd2UgYXBvbG9naXplIGZvciB0aGUgaW5jb252ZW5pZW5jZS5cIjtcbmV4cG9ydCBjb25zdCBSRVNFVF9MT0FESU5HICA9ICdSRVNFVF9MT0FESU5HJztcbmV4cG9ydCBjb25zdCBTVEFSVF9MT0FESU5HICA9ICdTVEFSVF9MT0FESU5HJztcbmV4cG9ydCBjb25zdCBTVE9QX0xPQURJTkcgICA9ICdTVE9QX0xPQURJTkcnO1xuZXhwb3J0IGNvbnN0IFZBTElEQVRFICAgICAgID0gJ1ZBTElEQVRFJztcbmV4cG9ydCBjb25zdCBDTEVBUl9NRVNTQUdFICA9ICdDTEVBUl9NRVNTQUdFJztcbmV4cG9ydCBjb25zdCBTSE9XX01FU1NBR0UgICA9ICdTSE9XX01FU1NBR0UnO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQWN0aW9uID0gdHlwZSA9PiBwYXlsb2FkID0+ICh7XG4gICAgdHlwZSxcbiAgICBwYXlsb2FkXG59KTtcblxuZXhwb3J0IGNvbnN0IHJlc2V0TG9hZGluZyA9IGNyZWF0ZUFjdGlvbihSRVNFVF9MT0FESU5HKTtcbmV4cG9ydCBjb25zdCBzdGFydExvYWRpbmcgPSBjcmVhdGVBY3Rpb24oU1RBUlRfTE9BRElORyk7XG5leHBvcnQgY29uc3Qgc3RvcExvYWRpbmcgID0gY3JlYXRlQWN0aW9uKFNUT1BfTE9BRElORyk7XG5cbmNvbnN0IHhocnMgPSB7fTtcblxuY29uc3QgY2FuY2VsID0gKGtleSkgPT4ge1xuICAgIGlmKHhocnNba2V5XSkge1xuICAgICAgICB4aHJzW2tleV0uYWJvcnQoKTtcbiAgICAgICAgY29uc29sZS5sb2coYGFib3J0ZWQgcmVxdWVzdCAke2tleX1gKTtcbiAgICAgICAgZGVsZXRlIHhocnNba2V5XTtcbiAgICB9XG59XG5cbmNvbnN0IHNjaGVkdWxlID0gKGtleSwgcmVxKSA9PiB7XG4gICAgLy8gY29uc29sZS5sb2coYHNjaGVkdWxpbmcgJHtrZXl9YCk7XG4gICAgeGhyc1trZXldID0gcmVxO1xufTtcblxuY29uc3QgaXNPYmplY3RFbXB0eSA9IChvYmopID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDAgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBPYmplY3QgO1xufVxuXG5leHBvcnQgY29uc3QgYXV0aEVycm9ySGFuZGxlciA9IChlcnIsIHJlcykgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuICAgIGxldCBjb2RlID0gZXJyLnN0YXR1cztcbiAgICBsZXQgbXNnID0gJyc7XG5cbiAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgIGxldCBlcnJvcl9tZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnRVJST1InLFxuICAgICAgICAgICAgICAgIGh0bWw6IFQudHJhbnNsYXRlKFwiZXJyb3JzLnVzZXJfbm90X2F1dGh6XCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcidcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGRpc3BhdGNoKHNob3dNZXNzYWdlKCBlcnJvcl9tZXNzYWdlLCBpbml0TG9nT3V0ICkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgbGV0IGN1cnJlbnRMb2NhdGlvbiA9IGdldEN1cnJlbnRQYXRoTmFtZSgpO1xuICAgICAgICAgICAgbGV0IGNsZWFyaW5nX3Nlc3Npb25fc3RhdGUgPSBpc0NsZWFyaW5nU2Vzc2lvblN0YXRlKCk7XG5cbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBDTEVBUl9TRVNTSU9OX1NUQVRFLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHt9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYoIWNsZWFyaW5nX3Nlc3Npb25fc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnYXV0aEVycm9ySGFuZGxlciA0MDEgLSByZSBsb2dpbicpO1xuICAgICAgICAgICAgICAgIGRvTG9naW4oY3VycmVudExvY2F0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgIG1zZyA9IFwiXCI7XG5cbiAgICAgICAgICAgIGlmIChlcnIucmVzcG9uc2UuYm9keSAmJiBlcnIucmVzcG9uc2UuYm9keS5tZXNzYWdlKSBtc2cgPSBlcnIucmVzcG9uc2UuYm9keS5tZXNzYWdlO1xuICAgICAgICAgICAgZWxzZSBpZiAoZXJyLnJlc3BvbnNlLmVycm9yICYmIGVyci5yZXNwb25zZS5lcnJvci5tZXNzYWdlKSBtc2cgPSBlcnIucmVzcG9uc2UuZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICAgIGVsc2UgbXNnID0gZXJyLm1lc3NhZ2U7XG5cbiAgICAgICAgICAgIFN3YWwuZmlyZShcIk5vdCBGb3VuZFwiLCBtc2csIFwid2FybmluZ1wiKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDEyOlxuICAgICAgICAgICAgZm9yICh2YXIgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGVyci5yZXNwb25zZS5ib2R5LmVycm9ycykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4oa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBtc2cgKz0ga2V5ICsgJzogJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBtc2cgKz0gdmFsdWUgKyAnPGJyPic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBTd2FsLmZpcmUoXCJWYWxpZGF0aW9uIGVycm9yXCIsIG1zZywgXCJ3YXJuaW5nXCIpO1xuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFZBTElEQVRFLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHtlcnJvcnM6IGVyci5yZXNwb25zZS5ib2R5LmVycm9yc31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBTd2FsLmZpcmUoXCJFUlJPUlwiLCBULnRyYW5zbGF0ZShcImVycm9ycy5zZXJ2ZXJfZXJyb3JcIiksIFwiZXJyb3JcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UmVxdWVzdCA9KFxuICAgIHJlcXVlc3RBY3Rpb25DcmVhdG9yLFxuICAgIHJlY2VpdmVBY3Rpb25DcmVhdG9yLFxuICAgIGVuZHBvaW50LFxuICAgIGVycm9ySGFuZGxlciA9IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgcmVxdWVzdEFjdGlvblBheWxvYWQgPSB7fVxuKSA9PiAocGFyYW1zID0ge30pID0+IChkaXNwYXRjaCwgc3RhdGUpID0+IHtcblxuICAgIGxldCB1cmwgPSBVUkkoZW5kcG9pbnQpO1xuXG4gICAgaWYoIWlzT2JqZWN0RW1wdHkocGFyYW1zKSlcbiAgICAgICAgdXJsID0gdXJsLnF1ZXJ5KHBhcmFtcyk7XG5cbiAgICBsZXQga2V5ID0gdXJsLnRvU3RyaW5nKCk7XG5cbiAgICBpZihyZXF1ZXN0QWN0aW9uQ3JlYXRvciAmJiB0eXBlb2YgcmVxdWVzdEFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIGRpc3BhdGNoKHJlcXVlc3RBY3Rpb25DcmVhdG9yKHJlcXVlc3RBY3Rpb25QYXlsb2FkKSk7XG5cbiAgICBjYW5jZWwoa2V5KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCByZXEgPSBodHRwLmdldCh1cmwudG9TdHJpbmcoKSlcbiAgICAgICAgLnRpbWVvdXQoe1xuICAgICAgICAgICAgcmVzcG9uc2U6IDYwMDAwLFxuICAgICAgICAgICAgZGVhZGxpbmU6IDYwMDAwLFxuICAgICAgICB9KVxuICAgICAgICAuZW5kKHJlc3BvbnNlSGFuZGxlcihkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCkpXG5cbiAgICAgICAgc2NoZWR1bGUoa2V5LCByZXEpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHB1dFJlcXVlc3QgPSAoXG4gICAgcmVxdWVzdEFjdGlvbkNyZWF0b3IsXG4gICAgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsXG4gICAgZW5kcG9pbnQsXG4gICAgcGF5bG9hZCxcbiAgICBlcnJvckhhbmRsZXIgPSBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIHJlcXVlc3RBY3Rpb25QYXlsb2FkID0ge31cbikgPT4gKHBhcmFtcyA9IHt9KSA9PiAoIGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGlmKHJlcXVlc3RBY3Rpb25DcmVhdG9yICYmIHR5cGVvZiByZXF1ZXN0QWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZGlzcGF0Y2gocmVxdWVzdEFjdGlvbkNyZWF0b3IocmVxdWVzdEFjdGlvblBheWxvYWQpKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmKHBheWxvYWQgPT0gbnVsbClcbiAgICAgICAgICAgIHBheWxvYWQgPSB7fTtcbiAgICAgICAgaHR0cC5wdXQodXJsLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAuc2VuZChwYXlsb2FkKVxuICAgICAgICAgICAgLmVuZChyZXNwb25zZUhhbmRsZXIoZGlzcGF0Y2gsIHN0YXRlLCByZWNlaXZlQWN0aW9uQ3JlYXRvciwgZXJyb3JIYW5kbGVyLCByZXNvbHZlLCByZWplY3QpKVxuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVJlcXVlc3QgPSAoXG4gICAgcmVxdWVzdEFjdGlvbkNyZWF0b3IsXG4gICAgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsXG4gICAgZW5kcG9pbnQsXG4gICAgcGF5bG9hZCxcbiAgICBlcnJvckhhbmRsZXIgID0gZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICByZXF1ZXN0QWN0aW9uUGF5bG9hZCA9IHt9XG4pID0+IChwYXJhbXMpID0+IChkaXNwYXRjaCwgc3RhdGUpID0+IHtcbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgaWYocmVxdWVzdEFjdGlvbkNyZWF0b3IgJiYgdHlwZW9mIHJlcXVlc3RBY3Rpb25DcmVhdG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICBkaXNwYXRjaChyZXF1ZXN0QWN0aW9uQ3JlYXRvcihyZXF1ZXN0QWN0aW9uUGF5bG9hZCkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYocGF5bG9hZCA9PSBudWxsKVxuICAgICAgICAgICAgcGF5bG9hZCA9IHt9O1xuXG4gICAgICAgIGh0dHAuZGVsZXRlKHVybClcbiAgICAgICAgICAgIC5zZW5kKHBheWxvYWQpXG4gICAgICAgICAgICAuZW5kKHJlc3BvbnNlSGFuZGxlcihkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHBvc3RSZXF1ZXN0ID0gKFxuICAgICAgICByZXF1ZXN0QWN0aW9uQ3JlYXRvcixcbiAgICAgICAgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsXG4gICAgICAgIGVuZHBvaW50LFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICBlcnJvckhhbmRsZXIgPSBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgICAgICByZXF1ZXN0QWN0aW9uUGF5bG9hZCA9IHt9XG4pID0+IChwYXJhbXMgPSB7fSkgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGlmKHJlcXVlc3RBY3Rpb25DcmVhdG9yICYmIHR5cGVvZiByZXF1ZXN0QWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZGlzcGF0Y2gocmVxdWVzdEFjdGlvbkNyZWF0b3IocmVxdWVzdEFjdGlvblBheWxvYWQpKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgbGV0IHJlcXVlc3QgPSBodHRwLnBvc3QodXJsKTtcblxuICAgICAgICBpZihwYXlsb2FkICE9IG51bGwpXG4gICAgICAgICAgICByZXF1ZXN0LnNlbmQocGF5bG9hZCk7XG4gICAgICAgIGVsc2UgLy8gdG8gYmUgYSBzaW1wbGUgQ09SUyByZXF1ZXN0XG4gICAgICAgICAgICByZXF1ZXN0LnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcblxuICAgICAgICByZXF1ZXN0LmVuZChyZXNwb25zZUhhbmRsZXIoZGlzcGF0Y2gsIHN0YXRlLCByZWNlaXZlQWN0aW9uQ3JlYXRvciwgZXJyb3JIYW5kbGVyLCByZXNvbHZlLCByZWplY3QpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwb3N0RmlsZSA9IChcbiAgICByZXF1ZXN0QWN0aW9uQ3JlYXRvcixcbiAgICByZWNlaXZlQWN0aW9uQ3JlYXRvcixcbiAgICBlbmRwb2ludCxcbiAgICBmaWxlLFxuICAgIGZpbGVNZXRhZGF0YSA9IHt9LFxuICAgIGVycm9ySGFuZGxlciA9IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgcmVxdWVzdEFjdGlvblBheWxvYWQgPSB7fVxuKSA9PiAocGFyYW1zID0ge30pID0+IChkaXNwYXRjaCwgc3RhdGUpID0+IHtcblxuICAgIGxldCB1cmwgPSBVUkkoZW5kcG9pbnQpO1xuXG4gICAgaWYoIWlzT2JqZWN0RW1wdHkocGFyYW1zKSlcbiAgICAgICAgdXJsID0gdXJsLnF1ZXJ5KHBhcmFtcyk7XG5cbiAgICBpZihyZXF1ZXN0QWN0aW9uQ3JlYXRvciAmJiB0eXBlb2YgcmVxdWVzdEFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIGRpc3BhdGNoKHJlcXVlc3RBY3Rpb25DcmVhdG9yKHJlcXVlc3RBY3Rpb25QYXlsb2FkKSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgIGNvbnN0IHJlcSA9IGh0dHAucG9zdCh1cmwpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRhY2goJ2ZpbGUnLCBmaWxlKTtcblxuICAgICAgICBpZighaXNPYmplY3RFbXB0eShmaWxlTWV0YWRhdGEpKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmaWxlTWV0YWRhdGEpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGZpbGVNZXRhZGF0YVtrZXldO1xuICAgICAgICAgICAgICAgIHJlcS5maWVsZChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxLmVuZChyZXNwb25zZUhhbmRsZXIoZGlzcGF0Y2gsIHN0YXRlLCByZWNlaXZlQWN0aW9uQ3JlYXRvciwgZXJyb3JIYW5kbGVyLCByZXNvbHZlLCByZWplY3QpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwdXRGaWxlID0gKFxuICAgIHJlcXVlc3RBY3Rpb25DcmVhdG9yLFxuICAgIHJlY2VpdmVBY3Rpb25DcmVhdG9yLFxuICAgIGVuZHBvaW50LFxuICAgIGZpbGUgPSBudWxsLFxuICAgIGZpbGVNZXRhZGF0YSA9IHt9LFxuICAgIGVycm9ySGFuZGxlciA9IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgcmVxdWVzdEFjdGlvblBheWxvYWQgPSB7fVxuKSA9PiAocGFyYW1zID0ge30pID0+IChkaXNwYXRjaCwgc3RhdGUpID0+IHtcblxuICAgIGxldCB1cmwgPSBVUkkoZW5kcG9pbnQpO1xuXG4gICAgaWYoIWlzT2JqZWN0RW1wdHkocGFyYW1zKSlcbiAgICAgICAgdXJsID0gdXJsLnF1ZXJ5KHBhcmFtcyk7XG5cbiAgICBpZihyZXF1ZXN0QWN0aW9uQ3JlYXRvciAmJiB0eXBlb2YgcmVxdWVzdEFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIGRpc3BhdGNoKHJlcXVlc3RBY3Rpb25DcmVhdG9yKHJlcXVlc3RBY3Rpb25QYXlsb2FkKSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgIGNvbnN0IHJlcSA9IGh0dHAucHV0KHVybCk7XG5cbiAgICAgICAgaWYoZmlsZSAhPSBudWxsKXtcbiAgICAgICAgICAgIHJlcS5hdHRhY2goJ2ZpbGUnLCBmaWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc09iamVjdEVtcHR5KGZpbGVNZXRhZGF0YSkpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVNZXRhZGF0YSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZmlsZU1ldGFkYXRhW2tleV07XG4gICAgICAgICAgICAgICAgcmVxLmZpZWxkKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXEuZW5kKHJlc3BvbnNlSGFuZGxlcihkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRFcnJvckhhbmRsZXIgPSAoZXJyLCByZXMpID0+IChkaXNwYXRjaCkgPT4ge1xuICAgIGxldCBib2R5ID0gcmVzLmJvZHk7XG4gICAgbGV0IHRleHQgPSAnJztcbiAgICBpZihib2R5IGluc3RhbmNlb2YgT2JqZWN0KXtcbiAgICAgICAgaWYoYm9keS5oYXNPd25Qcm9wZXJ0eSgnbWVzc2FnZScpKVxuICAgICAgICAgICAgdGV4dCA9IGJvZHkubWVzc2FnZTtcbiAgICB9XG4gICAgU3dhbC5maXJlKHJlcy5zdGF0dXNUZXh0LCB0ZXh0LCBcImVycm9yXCIpO1xufVxuXG5leHBvcnQgY29uc3QgcmVzcG9uc2VIYW5kbGVyID1cbiAgICAoIGRpc3BhdGNoLCBzdGF0ZSwgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsIGVycm9ySGFuZGxlciwgcmVzb2x2ZSwgcmVqZWN0ICkgPT5cbiAgICAoZXJyLCByZXMpID0+IHtcbiAgICBpZiAoZXJyIHx8ICFyZXMub2spIHtcbiAgICAgICAgaWYoZXJyb3JIYW5kbGVyKSB7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXIoZXJyLCByZXMpKGRpc3BhdGNoLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlamVjdCh7IGVyciwgcmVzLCBkaXNwYXRjaCwgc3RhdGUgfSlcbiAgICB9XG4gICAgbGV0IGpzb24gPSByZXMuYm9keTtcbiAgICBpZih0eXBlb2YgcmVjZWl2ZUFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZGlzcGF0Y2gocmVjZWl2ZUFjdGlvbkNyZWF0b3Ioe3Jlc3BvbnNlOiBqc29ufSkpO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh7cmVzcG9uc2U6IGpzb259KTtcbiAgICB9XG4gICAgZGlzcGF0Y2gocmVjZWl2ZUFjdGlvbkNyZWF0b3IpO1xuICAgIHJldHVybiByZXNvbHZlKHtyZXNwb25zZToganNvbn0pO1xufVxuXG5cbmV4cG9ydCBjb25zdCBmZXRjaEVycm9ySGFuZGxlciA9IChyZXNwb25zZSkgPT4ge1xuICAgIGxldCBjb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIGxldCBtc2cgPSByZXNwb25zZS5zdGF0dXNUZXh0O1xuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgICAgU3dhbC5maXJlKFwiRVJST1JcIiwgVC50cmFuc2xhdGUoXCJlcnJvcnMudXNlcl9ub3RfYXV0aHpcIiksIFwid2FybmluZ1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwMTpcbiAgICAgICAgICAgIFN3YWwuZmlyZShcIkVSUk9SXCIsIFQudHJhbnNsYXRlKFwiZXJyb3JzLnNlc3Npb25fZXhwaXJlZFwiKSwgXCJlcnJvclwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQxMjpcbiAgICAgICAgICAgIFN3YWwuZmlyZShcIkVSUk9SXCIsIG1zZywgXCJ3YXJuaW5nXCIpO1xuICAgICAgICBjYXNlIDUwMDpcbiAgICAgICAgICAgIFN3YWwuZmlyZShcIkVSUk9SXCIsIFQudHJhbnNsYXRlKFwiZXJyb3JzLnNlcnZlcl9lcnJvclwiKSwgXCJlcnJvclwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBmZXRjaFJlc3BvbnNlSGFuZGxlciA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgcmVzcG9uc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBzaG93TWVzc2FnZSA9IChzZXR0aW5ncywgY2FsbGJhY2sgPSB7fSkgPT4gKGRpc3BhdGNoKSA9PiB7XG4gICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG5cbiAgICBTd2FsLmZpcmUoc2V0dGluZ3MpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbHVlICYmIHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3Qgc2hvd1N1Y2Nlc3NNZXNzYWdlID0gKGh0bWwpID0+IChkaXNwYXRjaCkgPT4ge1xuICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIHRpdGxlOiBULnRyYW5zbGF0ZShcImdlbmVyYWwuZG9uZVwiKSxcbiAgICAgICAgaHRtbDogaHRtbCxcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnXG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBkb3dubG9hZEZpbGVCeUNvbnRlbnQgPSAoZmlsZW5hbWUsIGNvbnRlbnQsIG1pbWUpID0+IHtcbiAgICBsZXQgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLnRleHRDb250ZW50ID0gJ2Rvd25sb2FkJztcbiAgICBsaW5rLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgbGluay5ocmVmID0gYGRhdGE6JHttaW1lfSwke2VuY29kZVVSSUNvbXBvbmVudChjb250ZW50KX1gXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTsgLy8gUmVxdWlyZWQgZm9yIEZGXG4gICAgbGluay5jbGljaygpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRDU1YgPSAoZW5kcG9pbnQsIHBhcmFtcywgZmlsZW5hbWUsIGhlYWRlciA9IG51bGwpID0+IChkaXNwYXRjaCkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGRpc3BhdGNoKHN0YXJ0TG9hZGluZygpKTtcblxuICAgIHJldHVybiBmZXRjaCh1cmwudG9TdHJpbmcoKSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChjc3YpID0+IHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuXG4gICAgICAgICAgICBpZiAoaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgY3N2ID0gaGVhZGVyICsgJ1xcclxccicgKyBjc3Y7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb3dubG9hZEZpbGVCeUNvbnRlbnQoZmlsZW5hbWUsIGNzdiwgJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSYXdDU1YgPSAoZW5kcG9pbnQsIHBhcmFtcywgaGVhZGVyID0gbnVsbCkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIHJldHVybiBmZXRjaCh1cmwudG9TdHJpbmcoKSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChjc3YpID0+IHtcbiAgICAgICAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICBjc3YgPSBoZWFkZXIgKyAnXFxyXFxyJyArIGNzdjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjc3Y7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59O1xuXG5leHBvcnQgY29uc3QgZXNjYXBlRmlsdGVyVmFsdWUgPSAodmFsdWUpID0+IHtcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLywvZywgXCJcXFxcLFwiKTtcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLzsvZywgXCJcXFxcO1wiKTtcbiAgICByZXR1cm4gdmFsdWU7XG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIjtcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nXG5cbmV4cG9ydCBjb25zdCBmaW5kRWxlbWVudFBvcyA9IChvYmopID0+IHtcbiAgICB2YXIgY3VydG9wID0gLTcwO1xuICAgIGlmIChvYmoub2Zmc2V0UGFyZW50KSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGN1cnRvcCArPSBvYmoub2Zmc2V0VG9wO1xuICAgICAgICB9IHdoaWxlIChvYmogPSBvYmoub2Zmc2V0UGFyZW50KTtcbiAgICAgICAgcmV0dXJuIFtjdXJ0b3BdO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBlcG9jaFRvTW9tZW50ID0gKGF0aW1lKSA9PiB7XG4gICAgaWYoIWF0aW1lKSByZXR1cm4gYXRpbWU7XG4gICAgYXRpbWUgPSBhdGltZSAqIDEwMDA7XG4gICAgcmV0dXJuIG1vbWVudChhdGltZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZXBvY2hUb01vbWVudFRpbWVab25lID0gKGF0aW1lLCB0aW1lX3pvbmUpID0+IHtcbiAgICBpZighYXRpbWUpIHJldHVybiBhdGltZTtcbiAgICBhdGltZSA9IGF0aW1lICogMTAwMDtcbiAgICByZXR1cm4gbW9tZW50KGF0aW1lKS50eih0aW1lX3pvbmUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEVwb2NoID0gKGF0aW1lLCBmb3JtYXQgPSAnTS9EL1lZWVkgaDptbSBhJykgPT4ge1xuICAgIGlmKCFhdGltZSkgcmV0dXJuIGF0aW1lO1xuICAgIHJldHVybiBlcG9jaFRvTW9tZW50KGF0aW1lKS5mb3JtYXQoZm9ybWF0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBvYmplY3RUb1F1ZXJ5U3RyaW5nID0gKG9iaikgPT4ge1xuICAgIHZhciBzdHIgPSBcIlwiO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKHN0ciAhPSBcIlwiKSB7XG4gICAgICAgICAgICBzdHIgKz0gXCImXCI7XG4gICAgICAgIH1cbiAgICAgICAgc3RyICs9IGtleSArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG9ialtrZXldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJhY2tVUkwgPSAoKSA9PiB7XG4gICAgbGV0IHVybCAgICAgID0gVVJJKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICBsZXQgcXVlcnkgICAgPSB1cmwuc2VhcmNoKHRydWUpO1xuICAgIGxldCBmcmFnbWVudCA9IHVybC5mcmFnbWVudCgpO1xuICAgIGxldCBiYWNrVXJsICA9IHF1ZXJ5Lmhhc093blByb3BlcnR5KCdCYWNrVXJsJykgPyBxdWVyeVsnQmFja1VybCddIDogbnVsbDtcbiAgICBpZihmcmFnbWVudCAhPSBudWxsICYmIGZyYWdtZW50ICE9ICcnKXtcbiAgICAgICAgYmFja1VybCArPSBgIyR7ZnJhZ21lbnR9YDtcbiAgICB9XG4gICAgcmV0dXJuIGJhY2tVcmw7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBnZXRBdXRoQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2F1dGgvY2FsbGJhY2tgO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50TG9jYXRpb24gPSAoKSA9PiB7XG4gICAgbGV0IGxvY2F0aW9uID0gJyc7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG4gICAgICAgIC8vIGNoZWNrIGlmIHdlIGFyZSBvbiBpZnJhbWVcbiAgICAgICAgaWYgKHdpbmRvdy50b3ApXG4gICAgICAgICAgICBsb2NhdGlvbiA9IHdpbmRvdy50b3AubG9jYXRpb247XG4gICAgfVxuICAgIHJldHVybiBsb2NhdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRPcmlnaW4gPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRQYXRoTmFtZSA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRIcmVmID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxsb3dlZFVzZXJHcm91cHMgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5BTExPV0VEX1VTRVJfR1JPVVBTIHx8ICcnO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZEFQSUJhc2VVcmwgPSAocmVsYXRpdmVVcmwpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyl7XG4gICAgICAgIHJldHVybiBgJHt3aW5kb3cuQVBJX0JBU0VfVVJMfSR7cmVsYXRpdmVVcmx9YDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGxgYDtcbn07XG5cbmV4cG9ydCBjb25zdCBwdXRPbkxvY2FsU3RvcmFnZSA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGcm9tTG9jYWxTdG9yYWdlID0gKGtleSwgcmVtb3ZlSXQpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsZXQgdmFsID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICAgIGlmKHJlbW92ZUl0KXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBnZXRGcm9tTG9jYWxTdG9yYWdlIHJlbW92aW5nIGtleSAke2tleX1gKTtcbiAgICAgICAgICAgIHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2Uoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVGcm9tTG9jYWxTdG9yYWdlID0gKGtleSkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGlzQ2xlYXJpbmdTZXNzaW9uU3RhdGUgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5jbGVhcmluZ19zZXNzaW9uX3N0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbkNsZWFyaW5nU3RhdGUgPSAodmFsKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LmNsZWFyaW5nX3Nlc3Npb25fc3RhdGUgPSB2YWw7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRVc2VyTGFuZ3VhZ2UgPSAoKSA9PiB7XG4gICAgbGV0IGxhbmd1YWdlID0gJ2VuJztcbiAgICBpZih0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsYW5ndWFnZSA9IChuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXNbMF0pIHx8IG5hdmlnYXRvci5sYW5ndWFnZSB8fCBuYXZpZ2F0b3IudXNlckxhbmd1YWdlO1xuICAgIH1cbiAgICByZXR1cm4gbGFuZ3VhZ2U7XG59O1xuXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9FcnJvciA9IChlcnJvcnMpID0+IHtcbiAgICBpZihPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RFcnJvciA9IE9iamVjdC5rZXlzKGVycm9ycylbMF07XG4gICAgICAgIGNvbnN0IGZpcnN0Tm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpcnN0RXJyb3IpO1xuICAgICAgICBpZiAoZmlyc3ROb2RlKSB3aW5kb3cuc2Nyb2xsVG8oMCwgZmluZEVsZW1lbnRQb3MoZmlyc3ROb2RlKSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGhhc0Vycm9ycyA9IChmaWVsZCwgZXJyb3JzKSA9PiB7XG4gICAgaWYoZmllbGQgaW4gZXJyb3JzKSB7XG4gICAgICAgIHJldHVybiBlcnJvcnNbZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hhbGxvd0VxdWFsID0gKG9iamVjdDEsIG9iamVjdDIpID0+IHtcbiAgICBjb25zdCBrZXlzMSA9IE9iamVjdC5rZXlzKG9iamVjdDEpO1xuICAgIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXMob2JqZWN0Mik7XG5cbiAgICBpZiAoa2V5czEubGVuZ3RoICE9PSBrZXlzMi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGtleSBvZiBrZXlzMSkge1xuICAgICAgICBpZiAob2JqZWN0MVtrZXldICE9PSBvYmplY3QyW2tleV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGFycmF5c0VxdWFsID0gKGExLCBhMikgPT5cbiAgICBhMS5sZW5ndGggPT09IGEyLmxlbmd0aCAmJiBhMS5ldmVyeSgobywgaWR4KSA9PiBzaGFsbG93RXF1YWwobywgYTJbaWR4XSkpO1xuXG5leHBvcnQgY29uc3QgaXNFbXB0eSA9IChvYmopID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59O1xuXG5leHBvcnQgY29uc3QgYmFzZTY0VVJMRW5jb2RlID0gKHN0cikgPT4ge1xuICAgIHJldHVybiBzdHJcbiAgICAgICAgLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICAucmVwbGFjZSgvXFwrL2csICctJylcbiAgICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgICAgIC5yZXBsYWNlKC89L2csICcnKVxufVxuXG5leHBvcnQgY29uc3Qgc2hhMjU2ID0gKGJ1ZmZlcikgPT4ge1xuICAgIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoYnVmZmVyKS5kaWdlc3QoKVxufVxuXG5leHBvcnQgY29uc3QgcmV0cnlQcm9taXNlID0gYXN5bmMgKFxuICAgIGNiLFxuICAgIG1heE51bWJlck9mUmV0cmllcyA9IDNcbikgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4TnVtYmVyT2ZSZXRyaWVzOyBpKyspIHtcbiAgICAgICAgaWYgKGF3YWl0IGNiKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQge2ZldGNoRXJyb3JIYW5kbGVyLCBmZXRjaFJlc3BvbnNlSGFuZGxlciwgZXNjYXBlRmlsdGVyVmFsdWUgfSBmcm9tIFwiLi9hY3Rpb25zXCI7XG5pbXBvcnQge2dldEFjY2Vzc1Rva2VufSBmcm9tICcuLi9jb21wb25lbnRzL3NlY3VyaXR5L21ldGhvZHMnO1xuaW1wb3J0IHtidWlsZEFQSUJhc2VVcmx9IGZyb20gXCIuL21ldGhvZHNcIjtcbmltcG9ydCBVUkkgZnJvbSBcInVyaWpzXCI7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuZXhwb3J0IGNvbnN0IFJFQ0VJVkVfQ09VTlRSSUVTICA9ICdSRUNFSVZFX0NPVU5UUklFUyc7XG5jb25zdCBjYWxsRGVsYXkgPSA1MDA7IC8vbWlsaXNlY29uZHNcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5TWVtYmVycyA9IF8uZGVib3VuY2UoYXN5bmMgKGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBmdWxsX25hbWU9QCR7aW5wdXR9LGZpcnN0X25hbWU9QCR7aW5wdXR9LGxhc3RfbmFtZT1AJHtpbnB1dH0sZW1haWw9QCR7aW5wdXR9YCk7XG4gICAgbGV0IGV4cGFuZCA9IGB0aWNrZXRzLHJzdnAsc2NoZWR1bGVfc3VtbWl0X2V2ZW50cyxhbGxfYWZmaWxpYXRpb25zYFxuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL21lbWJlcnM/ZmlsdGVyPSR7ZmlsdGVyc30mZXhwYW5kPSR7ZXhwYW5kfSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeVN1bW1pdHMgPSBfLmRlYm91bmNlKGFzeW5jIChpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgbmFtZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9zdW1taXRzL2FsbD9maWx0ZXI9JHtmaWx0ZXJzfSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeVNwZWFrZXJzID0gXy5kZWJvdW5jZShhc3luYyAoc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBmdWxsX25hbWU9QCR7aW5wdXR9LGZpcnN0X25hbWU9QCR7aW5wdXR9LGxhc3RfbmFtZT1AJHtpbnB1dH0sZW1haWw9QCR7aW5wdXR9YCk7XG4gICAgbGV0IGFwaVVybCA9IGAvYXBpL3YxYDtcblxuICAgIGlmIChzdW1taXRJZCkge1xuICAgICAgICBhcGlVcmwgKz0gYC9zdW1taXRzLyR7c3VtbWl0SWR9YDtcbiAgICB9XG5cbiAgICBhcGlVcmwgKz0gYC9zcGVha2Vycz9maWx0ZXI9JHtmaWx0ZXJzfSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn0mZXhwYW5kPW1lbWJlcixyZWdpc3RyYXRpb25fcmVxdWVzdGA7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYXBpVXJsKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeVRhZ3MgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGFwaVVybCA9IGAvYXBpL3YxYDtcbiAgICBsZXQgZmlsdGVyID0gZW5jb2RlVVJJQ29tcG9uZW50KGB0YWc9QCR7aW5wdXR9YCk7XG5cbiAgICBpZiAoc3VtbWl0SWQpIHtcbiAgICAgICAgYXBpVXJsICs9IGAvc3VtbWl0cy8ke3N1bW1pdElkfS90cmFjay10YWctZ3JvdXBzL2FsbC9hbGxvd2VkLXRhZ3M/ZmlsdGVyPSR7ZmlsdGVyfSZleHBhbmQ9dGFnLHRyYWNrX3RhZ19ncm91cGA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXBpVXJsICs9IGAvdGFncz9maWx0ZXI9JHtmaWx0ZXJ9YDtcbiAgICB9XG5cbiAgICBhcGlVcmwgKz0gYCZvcmRlcj10YWcmcGFnZT0xJnBlcl9wYWdlPTUwJmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWA7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYXBpVXJsKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBpZiAoc3VtbWl0SWQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5tYXAodCA9PiB0LnRhZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5VHJhY2tzID0gXy5kZWJvdW5jZShhc3luYyAoc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXIgPSBlbmNvZGVVUklDb21wb25lbnQoYG5hbWU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvc3VtbWl0cy8ke3N1bW1pdElkfS90cmFja3M/ZmlsdGVyPSR7ZmlsdGVyfSZvcmRlcj1uYW1lJmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5VHJhY2tHcm91cHMgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlciA9IGlucHV0ID8gZW5jb2RlVVJJQ29tcG9uZW50KGBmaWx0ZXI9bmFtZT1AJHtpbnB1dH1gKSA6ICcnO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vdHJhY2stZ3JvdXBzP29yZGVyPW5hbWUmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59JiR7ZmlsdGVyfWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5RXZlbnRzID0gXy5kZWJvdW5jZShhc3luYyAoc3VtbWl0SWQsIGlucHV0LCBvbmx5UHVibGlzaGVkID0gZmFsc2UsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGJhc2VVcmwgPSBgL2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L2V2ZW50c2AgKyAob25seVB1Ymxpc2hlZCA/ICcvcHVibGlzaGVkJyA6ICcnKTtcbiAgICBsZXQgZmlsdGVyID0gZW5jb2RlVVJJQ29tcG9uZW50KGB0aXRsZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgJHtiYXNlVXJsfT9maWx0ZXI9JHtmaWx0ZXJ9Jm9yZGVyPXRpdGxlJmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5R3JvdXBzID0gXy5kZWJvdW5jZShhc3luYyAoaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYHRpdGxlPUAke2lucHV0fSxjb2RlPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL2dyb3Vwcz9maWx0ZXI9JHtmaWx0ZXJzfSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeUNvbXBhbmllcyA9IF8uZGVib3VuY2UoYXN5bmMgKGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBuYW1lPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL2NvbXBhbmllcz9maWx0ZXI9JHtmaWx0ZXJzfSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeVJlZ2lzdHJhdGlvbkNvbXBhbmllcyA9IF8uZGVib3VuY2UoYXN5bmMgKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcbiAgICBcbiAgICBsZXQgYWNjZXNzVG9rZW47XG5cbiAgICB0cnkge1xuICAgICAgICBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWxsYmFjayhlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBhcGlVcmwgPSBVUkkoYC9hcGkvdjEvc3VtbWl0cy8ke3N1bW1pdElkfS9yZWdpc3RyYXRpb24tY29tcGFuaWVzYCk7XG4gICAgYXBpVXJsLmFkZFF1ZXJ5KCdhY2Nlc3NfdG9rZW4nLCBhY2Nlc3NUb2tlbik7XG4gICAgYXBpVXJsLmFkZFF1ZXJ5KCdvcmRlcicsJ25hbWUnKVxuXG4gICAgaWYoaW5wdXQpIHtcbiAgICAgICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgICAgIGFwaVVybC5hZGRRdWVyeSgnZmlsdGVyW10nLCBgbmFtZT1AJHtpbnB1dH1gKTtcbiAgICB9XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYXBpVXJsLnRvU3RyaW5nKCkpKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5U3BvbnNvcnMgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYGNvbXBhbnlfbmFtZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L3Nwb25zb3JzP2ZpbHRlcj0ke2ZpbHRlcnN9JmV4cGFuZD1jb21wYW55LHNwb25zb3JzaGlwJmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5QWNjZXNzTGV2ZWxzID0gXy5kZWJvdW5jZSgoc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgbGV0IGFjY2Vzc1Rva2VuID0gZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgbmFtZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L2FjY2Vzcy1sZXZlbC10eXBlcz9maWx0ZXI9JHtmaWx0ZXJzfSYmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlPcmdhbml6YXRpb25zID0gXy5kZWJvdW5jZShhc3luYyAoaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYG5hbWU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvb3JnYW5pemF0aW9ucz9maWx0ZXI9JHtmaWx0ZXJzfSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBnZXRMYW5ndWFnZUxpc3QgPSAoY2FsbGJhY2ssIHNpZ25hbCkgPT4ge1xuICAgIHJldHVybiBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvcHVibGljL3YxL2xhbmd1YWdlc2ApLCB7c2lnbmFsfSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2socmVzcG9uc2UuZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q291bnRyeUxpc3QgPSAoY2FsbGJhY2ssIHNpZ25hbCkgPT4ge1xuXG4gICAgcmV0dXJuIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS9wdWJsaWMvdjEvY291bnRyaWVzYCksIHtzaWduYWx9KVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn07XG5cbnZhciBnZW9jb2RlcjtcblxuZXhwb3J0IGNvbnN0IGdlb0NvZGVBZGRyZXNzID0gKGFkZHJlc3MpID0+IHtcblxuICAgIGlmICghZ2VvY29kZXIpIGdlb2NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XG5cbiAgICAvLyByZXR1cm4gYSBQcm9taXNlXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUscmVqZWN0KSB7XG4gICAgICAgIGdlb2NvZGVyLmdlb2NvZGUoIHsgJ2FkZHJlc3MnOiBhZGRyZXNzfSwgZnVuY3Rpb24ocmVzdWx0cywgc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzID09IGdvb2dsZS5tYXBzLkdlb2NvZGVyU3RhdHVzLk9LKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSByZXN1bHRzIHVwb24gYSBzdWNjZXNzZnVsIHN0YXR1c1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHJlamVjdCBzdGF0dXMgdXBvbiB1bi1zdWNjZXNzZnVsIHN0YXR1c1xuICAgICAgICAgICAgICAgIHJlamVjdChzdGF0dXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZW9Db2RlTGF0TG5nID0gKGxhdCwgbG5nKSA9PiB7XG5cbiAgICBpZiAoIWdlb2NvZGVyKSBnZW9jb2RlciA9IG5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO1xuXG4gICAgdmFyIGxhdGxuZyA9IHtsYXQ6IHBhcnNlRmxvYXQobGF0KSwgbG5nOiBwYXJzZUZsb2F0KGxuZyl9O1xuICAgIC8vIHJldHVybiBhIFByb21pc2VcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSxyZWplY3QpIHtcbiAgICAgICAgZ2VvY29kZXIuZ2VvY29kZSggeyAnbG9jYXRpb24nOiBsYXRsbmd9LCBmdW5jdGlvbihyZXN1bHRzLCBzdGF0dXMpIHtcbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gZ29vZ2xlLm1hcHMuR2VvY29kZXJTdGF0dXMuT0spIHtcbiAgICAgICAgICAgICAgICAvLyByZXNvbHZlIHJlc3VsdHMgdXBvbiBhIHN1Y2Nlc3NmdWwgc3RhdHVzXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHRzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcmVqZWN0IHN0YXR1cyB1cG9uIHVuLXN1Y2Nlc3NmdWwgc3RhdHVzXG4gICAgICAgICAgICAgICAgcmVqZWN0KHN0YXR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5VGlja2V0VHlwZXMgPSBfLmRlYm91bmNlKChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBsZXQgYWNjZXNzVG9rZW4gPSBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBuYW1lPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vdGlja2V0LXR5cGVzP2ZpbHRlcj0ke2ZpbHRlcnN9JiZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cblxuIiwiZXhwb3J0IGNvbnN0IENoZWNrQm94UXVlc3Rpb25UeXBlID0gJ0NoZWNrQm94JztcbmV4cG9ydCBjb25zdCBDb21ib0JveFF1ZXN0aW9uVHlwZSA9ICdDb21ib0JveCdcbmV4cG9ydCBjb25zdCBDaGVja0JveExpc3RRdWVzdGlvblR5cGUgPSAnQ2hlY2tCb3hMaXN0JztcbmV4cG9ydCBjb25zdCBSYWRpb0J1dHRvbkxpc3RRdWVzdGlvblR5cGUgPSAnUmFkaW9CdXR0b25MaXN0JztcbmV4cG9ydCBjb25zdCBBbGxvd2VkTXVsdGlwbGVWYWx1ZVF1ZXN0aW9uVHlwZSA9IFtDb21ib0JveFF1ZXN0aW9uVHlwZSwgQ2hlY2tCb3hMaXN0UXVlc3Rpb25UeXBlLCBSYWRpb0J1dHRvbkxpc3RRdWVzdGlvblR5cGVdO1xuZXhwb3J0IGNvbnN0IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZCA9ICdBbmQnO1xuZXhwb3J0IGNvbnN0IEFuc3dlclZhbHVlc09wZXJhdG9yX09yID0gJ09yJztcbmV4cG9ydCBjb25zdCBWaXNpYmlsaXR5Q29uZGl0aW9uX0VxdWFsID0gJ0VxdWFsJztcbmV4cG9ydCBjb25zdCBWaXNpYmlsaXR5Q29uZGl0aW9uX05vdEVxdWFsID0gJ05vdEVxdWFsJztcbmV4cG9ydCBjb25zdCBWaXNpYmlsaXR5X1Zpc2libGUgPSAnVmlzaWJsZSc7XG5leHBvcnQgY29uc3QgTWFpblF1ZXN0aW9uQ2xhc3NUeXBlID0gJ01haW5RdWVzdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXN0aW9uc1NldCB7XG5cbiAgICBjb25zdHJ1Y3RvcihxdWVzdGlvbnMsIGFuc3dlcnMgPSBbXSkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHF1ZXN0aW9ucztcbiAgICAgICAgdGhpcy5vcmlnaW5hbEFuc3dlcnMgPSBhbnN3ZXJzXG4gICAgICAgIHRoaXMuYW5zd2VycyA9IFtdO1xuICAgICAgICAvLyBtYXAgYW5zd2VycyB0byBhc3NvY2lhdGUgYXJyYXlcbiAgICAgICAgZm9yIChsZXQgYSBvZiB0aGlzLm9yaWdpbmFsQW5zd2VycylcbiAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1thLnF1ZXN0aW9uX2lkXSA9IGE7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeU5hbWUgPSB7fVxuICAgICAgICB0aGlzLnF1ZXN0aW9uQnlJZCA9IHt9XG4gICAgICAgIC8vIGFzc29jaWF0aXZlIGFycmF5ICggcnVsZSBpZCAsIHJ1bGUpO1xuICAgICAgICB0aGlzLnJ1bGVzID0ge307XG4gICAgICAgIHRoaXMuX3BhcnNlUXVlc3Rpb25zKCk7XG4gICAgfVxuXG4gICAgX3BhcnNlUXVlc3Rpb24gPSAocSkgPT4ge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQnlOYW1lW3EubmFtZV0gPSBxO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQnlJZFtwYXJzZUludChxLmlkKV0gPSBxO1xuICAgICAgICBpZihxLmhhc093blByb3BlcnR5KCdzdWJfcXVlc3Rpb25fcnVsZXMnKSlcbiAgICAgICAgICAgIGZvciAobGV0IHIgb2YgcS5zdWJfcXVlc3Rpb25fcnVsZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bGVzW3BhcnNlSW50KHIuaWQpXSA9IHI7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyc2VRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgfVxuXG4gICAgX3BhcnNlUXVlc3Rpb25zID0gKCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBxIG9mIHRoaXMucXVlc3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJzZVF1ZXN0aW9uKHEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2FsbG93c1ZhbHVlcyA9IChxKSA9PiB7XG4gICAgICAgIHJldHVybiBBbGxvd2VkTXVsdGlwbGVWYWx1ZVF1ZXN0aW9uVHlwZS5pbmNsdWRlcyhxLnR5cGUpO1xuICAgIH1cblxuICAgIF9hbGxvd3NWYWx1ZSA9IChxLCBhbnN3ZXIpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gYW5zd2VyLnZhbHVlLnNwbGl0KCcsJykubWFwKHYgPT4gcGFyc2VJbnQodikpO1xuICAgICAgICBmb3IgKGxldCBhdiBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFxLnZhbHVlcy5tYXAoZSA9PiBlLmlkKS5pbmNsdWRlcyhhdikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIF9nZXRBbnN3ZXJGb3IgPSAocSkgPT4ge1xuICAgICAgICBsZXQgaWQgPSBOdW1iZXIuaXNJbnRlZ2VyKHEpID8gcSA6IHEuaWQ7XG4gICAgICAgIGxldCBhID0gdGhpcy5hbnN3ZXJzW2lkXSB8fCBudWxsO1xuICAgICAgICByZXR1cm4gYSA/IGEgOiBudWxsO1xuICAgIH1cblxuICAgIF9oYXNWYWx1ZSA9IChhbnN3ZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGFuc3dlci52YWx1ZSAhPT0gJyc7XG4gICAgfVxuXG4gICAgX2Fuc3dlckNvbnRhaW5zID0gKGFuc3dlciwgdmFsKSA9PiB7XG4gICAgICAgIHJldHVybiBhbnN3ZXIudmFsdWUuc3BsaXQoJywnKS5pbmNsdWRlcyh2YWwpO1xuICAgIH1cblxuICAgIF9pc1N1YlF1ZXN0aW9uVmlzaWJsZSA9IChydWxlKSA9PiB7XG4gICAgICAgIGxldCBpbml0aWFsQ29uZGl0aW9uID0gcnVsZS5hbnN3ZXJfdmFsdWVzX29wZXJhdG9yID09PSBBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIGNvbnN0IHBhcmVudFF1ZXN0aW9uQW5zd2VyID0gdGhpcy5fZ2V0QW5zd2VyRm9yKHJ1bGUucGFyZW50X3F1ZXN0aW9uX2lkKTtcbiAgICAgICAgaWYgKCFwYXJlbnRRdWVzdGlvbkFuc3dlcikge1xuICAgICAgICAgICAgaW5pdGlhbENvbmRpdGlvbiA9IHJ1bGUudmlzaWJpbGl0eV9jb25kaXRpb24gPT09IFZpc2liaWxpdHlDb25kaXRpb25fRXF1YWwgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHJ1bGUudmlzaWJpbGl0eV9jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjYXNlIFZpc2liaWxpdHlDb25kaXRpb25fRXF1YWw6IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYW5zd2VyVmFsdWUgb2YgcnVsZS5hbnN3ZXJfdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5hbnN3ZXJfdmFsdWVzX29wZXJhdG9yID09PSBBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb24gJiYgdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiB8fCB0aGlzLl9hbnN3ZXJDb250YWlucyhwYXJlbnRRdWVzdGlvbkFuc3dlciwgYW5zd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFZpc2liaWxpdHlDb25kaXRpb25fTm90RXF1YWw6IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYW5zd2VyVmFsdWUgb2YgcnVsZS5hbnN3ZXJfdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5hbnN3ZXJfdmFsdWVzX29wZXJhdG9yID09PSBBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb24gJiYgIXRoaXMuX2Fuc3dlckNvbnRhaW5zKHBhcmVudFF1ZXN0aW9uQW5zd2VyLCBhbnN3ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb24gfHwgIXRoaXMuX2Fuc3dlckNvbnRhaW5zKHBhcmVudFF1ZXN0aW9uQW5zd2VyLCBhbnN3ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmFsIHZpc2liaWxpdHkgY2hlY2tcbiAgICAgICAgaWYgKHJ1bGUudmlzaWJpbGl0eSA9PT0gVmlzaWJpbGl0eV9WaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5pdGlhbENvbmRpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3QgdmlzaWJsZVxuICAgICAgICByZXR1cm4gIWluaXRpYWxDb25kaXRpb247XG4gICAgfVxuXG4gICAgX2lzQW5zd2VyZWQgPSAocSkgPT4ge1xuICAgICAgICBjb25zdCBhbnN3ZXIgPSB0aGlzLl9nZXRBbnN3ZXJGb3IocSk7XG5cbiAgICAgICAgaWYgKHEuY2xhc3MgPT09IE1haW5RdWVzdGlvbkNsYXNzVHlwZSkge1xuICAgICAgICAgICAgaWYgKCFxLm1hbmRhdG9yeSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBpZiAoIWFuc3dlcikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9oYXNWYWx1ZShhbnN3ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5fYWxsb3dzVmFsdWVzKHEpICYmICF0aGlzLl9hbGxvd3NWYWx1ZShxLCBhbnN3ZXIpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgcGFyZW50IHJ1bGVzIC4uLlxuICAgICAgICBmb3IgKGxldCBydWxlSWQgb2YgcS5wYXJlbnRfcnVsZXMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5faXNTdWJRdWVzdGlvblZpc2libGUodGhpcy5ydWxlc1tydWxlSWRdKSkgLy8gaWYgcXVlc3Rpb24gaXMgbm90IHZpc2libGUgc2tpcCBpdFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFxLm1hbmRhdG9yeSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBpZiAoIWFuc3dlcikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9oYXNWYWx1ZShhbnN3ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5fYWxsb3dzVmFsdWVzKHEpICYmICF0aGlzLl9hbGxvd3NWYWx1ZShxLCBhbnN3ZXIpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgX2NoZWNrUXVlc3Rpb24gPSAocSkgPT4ge1xuICAgICAgICBsZXQgcmVzID0gdGhpcy5faXNBbnN3ZXJlZChxKTtcbiAgICAgICAgaWYocS5oYXNPd25Qcm9wZXJ0eSgnc3ViX3F1ZXN0aW9uX3J1bGVzJykpXG4gICAgICAgICAgICBmb3IgKGxldCBydWxlIG9mIHEuc3ViX3F1ZXN0aW9uX3J1bGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgcmVjdXJzaXZlIGFsbCB0aGUgdHJlZSB0aWxsIGxlYXZlcyAuLi5cbiAgICAgICAgICAgICAgICByZXMgPSByZXMgJiYgdGhpcy5fY2hlY2tRdWVzdGlvbihydWxlLnN1Yl9xdWVzdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyID0gKHF1ZXN0aW9uKSA9PiB7XG4gICAgICAgIGxldCByZXMgPSB7fTtcbiAgICAgICAgbGV0IHVzZXJBbnN3ZXIgPSB0aGlzLm9yaWdpbmFsQW5zd2Vycy5maW5kKGEgPT4gYS5xdWVzdGlvbl9pZCA9PT0gcXVlc3Rpb24uaWQpPy52YWx1ZTtcblxuICAgICAgICBpZih1c2VyQW5zd2VyKSB7XG4gICAgICAgICAgICBpZiAocXVlc3Rpb24udHlwZSA9PT0gQ2hlY2tCb3hRdWVzdGlvblR5cGUpIHVzZXJBbnN3ZXIgPSB1c2VyQW5zd2VyID09PSAnZmFsc2UnID8gZmFsc2UgOiAhIXVzZXJBbnN3ZXI7XG4gICAgICAgICAgICBpZiAocXVlc3Rpb24udHlwZSA9PT0gUmFkaW9CdXR0b25MaXN0UXVlc3Rpb25UeXBlIHx8IHF1ZXN0aW9uLnR5cGUgPT09IENvbWJvQm94UXVlc3Rpb25UeXBlKSB1c2VyQW5zd2VyID0gcGFyc2VJbnQodXNlckFuc3dlcik7XG4gICAgICAgICAgICBpZiAocXVlc3Rpb24udHlwZSA9PT0gQ2hlY2tCb3hMaXN0UXVlc3Rpb25UeXBlKSB1c2VyQW5zd2VyID0gdXNlckFuc3dlci5zcGxpdCgnLCcpLm1hcChhbnNWYWwgPT4gcGFyc2VJbnQoYW5zVmFsKSkgfHwgW107XG4gICAgICAgIH1cblxuICAgICAgICByZXNbcXVlc3Rpb24ubmFtZV0gPSAgdXNlckFuc3dlciB8fCAnJztcbiAgICAgICAgaWYocXVlc3Rpb24uaGFzT3duUHJvcGVydHkoJ3N1Yl9xdWVzdGlvbl9ydWxlcycpKVxuICAgICAgICAgICAgZm9yIChsZXQgcnVsZSBvZiBxdWVzdGlvbi5zdWJfcXVlc3Rpb25fcnVsZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayByZWN1cnNpdmUgYWxsIHRoZSB0cmVlIHRpbGwgbGVhdmVzIC4uLlxuICAgICAgICAgICAgICAgIGxldCByZXMxID0gdGhpcy5fZm9ybWF0UXVlc3Rpb25BbnN3ZXIocnVsZS5zdWJfcXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgIHJlcyA9IHsuLi5yZXMsIC4uLnJlczF9O1xuICAgICAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZvcm1hdEFuc3dlcnMgPSAoKSA9PiB7XG4gICAgICAgIGxldCByZXMgPSB7fVxuICAgICAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKHEgPT4ge1xuICAgICAgICAgICAgbGV0IHJlczEgPSB0aGlzLl9mb3JtYXRRdWVzdGlvbkFuc3dlcihxKTtcbiAgICAgICAgICAgIHJlcyA9IHsuLi5yZXMsLi4ucmVzMX07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGNvbXBsZXRlZCA9ICgpID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IHEgb2YgdGhpcy5xdWVzdGlvbnMpIHtcbiAgICAgICAgICAgIHJlcyA9IHJlcyAmJiB0aGlzLl9jaGVja1F1ZXN0aW9uKHEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZ2V0UXVlc3Rpb25CeU5hbWUgPSAobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJ5TmFtZVtuYW1lXSB8fCBudWxsO1xuICAgIH1cblxuICAgIGdldFF1ZXN0aW9uQnlJZCA9IChpZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJ5SWRbcGFyc2VJbnQoaWQpXSB8fCBudWxsO1xuICAgIH1cbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJhd2Vzb21lLWJvb3RzdHJhcC1jaGVja2JveC9hd2Vzb21lLWJvb3RzdHJhcC1jaGVja2JveC5jc3NcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYnJvd3Nlci10YWJzLWxvY2tcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY3J5cHRvXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImRyb3B6b25lXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImRyb3B6b25lL2Rpc3QvZHJvcHpvbmUuY3NzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV4dGVuZFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJpMThuLXJlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImkxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImlkdG9rZW4tdmVyaWZpZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaW1tdXRhYmlsaXR5LWhlbHBlclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibW9tZW50LXRpbWV6b25lXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZGF0ZXRpbWVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG5kXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRuZC1odG1sNS1iYWNrZW5kXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1kcm9wem9uZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1maW5hbC1mb3JtXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWdvb2dsZS1tYXBzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWdvb2dsZS1tYXBzL2xpYi9jb21wb25lbnRzL2FkZG9ucy9NYXJrZXJDbHVzdGVyZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtcmVkdXhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtcnRlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXNlbGVjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1zZWxlY3QvbGliL0FzeW5jXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNDcmVhdGFibGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0L2xpYi9DcmVhdGFibGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0L2xpYi9jb21wb25lbnRzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXRvb2x0aXBcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3VwZXJhZ2VudFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzd2VldGFsZXJ0MlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1cmlqc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ2aWRlby5qc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ2aWRlby5qcy9kaXN0L3ZpZGVvLWpzLmNzc1wiKTsiXSwic291cmNlUm9vdCI6IiJ9
11128
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9hamF4bG9hZGVyL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2F0dGVuZGFuY2UtdHJhY2tlci5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9jaXJjbGUtYnV0dG9uL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2NpcmNsZS1idXR0b24vaW5kZXgubW9kdWxlLnNjc3M/NGMyNiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9jbG9jay5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9leGNsdXNpdmUtd3JhcHBlci5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9leHRyYS1xdWVzdGlvbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvZm9ybXMvcnN2cC1mb3JtLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2Zvcm1zL3NpbXBsZS1mb3JtLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2ZyYWdtZW4tcGFyc2VyLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2ZyZWUtdGV4dC1zZWFyY2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvZ29vZ2xlLW1hcC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvYWNjZXNzLWxldmVscy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvYWN0aW9uLWRyb3Bkb3duL2FjdGlvbi1kcm9wZG93bi5sZXNzP2Q3NDMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2FjdGlvbi1kcm9wZG93bi9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY2hlY2tib3gtbGlzdC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY29tcGFueS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY291bnRyeS1kcm9wZG93bi5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY291bnRyeS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZGF0ZXRpbWVwaWNrZXIvZGF0ZXRpbWVwaWNrZXIubGVzcz84Y2Q1Iiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9kYXRldGltZXBpY2tlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZHJvcGRvd24uanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2VkaXRvci1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZXZlbnQtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2ZyZWUtbXVsdGktdGV4dC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZ3JvdXAtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vT3B0aW9uR3JvdXAuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vb3B0aW9uZ3JvdXAubGVzcz9hNDAxIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9sYW5ndWFnZS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvbWVtYmVyLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9vcmdhbml6YXRpb24taW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3JhZGlvLWxpc3QuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3JlZ2lzdHJhdGlvbi1jb21wYW55LWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zcGVha2VyLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zcG9uc29yLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zdW1taXQtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3RhZy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdGV4dC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdGV4dGFyZWEtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3RpY2tldC10eXBlcy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0LXYyL2Ryb3B6b25lLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaWNvbi5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0LXYyL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaW5kZXgubGVzcz9hZDBlIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQvZmlsZS5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L2pwZy5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC9tb3YucG5nIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQvbXA0LnBuZyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L3BkZi5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC91cGxvYWQubGVzcz80NjNmIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3Jhdy1odG1sL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3Rpb25zL3BhbmVsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3VyaXR5L2Fic3RyYWN0LWF1dGgtY2FsbGJhY2stcm91dGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvc2VjdXJpdHkvYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zZWN1cml0eS9tZXRob2RzLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3VyaXR5L3Nlc3Npb24tY2hlY2tlci9vcC1zZXNzaW9uLWNoZWNrZXIuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvc2ltcGxlLWxpbmstbGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zaW1wbGUtbGluay1saXN0L3NpbXBsZS1saW5rLWxpc3QubGVzcz8xYzlkIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3N1bW1pdC1kcm9wZG93bi9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zdW1taXQtZHJvcGRvd24vc3VtbWl0LWRyb3Bkb3duLmxlc3M/ZThiNSIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtZWRpdGFibGUvRWRpdGFibGVUYWJsZS5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlQ2VsbC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlSGVhZGluZy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlUm93LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLWVkaXRhYmxlL2VkaXRhYmxlLXRhYmxlLmNzcz83ZTBjIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNlbGVjdGFibGUvU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNlbGVjdGFibGUvU2VsZWN0YWJsZVRhYmxlSGVhZGluZy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zZWxlY3RhYmxlL1NlbGVjdGFibGVUYWJsZVJvdy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zZWxlY3RhYmxlL3NlbGVjdGFibGUtdGFibGUuY3NzPzVlM2QiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVBY3Rpb25zVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNvcnRhYmxlL1NvcnRhYmxlVGFibGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZUhlYWRpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZVJvdy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zb3J0YWJsZS90YWJsZS1zb3J0YWJsZS5jc3M/ZjhmMiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS9BY3Rpb25zVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlL1RhYmxlLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlL1RhYmxlQ2VsbC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS9UYWJsZUhlYWRpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUvVGFibGVSb3cuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY3NzPzM3OTMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdXNlLWZpdC10ZXh0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3ZpZGVvLXN0cmVhbS5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvaTE4biBzeW5jIF5cXC5cXC8uKlxcLmpzb24kIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9hY3Rpb25zLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9tZXRob2RzLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9xdWVyeS1hY3Rpb25zLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9xdWVzdGlvbnMtc2V0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImF3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94L2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94LmNzc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImJyb3dzZXItdGFicy1sb2NrXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwiY3J5cHRvXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwiZHJvcHpvbmVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJkcm9wem9uZS9kaXN0L2Ryb3B6b25lLmNzc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImV4dGVuZFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImkxOG4tcmVhY3RcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImlkdG9rZW4tdmVyaWZpZXJcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJpbW11dGFiaWxpdHktaGVscGVyXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwibG9kYXNoXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwibW9tZW50LXRpbWV6b25lXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicHJvcC10eXBlc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZGF0ZXRpbWVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1kbmRcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1kbmQtaHRtbDUtYmFja2VuZFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWRvbVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWRyb3B6b25lXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZmluYWwtZm9ybVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWdvb2dsZS1tYXBzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZ29vZ2xlLW1hcHMvbGliL2NvbXBvbmVudHMvYWRkb25zL01hcmtlckNsdXN0ZXJlclwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXJlZHV4XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtcnRlXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3Qtc2VsZWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3Qtc2VsZWN0L2xpYi9Bc3luY1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNDcmVhdGFibGVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1zZWxlY3QvbGliL0NyZWF0YWJsZVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXNlbGVjdC9saWIvY29tcG9uZW50c1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXRvb2x0aXBcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJzdXBlcmFnZW50XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwic3dlZXRhbGVydDJcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJ1cmlqc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInZpZGVvLmpzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwidmlkZW8uanMvZGlzdC92aWRlby1qcy5jc3NcIiJdLCJuYW1lcyI6WyJsYW5ndWFnZSIsImdldEN1cnJlbnRVc2VyTGFuZ3VhZ2UiLCJsZW5ndGgiLCJzcGxpdCIsIlQiLCJzZXRUZXh0cyIsInJlcXVpcmUiLCJlIiwiQWpheExvYWRlciIsInNob3ciLCJyZWxhdGl2ZSIsImNvbG9yIiwic2l6ZSIsImNoaWxkcmVuIiwic3R5bGVzIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwicG9zaXRpb24iLCJ6SW5kZXgiLCJtYXJnaW4iLCJjdXJzb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ0b3AiLCJsZWZ0Iiwic3R5bGVTcGlubmVyIiwiZm9udFNpemUiLCJzdHlsZVNwaW5uZXJDb250YWluZXIiLCJ0ZXh0QWxpZ24iLCJyaWdodCIsImJvdHRvbSIsInN0eWxlQmFja2dyb3VuZCIsImJhY2tncm91bmQiLCJvcGFjaXR5IiwiQXR0ZW5kYW5jZVRyYWNrZXIiLCJSZWFjdCIsIkNvbXBvbmVudCIsImFwaUJhc2VVcmwiLCJzdW1taXRJZCIsInNvdXJjZUlkIiwic291cmNlTmFtZSIsInByb3BzIiwibG9jYXRpb24iLCJnZXRMb2NhdGlvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QWNjZXNzVG9rZW4iLCJodHRwIiwicHV0Iiwic2VuZCIsImFjY2Vzc190b2tlbiIsInR5cGUiLCJzb3VyY2VfaWQiLCJlbmQiLCJjb25zb2xlIiwibG9nIiwicG9zdCIsIm5hdmlnYXRvciIsInNlbmRCZWFjb24iLCJ1bmRlZmluZWQiLCJ3aW5kb3ciLCJlbmNvZGVVUklDb21wb25lbnQiLCJocmVmIiwiY29tcG9uZW50RGlkTW91bnQiLCJ0cmFja0VudGVyIiwib25CZWZvcmVVbmxvYWQiLCJhZGRFdmVudExpc3RlbmVyIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ0cmFja0xlYXZlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbmRlciIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsIm51bWJlciIsImlzUmVxdWlyZWQiLCJkZWZhdWx0UHJvcHMiLCJpc0xpdmUiLCJldmVudCIsIm5vd1V0YyIsImhhc0VuZGVkIiwiZW5kX2RhdGUiLCJoYXNTdGFydGVkIiwic3RhcnRfZGF0ZSIsIkNpcmNsZUJ1dHRvbiIsImlzU2NoZWR1bGVkIiwiYWRkVG9TY2hlZHVsZSIsInJlbW92ZUZyb21TY2hlZHVsZSIsImVudGVyQ2xpY2siLCJhbHdheXNTaG93RW50ZXIiLCJpc0xpdmVOb3ciLCJidXR0b25DbGFzcyIsImljb25DbGFzcyIsIm9uQ2xpY2siLCJoYW5kbGVDbGljayIsImV2IiwiYWN0aW9uIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJlbnRlciIsImFkZGVkIiwiYWRkIiwiY2lyY2xlQnV0dG9uIiwib2JqZWN0IiwiYm9vbCIsImZ1bmMiLCJDbG9jayIsImNvbnN0cnVjdG9yIiwicmVzcG9uc2UiLCJmZXRjaCIsImNhdGNoIiwiZXJyIiwianNvbiIsInRpbWVzdGFtcCIsInN0YXRlIiwib25UaWNrIiwic2V0U3RhdGUiLCJmcmFnbWVudFBhcnNlciIsIkZyYWdtZW50UGFyc2VyIiwiaW50ZXJ2YWwiLCJ0aW1lem9uZSIsIm5vdyIsIm5vd1FTIiwiZ2V0UGFyYW0iLCJtb21lbnRRUyIsIm1vbWVudCIsInR6IiwiaXNWYWxpZCIsInZhbHVlT2YiLCJsb2NhbCIsInVuaXgiLCJzZXJ2ZXJUaW1lIiwiZ2V0U2VydmVyVGltZSIsImxvY2FsQWZ0ZXIiLCJzZXRJbnRlcnZhbCIsInRpY2siLCJjbGVhckludGVydmFsIiwibWFyZ2luVG9wIiwiZm9ybWF0IiwiRXhjbHVzaXZlIiwic2hvd0ZpZWxkIiwiYmluZCIsIm5hbWUiLCJleGNsdXNpdmVTZWN0aW9ucyIsIkVYQ0xVU0lWRV9TRUNUSU9OUyIsImluY2x1ZGVzIiwiRXh0cmFRdWVzdGlvbnNGb3JtIiwiZXh0cmFRdWVzdGlvbnMiLCJ1c2VyQW5zd2VycyIsIm9uQW5zd2VyQ2hhbmdlcyIsImNsYXNzTmFtZSIsInF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lIiwicXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZSIsInF1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZSIsImZvcm1SZWYiLCJyZWFkT25seSIsImRlYnVnIiwiYnV0dG9uVGV4dCIsInN1Ym1pdCIsInF1ZXN0aW9uUmVmIiwidXNlUmVmIiwiYW5zd2VycyIsInNldEFuc3dlcnMiLCJ1c2VTdGF0ZSIsImZvcm1FcnJvcnMiLCJzZXRGb3JtRXJyb3JzIiwidXNlRWZmZWN0IiwiZm9ybWF0VXNlckFuc3dlcnMiLCJxcyIsIlF1ZXN0aW9uc1NldCIsImZvcm1hdEFuc3dlcnMiLCJDb25kaXRpb24iLCJ3aGVuIiwicnVsZSIsInZhbHVlIiwiaW5wdXQiLCJjaGVja1Zpc2liaWxpdHkiLCJjaGVja1J1bGUiLCJFcnJvciIsImVycm9yIiwidmFsdWVzIiwiYW5zd2VyX3ZhbHVlcyIsIkFycmF5IiwiaXNBcnJheSIsInJlcyIsImFud2VyX3ZhbHVlc19vcGVyYXRvciIsImZvckVhY2giLCJ2IiwicGFyc2VJbnQiLCJ0b1N0cmluZyIsInJ1bGVSZXN1bHQiLCJ2aXNpYmlsaXR5IiwidmlzaWJpbGl0eV9jb25kaXRpb24iLCJjdXJyZW50Iiwic3ViX3F1ZXN0aW9uIiwiaWQiLCJyZW5kZXJRdWVzdGlvbiIsInEiLCJxdWVzdGlvblZhbHVlcyIsImVsIiwibWFuZGF0b3J5IiwibGFiZWwiLCJlbmRzV2l0aCIsInJlcGxhY2UiLCJvbkNoYW5nZSIsInBsYWNlaG9sZGVyIiwic3ViX3F1ZXN0aW9uX3J1bGVzIiwibWFwIiwiciIsInZhbCIsImlzVmlzaWJsZSIsInZhbGlkYXRlUXVlc3Rpb24iLCJlcnJvcnMiLCJoYXNPd25Qcm9wZXJ0eSIsIm9uU3VibWl0IiwidmFsaWRhdGUiLCJPYmplY3QiLCJrZXlzIiwiaGFuZGxlU3VibWl0IiwiZm9ybSIsInN1Ym1pdHRpbmciLCJwcmlzdGluZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJhcnJheSIsIm9uZU9mVHlwZSIsInNoYXBlIiwiYW55IiwiUnN2cEZvcm0iLCJxdWVzdGlvbnMiLCJxdWVzdGlvbl9pZCIsImhhbmRsZUNoYW5nZSIsImhhc0Vycm9ycyIsImZpbmQiLCJhIiwiY2xhc3NfbmFtZSIsImlzX2NvdW50cnlfc2VsZWN0b3IiLCJpc19tdWx0aXNlbGVjdCIsImVtcHR5X3N0cmluZyIsInRhcmdldCIsImFuc3dlciIsImZpZWxkIiwiaXNfbWFuZGF0b3J5IiwiU2ltcGxlRm9ybSIsImVudGl0eSIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInByZXZTdGF0ZSIsInNuYXBzaG90Iiwic2Nyb2xsVG9FcnJvciIsInNoYWxsb3dFcXVhbCIsImlzRW1wdHkiLCJjaGVja2VkIiwiY3JlYXRlRmllbGQiLCJmaWVsZHMiLCJmIiwidHJhbnNsYXRlIiwib3JpZ2luYWxIYXNoIiwiaGFzaCIsImNvbnZlcnRUb0hhc2giLCJzdHJIYXNoIiwic3Vic3RyIiwidG9Mb3dlckNhc2UiLCJwYXJhbXMiLCJwYXJhbSIsInRyaW0iLCJjbGVhclBhcmFtcyIsImtleSIsImdldFBhcmFtcyIsImRlbGV0ZVBhcmFtIiwiZGVsZXRlUGFyYW1zIiwic2V0UGFyYW0iLCJzZXJpYWxpemUiLCJGcmVlVGV4dFNlYXJjaCIsIm9uU2VhcmNoQ2xpY2siLCJvbkNsZWFyQ2xpY2siLCJvbktleVByZXNzZWQiLCJkb0ZpbHRlcmluZyIsInRlcm0iLCJvblNlYXJjaCIsImNvZGUiLCJrZXlDb2RlIiwid2hpY2giLCJNQVAiLCJkZWZhdWx0Wm9vbSIsImRlZmF1bHRDZW50ZXIiLCJsYXQiLCJsbmciLCJvcHRpb25zIiwibWluWm9vbSIsIm1heFpvb20iLCJHb29nbGVNYXBXcmFwcGVyIiwid2l0aEdvb2dsZU1hcCIsIm9uTWFwTG9hZCIsInpvb20iLCJjZW50ZXIiLCJvbk1hcENoYW5nZSIsIm9uTWFwQ2xpY2siLCJzaG93TWFya2VycyIsIm1hcmtlcnMiLCJtYXJrZXIiLCJvblRvZ2dsZUluZm9XaW5kb3ciLCJvbk1hcmtlckRyYWciLCJkcmFnZ2FibGUiLCJpc0luZm9XaW5kb3dPcGVuIiwiR01hcCIsImhhbmRsZU1hcExvYWQiLCJoYW5kbGVNYXBDaGFuZ2UiLCJoYW5kbGVNYXJrZXJEcmFnIiwiaGFuZGxlTWFwQ2xpY2siLCJuZXdfbWFya2VycyIsImFycmF5c0VxdWFsIiwib2xkX21hcmtlcnNfc3RyIiwibSIsInNvcnQiLCJqb2luIiwibmV3X21hcmtlcnNfc3RyIiwibWFya2VyQm91bmRzIiwiZ29vZ2xlIiwibWFwcyIsIkxhdExuZ0JvdW5kcyIsIm1hcmtlcl9sb2MiLCJMYXRMbmciLCJleHRlbmQiLCJfbWFwQ29tcG9uZW50IiwiZml0Qm91bmRzIiwidmlzaWJsZV9tYXJrZXJzIiwiZmlsdGVyIiwiZ2V0Qm91bmRzIiwiY29udGFpbnMiLCJvbkNoYW5nZUNhbGxiYWNrIiwiaGFuZGxlTWFya2VyQ2xpY2siLCJtYXJrZXJfaWQiLCJpc19vcGVuIiwib25NYXJrZXJEcmFnZ2VkIiwibGF0TG5nIiwiQWNjZXNzTGV2ZWxzSW5wdXQiLCJnZXRBY2Nlc3NMZXZlbHMiLCJnZXRPcHRpb25WYWx1ZSIsImdldE9wdGlvbkxhYmVsIiwiYWNjZXNzTGV2ZWwiLCJjYWxsYmFjayIsIlByb21pc2UiLCJyZXNvbHZlIiwicXVlcnlBY2Nlc3NMZXZlbHMiLCJtdWx0aSIsInJlc3QiLCJpc011bHRpIiwiaGFzX2Vycm9yIiwiQWN0aW9uRHJvcGRvd24iLCJhY3Rpb25MYWJlbCIsInNtYWxsRGRsIiwic21hbGxCdG4iLCJ0aGVWYWx1ZSIsIm9wdCIsIkNoZWNrYm94TGlzdCIsIm90aGVyVmFsdWUiLCJvcCIsIm90aGVyQ2hlY2tlZCIsImhhbmRsZU90aGVyQ0JDaGFuZ2UiLCJvcHRpb25WYWx1ZXMiLCJ0aGVWYWwiLCJpc05hTiIsInB1c2giLCJkaXNhYmxlZCIsImlubGluZSIsImh0bWwiLCJhbGxvd090aGVyIiwiaXNEaXNhYmxlZCIsInN0eWxlIiwicGFkZGluZ0xlZnQiLCJtYXJnaW5MZWZ0IiwiZmxvYXQiLCJDb21wYW55SW5wdXQiLCJoYW5kbGVOZXciLCJnZXRDb21wYW5pZXMiLCJ0cmFuc2xhdGVWYWx1ZSIsIm5ld1ZhbHVlIiwib25DcmVhdGUiLCJ0cmFuc2xhdGVPcHRpb25zIiwibmV3T3B0aW9ucyIsImMiLCJxdWVyeUNvbXBhbmllcyIsImFsbG93Q3JlYXRlIiwiQXN5bmNDb21wb25lbnQiLCJBc3luY0NyZWF0YWJsZVNlbGVjdCIsIkFzeW5jU2VsZWN0IiwiQ291bnRyeURyb3Bkb3duIiwic2V0T3B0aW9ucyIsImFib3J0Q29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsImdldENvdW50cnlMaXN0Iiwic2lnbmFsIiwiYWJvcnQiLCJjb3VudHJ5TGlzdCIsImlzb19jb2RlIiwiQ291bnRyeUlucHV0IiwiRGF0ZVRpbWVQaWNrZXIiLCJpc1ZhbGlkRGF0ZSIsImRhdGUiLCJpc01vbWVudCIsImN1cnJlbnREYXRlIiwic2VsZWN0ZWREYXRlIiwidmFsaWRhdGlvbiIsImFmdGVyIiwiYmVmb3JlIiwiaXNCZWZvcmUiLCJpc0FmdGVyIiwiYWZ0ZXJEYXRlIiwic3VidHJhY3QiLCJiZWZvcmVEYXRlIiwiaW5wdXRQcm9wcyIsImlucHV0RGlzYWJsZWQiLCJ0aW1lIiwiYXV0b0NvbXBsZXRlIiwiRHJvcGRvd24iLCJzZWxlY3Rpb24iLCJjbGVhcmFibGUiLCJvdmVycmlkZUNTUyIsImlzQ2xlYXJhYmxlIiwic2VsZWN0Q2xhc3NOYW1lIiwic2VsZWN0U3R5bGVzIiwibWVudSIsIlRleHRFZGl0b3IiLCJSaWNoVGV4dEVkaXRvciIsImRlZmF1bHQiLCJlZGl0b3JWYWx1ZSIsImNyZWF0ZUVtcHR5VmFsdWUiLCJjdXJyZW50VmFsdWUiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJzZXRDb250ZW50RnJvbVN0cmluZyIsIm9sZEVkaXRvclZhbHVlIiwib2xkQ29udGVudFN0YXRlIiwiZ2V0RWRpdG9yU3RhdGUiLCJnZXRDdXJyZW50Q29udGVudCIsIm5ld0NvbnRlbnRTdGF0ZSIsInN0cmluZ1ZhbHVlIiwiRXZlbnRJbnB1dCIsImdldEV2ZW50cyIsInN1bW1pdCIsIm9ubHlQdWJsaXNoZWQiLCJxdWVyeUV2ZW50cyIsIm9wdGlvbiIsInRpdGxlIiwiRnJlZU11bHRpVGV4dElucHV0IiwiaW5wdXRWYWx1ZSIsImhhbmRsZUlucHV0Q2hhbmdlIiwiaGFuZGxlS2V5RG93biIsImxpbWl0IiwiRHJvcGRvd25JbmRpY2F0b3IiLCJHcm91cElucHV0IiwiZ2V0R3JvdXBzIiwicXVlcnlHcm91cHMiLCJPcHRpb25Hcm91cCIsImkiLCJHcm91cGVkRHJvcGRvd24iLCJMYW5ndWFnZUlucHV0Iiwic2hvdWxkVXNlSWQiLCJnZXRMYW5ndWFnZUxpc3QiLCJsYW5ndWFnZUxpc3QiLCJsIiwiTWVtYmVySW5wdXQiLCJnZXRNZW1iZXJzIiwibWVtYmVyIiwiZmlyc3RfbmFtZSIsImxhc3RfbmFtZSIsInF1ZXJ5TWVtYmVycyIsIk9yZ2FuaXphdGlvbklucHV0IiwiZ2V0T3JnYW5pemF0aW9ucyIsIm9yZyIsInF1ZXJ5T3JnYW5pemF0aW9ucyIsIlJhZGlvTGlzdCIsImdldExhYmVsIiwic2ltcGxlIiwiZGVzY3JpcHRpb24iLCJSZWdpc3RyYXRpb25Db21wYW55SW5wdXQiLCJvbkVycm9yIiwic2V0VGhlVmFsdWUiLCJmcmVlSW5wdXQiLCJzZXRGcmVlSW5wdXQiLCJzZXRJbnB1dFZhbHVlIiwiaXNNdWx0aU9wdGlvbmFsIiwic2V0SXNNdWx0aU9wdGlvbmFsIiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsImV2ZW50VmFsdWUiLCJuZXdWYWx1ZVN0YXRlIiwiaGFuZGxlSW5wdXRDbGVhciIsImV2dCIsIm90aGVyT3B0aW9uIiwicXVlcnlSZWdpc3RyYXRpb25Db21wYW5pZXMiLCJwYWRkaW5nUmlnaHQiLCJTcGVha2VySW5wdXQiLCJnZXRTcGVha2VycyIsInNwZWFrZXJJZCIsImhpc3RvcnkiLCJxdWVyeVNwZWFrZXJzIiwic3BlYWtlciIsIk11bHRpVmFsdWVMYWJlbCIsImRhdGEiLCJzIiwiU3BvbnNvcklucHV0IiwiZ2V0U3BvbnNvcnMiLCJxdWVyeVNwb25zb3JzIiwiY29tcGFueSIsInNwb25zb3JzaGlwIiwiU3VtbWl0SW5wdXQiLCJnZXRTdW1taXRzIiwicXVlcnlTdW1taXRzIiwiVGFnSW5wdXQiLCJ0IiwidGFnIiwiZ2V0VGFncyIsIm5leHRWYWx1ZSIsInF1ZXJ5VGFncyIsIm9yZGVyZWRUYWdzIiwiYiIsIklucHV0IiwiVGV4dEFyZWEiLCJUaWNrZXRUeXBlc0lucHV0IiwiZ2V0VGlja2V0VHlwZXMiLCJ0aWNrZXRUeXBlIiwicXVlcnlUaWNrZXRUeXBlcyIsIkRyb3B6b25lIiwiRHJvcHpvbmVKUyIsImZpbGVzIiwib25VcGxvYWRDb21wbGV0ZSIsImdldERqc0NvbmZpZyIsImRlZmF1bHRzIiwidXJsIiwiY29uZmlnIiwicG9zdFVybCIsImRqc0NvbmZpZyIsImFjY2VwdCIsImZpbGUiLCJkb25lIiwibWF4RmlsZXMiLCJ1cGxvYWRDb3VudCIsImF1dG9EaXNjb3ZlciIsImV2ZW50SGFuZGxlcnMiLCJkcm9wIiwiaW5mbyIsImRyb3B6b25lTm9kZSIsImRyb3B6b25lU2VsZWN0b3IiLCJSZWFjdERPTSIsImZpbmRET01Ob2RlIiwiZHJvcHpvbmUiLCJzZXR1cEV2ZW50cyIsImdldEFjdGl2ZUZpbGVzIiwicXVldWVEZXN0cm95IiwiZGVzdHJveUludGVydmFsIiwiZGVzdHJveSIsImRqc0NvbmZpZ09iaiIsInBvc3RVcmxDb25maWdPYmoiLCJpY29ucyIsInNob3dGaWxldHlwZUljb24iLCJpY29uRmlsZXR5cGVzIiwiZXZlbnRIYW5kbGVyIiwicHJvdG90eXBlIiwiY2FsbCIsIm9uIiwiZmlsZUluRmlsZXMiLCJzcGxpY2UiLCJwcm9ncmVzcyIsImJ5dGVzU2VudCIsInByZXZpZXdFbGVtZW50IiwiZWxlbSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJ4aHIiLCJmb3JtRGF0YSIsImFwcGVuZCIsIl90aGlzIiwiZHJvcHpvbmVPbkxvYWQiLCJvbmxvYWQiLCJ1cGxvYWRSZXNwb25zZSIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwib2ZmIiwiSWNvbiIsImZpbGV0eXBlIiwiVXBsb2FkSW5wdXRWMiIsIm9uUmVtb3ZlIiwibWVkaWFUeXBlIiwidGltZU91dCIsImFsbG93ZWRFeHQiLCJhbGxvd2VkX2V4dGVuc2lvbnMiLCJleHQiLCJtYXhTaXplIiwibWF4X3NpemUiLCJjYW5VcGxvYWQiLCJkanNDb25maWdTZXQiLCJwYXJhbU5hbWUiLCJtYXhGaWxlc2l6ZSIsInRpbWVvdXQiLCJjaHVua2luZyIsInJldHJ5Q2h1bmtzIiwicGFyYWxsZWxDaHVua1VwbG9hZHMiLCJhZGRSZW1vdmVMaW5rcyIsImFjY2VwdGVkRmlsZXMiLCJjb21wb25lbnRDb25maWciLCJtZWRpYV90eXBlIiwibWVkaWFfdXBsb2FkIiwicmVtb3ZlZGZpbGUiLCJwcml2YXRlX3VybCIsInB1YmxpY191cmwiLCJmaWxlbmFtZSIsIlVwbG9hZElucHV0Iiwic2hvd19yZW1vdmUiLCJsb2dvX3ByZXZpZXciLCJwcmV2aWV3IiwiZmlsZUhhc1ByZXZpZXciLCJvbkRyb3AiLCJmaWxlUmVqZWN0aW9ucyIsImhhbmRsZVVwbG9hZCIsImhhbmRsZUVycm9yIiwiaGFuZGxlUmVtb3ZlIiwic2hvd1ZlaWwiLCJoaWRlVmVpbCIsImZpbGVOYW1lIiwicGF0dGVybiIsInRlc3QiLCJpY29uIiwiZmlsZV9pY29uIiwic2xpY2UiLCJsYXN0SW5kZXhPZiIsInBkZl9pY29uIiwibW92X2ljb24iLCJtcDRfaWNvbiIsIlJhd0hUTUwiLCJfX2h0bWwiLCJQYW5lbCIsInRoZUlkIiwidGhlQ2xhc3MiLCJBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlIiwiaXNzdWVyIiwiYXVkaWVuY2UiLCJpZF90b2tlbl9pc192YWxpZCIsImVycm9yX2Rlc2NyaXB0aW9uIiwiZmxvdyIsImdldE9BdXRoMkZsb3ciLCJfaW1wbGljaXRGbG93IiwiaWRfdG9rZW4iLCJzZXNzaW9uX3N0YXRlIiwiZXhwaXJlc19pbiIsImV4dHJhY3RIYXNoUGFyYW1zIiwiZG9Mb2dpbiIsImdldEN1cnJlbnRQYXRoTmFtZSIsInZhbGlkYXRlSWRUb2tlbiIsIm9uVXNlckF1dGgiLCJwYXJlbnQiLCJwb3N0TWVzc2FnZSIsIm9yaWdpbiIsIl9jb2RlRmxvdyIsIlVSSSIsImdldEN1cnJlbnRIcmVmIiwicXVlcnkiLCJzZWFyY2giLCJiYWNrVXJsIiwiZW1pdEFjY2Vzc1Rva2VuIiwidGhlbiIsInJlZnJlc2hfdG9rZW4iLCJlcnJvcjIiLCJlcnJvcl9kZXNjcmlwdGlvbjIiLCJSRVNQT05TRV9UWVBFX0lNUExJQ0lUIiwiUkVTUE9OU0VfVFlQRV9DT0RFIiwicGFyc2VRdWVyeSIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsIm5leHRQcm9wcyIsIm5leHRTdGF0ZSIsIm5leHRDb250ZXh0IiwiZnJhZ21lbnQiLCJsZW5naHQiLCJidWlsZFF1ZXJ5IiwiX2NhbGxiYWNrIiwiX3JlZGlyZWN0MkVycm9yIiwiU0VUX0xPR0dFRF9VU0VSIiwiTE9HT1VUX1VTRVIiLCJSRVFVRVNUX1VTRVJfSU5GTyIsIlJFQ0VJVkVfVVNFUl9JTkZPIiwiQ0xFQVJfU0VTU0lPTl9TVEFURSIsIlVQREFURV9TRVNTSU9OX1NUQVRFX1NUQVRVUyIsIlNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCIsIlNFU1NJT05fU1RBVEVfU1RBVFVTX0NIQU5HRUQiLCJTRVNTSU9OX1NUQVRFX1NUQVRVU19FUlJPUiIsIlVQREFURV9VU0VSX0lORk8iLCJpZFRva2VuIiwic2Vzc2lvblN0YXRlIiwiZXhwaXJlc0luIiwicmVmcmVzaFRva2VuIiwiZGlzcGF0Y2giLCJzdG9yZUF1dGhJbmZvIiwicGF5bG9hZCIsImRvTG9nb3V0IiwiZ2V0U3RhdGUiLCJnZXRVc2VySW5mbyIsImV4cGFuZCIsImVycm9ySGFuZGxlciIsIkFsbG93ZWRVc2VyR3JvdXBzIiwiZ2V0QWxsb3dlZFVzZXJHcm91cHMiLCJsb2dnZWRVc2VyU3RhdGUiLCJhdXRoRXJyb3JIYW5kbGVyIiwic3RhcnRMb2FkaW5nIiwiZ2V0UmVxdWVzdCIsImNyZWF0ZUFjdGlvbiIsImJ1aWxkQVBJQmFzZVVybCIsInN0b3BMb2FkaW5nIiwiZXJyb3JfbWVzc2FnZSIsInNob3dNZXNzYWdlIiwiaW5pdExvZ091dCIsImFsbG93ZWRHcm91cHMiLCJncm91cHMiLCJncm91cCIsImlkeCIsInVwZGF0ZVVzZXJJbmZvIiwidXBkYXRlZE1lbWJlciIsInVwZGF0ZVNlc3Npb25TdGF0ZVN0YXR1cyIsIm5ld1N0YXR1cyIsInNlc3Npb25TdGF0ZVN0YXR1cyIsInJlcXVlc3QiLCJsb2NrIiwiTG9jayIsIkdFVF9UT0tFTl9TSUxFTlRMWV9MT0NLX0tFWSIsIk5PTkNFX0xFTiIsIkFDQ0VTU19UT0tFTl9TS0VXX1RJTUUiLCJBVVRIX0lORk8iLCJOT05DRSIsIlBLQ0UiLCJnZXRBdXRoVXJsIiwicHJvbXB0IiwidG9rZW5JZEhpbnQiLCJwcm92aWRlciIsIm9hdXRoMkNsaWVudElkIiwiZ2V0T0F1dGgyQ2xpZW50SWQiLCJyZWRpcmVjdFVyaSIsImdldEF1dGhDYWxsYmFjayIsImJhc2VVcmwiLCJnZXRPQXV0aDJJRFBCYXNlVXJsIiwic2NvcGVzIiwiZ2V0T0F1dGgyU2NvcGVzIiwiZW5jb2RlVVJJIiwibm9uY2UiLCJjcmVhdGVOb25jZSIsInB1dE9uTG9jYWxTdG9yYWdlIiwicGtjZSIsImNyZWF0ZVBLQ0VDb2RlcyIsImNvZGVDaGFsbGVuZ2UiLCJnZXRMb2dvdXRVcmwiLCJwb3N0TG9nT3V0VXJpIiwiZ2V0T3JpZ2luIiwibGVuIiwicG9zc2libGUiLCJjaGFyQXQiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJnZXRDdXJyZW50TG9jYXRpb24iLCJkb0xvZ2luQmFzaWNMb2dpbiIsImNvZGVWZXJpZmllciIsImJhc2U2NFVSTEVuY29kZSIsInJhbmRvbUJ5dGVzIiwic2hhMjU2IiwiQnVmZmVyIiwiZnJvbSIsImNyZWF0ZWRBdCIsIkRhdGUiLCJjb2RlUGFpciIsImdldEZyb21Mb2NhbFN0b3JhZ2UiLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIm1lc3NhZ2UiLCJjbGVhckFjY2Vzc1Rva2VuIiwicmV0cnlQcm9taXNlIiwiYWNxdWlyZUxvY2siLCJhdXRoSW5mbyIsImdldEF1dGhJbmZvIiwiYWNjZXNzVG9rZW5VcGRhdGVkQXQiLCJyZWxlYXNlTG9jayIsInRpbWVFbGFwc2VkU2VjcyIsInVzZU9BdXRoMlJlZnJlc2hUb2tlbiIsImNsZWFyQXV0aEluZm8iLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJzdGF0dXMiLCJjdXJyZW50TG9jYXRpb24iLCJzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSIsInN0YXR1c1RleHQiLCJmb3JtZXJBdXRoSW5mbyIsInJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UiLCJnZXRJZFRva2VuIiwiT0FVVEgyX0NMSUVOVF9JRCIsIk9BVVRIMl9GTE9XIiwiQm9vbGVhbiIsIk9BVVRIMl9VU0VfUkVGUkVTSF9UT0tFTiIsIklEUF9CQVNFX1VSTCIsIlNDT1BFUyIsInZlcmlmaWVyIiwiSWRUb2tlblZlcmlmaWVyIiwic3RvcmVkTm9uY2UiLCJqd3QiLCJkZWNvZGUiLCJhbGciLCJoZWFkZXIiLCJraWQiLCJhdWQiLCJpc3MiLCJleHAiLCJuYmYiLCJ0bm9uY2UiLCJwYXNzd29yZGxlc3NTdGFydCIsImNvbm5lY3Rpb24iLCJlbWFpbCIsInBob25lX251bWJlciIsInJlcSIsInJlamVjdCIsInBhc3N3b3JkbGVzc0xvZ2luIiwib3RwIiwiQ0hFQ0tfU0VTU0lPTl9JTlRFUlZBTCIsIk9QU2Vzc2lvbkNoZWNrZXIiLCJvcEZyYW1lX3NyYyIsInJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmMiLCJyZWNlaXZlTWVzc2FnZSIsInJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkIiwic2V0VGltZXIiLCJjaGVja1Nlc3Npb24iLCJvblNldHVwQ2hlY2tTZXNzaW9uUlAiLCJycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQiLCJvcEZyYW1lIiwicnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lIiwic2V0T1BGcmFtZVJlZiIsImVsZW1lbnQiLCJzZXRDaGVja1Nlc3Npb25TdGF0ZUZyYW1lUmVmIiwiaXNMb2dnZWRVc2VyIiwiZnJhbWUiLCJjb250ZW50RG9jdW1lbnQiLCJyZXN1bHRVcmwiLCJVUkwiLCJ0b0xvY2FsZVN0cmluZyIsImNsaWVudElkIiwidGFyZ2V0T3JpZ2luIiwiaWRwQmFzZVVybCIsImNvbnRlbnRXaW5kb3ciLCJzZXNzaW9uQ2hlY2tFbmRwb2ludCIsIlN0cmluZyIsImJvcmRlciIsIm1hcFN0YXRlVG9Qcm9wcyIsImNvbm5lY3QiLCJTaW1wbGVMaW5rTGlzdCIsImdldE9wdGlvbnMiLCJoYW5kbGVMaW5rIiwiZmlsdGVyT3B0aW9uIiwiZ2V0TmV3T3B0aW9uRGF0YSIsImlzVmFsaWROZXdPcHRpb24iLCJkZWZhdWx0T3B0aW9ucyIsImFjdGlvbnMiLCJvcHRpb25MYWJlbCIsInNlbGVjdFZhbHVlIiwic2VsZWN0T3B0aW9ucyIsImxhYmVsS2V5Iiwib3B0aW9uRm91bmQiLCJvbkNyZWF0ZVRhZyIsImNhbmRpZGF0ZSIsImFsbG93RHVwbGljYXRlcyIsImNvbHVtbnMiLCJkaXNhYmxlZEFkZCIsInZhbHVlS2V5IiwidGFibGVPcHRpb25zIiwiZGVsZXRlIiwiZWRpdCIsImN1c3RvbSIsIml0ZW1BIiwic29ydENvbCIsIml0ZW1CIiwiU3VtbWl0RHJvcGRvd24iLCJzdW1taXRWYWx1ZSIsInN1bW1pdHMiLCJhY3Rpb25DbGFzcyIsInN1bW1pdE9wdGlvbnMiLCJiaWdDbGFzcyIsIkVkaXRhYmxlQWN0aW9uc1RhYmxlQ2VsbCIsImlzX2VkaXRpbmciLCJvbkRlbGV0ZSIsIm9uU2F2ZSIsInNhdmUiLCJvbkVkaXQiLCJvbkNhbmNlbCIsImNhbmNlbCIsImNvbFdpZHRoIiwiY3JlYXRlUm93Iiwicm93Iiwic2hvdWxkVXNlVGV4dEFyZWEiLCJhY3Rpb25fYnV0dG9ucyIsImNlbGxzIiwiY29sIiwiY29sdW1uS2V5IiwiaXNfZWRpdCIsImNyZWF0ZU5ld1JvdyIsIm5ld19yb3ciLCJhZGROZXciLCJjZWxsX3ZhbHVlIiwiRWRpdGFibGVUYWJsZSIsInJvd3MiLCJlZGl0Um93Iiwic2F2ZVJvdyIsImRlbGV0ZUNsaWNrIiwib25DaGFuZ2VDZWxsIiwiZWRpdFJvd0NhbmNlbCIsInNhdmVOZXdSb3ciLCJoYW5kbGVOZXdDaGFuZ2UiLCJvbkNoYW5nZU5ld0NlbGwiLCJlZGl0aW5nX3JvdyIsIm5vQWxlcnQiLCJTd2FsIiwiZmlyZSIsInRleHQiLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY29uZmlybUJ1dHRvblRleHQiLCJyZXN1bHQiLCJyb3dJZHgiLCJmaW5kSW5kZXgiLCJ0YWJsZUNsYXNzIiwidGV4dEFyZWEiLCJ3YXJuIiwiRWRpdGFibGVUYWJsZUNlbGwiLCJFZGl0YWJsZVRhYmxlSGVhZGluZyIsIkVkaXRhYmxlVGFibGVSb3ciLCJldmVuIiwiU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwiLCJoYW5kbGVBY3Rpb24iLCJzaG91bGREaXNwbGF5QWN0aW9uIiwidG9vbHRpcCIsInNvcnRGdW5jIiwic29ydGFibGUiLCJzb3J0RGlyIiwiZ2V0U29ydERpciIsImNvbHVtbkluZGV4IiwiU2VsZWN0YWJsZVRhYmxlIiwic2VsZWN0ZWRJZHMiLCJvblNlbGVjdGVkQWxsIiwic2VsZWN0ZWRBbGwiLCJvblNvcnQiLCJhY3Rpb25zSGVhZGVyIiwiU2VsZWN0YWJsZVRhYmxlQ2VsbCIsImlzVmFsaWRFbGVtZW50IiwiU2VsZWN0YWJsZVRhYmxlSGVhZGluZyIsImhhbmRsZVNvcnQiLCJnZXRTb3J0Q2xhc3MiLCJTZWxlY3RhYmxlVGFibGVSb3ciLCJoYW5kbGVFZGl0IiwiaGFuZGxlU2VsZWN0Iiwib25TZWxlY3RlZCIsImNhbkVkaXQiLCJyb3dDbGFzcyIsIlNvcnRhYmxlQWN0aW9uc1RhYmxlQ2VsbCIsIlNvcnRhYmxlVGFibGUiLCJtb3ZlUm93IiwiZHJvcFJvdyIsImRyYWdJbmRleCIsImhvdmVySW5kZXgiLCJkcmFnUm93IiwidXBkYXRlIiwiJHNwbGljZSIsImluZGV4Iiwib3JkZXJGaWVsZCIsIm5ld09yZGVyIiwiJHNldCIsImRyb3BDYWxsYmFjayIsImFycmF5T2YiLCJEcmFnRHJvcENvbnRleHQiLCJIVE1MNUJhY2tlbmQiLCJTb3J0YWJsZVRhYmxlQ2VsbCIsIlNvcnRhYmxlVGFibGVIZWFkaW5nIiwicGFkZGluZyIsIm1hcmdpbkJvdHRvbSIsInJvd1NvdXJjZSIsImJlZ2luRHJhZyIsImVuZERyYWciLCJtb25pdG9yIiwiZGlkRHJvcCIsImRyb3BDYXJkIiwicm93VGFyZ2V0IiwiaG92ZXIiLCJjb21wb25lbnQiLCJnZXRJdGVtIiwiaG92ZXJCb3VuZGluZ1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJob3Zlck1pZGRsZVkiLCJjbGllbnRPZmZzZXQiLCJnZXRDbGllbnRPZmZzZXQiLCJob3ZlckNsaWVudFkiLCJ5IiwibW92ZUNhcmQiLCJTb3J0YWJsZVRhYmxlUm93IiwiaXNEcmFnZ2luZyIsImNvbm5lY3REcmFnU291cmNlIiwiY29ubmVjdERyb3BUYXJnZXQiLCJEcmFnU291cmNlIiwiZHJhZ1NvdXJjZSIsIkRyb3BUYXJnZXQiLCJkcm9wVGFyZ2V0IiwiQWN0aW9uc1RhYmxlQ2VsbCIsIlRhYmxlIiwiVGFibGVDZWxsIiwiVGFibGVIZWFkaW5nIiwiVGFibGVSb3ciLCJ1c2VGaXRUZXh0IiwibWluU2l6ZSIsIk1JTl9GT05UX1NJWkUiLCJNQVhfRk9OVF9TSVpFIiwiUkVTT0xVVElPTiIsInJlZiIsImZvbnRTaXplUHJldiIsImZvbnRTaXplTWF4IiwiZm9udFNpemVNaW4iLCJpc0RvbmUiLCJhYnMiLCJpc092ZXJmbG93Iiwic2Nyb2xsSGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0Iiwic2Nyb2xsV2lkdGgiLCJvZmZzZXRXaWR0aCIsImlzQXNjIiwiZm9udFNpemVOZXciLCJkZWx0YSIsIm5ld01heCIsIm5ld01pbiIsIm1pbiIsIm1heCIsImxpbmVIZWlnaHQiLCJZb3V0dWJlVmlkZW9Db21wb25lbnQiLCJ2aWRlb1NyY1VSTCIsInZpZGVvVGl0bGUiLCJMaXZlVmlkZW9QbGF5ZXIiLCJwbGF5ZXIiLCJ2aWRlb2pzIiwidmlkZW9Ob2RlIiwiZGlzcG9zZSIsIm5vZGUiLCJWaWRlb1N0cmVhbSIsImxheW91dCIsImNoZWNrTGl2ZVZpZGVvIiwiaXNMaXZlVmlkZW8iLCJtYXRjaCIsInZpZGVvSnNPcHRpb25zIiwiYXV0b3BsYXkiLCJjb250cm9scyIsImZsdWlkIiwic291cmNlcyIsInNyYyIsIkdFTkVSSUNfRVJST1IiLCJSRVNFVF9MT0FESU5HIiwiU1RBUlRfTE9BRElORyIsIlNUT1BfTE9BRElORyIsIlZBTElEQVRFIiwiQ0xFQVJfTUVTU0FHRSIsIlNIT1dfTUVTU0FHRSIsInJlc2V0TG9hZGluZyIsInhocnMiLCJzY2hlZHVsZSIsImlzT2JqZWN0RW1wdHkiLCJvYmoiLCJtc2ciLCJjbGVhcmluZ19zZXNzaW9uX3N0YXRlIiwiaXNDbGVhcmluZ1Nlc3Npb25TdGF0ZSIsImVudHJpZXMiLCJyZXF1ZXN0QWN0aW9uQ3JlYXRvciIsInJlY2VpdmVBY3Rpb25DcmVhdG9yIiwiZW5kcG9pbnQiLCJkZWZhdWx0RXJyb3JIYW5kbGVyIiwicmVxdWVzdEFjdGlvblBheWxvYWQiLCJnZXQiLCJkZWFkbGluZSIsInJlc3BvbnNlSGFuZGxlciIsInB1dFJlcXVlc3QiLCJkZWxldGVSZXF1ZXN0IiwicG9zdFJlcXVlc3QiLCJzZXQiLCJwb3N0RmlsZSIsImZpbGVNZXRhZGF0YSIsImF0dGFjaCIsInB1dEZpbGUiLCJvayIsImZldGNoRXJyb3JIYW5kbGVyIiwiZmV0Y2hSZXNwb25zZUhhbmRsZXIiLCJzZXR0aW5ncyIsInNob3dTdWNjZXNzTWVzc2FnZSIsImRvd25sb2FkRmlsZUJ5Q29udGVudCIsImNvbnRlbnQiLCJtaW1lIiwibGluayIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInRleHRDb250ZW50IiwiZG93bmxvYWQiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwicmVtb3ZlQ2hpbGQiLCJnZXRDU1YiLCJjc3YiLCJnZXRSYXdDU1YiLCJlc2NhcGVGaWx0ZXJWYWx1ZSIsImZpbmRFbGVtZW50UG9zIiwiY3VydG9wIiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0VG9wIiwiZXBvY2hUb01vbWVudCIsImF0aW1lIiwiZXBvY2hUb01vbWVudFRpbWVab25lIiwidGltZV96b25lIiwiZm9ybWF0RXBvY2giLCJvYmplY3RUb1F1ZXJ5U3RyaW5nIiwic3RyIiwiZ2V0QmFja1VSTCIsInBhdGhuYW1lIiwiQUxMT1dFRF9VU0VSX0dST1VQUyIsInJlbGF0aXZlVXJsIiwiQVBJX0JBU0VfVVJMIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsInJlbW92ZUl0IiwicmVtb3ZlSXRlbSIsImxhbmd1YWdlcyIsInVzZXJMYW5ndWFnZSIsImZpcnN0RXJyb3IiLCJmaXJzdE5vZGUiLCJnZXRFbGVtZW50QnlJZCIsInNjcm9sbFRvIiwib2JqZWN0MSIsIm9iamVjdDIiLCJrZXlzMSIsImtleXMyIiwiYTEiLCJhMiIsImV2ZXJ5IiwibyIsImJ1ZmZlciIsImNyZWF0ZUhhc2giLCJkaWdlc3QiLCJjYiIsIm1heE51bWJlck9mUmV0cmllcyIsIlJFQ0VJVkVfQ09VTlRSSUVTIiwiY2FsbERlbGF5IiwiXyIsImRlYm91bmNlIiwiZmlsdGVycyIsImFwaVVybCIsInF1ZXJ5VHJhY2tzIiwicXVlcnlUcmFja0dyb3VwcyIsImFkZFF1ZXJ5IiwiZ2VvY29kZXIiLCJnZW9Db2RlQWRkcmVzcyIsImFkZHJlc3MiLCJHZW9jb2RlciIsImdlb2NvZGUiLCJyZXN1bHRzIiwiR2VvY29kZXJTdGF0dXMiLCJPSyIsImdlb0NvZGVMYXRMbmciLCJsYXRsbmciLCJwYXJzZUZsb2F0IiwiQ2hlY2tCb3hRdWVzdGlvblR5cGUiLCJDb21ib0JveFF1ZXN0aW9uVHlwZSIsIkNoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSIsIlJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZSIsIkFsbG93ZWRNdWx0aXBsZVZhbHVlUXVlc3Rpb25UeXBlIiwiQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kIiwiQW5zd2VyVmFsdWVzT3BlcmF0b3JfT3IiLCJWaXNpYmlsaXR5Q29uZGl0aW9uX0VxdWFsIiwiVmlzaWJpbGl0eUNvbmRpdGlvbl9Ob3RFcXVhbCIsIlZpc2liaWxpdHlfVmlzaWJsZSIsIk1haW5RdWVzdGlvbkNsYXNzVHlwZSIsInF1ZXN0aW9uQnlOYW1lIiwicXVlc3Rpb25CeUlkIiwicnVsZXMiLCJfcGFyc2VRdWVzdGlvbiIsImF2IiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwiaW5pdGlhbENvbmRpdGlvbiIsImFuc3dlcl92YWx1ZXNfb3BlcmF0b3IiLCJwYXJlbnRRdWVzdGlvbkFuc3dlciIsIl9nZXRBbnN3ZXJGb3IiLCJwYXJlbnRfcXVlc3Rpb25faWQiLCJhbnN3ZXJWYWx1ZSIsIl9hbnN3ZXJDb250YWlucyIsImNsYXNzIiwiX2hhc1ZhbHVlIiwiX2FsbG93c1ZhbHVlcyIsIl9hbGxvd3NWYWx1ZSIsInJ1bGVJZCIsInBhcmVudF9ydWxlcyIsIl9pc1N1YlF1ZXN0aW9uVmlzaWJsZSIsIl9pc0Fuc3dlcmVkIiwiX2NoZWNrUXVlc3Rpb24iLCJxdWVzdGlvbiIsInVzZXJBbnN3ZXIiLCJvcmlnaW5hbEFuc3dlcnMiLCJhbnNWYWwiLCJyZXMxIiwiX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyIiwiX3BhcnNlUXVlc3Rpb25zIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztRQ1ZBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7OztBQ2xGQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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bUM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7O0FDQUEsdUQ7Ozs7Ozs7Ozs7O0FDQUEsNkM7Ozs7Ozs7Ozs7O0FDQUEsZ0Q7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEsNEM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7O0FDQUEsa0M7Ozs7Ozs7Ozs7O0FDQUEsMkM7Ozs7Ozs7Ozs7O0FDQUEsc0M7Ozs7Ozs7Ozs7O0FDQUEsb0Q7Ozs7Ozs7Ozs7O0FDQUEsc0M7Ozs7Ozs7Ozs7O0FDQUEsMkM7Ozs7Ozs7Ozs7O0FDQUEsNkM7Ozs7Ozs7Ozs7O0FDQUEsOEM7Ozs7Ozs7Ozs7O0FDQUEsb0Y7Ozs7Ozs7Ozs7O0FDQUEsd0M7Ozs7Ozs7Ozs7O0FDQUEsc0M7Ozs7Ozs7Ozs7O0FDQUEseUM7Ozs7Ozs7Ozs7O0FDQUEsbUQ7Ozs7Ozs7Ozs7O0FDQUEsNEQ7Ozs7Ozs7Ozs7O0FDQUEsdUQ7Ozs7Ozs7Ozs7O0FDQUEsd0Q7Ozs7Ozs7Ozs7O0FDQUEsMEM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7O0FDQUEsd0M7Ozs7Ozs7Ozs7O0FDQUEsa0M7Ozs7Ozs7Ozs7O0FDQUEscUM7Ozs7Ozs7Ozs7O0FDQUEsdUQiLCJmaWxlIjoiY29tcG9uZW50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvblwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb25cIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9jb21wb25lbnRzLmpzXCIpO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QnO1xuXG5pbXBvcnQgeyBBamF4TG9hZGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL2FqYXhsb2FkZXInO1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi9jb21wb25lbnRzL3Jhdy1odG1sL2luZGV4JztcbmltcG9ydCBGcmVlVGV4dFNlYXJjaCBmcm9tICcuL2NvbXBvbmVudHMvZnJlZS10ZXh0LXNlYXJjaC9pbmRleCc7XG5pbXBvcnQgR01hcCBmcm9tICcuL2NvbXBvbmVudHMvZ29vZ2xlLW1hcC9pbmRleCc7XG5pbXBvcnQgRGF0ZVRpbWVQaWNrZXIgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9kYXRldGltZXBpY2tlci9pbmRleCdcbmltcG9ydCBHcm91cGVkRHJvcGRvd24gZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9ncm91cGVkLWRyb3Bkb3duL2luZGV4J1xuaW1wb3J0IFVwbG9hZElucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L2luZGV4J1xuaW1wb3J0IFVwbG9hZElucHV0VjIgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaW5kZXgnXG5pbXBvcnQgQ29tcGFueUlucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvY29tcGFueS1pbnB1dCdcbmltcG9ydCBTcG9uc29ySW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9zcG9uc29yLWlucHV0J1xuaW1wb3J0IE9yZ2FuaXphdGlvbklucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvb3JnYW5pemF0aW9uLWlucHV0J1xuaW1wb3J0IENvdW50cnlEcm9wZG93biBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2NvdW50cnktZHJvcGRvd24nXG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9kcm9wZG93bidcbmltcG9ydCBUZXh0RWRpdG9yIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvZWRpdG9yLWlucHV0J1xuaW1wb3J0IFRleHRBcmVhIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdGV4dGFyZWEtaW5wdXQnXG5pbXBvcnQgRXZlbnRJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2V2ZW50LWlucHV0J1xuaW1wb3J0IEdyb3VwSW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9ncm91cC1pbnB1dCdcbmltcG9ydCBNZW1iZXJJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL21lbWJlci1pbnB1dCdcbmltcG9ydCBTdW1taXRJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3N1bW1pdC1pbnB1dCdcbmltcG9ydCBTcGVha2VySW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9zcGVha2VyLWlucHV0J1xuaW1wb3J0IFRhZ0lucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdGFnLWlucHV0J1xuaW1wb3J0IElucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdGV4dC1pbnB1dCdcbmltcG9ydCBQYW5lbCBmcm9tICcuL2NvbXBvbmVudHMvc2VjdGlvbnMvcGFuZWwnXG5pbXBvcnQgU2ltcGxlTGlua0xpc3QgZnJvbSAnLi9jb21wb25lbnRzL3NpbXBsZS1saW5rLWxpc3QvaW5kZXgnXG5pbXBvcnQgU3VtbWl0RHJvcGRvd24gZnJvbSAnLi9jb21wb25lbnRzL3N1bW1pdC1kcm9wZG93bi9pbmRleCdcbmltcG9ydCBUYWJsZSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvVGFibGUnXG5pbXBvcnQgU29ydGFibGVUYWJsZSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZSdcbmltcG9ydCBFZGl0YWJsZVRhYmxlIGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlJ1xuaW1wb3J0IFNlbGVjdGFibGVUYWJsZSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGUnXG5pbXBvcnQgU2ltcGxlRm9ybSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybXMvc2ltcGxlLWZvcm0nXG5pbXBvcnQgUnN2cEZvcm0gZnJvbSAnLi9jb21wb25lbnRzL2Zvcm1zL3JzdnAtZm9ybSc7XG5pbXBvcnQgUmFkaW9MaXN0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvcmFkaW8tbGlzdCdcbmltcG9ydCBDaGVja2JveExpc3QgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9jaGVja2JveC1saXN0J1xuaW1wb3J0IEFjdGlvbkRyb3Bkb3duIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvYWN0aW9uLWRyb3Bkb3duJ1xuaW1wb3J0IENvdW50cnlJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2NvdW50cnktaW5wdXQnXG5pbXBvcnQgTGFuZ3VhZ2VJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2xhbmd1YWdlLWlucHV0J1xuaW1wb3J0IEZyZWVNdWx0aVRleHRJbnB1dCBmcm9tIFwiLi9jb21wb25lbnRzL2lucHV0cy9mcmVlLW11bHRpLXRleHQtaW5wdXRcIjtcbmltcG9ydCBPUFNlc3Npb25DaGVja2VyIGZyb20gXCIuL2NvbXBvbmVudHMvc2VjdXJpdHkvc2Vzc2lvbi1jaGVja2VyL29wLXNlc3Npb24tY2hlY2tlclwiO1xuaW1wb3J0IEFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGUgZnJvbSAgXCIuL2NvbXBvbmVudHMvc2VjdXJpdHkvYWJzdHJhY3QtYXV0aC1jYWxsYmFjay1yb3V0ZVwiO1xuaW1wb3J0IEV4Y2x1c2l2ZSBmcm9tIFwiLi9jb21wb25lbnRzL2V4Y2x1c2l2ZS13cmFwcGVyXCI7XG5pbXBvcnQgRnJhZ21lbnRQYXJzZXIgZnJvbSBcIi4vY29tcG9uZW50cy9mcmFnbWVuLXBhcnNlclwiO1xuaW1wb3J0IENsb2NrIGZyb20gXCIuL2NvbXBvbmVudHMvY2xvY2tcIjtcbmltcG9ydCBDaXJjbGVCdXR0b24gZnJvbSBcIi4vY29tcG9uZW50cy9jaXJjbGUtYnV0dG9uXCI7XG5pbXBvcnQgVmlkZW9TdHJlYW0gZnJvbSBcIi4vY29tcG9uZW50cy92aWRlby1zdHJlYW1cIjtcbmltcG9ydCBBdHRlbmRhbmNlVHJhY2tlciBmcm9tIFwiLi9jb21wb25lbnRzL2F0dGVuZGFuY2UtdHJhY2tlclwiO1xuaW1wb3J0IHtnZXRDdXJyZW50VXNlckxhbmd1YWdlfSBmcm9tICcuL3V0aWxzL21ldGhvZHMnO1xuaW1wb3J0IHVzZUZpdFRleHQgZnJvbSAnLi9jb21wb25lbnRzL3VzZS1maXQtdGV4dCc7XG5pbXBvcnQgQWNjZXNzTGV2ZWxzSW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9hY2Nlc3MtbGV2ZWxzLWlucHV0JztcbmltcG9ydCBSZWdpc3RyYXRpb25Db21wYW55SW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9yZWdpc3RyYXRpb24tY29tcGFueS1pbnB1dCc7XG5pbXBvcnQgVGlja2V0VHlwZXNJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3RpY2tldC10eXBlcy1pbnB1dCc7XG5pbXBvcnQgRXh0cmFRdWVzdGlvbnNGb3JtIGZyb20gJy4vY29tcG9uZW50cy9leHRyYS1xdWVzdGlvbnMnO1xuXG5sZXQgbGFuZ3VhZ2UgPSBnZXRDdXJyZW50VXNlckxhbmd1YWdlKCk7XG5cbi8vIGxhbmd1YWdlIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlIGVzLUVTIG9yIGVzX0VTXG4vLyBIb3dldmVyIHdlIHN0b3JlIG91ciBmaWxlcyB3aXRoIGZvcm1hdCBlcy5qc29uIG9yIGVuLmpzb25cbi8vIHRoZXJlZm9yZSByZXRyaWV2ZSBvbmx5IHRoZSBmaXJzdCAyIGRpZ2l0c1xuXG5pZiAobGFuZ3VhZ2UubGVuZ3RoID4gMikge1xuICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3BsaXQoXCItXCIpWzBdO1xuICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3BsaXQoXCJfXCIpWzBdO1xufVxuXG50cnkge1xuICAgIFQuc2V0VGV4dHMocmVxdWlyZShgLi9pMThuLyR7bGFuZ3VhZ2V9Lmpzb25gKSk7XG59IGNhdGNoIChlKSB7XG4gICAgVC5zZXRUZXh0cyhyZXF1aXJlKGAuL2kxOG4vZW4uanNvbmApKTtcbn1cblxuZXhwb3J0IHtcbiAgICBBamF4TG9hZGVyLFxuICAgIFJhd0hUTUwsXG4gICAgRnJlZVRleHRTZWFyY2gsXG4gICAgR01hcCxcbiAgICBEYXRlVGltZVBpY2tlcixcbiAgICBHcm91cGVkRHJvcGRvd24sXG4gICAgVXBsb2FkSW5wdXQsXG4gICAgVXBsb2FkSW5wdXRWMixcbiAgICBDb21wYW55SW5wdXQsXG4gICAgU3BvbnNvcklucHV0LFxuICAgIENvdW50cnlJbnB1dCxcbiAgICBMYW5ndWFnZUlucHV0LFxuICAgIE9yZ2FuaXphdGlvbklucHV0LFxuICAgIENvdW50cnlEcm9wZG93bixcbiAgICBEcm9wZG93bixcbiAgICBFdmVudElucHV0LFxuICAgIEdyb3VwSW5wdXQsXG4gICAgU3VtbWl0SW5wdXQsXG4gICAgTWVtYmVySW5wdXQsXG4gICAgU3BlYWtlcklucHV0LFxuICAgIFRhZ0lucHV0LFxuICAgIFRleHRFZGl0b3IsXG4gICAgVGV4dEFyZWEsXG4gICAgSW5wdXQsXG4gICAgUGFuZWwsXG4gICAgU2ltcGxlTGlua0xpc3QsXG4gICAgU3VtbWl0RHJvcGRvd24sXG4gICAgVGFibGUsXG4gICAgU29ydGFibGVUYWJsZSxcbiAgICBFZGl0YWJsZVRhYmxlLFxuICAgIFNpbXBsZUZvcm0sXG4gICAgUnN2cEZvcm0sXG4gICAgUmFkaW9MaXN0LFxuICAgIENoZWNrYm94TGlzdCxcbiAgICBBY3Rpb25Ecm9wZG93bixcbiAgICBGcmVlTXVsdGlUZXh0SW5wdXQsXG4gICAgT1BTZXNzaW9uQ2hlY2tlcixcbiAgICBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlLFxuICAgIEV4Y2x1c2l2ZSxcbiAgICBGcmFnbWVudFBhcnNlcixcbiAgICBDbG9jayxcbiAgICBDaXJjbGVCdXR0b24sXG4gICAgVmlkZW9TdHJlYW0sXG4gICAgQXR0ZW5kYW5jZVRyYWNrZXIsXG4gICAgU2VsZWN0YWJsZVRhYmxlLFxuICAgIHVzZUZpdFRleHQsXG4gICAgQWNjZXNzTGV2ZWxzSW5wdXQsXG4gICAgUmVnaXN0cmF0aW9uQ29tcGFueUlucHV0LFxuICAgIFRpY2tldFR5cGVzSW5wdXQsXG4gICAgRXh0cmFRdWVzdGlvbnNGb3JtLFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGNvbnN0IEFqYXhMb2FkZXIgPSAgKHtcbiAgICBzaG93LFxuICAgIHJlbGF0aXZlLFxuICAgIGNvbG9yLFxuICAgIHNpemUsXG4gICAgY2hpbGRyZW4sXG59KSA9PiB7XG5cbiAgICBsZXQgc3R5bGVzID0ge1xuICAgICAgICBkaXNwbGF5IDogc2hvdyA/ICdibG9jayc6ICdub25lJyxcbiAgICAgICAgd2lkdGg6JzEwMCUnLFxuICAgICAgICBoZWlnaHQ6JzEwMCUnLFxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmUgPyAnYWJzb2x1dGUnIDogJ2ZpeGVkJyxcbiAgICAgICAgekluZGV4OjEwMDAwMDAwLFxuICAgICAgICBtYXJnaW46J2F1dG8nLFxuICAgICAgICBjdXJzb3I6ICd3YWl0JyxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjIpJyxcbiAgICAgICAgdG9wOiAwLFxuICAgICAgICBsZWZ0OiAwXG4gICAgfTtcblxuICAgIGxldCBzdHlsZVNwaW5uZXIgPSB7XG4gICAgICAgIGZvbnRTaXplOiBzaXplICsgJ3B4JyxcbiAgICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgfTtcblxuICAgIGxldCBzdHlsZVNwaW5uZXJDb250YWluZXIgPSB7XG4gICAgICAgIHdpZHRoOiAnMjUwcHgnLFxuICAgICAgICBoZWlnaHQ6Jzc1cHgnLFxuICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmUgPyAncmVsYXRpdmUnIDogJ2ZpeGVkJyxcbiAgICAgICAgdG9wOiByZWxhdGl2ZSA/ICc1MCUnIDogJzAnLFxuICAgICAgICBsZWZ0OiByZWxhdGl2ZSA/ICcnIDogJzAnLFxuICAgICAgICByaWdodDonMCcsXG4gICAgICAgIGJvdHRvbTonMCcsXG4gICAgICAgIG1hcmdpbjonYXV0bycsXG4gICAgICAgIHpJbmRleDoxMCxcbiAgICAgICAgY29sb3I6JyNmZmZmZmYnXG4gICAgfTtcblxuICAgIGxldCBzdHlsZUJhY2tncm91bmQgPSB7XG4gICAgICAgIGJhY2tncm91bmQ6IGNvbG9yLFxuICAgICAgICBvcGFjaXR5OicwLjgnLFxuICAgICAgICB3aWR0aDonMTAwJScsXG4gICAgICAgIGhlaWdodDonMTAwJScsXG4gICAgICAgIHBvc2l0aW9uOidhYnNvbHV0ZScsXG4gICAgICAgIHRvcDowXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWpheC1sb2FkZXItY29udGFpbmVyXCIgc3R5bGU9e3N0eWxlc30+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtzdHlsZVNwaW5uZXJDb250YWluZXJ9PlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXNwaW5uZXIgZmEtc3BpblwiIHN0eWxlPXtzdHlsZVNwaW5uZXJ9PjwvaT5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17c3R5bGVCYWNrZ3JvdW5kfSBjbGFzc05hbWU9XCJsb2FkZXItYmFja2dyb3VuZFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbik7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBodHRwIGZyb20gJ3N1cGVyYWdlbnQnO1xuaW1wb3J0IHtnZXRBY2Nlc3NUb2tlbn0gZnJvbSAnLi9zZWN1cml0eS9tZXRob2RzJztcblxuLy8gU0NPUEVTIE5FRURFRFxuLy8gJXMvbWUvc3VtbWl0cy9ldmVudHMvbGVhdmVcbi8vICVzL21lL3N1bW1pdHMvZXZlbnRzL2VudGVyXG5cbmNsYXNzIEF0dGVuZGFuY2VUcmFja2VyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBjb25zdCB7dHJhY2tFbnRlciwgb25CZWZvcmVVbmxvYWR9ID0gdGhpcztcblxuICAgICAgICAvLyB0cmFjayBlbnRlclxuICAgICAgICB0cmFja0VudGVyKCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBvbkJlZm9yZVVubG9hZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgY29uc3Qge3RyYWNrTGVhdmUsIG9uQmVmb3JlVW5sb2FkfSA9IHRoaXM7XG5cbiAgICAgICAgLy8gdHJhY2sgbGVhdmVcbiAgICAgICAgdHJhY2tMZWF2ZSgpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgb25CZWZvcmVVbmxvYWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJhY2tFbnRlciA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qge2FwaUJhc2VVcmwsIHN1bW1pdElkLCBzb3VyY2VJZCwgc291cmNlTmFtZX0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgaHR0cC5wdXQoYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vbWV0cmljcy9lbnRlcmApXG4gICAgICAgICAgICAgICAgLnNlbmQoe2FjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sIHR5cGU6IHNvdXJjZU5hbWUsIHNvdXJjZV9pZDogc291cmNlSWQsIGxvY2F0aW9uOiBsb2NhdGlvbn0pXG4gICAgICAgICAgICAgICAgLmVuZCgoKSA9PiBjb25zb2xlLmxvZygnRU5URVIgUEFHRScpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0cmFja0xlYXZlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB7YXBpQmFzZVVybCwgc3VtbWl0SWQsIHNvdXJjZUlkLCBzb3VyY2VOYW1lfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5nZXRMb2NhdGlvbigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuXG4gICAgICAgICAgICBodHRwLnBvc3QoYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vbWV0cmljcy9sZWF2ZWApXG4gICAgICAgICAgICAgICAgLnNlbmQoe2FjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sIHR5cGU6IHNvdXJjZU5hbWUsIHNvdXJjZV9pZDogc291cmNlSWQsIGxvY2F0aW9uOiBsb2NhdGlvbn0pXG4gICAgICAgICAgICAgICAgLmVuZCgoKSA9PiBjb25zb2xlLmxvZygnTEVGVCBQQUdFJykpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIG9uQmVmb3JlVW5sb2FkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB7YXBpQmFzZVVybCwgc3VtbWl0SWQsIHNvdXJjZUlkLCBzb3VyY2VOYW1lfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5nZXRMb2NhdGlvbigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgbmF2aWdhdG9yLnNlbmRCZWFjb24oXG4gICAgICAgICAgICAgICAgYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vbWV0cmljcy9sZWF2ZT9hY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn0mdHlwZT0ke3NvdXJjZU5hbWV9JnNvdXJjZV9pZD0ke3NvdXJjZUlkfSZsb2NhdGlvbj0ke2xvY2F0aW9ufWAsIHt9KTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZ2V0TG9jYXRpb24gPSAoKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbkF0dGVuZGFuY2VUcmFja2VyLnByb3BUeXBlcyA9IHtcbiAgICBzb3VyY2VOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNvdXJjZUlkOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHN1bW1pdElkOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgYXBpQmFzZVVybDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG59O1xuXG5BdHRlbmRhbmNlVHJhY2tlci5kZWZhdWx0UHJvcHMgPSB7XG4gICAgc291cmNlSWQ6IDAsXG4gICAgc291cmNlTmFtZTogJ0dFTkVSQUwnXG59O1xuXG5leHBvcnQgZGVmYXVsdCBBdHRlbmRhbmNlVHJhY2tlcjtcblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2luZGV4Lm1vZHVsZS5zY3NzJztcblxuY29uc3QgaXNMaXZlID0gKGV2ZW50LCBub3dVdGMpID0+IHtcbiAgICBjb25zdCBoYXNFbmRlZCA9IG5vd1V0YyA+IGV2ZW50LmVuZF9kYXRlO1xuICAgIGNvbnN0IGhhc1N0YXJ0ZWQgPSAoZXZlbnQuc3RhcnRfZGF0ZSAtIG5vd1V0YykgPCAxO1xuICAgIHJldHVybiBoYXNTdGFydGVkICYmICFoYXNFbmRlZDtcbn07XG5cbmNvbnN0IENpcmNsZUJ1dHRvbiA9ICh7ZXZlbnQsIGlzU2NoZWR1bGVkLCBub3dVdGMsIGFkZFRvU2NoZWR1bGUsIHJlbW92ZUZyb21TY2hlZHVsZSwgZW50ZXJDbGljaywgYWx3YXlzU2hvd0VudGVyfSkgPT4ge1xuXG4gICAgY29uc3QgaXNMaXZlTm93ID0gaXNMaXZlKGV2ZW50LCBub3dVdGMpO1xuICAgIGxldCBidXR0b25DbGFzcyA9IG51bGw7XG4gICAgbGV0IGljb25DbGFzcyA9IG51bGw7XG4gICAgbGV0IG9uQ2xpY2sgPSBudWxsO1xuICAgIGNvbnN0IGhhbmRsZUNsaWNrID0gKGV2LCBhY3Rpb24pID0+IHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGFjdGlvbihldmVudCk7XG4gICAgfTtcblxuXG4gICAgaWYgKGlzTGl2ZU5vdyB8fCBhbHdheXNTaG93RW50ZXIpIHtcbiAgICAgICAgYnV0dG9uQ2xhc3MgPSBgJHtzdHlsZXMuZW50ZXJ9IGVudGVyYDtcbiAgICAgICAgaWNvbkNsYXNzID0gJ2ZhLXNpZ24taW4nO1xuICAgICAgICBvbkNsaWNrID0gZXYgPT4gaGFuZGxlQ2xpY2soZXYsIGVudGVyQ2xpY2spO1xuICAgIH0gZWxzZSBpZiAocmVtb3ZlRnJvbVNjaGVkdWxlICYmIGFkZFRvU2NoZWR1bGUgJiYgaXNTY2hlZHVsZWQpIHtcbiAgICAgICAgYnV0dG9uQ2xhc3MgPSBgJHtzdHlsZXMuYWRkZWR9IGFkZGVkYDtcbiAgICAgICAgaWNvbkNsYXNzID0gJ2ZhLWNoZWNrJztcbiAgICAgICAgb25DbGljayA9IGV2ID0+IGhhbmRsZUNsaWNrKGV2LCByZW1vdmVGcm9tU2NoZWR1bGUpO1xuICAgIH0gZWxzZSBpZiAocmVtb3ZlRnJvbVNjaGVkdWxlICYmIGFkZFRvU2NoZWR1bGUpIHtcbiAgICAgICAgYnV0dG9uQ2xhc3MgPSBgJHtzdHlsZXMuYWRkfSBhZGRgO1xuICAgICAgICBpY29uQ2xhc3MgPSAnZmEtcGx1cyc7XG4gICAgICAgIG9uQ2xpY2sgPSBldiA9PiBoYW5kbGVDbGljayhldiwgYWRkVG9TY2hlZHVsZSk7XG4gICAgfVxuXG4gICAgaWYgKCFvbkNsaWNrKSByZXR1cm4gbnVsbDtcblxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9e2Ake3N0eWxlcy5jaXJjbGVCdXR0b259ICR7YnV0dG9uQ2xhc3N9YH0gb25DbGljaz17b25DbGlja30+XG4gICAgICAgICAgICA8aSBjbGFzc05hbWU9e2BmYSAke2ljb25DbGFzc31gfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICApO1xufTtcblxuQ2lyY2xlQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgICBldmVudDogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIG5vd1V0YzogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIGlzU2NoZWR1bGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGVudGVyQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgYWRkVG9TY2hlZHVsZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcmVtb3ZlRnJvbVNjaGVkdWxlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBhbHdheXNTaG93RW50ZXI6IFByb3BUeXBlcy5ib29sLFxufTtcblxuQ2lyY2xlQnV0dG9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBhZGRUb1NjaGVkdWxlOiBudWxsLFxuICAgIHJlbW92ZUZyb21TY2hlZHVsZTogbnVsbCxcbiAgICBhbHdheXNTaG93RW50ZXI6IGZhbHNlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDaXJjbGVCdXR0b247XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiY2lyY2xlQnV0dG9uXCI6XCJfMzRsMldtWWpzZVpHdFlZd0VDMjZaUlwiLFwiYWRkXCI6XCJfMS1wYzFsWU5aMjVqVlJKY0NpU0VCdFwiLFwiYWRkZWRcIjpcIl8yQkxzX3dUenIyR19QSEdHS3VXdkN0XCIsXCJlbnRlclwiOlwiXzF2YnNnNnhmNU9XRjNpR0RQeXFfMDNcIn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50LXRpbWV6b25lXCI7XG5pbXBvcnQgRnJhZ21lbnRQYXJzZXIgZnJvbSBcIi4vZnJhZ21lbi1wYXJzZXJcIjtcblxuY2xhc3MgQ2xvY2sgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLmZyYWdtZW50UGFyc2VyID0gbmV3IEZyYWdtZW50UGFyc2VyKCk7XG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdGltZXN0YW1wOiBudWxsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgY29uc3Qge3RpbWV6b25lID0gJ1VUQycsIG5vd30gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBub3dRUyA9IHRoaXMuZnJhZ21lbnRQYXJzZXIuZ2V0UGFyYW0oJ25vdycpO1xuICAgICAgICBjb25zdCBtb21lbnRRUyA9IG1vbWVudC50eihub3dRUywgJ1lZWVktTU0tREQsaGg6bW06c3MnLCB0aW1lem9uZSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXA7XG5cbiAgICAgICAgaWYgKG1vbWVudFFTLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGltZXN0YW1wID0gbW9tZW50UVMudmFsdWVPZigpIC8gMTAwMDtcbiAgICAgICAgfSBlbHNlIGlmIChub3cpIHtcbiAgICAgICAgICAgIHRpbWVzdGFtcCA9IG5vd1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbG9jYWwgPSBtb21lbnQoKS51bml4KCk7XG4gICAgICAgICAgICBjb25zdCBzZXJ2ZXJUaW1lID0gIGF3YWl0IHRoaXMuZ2V0U2VydmVyVGltZSgpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxBZnRlciA9IG1vbWVudCgpLnVuaXgoKTtcblxuICAgICAgICAgICAgaWYgKHNlcnZlclRpbWUpIHtcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBzZXJ2ZXJUaW1lLnRpbWVzdGFtcCArIChsb2NhbEFmdGVyIC0gbG9jYWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBsb2NhbEFmdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dGltZXN0YW1wfSk7XG4gICAgICAgIHRoaXMucHJvcHMub25UaWNrKHRpbWVzdGFtcCk7XG5cbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKHRoaXMudGljaywgMTAwMCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgfVxuXG4gICAgZ2V0U2VydmVyVGltZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vdGltZWludGVydmFsc2luY2UxOTcwLmFwcHNwb3QuY29tL2ApXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICB9O1xuXG4gICAgdGljayA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qge3RpbWVzdGFtcH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBpZiAodGltZXN0YW1wICE9PSBudWxsKSB7ICAgXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uVGljayh0aW1lc3RhbXAgKyAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3RpbWVzdGFtcDogdGltZXN0YW1wICsgMX0pXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gZXBvY2ggdXRjIHRpbWUgaW4gc2Vjb25kc1xuICAgIG5vdyA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudGltZXN0YW1wO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHtkaXNwbGF5LCB0aW1lem9uZSA9ICdVVEMnfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHt0aW1lc3RhbXB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBpZiAoIWRpc3BsYXkgfHwgIXRpbWVzdGFtcCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5Ub3A6ICc1MHB4JywgdGV4dEFsaWduOiAnY2VudGVyJywgZm9udFNpemU6ICcyMHB4J319PlxuICAgICAgICAgICAgICAgIHttb21lbnQudHoodGltZXN0YW1wKjEwMDAsIHRpbWV6b25lKS5mb3JtYXQoJ1lZWVktTU0tREQgaGg6bW06c3MnKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBDbG9jaztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTkgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4Y2x1c2l2ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zaG93RmllbGQgPSB0aGlzLnNob3dGaWVsZC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHNob3dGaWVsZCgpIHtcbiAgICAgICAgbGV0IHtuYW1lfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBleGNsdXNpdmVTZWN0aW9ucyA9IHdpbmRvdy5FWENMVVNJVkVfU0VDVElPTlM7XG5cbiAgICAgICAgcmV0dXJuIGV4Y2x1c2l2ZVNlY3Rpb25zID8gZXhjbHVzaXZlU2VjdGlvbnMuaW5jbHVkZXMobmFtZSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7Y2hpbGRyZW59ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAodGhpcy5zaG93RmllbGQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnXG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vaW5wdXRzL3RleHQtaW5wdXQnXG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi4vaW5wdXRzL2Ryb3Bkb3duJ1xuaW1wb3J0IFJhZGlvTGlzdCBmcm9tICcuLi9pbnB1dHMvcmFkaW8tbGlzdCdcbmltcG9ydCBDaGVja2JveExpc3QgZnJvbSAnLi4vaW5wdXRzL2NoZWNrYm94LWxpc3QnXG5pbXBvcnQgUXVlc3Rpb25zU2V0IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXN0aW9ucy1zZXQnO1xuaW1wb3J0IHtGaWVsZCwgRm9ybX0gZnJvbSBcInJlYWN0LWZpbmFsLWZvcm1cIjtcblxuY29uc3QgRXh0cmFRdWVzdGlvbnNGb3JtID0gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFRdWVzdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJBbnN3ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFuc3dlckNoYW5nZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICdxdWVzdGlvbnMtZm9ybScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lID0gJ3F1ZXN0aW9uLWNvbnRhaW5lcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWUgPSAncXVlc3Rpb24tbGFiZWwtY29udGFpbmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lPSAncXVlc3Rpb24tY29udHJvbC1jb250YWluZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUmVmID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZE9ubHkgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uVGV4dCA9ICdTdWJtaXQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4ge1xuXG4gICAgbGV0IHN1Ym1pdCA9IG51bGw7XG5cbiAgICBjb25zdCBxdWVzdGlvblJlZiA9IHVzZVJlZih7fSk7XG5cbiAgICBjb25zdCBbYW5zd2Vycywgc2V0QW5zd2Vyc10gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2Zvcm1FcnJvcnMsIHNldEZvcm1FcnJvcnNdID0gdXNlU3RhdGUoe30pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZm9ybWF0VXNlckFuc3dlcnMoKTtcbiAgICB9LCBbZXh0cmFRdWVzdGlvbnNdKVxuXG4gICAgY29uc3QgZm9ybWF0VXNlckFuc3dlcnMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHFzID0gbmV3IFF1ZXN0aW9uc1NldChleHRyYVF1ZXN0aW9ucywgdXNlckFuc3dlcnMpO1xuICAgICAgICBzZXRBbnN3ZXJzKHFzLmZvcm1hdEFuc3dlcnMoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgQ29uZGl0aW9uID0gKHt3aGVuLCBydWxlLCBjaGlsZHJlbn0pID0+IChcbiAgICAgICAgPEZpZWxkIG5hbWU9e3doZW59IHN1YnNjcmlwdGlvbj17e3ZhbHVlOiB0cnVlfX0+XG4gICAgICAgICAgICB7KHtpbnB1dDoge3ZhbHVlfX0pID0+XG4gICAgICAgICAgICAgICAgY2hlY2tWaXNpYmlsaXR5KHJ1bGUsIGNoZWNrUnVsZSh2YWx1ZSwgcnVsZSksIGNoaWxkcmVuKVxuICAgICAgICAgICAgfVxuICAgICAgICA8L0ZpZWxkPlxuICAgICk7XG5cbiAgICBjb25zdCBFcnJvciA9ICh7bmFtZX0pID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBmb3JtRXJyb3JzW25hbWVdIHx8ICcnO1xuICAgICAgICByZXR1cm4gZXJyb3IgPyA8c3BhbiBjbGFzc05hbWU9J2V4dHJhLXF1ZXN0aW9uLWVycm9yJz5lcnJvcjwvc3Bhbj4gOiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGVja1J1bGUgPSAodmFsdWUsIHJ1bGUpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlcyA9IHJ1bGUuYW5zd2VyX3ZhbHVlcztcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBsZXQgcmVzID0gcnVsZS5hbndlcl92YWx1ZXNfb3BlcmF0b3IgPT09IFwiQW5kXCI7XG4gICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChydWxlLmFud2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gXCJBbmRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXMgPSByZXMgJiYgdmFsdWUuaW5jbHVkZXMocGFyc2VJbnQodikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9yXG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlcyB8fCB2YWx1ZS5pbmNsdWRlcyhwYXJzZUludCh2KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZXMuaW5jbHVkZXModmFsdWUudG9TdHJpbmcoKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoZWNrVmlzaWJpbGl0eSA9IChydWxlLCBydWxlUmVzdWx0LCBjaGlsZHJlbikgPT4ge1xuICAgICAgICBpZiAocnVsZS52aXNpYmlsaXR5ID09PSBcIlZpc2libGVcIikge1xuICAgICAgICAgICAgaWYgKHJ1bGUudmlzaWJpbGl0eV9jb25kaXRpb24gPT09IFwiRXF1YWxcIikge1xuICAgICAgICAgICAgICAgIGlmKHJ1bGVSZXN1bHQpIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE5vbiBFcXVhbFxuICAgICAgICAgICAgaWYoIXJ1bGVSZXN1bHQpe1xuICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdCB2aXNpYmxlXG4gICAgICAgIGlmIChydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uID09PSBcIkVxdWFsXCIpIHtcbiAgICAgICAgICAgIGlmKCFydWxlUmVzdWx0KSByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmKHJ1bGVSZXN1bHQpIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgZGVsZXRlIHF1ZXN0aW9uUmVmLmN1cnJlbnRbcnVsZS5zdWJfcXVlc3Rpb24uaWRdXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgICAgIGxldCBxdWVzdGlvblZhbHVlcyA9IHEudmFsdWVzO1xuICAgICAgICAvLyBAc2VlIGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy92ZzA1eT9maWxlPS9pbmRleC5qc1xuICAgICAgICBpZiAocS50eXBlID09PSBcIlRleHRcIikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cS5uYW1lfSByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PntxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbmFtZT17cS5uYW1lfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YCR7cS5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb3BzLmlucHV0LnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLmlucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3EucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RXJyb3IgbmFtZT17cS5uYW1lfS8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7cS5zdWJfcXVlc3Rpb25fcnVsZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXMubWFwKChyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25kaXRpb24gd2hlbj17cS5uYW1lfSBydWxlPXtyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NvbmRpdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocS50eXBlID09PSBcIlRleHRBcmVhXCIpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3EubmFtZX0gcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgY2xhc3NOYW1lPXtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfT57cS5tYW5kYXRvcnkgPyBxLmxhYmVsPy5lbmRzV2l0aCgnPC9wPicpID8gcS5sYWJlbC5yZXBsYWNlKC88XFwvcD4kL2csIFwiIDxiPio8L2I+PC9wPlwiKSA6IGAke3EubGFiZWx9IDxiPio8L2I+YCA6IHEubGFiZWx9PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfSBuYW1lPXtxLm5hbWV9IGlkPXtgJHtxLmlkfWB9IGNvbXBvbmVudD1cInRleHRhcmVhXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3EubmFtZX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJDaGVja0JveFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtxLm5hbWV9IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBzdHlsZT17e2Rpc3BsYXk6ICdmbGV4J319IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfSBuYW1lPXtxLm5hbWV9IGlkPXtgJHtxLmlkfWB9IGNvbXBvbmVudD1cImlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgY2xhc3NOYW1lPXtgZXEtY2hlY2tib3gtbGFiZWwgJHtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXtxLm5hbWV9Lz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiB3aGVuPXtxLm5hbWV9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxLnR5cGUgPT09IFwiUmFkaW9CdXR0b25MaXN0XCIpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uVmFsdWVzID0gcXVlc3Rpb25WYWx1ZXMubWFwKHZhbCA9PiAoey4uLnZhbCwgdmFsdWU6IHZhbC5pZH0pKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3EubmFtZX0gcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgY2xhc3NOYW1lPXtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfT57cS5tYW5kYXRvcnkgPyBxLmxhYmVsPy5lbmRzV2l0aCgnPC9wPicpID8gcS5sYWJlbC5yZXBsYWNlKC88XFwvcD4kL2csIFwiIDxiPio8L2I+PC9wPlwiKSA6IGAke3EubGFiZWx9IDxiPio8L2I+YCA6IHEubGFiZWx9PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIG5hbWU9e3EubmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcyA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9MaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake3EuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZUNTUz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvcHMuaW5wdXQudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17cXVlc3Rpb25WYWx1ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLmlucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXtxLm5hbWV9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJDb21ib0JveFwiKSB7XG4gICAgICAgICAgICBxdWVzdGlvblZhbHVlcyA9IHF1ZXN0aW9uVmFsdWVzLm1hcCh2YWwgPT4gKHsuLi52YWwsIHZhbHVlOiB2YWwuaWR9KSk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtxLm5hbWV9IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIGNsYXNzTmFtZT17cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX0+e3EubWFuZGF0b3J5ID8gcS5sYWJlbD8uZW5kc1dpdGgoJzwvcD4nKSA/IHEubGFiZWwucmVwbGFjZSgvPFxcL3A+JC9nLCBcIiA8Yj4qPC9iPjwvcD5cIikgOiBgJHtxLmxhYmVsfSA8Yj4qPC9iPmAgOiBxLmxhYmVsfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBuYW1lPXtxLm5hbWV9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvcHMgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgJHtxLmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZUNTUz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9wcy5pbnB1dC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3F1ZXN0aW9uVmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLmlucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3EubmFtZX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJDaGVja0JveExpc3RcIikge1xuICAgICAgICAgICAgcXVlc3Rpb25WYWx1ZXMgPSBxdWVzdGlvblZhbHVlcy5tYXAodmFsID0+ICh7Li4udmFsLCB2YWx1ZTogdmFsLmlkfSkpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cS5uYW1lfSByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PntxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbmFtZT17cS5uYW1lfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94TGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake3EuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e3EubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9wcy5pbnB1dC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3F1ZXN0aW9uVmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLmlucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3EubmFtZX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzVmlzaWJsZSA9IChxKSA9PiB7XG4gICAgICAgIHJldHVybiAhIXF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF07XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRlUXVlc3Rpb24gPSAocSwgdmFsdWVzLCBlcnJvcnMpID0+IHtcbiAgICAgICAgaWYgKHEubWFuZGF0b3J5ICYmIGlzVmlzaWJsZShxKSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZXMuaGFzT3duUHJvcGVydHkocS5uYW1lKSB8fCB2YWx1ZXNbcS5uYW1lXSA9PT0gXCJcIiB8fCB2YWx1ZXNbcS5uYW1lXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBlcnJvcnNbcS5uYW1lXSA9IFwiUmVxdWlyZWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB2YWxpZGF0ZSBzdWIgcnVsZXNcbiAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXM/LmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgIHZhbGlkYXRlUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24sIHZhbHVlcywgZXJyb3JzKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VibWl0ID0gKHZhbHVlcykgPT4ge1xuICAgICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlKHZhbHVlcyk7XG4gICAgICAgaWYoT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICBvbkFuc3dlckNoYW5nZXModmFsdWVzKVxuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZGF0ZSA9ICh2YWx1ZXMpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JzID0ge307XG4gICAgICAgIGV4dHJhUXVlc3Rpb25zLmZvckVhY2goIHEgPT4ge1xuICAgICAgICAgICAgdmFsaWRhdGVRdWVzdGlvbihxLCB2YWx1ZXMsIGVycm9ycyk7XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRGb3JtRXJyb3JzKHsuLi5lcnJvcnN9KVxuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgIDxGb3JtXG4gICAgICAgICAgICAgICAgb25TdWJtaXQ9e29uU3VibWl0fVxuICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXM9e2Fuc3dlcnN9XG4gICAgICAgICAgICAgICAgdmFsaWRhdGU9e3ZhbGlkYXRlfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHsoe2hhbmRsZVN1Ym1pdCwgZm9ybSwgc3VibWl0dGluZywgcHJpc3RpbmUsIHZhbHVlc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3VibWl0ID0gaGFuZGxlU3VibWl0O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gcmVmPXtmb3JtUmVmfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVhZE9ubHkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2V4dHJhUXVlc3Rpb25zLm1hcCgocSkgPT4gcmVuZGVyUXVlc3Rpb24ocSkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zLm1hcCgocSkgPT4gcmVuZGVyUXVlc3Rpb24ocSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkZWJ1ZyAmJiA8cHJlPntKU09OLnN0cmluZ2lmeSh2YWx1ZXMsIDAsIDIpfTwvcHJlPn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgICAgeyFmb3JtUmVmICYmXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBzdHlsZT17e21hcmdpblRvcDogMTB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtidXR0b25UZXh0fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIClcbn1cblxuRXh0cmFRdWVzdGlvbnNGb3JtLnByb3BUeXBlcyA9IHtcbiAgICBleHRyYVF1ZXN0aW9uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgdXNlckFuc3dlcnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIG9uQW5zd2VyQ2hhbmdlczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZm9ybVJlZjogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICAgIFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBQcm9wVHlwZXMuc2hhcGUoe2N1cnJlbnQ6IFByb3BUeXBlcy5hbnl9KVxuICAgIF0pLFxuICAgIGRlYnVnOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBidXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHF1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWUgOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHF1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEV4dHJhUXVlc3Rpb25zRm9ybTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAnYXdlc29tZS1ib290c3RyYXAtY2hlY2tib3gvYXdlc29tZS1ib290c3RyYXAtY2hlY2tib3guY3NzJ1xuaW1wb3J0IElucHV0IGZyb20gJy4uL2lucHV0cy90ZXh0LWlucHV0J1xuaW1wb3J0IERyb3Bkb3duIGZyb20gJy4uL2lucHV0cy9kcm9wZG93bidcbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJ1xuaW1wb3J0IENoZWNrYm94TGlzdCBmcm9tICcuLi9pbnB1dHMvY2hlY2tib3gtbGlzdCdcbmltcG9ydCBSYWRpb0xpc3QgZnJvbSAnLi4vaW5wdXRzL3JhZGlvLWxpc3QnXG5cblxuY2xhc3MgUnN2cEZvcm0gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgYW5zd2VyczogcHJvcHMucXVlc3Rpb25zLm1hcChxID0+ICh7cXVlc3Rpb25faWQ6IHEuaWQsIHZhbHVlOiBudWxsfSkpLFxuICAgICAgICAgICAgZXJyb3JzOiBwcm9wcy5lcnJvcnNcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFzRXJyb3JzID0gdGhpcy5oYXNFcnJvcnMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVTdWJtaXQgPSB0aGlzLmhhbmRsZVN1Ym1pdC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHJlbmRlclF1ZXN0aW9uKHEpIHtcbiAgICAgICAgY29uc3Qge2Fuc3dlcnN9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhbnN3ZXJzLmZpbmQoYSA9PiBhLnF1ZXN0aW9uX2lkID09PSBxLmlkKS52YWx1ZTtcblxuICAgICAgICBzd2l0Y2gocS5jbGFzc19uYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdSU1ZQTWVtYmVyRW1haWxRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBNZW1iZXJGaXJzdE5hbWVRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBNZW1iZXJMYXN0TmFtZVF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgY2FzZSAnUlNWUFRleHRCb3hRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtxLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXt0aGlzLmhhc0Vycm9ycyhxLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUlNWUFRleHRBcmVhUXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17cS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZSB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIC8+KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBMaXRlcmFsQ29udGVudFF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoPGRpdj48UmF3SFRNTD57cS52YWx1ZX08L1Jhd0hUTUw+PC9kaXY+KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBDaGVja0JveExpc3RRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3hMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17cS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3EudmFsdWVzLm1hcCh2ID0+ICh7dmFsdWU6IGAke3YuaWR9YCwgbGFiZWw6IHYubGFiZWx9KSl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj17dGhpcy5oYXNFcnJvcnMocS5pZCl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBSYWRpb0J1dHRvbkxpc3RRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8UmFkaW9MaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17cS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3EudmFsdWVzLm1hcCh2ID0+ICh7dmFsdWU6IGAke3YuaWR9YCwgbGFiZWw6IHYubGFiZWx9KSl9XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj17dGhpcy5oYXNFcnJvcnMocS5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUlNWUERyb3BEb3duUXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IChxLmlzX2NvdW50cnlfc2VsZWN0b3IpID8gcS52YWx1ZXMubWFwKHYgPT4gKHt2YWx1ZTp2LmlkLCBsYWJlbDogdi52YWx1ZX0pKSA6IHEudmFsdWVzO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17cS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e3EuaXNfbXVsdGlzZWxlY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cS5lbXB0eV9zdHJpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXt2YWx1ZXN9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldikge1xuICAgICAgICBsZXQgYW5zd2VycyA9IFsuLi50aGlzLnN0YXRlLmFuc3dlcnNdO1xuICAgICAgICBsZXQge3ZhbHVlLCBpZH0gPSBldi50YXJnZXQ7XG5cbiAgICAgICAgaWYgKGV2LnRhcmdldC50eXBlID09PSAnZGF0ZXRpbWUnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnZhbHVlT2YoKSAvIDEwMDA7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYW5zd2VyID0gYW5zd2Vycy5maW5kKGEgPT4gYS5xdWVzdGlvbl9pZCA9PT0gcGFyc2VJbnQoaWQpKTtcbiAgICAgICAgYW5zd2VyLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YW5zd2Vyc30pO1xuICAgIH1cblxuICAgIGhhc0Vycm9ycyhmaWVsZCkge1xuICAgICAgICBsZXQge2Vycm9yc30gPSB0aGlzLnN0YXRlO1xuICAgICAgICBpZihmaWVsZCBpbiBlcnJvcnMpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcnNbZmllbGRdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGhhbmRsZVN1Ym1pdChldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGxldCB7IG9uU3VibWl0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQge2Fuc3dlcnN9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBvblN1Ym1pdChhbnN3ZXJzKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7IHF1ZXN0aW9ucywgb25TdWJtaXQgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxmb3JtIGNsYXNzTmFtZT1cInJzdnAtZm9ybVwiPlxuICAgICAgICAgICAgICAgIHtxdWVzdGlvbnMubWFwKHEgPT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9eydxdWVzdGlvbl8nK3EuaWR9IGNsYXNzTmFtZT1cInJvdyBmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUw+e3EubGFiZWx9PC9SYXdIVE1MPiB7cS5pc19tYW5kYXRvcnkgJiYgJyonfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMucmVuZGVyUXVlc3Rpb24ocSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7b25TdWJtaXQgJiZcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnlcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZVN1Ym1pdH0+U3VibWl0PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUnN2cEZvcm07XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0J1xuaW1wb3J0ICdhd2Vzb21lLWJvb3RzdHJhcC1jaGVja2JveC9hd2Vzb21lLWJvb3RzdHJhcC1jaGVja2JveC5jc3MnXG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vaW5wdXRzL3RleHQtaW5wdXQnXG5pbXBvcnQgeyBzY3JvbGxUb0Vycm9yLCBpc0VtcHR5LCBzaGFsbG93RXF1YWwsIGhhc0Vycm9ycyB9IGZyb20gJy4uLy4uL3V0aWxzL21ldGhvZHMnXG5cblxuY2xhc3MgU2ltcGxlRm9ybSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBlbnRpdHk6IHsuLi5wcm9wcy5lbnRpdHl9LFxuICAgICAgICAgICAgZXJyb3JzOiBwcm9wcy5lcnJvcnNcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlU3VibWl0ID0gdGhpcy5oYW5kbGVTdWJtaXQuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0ge307XG4gICAgICAgIHNjcm9sbFRvRXJyb3IodGhpcy5wcm9wcy5lcnJvcnMpO1xuXG4gICAgICAgIGlmKHByZXZQcm9wcy5lbnRpdHkuaWQgIT09IHRoaXMucHJvcHMuZW50aXR5LmlkKSB7XG4gICAgICAgICAgICBzdGF0ZS5lbnRpdHkgPSB7Li4udGhpcy5wcm9wcy5lbnRpdHl9O1xuICAgICAgICAgICAgc3RhdGUuZXJyb3JzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNoYWxsb3dFcXVhbChwcmV2UHJvcHMuZXJyb3JzLCB0aGlzLnByb3BzLmVycm9ycykpIHtcbiAgICAgICAgICAgIHN0YXRlLmVycm9ycyA9IHsuLi50aGlzLnByb3BzLmVycm9yc307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzRW1wdHkoc3RhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsuLi50aGlzLnN0YXRlLCAuLi5zdGF0ZX0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZXYpIHtcbiAgICAgICAgbGV0IGVudGl0eSA9IHsuLi50aGlzLnN0YXRlLmVudGl0eX07XG4gICAgICAgIGxldCBlcnJvcnMgPSB7Li4udGhpcy5zdGF0ZS5lcnJvcnN9O1xuICAgICAgICBsZXQge3ZhbHVlLCBpZH0gPSBldi50YXJnZXQ7XG5cbiAgICAgICAgaWYgKGV2LnRhcmdldC50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGV2LnRhcmdldC5jaGVja2VkO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3JzW2lkXSA9ICcnO1xuICAgICAgICBlbnRpdHlbaWRdID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2VudGl0eTogZW50aXR5LCBlcnJvcnM6IGVycm9yc30pO1xuICAgIH1cblxuICAgIGhhbmRsZVN1Ym1pdChldikge1xuICAgICAgICBsZXQgZW50aXR5ID0gey4uLnRoaXMuc3RhdGUuZW50aXR5fTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uU3VibWl0KHRoaXMuc3RhdGUuZW50aXR5KTtcbiAgICB9XG5cbiAgICBjcmVhdGVGaWVsZChmaWVsZCkge1xuICAgICAgICBsZXQge2VudGl0eSwgZXJyb3JzfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17XCJmaWVsZF9cIitmaWVsZC5uYW1lfSBjbGFzc05hbWU9XCJyb3cgZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4ge2ZpZWxkLmxhYmVsfSA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17ZmllbGQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2VudGl0eVtmaWVsZC5uYW1lXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj17aGFzRXJyb3JzKGZpZWxkLm5hbWUsIGVycm9ycyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e1wiZmllbGRfXCIrZmllbGQubmFtZX0gY2xhc3NOYW1lPVwicm93IGZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+IHtmaWVsZC5sYWJlbH0gPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2ZpZWxkLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtlbnRpdHlbZmllbGQubmFtZV19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17XCJmaWVsZF9cIitmaWVsZC5uYW1lfSBjbGFzc05hbWU9XCJyb3cgZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1jaGVjayBhYmMtY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPXtmaWVsZC5uYW1lfSBjaGVja2VkPXtlbnRpdHlbZmllbGQubmFtZV19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9IGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2ZpZWxkLm5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZpZWxkLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2VudGl0eX0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQge2ZpZWxkc30gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Zm9ybSBjbGFzc05hbWU9XCJzaW1wbGUtZm9ybVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgaWQ9XCJpZFwiIHZhbHVlPXtlbnRpdHkuaWR9IC8+XG5cbiAgICAgICAgICAgICAgICB7ZmllbGRzLm1hcChmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRmllbGQoZik7XG4gICAgICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0xMiBzdWJtaXQtYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLmhhbmRsZVN1Ym1pdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgcHVsbC1yaWdodFwiIHZhbHVlPXtULnRyYW5zbGF0ZShcImdlbmVyYWwuc2F2ZVwiKX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNpbXBsZUZvcm07XG4iLCJcbmNsYXNzIEZyYWdtZW50UGFyc2VyIHtcblxuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHRoaXMub3JpZ2luYWxIYXNoID0gJyc7XG4gICAgICAgIHRoaXMuaGFzaCAgICAgICAgID0ge307XG4gICAgfVxuXG4gICAgY29udmVydFRvSGFzaChzdHJIYXNoKVxuICAgIHtcbiAgICAgICAgc3RySGFzaCAgICA9IHN0ckhhc2guc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBwYXJhbXMgPSBzdHJIYXNoLnNwbGl0KCcmJyk7XG4gICAgICAgIGxldCByZXMgPSB7fTtcbiAgICAgICAgZm9yKGxldCBwYXJhbSBvZiBwYXJhbXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtID0gcGFyYW0uc3BsaXQoJz0nKTtcbiAgICAgICAgICAgIGlmKHBhcmFtLmxlbmd0aCAhPT0gIDIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IHZhbCA9IHBhcmFtWzFdLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKHZhbCA9PT0gJycpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAodmFsID09PSAndHJ1ZScgfHwgdmFsID09PSAnZmFsc2UnKVxuICAgICAgICAgICAgICAgIHBhcmFtWzFdID0gdmFsID09ICd0cnVlJztcblxuICAgICAgICAgICAgcmVzW3BhcmFtWzBdXSA9IHBhcmFtWzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgY2xlYXJQYXJhbXMoKXtcbiAgICAgICAgdGhpcy5vcmlnaW5hbEhhc2ggPSAnJztcbiAgICAgICAgdGhpcy5oYXNoICAgICAgICAgPSB7fTtcbiAgICB9XG5cbiAgICBnZXRQYXJhbShrZXkpe1xuICAgICAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9yaWdpbmFsSGFzaCAhPT0gd2luZG93LmxvY2F0aW9uLmhhc2gpe1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcbiAgICAgICAgICAgIHRoaXMuaGFzaCA9IHRoaXMuY29udmVydFRvSGFzaCh0aGlzLm9yaWdpbmFsSGFzaCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighdGhpcy5oYXNoLmhhc093blByb3BlcnR5KGtleSkgKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzaFtrZXldO1xuICAgIH1cblxuICAgIGdldFBhcmFtcygpe1xuICAgICAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9yaWdpbmFsSGFzaCAhPT0gIHdpbmRvdy5sb2NhdGlvbi5oYXNoKXtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxIYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7XG4gICAgICAgICAgICB0aGlzLmhhc2ggPSB0aGlzLmNvbnZlcnRUb0hhc2godGhpcy5vcmlnaW5hbEhhc2gpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgLi4uIHRoaXMuaGFzaCB9O1xuICAgIH1cblxuICAgIGRlbGV0ZVBhcmFtKHBhcmFtKXtcbiAgICAgICAgdmFyIGhhc2ggICAgPSB0aGlzLmdldFBhcmFtcygpO1xuICAgICAgICB0aGlzLmNsZWFyUGFyYW1zKCk7XG4gICAgICAgIGZvcihsZXQga2V5IGluIGhhc2gpIHtcbiAgICAgICAgICAgIGlmKGtleSA9PSBwYXJhbSkgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLmhhc2hba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlbGV0ZVBhcmFtcyhwYXJhbXMpe1xuICAgICAgICB2YXIgaGFzaCAgICA9IHRoaXMuZ2V0UGFyYW1zKCk7XG4gICAgICAgIHRoaXMuY2xlYXJQYXJhbXMoKTtcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gaGFzaCkge1xuICAgICAgICAgICAgaWYocGFyYW1zLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5oYXNoW2tleV0gPSBoYXNoW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRQYXJhbShrZXksIHZhbHVlKXtcbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcmlnaW5hbEhhc2ggIT09ICB3aW5kb3cubG9jYXRpb24uaGFzaCl7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbmFsSGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuICAgICAgICAgICAgdGhpcy5oYXNoID0gdGhpcy5jb252ZXJ0VG9IYXNoKHRoaXMub3JpZ2luYWxIYXNoKTtcbiAgICAgICAgfVxuICAgICAgICBpZih2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpXG4gICAgICAgICAgICB0aGlzLmhhc2hba2V5XSA9IHZhbHVlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5oYXNoW2tleV07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpe1xuICAgICAgICBsZXQgcmVzID0gJyc7XG4gICAgICAgIGZvcihsZXQga2V5IGluIHRoaXMuaGFzaClcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IHZhbCA9IHRoaXMuaGFzaFtrZXldO1xuICAgICAgICAgICAgaWYocmVzICE9PSAnJykgcmVzICs9ICcmJztcbiAgICAgICAgICAgIHJlcyArPSBrZXkrJz0nK3ZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRnJhZ21lbnRQYXJzZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFQgZnJvbSBcImkxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0XCI7XG5cbmNsYXNzIEZyZWVUZXh0U2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLm9uU2VhcmNoQ2xpY2sgID0gdGhpcy5vblNlYXJjaENsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25DbGVhckNsaWNrICAgPSB0aGlzLm9uQ2xlYXJDbGljay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uS2V5UHJlc3NlZCAgID0gdGhpcy5vbktleVByZXNzZWQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSAgICAgICA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIG9uU2VhcmNoQ2xpY2soKXtcbiAgICAgICAgdGhpcy5kb0ZpbHRlcmluZyh0aGlzLnN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICBvbkNsZWFyQ2xpY2soKXtcbiAgICAgICAgdGhpcy5kb0ZpbHRlcmluZygnJyk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiAnJ30pO1xuICAgIH1cblxuICAgIGRvRmlsdGVyaW5nKHRlcm0pe1xuICAgICAgICB0aGlzLnByb3BzLm9uU2VhcmNoKHRlcm0udHJpbSgpKTtcbiAgICB9XG5cbiAgICBvbktleVByZXNzZWQoZXZlbnQpe1xuICAgICAgICB2YXIgY29kZSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2g7XG4gICAgICAgIGlmKGNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICB0aGlzLmRvRmlsdGVyaW5nKHRoaXMuc3RhdGUudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoZXZlbnQpe1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHZhbHVlOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCB7dmFsdWV9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICByZXR1cm4oXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvdyBzZWFyY2gtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbktleVByZXNzPXt0aGlzLm9uS2V5UHJlc3NlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpbnB1dC1ncm91cC1idG5cIiBzdHlsZT17e3dpZHRoOiA1ICsnJSd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9e3RoaXMub25TZWFyY2hDbGlja30gY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0XCIgdGl0bGU9e1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5zZWFyY2hcIil9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS1zZWFyY2hcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gb25DbGljaz17dGhpcy5vbkNsZWFyQ2xpY2t9IGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdFwiIHRpdGxlPXtULnRyYW5zbGF0ZShcImdlbmVyYWwuY2xlYXJcIil9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10aW1lc1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZyZWVUZXh0U2VhcmNoOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHdpdGhTY3JpcHRqcywgd2l0aEdvb2dsZU1hcCwgR29vZ2xlTWFwLCBNYXJrZXIsIEluZm9XaW5kb3cgfSBmcm9tIFwicmVhY3QtZ29vZ2xlLW1hcHNcIjtcbmltcG9ydCBNYXJrZXJDbHVzdGVyZXIgZnJvbSBcInJlYWN0LWdvb2dsZS1tYXBzL2xpYi9jb21wb25lbnRzL2FkZG9ucy9NYXJrZXJDbHVzdGVyZXJcIjtcbmltcG9ydCB7YXJyYXlzRXF1YWx9IGZyb20gXCIuLi8uLi91dGlscy9tZXRob2RzXCI7XG5cbmNvbnN0IE1BUCA9IHtcbiAgICBkZWZhdWx0Wm9vbTogMixcbiAgICBkZWZhdWx0Q2VudGVyOiB7IGxhdDogMzAuMjcwMTY2LCBsbmc6IC05Ny43MzEyNzEgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICAgIG1pblpvb206IDEsXG4gICAgICAgIG1heFpvb206IDE5XG4gICAgfVxufTtcblxuY29uc3QgR29vZ2xlTWFwV3JhcHBlciA9IHdpdGhHb29nbGVNYXAoKHByb3BzKSA9PiB7XG4gICAgICAgIHJldHVybiAgPEdvb2dsZU1hcFxuICAgICAgICAgICAgcmVmPXtwcm9wcy5vbk1hcExvYWR9XG4gICAgICAgICAgICB6b29tPXsgcHJvcHMuem9vbSB9XG4gICAgICAgICAgICBjZW50ZXI9eyBwcm9wcy5jZW50ZXIgfVxuICAgICAgICAgICAgb25Cb3VuZHNDaGFuZ2VkPXtwcm9wcy5vbk1hcENoYW5nZX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3Byb3BzLm9uTWFwQ2xpY2t9XG4gICAgICAgID5cbiAgICAgICAgICAgIHtwcm9wcy5zaG93TWFya2VycyAmJlxuICAgICAgICAgICAgPE1hcmtlckNsdXN0ZXJlclxuICAgICAgICAgICAgICAgIGF2ZXJhZ2VDZW50ZXJcbiAgICAgICAgICAgICAgICBlbmFibGVSZXRpbmFJY29uc1xuICAgICAgICAgICAgICAgIGdyaWRTaXplPXs2MH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7cHJvcHMubWFya2Vycy5tYXAobWFya2VyID0+IChcbiAgICAgICAgICAgICAgICAgICAgPE1hcmtlclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXttYXJrZXIuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj17eyBsYXQ6IG1hcmtlci5sYXQsIGxuZzogbWFya2VyLmxuZyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcHJvcHMub25Ub2dnbGVJbmZvV2luZG93KG1hcmtlci5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkRyYWdFbmQ9e3Byb3BzLm9uTWFya2VyRHJhZ31cbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdnYWJsZT17cHJvcHMuZHJhZ2dhYmxlfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bWFya2VyLmlzSW5mb1dpbmRvd09wZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxJbmZvV2luZG93IG9uQ2xvc2VDbGljaz17KCkgPT4gcHJvcHMub25Ub2dnbGVJbmZvV2luZG93KG1hcmtlci5pZCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e21hcmtlci5uYW1lfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9JbmZvV2luZG93PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L01hcmtlcj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvTWFya2VyQ2x1c3RlcmVyPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L0dvb2dsZU1hcD5cbiAgICB9XG4pO1xuXG5leHBvcnQgY2xhc3MgR01hcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIG1hcmtlcnM6IHByb3BzLm1hcmtlcnNcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZU1hcExvYWQgPSB0aGlzLmhhbmRsZU1hcExvYWQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVNYXBDaGFuZ2UgPSB0aGlzLmhhbmRsZU1hcENoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU1hcmtlckRyYWcgPSB0aGlzLmhhbmRsZU1hcmtlckRyYWcuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVNYXBDbGljayA9IHRoaXMuaGFuZGxlTWFwQ2xpY2suYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGNvbnN0IG5ld19tYXJrZXJzID0gdGhpcy5wcm9wcy5tYXJrZXJzO1xuXG4gICAgICAgIGlmICghYXJyYXlzRXF1YWwobmV3X21hcmtlcnMsIHByZXZQcm9wcy5tYXJrZXJzKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IG1hcmtlcnM6IG5ld19tYXJrZXJzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG9sZF9tYXJrZXJzX3N0ciA9IHByZXZQcm9wcy5tYXJrZXJzLm1hcCggbSA9PiBtLmlkICkuc29ydCgpLmpvaW4oKTtcbiAgICAgICAgbGV0IG5ld19tYXJrZXJzX3N0ciA9IG5ld19tYXJrZXJzLm1hcCggbSA9PiBtLmlkICkuc29ydCgpLmpvaW4oKTtcblxuICAgICAgICBpZiAobmV3X21hcmtlcnMubGVuZ3RoID4gMSAmJiBvbGRfbWFya2Vyc19zdHIgIT09IG5ld19tYXJrZXJzX3N0cikge1xuICAgICAgICAgICAgY29uc3QgbWFya2VyQm91bmRzID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kcygpO1xuICAgICAgICAgICAgZm9yIChsZXQgbWFya2VyIG9mIG5ld19tYXJrZXJzKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1hcmtlcl9sb2MgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKG1hcmtlci5sYXQsIG1hcmtlci5sbmcpO1xuICAgICAgICAgICAgICAgIG1hcmtlckJvdW5kcy5leHRlbmQobWFya2VyX2xvYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXBDb21wb25lbnQuZml0Qm91bmRzKG1hcmtlckJvdW5kcyk7XG4gICAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgaGFuZGxlTWFwTG9hZChtYXApIHtcbiAgICAgICAgdGhpcy5fbWFwQ29tcG9uZW50ID0gbWFwO1xuICAgIH1cblxuICAgIGhhbmRsZU1hcENoYW5nZSgpIHtcbiAgICAgICAgbGV0IHZpc2libGVfbWFya2VycyA9IHRoaXMucHJvcHMubWFya2Vycy5maWx0ZXIobSA9PiB7XG4gICAgICAgICAgICBsZXQgbWFya2VyX2xvYyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmcobS5sYXQsIG0ubG5nKTtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5fbWFwQ29tcG9uZW50LmdldEJvdW5kcygpLmNvbnRhaW5zKG1hcmtlcl9sb2MpKSA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdvbkNoYW5nZUNhbGxiYWNrJykpXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlQ2FsbGJhY2sodmlzaWJsZV9tYXJrZXJzKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlTWFya2VyQ2xpY2sobWFya2VyX2lkKSB7XG4gICAgICAgIGxldCBtYXJrZXJzID0gdGhpcy5zdGF0ZS5tYXJrZXJzO1xuICAgICAgICBsZXQgaXNfb3BlbiA9IG1hcmtlcnMuZmluZChtID0+IG0uaWQgPT0gbWFya2VyX2lkKS5pc0luZm9XaW5kb3dPcGVuO1xuICAgICAgICBtYXJrZXJzLmZpbmQobSA9PiBtLmlkID09IG1hcmtlcl9pZCkuaXNJbmZvV2luZG93T3BlbiA9ICFpc19vcGVuO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBtYXJrZXJzOiBtYXJrZXJzIH0pO1xuICAgIH07XG5cbiAgICBoYW5kbGVNYXJrZXJEcmFnKGV2KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25NYXJrZXJEcmFnZ2VkKGV2LmxhdExuZy5sYXQoKSwgZXYubGF0TG5nLmxuZygpKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlTWFwQ2xpY2soZXYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbk1hcENsaWNrKGV2LmxhdExuZy5sYXQoKSwgZXYubGF0TG5nLmxuZygpKTtcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge21hcmtlcnN9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IHt6b29tLCBjZW50ZXJ9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGRyYWdnYWJsZSA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2RyYWdnYWJsZScpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8R29vZ2xlTWFwV3JhcHBlclxuICAgICAgICAgICAgICAgIHNob3dNYXJrZXJzPXttYXJrZXJzLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgICAgbWFya2Vycz17bWFya2Vyc31cbiAgICAgICAgICAgICAgICB6b29tPXsgem9vbSA/IHpvb20gOiBNQVAuZGVmYXVsdFpvb20gfVxuICAgICAgICAgICAgICAgIGNlbnRlcj17IGNlbnRlci5sYXQgPyBjZW50ZXIgOiBNQVAuZGVmYXVsdENlbnRlciB9XG4gICAgICAgICAgICAgICAgbG9hZGluZ0VsZW1lbnQ9ezxkaXYgc3R5bGU9e3sgaGVpZ2h0OiBgMTAwJWAgfX0gLz59XG4gICAgICAgICAgICAgICAgY29udGFpbmVyRWxlbWVudD17PGRpdiBzdHlsZT17eyBoZWlnaHQ6IGA0MDBweGAgfX0gLz59XG4gICAgICAgICAgICAgICAgbWFwRWxlbWVudD17PGRpdiBzdHlsZT17eyBoZWlnaHQ6IGAxMDAlYCB9fSAvPn1cbiAgICAgICAgICAgICAgICBvbk1hcExvYWQ9e3RoaXMuaGFuZGxlTWFwTG9hZH1cbiAgICAgICAgICAgICAgICBvbk1hcENoYW5nZT17dGhpcy5oYW5kbGVNYXBDaGFuZ2V9XG4gICAgICAgICAgICAgICAgb25Ub2dnbGVJbmZvV2luZG93PXt0aGlzLmhhbmRsZU1hcmtlckNsaWNrfVxuICAgICAgICAgICAgICAgIG9uTWFya2VyRHJhZz17dGhpcy5oYW5kbGVNYXJrZXJEcmFnfVxuICAgICAgICAgICAgICAgIGRyYWdnYWJsZT17ZHJhZ2dhYmxlfVxuICAgICAgICAgICAgICAgIG9uTWFwQ2xpY2s9e3RoaXMuaGFuZGxlTWFwQ2xpY2t9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR01hcDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlBY2Nlc3NMZXZlbHN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY2Nlc3NMZXZlbHNJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRBY2Nlc3NMZXZlbHMgPSB0aGlzLmdldEFjY2Vzc0xldmVscy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvbkxhYmVsID0gdGhpcy5nZXRPcHRpb25MYWJlbC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGdldE9wdGlvblZhbHVlKGFjY2Vzc0xldmVsKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvblZhbHVlXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvblZhbHVlKGFjY2Vzc0xldmVsKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIGFjY2Vzc0xldmVsLmlkO1xuICAgIH1cblxuICAgIGdldE9wdGlvbkxhYmVsKGFjY2Vzc0xldmVsKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvbkxhYmVsXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvbkxhYmVsKGFjY2Vzc0xldmVsKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIGAke2FjY2Vzc0xldmVsLm5hbWV9YDtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYWNjZXNzbGV2ZWxpbnB1dCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldEFjY2Vzc0xldmVscyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCB7c3VtbWl0SWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnlBY2Nlc3NMZXZlbHMoc3VtbWl0SWQsaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIGVycm9yLCBvbkNoYW5nZSwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRBY2Nlc3NMZXZlbHN9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXttID0+IHRoaXMuZ2V0T3B0aW9uVmFsdWUobSl9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXttID0+IHRoaXMuZ2V0T3B0aW9uTGFiZWwobSl9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJy4vYWN0aW9uLWRyb3Bkb3duLmxlc3MnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY3Rpb25Ecm9wZG93biBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDbGljayA9IHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IHZhbHVlfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2xpY2soZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNsaWNrKHRoaXMuc3RhdGUudmFsdWUudmFsdWUpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29wdGlvbnMsIGFjdGlvbkxhYmVsLCBwbGFjZWhvbGRlciwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQge3ZhbHVlfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgbGV0IHNtYWxsRGRsID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnc21hbGwnKSA/ICdzbWFsbCcgOiAnJztcbiAgICAgICAgbGV0IHNtYWxsQnRuID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnc21hbGwnKSA/ICdidG4tZ3JvdXAtc20nIDogJ25vcm1hbCc7XG5cbiAgICAgICAgbGV0IHRoZVZhbHVlID0gKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0IHx8IHZhbHVlID09IG51bGwpID8gdmFsdWUgOiBvcHRpb25zLmZpbmQob3B0ID0+IG9wdC52YWx1ZSA9PSB2YWx1ZSk7XG5cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wiYWN0aW9uLWRyb3Bkb3duIGJ0bi1ncm91cCBcIiArIHNtYWxsQnRufT5cbiAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17XCJidG4tZ3JvdXAgYWN0aW9uLXNlbGVjdCB0ZXh0LWxlZnRcIiArIHNtYWxsRGRsfVxuICAgICAgICAgICAgICAgICAgICBpc0NsZWFyYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHQgYWN0aW9uLWJ1dHRvblwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICB7YWN0aW9uTGFiZWx9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdCc7XG5pbXBvcnQgUmF3SFRNTCBmcm9tICcuLi9yYXctaHRtbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoZWNrYm94TGlzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgbGV0IG90aGVyVmFsdWUgPSBwcm9wcy52YWx1ZSA/IHByb3BzLnZhbHVlLmZpbmQoIHYgPT4gIXByb3BzLm9wdGlvbnMubWFwKG9wID0+IG9wLnZhbHVlKS5pbmNsdWRlcyh2KSApIDogZmFsc2U7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIG90aGVyQ2hlY2tlZDogISFvdGhlclZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU90aGVyQ0JDaGFuZ2UgPSB0aGlzLmhhbmRsZU90aGVyQ0JDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgbGV0IG9wdGlvblZhbHVlcyA9IHRoaXMucHJvcHMub3B0aW9ucy5tYXAob3AgPT4gb3AudmFsdWUpO1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlID8gWy4uLnRoaXMucHJvcHMudmFsdWVdIDogW107XG5cbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aGVWYWwgPSBpc05hTihldmVudC50YXJnZXQudmFsdWUpID8gZXZlbnQudGFyZ2V0LnZhbHVlIDogcGFyc2VJbnQoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKHRoZVZhbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZmlsdGVyKCB2ID0+IHYgIT0gZXZlbnQudGFyZ2V0LnZhbHVlIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZmlsdGVyKHYgPT4gb3B0aW9uVmFsdWVzLmluY2x1ZGVzKHYpKTtcbiAgICAgICAgICAgIHZhbHVlLnB1c2goZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94bGlzdCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGhhbmRsZU90aGVyQ0JDaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3RoZXJDaGVja2VkOiBldmVudC50YXJnZXQuY2hlY2tlZH0pO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29uQ2hhbmdlLCB2YWx1ZSwgY2xhc3NOYW1lLCBvcHRpb25zLCBpZCwgY2hpbGRyZW4sIGVycm9yLCBkaXNhYmxlZCxuYW1lLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7IG90aGVyQ2hlY2tlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBsZXQgaW5saW5lID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdpbmxpbmUnKSApO1xuICAgICAgICBsZXQgaHRtbCA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaHRtbCcpICk7XG4gICAgICAgIGxldCBhbGxvd090aGVyID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdhbGxvd090aGVyJykgKTtcbiAgICAgICAgbGV0IG90aGVyVmFsdWUgPSB2YWx1ZSA/IHZhbHVlLmZpbmQoIHYgPT4gIW9wdGlvbnMubWFwKG9wID0+IG9wLnZhbHVlKS5pbmNsdWRlcyh2KSApIDogZmFsc2UgO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9PSAnJyApO1xuICAgICAgICBsZXQgaXNEaXNhYmxlZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpICYmIGRpc2FibGVkID09IHRydWUpO1xuXG5cbiAgICAgICAgbGV0IHN0eWxlLCBsYWJlbDtcblxuICAgICAgICBpZiAoaW5saW5lKSB7XG4gICAgICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzIycHgnLFxuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICcyMHB4JyxcbiAgICAgICAgICAgICAgICBmbG9hdDogJ2xlZnQnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcyMnB4JyxcbiAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICc3cHgnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBpZD17YGNobF93cmFwcGVyXyR7aWR9YH0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wiY2hlY2tib3hlcy1kaXZcIiArIChoYXNfZXJyb3IgPyAnIGVycm9yJyA6ICcnKSB9PlxuICAgICAgICAgICAgICAgICAgICB7IG9wdGlvbnMubWFwKG9wID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGVja2VkID0gdmFsdWUgPyB2YWx1ZS5pbmNsdWRlcyhvcC52YWx1ZSkgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNoZWNrIGFiYy1jaGVja2JveFwiIGtleT17XCJyYWRpb19rZXlfXCIgKyBvcC52YWx1ZX0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YGNiXyR7aWR9XyR7b3AudmFsdWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWU/IG5hbWUgOiBpZCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9IGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIiB2YWx1ZT17b3AudmFsdWV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17YGNiXyR7aWR9XyR7b3AudmFsdWV9YCAgfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aHRtbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MPntvcC5sYWJlbH08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IWh0bWwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAgICAgICAgICB7YWxsb3dPdGhlciAmJlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tY2hlY2sgYWJjLWNoZWNrYm94XCIgc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD17XCJjYl9vdGhlclwiICsgaWR9IGNoZWNrZWQ9e290aGVyQ2hlY2tlZH0gZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT3RoZXJDQkNoYW5nZX0gY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1pbnB1dFwiIHZhbHVlPVwib3RoZXJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZvcm0tY2hlY2stbGFiZWxcIiBodG1sRm9yPXtcImNiX290aGVyXCIgKyBpZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5vdGhlclwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAge2FsbG93T3RoZXIgJiYgb3RoZXJDaGVja2VkICYmXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3twYWRkaW5nTGVmdDogJzIycHgnLCB3aWR0aDogJzUwJSd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiBkaXNhYmxlZD17aXNEaXNhYmxlZH0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfSB2YWx1ZT17b3RoZXJWYWx1ZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cblxuQ2hlY2tib3hMaXN0LnByb3BUeXBlcyA9IHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlDb21wYW5pZXN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuaW1wb3J0IEFzeW5jQ3JlYXRhYmxlU2VsZWN0IGZyb20gXCJyZWFjdC1zZWxlY3QvbGliL0FzeW5jQ3JlYXRhYmxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbXBhbnlJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU5ldyA9IHRoaXMuaGFuZGxlTmV3LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0Q29tcGFuaWVzID0gdGhpcy5nZXRDb21wYW5pZXMuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgY29uc3QgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpIHx8IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2lzTXVsdGknKSk7XG4gICAgICAgIGNvbnN0IHRoZVZhbHVlID0gaXNNdWx0aSA/IHZhbHVlLm1hcCh2ID0+ICh7aWQ6IHYudmFsdWUsIG5hbWU6IHYubGFiZWx9KSkgOiB7aWQ6IHZhbHVlLnZhbHVlLCBuYW1lOiB2YWx1ZS5sYWJlbH07XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGVWYWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY29tcGFueWlucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgaGFuZGxlTmV3KHZhbHVlKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZVZhbHVlID0gKG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh7dmFsdWU6IG5ld1ZhbHVlLmlkLCBsYWJlbDogbmV3VmFsdWUubmFtZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNyZWF0ZSh2YWx1ZSwgdHJhbnNsYXRlVmFsdWUpO1xuICAgIH1cblxuICAgIGdldENvbXBhbmllcyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZU9wdGlvbnMgPSAob3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld09wdGlvbnMgPSBvcHRpb25zLm1hcChjID0+ICh7dmFsdWU6IGMuaWQudG9TdHJpbmcoKSwgbGFiZWw6IGMubmFtZX0pKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ld09wdGlvbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHF1ZXJ5Q29tcGFuaWVzKGlucHV0LCB0cmFuc2xhdGVPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7ZXJyb3IsIHZhbHVlLCBvbkNoYW5nZSwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSB8fCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdpc011bHRpJykpO1xuICAgICAgICBsZXQgYWxsb3dDcmVhdGUgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdhbGxvd0NyZWF0ZScpO1xuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuXG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGlzTXVsdGkgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSB2YWx1ZS5tYXAodiA9PiAoe3ZhbHVlOiB2LmlkLnRvU3RyaW5nKCksIGxhYmVsOiB2Lm5hbWV9ICkpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc011bHRpICYmIHZhbHVlKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHt2YWx1ZTogdmFsdWUuaWQudG9TdHJpbmcoKSwgbGFiZWw6IHZhbHVlLm5hbWV9O1xuICAgICAgICB9XG5cblxuICAgICAgICBjb25zdCBBc3luY0NvbXBvbmVudCA9IGFsbG93Q3JlYXRlXG4gICAgICAgICAgICA/IEFzeW5jQ3JlYXRhYmxlU2VsZWN0XG4gICAgICAgICAgICA6IEFzeW5jU2VsZWN0O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY0NvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhlVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0Q29tcGFuaWVzfVxuICAgICAgICAgICAgICAgICAgICBvbkNyZWF0ZU9wdGlvbj17dGhpcy5oYW5kbGVOZXd9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi9kcm9wZG93bic7XG5pbXBvcnQge2dldENvdW50cnlMaXN0fSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ291bnRyeURyb3Bkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgb3B0aW9uczogW11cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyA9IHRoaXMuc2V0T3B0aW9ucy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgICAgIGxldCB7b3B0aW9uc30gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIGlmKG9wdGlvbnMubGVuZ3RoID09IDApe1xuICAgICAgICAgICAgZ2V0Q291bnRyeUxpc3QodGhpcy5zZXRPcHRpb25zLCB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjb3VudHJ5ZGRsJ1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgc2V0T3B0aW9ucyhyZXNwb25zZSkge1xuICAgICAgICBsZXQgY291bnRyeUxpc3QgPSByZXNwb25zZS5tYXAoYyA9PiAoe2xhYmVsOiBjLm5hbWUsIHZhbHVlOiBjLmlzb19jb2RlfSkpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcHRpb25zOiBjb3VudHJ5TGlzdH0pO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29wdGlvbnN9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e29wdGlvbnN9IHsuLi50aGlzLnByb3BzfSAvPlxuICAgICAgICApO1xuXG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QnO1xuaW1wb3J0IHtnZXRDb3VudHJ5TGlzdH0gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvdW50cnlJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIG9wdGlvbnM6IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNldE9wdGlvbnMgPSB0aGlzLnNldE9wdGlvbnMuYmluZCh0aGlzKTtcblxuICAgICAgICBnZXRDb3VudHJ5TGlzdCh0aGlzLnNldE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHNldE9wdGlvbnMocmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGNvdW50cnlMaXN0ID0gcmVzcG9uc2UubWFwKGMgPT4gKHtsYWJlbDogYy5uYW1lLCB2YWx1ZTogYy5pc29fY29kZX0pKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3B0aW9uczogY291bnRyeUxpc3R9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gdmFsdWUubWFwKHYgPT4gdi52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGVWYWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY291bnRyeWlucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBvbkNoYW5nZSwgaWQsIG11bHRpLCBlcnJvciwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQge29wdGlvbnN9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IG51bGw7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcblxuICAgICAgICBpZiAoaXNNdWx0aSkge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSBvcHRpb25zLmZpbHRlcihvcCA9PiB2YWx1ZS5pbmNsdWRlcyhvcC52YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgfHwgdmFsdWUgPT0gbnVsbCkgPyB2YWx1ZSA6IG9wdGlvbnMuZmluZChvcHQgPT4gb3B0LnZhbHVlID09IHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcImRyb3Bkb3duXCIgKyAoaGFzX2Vycm9yID8gJyBlcnJvcicgOiAnJyl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoZVZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnLi9kYXRldGltZXBpY2tlci5sZXNzJztcbmltcG9ydCBEYXRldGltZSBmcm9tICdyZWFjdC1kYXRldGltZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVUaW1lUGlja2VyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmlzVmFsaWREYXRlID0gdGhpcy5pc1ZhbGlkRGF0ZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudmFsdWUgIT09IHByZXZQcm9wcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IHRoaXMucHJvcHMudmFsdWV9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGRhdGUpIHtcblxuICAgICAgICBsZXQgeyB0aW1lem9uZSB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoZGF0ZSAmJiBtb21lbnQuaXNNb21lbnQoZGF0ZSkpIHtcbiAgICAgICAgICAgIGRhdGUgPSBtb21lbnQudHooZGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKSwgdGltZXpvbmUpXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIGRhdGUgPSBtb21lbnQoMCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGRhdGUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2RhdGV0aW1lJ1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgaWYgKGRhdGUgJiYgbW9tZW50LmlzTW9tZW50KGRhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgaXNWYWxpZERhdGUoY3VycmVudERhdGUsIHNlbGVjdGVkRGF0ZSkge1xuICAgICAgICBsZXQgeyB0aW1lem9uZSwgdmFsaWRhdGlvbiB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHthZnRlciwgYmVmb3JlfSA9IHZhbGlkYXRpb247XG5cbiAgICAgICAgaWYgKGFmdGVyID09ICc8JylcbiAgICAgICAgICAgIHJldHVybiAoY3VycmVudERhdGUuaXNCZWZvcmUobW9tZW50LnR6KGJlZm9yZSAqIDEwMDAsIHRpbWV6b25lKSkpO1xuICAgICAgICBlbHNlIGlmKGFmdGVyID09ICc+JylcbiAgICAgICAgICAgIHJldHVybiAoY3VycmVudERhdGUuaXNBZnRlcihtb21lbnQudHooYmVmb3JlICogMTAwMCwgdGltZXpvbmUpKSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGFmdGVyRGF0ZSA9IG1vbWVudC50eihhZnRlciAqIDEwMDAsIHRpbWV6b25lKS5zdWJ0cmFjdCgxLCAnZGF5Jyk7XG4gICAgICAgICAgICBsZXQgYmVmb3JlRGF0ZSA9IG1vbWVudC50eihiZWZvcmUgKiAxMDAwLCB0aW1lem9uZSk7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuaXNBZnRlcihhZnRlckRhdGUpICYmIGN1cnJlbnREYXRlLmlzQmVmb3JlKGJlZm9yZURhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgdmFsaWRhdGUgPSAodHlwZW9mIHRoaXMucHJvcHMudmFsaWRhdGlvbiAhPSAndW5kZWZpbmVkJyk7XG4gICAgICAgIGxldCB7b25DaGFuZ2UsIGlkLCB2YWx1ZSwgZm9ybWF0LCBlcnJvciwgaW5wdXRQcm9wcywgZGlzYWJsZWQsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgY2xhc3NOYW1lID0gJ2Zvcm0tY29udHJvbCAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyk7XG4gICAgICAgIGxldCBpbnB1dERpc2FibGVkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykpID8gZGlzYWJsZWQgOiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICB7dmFsaWRhdGUgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxEYXRldGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZERhdGU9e3RoaXMuaXNWYWxpZERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0PXtmb3JtYXQuZGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQ9e2Zvcm1hdC50aW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFByb3BzPXt7Li4uaW5wdXRQcm9wcywgaWQ6IGlkLCBjbGFzc05hbWU6IGNsYXNzTmFtZSwgZGlzYWJsZWQ6IGlucHV0RGlzYWJsZWQsIGF1dG9Db21wbGV0ZTogJ29mZid9fVxuICAgICAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPERhdGV0aW1lXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0PXtmb3JtYXQuZGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQ9e2Zvcm1hdC50aW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFByb3BzPXt7Li4uaW5wdXRQcm9wcywgaWQ6IGlkLCBjbGFzc05hbWU6IGNsYXNzTmFtZSwgZGlzYWJsZWQ6IGlucHV0RGlzYWJsZWQsIGF1dG9Db21wbGV0ZTogJ29mZid9fVxuICAgICAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcm9wZG93biBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShzZWxlY3Rpb24pIHtcblxuICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5pc011bHRpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHNlbGVjdGlvbiA/IHNlbGVjdGlvbi5tYXAodmFsID0+IHZhbC52YWx1ZSkgOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBzZWxlY3Rpb24gPyBzZWxlY3Rpb24udmFsdWUgOiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZHJvcGRvd24nXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGNsYXNzTmFtZSwgZXJyb3IsIGNsZWFyYWJsZSwgZGlzYWJsZWQsIG92ZXJyaWRlQ1NTLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGlzQ2xlYXJhYmxlID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2NsZWFyYWJsZScpKTtcbiAgICAgICAgbGV0IGlzRGlzYWJsZWQgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSAmJiBkaXNhYmxlZCA9PSB0cnVlKTtcbiAgICAgICAgbGV0IHRoZVZhbHVlID0gbnVsbDtcblxuICAgICAgICBsZXQgc2VsZWN0Q2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnb3ZlcnJpZGVDU1MnKSB8fCBvdmVycmlkZUNTUyA9PSBmYWxzZSkge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3NOYW1lID0gJ2Ryb3Bkb3duICcgKyBjbGFzc05hbWUgKyAnICcgKyAoaGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmlzTXVsdGkpIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gdGhpcy5wcm9wcy5vcHRpb25zLmZpbHRlcihvcCA9PiB2YWx1ZS5pbmNsdWRlcyhvcC52YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgfHwgdmFsdWUgPT0gbnVsbCkgPyB2YWx1ZSA6IHRoaXMucHJvcHMub3B0aW9ucy5maW5kKG9wdCA9PiBvcHQudmFsdWUgPT0gdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0U3R5bGVzID0geyBtZW51OiBzdHlsZXMgPT4gKHsgLi4uc3R5bGVzLCB6SW5kZXg6IDk5OSB9KSB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzZWxlY3RDbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBpc0NsZWFyYWJsZT17aXNDbGVhcmFibGV9XG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlcz17c2VsZWN0U3R5bGVzfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0RWRpdG9yIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5SaWNoVGV4dEVkaXRvciA9IG51bGw7XG5cbiAgICAgICAgLy8gdGhpcyBpcyBkb25lIGJjIGR1ZSBTU1IgaXNzdWVzXG4gICAgICAgIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3NzdHVyL3JlYWN0LXJ0ZS9pc3N1ZXMvMzczXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5SaWNoVGV4dEVkaXRvciA9IHJlcXVpcmUoJ3JlYWN0LXJ0ZScpLmRlZmF1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZWRpdG9yVmFsdWU6IHRoaXMuUmljaFRleHRFZGl0b3I/LmNyZWF0ZUVtcHR5VmFsdWUoKSxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzLCBzdGF0ZSkge1xuICAgICAgICBjb25zdCB7dmFsdWV9ID0gcHJvcHM7XG4gICAgICAgIGNvbnN0IHtlZGl0b3JWYWx1ZSwgY3VycmVudFZhbHVlfSA9IHN0YXRlO1xuXG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBlZGl0b3JWYWx1ZTogZWRpdG9yVmFsdWUuc2V0Q29udGVudEZyb21TdHJpbmcodmFsdWUsICdodG1sJyksIGN1cnJlbnRWYWx1ZTogdmFsdWV9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGVkaXRvclZhbHVlKSB7XG5cbiAgICAgICAgbGV0IG9sZEVkaXRvclZhbHVlID0gdGhpcy5zdGF0ZS5lZGl0b3JWYWx1ZTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7ZWRpdG9yVmFsdWV9KTtcblxuICAgICAgICBsZXQgb2xkQ29udGVudFN0YXRlID0gb2xkRWRpdG9yVmFsdWUgPyBvbGRFZGl0b3JWYWx1ZS5nZXRFZGl0b3JTdGF0ZSgpLmdldEN1cnJlbnRDb250ZW50KCkgOiBudWxsO1xuICAgICAgICBsZXQgbmV3Q29udGVudFN0YXRlID0gZWRpdG9yVmFsdWUuZ2V0RWRpdG9yU3RhdGUoKS5nZXRDdXJyZW50Q29udGVudCgpO1xuXG4gICAgICAgIGlmIChvbGRDb250ZW50U3RhdGUgIT09IG5ld0NvbnRlbnRTdGF0ZSkge1xuICAgICAgICAgICAgbGV0IHN0cmluZ1ZhbHVlID0gZWRpdG9yVmFsdWUudG9TdHJpbmcoJ2h0bWwnKTtcbiAgICAgICAgICAgIHN0cmluZ1ZhbHVlID0gc3RyaW5nVmFsdWUgPT09ICc8cD48YnI+PC9wPicgPyAnJyA6IHN0cmluZ1ZhbHVlO1xuXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtjdXJyZW50VmFsdWU6IHN0cmluZ1ZhbHVlfSk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpbmdWYWx1ZSAhPT0gdGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZ1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHRlZGl0b3InXG4gICAgICAgICAgICAgICAgICAgIH19O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGVycm9yLCBjbGFzc05hbWUsIGlkLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT09ICcnICk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAge3RoaXMuUmljaFRleHRFZGl0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgPHRoaXMuUmljaFRleHRFZGl0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lICsgJyAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5lZGl0b3JWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5RXZlbnRzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldEV2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB0eXBlOiAnZXZlbnRpbnB1dCdcbiAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0RXZlbnRzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IHtzdW1taXQsIG9ubHlQdWJsaXNoZWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBxdWVyeUV2ZW50cyhzdW1taXQuaWQsIGlucHV0LCBvbmx5UHVibGlzaGVkLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBvbkNoYW5nZSwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldEV2ZW50c31cbiAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17b3B0aW9uID0+IG9wdGlvbi5pZH1cbiAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17b3B0aW9uID0+IG9wdGlvbi50aXRsZX1cbiAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDcmVhdGFibGVTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9DcmVhdGFibGUnO1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZyZWVNdWx0aVRleHRJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGlucHV0VmFsdWU6ICcnXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlID0gdGhpcy5oYW5kbGVJbnB1dENoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUtleURvd24gPSB0aGlzLmhhbmRsZUtleURvd24uYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGxpbWl0ID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbGltaXQnKSA/IHRoaXMucHJvcHMubGltaXQgOiBmYWxzZTtcblxuICAgICAgICBpZiAoIWxpbWl0IHx8IGxpbWl0ID49IHZhbHVlLmxlbmd0aCApIHtcbiAgICAgICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ZyZWV0ZXh0bGlzdCdcbiAgICAgICAgICAgICAgICB9fTtcblxuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVJbnB1dENoYW5nZShpbnB1dFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBpbnB1dFZhbHVlIH0pO1xuICAgIH1cblxuICAgIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgeyBpbnB1dFZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgeyB2YWx1ZSB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWlucHV0VmFsdWUpIHJldHVybjtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZTogJycsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZShbLi4udmFsdWUsIHtsYWJlbDogaW5wdXRWYWx1ZSwgdmFsdWU6IGlucHV0VmFsdWV9XSlcblxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyBpbnB1dFZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQge2lkLCB2YWx1ZSwgb25DaGFuZ2UsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPENyZWF0YWJsZVNlbGVjdFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHM9e3tEcm9wZG93bkluZGljYXRvcjogbnVsbH19XG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgICAgICAgICBjbGVhcmFibGVcbiAgICAgICAgICAgICAgICBpc011bHRpXG4gICAgICAgICAgICAgICAgbWVudUNvbnRhaW5lclN0eWxlPXt7ZGlzcGxheTogJ25vbmUnfX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgb25JbnB1dENoYW5nZT17dGhpcy5oYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgICBvbklucHV0S2V5RG93bj17dGhpcy5oYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtULnRyYW5zbGF0ZShcImdlbmVyYWwudHlwZV9zb21ldGhpbmdcIil9XG4gICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5R3JvdXBzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR3JvdXBJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldEdyb3VwcyA9IHRoaXMuZ2V0R3JvdXBzLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB0eXBlOiAnZ3JvdXBpbnB1dCdcbiAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0R3JvdXBzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcXVlcnlHcm91cHMoaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0R3JvdXBzfVxuICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcHRpb24gPT4gb3B0aW9uLmlkfVxuICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXtvcHRpb24gPT4gb3B0aW9uLnRpdGxlfVxuICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBjb25zdCBPcHRpb25Hcm91cCA9ICAoe1xuICAgIHZhbHVlLFxuICAgIGxhYmVsLFxuICAgIG9wdGlvbnNcbn0pID0+IHtcbiAgICByZXR1cm4gKFtcbiAgICAgICAgPG9wdGlvbiBrZXk9e1wiZ3JvdXBcIiArIHZhbHVlfSBjbGFzc05hbWU9XCJvcHRpb24tZ3JvdXBcIiB2YWx1ZT17dmFsdWV9PntsYWJlbH08L29wdGlvbj4sXG4gICAgICAgIG9wdGlvbnMubWFwKChvcHQsaSkgPT4gKFxuICAgICAgICAgICAgPG9wdGlvbiBjbGFzc05hbWU9XCJvcHRpb24tY2hpbGRcIiBrZXk9e29wdC52YWx1ZX0gdmFsdWU9e29wdC52YWx1ZX0+IC0ge29wdC5sYWJlbH08L29wdGlvbj5cbiAgICAgICAgKSlcbiAgICBdKTtcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgT3B0aW9uR3JvdXAgfSBmcm9tICcuL09wdGlvbkdyb3VwJztcbmltcG9ydCAnLi9vcHRpb25ncm91cC5sZXNzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR3JvdXBlZERyb3Bkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudmFsdWUgIT09IHByZXZQcm9wcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IHRoaXMucHJvcHMudmFsdWV9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGV2KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtpZCwgb3B0aW9ucywgcGxhY2Vob2xkZXIsIGNsYXNzTmFtZSwgZXJyb3J9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQge3ZhbHVlfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lICsgJyBmb3JtLWNvbnRyb2wgJyArIChoYXNfZXJyb3IgPyAnZXJyb3InIDogJycpfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgZGlzYWJsZWQ+e3BsYWNlaG9sZGVyfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbnMubWFwKChvcHQsaSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0Lm9wdGlvbnMgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvbkdyb3VwIGtleT17J2dyb3VwX29wdF8nK2l9IGxhYmVsPXtvcHQubGFiZWx9IHZhbHVlPXtvcHQudmFsdWV9IG9wdGlvbnM9e29wdC5vcHRpb25zfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17b3B0LnZhbHVlfSB2YWx1ZT17b3B0LnZhbHVlfT57b3B0LmxhYmVsfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QnO1xuaW1wb3J0IHtnZXRMYW5ndWFnZUxpc3R9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMYW5ndWFnZUlucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgICBzaG91bGRVc2VJZDogcHJvcHMuaGFzT3duUHJvcGVydHkoJ3Nob3VsZFVzZUlkJykgPyBwcm9wcy5zaG91bGRVc2VJZCA6IGZhbHNlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zID0gdGhpcy5zZXRPcHRpb25zLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgICAgIGdldExhbmd1YWdlTGlzdCh0aGlzLnNldE9wdGlvbnMsIHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9XG5cbiAgICBzZXRPcHRpb25zKHJlc3BvbnNlKSB7XG4gICAgICAgIGxldCBsYW5ndWFnZUxpc3QgPSAodGhpcy5zdGF0ZS5zaG91bGRVc2VJZCkgP1xuICAgICAgICAgICAgcmVzcG9uc2UubWFwKGwgPT4gKHtsYWJlbDogbC5uYW1lLCB2YWx1ZTogbC5pZH0pKTpcbiAgICAgICAgICAgIHJlc3BvbnNlLm1hcChsID0+ICh7bGFiZWw6IGwubmFtZSwgdmFsdWU6IGwuaXNvX2NvZGV9KSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wdGlvbnM6IGxhbmd1YWdlTGlzdH0pO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IHRoZVZhbHVlID0gbnVsbDtcblxuICAgICAgICBpZiAoaXNNdWx0aSkge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSB2YWx1ZS5tYXAodiA9PiB2LnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gdmFsdWUudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoZVZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdsYWd1YWdlaW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHtvcHRpb25zfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuICAgICAgICBsZXQgdGhlVmFsdWUgPSBudWxsO1xuXG4gICAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IG9wdGlvbnMuZmlsdGVyKG9wID0+IHZhbHVlLmluY2x1ZGVzKG9wLnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9ICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCB8fCB2YWx1ZSA9PSBudWxsKSA/IHZhbHVlIDogb3B0aW9ucy5maW5kKG9wdCA9PiBvcHQudmFsdWUgPT0gdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoZVZhbHVlfVxuICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuXG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeU1lbWJlcnN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZW1iZXJJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRNZW1iZXJzID0gdGhpcy5nZXRNZW1iZXJzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uTGFiZWwgPSB0aGlzLmdldE9wdGlvbkxhYmVsLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uVmFsdWUobWVtYmVyKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvblZhbHVlXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvblZhbHVlKG1lbWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiBtZW1iZXIuaWQ7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uTGFiZWwobWVtYmVyKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvbkxhYmVsXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvbkxhYmVsKG1lbWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiBgJHttZW1iZXIuZmlyc3RfbmFtZX0gJHttZW1iZXIubGFzdF9uYW1lfSAoJHttZW1iZXIuaWR9KWA7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgdHlwZTogJ21lbWJlcmlucHV0J1xuICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRNZW1iZXJzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXJ5TWVtYmVycyhpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgZXJyb3IsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldE1lbWJlcnN9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXttID0+IHRoaXMuZ2V0T3B0aW9uVmFsdWUobSl9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXttID0+IHRoaXMuZ2V0T3B0aW9uTGFiZWwobSl9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQgQXN5bmNDcmVhdGFibGVTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luY0NyZWF0YWJsZSc7XG5pbXBvcnQge3F1ZXJ5T3JnYW5pemF0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9yZ2FuaXphdGlvbklucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTmV3ID0gdGhpcy5oYW5kbGVOZXcuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcmdhbml6YXRpb25zID0gdGhpcy5nZXRPcmdhbml6YXRpb25zLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZToge2lkOiB2YWx1ZS52YWx1ZSwgbmFtZTogdmFsdWUubGFiZWx9LFxuICAgICAgICAgICAgICAgIHR5cGU6ICdvcmdhbml6YXRpb25pbnB1dCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGhhbmRsZU5ldyh2YWx1ZSkge1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hcCBpbnRvIHZhbHVlL2xhYmVsIGJlY2F1c2Ugb2YgYSBidWcgaW4gcmVhY3Qtc2VsZWN0IDJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVWYWx1ZSA9IChuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2Uoe3ZhbHVlOiBuZXdWYWx1ZS5pZCwgbGFiZWw6IG5ld1ZhbHVlLm5hbWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvcHMub25DcmVhdGUodmFsdWUsIHRyYW5zbGF0ZVZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRPcmdhbml6YXRpb25zIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KZWRXYXRzb24vcmVhY3Qtc2VsZWN0L2lzc3Vlcy8yOTk4XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlT3B0aW9ucyA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgbmV3T3B0aW9ucyA9IG9wdGlvbnMubWFwKG9yZyA9PiAoe3ZhbHVlOiBvcmcuaWQudG9TdHJpbmcoKSwgbGFiZWw6IG9yZy5uYW1lfSkpO1xuICAgICAgICAgICAgY2FsbGJhY2sobmV3T3B0aW9ucyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcXVlcnlPcmdhbml6YXRpb25zKGlucHV0LCB0cmFuc2xhdGVPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7ZXJyb3IsIHZhbHVlLCBpZCwgb25DaGFuZ2UsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgYWxsb3dDcmVhdGUgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdhbGxvd0NyZWF0ZScpO1xuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuICAgICAgICBsZXQgdGhlVmFsdWUgPSB2YWx1ZSA/IHt2YWx1ZTogdmFsdWUuaWQudG9TdHJpbmcoKSwgbGFiZWw6IHZhbHVlLm5hbWV9IDogbnVsbDtcblxuICAgICAgICBjb25zdCBBc3luY0NvbXBvbmVudCA9IGFsbG93Q3JlYXRlXG4gICAgICAgICAgICA/IEFzeW5jQ3JlYXRhYmxlU2VsZWN0XG4gICAgICAgICAgICA6IEFzeW5jU2VsZWN0O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY0NvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhlVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0T3JnYW5pemF0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgb25DcmVhdGVPcHRpb249e3RoaXMuaGFuZGxlTmV3fVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cblxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmF3SFRNTCBmcm9tICcuLi9yYXctaHRtbCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJhZGlvTGlzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHNlbGVjdGlvbikge1xuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGlvbi50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICB0eXBlOiAncmFkaW8nXG4gICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldExhYmVsKG9wdGlvbiwgaWQsIGlubGluZSwgc2ltcGxlLCBodG1sKSB7XG4gICAgICAgIGlmIChpbmxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZvcm0tY2hlY2stbGFiZWxcIiBodG1sRm9yPXtgcmFkaW9fJHtpZH1fJHtvcHRpb24udmFsdWV9YH0gc3R5bGU9e3tkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ319PlxuICAgICAgICAgICAgICAgICAgICB7aHRtbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB7IWh0bWwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi5sYWJlbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2ltcGxlKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17YHJhZGlvXyR7aWR9XyR7b3B0aW9uLnZhbHVlfWB9ID5cbiAgICAgICAgICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZvcm0tY2hlY2stbGFiZWxcIiBodG1sRm9yPXtgcmFkaW9fJHtpZH1fJHtvcHRpb24udmFsdWV9YH0gc3R5bGU9e3tkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ319PlxuICAgICAgICAgICAgICAgICAgICA8aDQgc3R5bGU9e3ttYXJnaW5Ub3A6ICcwcHgnfX0+e29wdGlvbi5sYWJlbH08L2g0PlxuICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTD57b3B0aW9uLmRlc2NyaXB0aW9ufTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29uQ2hhbmdlLCB2YWx1ZSwgY2xhc3NOYW1lLCBlcnJvciwgZGlzYWJsZWQsIG9wdGlvbnMsaWQsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgaW5saW5lID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdpbmxpbmUnKSApO1xuICAgICAgICBsZXQgc2ltcGxlID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdzaW1wbGUnKSApO1xuICAgICAgICBsZXQgaHRtbCA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaHRtbCcpICk7XG4gICAgICAgIGxldCBpc0Rpc2FibGVkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykgJiYgZGlzYWJsZWQgPT0gdHJ1ZSk7XG5cbiAgICAgICAgbGV0IHN0eWxlLCBsYWJlbDtcblxuICAgICAgICBpZiAoaW5saW5lKSB7XG4gICAgICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzIycHgnLFxuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICcyMHB4JyxcbiAgICAgICAgICAgICAgICBmbG9hdDogJ2xlZnQnXG4gICAgICAgICAgICB9O1xuXG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAnMjJweCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGlkPXtgcmxfd3JhcHBlcl8ke2lkfWB9PlxuICAgICAgICAgICAgICAgIHsgb3B0aW9ucy5tYXAob3AgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hlY2tlZCA9IChvcC52YWx1ZSA9PSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tY2hlY2sgYWJjLXJhZGlvXCIga2V5PXtgcmFkaW9fa2V5XyR7aWR9XyR7b3AudmFsdWV9YH0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgcmFkaW9fJHtpZH1fJHtvcC52YWx1ZX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17b3AudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e2ByYWRpb18ke2lkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5nZXRMYWJlbChvcCwgaWQsIGlubGluZSwgc2ltcGxlLCBodG1sKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5SYWRpb0xpc3QucHJvcFR5cGVzID0ge1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7IHF1ZXJ5UmVnaXN0cmF0aW9uQ29tcGFuaWVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmNvbnN0IFJlZ2lzdHJhdGlvbkNvbXBhbnlJbnB1dCA9ICh7IGVycm9yLCB2YWx1ZSwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgaXNNdWx0aSwgY2xhc3NOYW1lLCBzdW1taXRJZCwgb25FcnJvciwgLi4ucmVzdCB9KSA9PiB7XG5cbiAgICBjb25zdCBbdGhlVmFsdWUsIHNldFRoZVZhbHVlXSA9IHVzZVN0YXRlKHsgdmFsdWU6IG51bGwsIGxhYmVsOiAnJyB9KTtcbiAgICBjb25zdCBbZnJlZUlucHV0LCBzZXRGcmVlSW5wdXRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbaXNNdWx0aU9wdGlvbmFsLCBzZXRJc011bHRpT3B0aW9uYWxdID0gdXNlU3RhdGUobXVsdGkgfHwgaXNNdWx0aSk7XG4gICAgY29uc3QgW2hhc0Vycm9yLCBzZXRIYXNFcnJvcl0gPSB1c2VTdGF0ZShlcnJvcik7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIH0sIFtdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghdmFsdWUuaWQgJiYgdmFsdWUubmFtZSkgeyAgICAgICAgICAgIFxuICAgICAgICAgICAgc2V0RnJlZUlucHV0KHRydWUpO1xuICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZSh2YWx1ZS5uYW1lKTtcbiAgICAgICAgICAgIHNldFRoZVZhbHVlKHsgdmFsdWU6IG51bGwsIGxhYmVsOiB2YWx1ZS5uYW1lIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNNdWx0aSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc2V0VGhlVmFsdWUodmFsdWUubWFwKHYgPT4gKHsgdmFsdWU6IHYuaWQsIGxhYmVsOiB2Lm5hbWUgfSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTXVsdGkgJiYgdmFsdWUuaWQpIHtcbiAgICAgICAgICAgICAgICBzZXRUaGVWYWx1ZSh7IHZhbHVlOiB2YWx1ZS5pZCwgbGFiZWw6IHZhbHVlLm5hbWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbdmFsdWVdKVxuXG4gICAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGV2ZW50VmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50VmFsdWUudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHNldEZyZWVJbnB1dCh0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlU3RhdGUgPSBpc011bHRpT3B0aW9uYWwgPyBldmVudFZhbHVlLm1hcCh2ID0+ICh7IHZhbHVlOiB2LnZhbHVlLCBsYWJlbDogJycgfSkpIDogeyB2YWx1ZTogZXZlbnRWYWx1ZS52YWx1ZSwgbGFiZWw6ICcnIH07XG4gICAgICAgICAgICBzZXRUaGVWYWx1ZShuZXdWYWx1ZVN0YXRlKTtcbiAgICAgICAgICAgIGxldCBldiA9IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbmV3VmFsdWVTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbXBhbnlpbnB1dCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgb25DaGFuZ2UoZXYpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBpc011bHRpT3B0aW9uYWwgPyBldmVudFZhbHVlLm1hcCh2ID0+ICh7IGlkOiB2LnZhbHVlLCBuYW1lOiB2LmxhYmVsIH0pKSA6IHsgaWQ6IGV2ZW50VmFsdWUudmFsdWUsIG5hbWU6IGV2ZW50VmFsdWUubGFiZWwgfTtcbiAgICAgICAgY29uc3QgbmV3VmFsdWVTdGF0ZSA9IGlzTXVsdGlPcHRpb25hbCA/IGV2ZW50VmFsdWUubWFwKHYgPT4gKHsgdmFsdWU6IHYudmFsdWUsIGxhYmVsOiB2LmxhYmVsIH0pKSA6IHsgdmFsdWU6IGV2ZW50VmFsdWUudmFsdWUsIGxhYmVsOiBldmVudFZhbHVlLmxhYmVsIH07XG4gICAgICAgIHNldFRoZVZhbHVlKG5ld1ZhbHVlU3RhdGUpO1xuXG5cbiAgICAgICAgbGV0IGV2ID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY29tcGFueWlucHV0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBvbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRDbGVhciA9ICgpID0+IHtcbiAgICAgICAgc2V0RnJlZUlucHV0KCFmcmVlSW5wdXQpO1xuICAgICAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICAgICAgc2V0VGhlVmFsdWUoeyB2YWx1ZTogbnVsbCwgbGFiZWw6ICcnIH0pO1xuICAgICAgICBsZXQgZXYgPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHsgaWQ6IG51bGwsIG5hbWU6ICcnIH0sXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NvbXBhbnlpbnB1dCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKGV2dCkgPT4ge1xuICAgICAgICBzZXRJbnB1dFZhbHVlKGV2dC50YXJnZXQudmFsdWUpO1xuICAgICAgICBsZXQgZXYgPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHsgaWQ6IG51bGwsIG5hbWU6IGV2dC50YXJnZXQudmFsdWUgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY29tcGFueWlucHV0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBvbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgY29uc3QgZ2V0Q29tcGFuaWVzID0gKGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZU9wdGlvbnMgPSAob3B0aW9ucykgPT4ge1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgb25FcnJvcihvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcbiAgICAgICAgICAgIGNvbnN0IG90aGVyT3B0aW9uID0geyB2YWx1ZTogbnVsbCwgbGFiZWw6ICdPdGhlcicgfTtcbiAgICAgICAgICAgIGxldCBuZXdPcHRpb25zID0gWy4uLm9wdGlvbnMubWFwKGMgPT4gKHsgdmFsdWU6IGMuaWQudG9TdHJpbmcoKSwgbGFiZWw6IGMubmFtZSB9KSksIG90aGVyT3B0aW9uXTtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ld09wdGlvbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHF1ZXJ5UmVnaXN0cmF0aW9uQ29tcGFuaWVzKHN1bW1pdElkLCBpbnB1dCwgdHJhbnNsYXRlT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIHtmcmVlSW5wdXQgP1xuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgY29tcGFueVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgcGFkZGluZ1JpZ2h0OiAyNSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxpIGFyaWEtbGFiZWw9J0NsZWFyJyBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgYm90dG9tOiAxMCwgcmlnaHQ6IDI1LCBjdXJzb3I6ICdwb2ludGVyJywgb3BhY2l0eTogJzY1JScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUlucHV0Q2xlYXJ9IGNsYXNzTmFtZT0nZmEgZmEtY2xvc2UnPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICAvLyBQYXNzaW5nIG51bGwgaWYgbm8gbGFiZWwgYW5kIHZhbHVlIHRvIHNob3cgdGhlIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVWYWx1ZS5sYWJlbCAmJiB0aGVWYWx1ZS52YWx1ZSA/IHRoZVZhbHVlIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9J1NlbGVjdCBhIGNvbXBhbnknXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRPcHRpb25zPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17Z2V0Q29tcGFuaWVzfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpT3B0aW9uYWx9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2hhc0Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICApO1xuXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlZ2lzdHJhdGlvbkNvbXBhbnlJbnB1dDtcblxuUmVnaXN0cmF0aW9uQ29tcGFueUlucHV0LnByb3BUeXBlcyA9IHtcbiAgICBvbkVycm9yOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7IGNvbXBvbmVudHMgfSBmcm9tICdyZWFjdC1zZWxlY3QvbGliL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBxdWVyeVNwZWFrZXJzIH0gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNwZWFrZXJJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldFNwZWFrZXJzID0gdGhpcy5nZXRTcGVha2Vycy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvbkxhYmVsID0gdGhpcy5nZXRPcHRpb25MYWJlbC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzcGVha2VyaW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBoYW5kbGVDbGljayhzcGVha2VySWQpIHtcbiAgICAgICAgbGV0IHtoaXN0b3J5fSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaGlzdG9yeS5wdXNoKGAvYXBwL3NwZWFrZXJzLyR7c3BlYWtlcklkfWApO1xuICAgIH1cblxuICAgIGdldFNwZWFrZXJzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN1bW1pdElkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ3N1bW1pdElkJykpID8gdGhpcy5wcm9wcy5zdW1taXRJZCA6IG51bGw7XG5cbiAgICAgICAgcXVlcnlTcGVha2VycyhzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25WYWx1ZShzcGVha2VyKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvblZhbHVlXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvblZhbHVlKHNwZWFrZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gc3BlYWtlci5pZDtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25MYWJlbChzcGVha2VyKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvbkxhYmVsXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvbkxhYmVsKHNwZWFrZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gYCR7c3BlYWtlci5maXJzdF9uYW1lfSAke3NwZWFrZXIubGFzdF9uYW1lfSAoJHtzcGVha2VyLmlkfSlgO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgb25DaGFuZ2UsIGhpc3RvcnksIHN1bW1pdElkLCBlcnJvciwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG5cbiAgICAgICAgY29uc3QgTXVsdGlWYWx1ZUxhYmVsID0gKHByb3BzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxhIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlQ2xpY2socHJvcHMuZGF0YS5pZCl9IHN0eWxlPXt7Y3Vyc29yOiAncG9pbnRlcid9fT5cbiAgICAgICAgICAgICAgICAgICAgPGNvbXBvbmVudHMuTXVsdGlWYWx1ZUxhYmVsIHsuLi5wcm9wc30gLz5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0U3BlYWtlcnN9XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgTXVsdGlWYWx1ZUxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtzID0+IHRoaXMuZ2V0T3B0aW9uVmFsdWUocyl9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXtzID0+IHRoaXMuZ2V0T3B0aW9uTGFiZWwocyl9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeVNwb25zb3JzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3BvbnNvcklucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0U3BvbnNvcnMgPSB0aGlzLmdldFNwb25zb3JzLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgdHlwZTogJ3Nwb25zb3JpbnB1dCdcbiAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0U3BvbnNvcnMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQge3N1bW1pdElkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcXVlcnlTcG9uc29ycyhzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7ZXJyb3IsIHZhbHVlLCBvbkNoYW5nZSwgaWQsIG11bHRpLCBzdW1taXRJZCwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcHRpb24gPT4gb3B0aW9uLmlkfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17b3B0aW9uID0+IGAke29wdGlvbi5jb21wYW55Lm5hbWV9ICgke29wdGlvbi5zcG9uc29yc2hpcC5sYWJlbH0pYH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRTcG9uc29yc31cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5U3VtbWl0c30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1bW1pdElucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldFN1bW1pdHMgPSB0aGlzLmdldFN1bW1pdHMuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB0eXBlOiAnc3VtbWl0aW5wdXQnXG4gICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldFN1bW1pdHMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBxdWVyeVN1bW1pdHMoaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgZXJyb3IsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldFN1bW1pdHN9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcCA9PiBvcC5pZH1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wID0+IChgJHtvcC5uYW1lfSAoJHtvcC5pZH0pYCl9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5VGFnc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5pbXBvcnQge3NoYWxsb3dFcXVhbH0gZnJvbSBcIi4uLy4uL3V0aWxzL21ldGhvZHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFnSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUubWFwKCh0KSA9PiAoe3RhZzogdC50YWd9KSlcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0VGFncyA9IHRoaXMuZ2V0VGFncy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgaWYoIXNoYWxsb3dFcXVhbCh0aGlzLnByb3BzLnZhbHVlLCBwcmV2UHJvcHMudmFsdWUpKSB7XG4gICAgICAgICAgICBsZXQgbmV4dFZhbHVlID0gdGhpcy5wcm9wcy52YWx1ZS5tYXAoKHQpID0+ICh7dGFnOiB0LnRhZ30pKTtcblxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IG5leHRWYWx1ZX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RhZ2lucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0VGFncyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdW1taXRJZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdzdW1taXRJZCcpKSA/IHRoaXMucHJvcHMuc3VtbWl0SWQgOiBudWxsO1xuXG4gICAgICAgIHF1ZXJ5VGFncyhzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7Y2xhc3NOYW1lLCBlcnJvciwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG5cbiAgICAgICAgbGV0IG9yZGVyZWRUYWdzID0gdGhpcy5zdGF0ZS52YWx1ZS5zb3J0KChhLCBiKSA9PiAoYS50YWcudG9Mb3dlckNhc2UoKSA+IGIudGFnLnRvTG93ZXJDYXNlKCkgPyAxIDogKGEudGFnLnRvTG93ZXJDYXNlKCkgPCBiLnRhZy50b0xvd2VyQ2FzZSgpID8gLTEgOiAwKSkpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWUgKyAnICcgKyAoaGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17b3JkZXJlZFRhZ3N9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0VGFnc31cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wdGlvbiA9PiBvcHRpb24udGFnfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17b3B0aW9uID0+IG9wdGlvbi50YWd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSAhPT0gcHJldlByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZX0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZXYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBjbGFzc05hbWUsIGVycm9yLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGNsYXNzX25hbWUgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSA/IGNsYXNzTmFtZSA6ICdmb3JtLWNvbnRyb2wnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzX25hbWUgKyAnICcgKyAoaGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dEFyZWEgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudmFsdWUgIT09IHByZXZQcm9wcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IHRoaXMucHJvcHMudmFsdWV9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGV2KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29uQ2hhbmdlLCB2YWx1ZSwgY2xhc3NOYW1lLCBlcnJvciwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBjbGFzc19uYW1lID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBjbGFzc05hbWUgOiAnZm9ybS1jb250cm9sJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc19uYW1lICsgJyAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyl9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlUaWNrZXRUeXBlc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpY2tldFR5cGVzSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0VGlja2V0VHlwZXMgPSB0aGlzLmdldFRpY2tldFR5cGVzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uTGFiZWwgPSB0aGlzLmdldE9wdGlvbkxhYmVsLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uVmFsdWUodGlja2V0VHlwZSl7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25WYWx1ZVwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25WYWx1ZSh0aWNrZXRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIHRpY2tldFR5cGUuaWQ7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uTGFiZWwodGlja2V0VHlwZSl7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25MYWJlbFwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25MYWJlbCh0aWNrZXRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIGAke3RpY2tldFR5cGUubmFtZX1gO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0aWNrZXR0eXBlaW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRUaWNrZXRUeXBlcyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCB7c3VtbWl0SWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnlUaWNrZXRUeXBlcyhzdW1taXRJZCxpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge3ZhbHVlLCBlcnJvciwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0VGlja2V0VHlwZXN9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXttID0+IHRoaXMuZ2V0T3B0aW9uVmFsdWUobSl9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXttID0+IHRoaXMuZ2V0T3B0aW9uTGFiZWwobSl9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IGV4dGVuZCBmcm9tICdleHRlbmQnXG5pbXBvcnQgJ2Ryb3B6b25lL2Rpc3QvZHJvcHpvbmUuY3NzJztcbmltcG9ydCB7IEljb24gfSBmcm9tICcuL2ljb24nXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5sZXQgRHJvcHpvbmUgPSBudWxsO1xuLyoqXG4gKiBjbGFzcyBEcm9wem9uZUpTXG4gKi9cbmV4cG9ydCBjbGFzcyBEcm9wem9uZUpTIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtmaWxlczogW119O1xuICAgICAgICB0aGlzLm9uVXBsb2FkQ29tcGxldGUgPSB0aGlzLm9uVXBsb2FkQ29tcGxldGUuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBvblVwbG9hZENvbXBsZXRlKHJlc3BvbnNlKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5vblVwbG9hZENvbXBsZXRlKVxuICAgICAgICAgICAgdGhpcy5wcm9wcy5vblVwbG9hZENvbXBsZXRlKHJlc3BvbnNlLCB0aGlzLnByb3BzLmlkLCB0aGlzLnByb3BzLmRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gb2YgRHJvcHpvbmUuanMuIERlZmF1bHRzIGFyZVxuICAgICAqIG92ZXJyaWRlbiBieSB0aGUgJ2Rqc0NvbmZpZycgcHJvcGVydHlcbiAgICAgKiBGb3IgYSBmdWxsIGxpc3Qgb2YgcG9zc2libGUgY29uZmlndXJhdGlvbnMsXG4gICAgICogcGxlYXNlIGNvbnN1bHRcbiAgICAgKiBodHRwOi8vd3d3LmRyb3B6b25lanMuY29tLyNjb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgZ2V0RGpzQ29uZmlnICgpIHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBudWxsO1xuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIHVybDogdGhpcy5wcm9wcy5jb25maWcucG9zdFVybCA/IHRoaXMucHJvcHMuY29uZmlnLnBvc3RVcmwgOiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGpzQ29uZmlnKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gZXh0ZW5kKHRydWUsIHt9LCBkZWZhdWx0cywgdGhpcy5wcm9wcy5kanNDb25maWcpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zID0gZGVmYXVsdHNcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMuYWNjZXB0ID0gKGZpbGUsIGRvbmUpID0+IHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm1heEZpbGVzIDwgKHRoaXMuc3RhdGUuZmlsZXMubGVuZ3RoICsgdGhpcy5wcm9wcy51cGxvYWRDb3VudCkpIHtcbiAgICAgICAgICAgICAgICBkb25lKCdNYXggZmlsZXMgcmVhY2hlZCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFjdCAnY29tcG9uZW50RGlkTW91bnQnIG1ldGhvZFxuICAgICAqIFNldHMgdXAgZHJvcHpvbmUuanMgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0RGpzQ29uZmlnKCk7XG5cbiAgICAgICAgRHJvcHpvbmUgPSBEcm9wem9uZSB8fCByZXF1aXJlKCdkcm9wem9uZScpO1xuICAgICAgICBEcm9wem9uZS5hdXRvRGlzY292ZXIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuY29uZmlnLnBvc3RVcmwgJiYgIXRoaXMucHJvcHMuZXZlbnRIYW5kbGVycy5kcm9wKSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oJ05laXRoZXIgcG9zdFVybCBub3IgYSBcImRyb3BcIiBldmVudEhhbmRsZXIgc3BlY2lmaWVkLCB0aGUgUmVhY3QtRHJvcHpvbmUgY29tcG9uZW50IG1pZ2h0IG1pc2JlaGF2ZS4nKVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRyb3B6b25lTm9kZSA9IHRoaXMucHJvcHMuY29uZmlnLmRyb3B6b25lU2VsZWN0b3IgfHwgUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgICAgIHRoaXMuZHJvcHpvbmUgPSBuZXcgRHJvcHpvbmUoZHJvcHpvbmVOb2RlLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFjdCAnY29tcG9uZW50V2lsbFVubW91bnQnXG4gICAgICogUmVtb3ZlcyBkcm9wem9uZS5qcyAoYW5kIGFsbCBpdHMgZ2xvYmFscykgaWYgdGhlIGNvbXBvbmVudCBpcyBiZWluZyB1bm1vdW50ZWRcbiAgICAgKi9cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCAoKSB7XG4gICAgICAgIGlmICh0aGlzLmRyb3B6b25lKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuZHJvcHpvbmUuZ2V0QWN0aXZlRmlsZXMoKTtcblxuICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBXZWxsLCBzZWVtcyBsaWtlIHdlIHN0aWxsIGhhdmUgc3R1ZmYgdXBsb2FkaW5nLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZGlydHksIGJ1dCBsZXQncyBrZWVwIHRyeWluZyB0byBnZXQgcmlkXG4gICAgICAgICAgICAgICAgLy8gb2YgdGhlIGRyb3B6b25lIHVudGlsIHdlJ3JlIGRvbmUgaGVyZS5cbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlRGVzdHJveSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkZXN0cm95SW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5xdWV1ZURlc3Ryb3kgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmNsZWFySW50ZXJ2YWwoZGVzdHJveUludGVydmFsKVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJvcHpvbmUuZ2V0QWN0aXZlRmlsZXMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcHpvbmUgPSB0aGlzLmRlc3Ryb3kodGhpcy5kcm9wem9uZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmNsZWFySW50ZXJ2YWwoZGVzdHJveUludGVydmFsKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgNTAwKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3B6b25lID0gdGhpcy5kZXN0cm95KHRoaXMuZHJvcHpvbmUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFjdCAnY29tcG9uZW50RGlkVXBkYXRlJ1xuICAgICAqIElmIHRoZSBEcm9wem9uZSBoYXNuJ3QgYmVlbiBjcmVhdGVkLCBjcmVhdGUgaXRcbiAgICAgKi9cbiAgICBjb21wb25lbnREaWRVcGRhdGUgKCkge1xuICAgICAgICBjb25zdCB7Y29uZmlnLCBkanNDb25maWd9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgZGpzQ29uZmlnT2JqID0gZGpzQ29uZmlnID8gZGpzQ29uZmlnIDoge307XG4gICAgICAgIGNvbnN0IHBvc3RVcmxDb25maWdPYmogPSBjb25maWcgJiYgY29uZmlnLnBvc3RVcmwgPyB7IHVybDogY29uZmlnLnBvc3RVcmwgfSA6IHt9O1xuICAgICAgICB0aGlzLnF1ZXVlRGVzdHJveSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghdGhpcy5kcm9wem9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHJvcHpvbmVOb2RlID0gdGhpcy5wcm9wcy5jb25maWcuZHJvcHpvbmVTZWxlY3RvciB8fCBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZHJvcHpvbmUgPSBuZXcgRHJvcHpvbmUoZHJvcHpvbmVOb2RlLCB0aGlzLmdldERqc0NvbmZpZygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZHJvcHpvbmUub3B0aW9ucyA9IGV4dGVuZCh0cnVlLCB7fSwgdGhpcy5kcm9wem9uZS5vcHRpb25zLCBkanNDb25maWdPYmosIHBvc3RVcmxDb25maWdPYmopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlYWN0ICdyZW5kZXInXG4gICAgICovXG4gICAgcmVuZGVyICgpIHtcbiAgICAgICAgY29uc3QgaWNvbnMgPSBbXTtcbiAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgY29uc3QgeyBjb25maWcgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9ICh0aGlzLnByb3BzLmNsYXNzTmFtZSkgPyAnZmlsZXBpY2tlciBkcm9wem9uZSAnICsgdGhpcy5wcm9wcy5jbGFzc05hbWUgOiAnZmlsZXBpY2tlciBkcm9wem9uZSc7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5zaG93RmlsZXR5cGVJY29uICYmIGNvbmZpZy5pY29uRmlsZXR5cGVzICYmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoIDwgMSkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wcy5jb25maWcuaWNvbkZpbGV0eXBlcy5sZW5ndGg7IGkgPSBpICsgMSkge1xuICAgICAgICAgICAgICAgIGljb25zLnB1c2goPEljb24gZmlsZXR5cGU9e2NvbmZpZy5pY29uRmlsZXR5cGVzW2ldfSBrZXk9eydpY29uLWNvbXBvbmVudCcgKyBpfSAvPilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5jb25maWcucG9zdFVybCAmJiB0aGlzLnByb3BzLmFjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249e3RoaXMucHJvcHMuYWN0aW9ufSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgIHtpY29uc31cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdiBpZD17dGhpcy5wcm9wcy5pZH0gY2xhc3NOYW1lPXtjbGFzc05hbWV9PiB7aWNvbnN9IHt0aGlzLnByb3BzLmNoaWxkcmVufSA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWtlcyBldmVudCBoYW5kbGVycyBpbiB0aGlzLnByb3BzLmV2ZW50SGFuZGxlcnNcbiAgICAgKiBhbmQgYmluZHMgdGhlbSB0byBkcm9wem9uZS5qcyBldmVudHNcbiAgICAgKi9cbiAgICBzZXR1cEV2ZW50cyAoKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlcnMgPSB0aGlzLnByb3BzLmV2ZW50SGFuZGxlcnM7XG5cbiAgICAgICAgaWYgKCF0aGlzLmRyb3B6b25lIHx8ICFldmVudEhhbmRsZXJzKSByZXR1cm47XG5cbiAgICAgICAgZm9yICh2YXIgZXZlbnRIYW5kbGVyIGluIGV2ZW50SGFuZGxlcnMpIHtcbiAgICAgICAgICAgIGlmIChldmVudEhhbmRsZXJzLmhhc093blByb3BlcnR5KGV2ZW50SGFuZGxlcikgJiYgZXZlbnRIYW5kbGVyc1tldmVudEhhbmRsZXJdKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBhcnJheSBvZiBldmVudCBoYW5kbGVyc1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXZlbnRIYW5kbGVyc1tldmVudEhhbmRsZXJdKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50SGFuZGxlcnNbZXZlbnRIYW5kbGVyXS5sZW5ndGg7IGkgPSBpICsgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhbiBpbml0IGhhbmRsZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudEhhbmRsZXIgPT09ICdpbml0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlcnNbZXZlbnRIYW5kbGVyXVtpXSh0aGlzLmRyb3B6b25lKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3B6b25lLm9uKGV2ZW50SGFuZGxlciwgZXZlbnRIYW5kbGVyc1tldmVudEhhbmRsZXJdW2ldKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50SGFuZGxlciA9PT0gJ2luaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudEhhbmRsZXJzW2V2ZW50SGFuZGxlcl0odGhpcy5kcm9wem9uZSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcHpvbmUub24oZXZlbnRIYW5kbGVyLCBldmVudEhhbmRsZXJzW2V2ZW50SGFuZGxlcl0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRyb3B6b25lLm9uKCdhZGRlZGZpbGUnLCAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWxlKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5zdGF0ZS5maWxlcyB8fCBbXTtcblxuICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBmaWxlcyB9KVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRyb3B6b25lLm9uKCdyZW1vdmVkZmlsZScsIChmaWxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSB0aGlzLnN0YXRlLmZpbGVzIHx8IFtdO1xuICAgICAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZUluRmlsZXMsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZUluRmlsZXMubmFtZSA9PT0gZmlsZS5uYW1lICYmIGZpbGVJbkZpbGVzLnNpemUgPT09IGZpbGUuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBmaWxlcy5zcGxpY2UoaSwgMSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZpbGVzIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZHJvcHpvbmUub24oJ3VwbG9hZHByb2dyZXNzJywgKGZpbGUsIHByb2dyZXNzLCBieXRlc1NlbnQpID0+IHtcbiAgICAgICAgICAgIHByb2dyZXNzID0gYnl0ZXNTZW50IC8gZmlsZS5zaXplICogMTAwO1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZXMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3F1ZXJ5U2VsZWN0b3JcbiAgICAgICAgICAgIC8vbGV0IGVsZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHt0aGlzLnByb3BzLmlkfSAuZHotdXBsb2FkYCk7XG4gICAgICAgICAgICBpZihmaWxlLnByZXZpZXdFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW0gPSBmaWxlLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1kei11cGxvYWRwcm9ncmVzc11cIik7XG5cbiAgICAgICAgICAgICAgICBpZihlbGVtLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtWzBdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVsZW0pXG4gICAgICAgICAgICAgICAgICAgIGVsZW0uc3R5bGUud2lkdGggPSBwcm9ncmVzcyArIFwiJVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRyb3B6b25lLm9uKCdzZW5kaW5nJyAsIChmaWxlLCB4aHIsIGZvcm1EYXRhKSA9PiB7XG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdhY2Nlc3NfdG9rZW4nKSkge1xuICAgICAgICAgICAgICAgIC8vIG9hdXRoMiB0b2tlblxuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcImFjY2Vzc190b2tlblwiLCB0aGlzLnByb3BzLmFjY2Vzc190b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHRyYWNrIGFsbCByZXF1ZXN0IHNvIHdlIGNhbiBnZXQgdGhlIGNvcnJlY3QgcmVxdWVzdCB0aGF0IHJldHVybnMgZmluYWwgcmVzcG9uc2U6XG4gICAgICAgICAgICAvLyBXZSB3aWxsIGNoYW5nZSB0aGUgbG9hZCBjYWxsYmFjayBidXQgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSB3aWxsIGNhbGwgb3JpZ2luYWxcbiAgICAgICAgICAgIC8vIGxvYWQgY2FsbGJhY2sgZnJvbSBkcm9wem9uZVxuICAgICAgICAgICAgbGV0IGRyb3B6b25lT25Mb2FkID0geGhyLm9ubG9hZDtcbiAgICAgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGRyb3B6b25lT25Mb2FkKGUpO1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBmaW5hbCBjaHVuayBhbmQgZ2V0IHRoZSByZXNwb25zZVxuICAgICAgICAgICAgICAgIGxldCB1cGxvYWRSZXNwb25zZSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGxvYWRSZXNwb25zZS5uYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5vblVwbG9hZENvbXBsZXRlKHVwbG9hZFJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBBTEwgbGlzdGVuZXJzIGFuZCBEZXN0cm95cyBkcm9wem9uZS4gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbnlvL2Ryb3B6b25lL2lzc3Vlcy8xMTc1XG4gICAgICovXG4gICAgZGVzdHJveSAoZHJvcHpvbmUpIHtcbiAgICAgICAgZHJvcHpvbmUub2ZmKCk7XG4gICAgICAgIHJldHVybiBkcm9wem9uZS5kZXN0cm95KClcbiAgICB9XG59XG5cbkRyb3B6b25lSlMuZGVmYXVsdFByb3BzID0ge1xuICAgIGRqc0NvbmZpZzoge30sXG4gICAgY29uZmlnOiB7fSxcbiAgICBldmVudEhhbmRsZXJzOiB7fSxcbiAgICBkYXRhOiB7fSxcbn07XG5cbkRyb3B6b25lSlMucHJvcFR5cGVzID0ge1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERyb3B6b25lSlM7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgY29uc3QgSWNvbiA9IChwcm9wcykgPT4ge1xuICAgIHJldHVybiAoPGRpdiBkYXRhLWZpbGV0eXBlPXtwcm9wcy5maWxldHlwZX0gY2xhc3NOYW1lPSdmaWxlcGlja2VyLWZpbGUtaWNvbicgLz4pXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgRHJvcHpvbmVKUyBmcm9tICcuL2Ryb3B6b25lJ1xuaW1wb3J0ICcuL2luZGV4Lmxlc3MnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVcGxvYWRJbnB1dFYyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgb25SZW1vdmUsIGVycm9yLCBtZWRpYVR5cGUsIHBvc3RVcmwsIG1heEZpbGVzID0gMSwgdGltZU91dCwgb25VcGxvYWRDb21wbGV0ZSwgZGpzQ29uZmlnLCBpZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPT0gJycgKTtcbiAgICAgICAgY29uc3QgYWxsb3dlZEV4dCA9IG1lZGlhVHlwZSAmJiBtZWRpYVR5cGUudHlwZSA/IG1lZGlhVHlwZS50eXBlLmFsbG93ZWRfZXh0ZW5zaW9ucy5tYXAoKGV4dCkgPT4gYC4ke2V4dC50b0xvd2VyQ2FzZSgpfWApLmpvaW4oXCIsXCIpIDogJyc7XG4gICAgICAgIGNvbnN0IG1heFNpemUgPSBtZWRpYVR5cGUgPyBtZWRpYVR5cGUubWF4X3NpemUgLyAxMDI0IDogMTAwO1xuICAgICAgICBjb25zdCBjYW5VcGxvYWQgPSB2YWx1ZS5sZW5ndGggPCBtYXhGaWxlcztcblxuICAgICAgICBjb25zdCBkanNDb25maWdTZXQgPSB7XG4gICAgICAgICAgICBwYXJhbU5hbWU6IFwiZmlsZVwiLCAvLyBUaGUgbmFtZSB0aGF0IHdpbGwgYmUgdXNlZCB0byB0cmFuc2ZlciB0aGUgZmlsZSxcbiAgICAgICAgICAgIG1heEZpbGVzaXplOiBtYXhTaXplLCAvLyBNQixcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRpbWVPdXQgfHwgKDEwMDAgKiA2MCAqIDEwKSxcbiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLFxuICAgICAgICAgICAgcmV0cnlDaHVua3M6IHRydWUsXG4gICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsXG4gICAgICAgICAgICBhZGRSZW1vdmVMaW5rczogdHJ1ZSxcbiAgICAgICAgICAgIG1heEZpbGVzOiBtYXhGaWxlcyxcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXM6IGFsbG93ZWRFeHQsXG4gICAgICAgICAgICBkcm9wem9uZVNlbGVjdG9yOiBgbWVkaWFfdXBsb2FkXyR7bWVkaWFUeXBlLmlkfWAsXG4gICAgICAgICAgICAuLi5kanNDb25maWdcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50Q29uZmlnID0ge1xuICAgICAgICAgICAgc2hvd0ZpbGV0eXBlSWNvbjogZmFsc2UsXG4gICAgICAgICAgICBwb3N0VXJsOiBwb3N0VXJsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBtZWRpYV90eXBlOiBtZWRpYVR5cGUsXG4gICAgICAgICAgICBtZWRpYV91cGxvYWQ6IHZhbHVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBldmVudEhhbmRsZXJzID0ge307XG4gICAgICAgIGlmIChvblJlbW92ZSkge1xuICAgICAgICAgICAgZXZlbnRIYW5kbGVycyA9IHtyZW1vdmVkZmlsZTogb25SZW1vdmV9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNlwiICBzdHlsZT17e2hlaWdodDogMTgwfX0+XG4gICAgICAgICAgICAgICAgICAgIHtjYW5VcGxvYWQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcHpvbmVKU1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkanNDb25maWc9e2Rqc0NvbmZpZ1NldH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc9e2NvbXBvbmVudENvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudEhhbmRsZXJzPXtldmVudEhhbmRsZXJzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkQ291bnQ9e3ZhbHVlLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblVwbG9hZENvbXBsZXRlPXtvblVwbG9hZENvbXBsZXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsZXBpY2tlciBkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heCBudW1iZXIgb2YgZmlsZXMgdXBsb2FkZWQgZm9yIHRoaXMgdHlwZSAtIFJlbW92ZSB1cGxvYWRlZCBmaWxlIHRvIGFkZCBuZXcgZmlsZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB7dmFsdWUubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+VXBsb2FkZWQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZS5tYXAoKHYsaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2B1cGxvYWRlZC0ke2l9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj17di5wcml2YXRlX3VybCB8fCB2LnB1YmxpY191cmx9IHRhcmdldD1cIl9ibGFua1wiPnt2LmZpbGVuYW1lfTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b25SZW1vdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IC0gPGEgb25DbGljaz17ZXYgPT4gb25SZW1vdmUodil9PlJlbW92ZTwvYT48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFnQUFBQUlBQ0FZQUFBRDBlTlQ2QUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFMRXdBQUN4TUJBSnFjR0FBQUVIMUpSRUZVZUp6dDNYL3M3WFZCeC9IWDVmSkx1QWhNS3hDSFA5Z1VSQ09WaUg0b2lXVTF5TEowaEloVXE3aHRydlZySVc1UnRHcHU1Y3BwbE9XdmpGTEtpc0lmdWJubEttM1ZIOVhNWldra1dLTmltWkkvSUg3Yy9qaGdtTkU5NTk3ek9lL1BPYS9IWS92K3hZZlBlVjIrWDg3M2VjK1B6MGtBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQjEyak42QUlmbGpDUVhKamszeVJPVFBDN0ppVW4ySmRrN2NCY3dEODlMY3VOQmp2bmVKSzlQY3RmMGM1aVRJMGNQWUdXbko3a2l5WXVTUEdId0ZtRDdYWkRrR1VrdVMzSmc4QlkyU0FCc2p6T1R2Q3pKcGZGOUE5YnIwaVMzSm5ucDZDRnN6aEdqQjNCUSs1SzhJc243azF3ZXYveUJhVnlWWlAvb0VXeU9YeWJ6ZGw2U0c1SThkdkFPb01PcmszdzB5ZHRIRDJGNkhnR1lyeXVUL0VuODhnYzJaMjhXZitsNCt1Z2hURThBek5PMVNYNHB5VkdqaHdCMWpzL2lFWURIRHQ3QnhBVEEvUHg0a210R2p3Q3FmVkdTZHlRNWVmUVFwaU1BNXVYS0pEODJlZ1JBa3JPeXVJYkFNYU9ITUEwQk1CL25KWG5WNkJFQUQvTE1KRytJaThidEpPOENtSWQ5V2J6dzVuQ2U4Lzlva2o5TGNuT1NPNUxjdTRaZHdQenN5ZkovSy8vZ0dtN3YwaVMzSkxsNkRlY0MvcGRYWkhFRnJsVy9QcG5rNTVNOFpmT1RnUjN4bGl4M2YzUGxxSUd3cTg1TWNuZFcvK1YvZlJZdjFBRTRITXNHd0QxSkxocTBFWGJTbTdMYUwvNjdrcng0eUZKZ0Z5MGJBQTg4NnVnYUFiQUdwMmUxdi8zZmxlVHJoaXdGZHRVcUFYQWd5VzFKSGpOa0tXdmxYUUJqWFpIVlhvajUzVW5lTmRFV2dHV2NrdVNkU1U0YVBRUzIyZDlsdGVmOEFkWnQxVWNBSHZoNlQ1S2pOejhYdHQ4WldlMTVOeS80QTZad3FBRndJTWx2eERVQ3RwYW5BTWE1Y0lWalg1dmtYNmNhQW5DSUxrM3kwNk5Id0xaNVRaYXZiTy96QjZaeU9JOEFQUERsR2dHd2d2ZGt1Zit4YmhtMEQraXdqZ0J3allBdDVDbUFjUjYzNUhGL1B1a0tnTU8zTjR2TG1idEd3QllSQU9PY3VPUnhOMCs2QW1BOWprL3l0cmhHd05ZUUFPUHNXL0s0T3laZEFiQStyaEd3UlFUQU9IdVhQTTZuK2dIYjVLd2tOOFkxQW1aUEFBQ3diaGNrZVVOY0kyRFdCQUFBVTNoaGtwOGFQWUtISmdBQW1NclZXWHlHQ1RNa0FBQ1kwblZKdm1IMENENmZBQUJnU2tjbStjMGtUeDA5aE04bEFBQ1kycjRrYjA5eSt1Z2gvQThCQU1BbW5KcmtIVm4rSW1oTVRBQUFzQ2xuSi9tZEpFZU5Ib0lBQUdDekxrenl1dEVqRUFBQWJON2xTWDVpOUloMkFnQ0FFWDQweVhlT0h0Rk1BQUF3eW11U1BHZjBpRllDQUlCUmprenkxaVRuakI3U1NBQUFNTklKV1Z3ajROR2poN1FSQUFDTWRsb1dFZkR3MFVPYUNBQUE1dUNMczNnNjRNalJRMW9JQUFEbTRtdVQvUExvRVMwRUFBQno4aDFKcmhrOW9vRUFBR0J1cmszeTR0RWpkcDBBQUdDT1hwdkZaWU9aaUFBQVlJNk95dUtEZzg0ZVBXUlhDUUFBNXVyRUxENUMrTlRSUTNhUkFBQmd6azVQOHJZa3g0OGVzbXNFQUFCejk3UWtOeVRaTzNySUxoRUFBR3lEaTVLOGV2U0lYU0lBQU5nVys1UDh5T2dSdTBJQUFMQk5YcDdra3RFamRvRUFBR0NiN0VueXEwbSthdlNRYlNjQUFOZzJ4eVM1TWNrVFJnL1paZ0lBZ0czMGlDeXVFZkFGbzRkc0t3RUF3TFk2SThsTlNSNDJlc2cyRWdBQWJMTXZTM0o5L0Q1Ym1mOWdBR3k3YjBueXM2TkhiQnNCQU1BdStJRWtMeGs5WXBzSUFBQjJ4U3VUUEhmMGlHMGhBQURZRlVja2VYT1NjMGNQMlFZQ0FJQmRjbHdXN3d4NHpPZ2hjeWNBQU5nMXAyUnhqWUNUUmcrWk13RUF3QzU2VXBMZlRuTFU2Q0Z6SlFBQTJGVVhKdm1WMFNQbVNnQUFzTXV1U0hMTjZCRnpKQUFBMkhYWEpublI2QkZ6SXdBQWFQQzZKQmVNSGpFbkFnQ0FCa2NuK2Qwa1R4dzlaQzcyakI2d0l3Nk1IZ0FsYmtqeWJhTkg3SmkzSkxsazlJZ051am5KK1VsdUh6MWtOSThBQU5EazhVbCtQOG14bzRlTUpnQUFhSE4ra2plbC9GRndBUUJBb3hjaytjblJJMFlTQUFDMGVsbVNieDg5WXBRalJ3OEFZS2ozalI0dzJMT3llRTNBeDBZUDJiVHE1ei9XeUxzQVlETzhDd0RXeEZNQUFGQklBQUJBSVFFQUFJVUVBQUFVRWdBQVVNamJBTGZYZlVsdUd6M2lJZXhMY3VKQmp2bFVrbyt2Y003VERuM09WcG56OS9YQmprbnl5TkVqZ0VNbkFMYlg3VWtlUFhyRVEvamhKRDl6a0dPdVQ3Si95Zk1kbStReks5eis5Mlg1RC9wNGZwSnZYZUhjVS91UHpQZjcrbUJmbitTZG8wY0FoMDRBc0l0dVN2S1JKWTg5TS9NS0FHQTlqa2h5M0pMSDNwbmtuZ20zekpMWEFBQ3dpNTZVNUQrWC9IcitvSTFEQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkRyQVBUWW4rVEpHN3F0TDluUTdiRFo3K3VEblQ3Z05vRTFFZ0E5TGs1eTBlZ1JySjN2SzNCSVBBVUFBSVVFQUFDNzZPN1JBK1pPQUFDd2krNGRQV0R1QkFBQUZCSUFBRkJJQUFCQUlRRUFBSVVFQUFBVUVnQUFVRWdBQUVBaGx3S0c3ZmFKSlArK3dkczdOc254Rzd3OVlDSUNvTWNIa3B3MDBibVBTL0xVaWM3Ti8rK3lEZC9lL2lTL3VPSGJCQ1lnQUhwY05lRzVuNXprL1JPZUg0QTE4eG9BQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUXE0REFOdHRmeGJYWWRpVXN6ZDRXOENFQkVDUGE1S2NOOUc1VDVqb3ZCemN4VWt1R2owQzJENENvTWQ1OFlzQ2dQdDVEUUFBRkJJQUFGQklBQUJBSVFFQUFJVUVBQUFVRWdBQVVFZ0FBRUFoQVFBQWhRUUFBQlFTQUFCUVNBQUFRQ0VCQUFDRmZCZ1E3VzVOOHQ0TjN0NitKT2VzOFh3ZlNITFNHcyszaW5YL1dZQU5FZ0MwZS8zOVg1dHlicEsvV09QNXJscmp1VmExN2o4THNFR2VBZ0NBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBc0JiYStUazd4N2hlUG5kc1cyaTdQOC9sVkQ5Zm9rZDY3NDcyektDUWY1NXcvUGF0L1hrUTcyWndGbVRBQnNyNk9UUEh2MGlNTncydjFmVS9qS2ljNjdDVWRsdTcrdndKYndGQUFBRkJJQUFGQklBQUJBSVFFQUFJVUVBQUFVRWdBQVVFZ0FBRUFoQVFBQWhRUUFBQlFTQUFCUVNBQUFRQ0dmQmJBZWV3N2gzem13NUhGWEozbjVJWndmQUI2U1J3QUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0NBZGdkR0R4aEJBSXh6ejVMSEhUWHBDb0RkZE13S3g5NDkyWW9aRXdEamZITEo0MDZaZEFYQWJqcDFoV1B2bUd6RmpBbUFjVzViOHJpblRMb0NZRGV0Y3QvNUw1T3RtREVCTU00L0xIbmNlVW1PbjNJSXdBNTYxcExIM1pmazVpbUh6SlVBR09ldmxqenVtQ1RmTk9VUWdCMXpjcExuTEhuc2g1Tjhlc0l0c3lVQXhubmZDc2QrLzJRckFIYlAvaXovSXNEM1Rqa0UvaS9ISmJremk3ZWZMUFAxZ2pFekFiYktJNU44TE12ZnQxNHlaaWJ0YnN6eVA2UzNKZm5DTVRNQnRzWnZaZm43MWM4a09XSE1UTnA5YzViL1FUMlE1SStTSER0a0tjRDh2VFNyM2FmKytwaVprT3hOOG85WjdRZjJYVW4yalJnTE1HTS9sTlh1U3c4a09YL0lVcmpmbFZuOWgvWnY0dm9BQU1uaUlmdzNadlg3MFhjUDJBcWY0OGdrZjV2VmYzai9LOG5QWmJXclhRSHNpcU9UZkZlU2Y4N3E5NS8zSm5uNjVpZkQ1M3RXVnY4QmZuQUkvRjZTNzBseVRyeWdCZGhOUnlkNWZKTG5KYmt1eWIvbDBPODNmMkhEMjJkcHorZ0JmTmFya3J4a1RlZTZMNHNmY29CZHNYZE41L2xRa3FkbCtjOWoyVmtDWUQ2T1NmTEhTYjUwOUJDQUhmWHBKRitSNUs5SEQ1a0RWd0tjajd1eXVPVHZMYU9IQU95Z2U1TmNGci84UDBzQXpNdHRTYjRteVQrTkhnS3dRKzdMNGdXRE40NGVNaWNDWUg0K25PUVpTVDQ0ZWdqQURyZ3ppOHY5dm5Id2p0a1JBUFAwa1NSZm51U213VHNBdHRtdFNaNlo1SzJqaDh6UnVsNVZ5ZnJkbWVUTlNXNVBja0VXYjRFQllEblhKM2x1a3B0SEQ1a3Jqd0RNMzNWSnprcnlhMWs4andYQVEvdkxKTTlPY25tU2p3L2VNbXZlQnJoZHprenlnMGxlbU9UNHdWc0E1dUpBa2o5TThzb3NuanAxSFpRbENJRHR0Qy9KeFVtK01jbFhKM25VMERVQW0vZXBKSCthNUEreWVJN2ZXNmhYSkFCMnc2T3llSnJnOUNTUFNQS3dlSDBIc0RzT1pIR3RsRTlrY2UzL0R5WDUreXplMnc4QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUxCOS9odDh4bVh4U2dOZStRQUFBQUJKUlU1RXJrSmdnZz09XCIiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRHJvcHpvbmUgZnJvbSAncmVhY3QtZHJvcHpvbmUnO1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnO1xuaW1wb3J0ICcuL3VwbG9hZC5sZXNzJztcblxuaW1wb3J0IGZpbGVfaWNvbiBmcm9tICcuL2ZpbGUucG5nJztcbmltcG9ydCBwZGZfaWNvbiBmcm9tICcuL3BkZi5wbmcnO1xuaW1wb3J0IG1vdl9pY29uIGZyb20gJy4vbW92LnBuZyc7XG5pbXBvcnQgbXA0X2ljb24gZnJvbSAnLi9tcDQucG5nJztcbmltcG9ydCBqcGdfaWNvbiBmcm9tICcuL2pwZy5wbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVcGxvYWRJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHNob3dfcmVtb3ZlOiBmYWxzZSxcbiAgICAgICAgICAgIGxvZ29fcHJldmlldzoge1xuICAgICAgICAgICAgICAgIHByZXZpZXc6IG51bGwsXG4gICAgICAgICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWxlSGFzUHJldmlldyA9IHRoaXMuZmlsZUhhc1ByZXZpZXcuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBvbkRyb3AoYWNjZXB0ZWRGaWxlcywgZmlsZVJlamVjdGlvbnMsIGV2dCkgeyAgICAgICAgXG4gICAgICAgIGlmKGFjY2VwdGVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IGZpbGUgPSBhY2NlcHRlZEZpbGVzWzBdO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVVcGxvYWQoZmlsZSwgdGhpcy5wcm9wcyk7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbG9nb19wcmV2aWV3OlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aWV3OiBmaWxlLnByZXZpZXcsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgaWYoZmlsZVJlamVjdGlvbnMubGVuZ3RoID4gMCAmJiB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiaGFuZGxlRXJyb3JcIikpXG4gICAgICAgICAgICB0aGlzLnByb3BzLmhhbmRsZUVycm9yKGZpbGVSZWplY3Rpb25zLCB0aGlzLnByb3BzKVxuICAgIH1cblxuICAgIG9uUmVtb3ZlKGV2KXtcbiAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVSZW1vdmUoZXYsIHRoaXMucHJvcHMpO1xuICAgIH1cblxuICAgIHNob3dWZWlsKCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsuLi50aGlzLnN0YXRlLCBzaG93X3JlbW92ZTp0cnVlfSk7XG4gICAgfVxuXG4gICAgaGlkZVZlaWwoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoey4uLnRoaXMuc3RhdGUsIHNob3dfcmVtb3ZlOmZhbHNlfSk7XG4gICAgfVxuXG4gICAgZmlsZUhhc1ByZXZpZXcoZmlsZU5hbWUpe1xuICAgICAgICBpZighZmlsZU5hbWUpIHJldHVybiBmYWxzZTtcbiAgICAgICAgbGV0IHBhdHRlcm4gPSAvKC4qKVxcLihnaWZ8Ym1wfHN2Z3xqcGU/Z3xwbmcpL2dcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChmaWxlTmFtZSk7XG4gICAgfVxuXG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIGZpbGUsIGhhbmRsZVJlbW92ZSwgaGFuZGxlVXBsb2FkLCBoYW5kbGVFcnJvciwgZmlsZU5hbWUsIGVycm9yLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7bG9nb19wcmV2aWV3LCBzaG93X3JlbW92ZX0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9PSAnJyApO1xuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlICggcmVzb3VyY2UgKVxuICAgICAgICBsZXQgaWNvbiA9IGZpbGVfaWNvbjtcblxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmKCFmaWxlTmFtZSkgZmlsZU5hbWUgPSB2YWx1ZS5zbGljZSh2YWx1ZS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlICYmIGZpbGUuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpICYmIGZpbGUubmFtZSkge1xuICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgIC8vIGZpbGVzIHdpdGhvdXQgcHJldmlld1xuICAgICAgICBpY29uID0gIChmaWxlTmFtZSAmJiBmaWxlTmFtZS5lbmRzV2l0aCgncGRmJykgPyBwZGZfaWNvbjogaWNvbik7XG4gICAgICAgIGljb24gPSAgKGZpbGVOYW1lICYmIGZpbGVOYW1lLmVuZHNXaXRoKCdtb3YnKSA/IG1vdl9pY29uOiBpY29uKTtcbiAgICAgICAgaWNvbiA9ICAoZmlsZU5hbWUgJiYgZmlsZU5hbWUuZW5kc1dpdGgoJ21wNCcpID8gbXA0X2ljb246IGljb24pO1xuXG4gICAgICAgIC8vIGlmIGZpbGUgaGFzIHByZXZpZXcgKCBhbHJlYWR5IG9uIGRhdGEgbW9kZWwpXG4gICAgICAgIGlmKHRoaXMuZmlsZUhhc1ByZXZpZXcoZmlsZU5hbWUpICYmIHZhbHVlKXtcbiAgICAgICAgICAgIGljb24gPSB2YWx1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvZ29fcHJldmlldy5wcmV2aWV3ICYmIGxvZ29fcHJldmlldy5uYW1lKSB7XG4gICAgICAgICAgICBpY29uID0gbG9nb19wcmV2aWV3LnByZXZpZXc7XG4gICAgICAgICAgICBmaWxlTmFtZSA9IGxvZ29fcHJldmlldy5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsZS11cGxvYWRcIj5cbiAgICAgICAgICAgICAgICA8RHJvcHpvbmVcbiAgICAgICAgICAgICAgICAgICAgb25Ecm9wPXt0aGlzLm9uRHJvcC5iaW5kKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdj57VC50cmFuc2xhdGUoXCJnZW5lcmFsLmRyb3BfZmlsZXNcIil9PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9Ecm9wem9uZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlbGVjdGVkLWZpbGVzLWJveCBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICA8cD5TZWxlY3RlZCBGaWxlczwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWxlY3RlZC1maWxlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbGUtYm94XCIgb25Nb3VzZUVudGVyPXt0aGlzLnNob3dWZWlsLmJpbmQodGhpcyl9IG9uTW91c2VMZWF2ZT17dGhpcy5oaWRlVmVpbC5iaW5kKHRoaXMpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17aWNvbn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXt2YWx1ZX0gdGFyZ2V0PVwiX2JsYW5rXCI+e2ZpbGVOYW1lfTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2hvd19yZW1vdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbW92ZVwiIG9uQ2xpY2s9e3RoaXMub25SZW1vdmUuYmluZCh0aGlzKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApXG4gICAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBZ0FBQUFJQUNBTUFBQUREcGlUSUFBQUFBM05DU1ZRSUNBamI0VS9nQUFBQUNYQklXWE1BQUF6ZUFBQU0zZ0VUVUJCNkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCM2QzY3VhVzVyYzJOaGNHVXViM0pubSs0OEdnQUFBdnBRVEZSRi8vLy9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBV3NBYzl3QUFBUDEwVWs1VEFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2RIaDhnSVNJakpDVW1KeWdwS2lzc0xTNHZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldsdGNYVjVmWUdGaVkyUmxabWRvYVdwcmJHMXViM0J4Y25OMGRYWjNlSGw2ZTN4OWZuK0FnWUtEaElXR2g0aUppb3VNalk2UGtKR1NrNVNWbHBlWW1acWJuSjJlbjZDaG9xT2twYWFvcWFxcnJLMnVzTEd5czdTMXRyZTR1YnE3dkwyK3Y4REJ3c1BFeGNiSHlNbkt5OHpOenMvUTBkTFQxTlhXMTlqWjJ0dmMzZDdmNE9IaTQrVGw1dWZvNmVycjdPM3U3L0R4OHZQMDlmYjMrUG42Ky96OS9vOWFISmNBQUJVN1NVUkJWSGphN2QxNWZFMW5HZ2Z3YzdPSmtJUklDYkZFYTZKQ2hkcW14cjYyMmdsdFVFUXNnNkYwVVlUV3RKaFl5cFNtUmF2RGxJeWxvWWJhSXZabFdscGIwZ2lwcFZLdDZKQ0lXRUsyKzN3K1E5ZG83cjNudmZjc2VkKzh2OS9mM25QZTh6eGZOL2UrWjFNVUErTGJmK20yNUN0V2tpNDVKK0k3S3JMSFBYcnJYWkk0cVozazduOUVHa21lb3JFU3R6L2tJQ0UwWDlyK2Q3eUs3dC9QWkVuN1A3b0F2Zjh4MXVlbDdQOGdkUDZYM0cwdllmOWI1S0h4ditiYW85TDF2L3BGdEwxRUx0U1FEVUE4bXY1QWpsU1NxLy9oeGVqNWc5bnNMaFdBSkhUODkxa2lVLzlibzkrbE0wVWlBSFBSYmh2TEFRUGtBWEFhN2JhMUhOQkJsdjZIb3RtMmx3TWFTUUlnQ3IyMnN4d1FKQWVBR0xUYVRvN0tzUndRaDA3Ynl4WXBsZ01TMEdpNytWQUdBSWsyRG54MGtCeDVURTNBYXhJQTJHN2p1R1g1RVJ5a3Vod3dFQUNrQmtENUhRRkFhZ0NVMHdnQXBBWkFHVUVBSURVQU9sWUpBS1FHUUZ2ZEFVQnFBUFJQQUpBYkFMME9BSElEc0E0Q0FLa0JVSDRuQUpBYUFPV0VBWURVQUNpakpnQklEWUNPVlFZQXFRSFFOZzhBa0JvQUxRVUF1UUhRVkFDUUc0QTFDZ0NrQmtENW5RRkFhZ0NVMHhnQXBBWkEzOVlFQUtrQjBQSEtBQ0ExQUVyMEFBQ3BBZEF5QUpBYkFQME5BT1FHUUlNQlFHNEErVjBBUUdvQWRMMHhBRWdOZ0M3V0FnQ3BBZEFKWHdDUUdnQnQ5d0FBcVFIUXZ3QkFiZ0QwQmdESURZQ2lBVUJ1QUFWZEFVQnFBSFM5Q1FCSURhQjhMQWNBZ0lZayt3S0ExQUFveVFNQXBBWkFId0dBM0FCb0dnRElEWUNHQUlEY0FFUmZEZ0FBcmNsOURBQ2tCa0RmQlFPQTFBREVYZzRBQUIyeXd3TUFwQVpBeXdGQWJnQTBIUURrQmtCREFVQnVBQVhkQUVCcUFKVGJGQUNrQmlEcWNnQUE2SllVUHdDUUdnRHQ4QVFBcVFIUUNnQ1FHd0ROQUFDNUFkQndBSkFiUUVGM0FKQWFnSGpMQVFDZ2M3NnZEUUJTQTZDdi9BQkFhZ0MwMHhNQXBBWkE4UUFnTndENk93RElEWUQrQWdCeUF5anNBUUJTQTZBYjRRQWdOUUM2VkFjQXBBWkFxZjRBSURVQTJ1VUpBRklEb0g4RGdOd0FLQllBNUFaQUl3QkFiZ0NGUFFGQWFnQjBveGtBU0ExQWdPVUFBREEyM0M4SEFJREIyZTBKQUZJRG9KVUFJRGNBbWdrQWNnT2drUUFnTjREQ0p3RkFhZ0Iwc3prQVNBMkFNdXNDZ05RQTZLUS9BRWdOZ1BaNEFZRFVBR2dWQU1nTmdHWUJnTndBYUJRQXlBMmc4Q2tBa0JvQW44c0JBR0JpZUZ3T0FBQXprMVlGQUtRR1FIdTlBRUJxQUxUYUFnQlNBNkNYQUVCdUFEbUJBQ0ExQVBvUUFPUUdVQndBQUZJRG9JNEFJRGVBY1FEQVNXcVVEWUFQQUlDVFdITExCTUJHQU9BbGU4b0V3SFlBNENWekFVQnVBQkVBSURjQXkxNEFrQnFBRW5JVEFLUUdvSXdDQUxrQktIMnZBb0RVQUpUcUd3QkFhZ0NLRWpwdy90NTBnM0xKUm5rVEFVQ2VETUFuQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ05RQUFudVBuYlVpS1RXalJPN1ltT0dsZE1UQVY4YmNLVm4vMUtRVnM4YjJEalNqKzMrWWRLQ1lFQzVUdEc5OGlMSGRyekR4Rk1yTWQwNk04elNzL1c3UjM2TEEvT2Y4UUlzeC9lOXhBc1VWSThlNkc5QityMlVvckRoWjVxVjMveDg2Z0txS2xBTVA2ZHYvcGhtb3FWakphS3Jybi85YnFLaG91ZFZEdi82SDVhS2U0aVUzVEsvK0I1eEROVVhNdVFCOSt1K3hHN1VVTTdzOWRBR3dFSlVVTll2MDZIOHJLd29wYXF5dGRBQ3dGM1VVTjN1MTkvOXBWRkhrUEszNUJGQXFpaWh5VXQwMEFoaUNHb3FkSVJvQjdFQUp4YzRPYmYzM0swQUp4VTZCbnlZQXo2T0NvdWQ1VFFEV29JQ2laNDJtVmVBY0ZGRDA1R2haRDI2TStwbVZPem1aMytVVUdySGx4aG9BZEJleGxNVzUzNTA2dk9NL0t4Yk9mMnZtdEttVFgzMXB6TWloVWYyZjYvZVg4Vy8rWThucVRYdVBmcDE1azR2bDdadW50aTk3YzFqWHh4b0VCMVQ4K1RwTzc4RDZqejNSNDdraDQ2Yk1pdi9zaWo2NzBYS0I0RENEU3pCbnZFb21NWGY5MHFHMWI3L2NwM1hEV3BWWnJvbDFxL0xIdjc1LzhIcFp0ZjdHZ1hlSE5LdWlPa3YvbGdPbnJUeVVwWEZud3pRQW1HcHdJUjVWbTRDMzJoWnlVN2N1bVRxNFE0aHJGOE9IUkx6eHlkZm0zdWR5YStlOEFhSE9YYmRkOVltWXJSb3V5Wm1xQWNCaXJnRzgzYXVKdnc1bnUzeGFUVGhRWkU3M1Q3L1RyWUpyazNSdk5XbUxpd2dXYTZqTkJxNEJkTkx4ZHNmaEcvTU1QdGJibTEvUWVOK1dlOHRKaDF6WThRYWRiL290bHdEdXhYZHNtb0ZmVEpQNlZkQmxsbUVMblA1cXVCMEFXTlBwRTBOK2gxSEc5THI2VGRJemNsc1JBQmdENE42M3d0VzYvMERNWDl2RFRlZFo5Z1VBb3dBb1N2T2R1aDVoWGx5US9uT2NEUURHQVZDVW51ZjFhLzg3UVViTThEQUFHQWxBOFYydTAvZitCVFVNbVo4L3ZnTVlDMEJSSXJPMEgxdlJlOVVObWwwRWZnVVlEVUNwZFZUcm9SMXJZZGprM2dNQXd3RW9sWk8wTGZpKzZtN2MzRTRDZ1BFQUZNOVZHbzVyYzEwRFp4YUVoU0F6QUNpV0QxdzlxcXkraGs1c0VBQ1lBa0J4VysvaVgvOTZ4czdySXdBd0I0RGk3ZEpqY2VLOURaNVdCZ0NZQkVDcDR2enBvWUt4UmsvcUVad01NZzJBMHNqWmM4U1piUTJmMDE4QndEd0F5b3ZPSFU5S1RlT250QllBVEFTZ0pEcHpPRWNEakorUUJkY0RtQW9nS0p2OWFBNzVtekNoY0FJQU13RW9yekFmekFGZk0rWXpBUURNQmVERmVuSjRkeVV6cHFOc0FRRFhBTGo1QlFlNmRKUFVBTFpEMmVsdFN2ODliZ0tBTXdDcXRodXphTXYrNDJjdi8vU28wOXlNNDdzV1J2M0J1VzlkVENjRzAvMU42Yi9TbGdDQUhVRG9KZHNEczdlL1hKVzlDSkVNQjVJVHFuM2xPY0NmNFJQcVRRQndBa0F6KzJQdnJHclAvS21icVg3eHg1T3VWcmptczJQZmlGdTU5ZENaN1BzM0tPVm5YengxWk4rV3Rjdm5ER3RyK3dWQSt3QkFId0Qza3NxNmFoZXJlaHdUWFZ2VUhiNzhySU9OWGp1ODhvMytqUjRjNHBNUEFMb0JvT0lGRlptcVVFZnRHcngvTzEvWnBpK3V6V1FxVWVhcW9iVi9HOWFEQUVBL0FFUmZ0OVRqcDljeFoyLzY4UnFTN0ZTWjBoZjNxZnpUeUhrQW9Dc0F5bVVTTU1yaE5nckRuU3Rxd091WG5LL1VyZmlPOTI4cFBnb0ErZ0tnckNZTVpRaDJ1SW5aVHBXMHdmdTNYU3pXK1duMXFoWURnTTRBNkhJRGhqcWtPUHA4ZHVZUFFJdU5XcDVHWUhYcDlsVUFVRm5DWjZqRFd3NmEwczZKbi9xdkY1TDVBUUNWOUZPdlF4ZjdvOTlucjJhdHNubnpCZ0NvNUlMNlozaWczY0VYMlU4QlBuT1ZBSUJIQUJTalhnaTdWMkVNWlMxbGhUSjc4UW9BcUNWRnZSRDc3UXc5eTNvRFVLTVVBZ0JlQVpENmhmeEw3SXhrZlJoN3l6SjdJaDBBTUdTY3E5Y0ZuV0g4QUdoK2pRQ0FZd0JKcW9XSXNqMHdtbkhoUDRzQWdHY0FWOVcvd2RzK2xjRDJBUkQ4UHdJQXJnRllWYS9FYUc5ejNHQ21JbnArVGdEQU53QlN2WitqcWExUlY5aWVUMXZXTDk0RUFQV29ucytyWjJ0VUhGTU55L3lsS3dDZ0h0VTNyVDlzYTFRemxoSUdaZ0VBL3dDNnFHM3BqellHSlRPVmNEa0JBUDhBd3RTMlpPdkJYT05aS3RqT0NnQUNBS2ltdHFXUnBjY1VzandGenAyREY2OENnR29LVkYvZ1lPUE5HWit5RkhBZ0FZQUFBTDVYTGNTN3BRZjFaeWxnTWdDSUFHQy9haUUrTHIxNEZNaFF2NmNJQUVRQU1FbTFFTHRLamZtS3BYNzdBRUFJQU9yWGhYNVZhc3hDaHZMeDhkcEZBRkJMcW5vaExwY2E5Q3hEK1dZQ2dCQUFZdFhQNTVTNk9jeGFqYUY4WndCQUJBRDVqNmpXb1pOTHk0Q1BFd0NJQUdDZWVoMUszeGZ3TGtQMTVnR0FDQUF5R1M3c1BsNXFWS1RpeWlnQTRCQUF3NFhkTlVvdjZEZFNIK1ZiQkFBQ0FFaGtlSS92NEZLamlyelVSL0h5Nm5VQWNKUURQZ3hsS1AzdWlQTU1vMllBQVA4QXZtUzVzOHRTK3FMT2JRekRkZ0VBOXdDU21SNFdadVBuSE11UEFNWnJnYS9QY0MyckFVQXJBT3RDSDZZcXZGNTZLTU5iQVNveDFpRER4ZDQ4Q1FBYUFaeGxmVkNjalhPNlhkVkhOUUVBcmdIY251L0RXSVN1TmtiWFVSLzJad0RnR01ESkY5a2Y3V3JybFFFTXR3UzlEQUM4QXJpMDBvbkh1dGo4S005akdMY0FBTW9jUU5DSHV5NDgrRkNtdk04VzlLdmpYQTFzZmR2K0g4TzRwUUJRNWdEdXh5dTBWZnR1ejBSR0RlclZ0bEhOaXM2WG9JMnQ2N3BaMW9IV0FBQVhBRFRHOG9XdFBUTThVMFRaQ0FEbEFjQXdtM3YrakdIa1RnQW9Cd0FDZm5DNXBwOERRRGtBc01uMm50Y3pERDNDV0lNTEFNQXZnRmZ0N0RtZVlXd1NQZ0dFQjlDNndNNmVsN240OHhFQWhBSVEvSzI5UGE5aUdQMHVBQWdPSVBDVTNUMnpmQWY0R3dDSURjRFB3Y3NadGpLTUh3MEFRZ1B3M2U5Z3ozc1lOaEFKQUNJRHFIL1MwWjRQTVd5aEF3QUlES0NENDBlN24yRFlSQmdBaUF0Z1pJSGplYWN6YktNNkFJZ0tvTklIYXZPK3pMQVZkeXNBaUFtZ1o0YnF2SzBzTDRyNkhnQkVCRkJ0SmN2RVdWNUF2Z29BeEFQZ051UUswOFM3TVd4cktBQ0lCc0E5T3AxeDRpTlpWcElCUUN3QW5pUE9NVTk4RnNzR1R6TnQ2bUlWMndFQWN3SFVpc2x3WXVJc1o0TTBQaWZlR3dETUErQVRsZVRjemZ3SFdiWWFBUUJDQVBCOVpzVk5aeWQrbFdYRGZrVUFvSktHWlEzQTQwOHovdXZTKzN4WmZnY3Fud09BU3VxcWZqWWJCOENyYWRUY3hCdXV6cHpwaFlHeEFLQVMxZHZ6cTJvQ1VLbDF3NW9QM2dKcThhc2IzcW5QOEFrelB6NVpvR25tUzFqS0YyWUZBTWRSZlZ0WGtDWUFQOTRiV0poOUlmbkE1algvV3JmanlMa3MzWjdibE1KVXYwOEF3R0h1cUU0Z1JEc0FZMUxNOU5id3BsWUFjSlFycWhOb3lDc0Fsa2RFS096M2gwa0s0Sno2ZnlGdUFVeGpLbUFMQUhBVTlRdHJXbkVMNEJoYkJiY0FnSU9vdjZtalBiY0E2R0dtQ3JZQkFBZFJ2OEdtRDc4QUpyT1ZNQWtBN09jbDFRbU01UmZBRWJZU3Rpa0NBTHZwb0RxQldmd0NvUHBzTlp3SUFIYWplczdiOFl0WHl4aEFER01SRXdEQVRyN1YrQmUwakFFdy9nMVFLcVVDZ08xc1VwOUFLc2NBcUFWakZSdmtBSUNyMzZPemVRYXdocldNVDFzQndFYUthcW51dnhyeERLQ3dObXNkcHdPQWpURGNZOTJaYXdBc3I1djYrU3gwQWdDVVRsLzEvYi9DTjRDY3lzd0MvbTRGZ044bGkrRzFPeC94RFlCZVppOWwzMXNBOEdEbU1Pei9DT2NBdnZGa3IyVjRCZ0NVVERyRGMzdmQ4amdId1BEZThkL3kwSDRBK0MzRlR6RHNYdVdsR3h3QXVCSGtSRFU5UHdTQVgvTTJ5KzRuY0ErQVZqaFZ6NGhrQVBncCs3MVpkcC9FUHdCckc2Y0thbmt1QlFEdTVXT1dCeXdvRmUvd0Q0QytzRGhYVWt2ZlZBQ1l6VmEwbmlRQUFCcnViRkV0L2RQS080QzdEbGM5VXZvdzdqMU9DQURYSDNhNnJHNDk0MDZXYXdEL3JOWjcvcGQyYnJrNy9HZld6MHpMZVNFQTBGRXZWMG9iUE94akJ3OGp1YjVwZ3B2QUFINDh6VmU1ZSt6dU13K2VDTDM4bjRtdDJIZmVtY1FBUUl0Y3JLNmwrWlJQdjdqdyt4VkNhL2JXU1MwWlhrdkhNNERJRXI5OWE0VjNHL1RLckxjbWorcmJwYjV6TzE4bENvQ1N4K3RDZk9xMTZqVXNadWJrTVFONy9hbEpIWC9XRDBpZUFZUXJPc1EvVHhnQUxud04wQjZlQVZUVzR3REhrREFBNkdnbEFDaVJIM1E1d0JNQ0FhQmRGUURndDN5bXgvRTlSeUlCb0UwZUFQQnJWdXB3ZUc1cFlnR2dCRGNBK0NYVGREaThhQklNQUgxa0FZQ2ZFNlg5NkR5L0VRNEFMYklBd0U5cG8vM29wcEI0QUdpdE53RDhtRUROQjlma3JvZ0E2UE5BQUxpL0xLTDlEOEFKRWhJQW5Rc0ZBT1puWnpqSUxCSVVBR1YzQUFCYXAvWFF1aFFKQzREeXgxcWtCekJINDVFMXl5VnhBUkR0cUNNN2dCSGFEaXdrazRRR1FOZUhTUTZnazZiakN2eWFCQWRBdENsSWFnQzF0UnhXdlpNa1BnREtHdUV1TDRBN1dyNEZ0YnhNNVFFQVVYcC9pNndBMGpUc3IvZHRLaWNBaUk3M2toVEFKcGYzNWoyM21Nb1BBS0tEUmk0S05GL0dLNEE0VjNmV050M0pQZkVPNE42bndBditSalRmdTllUzc5a25ZVGFBY2E3dHF2STd4VlR1QUJEZGptK25jL2Ryak5qbzFCOUswd0U4NmNxT2ZHS3VHdkI3a3dNQTkzSjZZckJlelE5Njl1MHZuSDdVaU5rQUdqaS9tNHF2L21ESWdnTWZBTzRsWlc1SFQ0MjlkMjgrYnZVM0x1M2NaQUJGVGg5cHEwVlpycFZWSEFEM2tydGhsTXNMSkFGUHo5NXp5K1U5bXd5Z2NNWEE2dXc3c0RSODdaVExSeVlVZ1B2SjJEaWpUNGhULyswZjZUVit5WjVMMnZacS9nVWgxaFAvZUtxbStzYXI5SnkrTFZ2TGtlMUpVTWwyNGpEWDk3ODNvbnRqdGNja1YyczdmTzZHdEh3OWRsaEd0NGRuN1gxdlpKdGdPeGRKdVRjYkUzL2FTakxuOXBtOXErZTlNbnpnczA5MWZxSjVvL3ExSG5tOFU4VGdzYS9OV2J6cTA3M0h6bDdUY1U5bCszeUF2TytTZDY5Yk1udkMwR2ZhOWVnM0ttYlc0dFdiRDZaZXZFT0lhZEVDWUQzS0ozN1dhd0N3RU9VVFB3czFBSmlDOG9tZktSb0FSS044NGlkYUE0Q3VLSi80NmFvQndLTW9uL2g1VkFNQXR5dW9uK2k1b3VtMjVlVW9vT2hacnVrY1ZHOFVVUFQwMWdUQUp3OFZGRHQ1UHRwT1EyOUNDY1hPSm0zOVZ5SlJRckVUcVJHQWNoZzFGRG1ITlYrRzFnRkZGRGs2WEptT2J3RVNmd080bjdBaTFGSFVGSVhwY1MzeWRCUlMxRXpYNVdKMHl6cFVVc3lzMCtrR1ZaOWpxS1dJT2VhajZKVGFsMUZOOFhLNXRxSmJIb2NBOGZyL3VKNTNKTlk1am9xS2xlTTZQNnZLQnhjSUM1WDFQb3JPc2NSYVVWWlJZbzAxNGdFMTRZbW9yQmhKREZlTVNlY3ZVVnorODJWbkE1OU1FNW1Zandyem5QekVTTVhZK0QyZmtJczY4NW5jaEFGK2lnbnhhdDNuaGRobFcvYVZpSzI3V1UvdFEzU0tyV2NvWEN2NUQ3WXNpMzJoVDJzdnBjeGk2emJpQVFxaVV3YllLTzkycm1ZSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0F4Z0VBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUtCeEFJQklER0Q5REVTbnJCY1NBR0pvQUFBQUFBQUFBQUFBdUVnaUdtSjJFcmtDa0lDR21KMEVyZ0RFb1NGbUo0NHJBREZvaU5tSjRRcEFGQnBpZHFLNEFoQ0tocGlkVUw1V3EwK2pJK2JtTkdlbksrYWlKZVptTG1jQVdxTWw1cVkxYjJjc2s5QVRNNVBFM1NucjhHSjB4YndVaC9OMzBVSTgybUplNGptOGFxWDZSZlRGckZ5c3p1TjFTeTN5MEJsemt0ZUN6eXZYQnFFMTVtUVFyOWN1amk1QWM0eFB3V2grcjE3dGVCWDlNVHBYTy9KOC9YTElRWFRJMkJ3TTRmd1M5b2cwTk1tNHBFWHdmeE9EZS9UV3UraVVFYm03TmRwZGpCdFpmUHN2M1paOHhZcVc2UlhybGVSdFMvdjdHdEdyL3dNSXdqbGlUR0J2MXdBQUFBQkpSVTVFcmtKZ2dnPT1cIiIsIm1vZHVsZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWdBQUFBSUFDQU1BQUFERHBpVElBQUFBQTNOQ1NWUUlDQWpiNFUvZ0FBQUFDWEJJV1hNQUFBemVBQUFNM2dFVFVCQjZBQUFBR1hSRldIUlRiMlowZDJGeVpRQjNkM2N1YVc1cmMyTmhjR1V1YjNKbm0rNDhHZ0FBQXdCUVRGUkYvLy8vQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ3lPMzRRQUFBUDkwVWs1VEFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2RIaDhnSVNJakpDVW1KeWdwS2lzc0xTNHZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldsdGNYVjVmWUdGaVkyUmxabWRvYVdwcmJHMXViM0J4Y25OMGRYWjNlSGw2ZTN4OWZuK0FnWUtEaElXR2g0aUppb3VNalk2UGtKR1NrNVNWbHBlWW1acWJuSjJlbjZDaG9xT2twYWFucUttcXE2eXRycSt3c2JLenRMVzJ0N2k1dXJ1OHZiNi93TUhDdzhURnhzZkl5Y3JMek0zT3o5RFIwdFBVMWRiWDJObmEyOXpkM3QvZzRlTGo1T1htNStqcDZ1dnM3ZTd2OFBIeTgvVDE5dmY0K2ZyNy9QMys2d2paTlFBQUpqQkpSRUZVZU5ydG5YZUExVVRYeHJQY1paZTJpeXh0NlV1VlJSQldCRjVBV0JBRVZJcStJbEwxVTZxSUtCMVVWRVNLSXFLZzFCZEJBUVVVbEY1VXFncElWWW9nU0pXNmRMYTNmSFQySnVja004bmszdHprUEgvdW5Ua3p5Zmx0TWpselprYVNMRkJZbTZuTGQ1M0xsRjJuU3p0bnhrcHVsNmZUc21UWnhkcmQwTjMrYjdsWGRyblNlN3ZZL1ZFYlpaSTh6clgrajQwajc5L1FRSmY2djNzcStmNm1NcDl6cGYvYmsrZnZLTG1lQy8xZlBaRWNmMWNYSzdyTy80V09rOXV6NkhCaHR3RXdrNXp1cGEyNTNlWC9xaG5rYzI4dDhiZ0tnRlhrY2FVbXVzbi9OY25mN2c0SGpDWjNBK0dBdHU0QjRDOXlOeFFPcU84Vy8xY2daN3M3SE5DQmZBM3JpRXZDQVFQSTFlNE9CNHdqVDdzN0hEQ1hISTFxa2hzQVdBRmNlUGRJZDZpS0hnR0RYQURBU3VDNjNmSVJIRW5oQUFMQTllRUFBc0RsNFFBQ3dPWGhBQUpBUjl0eUV3Q3VCa0JlNmlFQVhBMkF3OE1CQklDK0JoRUE3Z1lnc3gwQjRHb0FIQjBPSUFDWXNnT2lDUUJYQXlBZmlTUUFYQTJBYzhNQkJBQ2puQm9PSUFCWU5aa0FjRGNBOG1BQ3dOMEFPRE1jUUFDd0t5V1dBSEExQUk0TUJ4QUFQRG9hU1FDNEdnQUhoZ01JQUQ0dDh4QUFyZ2JBY2VFQUFvQlhnd2tBZHdPUTJaNEFjRFVBRGdzSEVBRDh1aFJOQUxnYUFFZUZBd2dBSTlxZW13QndOUUFPQ2djUUFNWTBoUUJ3TndEeUVBTEEzUUE0SlJ4QUFCaFZTZ01Dd05VQXlKY3FFUUN1QnNBWjRRQUN3SVMyNXlFQVhBMkFFOElCQklBcFRTRUEzQTJBL0FZQjRHNEFNanNRQUs0R0lPRERBUVNBV1FWNE9JQUFNSzFqUlFnQVZ3TWc3OGhEQUxnYUFIbDVNQUhnYWdEa3FRU0F1d0VJNEhBQUFTQkVnUnNPSUFERUtLVWhBZUJxQU9STER4QUFyZ1lnVU1NQkJJQXdCV1k0Z0FBUXA0QU1CeEFBQWpXVkFIQTNBUEtiQklDN0FaQTdFZ0R1QmlEd3dnRUVnRmhkZm9BQWNEVUFBUmNPSUFCRUs4RENBUVNBY0swSUpnQmNEWUE4alFCd053QUJGUTRnQUt4UVJ3TEEzUUFFVURpQUFMQkVnUk1PSUFDczBiR2lCSUNyQVpCMzVpRUFYQTFBb0lRRENBRExOSTBBY0RjQThsc0VnTHNCa0RzUkFPNEdJUFZSQXNEVkFNaVhLeE1BcmdaQVBsNlVBSEExQVBMT01BTEExUURJSzRNSkFGY0RJUCtQQUhBM0FEWVBCd1FtQUo2OHhhT2ppK2YxQkFRQTlnNEhCQkFBd2VXZTdETjU2Zm9kQjg4azNPbHB3cG1ETzlZdm5kem55WExCTmdiQTF1R0FnQUFncEU3WE1ZdjJwMnJlNVAyTHhuU3RFMkpMQUd3ZERyQTlBSjVhZzFjbnNON3BoTldEYTNuc0I0Q2R3d0cyQmlDb1dwOGxWM2h2OXBVbGZhb0YyUXdBRzRjRGJBeEE3WWx4UnU5MzNNVGE5Z0xBdnVFQXV3SVFOZlJ2YzNmODc2RlJkZ0xBdHVFQVd3S1F0OHVHVFBPM1BITkRsN3oyQVVBZVNnQXdLdWJySkZFM1BlbnJHTnNBSUQ5UEFEQzkrWmVKdmUzTGF0c0ZnTlJHQklDdUdxMFJmK1BYTkxJSEFQWU1COWdLZ09hYnJMbnptNXJiQWdCYmhnTnNCRURUWGRiZCtsMU43UUNBdkN1TUFNQlUvRnRyNy8yM3hXMEFnTHdxbUFDQUozcjZYN1A2M2wvckgreC9BT1RwQkFDa2VyczU3MlBDbGpYTEY4NzViazhLVDZYZDlmd1BnTnlOQUZDcDBKZDgvOHJMQnYwbis1MG54LzFQVGJqSVh2WExRbjRINEh3RUFhQlEyMHM4Ti9Ca2YrVkFLa2U3bjVqamhwZmEraHNBZVNJQjRLWFFTVHgzYi85TDRKUi9OSHY0WUZLb253SElpQ0FBc3FqY1RwN28va2RveHNmejU1aG5ac3Y1RndBNWxnQzRwK2V1Y3R5NTAwMDBMRVY4dzJybTZuUCtCZUFWQXVEdTQzOGl6NDM3dWFDbXNhQlAyVi9EdDE0RGhXVWFCUGdWZ0xJN2VPN2JobHg2OW9ZejI5cFI5aVl5Vi93Q3dBOEV3QzNWNEVyNDJSYXViM0VnZThwUXpSdmwxL2dGZ0pVRXdFMDE0WXI5N2MzUFluTVdzNzM0WnRlTGp5WUEvQWRBdTFTZW01WlNrY2xvMkQvc3MvTWRKYWtsQWVBM0FGN2p5L2theG1qMlAybnMzNVQ5cGFDMUJJQ2ZBQmpKZDgvMmg3SWFIc1poOWFPZ3FHc0VnRDhBOEV5M0xIYVNsMmRrUHl0N1Z3TEFEd0FFemVhOFplczVqSC9JWTNoK3R0WnhCSURQQVJqSGU4dGU0REJlbEd1RytET3AwRUlDd01jQURPSk81Y2pOWS80TEx0dHZTVktGZGgrdDNXK1JUZ0pOcm5BNUFDOWFuRVhUZ3M5NEYwc3Z0aTA5QVZUK1NlTUdvQWxYQS9reXVJeW50eUlBZkFsQTNVVCtsMlpodmlZNGs0c1RIeUVBZkFmQUF4ZjUvWCtlczQzeG5QWXZQa0FBK0FxQThFTUdSczNyT1J2cHlOdkFvWEFDd0VjQXpQZkYvSGtMN2hibUV3QytBYUNub2U5bTNtM1dHdkUzMFpNQThBVUFNY21HQUhpZnM1azYvRTBreHhBQTFnTVFmdEJZNU94anpuYXFHV2pqWURnQllEa0FjdzJHVGlmelBtaU1OREtYQUxBYWdCNUdZK2RmY2piVXpsQXJQUWdBYXdHSU5yenZ5MXJPbHQ0MzFFcFNOQUZnS1FER0V6QVQrZmIvbEw3M0RXY0VBSmZhbTVnL3JjdlhsTkg5NVRvUUFOWUJFSDdhQkFCdmNEVlZOTU5nTTJmeUVnQ1dBZkNwQ2YvTHE3bWFlc053TzU4UkFGWUJVQzNkREFBWlpUbWFDanBrdkozcUJJQTFBQVNaM1AxckVrZGJEVXkwODNzMkFzQVNBTHFZektKTEtzVGUxamRtR25xWkFMQUNnTER6WnZNbzJhY0RIakcxeWZERmNBTEFBZ0FHbXZXL0hIOC9ZMVBaOTVocmFBZ0JJQjZBbkdmTXAxSnZad3dHRFRIWnpybGNCSUJ3QUY0VmtVei9FVnU4T2RGc082OFJBS0lCeUg1Y0JBQ1pUUm1hS25YQ2REc25RZ2dBd1FCMEZyT2VKcUdaYmt1UkJ3VzAwNVVBRUF1QTU2QVlBT1JVdlc1RjdCYlJ6Q0VQQVNBVWdQYXlLR1ZvZjZYWCtrZE1NKzBKQUtFQTdKYkZhWDRrMmt5Mk45TUVOYktiQUJBSlFGMVpwQzUxUlU0RXJMQk9YQ04xQ1FDQjlxZklZcldoT2ZDT3J2bGRoc0FtcGhBQTRzem51Q1NMMXFsUjViMmF5Tjk2cmRnR0x1VWdBSVRwV2RrSy9USG56ZjlXekYrczdBUFZuL3Q4ZDZadzg4OFNBTUswUkE1QUxTRUFSS2xRV2lBQ2tGYUlBQkNrMStXQTFPc0VnQ0R0Q0V3QWRoQUFZbFJKRGxCVklnQ0VxRStnQXRDSEFCQ2l4ZHF4L1Q5V0xwd3o3Yk9sUnpKdEI4QmlBa0RJUk9CbGZIcC95NGZONzd0VExuZU43aHZ0QmNCbER3RWdRRFhRbWQyWnFuMlpLbnh3eGs0RTFDQUFCQWpaRWpSaGJIR29kSENmYS9ZQllCQUJZSkh0Njk5WWFJWnZpUjlzQThCS0FzQzhzc2RETC8reFdrbDNyUzdaQklENDdBU0FhVUdwQUZkMWNqdXJuYlVKQVhVSkFOTWFxcmFjV0YrdjB2MG5MUE5wNnRramU3Zitjb3l0OEZBQ3dMVFVPM1drUHE1ZnE5UmhLNXgvWmVXYnNUbHZOUkJXNjZYeCtyc1ZmRThBbU5ZK3BkMzAxaXpWcXFjS2QvL09kc0dLTDQ3bUMzUmEyVWNBbUE0RHFXNHg0NFovQXdTNy8yZHd1L21DbjJpbWthVjZDQUNUS3E4MGV6d1BXOFdnbjBTNi84SlRXRHNQYXg1Y1hwNEFNS25tU3JQTUp6TVV1U3JPLzJ1S2FUeWorbXVjTDlTY0FEQ3BmZ3FySEdjbWp4WGwvc3doMm50K05FMUFxL1lqQUV4cW12SHdlbkg5Y1dEYWFaYU5KMS9SYStrUjlKakJhUVNBU1cxUVpQTHkxSjJoNmRZelU1c1h1ZjZmbmIvZWh6cnJEaG0yZTNnSU96ZHdBd0ZnVW9xWVhtK2V1bHFwUkptZjN6dEZMdHNBclIzb1I3RTAxUkQ1R0RoTEFKaFRtTGZONUFpdTJ2aS85dkhHM3Foc1Ewc3luczgzQXFrZVJnQ1lVZ2x2bTB2NWF2OFA4K29jNVhhZXdlOGlKUk5Mc3pVVmpPeGhWNElBTUNYRlUzd2tYKzNuRWE5dURWYVhSWTRLSGN6YVZ1bDQ2eEpEWFF4QUxXK2JuRHN4UjhGT1RZWk9lQXNIOTZEWnd6NmhDNTlsWElzQU1LWEczamFyY1ZhUDQvaXZiZ3hsbGJabWI2c0V1SDZwTVFGZ1NrOTdad0R6cnJnOUF2bmtkeVJBUDFGZE5JNW5zNmV2b01hZUpnQk15ZnN0SHNkYmZSL2trK2ZZWHhoY0owMVZoaHA3bmdBd3BWZThVNng0cTBPTHlsTEMyRXZ6SFFlNzEwZ1VrUURRMUdEdlZ3QnY5ZCtBZnExRFM0OVdaUUR3dFRiSnpGY0VBY0FTWCtFZEEvd085R3MyV3JxWHN1aDB2dGFnZzhaR0VBQ205SkczelFqTzZ0Q01NTDVkYkd0bDBiNThyUlhqYW8wQVlORXdiNXVjWjdPV2tNMEIwSlN6dDBBb1lSZ0JZRXI5dlcxeWJzTGNURGIzQ2lqTzJWc2dPYWcvQVdCSzNiMXRMdUNyM1E4Q0FEL1piNVF5L1pTM3Q3K3FXK3RPQUppU1lvdll1Q0N1MnVEQzhpUTBxVkExSmNpYjB2bWp1clgyQklBcHRWQVlyY3hUdVRDOHVSUzJmMXRKMDNPNWk5U050U0FBVEVsNWVoZlhvWHo5NGJtZzM1QU1QL1dwaEx6N2ZDMVVOOWFBQURDbDZzcnArUUltSTNONHBtYXNlaklvaXJPM3dKYlcxUWtBVTZwZzRyUHFFU3dkSkFsYVdwNEhXRXhXbTYrendVQitlQVVDd0pTS3FGWm81R2F0NnNGM2w5c0V2QVFtQStVRzhIVTJHakJSaEFBd3BWQlZzdVducHI0QmIydUc4a3ZBQXg0VXhwbUIxbHB0SVNPVUFEQW45UUVlVDdCVkxCV3ZsZXA5cEtGWDRZcWJ3VktYK0E2QkJWYWkvQ01SQU9hMFhKMXBYWmpwQmJCS1o3WFBoQ3hwNGYydzVTRmNvZWRnWUlPcTVRU0FTUUdaZHFzWTRqTkJNM1RYKzV5WjJDVC85WkpoTlVmK2paWVp6OVBWVm9DQmNRU0FTZlVBTEM4TU5jSU5wSlJUQ1pxL0orUTNGd2FTZXhBQUp0VVE4c3VQZXA4Qzc0aGFGL29PZTArTFFuSEhoZ1NBNk8vQVc5OXhtb2tCWVY4Sld4Y2V4MzRLOEd6WnFxOUFkMjhSQTYveVAva01Ya1BVMFg5OEdUMU5vZHBYSlFMQXJMWWlubG1NTExyS05WVG8rU0lac1d6ZHpBVm1vRzhsQUV4ckZ1YWFhOE5LcWtzWEdIWmVGcXNUK1l4K3JWelhMQUxBdEhwcS9IZXVmTlpyNFVib0l4TVNaT0ZpU2tKNUdhN2Jrd0F3cldoTjcxejhlWHozUndvWEtWdWxaclAzMWlYSmxtaWlmaFpLVzJSN2dHZ0N3THhPeWY3V3JHQ2RMajZPYkVaelNpSUF6R3VPM3dHUXY5ZU9QSFZQeExZaElBQUVxTFAvQVpDM2FVd0tSQ3hFcTNVbUFBU29qQTBBa05NL3dvS1BqZjdGYTVVaEFFVG9xQjBJa0krMGhkNERqMnNkT0g5VUlnQkU2QXZaSHJvd1FmRWlDT3Y0cDJhRkx3Z0FJZW9vMjBaL1R1clY4RWFxY0hCNHlkYWZiay9YS2QyUkFCQ2lBcW15clhUNU1sdUhVZ3NRQUdLMFNBNUlMWklJQURGNkpqQUJlSVlBRUtUUWk0SG8vNHVoQklBb1RSYnVuV3NuRC82NWVjc1ZLd0dZSkJFQW9sUkhxR2RPZnQyajB1MzVuZUpOKzM2ZlpoRUFkUWdBY1Rvb0xxUTNUM25pUU9FQmYxbmgvNE1TQVNCT2J3dnlTdng0Y08vbjJKM2lBWGliQUJCb3YweW1FS2Rzd1BidTl2U05GK3ovekRJRWdNZ0dGb3Q0K3IrdHNhS2t4REt4QUN5V0NBQ1JEZFFTTVBiVFBzZzMyMVNoQU5RaUFJUUNJSmsrQlRCT056M3JJNEgrLzBraUFNUUMwTUNrUjY0d2JOWHh0amdBR2hBQWdnR0F0bURqa1A2QjR6YzBRNVQvZjVVSUFORUFQR0hLSTJ6Sldia1BDQUxnQ1FKQU9BRFNEaE1PV2N2WVJreUtFUC92a0FnQThRQ1ltQk5NWXQ2cXFaL041Z0VKZ0N6ZmFic01PK1JONWtaQ1RncncvNjVzQklBRkFFaDFqSVlETDNCTXpQWVhFQVNzSXhFQVZnQWdUVGZvRVo2TlhzSXVtd1pndWtRQVdBTkFnUXZHUE1KMTJOd28wOG5EQlFnQWl3Q1F1aG55eUhhdU5xcWFCYUNiUkFCWUJVRFFaaU1lNmNNMzFqVDVEdGdjUkFCWUJvQVVrMjdBSmJGOGJTdzNOK1VZSXhFQTFnRWdUVERnRTg1TjM5OHdCY0FFaVFDd0VvQzgvQXNGejNNMjBkQ00vNC9tSlFBc0JVQ3F4YjFNYUNObkMyWkdnYW0xSkFMQVdnRDRnN1d6T1Jzb2J3S0FmaElCWURVQTNObGg4emp0RjdOSkhoZ0JnQ2ppR0o5WGVKZm81VFBzLzJNUkJJQVBBSkJxOHkzbFdNVnBQdHlvLzlOcVN3U0FMd0NRQm5ENVpUMm45WWVNQWpCQUlnQjhBMERRRWg2L0hPQzAzc21nLzVjRUVRQStBa0RLczgzQ1FOQm9ZLzdmbGtjaUFId0ZnRlR3Yit2eWM1WVk4di9mQlNVQ3dIY0FTRkVjKzRkK3ltVTUyMmtqL2o4VkpSRUF2Z1JBZXBCOTBtNG5sK0ZtUnZ4LytVR0pBUEF0QUZKOTlxMmhxL0xZbldjazZiUytSQUQ0R2dEcEtlYXBZWjR0ZXlPU0RVd0JQeVVSQUw0SFFPcWN3UnFoS2NWdXREZS8vek02U3dTQVB3Q1EyckF1NDJEUENvMDR5KzMvbERZU0FlQWZBS1JHVnhsWEJqSWYzTUNmZUh5MWtVUUErQXNBS2VZTW01ZitZRndaRU11OTlPQk1qRVFBK0E4QXFld2hrUytCblB0NS9YK29yRVFBK0JNQXFkQjJOaysxWUxBVnNvSTc0N3lRUkFENEZ3QXA3RWNtVjhVMzFyWGsrWmJYL3orR1NRU0F2d0dRUENPWlh0ekpyWFRzTUJ3NHJsZ0RPTUlqRVFEK0IwQ1Ntc1V4UlFNNmFCcko5eDJuLzg4MThka0ZFZ0E2S3JhUktXQXpYdU9KWGY4NHAvL1hGWlVJQUxzQUlIbEdNYjBHVG1DdmdaRDNNL2pjbnpIY0l4RUE5Z0ZBa2g1bmVnM0lDNkhQOXZDQnZOdENuSDNNcHhkSEFEQ29PT05Xbnp0NzUvZXVXR1kwOTNMUVJVVWtBc0J1QUVqUzA0ejU0aW5MUjNXTXlYbTlRbzU4VlYvNTVsL3U0TytSRnI2K01nS0FUYmxIczY4Ynl6Z2ZueUViVWNxSW5CSUJZRThBSkNsNnJXeXhmcTdvaDhzaUFOalY0YlNWN2ovZDNpOFhSUUJ3S084d3k0Nll1amdzcjBRQTJCMEFTUW9iZE5ZSzk1OGRIT2F2S3lJQU9KV3o5d25SN2ovUk82Zi9yb2NBNEZaSTEwTWkzWCtvYTRnL3I0WUFNQklkYnJNOFhZejMwNWUzOGZqM1dnZ0FZNHJzSytBMHNKMTlJLzErSVFTQVlWVVpZMnIzNTVOanF0amhLZ2dBTTYrQ0p0T1BHdlArMGVsTlBQYTRCZ0xBcEVwM25uT0t6L21uNW5RdWJaLytFd0FDVkxIbmQrY1lVMzIrNjFuUlhuMG5BQVNwWUwwdVl4WWZRTGNZU2p1d2VFeVhlZ1h0MTI4Q1FLaXlWMnpWYThqSUNUTVhyTjYwNTlpeFBadFdMNWc1WWVTUVhxMHFacmRyandrQWw0c0FJQUFJQUFLQUFDQUFDQUFDZ0FBZ0FBZ0FBb0FBSUFBSUFBS0FBQ0FBQ0FBQ2dBQWdBQWdBQW9BQUlBQUlBQUtBQUNBQUNBQUNnQUFnQUFnQUFvQUFJQUFJQUFLQUFDQUFDQUFDZ0FBZ0FBZ0FBb0FBSUFBSUFBS0FBQ0FBQ0FBQ2dBQWdBQWdBQW9BQUlBQUlBQUtBQUNBQUNBQUNnQUFnQUFnQUFvQUFJQUFJQUFLQUFDQUFDQUFDZ0FBZ0FBZ0FBb0FBSUFBSUFBS0FINER1a1NSQjZoNlFBSkFzRlFGQUFCQUFCQUFCUUFBUUFBUUFBVUFBRUFBRUFBRkFBQkFBQkFBQlFBQVFBQVFBQVVBQUVBQUVBQUZBQUJBQUJBQUJRQUFRQUFRQUFVQUFFQUFFQUFGQUFCQUFCQUFCUUFBUUFBUUFBZUN0ak1NcnBuMzhicjl1SFRxLzl0WUhuOC9kZG9VQWNBMEFLUnZmZTdwU3FQS2lJdXQxL2ZJNEFTQU1nQ1BhSm5xeVhmZENUU1BWRE56SjNTTWE1OEl0bHVzMkw0SEZTanZNd0JpT1oxQUJ4TVlFUndDd1U5dEVLYmFiMUZIVFNCbGU3NThkRjZON2NlRmRmdEUzOUMxV3V5RjdaMzVGVEdRNzVRZ0ExdXJZMk1OeWoxTHYwN1JSZ00vOUc1c0hzMTFmK2JHSk9xYmljeUJWczE5bDdzNFF4RVNzTTE0QkMzVnNqQmJ3NWd2aGNuOWpqaXVNL0NSSjIxb3JyT1pDNWc1VlFTeDg3Z3dBdnRDeFVZL2xIblhUTVpMTWZMZDNOT2E4eHFLVE1yVHNmWW5WNjhMYW82T0lBYzhaWndEd3NZNE56MFdHWVZKaEhTUG5HRzkyMHFCZy9xdXN1MS9ENGtYTVlERldBRDdqR2tVRUhnQkQ5WXg4bzI5amc1Nk5RMnozZW0xNVE1ZVo0OE4wM09aaldLMWRqQUEwUStwUGNnZ0FyK29aNmFodjQzVTlHenRZN25SNi95Q2pGMXJuTkdwMUVsWm5GSnYvNDBPUkorTTVod0RRU2M5SS9neGRHeVgxYkt4ajZFamNveWF1dERpSzJPbHNaZ1kzc3Z3OVVyMnhVd0pCelhXdC9LcG5ZcHV1aWNYNi9kaGEwdFNsNXBxUEdhNkwxQWkreEFSQVo2VDZWS2NBOElpdWxUZjBUTHloYTJLMi9vZGtEcFBYR3ZRcFlua3NWbU0raS84ekl4Rjh6anNGZ01xNlZxcnFtYmhmMThSRXkvMlBmWmRyeExyL2p3V0EzNUhLVFJ3ekYxQk0zOHdKYlF0NzlTMk05b0gvcGFBcHNIRXNxaHlaeVhCNzNrWXEvODh4QU9UV056TkYyOEp3eWV4YlpGME9JWmNiOUExZi83WXozSjZIa0VqeUJhY0FrTXBncHFXMkNmMTVHNm1YcG9GelJRUmRiOWhocmlmVWNQM2I4eTlTOVhISFRBZWZZeGxoSjVtWVQ3NnA1elhIV2MyRVhYQ2RkSjR4U20zOTJ6TUZxVHJETVFEOHpXSm5oWmFGc1F3R250SXk4S0Z1OVpBeURWLzR2OWlTSHYyRzN1T1p6c3QyWHZmMnRFQTZkTWt4QVB6T1lrZnpDVjZYd2NDakd2VzNaTmVzbXZPRm4wN2VEa1dsL3JPaVk2aDJROEZib0JBRFZ2cHJ2YnVUaU9Ta1BPbWNqS0JWTEhaS2F4aEFJMjFaOVRCZS8zSnByWXBWSmlqKzE4NlBLYWZaVXZsNGpraWxicFI3S1ZMeFMrY0FNSS9KMEQ2WlA5YWVWUlh3K3M5cVZDdTBEQm95TENxazFWUlhvTXByU05tQ2VsSHVIbkM5ME12T0FRQWE1YWdmczJNNFp0dWc3OHBJN2xIV3pSZkhLYmpPU2MzbzVRL3FDdXV4c2x0MDdrNXg3cytpZ0FOZ05GQnRvT292c2V6ejdVV2dNVjB1clBxSm5Ham5QY1BSLzgrMEFScnpoc1ZTMWZrSzJEUGpIV1A1a3JNZEJNQmdvTnB5OWRnS2ZlYk5WTDFYUDRGNmtvWlU3NE1QNTVacGRYdUJSdUxJTFBhTXBScUdRbHc1cmpvSUFPZ3RkMGdkbUptSDFXK3BHaDk5RHZVRVNTdTZtSWMzc3ErWHAzTmRNZXh1Q2RKT1ZhckYvMUViY0FBOEIxUTczWW81a3FQT3VqMDVEZXJKRWJqNmUyalhYOVhyZUUvOHN0WFpCNmw1a2FKZmFTYW5CL0YvUFFZY0FFMkJhbGZmWng0dnoxY1dqRmEvRkc3b0QvZ3p1eURXODJicGVoMVBhOHdUdXNiV0xiUTFrQytiODVxVEFJQ2VjaGxBY0dBelhGMTFCRlZ2K1d1b0p4dkIyaE93anBkZ1dBRjRxUXhXTzl2ZnpNbnZFVnFnL1JldTgxL1pTUUJVQU1ZNDhnWDFIOThDYXllSEtjc3RoaGZqZ0NPNnRDakp5Sk5aejZuUWVyWUViSm1aUnJwVENqSkFtZWNvQUlBUHBQeXlYSlpsWkFWRnlvS3Z5ajlBUFFFbmFtZGovWDZJWmFaZWx1dWdzMWNYV2YrYnBUZTVnNlM1NGgwRlFJaTZWaW53Y01HVFVPMlhWTk54c3J3YzZnbVlVb0F0dVpGK1pzdlgvQlc5OEZITXNNVnc1MHMvS3pzSmdBU2dWaVZ3dGNnMEtKRTdQeEJaK1JIcUNSUktYSWQxKzBuR2pIMzVhY3hDVGZXVVF3anlJWGdLdFk1TVVuenJLQUJPd3RHUmpXd2Z2MnVnd1I3bzE2RkE3VGV4YnJNdTJaQVBZQk5Sd2VxQk9wWjA4QVZucGx2dVJFY0JBRjFsZytzUEJ2WFVleDVnZlY4dlZhRlVXZjRONnNsckhLL3dCMlZteFdKWHZrcFZkQ3BTc2pWUGtQeTZucE1kQmNBdnlCTzRDc3M5VlNlVU5zZG0zMTlVVjc2R1JYTkhzZ013RWJ0eWRSTGlXZVJwa1RlTkwxOStnYk1BZ0NhODIwQ2pPMGthb0tyOHA2ck1KOWYvK2dmVWsyZlVUUy9IZW4yWUhZQnpXSkpRWFhYWitralI5YkRwODdEcFBFbk9BbUEyOHQ4S3pQSlhWMVZXRHhWdjdDYXhEK3JKWStxbSt5T2RyaVZ6cUFsaUpFVDlwdjRFS1RvSXRqd0xMdDFlZGhZQVVDenVSZ0xZZGlDK3BzcURlMEpacE1pTnZ4NWs5R3AxcE5PZjhBQXdIYnYwTmFxaXg1Q1NWZGduU1NRdzJ5Q2dBUmlPL0V1a2h1cGZlNm9xVXRZSnZkSFI2b25BYk9iZkFOZXRZSWtCd0V6L3cwaFJjTjFMR3J6cFRYaXl3d0RvQjlSNkQ1a2pVSTdrMWQrS04xUGxUa0U5VVcvSGdLMjZ6U2R6Q2NzUWJLQXVPaElwQ2k3elJMWk8wczBpRERRQWdNR2VOQmI4d2xNL0s5K0JvNFZ4VUUvQ1dPTnNHc2xIb05wZzBXQjEwZjFJVVhCNnZ5OWNkckhUQUlCQzVKTnYvQURzclJNVXA1TVBYdW5tbjYrQUFUZlZkREt5NWdxTUdIQ210TjBVa0xWVENTNFpsc0kyU1hiam16SEZhUUJBbXpMY1RLbUNGb3g0cjZlK3F2cU83Mzlya2gvc2ltcCtGMXNPTm9NUEFEU3RIVWhCZVl0OTZnRlpML09DN0RRQW9IVjlDN0dFMkplOXFpNkI0c0EzSmdqWVJsclljcEFkZkFERVlkZStWVjEyQjFLMG43b29zdHhwbWVNQUtJMkdVWUd0WXlwcUo5dmZ5Um9DQitaN2xla2NXQlEvaFE4QWRIbjdTdmJwbmNwc1Q4YnJBOVJVeHdHUUQ2aDFhd2ZXR2NBdlhqTm5EMkRoWG5EZWJSUGJNL1pXS0lGSDJNZmRiTVp2bnJ1RFY2OVVSM2p1OEVYWmFRQmtRaC9qTzlHNHlad3NWVStoY1lJOExMTXoyRngrTkM4QWpSQkRuM0lrRUtqR0hVdmdjaXNjQjhCbHFOYnRqRG9nNWE2elZxZzBaNExHVTBVMWkvNEQwdVhhdkFBOGd4aUNKcUF6a1pGbk85MXB6cHVLU0hNY0FFY2wvRUhmUmYxTDFsMi9YMUQrMkZJankweTlwY28wcE12TmVBRjRDVEVFN25QL01seTJZQ1pUZUlsbGQ5a0FBMkNueGhjYmxOMTdWR1B3TmYzT0wrQ0N1bzhadzNKdGVRRkFJalkzNXpSVitoRXByTmdzNWgrNDFHcm5BUUFHUEc5blNwL1dmRm4rcFpvck9xczUxbjVYMFRLMkpxd0hMd0RERUVPUGdSSCtmSEJoUlE0aHVMaEpLcERtUEFDZ2dIem9uUitqMWI4OWowOGozcHVCQjNkazZhdG9HVnVwTVpnWGdERThBVjcxaSt1V0ZCcy90d1FMZFpPZEJ3QzA5aVhpem8rdnFIOHJmcmVtYXZYWWgzZC9xc3p5L213aENnQnNIemY0aGIwSUxod1NyejNOZVZNL09SQUFhSy80RW5kKy9FNWpFSkN1V215M1h6TzZxSG9sZHhUMUNzQTJmNER6UEpLUXhSNUw5V2NDQzZVN0VBRG8zK2R1dk84OEVOSzdzeXBtay9LSCsrOFpyY1V5dW45ZDFDQVFlYWhqZTFvZ0c1TDB6bHBta0FrMEF3d0FhRTcyWHVwWE5mV1BmYkJFa29FNjJaUjFGQzIvajNUNWNWNEFzRE5oa0hUdmIrRFNYbEh1YW1DUnRVNEVBTm9ydnI3V1NMME9sbytkWlkxZFE1WjQreVJSZ1NBc014eVp1YitLYkRPVzVTVEMwK0JrUm1TR0V3Rm9vZmsvQ0FSRWM5eWFEa2xReHNvTFo3azkwSXB6cWFTaTVXOUZoWUtySVlaK1E4by9DUmZQRXFpQ2p4bDZSWFlpQVBXQVN2ZFdTbHdCTXFOdnpiS3UwQW9TZ3ljUTNNZVdjaVVWNVFVQTJjZEpPc0NYUnBwbGtOb2VMTERla1FCQVgyeFpraDVxcW4rZEFFK3JMZGJKTXBJOGlwWjNJMTNPemprZGZCbTdkbXczNXpnNDN6L2k3aU1NUGlpMFNJWWpBU2l1SFVRSGRwQzZsUlZaVmZIWFhJbTZDZFdLUmRXbnNUNXY0d01BTzY4cUcrcXdobkNGdXp2R3dmdUt2aW83RWdEb3F6akxDcURWNmwvTDNmajd1U0N0c0J2OGlhOVloWXZ1VWo2RkQ0RHhpQm44c0ZKa1c1TDN0VExsc1MxT0FoMkFOSjJvZlJLd2k5K05EWmJuS3Y4NFUzOStUbm00WHpqUzUrNThBR0JIK2xSR2Evd0xMeVZvb3ZtRUtKYnBTQURpOUNJb3dJQitHVEJUN1BIYWRyczcySmZmRlczWFJ2cjhNQjhBMlBxaVRuZ1ZlUE8zdkxmZkdXbmdaakt2eTQ0RUFGekZOVWs3VlB6MjlUOUhLZjRXeXpEUnA0eWtZM3U0aDZieStEOE5PMnRrUEY3bkE3akc3bHUvYnVINnFBeHdBTUM5NHJOdXRMa0hmRlFlVXY1dG5KZFZlT09IaGF4M2Fqc1BBTDlnVmpaeFluOTM4QUhtQTVmSWRDWUFxNkZLMzJ2bjNONlhLVTlXL3MxN09kOElzQzh6RlcyajJ3Tzh3UU1BTmhXVVhXc1Y5NE5nbGR1SGlJSGJ6dlNWblFuQWZLalNqem9EdXIvazFvcS9LTGIwR01mMlRFYjJZWldpTXRuOW40a2xoVCtrVmV0ZHNFb0ZqWVMyelE0RllJcnV3M091K3ZjWkdSSEFzRURQNnIzUHJEc2FpUFg2RjNZQU5tSTJCbXJWK2hPdWMzTWtld0Q2cFpUc1VBQSswQmdNM2RJRmRkNTREOVZKc1lyRlBMUFlYTElNNnpWSFNrQnZZeERCT1o5TDBFanhBS2NDQUk3RWozZ1ZVVWVEcTQzV21lZFp3T2JXSzlqMkx2bVp2d015aWlJbWRJNENHWWdQUGw2RWZ0bnFWQURBRTFHODF3Q3JGMVFHNWRTSmtxNEErNkxlV3dWYjA2TzlGMnRXemNFczZKd0t1eG1zZEhOTGdmTEFEMlZrcHdMUUZxcVV4UGFXdlNmbDRscjRnSlluWmVaQlFGbkdDYUdVS016Q1FpTmp4OXhwc253VyttR1FZd0dBTms4TVZrUmF3dlVheWFmTWxvWlBrNituL2g1SHp4c2J3M2F6MFJNTEkzUzI4a0pXL214SFhsL2JIUXNBOUNXV1YxSG1LYjFHVkx1bWdOdUVRV2VRbzZiem5tTzUxNWNpc1ByOTlhcXVBYXROZ0tPWTVXVEhBZ0JsOEJkanpOMjZxKytVVm8rQ3hVcXpUK1V5emdnTndHcG4rMGV2YW5vQlpKaFN3MnhrS3JBQUtBelVxYWdvYzFpbmpSeXFiWG5oNDRqekErM1h3SXg2TnVqZjZqWG9pYU5QNkZjR1p5eWo1SGdvUExuTHVRQ0VzTXpHYVovVUNRenU0dUhnTE5EK1hOUnF4Rjk2ZDNwL1ByVHljbjAvd1VlQ252b1pqeEE2RVlCRTlHTW9xMTdSYmtPOWpYd0dYQkFZbUtXWFFzMUduZGJ1KzNtY3kvOHcrRWw5MU1rTkxZQVdHcjdsWEFEQUhmMmFLMHN0MW13aTJ4bTFYWGlLOWl6UWc0OXh3dzlkMC93Q3JJL1haRXJmQkwrQSt6MEcvUEZQNXdJQTdvaXZXcHB6VGZOMDd6cUFYWGgwZmhBb2VWWGpJN1BCR2J6blp4dnp2Sk9ZNThGeUJldVBpWndFQUxoamlucFJaYXhXRXg4eVoycURYOU5ETlV3WFhJU08veUkxSGtscy83SHhPUmp2NGRzT0JnQ2NqbEVuUDQzVWFnSkt2NGMzV1Z3TFBzcGp0SXgzQmM5bnluaEg2OFI2eGdVY3lCSnd0Zlk2R0FEd0lDWDFtR2ViUmd2Z1FoN1lxZkQvODc2Y1doZFFicEpxaS9MRUx4L1dxbEUybnRGVE05bHU0UU95Z3dFQXo5OGRyWTZjRjhSYkdBTFpyUXNXblFWM1lxSk9tS0hkNnF3emUzdDY1OU1lazI1ZzlkVEZZS1piT016SkFJQXJkRDlUbDJ1UHQ3QUZzdnNZV0JRN0RicTUzbFVVYmRadHhPd04yeForM0x0bEpiMnlmZGhkMVpqcEZ2N2xaQURBZlJObjhqd3RpNExwVy9DSzdWSFlpTDZ3dUF1dW1jVHVxb2tzQnF2SVRnYWdNMU5vSDRrWDNCU2N2Tk9PL1cyaG1SckVyYWl6SEs0NkhjUmdjYmlqQVhpR3RjNkRmQTEwNWh5ZTl4SjB1ZmZ0NC9KVlhRYVRCeHdOQUxnak1wUk5oNTN2RkE1bmJzQm5RZUJyZFpLYkNMbmFrSi81ZkRWVzMyUTEyZEVBZ0djMlFITmYyUDZLeUNHSzhCNDdyVFFtSlI0VmNMRTVWM0w2NnJDK3paSE9CcUFNVk9jUTlDK0tITDcrRFd3WDNydXhvVVpQRW1KTlgydjRCbTVueGVnYVBlUnNBTUJQNmpPc3VXT1NsUDB5YkJmZXU3RzZWbGV1bVgwTDVOL0c3U3RrSVhqV0NTblowUUNBZThWTFlDUU5YdXpUaE9zRHE3eDJqczVycHE0MDVpQy9yN0Rqb2JXQ1lvNENBRDdkQ2Z5eWg5UDhKbkpGV1F2cjNMcHBJY1l2dEVleWJFVDM2NWc5N0d3QWprSlY4c0JsUzBDcy9Nc3oxU3JsMEx0M3Y1WXplSmxoYzJWakdxSnR0NGJzYkFCMlFWVWkyV05HTmZqeXJTVGRCVCtKL1QxR3JyTGRTWVArUjdZRHVxc3hEZ2RnSFRqL3h2NVBQWUl2NlZvNnIzLzdmcS9DZlkyVjE4bkdWVkxUOUZHSEEvQTlSK2dET3VsM0QyWjRzL0UzYXZwWGZPK0JNcFBTVFBoZjFoeDUxcElkRGdCMExoaXdnT2VXYXJFK0syUjArVFZiZW5YYUY2V1pyNi82dkhUWmxOWnJXUi9yZEFEQWJ6dHNzK2JKRFpRYWh4bytCUGVHTlZLVHR1Z1psZytDcUpmWHlHYVZVUWkzSDNUYzZRQ0FSeTA4SzVzWE1udTRsTjNDaGMvcmF1WnJoRFlldTA4V29hNTRHN1ZscHdQdzIyUkFhd1RjMWVUSm9QN2hNbkoxeVd1VnNYLzl4Zkd5SU8yZmpHcXo0d0d3dnk1di9YcFl4enFWU3R6bmtZSWlvbVBiOUJvKzVZZmZqdHE2eXdTQU5VcE1EWkNPcmlBQTNDMTZBaEFBQkFBQlFBQVFBQVFBQVVBQUVBQUVBQUZBQUJBQUJBQUJRQUFRQUFRQUFVQUFFQUFFQUFGQUFCQUFCQUFCUUFBUUFBUUFBVUFBRUFBRUFBRkFBQkFBQkFBQklGNHJ5Q0crbHIyeWd1ZVNRM3l0dWJZQ1lCdzV4TmNhWnlzQUJwQkRmSzBCdGdLZ0F6bkUxK3BnS3dBcWtFTjhyUXEyQW9CN3MzT1NTZjFsTC84YjJlaU9aRWFqYlFaQVRYS0piMVhUWmdCSXE4Z252dFFxdS9sZnFwcEJYdkdkTXFyYURnRG9CQmlTVlpwcFAvOUxoWTZUWDN5bDQ0VnNDSUJVUFpFODR4c2xWcGRzcWZia0d0K292V1JUZFU4bDUxaXYxTzZTYlJVYlIvNnhXbkd4a28wVnRaRThaSzAyUmtuMlZzdTk1Q1RydExlbFpIdDVPaTFMSms5Wm9lUmxuVHhTUUNpc3pkVGx1ODVsa3N0RUtmUGNydVZUMjRSWjRhdi9Cd1JOZFFpeWFibHhBQUFBQUVsRlRrU3VRbUNDXCIiLCJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFnQUFBQUlBQ0FNQUFBRERwaVRJQUFBQUEzTkNTVlFJQ0FqYjRVL2dBQUFBQ1hCSVdYTUFBQXplQUFBTTNnRVRVQkI2QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUIzZDNjdWFXNXJjMk5oY0dVdWIzSm5tKzQ4R2dBQUF3QlFURlJGLy8vL0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUN5TzM0UUFBQVA5MFVrNVRBQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdkSGg4Z0lTSWpKQ1VtSnlncEtpc3NMUzR2TURFeU16UTFOamM0T1RvN1BEMCtQMEJCUWtORVJVWkhTRWxLUzB4TlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBZ1lLRGhJV0doNGlKaW91TWpZNlBrSkdTazVTVmxwZVltWnFibkoyZW42Q2hvcU9rcGFhbnFLbXFxNnl0cnErd3NiS3p0TFcydDdpNXVydTh2YjYvd01IQ3c4VEZ4c2ZJeWNyTHpNM096OURSMHRQVTFkYlgyTm5hMjl6ZDN0L2c0ZUxqNU9YbTUranA2dXZzN2U3djhQSHk4L1QxOXZmNCtmcjcvUDMrNndqWk5RQUFGbjlKUkVGVWVOcnRuUWQ0VkZVV3grK2toeVFtS0JCU0tMTFVBQ2tRbEJZSmhFQUFON0RDZ25SRUlBRkVta0lFcE9xQ0lFVkVPaXVLTE5JRlNhalNWWXBDa0dwUVFicWhoRUNvSVptRkJERTQ1ODY4bWN5OHZNejUvNzV2djVWNzNyd3A5emZuM0hmZW14Y0hZUU84MnM1TlNrN04xck1qN2VEQ0JxSnc0V0QxUFRwMlRyeTh0R2V6a09JNndRNmYwSzdiRDBmeUZpRDJwOCtidXdyR1ZOdlNoN0VBWlhldENSTE1jZnprUTdZQ05OaGZYd0F4ZUFoVEFlSTJGOFBzUDJKQ081WUNkSmp0akxuUFFmZFpCRU1CYXM3SHpQK0o2NXJLN0FRb3Nkb2RFLytFb3V0OXVRa3dzUlNtUGUveDBEb1BYZ0tFZE1ha1AwWDRsNDZzQkpqb2dEbC9tcGRuY0JMZ2hTYVk4YjhUUDVTUkFLOWd2ZzBaL3lvZkFWcGl1b2wyd01LWHVBaFFzVEttbTJvSGZGV0ZpUUMxTU5sME95Q3BKQThCL0RIWGhiUWRBQUZzVE0ybGpod0U4TU5NeTJqeENRY0J2S25EWUQ4ZVZETHgyY1FsTUJDQXV2NHYvUklQVWsxOU9QOXB6NkFQQUl5MUF4cEFBTmE0YUxnZEFBSFV3R2Q5U1FqQW1qS0pIaENBTlRXV09VSUExalNmQ1FGNDArc2RDTUNiOXp0QUFON3RnRThqSVFEdmRzRHFJQWpBdXgyUTVBY0JlTGNEMW5sQ0FPYnRBQ2NJd0pwbU15RUFiM29PZ3dDOGVhOGpCT0RkRHZodlF3akF1eDJ3cWlvRVFEc0FBakNtZEtJbkJHQk4ySEluQ01DYW1Ga1FnRGM5aGtNQTV1MkFUaENBTndzYVFRQzBBeUFBWTd6WCswTUExcFJLOUlJQXJBblZRRHNBQWhRa1RXZERBTjY4UGdJQzhHWmNad2pBdkIwUUJRRlk0N3l5R2dUZzNRNUk4b2NBdk5zQlNWNFFnRFVoSzV3Z0FHdWF6SUVBdk9rK0VnTHdaa3dYQ01DYitWRVFnSGM3WUZWMUNNQ2FaNUlDSUFCckFndm02Z0FJb0oxMndFb25DTUNhNkxrUWdEZXZqWUlBdkJuZEZRTHdabDVqQ01DN0hiQXlHQUx3Ymdja0JrQUEzdTJBcEdjZ0FHdUNWemhEQUxRRElBQmp1bzJHQUx3WjlSb0U0TTJjYUFqQXV4MndJaGdDOEc0SEpBVkNBTllFcU5VT2dBQWFwZnBLWndqQW1zYnpJQUJ2dW82QkFMd1oyUjBDTUc4SE5JRUFySEZhRVFJQldPT1ZWQW9Dc01ZL3lSc0NzS2FhcmRzQkVFRGpSTTJIQUx6cE1oWUM4T2JkMXlFQWIyWTNoUUM4MndITFF5RUE3M1pBWWlrSWdIWUFCT0RjRGxqbERBRlkwMmdCQk9CTjUzRVFnRGNqZWtBQTNzeUtnUURNMndGaEVJQTFub21sSVFCci9HelFEb0FBaFltcXExMGdBR3NhTG9BQXZPbjBIZ1RnemZDZUVJQTNNNXRCQU43dGdHVmhFQUR0QUFqQXVSMnczZ2NDc0NiSWl1MEFDRkFZaWZ5dkRnS3dwdU1iRUlBM1k0dEJBTmI0dkFjQmVOUHpXUWpBR29mcUVJQTMxU0NBUnRBWHpOTldoUUFhSWYxcWdUeXRQd1RRQ2o4V3lMTzZRUURlQXVBd1VEUHNnUUM4K1hvN0JGQ0RLZGUxU1FmOWF4a1FRQVdLZUdzVEYzRjZFQVRnemJ4L1g0RUFhckNsbWRZNGwvdkNWbFJkRFFGVTRQd0dyWEhyOFN0TGZhVlNoOG5iZjdZUkY0alBRczlSQUMyVHN1U3RocFZ0eEdEaStYUVFBREFWSURpU29INXVqQXBGVnM0SmxTVmp1UjNWY0NvVURnRzB5Y1J0Qk90eVkxUm9XMEpPcUJzWks1a1RtMCtGSHQrbU9ldzBSVWNJd0FYWE1oUmVFQUJBQUFBQkFBUUFFQUJBQUFBQlZDSWpuU0kzUm9adTU0VHVrckhzbk5oTktuUVRBbWlUTmo0RVpYSmpWTWluVDA1b0FoazdreE9Mb0VJUnViczhUcDRHVElRQVhFZ25Ud09laFFBQUFnQUlBQ0NBZXJTN3BEWEtRd0ExY2ZPOW5hd2h6dm42T2tJQWRWa1dveUZHb0FTb3lmejJEN253cFlhSWVQU0sydStBQU9yd3c2UFB2RWc3RFZFelI0TlRFQUJBQUFBQkFBUUFFQUJBQUFBQkFBUUFFQUJBQUFBQkFBUUFFQUJBQUFBQkFBUUFFQUJBQURXNWhXbG1MY0FteitKejlaaHB2Z0pNRjFmaUluL0dWTE1WSU92aC8zYUd2SmVKeWVhOENMejNibzI5bUczV1J3Rkg2cjZaZ2ZubWZCaVkvWEZRSWlhY2RSL2c3TXV2cG1MS0dRc2d4TklxbjJMT09Rc2dybldQK2dXenpsZ0FJYllHZi9BQTg4NVlBSEVub2RZUG1IakdBZ2lSWEh2d2JVdzlZd0ZFMXBTcUd6SDNqQVVRNG5STTV5dVlmY0g1ZW9BdnFueUI2V2Q5UWNpVnprMVBRUURXVndSdHFqWWxDd0p3NXZiZ0Y1TWhBR3QrckpWd0J3Snc1c0VIMWIrQkFLejV0WEgzYXhDQU5aOVcrUklDc0NhMS9jdG5JQUJyRXF0T3o0WUFuTW5vWC9jd0JHRE4zcG9qN2tFQXptUytIN3dUQXJBbUpiTFhkUWpBR2YyOG9KVVFnRFVYMjdRNkR3RllzeVpvRmdSZ3pZMCtteUVBYjlJaEFHZWNocndDQVJoVFk5OEhEaENBTFVVbTdRdkRVUUJmb2crLzVTZ2dBRmVlKzJ4VE9XWnZHUUxrb2NQeEx1emVNd1I0UXBta3hjVUZCT0NLUS8ranpWaStiMHg5RHRXL24rWWhJQUJYM043LzhRV3VtUSt6TDBTRFE4T2NCUVRnaXMvY2JSVVpyMzNZejMvcll6MTFBZ0p3SmVDckZYNjhqMzVZdjN0ZDcyTXR1Ui8rY243elZYYk5mRVpBQUs2NGpFeXVoeVV3WHdIcUhCempndmxuSzREWGpOMUJtSDIrQXZ6eldGOGNBUE1Wd0hmcDJrQk1QVjhCdWg5dmk0bm5LMEQ1clF1S1l0N1pDdUNVY0xnaFpwMnZBT0UvakhmRHBMTVZ3R1B5bmhCTU9WOEJtaDRaNUlnWlp5dEFzVVVieW1LKytRclE2WGduekRaZkFjcHVXRlFNazgxVWdQYkNjZUNScHBocXRnSjBXWGxpaW0wdStkWkRnRUxCSytWdHRHTWRCQUFRQUVBQUFBRUFCQUFRQUVBQUFBRUFCQUFRQUVBQUFBRUFCQUFRQUVBQUFBRUFCQUFRd0dJQ1F4OXk5NUNHT1BQb0ZZVStDd0hVWWNUQmg1UU0xUkNySHIyaWc3RVFRRVdpcG1tSU9KUUExUW52cnlGYVFRQ1ZXVkpVYTV5RUFHcHkvN3JXeUlZQUFBSUFDS0FtWVFNb2N2L2VUeHNxMURPM2owQStMUGR1Z2ZYSVdKSGM1L1AySWZDQUFBVkdnNmtVQVRteE42alF1SnhRZWZKaHVYOHA1SjlrN1BHTmhIOVBJMWdNQVFBRUFCQUFRQUFBQVFBRUFCQUFRQUExT0xlRElpTW5sa3lGdnNzSlhTY2ZkaWtuOWhzWnV3OEJOTW1LU0lwZmNtSURxTkFydVc2UUQ5dVFFNXRMeHE3bFBsOUZQNEp1RUlBTnFaY0lya01BQUFFQUJGQVZ6N0phd3hrQ3FFbnJVMXFqSEFRQUVBQkFBQlVZNHFkTmxrSUFkYmh4U1p2Y2dRQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQVVGc0E3NUxBU25nWFNnRm1Yd1JXWWpaS0FJQUFBQUlBQ0FBZ0FJQUFBQUlBQ0FBZ0FJQUFBQUlBQ0FBZ0FJQUFBQUlBQ0FBZ0FJQUFBQUlBQ0FBZ0FOQ0NBTGZTVFpGaDNkMWxLOXZSamFPN05xOWQ5dG5zYWVOSER1blhzMVByRm8zcWhsVXVHMWdwdkdGc3gvaTN4MDZkdi9KNEZnU3dBczE5VEZIYW5BODYyT1R1RGh0OWZPYnBuVitNNzkwaTJNZTcya3ROV3JicjFudmdzSEdUWnN4ZnZDcHAyL2ZKUC85K1B1WEg3Vi8vYjg2SG93YjFiQlBrV2JQN3RLMVhJVUQrdUc1eWk3VHZsTzh0K1RmVFgyMXA1TE8yZFFMY25tL1FlZGpzcE1QcENwN3M3b0ZQQjBZVkMyZzI5UklFc0tVQUlsSDUzbGFKZkFpd1lmbWVDOWxtdjRFTEd3WUZ4aXkrRFFFc0pFMDdBbGhNMXNaT3ZsMDJaME1BU3o2N202YTNPWEpHNmQ1U2pwcmVKdDBtN3lOalVaTlM4L1JXMkZGN2QrUHNzek1CRkUxSG9oVVRnQzB5d09OYTBDdmlXTDUzc3Y3THU4YlIyNWtBYWZZamdCRGZobzY0bTc4OTNPbkxyUVJjVjdMUjFqdktkbloyZjhFS0lETGZyNzRsWHpzWWV3b0NVTitMYmRaTEFEWVZRSWhmb3Z2bkkwa2ZuY3h1RWFpb0JDaXRBUm9RUUlqcGZTMDJRQitYS1pBQkxCY2dkYmNXQkJDekxEWmd3YmNDQXBEOGZrVEpWbXV5TlNHQXhRWmNIc3F3RDZDc0JDaExBWW9xZ0FvQ1dHckE0R3NDR1NBZkFxUnYxWW9BWXRaWUN4NjBkWkdBQURLK1U1QXAxdDNYakFEaVA4Zk5mc2k5M29LakFBcExRTlpHYTFVQWNVdU4wL2ozNDh3dUFoTlNCREpBZm1yQTdRMEtkM1ZUamZlMWE0R1pEMGdaTHlDQUVUYVlYT0Z2VUhwR1ZwVWFJSWFrbXJkOTczczhCVkJZQXNTVnZWYXFBQllMNEZteVFsaEVzell0NmxVTGRGWHl4Z2FadGZjdnRncGtnSHpWZ1B2cmJDaEF2OW03cnQyOG1ISmdaOUx5ZGJzUG44MDRNT2YxZjVoNnpHSnp1anBwZ3dWUEFlN2R0WllBVzlOdEtNRDB1UHBGOC96VEthelgvSk5iMmpnYmY5RG5aanpCMEZTbUFxUXAzakw1dkpVcWdKWFdBTHFvNWIrM05ickZ5Z2VLZC9idGZNRlVnT3ZLTnpXZUFyTFhxQ3pBUS95V3JpaGhKSHhWOFpuaHpIZzlCSGpxMjFYVmJBRjJHK2JRWWtFMlB3cG9mYkNja2VoU3BidVpZbmlxdzdVQzV4TGczcFVZL09hZW1SWGc1VHEyUHd6MDMrSXZEMzZsckRVcFRoT040L2krbkRPQXh3dkU0SzN0WmdyUTJGR0ZQc0R6bTl6bGIyNmpzbjMwTmV4Z3VBMjV4VnFBbWc1bTFvRDlad3RJQUZIMWJYbHN1YUk5ckVneUhPdmhmNXVIQUhRSjhQQ3NZcVlBUkFLbzdxdUtBR0pvb0RTazZDcUdHLzBOeDF3VEJPOE1JS2dhOE5zSnN3U0lGazZxQ0ZEa1hXbm9ySkxIRDc5Z09QWjZnTGpOVzRCYTVoMElIaVhPcERVVzZtUUE4Uy9wWjNWRlFadnJoNW1HWXk0Smdrc0dTRE1qQXhnUmdFZ0FMaStwSlVEeEY2V2hjeVlmbkJWSG5PWHFYa3B3endEQjFQbVczVGZNRUtDT2gxb0NpQmI1cUFFZkh6QWNjMzVIQ041cmdDTENPWXdZenR3azJjdHZ5ZFFTUUtVMWdCQVZMUmZnM0VoaXNGdHB3U1lEeUVvQXZRaVFuZkJiTGFnbGdDd0QzTFIyMzlYWGNnSGVKSzVPY1I0bXVHZUFod0tRaTREMWtxbGJhVGprRXk0VklOdmFuMjFKYWNURUNTenhOYVZ1bDdKQ3NGOEQwQUtrMHIvOXU3akhjS3lobzFRQXEvOUF2S2cwWXVMS2tWdjlpRUduWVlKUEJyaVpKUk9nZ28veTQ0RFZlbklKSUZzRFdIMFJjTTJDNHBERDZOK0p3YzY1NTVkNFpBREoyZUNIQXVqQ2xRdXdpbDRDU0RPQXRRWDRReG9wWWZSeFAwMGpCaDJIQzBZWlFDNEFYUU1PWEtibWM0ZmhXSmtLS2dwd3liSU1vSStqcmhqcG1IdXRXZFk5RmdLa21TbUFmanN4dVBVQm5RQlVFK0M4WlFMTTJVTWxnQkZDRXhXZzRETUFlUndvcUd0bnFaT3UwVUxGTmNBV2l3VDQ0eDFxdEgwRkNKQXJnSDhBRmRtbVRBQmRsSW9aSU9NYmk5WUFBNmszN3pCQ2FHTUpVUEFsZ0s0QlB4dWVPanRKM0ZVbHRKaUtBbXlRbG10dkk0ZUJtNWRRbzY5V0VzZ0Fqd1dnYThBMlJSV2dzVkJSZ00ra2tWcnlCOTN0STR3bEFDNFo0THE1R1VDaEFORkN2VFhBSnZrdlVwcktIL1grTDlSb3B5Y1h3dHpsSVlDeEVoQ3VVN1FLdkU4c0MxenJxNWNCTXZzTEN3UTRNWkVhOVpra05FUEJad0R2eWxUbzFOK2JaOThTeWJLQnUzb0NUSkJmcCtSZlhScUtKeThZSGw4Q0FqekNKVGQzUnlxcUFWUUZpQldxQ1RCdnBEeldSQnBadUlNYWZhR1g0Q1pBbWp3QkNORlFVU2VBRXFCbDd2ODUyMTZBLzhVTEN5ckFWZkpLWXNmWkRnSVpJSThBa1RvRkdlRFNJY05OYWp5K1R0Zk4xZ0prVGVocTVMWUZEdEd5eU50WHFORytZUUlDNUJXZ2VEVXFlTzdwNWZNbXZUUUIyRnlBWTNYZk1mYjd6NWpuSklHZEM2bFJ2M0dDblFDU2U4VS9Ga0JSRFRCU0FZUzdUUVg0OWEwYXhtL2RQa1l5ZnAvK0tlalVaL2dKa0s0M0trQWowNnRBL1diRERjcUVtTWdBRCs3ays1WGZYeE5UWWJMeEUzWXR3eVdCU2VRZHhLTGJDWDRDR0RzS2ZIUTA1MkJTQU9yOGNLd3dJWUQ1S2VEajlTZi92SXR2MXBYalN3YlVlYWJWUmhOWEZ1cGtDZURYOTZoUjEwOEVRd0hTakF2Z1E2Nksvamltc0FKWVVZQTNtMWQwOS9ZdFV5bTRuSTl6OGFBT0grMHhmYmErVFlnazBJZHM4aVZVRU1nQWZ4ZEFzZ2pZWmx3QW53YldGK0RSTi85RzZwbVV3NmZTRlY1UzdEQmFFdmlTdkxhOWZJSkFCbEFxUUo1VjRNM3ZEY1BObjV3Q2NMZW1BR2JTVFhKM2l2U0I1UEFNTjRFTVlDaEFCSGs2WjhkZlg4S3RtVVlxZ0hVemdIbUV6NUFFM2lHdkgydmJWRUNBdnlqeTUzOTRrUXZwcXovOTFRVXdqTHJFUFBsUFI2ZUNFaUJnalNUNzdKMURqWHBORlR3Rk1GVUNKRFhnZS9xSUlKZklQSWZUYmdVa1FKRzFraHZIUElnak80ZmovQVV5QUNrQTNRbDRjakhsSDhlTlZZQUNFMEQzZVExSjVLTkQxR2pvR3dJQzBBTFVjekVxd0haaHBBc2diTjBLbERLdXRTUndaaFRweTJ4SHJnS1lMQUh1dGFsNFNwcGNnSnFCQlowQkhDWU1sNFg2a1JkNjlYcFJJQU5JQktBWEFmcDljZ0h5Vm9BQ0VjQnp0ZlF2LzN5MWxob3RQbDVBQVBNRStMTUdYRHFoUFFIS2ZoY3JDMlgwSTRjbkZlVXJnTWtTSUdxN0d4R0FTQUJsZ3d0VUFGMmZRL0xMd0VhU040eDVxYXRBQnBBTDRGcVgybUNmWG5ZUStQVFhUeVpBdW8zZVQ5RHVUK1RuZEE5T3AwYWRad20rQXNqdUZaOUhBTG9HWER1cGFBbWc4bEZBOFlrSDY4cWoyWEhrVCtFSEJURVdRSGF2K0x3Q1JNa1hBUmNNN3cxWDlDVkZHY0FXQXZoK2VPcHRGeVB4V2VUTkxaeWI3S1dSL2lINkkzbTNPbCs0QmJpdVFJQmE1QkpwcnlRQnRIQXFJQUZDcHA4YTdHRnNnNHZEeU9ITXFObzBmV1E3NnBGM3EvbDJLWUJEM25sempKSm1BRUtBVmtLUkFQZnVXL2ZMUHpBNXVaKzc4VzBHcVBPbnF1eWlCRHo5VFNJdnJ2L3BEcmtHZEl0NSt0OUZoTTFUUUVEclNidk9UUWt4dFZuS01nRUJsR1lBejZmK1JaNG9mZkNERU9jTmYxM1gyRU5OQWR6cURscDI1dHlLdCtvN21kNzJqb0FBRmdwUXVwSmtFV0R5R01DS0FzUjNhQkVSWExhbzQ4UDBGRmd0SXJaci85RWZmYjcveHJlVC8xMUsyQ3NGV0FLZUZvQk9BWHVvQ3VEdzl5YWMxUzRKbXJWNDNjNURwNjQ5dUhVLzQremhuV3NXVGh2MVp1ZHdaMkhQYUNZRDBJdUFQVlFHcUZQQ1Zobmd5UTd0ZTlLMUtVQWtkWFI5L3Z6WlgwMGRBNml5Q0lRQU5pOEJIdlhJRktCZ0NRQUI3Q0lEU0JZQmhnSUVWWUFBZGlrQXVRaVlzOFIwQllBQWRsRUNSQ2gxMzR5YmR4UUk0QTRCN0NFRDZLSVY3UzBnSEJuQVBnVVF5bjQxRWF1REFJVkxBTW05NGcwRmlOWXAyVjByQVFFS2x3Q3lzOEVHQXBRTVZyQTM3NFlRd0Y0Rk1ISzdyYjlvN2d3QkNwa0FhWW9GVUxJSUlDcUFjSGFDQUhhUkFlb1hNYmt6bDJiVXFEc0VzQXNCWEJ1WTNGa2pMMnBVSnM2dExKVS96a3JKWmlLOTJPdnp2RnZGMjJVSklLNnRNNzBJYUNYTUVVRGNWRmtBdHhBektTL2JVOFc4Vy9reXlRQ21Gd0c2V1BNRVFBMG9YQUpVQ1RTeHJ4ZjhJSUM5bEFBMzZzZlNwbElBWFFFZ1FHSE1BSjdVWUJQTEJNRFpJSHNSb0xIeDExT3BNaktBM1pRQVVvQm53eTFKQUJEQWJqS0FpVVZBU3doZzd3SVlYUVNVckcydUFPbVk0UUlYUUhLdmVJa0F0WTNkVEQxV2h3eFErQVNRM1hXWEZzQ3BrUVZMQUFpZ1pRSE02QU9aV0FSNFNlWEFZYUNHQlVnelR3QWppNEFZVjJRQSs4OEE1Y3FiWHdFZ2dCMEpJRThCemkwZ0FJTVNJRjhFUkhwREFBNFpvS0d6MlJVQUF0aVRBRjUxNkhGZHJQdzVwRWNCR1hwTWNXRXJBYkpGUU0xQUN6SkFkZ2FtV0tzWlFIcTN0YVptVndDNUFLZ0JoYThFaUJyUFFRRFdKWUQrWTh6bHEwSUFKaG1BWGdTMEZCQ0Fpd0F4cnhKME12WWMwcDhHUVFETmxnQkgrWjlROUZ0Q0VHcjBTWEEyU0xNQzZBY2trQXkzNnJNTVNaQkFYVVRZWnJRTTlULy8wcklYN204dkF1akcwNHl4NnJPTWtEekxlS3FyMUhxVURQVUZlRjcyd2t2Wml3Q0EreG9BUUFBQUFRQUVBQkFBUUFBQUFRQUVBQkFBUUFCZ053TGcya3ZWMFd0S0FQd01XM1hTTlNYQVJVeUkybHpVbEFBWE1DRnFjd0VDUUFEdENMQWZFNkkyK3pVbFFNb0p6SWk2bkVqUlZoOWdEYVpFWGF6MWdWdExnRldZRW5WWnBURUI5bTNHbktqSjVuMGFFMEFNUlROUVJmUkRoZFlFT0xnWTA2SWVpdzlxVGdBeEJMMEE5WG9BUTRUMkJMalk2aTVtUmgzdXRycW9RUUhFL2g2WUduWG9ZY1crbXpXdkIxZ2NuNG5Kc1QyWjhkWmNibG4xZ3BBNTBWY3dQN2JtU3ZRY29WVUJ4STVhdXpGRHRtVjNyUjFDdXdLSTB4RXRqMkdTYk1leGxoR25oWllGRUdKdGNKZWtlNWdwVzNBdnFVdndXbXZ2MVBvWGhXWXRhbEc4M2J6MWh5NmpOV2cxOUpjUHJaL1hybmlMUmRiL1U3ai9COTJ2Rm94V0p6RmxBQUFBQUVsRlRrU3VRbUNDXCIiLCJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFnQUFBQUlBQ0FNQUFBRERwaVRJQUFBREFGQk1WRVVBQUFEL0FBRC9BQUQvQUFEL0FELy9NelAvS2lyK0pDVGZIeC9pSEJ6bEdSbm5GeTdwRlNyckV5ZnNKQ1R1SWlMdkh4L3dIaDd3SENyeEdpanlHU2J5R0NUbkZ5TG9JU0hwSHgvcUhpanJIU2ZzSENYc0d5VHRHaVB1R1NMdUdDRHZIeWZ2SGlid0hpWHdIU1RwSENQcUd5THFHaUhyR2lmckdTYnNIeVhzSGlUdEhTUHRIQ0x0SENIdUd5SHVHeVh2R2lYdkdpVHFHU1BySGlQckhTTHJIQ0hzSENYc0d5WHNHeVR0R2lQdEdpUHRHU0x1SFNMdUhTWHVIQ1h1SENUckd5UHJHeVByR3lMckdpTHNHaVhzSFNUc0hTVHRIQ1B0SENQdEd5THRHeUx0R3lYdUdpVHVHaVRySFNQckhTUHJIQ1BzSENMc0d5WHNHeVRzR3lUdEd5VHRHaVB0SFNQdEhDTHRIQ1h0SENUdUhDVHVHeVRyR3lQc0d5UHNHaUxzSFNYc0hDVHNIQ1RzSENUdEhDUHRHeVB0R3lQdEd5WHRHaVR0SFNUdUhDVHJIQ1BzSENQc0hDUHNHeVhzR3lUc0d5VHNHeVR0SFNQdEhDUHRIQ1B0SENYdEhDVHRHeVR1R3lUc0d5UHNHeVBzSFNQc0hDWHNIQ1RzSENUc0hDVHRHeVB0R3lQdEd5UHRHeVB0R3lUdEhDVHRIQ1RzSENQc0hDUHNHeVBzR3lQc0d5VHNHeVRyR3lUdEhDTHRIQ1B0SENQdEhDUHRHaVR0R3lUdEd5VHNHeUxzR3lQc0hDUHNIQ1BzSENUc0hDVHJHaVR0R3lMdEd5UHRHeVB0R3lQdEhDVHRIQ1R0SENUc0hDTHNHaVBzR2lQc0d5UHNHeVRyR3lUckhDVHRIQ1R0SENMdEhDUHRIQ1B0R2lUdEd5VHRHeVR0R3lUc0hDTHNIQ1BzSENQc0hDVHJIQ1RyR2lUckdpVHRHeUx0R3lQdEhDUHRIQ1R0SENUdEhDVHRIQ1RzR2lMc0dpTHNHeVByR3lUckhDVHJIQ1RySENUdEhDTHRIQ0x0R2lQdEdpVHRHaVR0R3lUdEhDVHNIQ0xzSENMckhDUHJIQ1RyR2lUckdpVHJHaVR0R3lMdEd5THRIQ1B0SENQdEhDVHRIQ1R0R2lUc0dpTHNHaUxyR3lMckd5UHJIQ1RySENUckhDVHRIQ0x0R2lMdEdpTHRHaVB0R2lUdEd5VHRIQ1RzSENMckhDTHJIQ0xyR2lQckdpVHJHaVRyR2lUdEd5THRIQ0x0SENMdEhDTHRIQ1R0R2lUdEdpVHNHaUxyR2lMckdpTHJIQ0xySENUckhDVHJIQ1R0SENUQ3pIRzlBQUFBLzNSU1RsTUFBUUlEQkFVR0J3Z0pDZ3NNRFE0UEVCRVNFeFFWRmhjWUdSb2JIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVTJOemc1T2pzOFBUNC9RRUZDUTBSRlJrZElTVXBMVEUxT1QxQlJVbE5VVlZaWFdGbGFXMXhkWGw5Z1lXSmpaR1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjFkbmQ0ZVhwN2ZIMStmNENCZ29PRWhZYUhpSW1LaTR5TmpvK1FrWktUbEpXV2w1aVptcHVjblo2Zm9LR2lvNlNscHFlb3FhcXJySzJ1cjdDeHNyTzB0YmEzdUxtNnU3eTl2ci9Bd2NMRHhNWEd4OGpKeXN2TXpjN1AwTkhTMDlUVjF0ZlkyZHJiM04zZTMrRGg0dVBrNWVibjZPbnE2K3p0N3UvdzhmTHo5UFgyOS9qNSt2djgvZjdyQ05rMUFBQVUvVWxFUVZSNDJ1M2RkNXdVWlo3SDhXZnl3QkNHSElhNFlFUUJBK2JFS2lpS2hEMHppTHFMaWlLNm91aUpCNElKNUZ3OFhWRUV4TUNLc0lxZ0lpaGhSUkJZRUJVVUVFSEpPUTdEREFPVDZtQjM3N2E2cTU2ZTZhcHVucWZyK1h6Lzd0ZFR2K2Y1dldlNkt3dEJDQ0dFRUVJSUlTY3U5WC9iOTlYUEZxeFl2L2VvRmFnVUxCdlNrTzVHVHNvRmcrWWRzSUtidzQvUVkzbHEzVHNseU0zL1o5NUlvdEd1U2U0NCthaGxRc1luMDJ4bjZnN1paSm1TZHhBUW50b2pDaXlEOHBjVVdtNVB6ZWNQV1dabFVpcGQvL2QzL3dNSExlUHlBUUwrTDZjdnNrek1SMm0wL25qU2h4NjF6TXpINlhSZmlCWXJMR016UFlQK1gzdkFNamd6TXcxdmY5TGdVc3Zvektwa2RQOHJmMnlabnJtVkRlNS8xZmtXbVpkbGJQOXJMS0g5eDdLZ2lxSDlyN09jNXY4akM2dVorZmUvc2tLclU3aDdhNkptUjBVRi9MMjZpWWQvdmlwblZUWlBmdXFtTTJzbThzR3lSdUZUeXQwZ21ldlNiUE1BL0NWUzg0dW05enMxOGFmb0FMQzF5YStTQ1g5YjA3VCtENDNRL3RXUDFBM0VISjBBUk9OMWtqbC9YOHVzL3ZlUXQzOSsrNkJNMGdXQXlQbFpNdTBWZFV6cWYwdnB5ZjlGVndWbmxtNEFSSU9mSkROZldkZWMvcWZLRGdEcy8zMlFwdWtLUU5SYkpmdm1xMjhNZ0dka2wwZ0Vhd25jQVlpNlAwcW12OGFVR3dZdUxuR2QvNUUvQkd5ZUVnQ2l0dXdFK0xwR1pod0JjUDhsdkxtZE1BU0FxUFdkUk1DdlRVd0E4SmpyM0pjRTcxZXdGSUNvc1V3aVlFT3o0UGUvWHA3cnpsOVZZUkFBa2IxVUltRGpid0lQNEUyM2VjOEo0bG54Q0FCRTljV3lJK0F0QTk3L2M5d3VBZnA3SUsrTGlRUkFWRjBvRWJEMTVHQURtT2t5NS9YQlBBWVNFWUNvSXJzYVp2dXBRZTcvbVc2SGZ3STY0OGdBUk5ZOGlZQ2Rwd2NZd0RzdUUrNGlqQVFnS3MrVkNOaDlabUQ3bjFQa25PNW9ZU2dBVVdtV1JNQ2VOa0Zka3hFdUIwQXJHd3RBWkg0dUViRHZyR0F1U1liTFhTQVhDWE1CaUl6UFpLZkZ6ZzNra25SM3p2UTlZVElBa2Y2SlJFRHUrVUZja3I4NjVsblF5R3dBSW0ycVJNREJDNE8zSWxVUE82WTVSQmdPUUtSOUtCR1FkMG5nVnFTblk1S0hhaGdQUUtST2xnakl2enhvS3pMZE1jZVhCUUJFeWtTSmdJTGZCbXRCMGh4UGdTcHBCb0RqQWlaSUJCenVFS2dGdWNBeHdha0NBTWVUL0xic3ZxaXJnN1Fneml0QmJnVEF2d1NNa3dnNGNtMkFGc1J4MENPdkVnRCtsYVEzSkFLT1hoK1k5VWpPRFovY0JBR0EveGZ3bXV3MnVXNUJXWTh6SEhPN0dRQzJ2Q0lSVUh4RFFOYmpCc2ZVNmdQQW5wZGtBZ0x5aC9KRStNVFdDZ0NFNUVXSmdKTGJBckVlNDhQbk5SWUFZUmt1RVZEYUt3anJzU0I4V3ZjQklEelB5Z1RjRllEMTJCaytxNnNBNElqc3VRbGx2Uk4rT1RJY2syb0tBR2NHeXdUY20rakxVY2R4a0NzWkFDNFpLQlBRTjhHWG83bmpiZ0FCQUxjOEpudDR4a09KdlJ5T093SitBSUI3K3NzRTlFL281YmpROFRRWUFFanlrRXpBWTRtOEhCMGREOG9HZ0N4OXl5UUNCaWJ3Y25RTm44dzBBRWpUUnlaZ2NPSXVSemNBVkJ5QXVGc200R2tBR0FGQTNDVjdrOFp6QURBQ2dPZ2xFL0FDQUl3QUlIcVVTQVQ4Q1FCR0FCQzN5QVM4REFBakFJZ2JpeVVDUmlVQndBUUE0bmRGRWdHamt3QmdBZ0RSVmZaUzFYSEpBREFCZ09oOFJDTGdyV1FBbUFCQWRKSUptSkFDQU0yVEV3c0FvbU9oUk1ERUZBRG9uWHJoTTk3bGFaaXJEa3NFVEU0RmdOYkpEcC94QVcvanRDK1FDSmlTQmdDZFU4bHhmYi9ISDI2WHlkNndNeTBkQURySHNRL245ZVZ3bCtSSkJIeWFBUUNOc3oxOHltZDRIZW1pZ3hJQk16SUJvRzkrQ0oreTkxdTl6OCtWQ1BnaUV3RGF4dkZrOUVlOGo5WHVnRVRBbkVvQTBEV3ZoMC81WFIrRG5iMVBJdUJ2V1FEUU5JNHIvRmY2R2EzdFhvbUFyNm9BUU05MGNkemRrKzFudU5hN0pRSytyZ29BTGVPNEdjcnk5OENmVnJza0FoWlhBNENPU1hMc3ZMM21iOERUZGtnRUxNa0dnSTV4dkJKa3M4OEJUOWttRWJDc0JnQTBqUE1seVg0ZkFYN1NWb21BNzJvQlFMOWM0K2pUcTM2SGJMRlpJbUJGYlFCb2x5ekgxUndIZkIrMmFiNVJJdURIdWdEUUxyTWRiZkwvaXZTbTZ5VUNWdFVEZ0c1eDN1cS95di8xdkUxK2xRajRxUUVBdEQ4U1lIWHpQMnFqZFJJQlArY0FRTE00M3hMK1F3d3U1MjM0czBUQUw0MEJvUHQzZ0hWSERJYXR2MW9pWUgxVEFHaVZ1czU3ZTdiSDRzaDl2WlVTQVJ1YkEwQ3JmQkNuZXp2ci9DQVJzS2tGQUhUS2xTN1BmYjA0RmdQWFhpNFJzT1VrQU9nVWx6NzlHcE9UZHpXL2t3allkZ29BTkVvdmx4YTlINU9SYXl5VENOaHhHZ0QwU1pyYmdidUhZekowOWhLSmdGMnRBS0JQN25KN0JVU25tQXhkYlpGRXdPN1dBTkFtS1d2ZFhnc2JtOWZEVi8xYUltQnZXd0RvTy9OL2RPak1tSXhkWmI1RXdQNXpBS0JONXJwK1Q3ZUp5ZGhaWDBvRUhHZ0hBRjF5aHV1amZnN0U1SENBcUR4SElpRDNBZ0RvRXZkWEFSWGVFcFBCSzgyU0NNaTdHQUNhSkdPTiswdEFYb2pKUXo0eVowb0VITG9VQUpxa25lU0pmL01heGNUWGRJbUEvQ3NBb0VtZWxQMVU2eG1MMGRNL2xneGZjQ1VBOUVpeTdLZWE5VVhMR0F5Zk5sVXkrdUdPQU5BamRXU1hjMXRILzFUVC8vQ3BIMGhHTCt3RUFFMStCc2dlOTJaWkI1L3hmMDEvNmlUSjRFYzZBMENQM0ZBbUZXQWRIdTM3c0ZES2U3TC9NRjBCb0VjZXRTSmwyY00rTCtoTWVWY3ljdEh2QUtCSGhrVVVZSlY5UDZ5RG4rc0ZrOStTREZ6Y0hRQjY1TTlXZVNsZE5XblE3WmVlV2lmTHkxTkFrOGJLOWdaUEJvQVdTWHJaVXBOUEFhQkpubGNEb0t3NUFEVEpnNlZLQkR3QUFGM1NwVUFGZ0RFQTBDYXRmMUVBNENNQTZKUHNUMDg4Z0drQTBDbjlDZ0ZnTkFEUjZoc0FHQTFBcFBRdkFJQXdPazBtQWNEd1hMSUlBSWJuMm1VQU1EeFh6Z1NBNFRubHhUMEFNRHZwM2Q3UEI0RFpxZFI1MUhvQUdKN0d0NzY2TUE4QVppZXBXWWQ3bmgvL3lhSWZmdDZ3WmF1UDdBV0EyZWtHQUFBQUFBQUFBQUFBQUFBQUFBQUFBTlFFQUdvQ0FEVUJnSm9BUUUwQW9DWUFVQk1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBc05nQVlMRUJ3R0lEZ01VR0FJc05BQlliQUN3MkFBQUFBQUFBQUFBQUFBQUFBQUFBQU5BbkFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNvQ1FEVUJBQnFBZ0ExQVlDYUFFQk5BS0FtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdDeEFjQmlBNERGQmdDTERRQVdHd0FzTmdCWWJBQUFBQUFBQUFBQUFBQUFBQUFBQUFDZ1R3QWdBQ0FBSUlGWjdFNTlwSGs5dktibGZSSTI5LzYreHcwZHoycVVCb0R3VExkTVN1bkcyYVB1T1RzTkFLWUMrR2VPTEJoNmVUb0F6QVZ3UEFjbjNsQVpBQVlET0phOGNSY0R3R1FBeDdMcTdrd0FtSjNkZzZvQndPenNHMWdGQUdabis1MUpBREE3Uzg4RmdOa3BlYkVTQU16T3Vnc0FZSGFLbjB3R2dObjVXeDBBbUoxTlp3UEE3QlRlQkFDelU5WWZBSVpuSkFBTXorZ2tBSmlkOGNrQU1QeC9BQUFNenpBQUdKNytBREE3cFYwQllIYnl6d0tBMmRsWUV3Qm1aMFlTQU16T2Z3SEE3QlNmQndDenM3WXlBTXpPcXdBd08yVVhBY0RzckV3RGdObDVBZ0JtNTFCOUFKaWQ4UUF3L0t4UUd3QTRzNzkzcE56VGIrRElTVXZ6eWg5bXFHeUV1KzhmTVB6dGVUc3FYbER2S0JQRlhEOEdnRE5iS3pCdVVvdWViKzJLUEV6YmNvYW8zV240OXhVcktOcEpSelBaY3dIZ0NjRHhKRi8xZnJFUEFNZlRiT0E2eFFDbUE4QXpnR05wTXFiRUY0QmovMHF1VzZnVWdOVUtBRDRBQ05GNnFUOEF4M0x0R3BVQTNnS0FMd0FpZGJoZkFDSjlTSkU2QUVjYkFzQVhBQ0Y2RlBrRUlFUzc5Y29BV0lNQjRCT0E2RkxrRjRDb01Wc1pnTTBwQVBBSlFQVDBEVUNrdmFzS2dOVVpBSDRCaUJHK0FZaWtzYW9BZkFpQUNBQzZEQW5Ma3c5MFA4VnhRV1hxMHNnQVRyV1BNUGpSTzYrbzdYSlk0ZjJLQU9neXJ2eEVPZC9DYWdDUUEzQmR6VDF2WFJLK04xZ1NFVUEzNXdWWnIxem8yQmxZVUFFQVErSndSdUFPQUVRSjRGam1uaHk2b1RGUkFqaVdiN3VFRlZ0dmh4b0FNd0FRUFFBci8vcVFEVFV0amhxQVpjM01DYTIyWTVrU0FFZXlBQkE5QUt2NG1wQXRmZUFCZ0xYbnN0Qnl4eW9CWUhVSGdBY0FWbTR6K3djN2V3RmdIUW5kQjZ1MVh3bUE4UUR3QXNDYWFmOWdScjRYQU5hUlMwUHFIYUFFd0dZQWVBSmdYV0gvNUF4UEFLemRqZXlEVk42akFvRFZBZ0NlQUlRY1FobmtEWUExTitTb3d0TktBUFFHZ0NjQWhmWm5jSGYzQ01DNjA3NjlScVVxQUx3TEFFOEFyUGEyVDdieENtQjd5S1BjNTZnQThCTUF2QUhvWnorTTR4V0E5YUI5Zy9lcEFGQmFGUUNlQUx4ZysyU21ad0JyN1J0c3BnSkE2TTlaQUZRWXdDajc2VHpQQUt5UUYveHRWQUhnUVFCNEF2Q0svWXlnZHdEL2JkL2lKQlVBWGdPQUp3QlAyVDZaN1IzQWN2c1dIMWNCNEVzQWVBTFEwL2JKRnQ0QmxOcGY3ZGRWQllBZEFQQUV3SDVPdUwxM0FKYjlqVTZ0VlFBb3l3Q0FCd0MvMkQvWnh3ZUEyKzBuaEZRQWlQZkI0SUFDZURMU0o2TUI4Si8ydllsU0ZRQ3VBRUQwQVBiWHNIOXlyUThBSSt3REhWUUI0RFlBUkEvZ0h2c0hXMW8rQUlROHNHdTNDZ0FQQUNCcUFIOE4yZEtUZmdDOGJoOXBwd29BZ3dBUUxZRFBRODdocEt6M0EyQjBoUUdjM0RsUy91Z1p3RWdBUkFlZ1pIaHF5SVp1dFU0TWdNZzUxek9Bc1FDSUJrRFI1RE5DdDVPK0xzRUJ2QU9BQ2dMSTN6aC8xRzJPcCswUHNoSWN3UHNBY0FkUXNiUXJTblFBVXdEZ0EwRDl6VmFpQS9nUUFONEIxRmh1SlR5QWlRRHdES0MrYS84VERNRGJBUEFLNEx3dFZnQUF2QUVBYndEU0Jza2U4SlJZQUVZQXdCT0F6cXVsdzhUblVQRGxFUjhOTWMwemdDY0FFRDJBak51V1JSakc4OG1nUFpFQTlJblR1WUErQUlnU1FOWHJ4KzZQT0V3MEFJYmJSODVYQWVCR0FMZ0RTRTROUzJaMmszTzZQRHp1dStMeWhva0d3R1AyMDBxV0NnQVhBY0RMTllHeEFtQy9IS08rRWdDTkFhQVN3SGtSZjhtZkFBQWxLUUJRQ0tERS9nN0htMVVBMkNnQW9CREF0L1l0UHEwQ3dFd0FxQVFRc2hQd21Rb0FMd0ZBSllEejdic2QrMVVBdUFjQUNnSDhWTTdSM0JNQTREd0FLQVJ3djMyRFExUUFLTW9BZ0RvQVd6THRHMXl0QXNDM0FnRHFBTmh2TVJidExCVUFYZ09BT2dCZmhCVDhqaElBTndOQUdZQ2REZXliYTF5a0JFQTlBS2dDY0RqMExNd1lTd1dBVlFJQWlnQVVYaDFTYnVzU0pRQkdBa0FSZ0YwaHp3Y1R5ZTV2RVkwN2dQWUFVQVBnNHdhaDFUNXFLUUdRbXdvQUZRQ1dkZ29yOXZ3aU5RQW1DZ0NjY0FDclI3WUxyelZubTZVR1FCY0F4QnRBeUd2akJ2WHZkVmxOWjZuWkt5dzFBUGFuQXlEZUFDcVE2b3N0UlFER0NnQ29COURnZTBzVmdBc0FvQjdBMlpzdFZRQldDQUFvQjNCL29hVU13UDBBVUEzZ043TWlqeFJYQUxsVkFhQVdRUGF3UWtzaGdCY0VBRlFDeUhrK3Q5eVI0Z25nYUVNQXFBTlF2Y2VueFJVWUtaNEF4Z2tBS0FHUTNMenJjMThYVjJ5a09BSW9hZ29BUndyc2Q5eXY4YnkySDhsdTRuOXp3dFN2MWhaRzgxZHF5OWV4QmZDNkFJREpLY2dCZ05FWktnQmdjclpsQWNEbzlCUUFNRG16QlFCTXp1RVdBREE2QXdRQVRNNVh5UUF3T1FlYkNnQ1luRnNFQUV6T253VUFUTTdpZEFDWW5DMzFCUUFNVG41YkFRQ0RVM3k5QUlEQktidGRBTURrOUJNQU1EbC9GQUF3K2YvL2ZRSUFCcWVvbHdDQXdjbnJJQUJnY0RhMUZRQXdPRi9XRVFBdytPZmZ5RlFCQUhPejh4b2hBR0J1cHRVVEFEQTN1MjRTQWdER3B1UzFXZ0lBNW1idW1VSUF3TmdzdWxJSUFCaWJPZGNJQVFCVFV6Qyt0UkFBTVBXNHo4TGVWWVVBZ0puZFB6cTNiNDdRS1FBNGdmLzRGNDY0dXJMUUxBQTRBVG04YWNsN1EzcTBTaEVhUmhtQTVtMmxlZGh4c3F4dHdxYk5hYzBiVmhFYVJ4bUFCS3Nwc0FFQUFBQUFBQUFBQUFBQUFBQUFBQUFBYWdJQU5RR0FtZ0JBVFFDZ0pnQW9TRmNBS0FRd1ZYMU4xNFhYTkowK3hTMDNoUy8yWlBVMWRRaXZhUlo5aWx0dUQxL3NDZXBydWl5OHBxWDBLVzdwRjc3WTQ5VFgxRHE4cGwvb1U5enlWUGhpdjZpK3BoekhKVlgwS1c0WkU3N1lBOVhYbE9tNHFLNE9qWXBYdmdoZjYzczFLR3B2ZUZFWDA2aDRaVVA0V2wrclFWSGY2cWd5bU1rcUMxL3JWaHBVTlNXOHFEZm9WSnh5aWVQclZvZHJtSjhOTDJvRm5ZcFRIZzFmNmkwNlZIVnJlRldsTldsVmZPSzRQK2R6SGFwcTVmaS9kQ090aWt2U0RtbDRHRUNJNUx6d3N0NmxWM0ZKQjAzLzFPYUdsN1UvaldiRkk2ODdBRFRXb3E2bkhYVjFwVm54K0Fad0hISFpyRWRoanROQk9weWxEbUFjRndOWTQzWDliVkxjbUhiRlByTWRBRzdUcExLcGpzcUcwYTRUc0xkVm9zdFpsMTZPMGc1bTA3Qlk1ejNIS3MvVHBiVHNJa2R0UTJoWWpITktpV09SSDlTbXVFOGN0UjJxUjh0aW0ybk9iNEFHMmhUWDNmbWtuVGRwV1V6VDNybkVNelRhUTkzdGZMNGVWd1hFTXVtcm5RQnUxcWkrNTV6bHJjbWtiYkhMczg0RjNxN1Q4ZGFjWW1lQi8wUGJZcGJ6bmI4QXJjR2E3Nk5ZVmhjYUY2dmRyQTB1anpPc3E5ZFJpakpuaVFkT3BuVXhTZklNbHordmx6VXI4a09YR3Rkd1pVaE04cUxiWTR4ek5Ddnk5QkszdHl4VW9udis4NURiQTIxZjBxN01zVzVsem1KWHdIZnVkdmwydFhKcmFWZG5nenczQWJPcjBFRi82ZXZXZjJ1QWhwVSs3UHJzN2FWMTZhR1BKRDNqdXFxcmRMem1LbVc1YTYyYjJ0Qkd6NmswMmYyUjl1MjFyUGFzSXZmbjcvZW1rUjV6Nm8vdS9kZjExcHVuSks5Z21NTHRvcDcrL1Q5UTRMNmVHM1Q5WVpXNlNDSmd6eCtTNkdlME9XTys3QTJtbDJwYmM1TjlzdmV3Zk5PZWprYVYrcU9MWldzNVVPT3lyeXVWdm9ybnl3NTB0Y0pwL1BKaDZVTE8wUHEvNmVNUjNzYTAraUYyQ1N2MFRYcmQxQkw1S3Y1VVhlL3EzNG4wUXE3aVdmMWEwdUNJcWQ3dHpkMlJsbkRmU1pwUElPM3pjdDdLdHUzRFFmL1J0azR5clE1UHRaWWQrNDc5cnJTY3R4bGVxUDA4c2haWDVPVjhwWWYyN2lUL3pxN2NveFZadHFMT2lmQlBiSWxGNHBPaTdvbnhOYmFZVnNYblZjYmRFK1RiTEdzbXpZcEQ4cTVNbU44emFXL1RycGhuMnptSjlKTjJRQ2tkaTIyK2FaaFlPelZYNzZGbnNjeWJDWGQxWGM1OHVoYXo1UGRLd0FNYnlRT08wTG5ZWkg2THhEeTJkZm9DZWhlREhId3dZWStiSnQyNWkvNzV6Y1FHSW9GVGRXZytMZlNUZWVjbCtqbU9laS9rMFVhdithcGpFRTV6MVhoOEE2MzBjdVIvY21DZXNaRGMrWU5DR2hwZFZnMXNJSUtVNm5kTU9VUlhLNXJ2bjJrYndDc2VNaTRmUE9jQXpTMG5KU3ZIOU1nUndVM3pybytNbXI1ay9iNzhFbnB0UzFsaDdyWVZjeVlNN2RXTzIya0pJWVFRUWdnaHNjNy9BbnhQYSttMzJqTE9BQUFBQUVsRlRrU3VRbUNDXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBSYXdIVE1MID0gKHtjaGlsZHJlbiwgY2xhc3NOYW1lID0gXCJcIn0pID0+XG4gICAgPHNwYW4gY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBjaGlsZHJlbj8ucmVwbGFjZSgvXFxuL2csICc8YnIgLz4nKX19IC8+XG5cbmV4cG9ydCBkZWZhdWx0IFJhd0hUTUw7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhbmVsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge2NoaWxkcmVuLCBzaG93LCB0aXRsZSwgaGFuZGxlQ2xpY2ssIGNsYXNzTmFtZSwgaWR9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHRoZUlkID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaWQnKSA/IGlkIDogYGlkXyR7dGl0bGV9YDtcbiAgICAgICAgbGV0IHRoZUNsYXNzID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBjbGFzc05hbWUgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wicGFuZWwtZ3JvdXAgXCIgKyB0aGVDbGFzc30gaWQ9e3RoZUlkfSA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbCBwYW5lbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT17c2hvdyA/ICdjb2xsYXBzZWQnIDogJyd9IG9uQ2xpY2s9e2hhbmRsZUNsaWNrfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJwYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtY29sbGFwc2UgY29sbGFwc2UgaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzaG93ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIjtcbmltcG9ydCB7XG4gICAgZG9Mb2dpbixcbiAgICBlbWl0QWNjZXNzVG9rZW4sXG4gICAgZ2V0T0F1dGgyRmxvdyxcbiAgICBSRVNQT05TRV9UWVBFX0lNUExJQ0lULFxuICAgIFJFU1BPTlNFX1RZUEVfQ09ERSxcbiAgICB2YWxpZGF0ZUlkVG9rZW5cbn0gZnJvbSBcIi4vbWV0aG9kc1wiO1xuaW1wb3J0IHtnZXRDdXJyZW50UGF0aE5hbWUsIGdldEN1cnJlbnRIcmVmfSBmcm9tICcuLi8uLi91dGlscy9tZXRob2RzJztcblxuY2xhc3MgQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihpc3N1ZXIsIGF1ZGllbmNlLCBwcm9wcykge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTo6Y29uc3RydWN0b3IgaW5pdCcpO1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgLy8gaW5pdGlhbCBzdGF0ZVxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgaWRfdG9rZW5faXNfdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBudWxsLFxuICAgICAgICAgICAgaXNzdWVyOiBpc3N1ZXIsXG4gICAgICAgICAgICBhdWRpZW5jZTogYXVkaWVuY2UsXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogbnVsbCxcbiAgICAgICAgICAgIGZsb3c6IGdldE9BdXRoMkZsb3coKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfaW1wbGljaXRGbG93KCkge1xuICAgICAgICAvLyBnZXQgZGF0YSBmcm9tIHVybCBoYXNoXG4gICAgICAgIGNvbnN0IHthY2Nlc3NfdG9rZW4sIGlkX3Rva2VuLCBzZXNzaW9uX3N0YXRlLCBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24sIGV4cGlyZXNfaW59ID0gdGhpcy5leHRyYWN0SGFzaFBhcmFtcygpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgLy8gaWYgZXJyb3IgY29uZGl0aW9uIHNob3J0IGN1dC4uLlxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgZXJyb3I6IGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3JfZGVzY3JpcHRpb259KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgICAgIC8vIHJlIHN0YXJ0IGZsb3dcbiAgICAgICAgICAgIGRvTG9naW4oZ2V0Q3VycmVudFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWRfdG9rZW5faXNfdmFsaWQgPSBpZF90b2tlbiA/IHZhbGlkYXRlSWRUb2tlblxuICAgICAgICAoXG4gICAgICAgICAgICBpZF90b2tlbixcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuaXNzdWVyLFxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5hdWRpZW5jZVxuICAgICAgICApIDogZmFsc2U7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaWRfdG9rZW5faXNfdmFsaWQ6IGlkX3Rva2VuX2lzX3ZhbGlkLFxuICAgICAgICAgICAgZXJyb3I6ICFpZF90b2tlbl9pc192YWxpZCA/IFwiSW52YWxpZCBUb2tlblwiIDogbnVsbCxcbiAgICAgICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiAhaWRfdG9rZW5faXNfdmFsaWQgPyBcIkludmFsaWQgVG9rZW5cIiA6IG51bGwsXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogYWNjZXNzX3Rva2VuLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChhY2Nlc3NfdG9rZW4gJiYgaWRfdG9rZW5faXNfdmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25Vc2VyQXV0aChhY2Nlc3NfdG9rZW4sIGlkX3Rva2VuLCBzZXNzaW9uX3N0YXRlLCBleHBpcmVzX2luKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbiAhPT0gd2luZG93LnBhcmVudC5sb2NhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGU6Ol9pbXBsaWNpdEZsb3cgcnVubmluZyBpbnNpZGUgaWZyYW1lLCBzZW5kaW5nIGF1dGggc3RhdGUgdG8gcGFyZW50XCIpO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ1NFVF9BVVRIX0lORk9fU0lMRU5UTFknLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZF90b2tlbjogaWRfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiBzZXNzaW9uX3N0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJlc19pbjogZXhwaXJlc19pbixcbiAgICAgICAgICAgICAgICAgICAgfSksIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9jb2RlRmxvdygpIHtcblxuICAgICAgICBjb25zdCB7Y29kZSwgc2Vzc2lvbl9zdGF0ZSwgZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9ufSA9IHRoaXMuZXh0cmFjdEhhc2hQYXJhbXMoKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIGlmIGVycm9yIGNvbmRpdGlvbiBzaG9ydCBjdXQuLi5cbiAgICAgICAgICAgIC8vIHdlIHNldCBoZXJlIGRpcmVjdGx5IGJjIHdlIGFyZSBhdCBjb25zdHJ1Y3Rpb24gdGltZVxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgZXJyb3I6IGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3JfZGVzY3JpcHRpb259KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgICAgICAvLyByZSBzdGFydCBmbG93XG4gICAgICAgICAgICBkb0xvZ2luKGdldEN1cnJlbnRQYXRoTmFtZSgpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB1cmwgPSBVUkkoZ2V0Q3VycmVudEhyZWYoKSk7XG4gICAgICAgIGxldCBxdWVyeSA9IHVybC5zZWFyY2godHJ1ZSk7XG4gICAgICAgIGxldCBiYWNrVXJsID0gcXVlcnkuaGFzT3duUHJvcGVydHkoJ0JhY2tVcmwnKSA/IHF1ZXJ5WydCYWNrVXJsJ10gOiBudWxsO1xuICAgICAgICAvLyBhc3luYyBjb2RlXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlOjpfY29kZUZsb3cgZ2V0dGluZyBhY2Nlc3MgdG9rZW4gd2l0aCBjb2RlICR7Y29kZX1gKVxuXG4gICAgICAgIGVtaXRBY2Nlc3NUb2tlbihjb2RlLCBiYWNrVXJsKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlOjpfY29kZUZsb3cgW0FTWU5DXSBnb3QgcmVzcG9uc2UgJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZSl9YCk7XG4gICAgICAgICAgICBsZXQge2lkX3Rva2VuLCBhY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIGV4cGlyZXNfaW4sIGVycm9yOiBlcnJvcjIsIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnJvcl9kZXNjcmlwdGlvbjJ9ID0gcmVzcG9uc2U7XG5cbiAgICAgICAgICAgIGlmIChlcnJvcjIpIHtcbiAgICAgICAgICAgICAgICAvLyBzZXQgd2l0aFxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IyLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3JfZGVzY3JpcHRpb24yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpZF90b2tlbl9pc192YWxpZCA9IGlkX3Rva2VuID8gdmFsaWRhdGVJZFRva2VuXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgaWRfdG9rZW4sXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5pc3N1ZXIsXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5hdWRpZW5jZVxuICAgICAgICAgICAgKSA6IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyB0aGlzLnN0YXRlLmlkX3Rva2VuX2lzX3ZhbGlkID0gaWRfdG9rZW5faXNfdmFsaWQ7XG4gICAgICAgICAgICAvL3RoaXMuc3RhdGUuZXJyb3IgPSAhaWRfdG9rZW5faXNfdmFsaWQgPyBcIkludmFsaWQgVG9rZW5cIiA6IGVycm9yO1xuICAgICAgICAgICAgLy90aGlzLnN0YXRlLmVycm9yX2Rlc2NyaXB0aW9uID0gIWlkX3Rva2VuX2lzX3ZhbGlkID8gXCJJbnZhbGlkIFRva2VuXCIgOiBlcnJvcl9kZXNjcmlwdGlvbjtcblxuICAgICAgICAgICAgLy8gc2V0IHdpdGhcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlOjpfY29kZUZsb3cgW0FTWU5DXSBzZXR0aW5nIHN0YXRlYCk7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHN0YXRlIGFzeW5jaHJvbnVzbHkgYmMgd2UgYXJlIG5vdCAgb24gY29uc3RydWN0b3IgY29udGV4dFxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICBpZF90b2tlbl9pc192YWxpZDogaWRfdG9rZW5faXNfdmFsaWQsXG4gICAgICAgICAgICAgICAgYWNjZXNzVG9rZW46IGFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICBlcnJvcjogIWlkX3Rva2VuX2lzX3ZhbGlkID8gXCJJbnZhbGlkIFRva2VuXCIgOiBlcnJvcixcbiAgICAgICAgICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogIWlkX3Rva2VuX2lzX3ZhbGlkID8gXCJJbnZhbGlkIFRva2VuXCIgOiBlcnJvcl9kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoYWNjZXNzX3Rva2VuICYmIGlkX3Rva2VuX2lzX3ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYEFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGU6Ol9jb2RlRmxvdyBbQVNZTkNdIG9uVXNlckF1dGhgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uVXNlckF1dGgoYWNjZXNzX3Rva2VuLCBpZF90b2tlbiwgc2Vzc2lvbl9zdGF0ZSwgZXhwaXJlc19pbiwgcmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24gIT09IHdpbmRvdy5wYXJlbnQubG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTo6X2NvZGVGbG93IHJ1bm5pbmcgaW5zaWRlIGlmcmFtZSwgc2VuZGluZyBhdXRoIHN0YXRlIHRvIHBhcmVudFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ1NFVF9BVVRIX0lORk9fU0lMRU5UTFknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkX3Rva2VuOiBpZF90b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiBzZXNzaW9uX3N0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyZXNfaW46IGV4cGlyZXNfaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaF90b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgfSksIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcblxuICAgICAgICBsZXQge2Zsb3d9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBpZiAoZmxvdyA9PT0gUkVTUE9OU0VfVFlQRV9JTVBMSUNJVCkge1xuICAgICAgICAgICAgdGhpcy5faW1wbGljaXRGbG93KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmxvdyA9PT0gUkVTUE9OU0VfVFlQRV9DT0RFKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2RlRmxvdygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXh0cmFjdEhhc2hQYXJhbXMoKSB7XG4gICAgICAgIHJldHVybiBVUkkucGFyc2VRdWVyeSh0aGlzLnByb3BzLmxvY2F0aW9uLmhhc2guc3Vic3RyKDEpKTtcbiAgICB9XG5cbiAgICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KSB7XG5cbiAgICAgICAgaWYgKG5leHRTdGF0ZS5hY2Nlc3NUb2tlbiAhPT0gdGhpcy5zdGF0ZS5hY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5leHRTdGF0ZS5lcnJvciAhPT0gdGhpcy5zdGF0ZS5lcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dFN0YXRlLmlkX3Rva2VuX2lzX3ZhbGlkICE9PSB0aGlzLnN0YXRlLmlkX3Rva2VuX2lzX3ZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYW4gYWNjZXNzIHRva2VuIHJlZnJlc2ggLi4uXG4gICAgICAgIGlmIChwcmV2U3RhdGUuYWNjZXNzVG9rZW4gIT09IHRoaXMuc3RhdGUuYWNjZXNzVG9rZW4pIHtcblxuICAgICAgICAgICAgbGV0IHVybCA9IFVSSShnZXRDdXJyZW50SHJlZigpKTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHVybC5zZWFyY2godHJ1ZSk7XG4gICAgICAgICAgICBsZXQgZnJhZ21lbnQgPSBVUkkucGFyc2VRdWVyeSh1cmwuZnJhZ21lbnQoKSk7XG5cbiAgICAgICAgICAgIC8vIHB1cmdlIGZyYWdtZW50XG4gICAgICAgICAgICBkZWxldGUgZnJhZ21lbnRbJ2NvZGUnXTtcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudFsnYWNjZXNzX3Rva2VuJ107XG4gICAgICAgICAgICBkZWxldGUgZnJhZ21lbnRbJ2V4cGlyZXNfaW4nXTtcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudFsndG9rZW5fdHlwZSddO1xuICAgICAgICAgICAgZGVsZXRlIGZyYWdtZW50WydzY29wZSddO1xuICAgICAgICAgICAgZGVsZXRlIGZyYWdtZW50WydpZF90b2tlbiddO1xuICAgICAgICAgICAgZGVsZXRlIGZyYWdtZW50WydzZXNzaW9uX3N0YXRlJ107XG5cbiAgICAgICAgICAgIGxldCBiYWNrVXJsID0gcXVlcnkuaGFzT3duUHJvcGVydHkoJ0JhY2tVcmwnKSA/IHF1ZXJ5WydCYWNrVXJsJ10gOiAnL2FwcCc7XG5cbiAgICAgICAgICAgIGlmIChmcmFnbWVudC5sZW5naHQgPiAwKSB7XG4gICAgICAgICAgICAgICAgYmFja1VybCArPSBgIyR7VVJJLmJ1aWxkUXVlcnkoZnJhZ21lbnQpfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKGJhY2tVcmwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWJzdHJhY3RcbiAgICAgKiBAcGFyYW0gZXJyb3JcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9jYWxsYmFjayhiYWNrVXJsKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWJzdHJhY3RcbiAgICAgKiBAcGFyYW0gZXJyb3JcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9yZWRpcmVjdDJFcnJvcihlcnJvcikge1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge2lkX3Rva2VuX2lzX3ZhbGlkLCBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb259ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0MkVycm9yKGAke2Vycm9yfSAtICR7ZXJyb3JfZGVzY3JpcHRpb259LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpZF90b2tlbl9pc192YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0MkVycm9yKFwiVG9rZW4gVmFsaWRhdGlvbiBFcnJvciAtIFRva2VuIGlzIGludmFsaWQuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlO1xuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBUIGZyb20gXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiO1xuaW1wb3J0IHthdXRoRXJyb3JIYW5kbGVyLCBjcmVhdGVBY3Rpb24sIGdldFJlcXVlc3QsIHNob3dNZXNzYWdlLCBzdGFydExvYWRpbmcsIHN0b3BMb2FkaW5nfSBmcm9tIFwiLi4vLi4vdXRpbHMvYWN0aW9uc1wiO1xuaW1wb3J0IHtidWlsZEFQSUJhc2VVcmwsIGdldEFsbG93ZWRVc2VyR3JvdXBzfSBmcm9tICcuLi8uLi91dGlscy9tZXRob2RzJztcbmltcG9ydCB7IGdldEFjY2Vzc1Rva2VuLCBzdG9yZUF1dGhJbmZvLCBpbml0TG9nT3V0fSBmcm9tICcuL21ldGhvZHMnO1xuXG4vKipcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGNvbnN0IFNFVF9MT0dHRURfVVNFUiA9ICdTRVRfTE9HR0VEX1VTRVInO1xuZXhwb3J0IGNvbnN0IExPR09VVF9VU0VSID0gJ0xPR09VVF9VU0VSJztcbmV4cG9ydCBjb25zdCBSRVFVRVNUX1VTRVJfSU5GTyA9ICdSRVFVRVNUX1VTRVJfSU5GTyc7XG5leHBvcnQgY29uc3QgUkVDRUlWRV9VU0VSX0lORk8gPSAnUkVDRUlWRV9VU0VSX0lORk8nO1xuZXhwb3J0IGNvbnN0IENMRUFSX1NFU1NJT05fU1RBVEUgPSAnQ0xFQVJfU0VTU0lPTl9TVEFURSc7XG5leHBvcnQgY29uc3QgVVBEQVRFX1NFU1NJT05fU1RBVEVfU1RBVFVTID0gJ1VQREFURV9TRVNTSU9OX1NUQVRFX1NUQVRVUyc7XG5leHBvcnQgY29uc3QgU0VTU0lPTl9TVEFURV9TVEFUVVNfVU5DSEFOR0VEID0gJ3VuY2hhbmdlZCc7XG5leHBvcnQgY29uc3QgU0VTU0lPTl9TVEFURV9TVEFUVVNfQ0hBTkdFRCA9ICdjaGFuZ2VkJztcbmV4cG9ydCBjb25zdCBTRVNTSU9OX1NUQVRFX1NUQVRVU19FUlJPUiA9ICdlcnJvcic7XG5leHBvcnQgY29uc3QgVVBEQVRFX1VTRVJfSU5GTyA9ICdVUERBVEVfVVNFUl9JTkZPJztcblxuZXhwb3J0IGNvbnN0IG9uVXNlckF1dGggPSAoYWNjZXNzVG9rZW4sIGlkVG9rZW4sIHNlc3Npb25TdGF0ZSwgZXhwaXJlc0luID0gMCwgcmVmcmVzaFRva2VuID0gbnVsbCkgPT4gKGRpc3BhdGNoKSA9PiB7XG5cbiAgICBzdG9yZUF1dGhJbmZvKGFjY2Vzc1Rva2VuLCBleHBpcmVzSW4sIHJlZnJlc2hUb2tlbiwgaWRUb2tlbik7XG5cbiAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFNFVF9MT0dHRURfVVNFUixcbiAgICAgICAgcGF5bG9hZDogeyBzZXNzaW9uU3RhdGUgfVxuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZG9Mb2dvdXQgPSAoYmFja1VybCkgPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogTE9HT1VUX1VTRVIsXG4gICAgICAgIHBheWxvYWQ6IHtiYWNrVXJsOiBiYWNrVXJsfVxuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VXNlckluZm8gPSAoZXhwYW5kID0gJ2dyb3VwcycsIGZpZWxkcz0nJywgYmFja1VybCA9IG51bGwsIGhpc3RvcnkgPSBudWxsLCBlcnJvckhhbmRsZXIgPSBudWxsICkgPT5cbiAgICBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG5cbiAgICBsZXQgQWxsb3dlZFVzZXJHcm91cHMgPSBnZXRBbGxvd2VkVXNlckdyb3VwcygpO1xuICAgIEFsbG93ZWRVc2VyR3JvdXBzID0gQWxsb3dlZFVzZXJHcm91cHMgIT09ICcnID8gQWxsb3dlZFVzZXJHcm91cHMuc3BsaXQoJyAnKSA6IFtdO1xuICAgIGxldCB7bG9nZ2VkVXNlclN0YXRlfSA9IGdldFN0YXRlKCk7XG4gICAgbGV0IHttZW1iZXJ9ID0gbG9nZ2VkVXNlclN0YXRlO1xuXG4gICAgbGV0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcblxuICAgIGlmIChtZW1iZXIgIT0gbnVsbCkge1xuICAgICAgICBpZihoaXN0b3J5ICE9IG51bGwgJiYgYmFja1VybCAhPSBudWxsKVxuICAgICAgICAgICAgaGlzdG9yeS5wdXNoKGJhY2tVcmwpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgaWYoZXJyb3JIYW5kbGVyID09IG51bGwpXG4gICAgICAgIGVycm9ySGFuZGxlciA9IGF1dGhFcnJvckhhbmRsZXI7XG5cbiAgICBkaXNwYXRjaChzdGFydExvYWRpbmcoKSk7XG5cbiAgICBsZXQgcGFyYW1zID0ge1xuICAgICAgICBhY2Nlc3NfdG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgICAgICBleHBhbmQgOiBleHBhbmQsXG4gICAgfVxuXG4gICAgaWYoZmllbGRzKXtcbiAgICAgICAgcGFyYW1zWydmaWVsZHMnXSA9IGZpZWxkcztcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0UmVxdWVzdChcbiAgICAgICAgY3JlYXRlQWN0aW9uKFJFUVVFU1RfVVNFUl9JTkZPKSxcbiAgICAgICAgY3JlYXRlQWN0aW9uKFJFQ0VJVkVfVVNFUl9JTkZPKSxcbiAgICAgICAgYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL21lbWJlcnMvbWVgKSxcbiAgICAgICAgZXJyb3JIYW5kbGVyXG4gICAgKShwYXJhbXMpKGRpc3BhdGNoLCBnZXRTdGF0ZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcblxuICAgICAgICAgICAgbGV0IHttZW1iZXJ9ID0gZ2V0U3RhdGUoKS5sb2dnZWRVc2VyU3RhdGU7XG4gICAgICAgICAgICBpZiAobWVtYmVyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JfbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdFUlJPUicsXG4gICAgICAgICAgICAgICAgICAgIGh0bWw6IFQudHJhbnNsYXRlKFwiZXJyb3JzLnVzZXJfbm90X3NldFwiKSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goc2hvd01lc3NhZ2UoZXJyb3JfbWVzc2FnZSwgaW5pdExvZ091dCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjaGVjayB1c2VyIGdyb3VwcyAoIGlmIGRlZmluZWQgKVxuICAgICAgICAgICAgaWYgKEFsbG93ZWRVc2VyR3JvdXBzLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAgICAgICAgIGxldCBhbGxvd2VkR3JvdXBzID0gbWVtYmVyLmdyb3Vwcy5maWx0ZXIoKGdyb3VwLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFsbG93ZWRVc2VyR3JvdXBzLmluY2x1ZGVzKGdyb3VwLmNvZGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFsbG93ZWRHcm91cHMubGVuZ3RoID09PSAwKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yX21lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ0VSUk9SJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IFQudHJhbnNsYXRlKFwiZXJyb3JzLnVzZXJfbm90X2F1dGh6XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHNob3dNZXNzYWdlKGVycm9yX21lc3NhZ2UsIGluaXRMb2dPdXQpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoaGlzdG9yeSAhPSBudWxsICYmIGJhY2tVcmwgIT0gbnVsbClcbiAgICAgICAgICAgICAgICBoaXN0b3J5LnB1c2goYmFja1VybCk7XG4gICAgICAgIH1cbiAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVVzZXJJbmZvID0gKHVwZGF0ZWRNZW1iZXIpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBsZXQge2xvZ2dlZFVzZXJTdGF0ZX0gPSBnZXRTdGF0ZSgpO1xuICAgIGxldCB7bWVtYmVyfSA9IGxvZ2dlZFVzZXJTdGF0ZTtcbiAgICBpZihtZW1iZXIgPT0gbnVsbCl7XG4gICAgICAgIHRocm93IEVycm9yKFwiTWVtYmVyIGlzIG5vdCBzZXQuXCIpO1xuICAgIH1cbiAgICBpZih1cGRhdGVkTWVtYmVyLmlkICE9IG1lbWJlci5pZCl7XG4gICAgICAgIHRocm93IEVycm9yKFwiTWVtYmVyIGlzIG5vdCB0aGUgc2FtZS5cIik7XG4gICAgfVxuICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVBEQVRFX1VTRVJfSU5GTyxcbiAgICAgICAgcGF5bG9hZDogey4uLnVwZGF0ZWRNZW1iZXJ9XG4gICAgfSk7XG5cbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVNlc3Npb25TdGF0ZVN0YXR1cyA9IChuZXdTdGF0dXMpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVQREFURV9TRVNTSU9OX1NUQVRFX1NUQVRVUyxcbiAgICAgICAgcGF5bG9hZDoge3Nlc3Npb25TdGF0ZVN0YXR1czogbmV3U3RhdHVzfVxuICAgIH0pO1xufSIsImltcG9ydCB7XG4gICAgYmFzZTY0VVJMRW5jb2RlLFxuICAgIGdldEF1dGhDYWxsYmFjayxcbiAgICBnZXRDdXJyZW50TG9jYXRpb24sXG4gICAgZ2V0Q3VycmVudFBhdGhOYW1lLFxuICAgIGdldEZyb21Mb2NhbFN0b3JhZ2UsXG4gICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZSxcbiAgICBnZXRPcmlnaW4sXG4gICAgcHV0T25Mb2NhbFN0b3JhZ2UsXG4gICAgcmV0cnlQcm9taXNlLFxuICAgIHNldFNlc3Npb25DbGVhcmluZ1N0YXRlLFxuICAgIHNoYTI1NlxufSBmcm9tIFwiLi4vLi4vdXRpbHMvbWV0aG9kc1wiO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnc3VwZXJhZ2VudCc7XG5pbXBvcnQge3JhbmRvbUJ5dGVzfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgTG9jayBmcm9tICdicm93c2VyLXRhYnMtbG9jayc7XG5sZXQgaHR0cCA9IHJlcXVlc3Q7XG5cbi8qKlxuICogQGlnbm9yZVxuICovXG5jb25zdCBsb2NrID0gbmV3IExvY2soKTtcblxuY29uc3QgR0VUX1RPS0VOX1NJTEVOVExZX0xPQ0tfS0VZID0gJ29wZW5zdGFja3VpY29yZS5sb2NrLmdldFRva2VuU2lsZW50bHknO1xuY29uc3QgTk9OQ0VfTEVOID0gMTY7XG5leHBvcnQgY29uc3QgQUNDRVNTX1RPS0VOX1NLRVdfVElNRSA9IDIwO1xuZXhwb3J0IGNvbnN0IFJFU1BPTlNFX1RZUEVfSU1QTElDSVQgPSBcInRva2VuIGlkX3Rva2VuXCI7XG5leHBvcnQgY29uc3QgUkVTUE9OU0VfVFlQRV9DT0RFID0gJ2NvZGUnO1xuY29uc3QgQVVUSF9JTkZPID0gJ2F1dGhJbmZvJztcbmNvbnN0IE5PTkNFID0gJ25vbmNlJztcbmNvbnN0IFBLQ0UgPSAncGtjZSc7XG5cbmltcG9ydCBVUkkgZnJvbSBcInVyaWpzXCI7XG5pbXBvcnQgSWRUb2tlblZlcmlmaWVyIGZyb20gXCJpZHRva2VuLXZlcmlmaWVyXCI7XG5pbXBvcnQge1NFVF9MT0dHRURfVVNFUn0gZnJvbSBcIi4vYWN0aW9uc1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0QXV0aFVybCA9IChiYWNrVXJsID0gbnVsbCwgcHJvbXB0ID0gbnVsbCwgdG9rZW5JZEhpbnQgPSBudWxsLCBwcm92aWRlciA9IG51bGwpID0+IHtcblxuICAgIGxldCBvYXV0aDJDbGllbnRJZCA9IGdldE9BdXRoMkNsaWVudElkKCk7XG4gICAgbGV0IHJlZGlyZWN0VXJpID0gZ2V0QXV0aENhbGxiYWNrKCk7XG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IHNjb3BlcyA9IGdldE9BdXRoMlNjb3BlcygpO1xuICAgIGxldCBmbG93ID0gZ2V0T0F1dGgyRmxvdygpO1xuXG4gICAgaWYgKGJhY2tVcmwgIT0gbnVsbClcbiAgICAgICAgcmVkaXJlY3RVcmkgKz0gYD9CYWNrVXJsPSR7ZW5jb2RlVVJJKGJhY2tVcmwpfWA7XG5cbiAgICBsZXQgbm9uY2UgPSBjcmVhdGVOb25jZShOT05DRV9MRU4pO1xuXG4gICAgLy8gc3RvcmUgbm9uY2UgdG8gY2hlY2sgaXQgbGF0ZXJcbiAgICBwdXRPbkxvY2FsU3RvcmFnZShOT05DRSwgbm9uY2UpO1xuICAgIGxldCB1cmwgPSBVUkkoYCR7YmFzZVVybH0vb2F1dGgyL2F1dGhgKTtcblxuICAgIGxldCBxdWVyeSA9IHtcbiAgICAgICAgXCJyZXNwb25zZV90eXBlXCI6IGVuY29kZVVSSShmbG93KSxcbiAgICAgICAgXCJzY29wZVwiOiBlbmNvZGVVUkkoc2NvcGVzKSxcbiAgICAgICAgXCJub25jZVwiOiBub25jZSxcbiAgICAgICAgXCJyZXNwb25zZV9tb2RlXCIgOiAnZnJhZ21lbnQnLFxuICAgICAgICBcImNsaWVudF9pZFwiOiBlbmNvZGVVUkkob2F1dGgyQ2xpZW50SWQpLFxuICAgICAgICBcInJlZGlyZWN0X3VyaVwiOiBlbmNvZGVVUkkocmVkaXJlY3RVcmkpXG4gICAgfTtcblxuICAgIGlmKGZsb3cgPT09IFJFU1BPTlNFX1RZUEVfQ09ERSl7XG4gICAgICAgIGNvbnN0IHBrY2UgPSBjcmVhdGVQS0NFQ29kZXMoKVxuICAgICAgICBwdXRPbkxvY2FsU3RvcmFnZShQS0NFLCBKU09OLnN0cmluZ2lmeShwa2NlKSk7XG4gICAgICAgIHF1ZXJ5Wydjb2RlX2NoYWxsZW5nZSddID0gcGtjZS5jb2RlQ2hhbGxlbmdlO1xuICAgICAgICBxdWVyeVsnY29kZV9jaGFsbGVuZ2VfbWV0aG9kJ10gPSAnUzI1Nic7XG4gICAgICAgIHF1ZXJ5WydhcHByb3ZhbF9wcm9tcHQnXSA9ICdmb3JjZSc7XG4gICAgfVxuXG4gICAgaWYgKHByb21wdCkge1xuICAgICAgICBxdWVyeVsncHJvbXB0J10gPSBwcm9tcHQ7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuSWRIaW50KSB7XG4gICAgICAgIHF1ZXJ5WydpZF90b2tlbl9oaW50J10gPSB0b2tlbklkSGludDtcbiAgICB9XG5cbiAgICBpZiAocHJvdmlkZXIpIHtcbiAgICAgICAgcXVlcnlbJ3Byb3ZpZGVyJ10gPSBwcm92aWRlcjtcbiAgICB9XG5cbiAgICB1cmwgPSB1cmwucXVlcnkocXVlcnkpO1xuICAgIC8vY29uc29sZS5sb2coYGdldEF1dGhVcmwgJHt1cmwudG9TdHJpbmcoKX1gKTtcbiAgICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9nb3V0VXJsID0gKGlkVG9rZW4pID0+IHtcbiAgICBsZXQgYmFzZVVybCA9IGdldE9BdXRoMklEUEJhc2VVcmwoKTtcbiAgICBsZXQgb2F1dGgyQ2xpZW50SWQgPSBnZXRPQXV0aDJDbGllbnRJZCgpO1xuICAgIGxldCB1cmwgPSBVUkkoYCR7YmFzZVVybH0vb2F1dGgyL2VuZC1zZXNzaW9uYCk7XG4gICAgbGV0IHN0YXRlID0gY3JlYXRlTm9uY2UoTk9OQ0VfTEVOKTtcbiAgICBsZXQgcG9zdExvZ091dFVyaSA9IGdldE9yaWdpbigpICsgJy9hdXRoL2xvZ291dCc7XG4gICAgLy8gc3RvcmUgbm9uY2UgdG8gY2hlY2sgaXQgbGF0ZXJcbiAgICBwdXRPbkxvY2FsU3RvcmFnZSgncG9zdF9sb2dvdXRfc3RhdGUnLCBzdGF0ZSk7XG4gICAgLyoqXG4gICAgICogcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHNob3VsZCBiZSBsaXN0ZWQgb24gb2F1dGgyIGNsaWVudCBzZXR0aW5nc1xuICAgICAqIG9uIElEUFxuICAgICAqIFwiU2VjdXJpdHkgU2V0dGluZ3NcIiBUYWIgLT4gTG9nb3V0IE9wdGlvbnMgLT4gUG9zdCBMb2dvdXQgVXJpc1xuICAgICAqL1xuICAgIHJldHVybiB1cmwucXVlcnkoe1xuICAgICAgICBcImlkX3Rva2VuX2hpbnRcIjogaWRUb2tlbixcbiAgICAgICAgXCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIjogZW5jb2RlVVJJKHBvc3RMb2dPdXRVcmkpLFxuICAgICAgICBcImNsaWVudF9pZFwiOiBlbmNvZGVVUkkob2F1dGgyQ2xpZW50SWQpLFxuICAgICAgICBcInN0YXRlXCI6IHN0YXRlLFxuICAgIH0pO1xufVxuXG5jb25zdCBjcmVhdGVOb25jZSA9IChsZW4pID0+IHtcbiAgICBsZXQgcG9zc2libGUgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5XCI7XG4gICAgbGV0IG5vbmNlID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBub25jZSArPSBwb3NzaWJsZS5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcG9zc2libGUubGVuZ3RoKSk7XG4gICAgfVxuICAgIHJldHVybiBub25jZTtcbn1cblxuZXhwb3J0IGNvbnN0IGRvTG9naW4gPSAoYmFja1VybCA9IG51bGwsIHByb3ZpZGVyID0gbnVsbCwgcHJvbXB0ID0gJ2NvbnNlbnQnKSA9PiB7XG4gICAgbGV0IHVybCA9IGdldEF1dGhVcmwoYmFja1VybCwgcHJvbXB0ICxudWxsLCBwcm92aWRlcik7XG4gICAgbGV0IGxvY2F0aW9uID0gZ2V0Q3VycmVudExvY2F0aW9uKClcbiAgICBsb2NhdGlvbi5yZXBsYWNlKHVybC50b1N0cmluZygpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGRvTG9naW5CYXNpY0xvZ2luID0gKGJhY2tVcmwgPSBudWxsKSA9PiB7XG4gICAgZG9Mb2dpbihiYWNrVXJsLCBudWxsLCBudWxsKTtcbn1cblxuY29uc3QgY3JlYXRlUEtDRUNvZGVzID0gKCkgPT4ge1xuICAgIGNvbnN0IGNvZGVWZXJpZmllciA9IGJhc2U2NFVSTEVuY29kZShyYW5kb21CeXRlcyg2NCkpXG4gICAgY29uc3QgY29kZUNoYWxsZW5nZSA9IGJhc2U2NFVSTEVuY29kZShzaGEyNTYoQnVmZmVyLmZyb20oY29kZVZlcmlmaWVyKSkpXG4gICAgY29uc3QgY3JlYXRlZEF0ID0gbmV3IERhdGUoKVxuICAgIGNvbnN0IGNvZGVQYWlyID0ge1xuICAgICAgICBjb2RlVmVyaWZpZXIsXG4gICAgICAgIGNvZGVDaGFsbGVuZ2UsXG4gICAgICAgIGNyZWF0ZWRBdFxuICAgIH1cbiAgICByZXR1cm4gY29kZVBhaXJcbn1cblxuZXhwb3J0IGNvbnN0IGVtaXRBY2Nlc3NUb2tlbiA9IGFzeW5jIChjb2RlLCBiYWNrVXJsID0gbnVsbCkgPT4ge1xuXG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IG9hdXRoMkNsaWVudElkID0gZ2V0T0F1dGgyQ2xpZW50SWQoKTtcbiAgICBsZXQgcmVkaXJlY3RVcmkgPSBnZXRBdXRoQ2FsbGJhY2soKTtcbiAgICBsZXQgcGtjZSA9IEpTT04ucGFyc2UoZ2V0RnJvbUxvY2FsU3RvcmFnZShQS0NFLCB0cnVlKSk7XG5cbiAgICBpZiAoYmFja1VybCAhPSBudWxsKVxuICAgICAgICByZWRpcmVjdFVyaSArPSBgP0JhY2tVcmw9JHtlbmNvZGVVUkkoYmFja1VybCl9YDtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICdjb2RlJyA6ICBjb2RlLFxuICAgICAgICAnZ3JhbnRfdHlwZScgOiAnYXV0aG9yaXphdGlvbl9jb2RlJyxcbiAgICAgICAgJ2NvZGVfdmVyaWZpZXInIDogcGtjZS5jb2RlVmVyaWZpZXIsXG4gICAgICAgIFwiY2xpZW50X2lkXCI6IGVuY29kZVVSSShvYXV0aDJDbGllbnRJZCksXG4gICAgICAgIFwicmVkaXJlY3RfdXJpXCI6IGVuY29kZVVSSShyZWRpcmVjdFVyaSlcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgICAgLy9jb25zdCByZXNwb25zZSA9IGF3YWl0IGh0dHAucG9zdChgJHtiYXNlVXJsfS9vYXV0aDIvdG9rZW5gLCBwYXlsb2FkKTtcbiAgICAgICAgLy9jb25zdCB7Ym9keToge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgaWRfdG9rZW4sIGV4cGlyZXNfaW59fSA9IHJlc3BvbnNlO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2Jhc2VVcmx9L29hdXRoMi90b2tlbmAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUmVxdWVzdCBmYWlsZWQ6JywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBsZXQge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgaWRfdG9rZW4sIGV4cGlyZXNfaW4sIGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbn0gPSBqc29uO1xuICAgICAgICByZXR1cm4ge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgaWRfdG9rZW4sIGV4cGlyZXNfaW4sIGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbn1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJBY2Nlc3NUb2tlbiA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoXG4gICAgICAgIGF3YWl0IHJldHJ5UHJvbWlzZShcbiAgICAgICAgICAgICgpID0+IGxvY2suYWNxdWlyZUxvY2soR0VUX1RPS0VOX1NJTEVOVExZX0xPQ0tfS0VZLCA1MDAwKSxcbiAgICAgICAgICAgIDEwXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgbGV0IGF1dGhJbmZvID0gIGdldEF1dGhJbmZvKCk7XG5cbiAgICAgICAgICAgIGlmKCAhYXV0aEluZm8gKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJNaXNzaW5nIEF1dGggaW5mby5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB7IGFjY2Vzc1Rva2VuLCBleHBpcmVzSW4sIGFjY2Vzc1Rva2VuVXBkYXRlZEF0LCByZWZyZXNoVG9rZW4gfSA9IGF1dGhJbmZvO1xuXG4gICAgICAgICAgICBzdG9yZUF1dGhJbmZvKG51bGwsIDAgLCByZWZyZXNoVG9rZW4gKVxuXG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCBsb2NrLnJlbGVhc2VMb2NrKEdFVF9UT0tFTl9TSUxFTlRMWV9MT0NLX0tFWSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRBY2Nlc3NUb2tlbiA9IGFzeW5jICgpID0+IHtcblxuICAgIGlmIChcbiAgICAgICAgYXdhaXQgcmV0cnlQcm9taXNlKFxuICAgICAgICAgICAgKCkgPT4gbG9jay5hY3F1aXJlTG9jayhHRVRfVE9LRU5fU0lMRU5UTFlfTE9DS19LRVksIDUwMDApLFxuICAgICAgICAgICAgMTBcbiAgICAgICAgKVxuICAgICkge1xuICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICBsZXQgYXV0aEluZm8gPSAgZ2V0QXV0aEluZm8oKTtcblxuICAgICAgICAgICAgaWYoICFhdXRoSW5mbyApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIk1pc3NpbmcgQXV0aCBpbmZvLlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHsgYWNjZXNzVG9rZW4sIGV4cGlyZXNJbiwgYWNjZXNzVG9rZW5VcGRhdGVkQXQsIHJlZnJlc2hUb2tlbiB9ID0gYXV0aEluZm87XG4gICAgICAgICAgICBsZXQgZmxvdyA9IGdldE9BdXRoMkZsb3coKTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGxpZmUgdGltZVxuICAgICAgICAgICAgbGV0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICAgICAgICAgICAgbGV0IHRpbWVFbGFwc2VkU2VjcyA9IChub3cgLSBhY2Nlc3NUb2tlblVwZGF0ZWRBdCk7XG4gICAgICAgICAgICBleHBpcmVzSW4gPSAoZXhwaXJlc0luIC0gQUNDRVNTX1RPS0VOX1NLRVdfVElNRSk7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBnZXRBY2Nlc3NUb2tlbiBub3cgJHtub3d9IGFjY2Vzc1Rva2VuVXBkYXRlZEF0ICR7YWNjZXNzVG9rZW5VcGRhdGVkQXR9IHRpbWVFbGFwc2VkU2VjcyAke3RpbWVFbGFwc2VkU2Vjc30gZXhwaXJlc0luICR7ZXhwaXJlc0lufS5gKTtcblxuICAgICAgICAgICAgaWYgKHRpbWVFbGFwc2VkU2VjcyA+IGV4cGlyZXNJbiB8fCBhY2Nlc3NUb2tlbiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYGdldEFjY2Vzc1Rva2VuIGFjY2VzcyB0b2tlbiBleHBpcmVkYClcbiAgICAgICAgICAgICAgICBpZihmbG93ID09PSBSRVNQT05TRV9UWVBFX0NPREUgJiYgdXNlT0F1dGgyUmVmcmVzaFRva2VuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnZ2V0QWNjZXNzVG9rZW4gZ2V0dGluZyBuZXcgYWNjZXNzIHRva2VuLCBhY2Nlc3MgdG9rZW4gZ290IHZvaWQnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyQXV0aEluZm8oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwibWlzc2luZyBSZWZyZXNoIFRva2VuXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHJlZnJlc2hBY2Nlc3NUb2tlbihyZWZyZXNoVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBsZXQge2FjY2Vzc190b2tlbiwgZXhwaXJlc19pbiwgcmVmcmVzaF90b2tlbn0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgZ2V0QWNjZXNzVG9rZW4gYWNjZXNzX3Rva2VuICR7YWNjZXNzX3Rva2VufSBleHBpcmVzX2luICR7ZXhwaXJlc19pbn0gcmVmcmVzaF90b2tlbiAke3JlZnJlc2hfdG9rZW59YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmcmVzaF90b2tlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hfdG9rZW4gPSBudWxsOyAvLyBub3QgdXNpbmcgcm90YXRlIHBvbGljeVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlQXV0aEluZm8oYWNjZXNzX3Rva2VuLCBleHBpcmVzX2luLCByZWZyZXNoX3Rva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgZ2V0QWNjZXNzVG9rZW4gYWNjZXNzX3Rva2VuICR7YWNjZXNzX3Rva2VufSBbTkVXXWApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjZXNzX3Rva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbGVhckF1dGhJbmZvKCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJBY2Nlc3MgVG9rZW4gRXhwaXJlZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBnZXRBY2Nlc3NUb2tlbiBhY2Nlc3NfdG9rZW4gJHthY2Nlc3NUb2tlbn0gW0NBQ0hFRF1gKTtcbiAgICAgICAgICAgIHJldHVybiBhY2Nlc3NUb2tlbjtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IGxvY2sucmVsZWFzZUxvY2soR0VUX1RPS0VOX1NJTEVOVExZX0xPQ0tfS0VZKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBFcnJvcihcIkxvY2sgYWNxdWlyZSBlcnJvci5cIik7XG59XG5cbmV4cG9ydCBjb25zdCByZWZyZXNoQWNjZXNzVG9rZW4gPSBhc3luYyAocmVmcmVzaF90b2tlbikgPT4ge1xuXG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IG9hdXRoMkNsaWVudElkID0gZ2V0T0F1dGgyQ2xpZW50SWQoKTtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICdncmFudF90eXBlJyA6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgXCJjbGllbnRfaWRcIjogZW5jb2RlVVJJKG9hdXRoMkNsaWVudElkKSxcbiAgICAgICAgXCJyZWZyZXNoX3Rva2VuXCI6IHJlZnJlc2hfdG9rZW5cbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS9vYXV0aDIvdG9rZW5gLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKXtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudExvY2F0aW9uID0gZ2V0Q3VycmVudFBhdGhOYW1lKCk7XG4gICAgICAgICAgICAgICAgc2V0U2Vzc2lvbkNsZWFyaW5nU3RhdGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYCR7cmVzcG9uc2Uuc3RhdHVzfSAtICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcblxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFJlcXVlc3QgZmFpbGVkOiAgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBsZXQge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgZXhwaXJlc19pbn0gPSBqc29uO1xuICAgICAgICByZXR1cm4ge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgZXhwaXJlc19pbn1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IHN0b3JlQXV0aEluZm8gPSAoYWNjZXNzVG9rZW4sIGV4cGlyZXNJbiwgcmVmcmVzaFRva2VuID0gbnVsbCwgaWRUb2tlbiA9IG51bGwpID0+IHtcblxuICAgIGxldCBmb3JtZXJBdXRoSW5mbyA9IGdldEF1dGhJbmZvKCk7XG5cbiAgICBsZXQgYXV0aEluZm8gPSB7XG4gICAgICAgIGFjY2Vzc1Rva2VuIDogYWNjZXNzVG9rZW4sXG4gICAgICAgIGV4cGlyZXNJbjogZXhwaXJlc0luLFxuICAgICAgICBhY2Nlc3NUb2tlblVwZGF0ZWRBdCA6IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApLFxuICAgIH07XG5cbiAgICBpZihyZWZyZXNoVG9rZW4gPT09IG51bGwgJiYgZm9ybWVyQXV0aEluZm8pe1xuICAgICAgICByZWZyZXNoVG9rZW4gPSBmb3JtZXJBdXRoSW5mby5yZWZyZXNoVG9rZW47XG4gICAgfVxuXG4gICAgaWYoaWRUb2tlbiA9PT0gbnVsbCAmJiBmb3JtZXJBdXRoSW5mbyl7XG4gICAgICAgIGlkVG9rZW4gPSBmb3JtZXJBdXRoSW5mby5pZFRva2VuO1xuICAgIH1cblxuICAgIGlmKHJlZnJlc2hUb2tlbil7XG4gICAgICAgIGF1dGhJbmZvWydyZWZyZXNoVG9rZW4nXSA9IHJlZnJlc2hUb2tlbjtcbiAgICB9XG5cbiAgICBpZihpZFRva2VuKXtcbiAgICAgICAgYXV0aEluZm9bJ2lkVG9rZW4nXSA9IGlkVG9rZW47XG4gICAgfVxuXG4gICAgcHV0T25Mb2NhbFN0b3JhZ2UoQVVUSF9JTkZPLCBKU09OLnN0cmluZ2lmeShhdXRoSW5mbykpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0QXV0aEluZm8gPSAoKSA9PiB7XG4gICAgbGV0IHJlcyA9IGdldEZyb21Mb2NhbFN0b3JhZ2UoQVVUSF9JTkZPLCBmYWxzZSlcbiAgICBpZihyZXMgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcyk7XG59XG5cbmV4cG9ydCBjb25zdCBjbGVhckF1dGhJbmZvID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZShBVVRIX0lORk8pO1xuICAgICAgICByZW1vdmVGcm9tTG9jYWxTdG9yYWdlKE5PTkNFKTtcbiAgICAgICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZShQS0NFKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJZFRva2VuID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnN0IGF1dGhJbmZvID0gZ2V0QXV0aEluZm8oKTtcbiAgICAgICAgaWYoYXV0aEluZm8pe1xuICAgICAgICAgICAgcmV0dXJuIGF1dGhJbmZvLmlkVG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE9BdXRoMkNsaWVudElkID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuT0FVVEgyX0NMSUVOVF9JRDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0T0F1dGgyRmxvdyA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93Lk9BVVRIMl9GTE9XIHx8IFwidG9rZW4gaWRfdG9rZW5cIjtcbiAgICB9XG4gICAgcmV0dXJuIFwidG9rZW4gaWRfdG9rZW5cIjtcbn1cblxuZXhwb3J0IGNvbnN0IHVzZU9BdXRoMlJlZnJlc2hUb2tlbiA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW4od2luZG93Lk9BVVRIMl9VU0VfUkVGUkVTSF9UT0tFTiB8fCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRPQXV0aDJJRFBCYXNlVXJsID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuSURQX0JBU0VfVVJMO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRPQXV0aDJTY29wZXMgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5TQ09QRVM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGluaXRMb2dPdXQgPSAoKSA9PiB7XG4gICAgbGV0IGxvY2F0aW9uID0gZ2V0Q3VycmVudExvY2F0aW9uKCk7XG4gICAgbG9jYXRpb24ucmVwbGFjZShnZXRMb2dvdXRVcmwoZ2V0SWRUb2tlbigpKS50b1N0cmluZygpKTtcbn1cblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlSWRUb2tlbiA9IChpZFRva2VuLCBpc3N1ZXIsIGF1ZGllbmNlKSA9PiB7XG5cbiAgICBsZXQgdmVyaWZpZXIgPSBuZXcgSWRUb2tlblZlcmlmaWVyKHtcbiAgICAgICAgaXNzdWVyOiBpc3N1ZXIsXG4gICAgICAgIGF1ZGllbmNlOiBhdWRpZW5jZVxuICAgIH0pO1xuXG4gICAgbGV0IHN0b3JlZE5vbmNlID0gZ2V0RnJvbUxvY2FsU3RvcmFnZShOT05DRSwgdHJ1ZSk7XG4gICAgbGV0IGp3dCA9IHZlcmlmaWVyLmRlY29kZShpZFRva2VuKTtcbiAgICBsZXQgYWxnID0gand0LmhlYWRlci5hbGc7XG4gICAgbGV0IGtpZCA9IGp3dC5oZWFkZXIua2lkO1xuICAgIGxldCBhdWQgPSBqd3QucGF5bG9hZC5hdWQ7XG4gICAgbGV0IGlzcyA9IGp3dC5wYXlsb2FkLmlzcztcbiAgICBsZXQgZXhwID0gand0LnBheWxvYWQuZXhwO1xuICAgIGxldCBuYmYgPSBqd3QucGF5bG9hZC5uYmY7XG4gICAgbGV0IHRub25jZSA9IGp3dC5wYXlsb2FkLm5vbmNlIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdG5vbmNlID09IHN0b3JlZE5vbmNlICYmIGF1ZCA9PSBhdWRpZW5jZSAmJiBpc3MgPT0gaXNzdWVyO1xufVxuXG5leHBvcnQgY29uc3QgcGFzc3dvcmRsZXNzU3RhcnQgPSAocGFyYW1zKSA9PiB7XG5cbiAgICBsZXQgb2F1dGgyQ2xpZW50SWQgPSBnZXRPQXV0aDJDbGllbnRJZCgpO1xuICAgIGxldCBzY29wZXMgPSBnZXRPQXV0aDJTY29wZXMoKTtcbiAgICBsZXQgbm9uY2UgPSBjcmVhdGVOb25jZShOT05DRV9MRU4pO1xuICAgIC8vIHN0b3JlIG5vbmNlIHRvIGNoZWNrIGl0IGxhdGVyXG4gICAgcHV0T25Mb2NhbFN0b3JhZ2UoTk9OQ0UsIG5vbmNlKTtcbiAgICBsZXQgYmFzZVVybCA9IGdldE9BdXRoMklEUEJhc2VVcmwoKTtcbiAgICBsZXQgdXJsID0gVVJJKGAke2Jhc2VVcmx9L29hdXRoMi9hdXRoYCk7XG5cbiAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgICAgXCJyZXNwb25zZV90eXBlXCI6IFwib3RwXCIsXG4gICAgICAgIFwic2NvcGVcIjogZW5jb2RlVVJJKHNjb3BlcyksXG4gICAgICAgIFwibm9uY2VcIjogbm9uY2UsXG4gICAgICAgIFwiY2xpZW50X2lkXCI6IGVuY29kZVVSSShvYXV0aDJDbGllbnRJZCksXG4gICAgICAgIFwiY29ubmVjdGlvblwiOiBwYXJhbXMuY29ubmVjdGlvbiB8fCBcImVtYWlsXCIsXG4gICAgICAgIFwic2VuZFwiOiBwYXJhbXMuc2VuZCB8fCBcImNvZGVcIixcbiAgICB9O1xuXG4gICAgaWYocGFyYW1zLmhhc093blByb3BlcnR5KCdlbWFpbCcpKXtcbiAgICAgICAgcGF5bG9hZFtcImVtYWlsXCJdID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5lbWFpbCk7XG4gICAgfVxuXG4gICAgaWYocGFyYW1zLmhhc093blByb3BlcnR5KCdwaG9uZV9udW1iZXInKSl7XG4gICAgICAgIHBheWxvYWRbXCJwaG9uZV9udW1iZXJcIl0gPSBlbmNvZGVVUklDb21wb25lbnQocGFyYW1zLnBob25lX251bWJlcik7XG4gICAgfVxuXG4gICAgbGV0IHJlcSA9IGh0dHAucG9zdCh1cmwudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gcmVxLnNlbmQocGF5bG9hZCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgIGxldCBqc29uID0gcmVzLmJvZHk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3Jlc3BvbnNlOmpzb259KTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH0pO1xuXG59XG5cbmV4cG9ydCBjb25zdCBwYXNzd29yZGxlc3NMb2dpbiA9IChwYXJhbXMpID0+IChkaXNwYXRjaCkgPT4ge1xuXG4gICAgbGV0IG9hdXRoMkNsaWVudElkID0gZ2V0T0F1dGgyQ2xpZW50SWQoKTtcbiAgICBsZXQgc2NvcGVzID0gZ2V0T0F1dGgyU2NvcGVzKCk7XG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IHVybCA9IFVSSShgJHtiYXNlVXJsfS9vYXV0aDIvdG9rZW5gKTtcblxuICAgIGlmKCFwYXJhbXMuaGFzT3duUHJvcGVydHkoXCJvdHBcIikpe1xuICAgICAgICB0aHJvdyBFcnJvcihcIm90cCBwYXJhbSBpcyBtYW5kYXRvcnkuXCIpO1xuICAgIH1cblxuICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgICBcImdyYW50X3R5cGVcIjogXCJwYXNzd29yZGxlc3NcIixcbiAgICAgICAgXCJjb25uZWN0aW9uXCI6IHBhcmFtcy5jb25uZWN0aW9uIHx8IFwiZW1haWxcIixcbiAgICAgICAgXCJzY29wZVwiOiBlbmNvZGVVUkkoc2NvcGVzKSxcbiAgICAgICAgXCJjbGllbnRfaWRcIjogZW5jb2RlVVJJKG9hdXRoMkNsaWVudElkKSxcbiAgICAgICAgXCJvdHBcIjogcGFyYW1zLm90cFxuICAgIH07XG5cbiAgICBpZihwYXJhbXMuaGFzT3duUHJvcGVydHkoJ2VtYWlsJykpe1xuICAgICAgICBwYXlsb2FkW1wiZW1haWxcIl0gPSBlbmNvZGVVUklDb21wb25lbnQocGFyYW1zLmVtYWlsKTtcbiAgICB9XG5cbiAgICBpZihwYXJhbXMuaGFzT3duUHJvcGVydHkoJ3Bob25lX251bWJlcicpKXtcbiAgICAgICAgcGF5bG9hZFtcInBob25lX251bWJlclwiXSA9IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbXMucGhvbmVfbnVtYmVyKTtcbiAgICB9XG5cbiAgICBsZXQgcmVxID0gaHR0cC5wb3N0KHVybC50b1N0cmluZygpKTtcblxuICAgIHJldHVybiByZXEuc2VuZChwYXlsb2FkKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIG5vdyB3ZSBnb3QgdG9rZW5cbiAgICAgICAgICAgIGxldCBqc29uID0gcmVzLmJvZHk7XG4gICAgICAgICAgICBsZXQge2FjY2Vzc190b2tlbiwgZXhwaXJlc19pbiwgcmVmcmVzaF90b2tlbiwgaWRfdG9rZW59ID0ganNvbjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZyZXNoX3Rva2VuID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJlZnJlc2hfdG9rZW4gPSBudWxsOyAvLyBub3QgdXNpbmcgcm90YXRlIHBvbGljeVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGlkX3Rva2VuID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGlkX3Rva2VuID0gbnVsbDsgLy8gbm90IHVzaW5nIHJvdGF0ZSBwb2xpY3lcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdmVyaWZ5IGlkIHRva2VuXG5cbiAgICAgICAgICAgIGlmIChpZF90b2tlbikge1xuICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVJZFRva2VuKGlkX3Rva2VuLCBiYXNlVXJsLCBvYXV0aDJDbGllbnRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJpZCB0b2tlbiBpcyBub3QgdmFsaWQuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RvcmVBdXRoSW5mbyhhY2Nlc3NfdG9rZW4sIGV4cGlyZXNfaW4sIHJlZnJlc2hfdG9rZW4sIGlkX3Rva2VuKTtcblxuICAgICAgICAgICAgaWYgKGRpc3BhdGNoKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTRVRfTE9HR0VEX1VTRVIsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHtzZXNzaW9uU3RhdGU6IG51bGx9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3Jlc3BvbnNlOiBqc29ufSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2goZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfSk7XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtjb25uZWN0fSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcblxuaW1wb3J0IHtcbiAgICBkb0xvZ291dCxcbiAgICBTRVNTSU9OX1NUQVRFX1NUQVRVU19DSEFOR0VELFxuICAgIFNFU1NJT05fU1RBVEVfU1RBVFVTX0VSUk9SLFxuICAgIFNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCxcbiAgICB1cGRhdGVTZXNzaW9uU3RhdGVTdGF0dXMsXG4gICAgb25Vc2VyQXV0aFxufSBmcm9tIFwiLi4vYWN0aW9uc1wiO1xuXG5pbXBvcnQge1xuICAgIGdldEF1dGhVcmwsXG4gICAgaW5pdExvZ091dFxufSBmcm9tIFwiLi4vbWV0aG9kc1wiO1xuXG5pbXBvcnQgVVJJIGZyb20gXCJ1cmlqc1wiXG4vLyBpbiBtaW51dGVzXG5jb25zdCBDSEVDS19TRVNTSU9OX0lOVEVSVkFMID0gKDEwMDAgKiA2MCkgKiAzMDtcblxuY2xhc3MgT1BTZXNzaW9uQ2hlY2tlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y29uc3RydWN0b3JcIik7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9e1xuICAgICAgICAgICAgb3BGcmFtZV9zcmM6IFwiXCIsXG4gICAgICAgICAgICBycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVfc3JjIDogXCJcIlxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVjZWl2ZU1lc3NhZ2UgPSB0aGlzLnJlY2VpdmVNZXNzYWdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVjZWl2ZU1lc3NhZ2VGcm9tQ2hpbGQgPSB0aGlzLnJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0VGltZXIgPSB0aGlzLnNldFRpbWVyLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY2hlY2tTZXNzaW9uID0gdGhpcy5jaGVja1Nlc3Npb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblNldHVwQ2hlY2tTZXNzaW9uUlAgPSB0aGlzLm9uU2V0dXBDaGVja1Nlc3Npb25SUC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCA9IHRoaXMucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5vcEZyYW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5ycENoZWNrU2Vzc2lvblN0YXRlRnJhbWUgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuc2V0T1BGcmFtZVJlZiA9IGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vcEZyYW1lID0gZWxlbWVudDtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnNldENoZWNrU2Vzc2lvblN0YXRlRnJhbWVSZWYgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lID0gZWxlbWVudDtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgT1BTZXNzaW9uQ2hlY2tlcjo6Y29tcG9uZW50V2lsbFVubW91bnRgKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMucmVjZWl2ZU1lc3NhZ2VGcm9tQ2hpbGQsIGZhbHNlKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLnJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgaWYoIXRoaXMucHJvcHMuaXNMb2dnZWRVc2VyKSByZXR1cm47XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRNb3VudFwiKTtcbiAgICAgICAgLy8gYWRkIGV2ZW50IGxpc3RlbmVyIHRvIHJlY2VpdmUgbWVzc2FnZXMgZnJvbSBpZHAgdGhyb3VnaCBPUCBmcmFtZVxuICAgICAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKCB3aW5kb3cubG9jYXRpb24gIT09IHdpbmRvdy5wYXJlbnQubG9jYXRpb24gKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNvbXBvbmVudERpZE1vdW50IHJ1bm5pbmcgaW5zaWRlIGlmcmFtZSwgc2tpcHBpbmdcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc2V0IHVwIG9wIGZyYW1lXG4gICAgICAgICAgICB0aGlzLm9uU2V0dXBDaGVja1Nlc3Npb25SUCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkKGV2ZW50KXtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZFwiKTtcbiAgICAgICAgbGV0IGZyYW1lID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZih0aGlzLnN0YXRlLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmMgPT0gXCJcIikgcmV0dXJuO1xuXG4gICAgICAgIC8vY29uc29sZS5sb2coYE9QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCBmcmFtZS5zcmMgJHtmcmFtZS5zcmN9YCk7XG4gICAgICAgIC8vIHRoaXMgaXMgY2FsbGVkIGJjIHdlIHNldCB0aGUgUlAgZnJhbWUgdG8gY2hlY2sgdGhlIHNlc3Npb24gc3RhdGUgd2l0aCBwcm9tcD1ub25lXG4gICAgICAgIGlmKCFmcmFtZS5jb250ZW50RG9jdW1lbnQpe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCAhZnJhbWUuY29udGVudERvY3VtZW50KSBpcyBudWxsXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLnJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkLCBmYWxzZSk7XG4gICAgICAgIGxldCByZXN1bHRVcmwgPSBuZXcgVVJJKGZyYW1lLmNvbnRlbnREb2N1bWVudC5VUkwpO1xuICAgICAgICAvLyB0ZXN0IHRoZSByZXN1bHQgVXJsMXFhXG4gICAgICAgIGNvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkIC0gcmVzdWx0VXJsIFwiICsgcmVzdWx0VXJsKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gcmVzdWx0VXJsLnNlYXJjaCh0cnVlKTtcbiAgICAgICAgbGV0IGZyYWdtZW50ID0gVVJJLnBhcnNlUXVlcnkocmVzdWx0VXJsLmZyYWdtZW50KCkpO1xuICAgICAgICAvLyBjaGVjayBpZiB3ZSBoYXZlIHNvbWUgZXJyb3Igb24gcXVlcnkgc3RyaW5nIG9yIGZyYWdtZW50XG4gICAgICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgICAgIGlmKHF1ZXJ5Lmhhc093blByb3BlcnR5KFwiZXJyb3JcIikpIGVycm9yID0gcXVlcnlbJ2Vycm9yJ107XG4gICAgICAgIGlmKGZyYWdtZW50Lmhhc093blByb3BlcnR5KFwiZXJyb3JcIikpIGVycm9yID0gZnJhZ21lbnRbJ2Vycm9yJ107XG4gICAgICAgIGlmKGVycm9yKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkIC0gZXJyb3IgXCIgKyBlcnJvcik7XG4gICAgICAgICAgICAvLyBjaGVjayBzZXNzaW9uIHN0YXRlIHdpdGggcHJvbXB0IG5vbmUgZmFpbGVkIGRvIGxvZ291dDtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ09QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCAtIGluaXRpYXRpbmcgbG9nb3V0Jyk7XG4gICAgICAgICAgICBpbml0TG9nT3V0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm8gZXJyb3Igd2Ugc3RpbGwgbG9nZ2VkIHNvIHJlIGluaXQgdGhlIGNoZWNraW5nXG4gICAgICAgIC8vIHNldCB1cCBvcCBmcmFtZVxuICAgICAgICAvL2NvbnNvbGUubG9nKGBPUFNlc3Npb25DaGVja2VyOjpycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQgdGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgJHt0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1c31gKTtcbiAgICAgICAgdGhpcy5wcm9wcy51cGRhdGVTZXNzaW9uU3RhdGVTdGF0dXMoU0VTU0lPTl9TVEFURV9TVEFUVVNfVU5DSEFOR0VEKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRVcGRhdGVcIik7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cyAhPT0gcHJldlByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cykge1xuICAgICAgICAgICAgaWYodGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgPT09IFNFU1NJT05fU1RBVEVfU1RBVFVTX0NIQU5HRUQpe1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRVcGRhdGUgc2Vzc2lvblN0YXRlU3RhdHVzID09PSBjaGFuZ2VkXCIpO1xuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBnZXRBdXRoVXJsKG51bGwsICdub25lJyk7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LXNlc3Npb24tMV8wLmh0bWwjUlBpZnJhbWVcbiAgICAgICAgICAgICAgICAvLyBzZXQgdGhlIGZyYW1lIHRvIGlkcFxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhdGUucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lX3NyYyA9PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsuLi50aGlzLnN0YXRlLCBvcEZyYW1lX3NyYyA6IFwiXCIsIHJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmMgOiB1cmwudG9TdHJpbmcoKX0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzID09PSBTRVNTSU9OX1NUQVRFX1NUQVRVU19VTkNIQU5HRUQpe1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRVcGRhdGUgc2Vzc2lvblN0YXRlU3RhdHVzID09PSB1bmNoYW5nZWRcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNldHVwQ2hlY2tTZXNzaW9uUlAoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5wcm9wcy5zZXNzaW9uU3RhdGUgIT09IHByZXZQcm9wcy5zZXNzaW9uU3RhdGUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coYE9QU2Vzc2lvbkNoZWNrZXI6OmNvbXBvbmVudERpZFVwZGF0ZSB1cGRhdGVkIHNlc3Npb24gc3RhdGUgJHt0aGlzLnByb3BzLnNlc3Npb25TdGF0ZX1gKTtcbiAgICAgICAgICAgIHRoaXMub25TZXR1cENoZWNrU2Vzc2lvblJQKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVja1Nlc3Npb24oKVxuICAgIHtcblxuICAgICAgICBsZXQgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc29sZS5sb2coYE9QU2Vzc2lvbkNoZWNrZXI6OmNoZWNrU2Vzc2lvbiBub3cgJHtub3cudG9Mb2NhbGVTdHJpbmcoKX1gKTtcblxuICAgICAgICBpZih0aGlzLm9wRnJhbWUgPT0gbnVsbCApe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNoZWNrU2Vzc2lvbiAtIHRoaXMub3BGcmFtZSA9PSBudWxsIFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlID09IG51bGwpe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNoZWNrU2Vzc2lvbiAtIHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlID09IG51bGwgXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5wcm9wcy5jbGllbnRJZCA9PSBudWxsKXtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjaGVja1Nlc3Npb24gLSB0aGlzLnByb3BzLmNsaWVudElkID09IG51bGwgXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRhcmdldE9yaWdpbiA9IHRoaXMucHJvcHMuaWRwQmFzZVVybDtcbiAgICAgICAgbGV0IGZyYW1lID0gdGhpcy5vcEZyYW1lLmNvbnRlbnRXaW5kb3c7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGhpcy5wcm9wcy5jbGllbnRJZCArIFwiIFwiICsgdGhpcy5wcm9wcy5zZXNzaW9uU3RhdGU7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjaGVja1Nlc3Npb24gLSBtZXNzYWdlXCIgKyBtZXNzYWdlKTtcbiAgICAgICAgLy8gcG9zdE1lc3NhZ2UgdG8gdGhlIE9QIGlmcmFtZVxuICAgICAgICBmcmFtZS5wb3N0TWVzc2FnZShtZXNzYWdlLCB0YXJnZXRPcmlnaW4pO1xuICAgIH1cblxuICAgIHNldFRpbWVyKGV2ZW50KVxuICAgIHtcbiAgICAgICAgbGV0IGZyYW1lID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZih0aGlzLnN0YXRlLm9wRnJhbWVfc3JjID09IFwiXCIpIHJldHVybjtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnNldFRpbWVyXCIpO1xuXG4gICAgICAgIGlmKCF0aGlzLnByb3BzLmlzTG9nZ2VkVXNlcil7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6c2V0VGltZXIgLSAhdGhpcy5wcm9wcy5pc0xvZ2dlZFVzZXJcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cyAhPT0gU0VTU0lPTl9TVEFURV9TVEFUVVNfVU5DSEFOR0VEICl7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6c2V0VGltZXIgLSB0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1c1wiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgT1BTZXNzaW9uQ2hlY2tlcjo6c2V0VGltZXIgc2V0dGluZyBpbnRlcnZhbCAke0NIRUNLX1NFU1NJT05fSU5URVJWQUx9YCk7XG4gICAgICAgICAgICB0aGlzLmludGVydmFsID0gd2luZG93LnNldEludGVydmFsKHRoaXMuY2hlY2tTZXNzaW9uLCBDSEVDS19TRVNTSU9OX0lOVEVSVkFMKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2V0dXBDaGVja1Nlc3Npb25SUCgpe1xuICAgICAgICAvLyBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3Qtc2Vzc2lvbi0xXzAuaHRtbCNPUGlmcmFtZVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6Om9uU2V0dXBDaGVja1Nlc3Npb25SUFwiKTtcbiAgICAgICAgaWYodGhpcy5vcEZyYW1lID09IG51bGwpe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6Om9uU2V0dXBDaGVja1Nlc3Npb25SUCAtIG9wRnJhbWUgaXMgbnVsbFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5yZWNlaXZlTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICBjb25zdCBzZXNzaW9uQ2hlY2tFbmRwb2ludCA9IGAke3RoaXMucHJvcHMuaWRwQmFzZVVybH0vb2F1dGgyL2NoZWNrLXNlc3Npb25gO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6b25TZXR1cENoZWNrU2Vzc2lvblJQIC0gc2Vzc2lvbkNoZWNrRW5kcG9pbnQgXCIrIHNlc3Npb25DaGVja0VuZHBvaW50KTtcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5vcEZyYW1lX3NyYyA9PSBcIlwiKVxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgb3BGcmFtZV9zcmMgOiBzZXNzaW9uQ2hlY2tFbmRwb2ludCwgcnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lX3NyYyA6IFwiXCJ9KTtcbiAgICB9XG5cbiAgICByZWNlaXZlTWVzc2FnZUZyb21DaGlsZChlKXtcbiAgICAgICAgaWYgKHR5cGVvZiBlLmRhdGEgPT09ICdzdHJpbmcnIHx8IGUuZGF0YSBpbnN0YW5jZW9mIFN0cmluZyl7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBhdXRoSW5mbyA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoYXV0aEluZm8uaGFzT3duUHJvcGVydHkoJ2FjdGlvbicpICYmIGF1dGhJbmZvLmFjdGlvbiA9PSAnU0VUX0FVVEhfSU5GT19TSUxFTlRMWScpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLnJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25Vc2VyQXV0aChcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhJbmZvLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhJbmZvLmlkX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aEluZm8uc2Vzc2lvbl9zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhJbmZvLmV4cGlyZXNfaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoSW5mby5oYXNPd25Qcm9wZXJ0eShcInJlZnJlc2hfdG9rZW5cIikgPyBhdXRoSW5mby5yZWZyZXNoX3Rva2VuIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlY2VpdmVNZXNzYWdlKGUpXG4gICAge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cmVjZWl2ZU1lc3NhZ2UgLSBlLm9yaWdpbiBcIiArIGUub3JpZ2luKTtcbiAgICAgICAgaWYgKGUub3JpZ2luICE9PSB0aGlzLnByb3BzLmlkcEJhc2VVcmwgKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cmVjZWl2ZU1lc3NhZ2UgLSBlLm9yaWdpbiAhPT0gdGhpcy5wcm9wcy5pZHBCYXNlVXJsXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGF0dXMgPSBlLmRhdGE7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZWNlaXZlTWVzc2FnZSAtIHN0YXR1cyBcIisgc3RhdHVzKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlY2VpdmVNZXNzYWdlIC0gdGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgXCIrIHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlY2VpdmVNZXNzYWdlIC0gdGhpcy5wcm9wcy5pc0xvZ2dlZFVzZXIgXCIrIHRoaXMucHJvcHMuaXNMb2dnZWRVc2VyKTtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgPT09IFNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCAmJiB0aGlzLnByb3BzLmlzTG9nZ2VkVXNlcil7XG4gICAgICAgICAgICBpZihzdGF0dXMgPT09IFNFU1NJT05fU1RBVEVfU1RBVFVTX0NIQU5HRUQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlY2VpdmVNZXNzYWdlIC0gc2Vzc2lvbiBzdGF0ZSBoYXMgY2hhbmdlZCBvbiBPUFwiKTtcbiAgICAgICAgICAgICAgICAvLyBzaWduYWwgc2Vzc2lvbiBzdGFydCBjaGVja1xuICAgICAgICAgICAgICAgIC8vIGtpbGwgdGltZXJcblxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBXaGVuIHRoZSBSUCBkZXRlY3RzIGEgc2Vzc2lvbiBzdGF0ZSBjaGFuZ2UsIGl0IFNIT1VMRCBmaXJzdCB0cnkgYSBwcm9tcHQ9bm9uZSByZXF1ZXN0IHdpdGhpbiBhblxuICAgICAgICAgICAgICAgICAqIGlmcmFtZSB0byBvYnRhaW4gYSBuZXcgSUQgVG9rZW4gYW5kIHNlc3Npb24gc3RhdGUsIHNlbmRpbmcgdGhlIG9sZCBJRCBUb2tlbiBhcyB0aGUgaWRfdG9rZW5faGludC5cbiAgICAgICAgICAgICAgICAgKiBJZiB0aGUgUlAgcmVjZWl2ZXMgYW4gSUQgdG9rZW4gZm9yIHRoZSBzYW1lIEVuZC1Vc2VyLCBpdCBTSE9VTEQgc2ltcGx5IHVwZGF0ZSB0aGUgdmFsdWUgb2YgdGhlXG4gICAgICAgICAgICAgICAgICogc2Vzc2lvbiBzdGF0ZS4gSWYgaXQgZG9lcyBub3QgcmVjZWl2ZSBhbiBJRCB0b2tlbiBvciByZWNlaXZlcyBhbiBJRCB0b2tlbiBmb3IgYW5vdGhlciBFbmQtVXNlcixcbiAgICAgICAgICAgICAgICAgKiB0aGVuIGl0IG5lZWRzIHRvIGhhbmRsZSB0aGlzIGNhc2UgYXMgYSBsb2dvdXQgZm9yIHRoZSBvcmlnaW5hbCBFbmQtVXNlci4gSWYgdGhlIG9yaWdpbmFsIEVuZC1Vc2VyXG4gICAgICAgICAgICAgICAgICogaXMgYWxyZWFkeSBsb2dnZWQgb3V0IGF0IHRoZSBSUCB3aGVuIHRoZSBzdGF0ZSBjaGFuZ2VzIGluZGljYXRlIHRoYXQgRW5kLVVzZXIgc2hvdWxkIGJlIGxvZ2dlZCBvdXQsXG4gICAgICAgICAgICAgICAgICogdGhlIGxvZ291dCBpcyBjb25zaWRlcmVkIHRvIGhhdmUgc3VjY2VlZGVkLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5yZWNlaXZlTWVzc2FnZUZyb21DaGlsZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLnJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy51cGRhdGVTZXNzaW9uU3RhdGVTdGF0dXMoU0VTU0lPTl9TVEFURV9TVEFUVVNfQ0hBTkdFRCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGlmKCF0aGlzLnByb3BzLmlzTG9nZ2VkVXNlcikgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmKCF0aGlzLnByb3BzLnNlc3Npb25TdGF0ZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmICggd2luZG93LmxvY2F0aW9uICE9PSB3aW5kb3cucGFyZW50LmxvY2F0aW9uICkge1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZW5kZXIgcnVubmluZyBpbnNpZGUgaWZyYW1lLCBza2lwcGluZ1wiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZW5kZXJcIik7XG4gICAgICAgIHJldHVybihcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3toZWlnaHQ6ICcwcHgnfX0+XG4gICAgICAgICAgICAgICAgPGlmcmFtZVxuICAgICAgICAgICAgICAgICAgICByZWY9e3RoaXMuc2V0T1BGcmFtZVJlZn1cbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJPUEZyYW1lXCIgb25Mb2FkPXt0aGlzLnNldFRpbWVyfVxuICAgICAgICAgICAgICAgICAgICBzcmM9e3RoaXMuc3RhdGUub3BGcmFtZV9zcmN9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7dmlzaWJpbGl0eTonaGlkZGVuJywgcG9zaXRpb246ICdhYnNvbHV0ZScsIGxlZnQ6IDAsIHRvcDogMCwgYm9yZGVyOiAnbm9uZScsIHdpZHRoOjAgLCBoZWlnaHQ6MH19Pj48L2lmcmFtZT5cbiAgICAgICAgICAgICAgICA8aWZyYW1lIHJlZj17dGhpcy5zZXRDaGVja1Nlc3Npb25TdGF0ZUZyYW1lUmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJSUENIZWNrU2Vzc2lvblN0YXRlRnJhbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXt0aGlzLnN0YXRlLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmN9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkxvYWQ9e3RoaXMucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3t2aXNpYmlsaXR5OidoaWRkZW4nLCBwb3NpdGlvbjogJ2Fic29sdXRlJywgbGVmdDogMCwgdG9wOiAwLCBib3JkZXI6ICdub25lJywgd2lkdGg6MCAsIGhlaWdodDowfX0+PjwvaWZyYW1lPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBsb2dnZWRVc2VyU3RhdGUgfSkgPT4gKHtcbiAgICBzZXNzaW9uU3RhdGU6IGxvZ2dlZFVzZXJTdGF0ZS5zZXNzaW9uU3RhdGUsXG4gICAgaXNMb2dnZWRVc2VyOiBsb2dnZWRVc2VyU3RhdGUuaXNMb2dnZWRVc2VyLFxuICAgIHNlc3Npb25TdGF0ZVN0YXR1czogbG9nZ2VkVXNlclN0YXRlLnNlc3Npb25TdGF0ZVN0YXR1cyxcbn0pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCB7XG4gICAgZG9Mb2dvdXQsIHVwZGF0ZVNlc3Npb25TdGF0ZVN0YXR1cywgb25Vc2VyQXV0aFxufSkoT1BTZXNzaW9uQ2hlY2tlcik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0ICcuL3NpbXBsZS1saW5rLWxpc3QubGVzcyc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQgVGFibGUgZnJvbSBcIi4uL3RhYmxlL1RhYmxlXCI7XG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdCc7XG5pbXBvcnQgQXN5bmNDcmVhdGFibGVTZWxlY3QgZnJvbSBcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNDcmVhdGFibGVcIjtcblxuXG5jbGFzcyBTaW1wbGVMaW5rTGlzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25zID0gdGhpcy5nZXRPcHRpb25zLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTGluayA9IHRoaXMuaGFuZGxlTGluay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbiA9IHRoaXMuZmlsdGVyT3B0aW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTmV3ID0gdGhpcy5oYW5kbGVOZXcuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXROZXdPcHRpb25EYXRhID0gdGhpcy5nZXROZXdPcHRpb25EYXRhLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNWYWxpZE5ld09wdGlvbiA9IHRoaXMuaXNWYWxpZE5ld09wdGlvbi5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGdldE9wdGlvbnMoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCB7b3B0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdkZWZhdWx0T3B0aW9ucycpID8gb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoIWlucHV0ICYmICFkZWZhdWx0T3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFjdGlvbnMuc2VhcmNoKGlucHV0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlTGluayhldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnByb3BzLm9wdGlvbnMuYWN0aW9ucy5hZGQub25DbGljayh0aGlzLnN0YXRlLnZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6ICcnfSk7XG4gICAgfVxuXG4gICAgZ2V0TmV3T3B0aW9uRGF0YShpbnB1dFZhbHVlLCBvcHRpb25MYWJlbCkge1xuICAgICAgICByZXR1cm4ge3RhZzogb3B0aW9uTGFiZWwsIGlkOmlucHV0VmFsdWV9O1xuICAgIH1cblxuICAgIGlzVmFsaWROZXdPcHRpb24oaW5wdXRWYWx1ZSwgc2VsZWN0VmFsdWUsIHNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHtvcHRpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBsYWJlbEtleSA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhYmVsS2V5JykgPyBvcHRpb25zLmxhYmVsS2V5IDogJ2xhYmVsJztcbiAgICAgICAgbGV0IG9wdGlvbkZvdW5kID0gc2VsZWN0T3B0aW9ucy5maW5kKG9wID0+IG9wW2xhYmVsS2V5XSA9PSBpbnB1dFZhbHVlKTtcbiAgICAgICAgcmV0dXJuICghaW5wdXRWYWx1ZSB8fCBvcHRpb25Gb3VuZCkgPyBmYWxzZSA6IHRydWU7XG4gICAgfVxuXG4gICAgaGFuZGxlTmV3KHZhbHVlKSB7XG4gICAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5vbkNyZWF0ZVRhZyh2YWx1ZSwgdGhpcy5oYW5kbGVDaGFuZ2UpO1xuICAgIH1cblxuICAgIGZpbHRlck9wdGlvbihjYW5kaWRhdGUsIGlucHV0VmFsdWUpIHtcbiAgICAgICAgbGV0IHtvcHRpb25zLCB2YWx1ZXN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGFsbG93RHVwbGljYXRlcyA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2FsbG93RHVwbGljYXRlcycpO1xuICAgICAgICBsZXQgbGFiZWxLZXkgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdsYWJlbEtleScpID8gb3B0aW9ucy5sYWJlbEtleSA6ICdsYWJlbCc7XG5cbiAgICAgICAgaWYgKGFsbG93RHVwbGljYXRlcykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgbGV0IG9wdGlvbkZvdW5kID0gdmFsdWVzLmZpbmQodmFsID0+IHZhbFtsYWJlbEtleV0gPT09IGNhbmRpZGF0ZS5sYWJlbCk7XG5cbiAgICAgICAgcmV0dXJuICFvcHRpb25Gb3VuZDtcbiAgICB9XG5cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29wdGlvbnMsIHZhbHVlcywgY29sdW1uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgZGlzYWJsZWRBZGQgPSAoIXRoaXMuc3RhdGUudmFsdWUpO1xuXG4gICAgICAgIGxldCB0aXRsZSA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ3RpdGxlJykgPyBvcHRpb25zLnRpdGxlIDogJ1RhYmxlJztcbiAgICAgICAgbGV0IHZhbHVlS2V5ID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgndmFsdWVLZXknKSA/IG9wdGlvbnMudmFsdWVLZXkgOiAndmFsdWUnO1xuICAgICAgICBsZXQgbGFiZWxLZXkgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdsYWJlbEtleScpID8gb3B0aW9ucy5sYWJlbEtleSA6ICdsYWJlbCc7XG4gICAgICAgIGxldCBhbGxvd0NyZWF0ZSA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ29uQ3JlYXRlVGFnJyk7XG4gICAgICAgIGxldCBkZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRPcHRpb25zJykgPyBvcHRpb25zLmRlZmF1bHRPcHRpb25zIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCB0YWJsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdkYXRhVGFibGUnLFxuICAgICAgICAgICAgYWN0aW9uczoge1xuICAgICAgICAgICAgICAgIGRlbGV0ZTogb3B0aW9ucy5hY3Rpb25zLmRlbGV0ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSkge1xuICAgICAgICAgICAgdGFibGVPcHRpb25zLmNsYXNzTmFtZSA9IG9wdGlvbnMuY2xhc3NOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZWRpdCcpKSB7XG4gICAgICAgICAgICB0YWJsZU9wdGlvbnMuYWN0aW9ucy5lZGl0ID0gb3B0aW9ucy5hY3Rpb25zLmVkaXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5hY3Rpb25zLmhhc093blByb3BlcnR5KCdjdXN0b20nKSkge1xuICAgICAgICAgICAgdGFibGVPcHRpb25zLmFjdGlvbnMuY3VzdG9tID0gb3B0aW9ucy5hY3Rpb25zLmN1c3RvbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KCdzb3J0Q29sJykpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5zb3J0KFxuICAgICAgICAgICAgICAgIChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1BID0gaXNOYU4oYVtvcHRpb25zLnNvcnRDb2xdKSA/IGFbb3B0aW9ucy5zb3J0Q29sXS50b0xvd2VyQ2FzZSgpIDogYVtvcHRpb25zLnNvcnRDb2xdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtQiA9IGlzTmFOKGJbb3B0aW9ucy5zb3J0Q29sXSkgPyBiW29wdGlvbnMuc29ydENvbF0udG9Mb3dlckNhc2UoKSA6IGJbb3B0aW9ucy5zb3J0Q29sXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpdGVtQSA+IGl0ZW1CID8gMSA6IChpdGVtQSA8IGl0ZW1CID8gLTEgOiAwKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgQXN5bmNDb21wb25lbnQgPSBudWxsO1xuXG4gICAgICAgIGlmIChhbGxvd0NyZWF0ZSkge1xuICAgICAgICAgICAgQXN5bmNDb21wb25lbnQgPVxuICAgICAgICAgICAgICAgIDxBc3luY0NyZWF0YWJsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJsaW5rLXNlbGVjdCBidG4tZ3JvdXAgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcHRpb24gPT4gb3B0aW9uW3ZhbHVlS2V5XX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wdGlvbiA9PiBvcHRpb25bbGFiZWxLZXldfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlck9wdGlvbj17dGhpcy5maWx0ZXJPcHRpb259XG4gICAgICAgICAgICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uPXt0aGlzLmhhbmRsZU5ld31cbiAgICAgICAgICAgICAgICAgICAgZ2V0TmV3T3B0aW9uRGF0YT17dGhpcy5nZXROZXdPcHRpb25EYXRhfVxuICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkTmV3T3B0aW9uPXt0aGlzLmlzVmFsaWROZXdPcHRpb259XG4gICAgICAgICAgICAgICAgLz47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBBc3luY0NvbXBvbmVudCA9XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImxpbmstc2VsZWN0IGJ0bi1ncm91cCB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wdGlvbiA9PiBvcHRpb25bdmFsdWVLZXldfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17b3B0aW9uID0+IG9wdGlvbltsYWJlbEtleV19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyT3B0aW9uPXt0aGlzLmZpbHRlck9wdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE9wdGlvbnM9e2RlZmF1bHRPcHRpb25zfVxuICAgICAgICAgICAgICAgIC8+O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93IHNpbXBsZS1saW5rLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC00IHNpbXBsZS1saW5rLWxpc3QtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg0Pnt0aXRsZX08L2g0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kIHB1bGwtcmlnaHQgYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIHtBc3luY0NvbXBvbmVudH1cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IGFkZC1idXR0b25cIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUxpbmt9IGRpc2FibGVkPXtkaXNhYmxlZEFkZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7VC50cmFuc2xhdGUoXCJnZW5lcmFsLmFkZFwiKX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkYXRhVGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17dGFibGVPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT17dmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5TaW1wbGVMaW5rTGlzdC5wcm9wVHlwZXMgPSB7XG4gICAgdmFsdWVzOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgc29ydENvbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgdmFsdWVLZXk6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgICAgbGFiZWxLZXk6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBhY3Rpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICAgICAgc2VhcmNoOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgZGVsZXRlOiBQcm9wVHlwZXMuc2hhcGUoe29uQ2xpY2s6UHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZH0pLFxuICAgICAgICAgICAgYWRkOiBQcm9wVHlwZXMuc2hhcGUoe29uQ2xpY2s6UHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZH0pLFxuICAgICAgICAgICAgZWRpdDogUHJvcFR5cGVzLnNoYXBlKHtvbkNsaWNrOlByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWR9KSxcbiAgICAgICAgICAgIGN1c3RvbTogUHJvcFR5cGVzLmFycmF5LFxuICAgICAgICB9KS5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZFxufVxuXG5leHBvcnQgZGVmYXVsdCBTaW1wbGVMaW5rTGlzdDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnLi9zdW1taXQtZHJvcGRvd24ubGVzcyc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1bW1pdERyb3Bkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgc3VtbWl0VmFsdWU6IG51bGwsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShzdW1taXQpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c3VtbWl0VmFsdWU6IHN1bW1pdH0pO1xuICAgIH1cblxuICAgIGhhbmRsZUNsaWNrKGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucHJvcHMub25DbGljayh0aGlzLnN0YXRlLnN1bW1pdFZhbHVlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtzdW1taXRzLCBhY3Rpb25MYWJlbCwgYWN0aW9uQ2xhc3N9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHN1bW1pdE9wdGlvbnMgPSBzdW1taXRzXG4gICAgICAgICAgICAuc29ydChcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gKGEuc3RhcnRfZGF0ZSA8IGIuc3RhcnRfZGF0ZSA/IDEgOiAoYS5zdGFydF9kYXRlID4gYi5zdGFydF9kYXRlID8gLTEgOiAwKSlcbiAgICAgICAgICAgICkubWFwKHMgPT4gKHtsYWJlbDogcy5uYW1lLCB2YWx1ZTogcy5pZH0pKTtcblxuICAgICAgICBsZXQgYmlnQ2xhc3MgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdiaWcnKSA/ICdiaWcnIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN1bW1pdC1kcm9wZG93biBidG4tZ3JvdXAgXCIgKyBiaWdDbGFzc30+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cInN1bW1pdC1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5zdW1taXRWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtzdW1taXRPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17VC50cmFuc2xhdGUoXCJnZW5lcmFsLnNlbGVjdF9zdW1taXRcIil9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1ncm91cCBzdW1taXQtc2VsZWN0IHRleHQtbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJhYmxlPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT17YGJ0biBidG4tZGVmYXVsdCAke2FjdGlvbkNsYXNzfWB9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICB7YWN0aW9uTGFiZWx9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGlzX2VkaXRpbmc6IGZhbHNlXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIG9uRGVsZXRlKGlkLCBldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuZGVsZXRlKGlkKTtcbiAgICB9XG5cbiAgICBvblNhdmUoaWQsIGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXNfZWRpdGluZzogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLnNhdmUoaWQpO1xuICAgIH1cblxuICAgIG9uRWRpdChpZCwgZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpc19lZGl0aW5nOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5lZGl0KGlkKTtcbiAgICB9XG5cbiAgICBvbkNhbmNlbChpZCwgZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpc19lZGl0aW5nOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuY2FuY2VsKGlkKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7YWN0aW9ucywgaWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5pc19lZGl0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBvbkNsaWNrPXt0aGlzLm9uU2F2ZS5iaW5kKHRoaXMsaWQpfSBkYXRhLXRpcD1cInNhdmVcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS1mbG9wcHktb1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgb25DbGljaz17dGhpcy5vbkNhbmNlbC5iaW5kKHRoaXMsaWQpfSBkYXRhLXRpcD1cImNhbmNlbFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIHsnZWRpdCcgaW4gYWN0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIG9uQ2xpY2s9e3RoaXMub25FZGl0LmJpbmQodGhpcyxpZCl9IGRhdGEtdGlwPVwiZWRpdFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeydkZWxldGUnIGluIGFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBvbkNsaWNrPXt0aGlzLm9uRGVsZXRlLmJpbmQodGhpcyxpZCl9IGRhdGEtdGlwPVwiZGVsZXRlXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRyYXNoLW8gZGVsZXRlLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEVkaXRhYmxlVGFibGVIZWFkaW5nIGZyb20gJy4vRWRpdGFibGVUYWJsZUhlYWRpbmcnO1xuaW1wb3J0IEVkaXRhYmxlVGFibGVDZWxsIGZyb20gJy4vRWRpdGFibGVUYWJsZUNlbGwnO1xuaW1wb3J0IEVkaXRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBmcm9tICcuL0VkaXRhYmxlQWN0aW9uc1RhYmxlQ2VsbCc7XG5pbXBvcnQgRWRpdGFibGVUYWJsZVJvdyBmcm9tICcuL0VkaXRhYmxlVGFibGVSb3cnO1xuaW1wb3J0IFN3YWwgZnJvbSBcInN3ZWV0YWxlcnQyXCI7XG5pbXBvcnQgVCBmcm9tIFwiaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3RcIjtcbmltcG9ydCAnLi9lZGl0YWJsZS10YWJsZS5jc3MnO1xuaW1wb3J0IFJlYWN0VG9vbHRpcCBmcm9tIFwicmVhY3QtdG9vbHRpcFwiO1xuaW1wb3J0IHsgc2hhbGxvd0VxdWFsIH0gZnJvbSAnLi4vLi4vdXRpbHMvbWV0aG9kcydcblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgY29sV2lkdGg6ICcnXG59O1xuXG5jb25zdCBjcmVhdGVSb3cgPSAocm93LCBjb2x1bW5zLCBhY3Rpb25zLCBzaG91bGRVc2VUZXh0QXJlYSkgPT4ge1xuXG4gICAgdmFyIGFjdGlvbl9idXR0b25zID0gJyc7XG4gICAgdmFyIGNlbGxzID0gY29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RWRpdGFibGVUYWJsZUNlbGwgc2hvdWxkVXNlVGV4dEFyZWE9e3Nob3VsZFVzZVRleHRBcmVhfSBrZXk9e3Jvd1snaWQnXSArICdfZmllbGQnICsgaX0gbmFtZT17Y29sLmNvbHVtbktleX0gaWQ9e3Jvdy5pZH0gaXNfZWRpdD17cm93LmlzX2VkaXR9IGhhbmRsZUNoYW5nZT17YWN0aW9ucy5oYW5kbGVDaGFuZ2V9PlxuICAgICAgICAgICAgICAgIHtyb3dbY29sLmNvbHVtbktleV19XG4gICAgICAgICAgICA8L0VkaXRhYmxlVGFibGVDZWxsPlxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgICAgY2VsbHMucHVzaCg8RWRpdGFibGVBY3Rpb25zVGFibGVDZWxsIGtleT17J2FjdGlvbnNfJyArIHJvd1snaWQnXX0gaWQ9e3Jvd1snaWQnXX0gYWN0aW9ucz17YWN0aW9uc30vPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNlbGxzO1xufTtcblxuY29uc3QgY3JlYXRlTmV3Um93ID0gKGNvbHVtbnMsIG5ld19yb3csIGFkZE5ldywgaGFuZGxlQ2hhbmdlLCBzaG91bGRVc2VUZXh0QXJlYSkgPT4ge1xuXG4gICAgdmFyIGNlbGxzID0gY29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG4gICAgICAgIGxldCBjZWxsX3ZhbHVlID0gKHR5cGVvZiBuZXdfcm93W2NvbC5jb2x1bW5LZXldICE9PSAndW5kZWZpbmVkJykgPyBuZXdfcm93W2NvbC5jb2x1bW5LZXldIDogJyc7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQga2V5PXsnbmV3X3Jvd18nICsgaX0+XG4gICAgICAgICAgICAgICAge3Nob3VsZFVzZVRleHRBcmVhICYmXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiBpZD17J25ld18nICsgY29sLmNvbHVtbktleX0gbmFtZT17Y29sLmNvbHVtbktleX0gb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjZWxsX3ZhbHVlfS8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHshc2hvdWxkVXNlVGV4dEFyZWEgJiZcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiIGlkPXsnbmV3XycgKyBjb2wuY29sdW1uS2V5fSBuYW1lPXtjb2wuY29sdW1uS2V5fSBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NlbGxfdmFsdWV9Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgY2VsbHMucHVzaChcbiAgICAgICAgPHRkIGtleT0nYWRkX25ldyc+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdFwiIG9uQ2xpY2s9e2FkZE5ld30+IEFkZCA8L2J1dHRvbj5cbiAgICAgICAgPC90ZD5cbiAgICApO1xuXG4gICAgcmV0dXJuIGNlbGxzO1xufTtcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0YWJsZVRhYmxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgcm93czogcHJvcHMuZGF0YSxcbiAgICAgICAgICAgIG5ld19yb3c6IHt9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gd2Ugc3RvcmUgdGhlIGRlbGV0ZSBhbmQgc2F2ZSBmdW5jdGlvbnMgaW4gcHJvcHMgY2F1c2Ugd2UgbmVlZCB0byBleHRlbmQgdGhlbVxuICAgICAgICB0aGlzLm9uU2F2ZSA9IHByb3BzLm9wdGlvbnMuYWN0aW9ucy5zYXZlLm9uQ2xpY2s7XG5cbiAgICAgICAgdGhpcy5hY3Rpb25zID0gey4uLnByb3BzLm9wdGlvbnMuYWN0aW9uc307XG4gICAgICAgIHRoaXMuYWN0aW9ucy5lZGl0ID0gdGhpcy5lZGl0Um93LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5zYXZlID0gdGhpcy5zYXZlUm93LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5kZWxldGUgPSB0aGlzLmRlbGV0ZUNsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5oYW5kbGVDaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlQ2VsbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFjdGlvbnMuY2FuY2VsID0gdGhpcy5lZGl0Um93Q2FuY2VsLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5zYXZlTmV3Um93ID0gdGhpcy5zYXZlTmV3Um93LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTmV3Q2hhbmdlID0gdGhpcy5vbkNoYW5nZU5ld0NlbGwuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGlmKCFzaGFsbG93RXF1YWwodGhpcy5wcm9wcy5kYXRhLCBwcmV2UHJvcHMuZGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3Jvd3M6IHRoaXMucHJvcHMuZGF0YX0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzYXZlUm93KGlkLCBldikge1xuICAgICAgICBjb25zdCB7IHJvd3MgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCByb3cgPSByb3dzLmZpbmQociA9PiByLmlkID09IGlkKTtcbiAgICAgICAgcm93LmlzX2VkaXQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmVkaXRpbmdfcm93ID0gbnVsbDtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHJvd3M6IHJvd3NcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vblNhdmUocm93KTtcbiAgICB9XG5cbiAgICBkZWxldGVDbGljayhpZCkge1xuICAgICAgICBsZXQgb25EZWxldGUgPSB0aGlzLnByb3BzLm9wdGlvbnMuYWN0aW9ucy5kZWxldGUub25DbGljaztcbiAgICAgICAgbGV0IG5vQWxlcnQgPSB0aGlzLnByb3BzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ25vQWxlcnQnKTtcblxuICAgICAgICBpZiAobm9BbGVydCkge1xuICAgICAgICAgICAgb25EZWxldGUoaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogVC50cmFuc2xhdGUoXCJnZW5lcmFsLmFyZV95b3Vfc3VyZVwiKSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBULnRyYW5zbGF0ZShcImdlbmVyYWwucmVtb3ZlX3dhcm5pbmdcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogXCJ3YXJuaW5nXCIsXG4gICAgICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IFwiI0RENkI1NVwiLFxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBULnRyYW5zbGF0ZShcImdlbmVyYWwueWVzX2RlbGV0ZVwiKVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgb25EZWxldGUoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWRpdFJvdyhpZCwgZXYpIHtcbiAgICAgICAgY29uc3QgeyByb3dzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgcm93ID0gcm93cy5maW5kKHIgPT4gci5pZCA9PSBpZCk7XG5cbiAgICAgICAgLy9zYXZlIGVkaXRpbmcgcm93IGZvciBjYW5jZWxcbiAgICAgICAgdGhpcy5lZGl0aW5nX3JvdyA9IHsuLi5yb3d9O1xuXG4gICAgICAgIHJvdy5pc19lZGl0ID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHJvd3M6IHJvd3NcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZWRpdFJvd0NhbmNlbChpZCwgZXYpIHtcbiAgICAgICAgY29uc3QgeyByb3dzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICByb3dzLmZvckVhY2gociA9PiB7XG4gICAgICAgICAgICByLmlzX2VkaXQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IHJvd0lkeCA9IHJvd3MuZmluZEluZGV4KHIgPT4gci5pZCA9PSBpZCk7XG5cbiAgICAgICAgcm93c1tyb3dJZHhdID0gdGhpcy5lZGl0aW5nX3JvdztcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHJvd3M6IHJvd3NcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2VDZWxsKGV2KSB7XG4gICAgICAgIGNvbnN0IHsgcm93cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IGZpZWxkID0gZXYudGFyZ2V0O1xuICAgICAgICBsZXQgcm93ID0gcm93cy5maW5kKHIgPT4gci5pZCA9PSBmaWVsZC5pZCk7XG5cbiAgICAgICAgcm93W2ZpZWxkLm5hbWVdID0gZmllbGQudmFsdWU7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICByb3dzOiByb3dzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlTmV3Q2VsbChldikge1xuICAgICAgICBjb25zdCB7bmV3X3Jvd30gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgZmllbGQgPSBldi50YXJnZXQ7XG5cbiAgICAgICAgbmV3X3Jvd1tmaWVsZC5uYW1lXSA9IGZpZWxkLnZhbHVlO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgbmV3X3JvdzogbmV3X3Jvd1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzYXZlTmV3Um93KGV2KSB7XG4gICAgICAgIGNvbnN0IHtuZXdfcm93fSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgdGhpcy5vblNhdmUobmV3X3Jvdyk7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBuZXdfcm93OiB7fVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7b3B0aW9ucywgY29sdW1ucyB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHRhYmxlQ2xhc3MgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSA/IG9wdGlvbnMuY2xhc3NOYW1lIDogJyc7XG4gICAgICAgIGxldCB0ZXh0QXJlYSA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJ0ZXh0QXJlYVwiKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWJvcmRlcmVkIGVkaXRhYmxlVGFibGUgXCIgKyB0YWJsZUNsYXNzfT5cbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFdpZHRoID0gKGNvbC53aWR0aCkgPyBjb2wud2lkdGggOiBkZWZhdWx0cy5jb2xXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFZGl0YWJsZVRhYmxlSGVhZGluZyB3aWR0aD17Y29sV2lkdGh9IGtleT17J2hlYWRpbmdfJyArIGl9ID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29sLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FZGl0YWJsZVRhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5hY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFZGl0YWJsZVRhYmxlSGVhZGluZyBrZXk9J2FjdGlvbnNfaGVhZGluZycgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0VkaXRhYmxlVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLmxlbmd0aCA+IDAgJiYgdGhpcy5zdGF0ZS5yb3dzLm1hcCgocm93LGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJvdykgJiYgcm93Lmxlbmd0aCAhPT0gY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBEYXRhIGF0IHJvdyAke2l9IGlzICR7cm93Lmxlbmd0aH0uIEl0IHNob3VsZCBiZSAke2NvbHVtbnMubGVuZ3RofS5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDx0ciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RWRpdGFibGVUYWJsZVJvdyBldmVuPXtpJTIgPT09IDB9IGtleT17J3Jvd18nICsgcm93LmlkfSBpZD17cm93LmlkfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3JlYXRlUm93KHJvdywgY29sdW1ucywgdGhpcy5hY3Rpb25zLCB0ZXh0QXJlYSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRWRpdGFibGVUYWJsZVJvdz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFZGl0YWJsZVRhYmxlUm93IGV2ZW49ezB9IGlkPSduZXdfcm93JyBrZXk9J25ld19yb3cnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjcmVhdGVOZXdSb3coY29sdW1ucywgdGhpcy5zdGF0ZS5uZXdfcm93LCB0aGlzLnNhdmVOZXdSb3csIHRoaXMuaGFuZGxlTmV3Q2hhbmdlLCB0ZXh0QXJlYSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0VkaXRhYmxlVGFibGVSb3c+XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICA8UmVhY3RUb29sdGlwIGRlbGF5U2hvdz17MTB9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgRWRpdGFibGVUYWJsZUNlbGwgPSAocHJvcHMpID0+IHtcblxuICAgIGlmIChwcm9wcy5pc19lZGl0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgeyFwcm9wcy5zaG91bGRVc2VUZXh0QXJlYSAmJlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiBkZWZhdWx0VmFsdWU9e3Byb3BzLmNoaWxkcmVufSBuYW1lPXtwcm9wcy5uYW1lfSBpZD17cHJvcHMuaWR9IG9uQ2hhbmdlPXtwcm9wcy5oYW5kbGVDaGFuZ2V9Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge3Byb3BzLnNob3VsZFVzZVRleHRBcmVhICYmXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiBkZWZhdWx0VmFsdWU9e3Byb3BzLmNoaWxkcmVufSBuYW1lPXtwcm9wcy5uYW1lfSBpZD17cHJvcHMuaWR9IG9uQ2hhbmdlPXtwcm9wcy5oYW5kbGVDaGFuZ2V9Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQ+e3Byb3BzLmNoaWxkcmVufTwvdGQ+XG4gICAgICAgICk7XG4gICAgfVxuXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFZGl0YWJsZVRhYmxlQ2VsbDsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jbGFzcyBFZGl0YWJsZVRhYmxlSGVhZGluZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHJlbmRlciAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGggd2lkdGg9e3RoaXMucHJvcHMud2lkdGh9PlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICk7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRhYmxlVGFibGVIZWFkaW5nOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRhYmxlVGFibGVSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuLCBldmVuLCBpZCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRyIGlkPXtpZH0gcm9sZT1cInJvd1wiIGNsYXNzTmFtZT17ZXZlbiA/ICdldmVuJyA6ICdvZGQnfT5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdGFibGVBY3Rpb25zVGFibGVDZWxsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbiA9IHRoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbiA9IHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbi5iaW5kKHRoaXMpO1xuXG4gICAgfVxuXG4gICAgc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb24pIHtcbiAgICAgICAgbGV0IHtpZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghYWN0aW9uLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNwbGF5KGlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUFjdGlvbihhY3Rpb24sIGlkLCBldikge1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBhY3Rpb24oaWQpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHthY3Rpb25zLCBpZH0gPSB0aGlzLnByb3BzO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cImFjdGlvbnNcIiBrZXk9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAge2FjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2RlbGV0ZScpICYmIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb25zLmRlbGV0ZSkgICYmXG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLXRpcD1cImRlbGV0ZVwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcywgYWN0aW9ucy5kZWxldGUub25DbGljaywgaWQpfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10cmFzaC1vIGRlbGV0ZS1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHthY3Rpb25zLmhhc093blByb3BlcnR5KCdjdXN0b20nKSAmJiBhY3Rpb25zLmN1c3RvbS5tYXAoYSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYSkgJiZcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPXthLnRvb2x0aXB9IGtleT17J2N1c3RvbV8nICsgYS5uYW1lfSBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMsIGEub25DbGljaywgaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthLmljb259XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTZWxlY3RhYmxlVGFibGVIZWFkaW5nIGZyb20gJy4vU2VsZWN0YWJsZVRhYmxlSGVhZGluZyc7XG5pbXBvcnQgU2VsZWN0YWJsZVRhYmxlQ2VsbCBmcm9tICcuL1NlbGVjdGFibGVUYWJsZUNlbGwnO1xuaW1wb3J0IFNlbGVjdGFibGVUYWJsZVJvdyBmcm9tICcuL1NlbGVjdGFibGVUYWJsZVJvdyc7XG5pbXBvcnQgU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwgZnJvbSAnLi9TZWxlY3RhYmxlQWN0aW9uc1RhYmxlQ2VsbCc7XG5pbXBvcnQgUmVhY3RUb29sdGlwIGZyb20gJ3JlYWN0LXRvb2x0aXAnXG5pbXBvcnQgJy4vc2VsZWN0YWJsZS10YWJsZS5jc3MnO1xuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgICBzb3J0RnVuYzogKGEsYikgPT4gKGEgPCBiID8gLTEgOiAoYSA+IGIgPyAxIDogMCkpLFxuICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICBzb3J0Q29sOiAwLFxuICAgIHNvcnREaXI6IDEsXG4gICAgY29sV2lkdGg6ICcnXG59XG5cbmNvbnN0IGNyZWF0ZVJvdyA9IChyb3csIGNvbHVtbnMsIGFjdGlvbnMpID0+IHtcblxuICAgIHZhciBhY3Rpb25fYnV0dG9ucyA9ICcnO1xuICAgIHZhciBjZWxscyA9IGNvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFNlbGVjdGFibGVUYWJsZUNlbGwga2V5PXtyb3dbJ2lkJ10gKyAnX2ZpZWxkJyArIGl9IG5hbWU9e2NvbC5jb2x1bW5LZXl9IGlkPXtyb3cuaWR9PlxuICAgICAgICAgICAgICAgIHtyb3dbY29sLmNvbHVtbktleV19XG4gICAgICAgICAgICA8L1NlbGVjdGFibGVUYWJsZUNlbGw+XG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpZiAoYWN0aW9ucykge1xuICAgICAgICBjZWxscy5wdXNoKDxTZWxlY3RhYmxlQWN0aW9uc1RhYmxlQ2VsbCBrZXk9J2FjdGlvbnNfY2VsbCcgaWQ9e3Jvd1snaWQnXX0gYWN0aW9ucz17YWN0aW9uc30gLz4pO1xuICAgIH1cblxuICAgIHJldHVybiBjZWxscztcbn07XG5cbmNvbnN0IGdldFNvcnREaXIgPSAoY29sdW1uS2V5LCBjb2x1bW5JbmRleCwgc29ydENvbCwgc29ydERpcikgPT4ge1xuICAgIGlmKGNvbHVtbktleSAmJiAoY29sdW1uS2V5ID09PSBzb3J0Q29sKSkge1xuICAgICAgICByZXR1cm4gc29ydERpcjtcbiAgICB9XG4gICAgaWYoc29ydENvbCA9PT0gY29sdW1uSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHNvcnREaXI7XG4gICAgfVxuICAgIHJldHVybiBudWxsXG59O1xuXG5cbmNsYXNzIFNlbGVjdGFibGVUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge29wdGlvbnMsIGNvbHVtbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHNlbGVjdGVkSWRzID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0ZWRJZHMnKSA/IG9wdGlvbnMuc2VsZWN0ZWRJZHMgOiBbXTtcbiAgICAgICAgbGV0IHRhYmxlQ2xhc3MgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSA/IG9wdGlvbnMuY2xhc3NOYW1lIDogJyc7XG4gICAgICAgIHRhYmxlQ2xhc3MgKz0gKG9wdGlvbnMuYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZWRpdCcpKSA/ICcgdGFibGUtaG92ZXInIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIGRhdGFUYWJsZSBcIiArIHRhYmxlQ2xhc3N9PlxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJzZWxlY3RfYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInNlbGVjdF9hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b3B0aW9ucy5hY3Rpb25zLmVkaXQub25TZWxlY3RlZEFsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17b3B0aW9ucy5zZWxlY3RlZEFsbH0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0Q29sID0gKHR5cGVvZiBvcHRpb25zLnNvcnRDb2wgIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5zb3J0Q29sIDogZGVmYXVsdHMuc29ydENvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc29ydERpciA9ICh0eXBlb2Ygb3B0aW9ucy5zb3J0RGlyICE9ICd1bmRlZmluZWQnKSA/IG9wdGlvbnMuc29ydERpciA6IGRlZmF1bHRzLnNvcnREaXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnRGdW5jID0gKHR5cGVvZiBvcHRpb25zLnNvcnRGdW5jICE9ICd1bmRlZmluZWQnKSA/IG9wdGlvbnMuc29ydEZ1bmMgOiBkZWZhdWx0cy5zb3J0RnVuYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc29ydGFibGUgPSAodHlwZW9mIGNvbC5zb3J0YWJsZSAhPSAndW5kZWZpbmVkJykgPyBjb2wuc29ydGFibGUgOiBkZWZhdWx0cy5zb3J0YWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sV2lkdGggPSAodHlwZW9mIGNvbC53aWR0aCAhPSAndW5kZWZpbmVkJykgPyBjb2wud2lkdGggOiBkZWZhdWx0cy5jb2xXaWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RhYmxlVGFibGVIZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNvcnQ9e3RoaXMucHJvcHMub25Tb3J0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydERpcj17Z2V0U29ydERpcihjb2wuY29sdW1uS2V5LCBpLCBzb3J0Q29sLCBzb3J0RGlyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlPXtzb3J0YWJsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRGdW5jPXtzb3J0RnVuY31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4PXtpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uS2V5PXtjb2wuY29sdW1uS2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9e2NvbFdpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXsnaGVhZGluZ18nK2l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb2wudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0YWJsZVRhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7b3B0aW9ucy5hY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0YWJsZVRhYmxlSGVhZGluZyBrZXk9J2FjdGlvbnNfaGVhZGluZycgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvcHRpb25zLmFjdGlvbnNIZWFkZXIgfHwgJyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3RhYmxlVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLmxlbmd0aCA+IDAgJiYgdGhpcy5wcm9wcy5kYXRhLm1hcCgocm93LGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocm93KSAmJiByb3cubGVuZ3RoICE9PSBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRGF0YSBhdCByb3cgJHtpfSBpcyAke3Jvdy5sZW5ndGh9LiBJdCBzaG91bGQgYmUgJHtjb2x1bW5zLmxlbmd0aH0uYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDx0ciBrZXk9eydyb3dfJytpfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RhYmxlVGFibGVSb3cgY2hlY2tlZD17b3B0aW9ucy5zZWxlY3RlZEFsbCB8fCBzZWxlY3RlZElkcy5pbmNsdWRlcyhyb3dbJ2lkJ10pfSBldmVuPXtpJTIgPT09IDB9IGtleT17J3Jvd18nK3Jvd1snaWQnXX0gaWQ9e3Jvd1snaWQnXX0gYWN0aW9ucz17b3B0aW9ucy5hY3Rpb25zfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NyZWF0ZVJvdyhyb3csIGNvbHVtbnMsIG9wdGlvbnMuYWN0aW9ucyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3RhYmxlVGFibGVSb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgIDxSZWFjdFRvb2x0aXAgZGVsYXlTaG93PXsxMH0gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RhYmxlVGFibGU7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnO1xuXG5jb25zdCBTZWxlY3RhYmxlVGFibGVDZWxsID0gKHByb3BzKSA9PiB7XG4gICAgbGV0IHtjaGlsZHJlbn0gPSBwcm9wcztcblx0bGV0IHZhbHVlID0gJyc7XG5cdGlmKGNoaWxkcmVuKSB7XG5cdCAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG5cdCAgICAgICAgdmFsdWUgPSBjaGlsZHJlbjtcbiAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB2YWx1ZSA9IDxSYXdIVE1MPntjaGlsZHJlbi50b1N0cmluZygpfTwvUmF3SFRNTD5cbiAgICAgICAgfVxuICAgIH1cblxuXHRyZXR1cm4gKFxuXHRcdDx0ZCB7Li4ucHJvcHN9PlxuICAgICAgICAgICAge3ZhbHVlfVxuXHRcdDwvdGQ+XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RhYmxlVGFibGVDZWxsO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmNsYXNzIFNlbGVjdGFibGVUYWJsZUhlYWRpbmcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG5cdGNvbnN0cnVjdG9yIChwcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLmhhbmRsZVNvcnQgPSB0aGlzLmhhbmRsZVNvcnQuYmluZCh0aGlzKTtcblx0fVxuXG5cdGdldFNvcnRDbGFzcygpIHtcblxuXHRcdGlmICghdGhpcy5wcm9wcy5zb3J0YWJsZSkgcmV0dXJuIG51bGw7XG5cblx0XHRzd2l0Y2godGhpcy5wcm9wcy5zb3J0RGlyKSB7XG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdHJldHVybiAnc29ydGluZ19hc2MnO1xuXHRcdFx0Y2FzZSAtMTpcblx0XHRcdFx0cmV0dXJuICdzb3J0aW5nX2Rlc2MnO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvcHMuc29ydGFibGUgPyAnc29ydGluZycgOiBudWxsXG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlU29ydChlKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGlmKCF0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdvblNvcnQnKSB8fCAhdGhpcy5wcm9wcy5zb3J0YWJsZSkgcmV0dXJuO1xuXG5cdFx0dGhpcy5wcm9wcy5vblNvcnQoXG5cdFx0XHR0aGlzLnByb3BzLmNvbHVtbkluZGV4LFxuXHRcdFx0dGhpcy5wcm9wcy5jb2x1bW5LZXksXG5cdFx0XHR0aGlzLnByb3BzLnNvcnREaXIgPyB0aGlzLnByb3BzLnNvcnREaXIqLTEgOiAxLFxuXHRcdFx0dGhpcy5wcm9wcy5zb3J0RnVuY1xuXHRcdCk7XG5cdH1cblxuXHRyZW5kZXIgKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8dGggb25DbGljaz17dGhpcy5oYW5kbGVTb3J0fVxuXHRcdFx0XHRjbGFzc05hbWU9e3RoaXMuZ2V0U29ydENsYXNzKCl9XG5cdFx0XHRcdHdpZHRoPXt0aGlzLnByb3BzLndpZHRofVxuXHRcdFx0XHQ+XG5cdFx0XHRcdHt0aGlzLnByb3BzLmNoaWxkcmVufVxuXHRcdFx0PC90aD5cblx0XHQpO1x0XG5cdH1cblx0XG59XG5cblNlbGVjdGFibGVUYWJsZUhlYWRpbmcucHJvcFR5cGVzID0ge1xuXHRvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuXHRzb3J0RGlyOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRjb2x1bW5JbmRleDogUHJvcFR5cGVzLm51bWJlcixcblx0Y29sdW1uS2V5OiBQcm9wVHlwZXMuYW55LFxuXHRzb3J0YWJsZTogUHJvcFR5cGVzLmJvb2wsXG5cdHNvcnRGdW5jOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0YWJsZVRhYmxlSGVhZGluZzsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3RhYmxlVGFibGVSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLmhhbmRsZUVkaXQgPSB0aGlzLmhhbmRsZUVkaXQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3QgPSB0aGlzLmhhbmRsZVNlbGVjdC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9uKSB7XG4gICAgICAgIGxldCB7aWR9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKCFhY3Rpb24uaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLmRpc3BsYXkoaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlRWRpdChpZCwgZXYpIHtcbiAgICAgICAgLy8gYnkgcGFzc1xuICAgICAgICBpZihldi50YXJnZXQudHlwZSA9PT0gXCJjaGVja2JveFwiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLmVkaXQub25DbGljayhpZCk7XG4gICAgfVxuXG4gICAgaGFuZGxlU2VsZWN0KGlkLCBldikge1xuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuZWRpdC5vblNlbGVjdGVkKGlkLCBldi50YXJnZXQuY2hlY2tlZCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7ZXZlbiwgYWN0aW9ucywgaWQsIGNoaWxkcmVuLCBjaGVja2VkfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBjYW5FZGl0ID0gKGFjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2VkaXQnKSAmJiB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9ucy5lZGl0KSk7XG4gICAgICAgIGxldCByb3dDbGFzcyA9IGV2ZW4gPyAnZXZlbicgOiAnb2RkJztcblxuICAgICAgICBpZiAoY2FuRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dHIgcm9sZT1cInJvd1wiIGNsYXNzTmFtZT17cm93Q2xhc3MgKyBcIiBjYW4tZWRpdFwifSBvbkNsaWNrPXt0aGlzLmhhbmRsZUVkaXQuYmluZCh0aGlzLCBpZCl9PlxuICAgICAgICAgICAgICAgICAgICA8dGQga2V5PXtpZCArICdfc2VsZWN0J30+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPXtpZCArICdfc2VsZWN0J30gbmFtZT17aWQgKyAnX3NlbGVjdCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVTZWxlY3QuYmluZCh0aGlzLCBpZCl9Lz48L3RkPlxuICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx0ciByb2xlPVwicm93XCIgY2xhc3NOYW1lPXtyb3dDbGFzc30+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBrZXk9e2lkICsgJ19zZWxlY3QnfSA+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPXtpZCArICdfc2VsZWN0J30gbmFtZT17aWQgKyAnX3NlbGVjdCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVTZWxlY3QuYmluZCh0aGlzLCBpZCl9Lz48L3RkPlxuICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgKTtcblxuICAgIH1cbn07XG5cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvcnRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb24gPSB0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMpO1xuXG4gICAgfVxuXG4gICAgc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb24pIHtcbiAgICAgICAgbGV0IHtpZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghYWN0aW9uLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNwbGF5KGlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUFjdGlvbihhY3Rpb24sIGlkLCBldikge1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBhY3Rpb24oaWQpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHthY3Rpb25zLCBpZH0gPSB0aGlzLnByb3BzO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cImFjdGlvbnNcIiBrZXk9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAge2FjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2VkaXQnKSAmJiB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9ucy5lZGl0KSAmJlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLXRpcD1cImVkaXRcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMsIGFjdGlvbnMuZWRpdC5vbkNsaWNrLCBpZCl9ID5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtcGVuY2lsLXNxdWFyZS1vXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2FjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2RlbGV0ZScpICYmIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb25zLmRlbGV0ZSkgICYmXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPVwiZGVsZXRlXCIgb25DbGljaz17dGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzLCBhY3Rpb25zLmRlbGV0ZS5vbkNsaWNrLCBpZCl9ID5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtdHJhc2gtbyBkZWxldGUtaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHsnY3VzdG9tJyBpbiBhY3Rpb25zICYmIGFjdGlvbnMuY3VzdG9tLm1hcChhID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhLCBpZCkgJiZcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPXthLnRvb2x0aXB9IGtleT17J2N1c3RvbV8nICsgYS5uYW1lfSBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMsIGEub25DbGljaywgaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthLmljb259XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgdXBkYXRlIGZyb20gJ2ltbXV0YWJpbGl0eS1oZWxwZXInO1xuaW1wb3J0IHsgRHJhZ0Ryb3BDb250ZXh0IH0gZnJvbSAncmVhY3QtZG5kJztcbmltcG9ydCBIVE1MNUJhY2tlbmQgZnJvbSAncmVhY3QtZG5kLWh0bWw1LWJhY2tlbmQnO1xuaW1wb3J0IFNvcnRhYmxlVGFibGVIZWFkaW5nIGZyb20gJy4vU29ydGFibGVUYWJsZUhlYWRpbmcnO1xuaW1wb3J0IFNvcnRhYmxlVGFibGVDZWxsIGZyb20gJy4vU29ydGFibGVUYWJsZUNlbGwnO1xuaW1wb3J0IFNvcnRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBmcm9tICcuL1NvcnRhYmxlQWN0aW9uc1RhYmxlQ2VsbCc7XG5pbXBvcnQgU29ydGFibGVUYWJsZVJvdyBmcm9tICcuL1NvcnRhYmxlVGFibGVSb3cnO1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnO1xuaW1wb3J0ICcuL3RhYmxlLXNvcnRhYmxlLmNzcyc7XG5pbXBvcnQge3NoYWxsb3dFcXVhbH0gZnJvbSBcIi4uLy4uL3V0aWxzL21ldGhvZHNcIjtcblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgY29sV2lkdGg6ICcnXG59XG5cbmNvbnN0IGNyZWF0ZVJvdyA9IChyb3csIGNvbHVtbnMsIGFjdGlvbnMpID0+IHtcblxuICAgIHZhciBhY3Rpb25fYnV0dG9ucyA9ICcnO1xuXHR2YXIgY2VsbHMgPSBjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcblx0XHRyZXR1cm4gKFxuXHRcdDxTb3J0YWJsZVRhYmxlQ2VsbCBrZXk9e2l9PlxuICAgICAgICAgICAge3Jvd1tjb2wuY29sdW1uS2V5XX1cblx0XHQ8L1NvcnRhYmxlVGFibGVDZWxsPlxuXHRcdCk7XG5cdH0pO1xuXG4gICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgICAgY2VsbHMucHVzaCg8U29ydGFibGVBY3Rpb25zVGFibGVDZWxsIGtleT0nYWN0aW9ucycgaWQ9e3Jvd1snaWQnXX0gYWN0aW9ucz17YWN0aW9uc30vPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNlbGxzO1xufTtcblxuXG5jbGFzcyBTb3J0YWJsZVRhYmxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5tb3ZlUm93ID0gdGhpcy5tb3ZlUm93LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZHJvcFJvdyA9IHRoaXMuZHJvcFJvdy5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICByb3dzOiBwcm9wcy5kYXRhXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZighc2hhbGxvd0VxdWFsKHRoaXMucHJvcHMuZGF0YSwgcHJldlByb3BzLmRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtyb3dzOiB0aGlzLnByb3BzLmRhdGF9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW92ZVJvdyhkcmFnSW5kZXgsIGhvdmVySW5kZXgpIHtcbiAgICAgICAgY29uc3QgeyByb3dzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBjb25zdCBkcmFnUm93ID0gcm93c1tkcmFnSW5kZXhdO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUodXBkYXRlKHRoaXMuc3RhdGUsIHtcbiAgICAgICAgICAgIHJvd3M6IHtcbiAgICAgICAgICAgICAgICAkc3BsaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnSW5kZXgsIDFdLFxuICAgICAgICAgICAgICAgICAgICBbaG92ZXJJbmRleCwgMCwgZHJhZ1Jvd10sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBkcm9wUm93KGlkLCBpbmRleCkge1xuICAgICAgICBsZXQge29yZGVyRmllbGR9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IG5ld09yZGVyID0gaW5kZXggKyAxO1xuICAgICAgICBsZXQgcm93cyA9IFsuLi50aGlzLnN0YXRlLnJvd3NdO1xuXG4gICAgICAgIGZvcih2YXIgaSBpbiByb3dzKSB7XG4gICAgICAgICAgICByb3dzW2ldW29yZGVyRmllbGRdID0gcGFyc2VJbnQoaSkgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh1cGRhdGUodGhpcy5zdGF0ZSwge3Jvd3M6IHskc2V0OiByb3dzfX0pKTtcblxuICAgICAgICB0aGlzLnByb3BzLmRyb3BDYWxsYmFjayhyb3dzLCBpZCwgbmV3T3JkZXIpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtvcHRpb25zLCBjb2x1bW5zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB0YWJsZUNsYXNzID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBvcHRpb25zLmNsYXNzTmFtZSA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNvcnRhYmxlLXRhYmxlLWJveFwiPlxuICAgICAgICAgICAgICAgIDxpPntULnRyYW5zbGF0ZShcImdlbmVyYWwuZHJhZ19hbmRfZHJvcFwiKX08L2k+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIHNvcnRhYmxlVGFibGUgXCIgKyB0YWJsZUNsYXNzfT5cbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFdpZHRoID0gKGNvbC53aWR0aCkgPyBjb2wud2lkdGggOiBkZWZhdWx0cy5jb2xXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U29ydGFibGVUYWJsZUhlYWRpbmcgd2lkdGg9e2NvbFdpZHRofSBrZXk9e2l9ID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb2wudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU29ydGFibGVUYWJsZUhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbnMuYWN0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNvcnRhYmxlVGFibGVIZWFkaW5nIGtleT0nYWN0aW9ucycgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU29ydGFibGVUYWJsZUhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubGVuZ3RoID4gMCAmJiB0aGlzLnN0YXRlLnJvd3MubWFwKChyb3csaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyb3cpICYmIHJvdy5sZW5ndGggIT09IGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBEYXRhIGF0IHJvdyAke2l9IGlzICR7cm93Lmxlbmd0aH0uIEl0IHNob3VsZCBiZSAke2NvbHVtbnMubGVuZ3RofS5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHRyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTb3J0YWJsZVRhYmxlUm93IGV2ZW49e2klMiA9PT0gMH0ga2V5PXtyb3cuaWR9IGluZGV4PXtpfSBpZD17cm93LmlkfSBtb3ZlQ2FyZD17dGhpcy5tb3ZlUm93fSBkcm9wQ2FyZD17dGhpcy5kcm9wUm93fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NyZWF0ZVJvdyhyb3csIGNvbHVtbnMsIG9wdGlvbnMuYWN0aW9ucyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Tb3J0YWJsZVRhYmxlUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn07XG5cblNvcnRhYmxlVGFibGUucHJvcFR5cGVzID0ge1xuICAgIGRhdGE6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgYWN0aW9uczogUHJvcFR5cGVzLm9iamVjdFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgY29sdW1uS2V5OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRcbiAgICB9KSkuaXNSZXF1aXJlZCxcbiAgICBvcmRlckZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgZHJvcENhbGxiYWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59XG5cbmV4cG9ydCBkZWZhdWx0IERyYWdEcm9wQ29udGV4dChIVE1MNUJhY2tlbmQpKFNvcnRhYmxlVGFibGUpO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgU29ydGFibGVUYWJsZUNlbGwgPSAocHJvcHMpID0+IChcblx0PHRkIHsuLi5wcm9wc30+e3Byb3BzLmNoaWxkcmVufTwvdGQ+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBTb3J0YWJsZVRhYmxlQ2VsbDsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jbGFzcyBTb3J0YWJsZVRhYmxlSGVhZGluZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cblx0Y29uc3RydWN0b3IgKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuXHR9XG5cblx0cmVuZGVyICgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PHRoIHdpZHRoPXt0aGlzLnByb3BzLndpZHRofT5cblx0XHRcdFx0e3RoaXMucHJvcHMuY2hpbGRyZW59XG5cdFx0XHQ8L3RoPlxuXHRcdCk7XHRcblx0fVxuXHRcbn1cblxuZXhwb3J0IGRlZmF1bHQgU29ydGFibGVUYWJsZUhlYWRpbmc7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBmaW5kRE9NTm9kZSB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBEcmFnU291cmNlLCBEcm9wVGFyZ2V0IH0gZnJvbSAncmVhY3QtZG5kJztcblxuY29uc3Qgc3R5bGUgPSB7XG4gICAgYm9yZGVyOiAnMXB4IGRhc2hlZCBncmF5JyxcbiAgICBwYWRkaW5nOiAnMC41cmVtIDFyZW0nLFxuICAgIG1hcmdpbkJvdHRvbTogJy41cmVtJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXG4gICAgY3Vyc29yOiAnbW92ZScsXG59O1xuXG5jb25zdCByb3dTb3VyY2UgPSB7XG4gICAgYmVnaW5EcmFnKHByb3BzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogcHJvcHMuaWQsXG4gICAgICAgICAgICBpbmRleDogcHJvcHMuaW5kZXgsXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBlbmREcmFnKHByb3BzLCBtb25pdG9yKSB7XG4gICAgICAgIGlmIChtb25pdG9yLmRpZERyb3AoKSkge1xuICAgICAgICAgICAgcHJvcHMuZHJvcENhcmQocHJvcHMuaWQsIHByb3BzLmluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNvbnN0IHJvd1RhcmdldCA9IHtcbiAgICBob3Zlcihwcm9wcywgbW9uaXRvciwgY29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGRyYWdJbmRleCA9IG1vbml0b3IuZ2V0SXRlbSgpLmluZGV4O1xuICAgICAgICBjb25zdCBob3ZlckluZGV4ID0gcHJvcHMuaW5kZXg7XG5cbiAgICAgICAgLy8gRG9uJ3QgcmVwbGFjZSBpdGVtcyB3aXRoIHRoZW1zZWx2ZXNcbiAgICAgICAgaWYgKGRyYWdJbmRleCA9PT0gaG92ZXJJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHJlY3RhbmdsZSBvbiBzY3JlZW5cbiAgICAgICAgY29uc3QgaG92ZXJCb3VuZGluZ1JlY3QgPSBmaW5kRE9NTm9kZShjb21wb25lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIC8vIEdldCB2ZXJ0aWNhbCBtaWRkbGVcbiAgICAgICAgY29uc3QgaG92ZXJNaWRkbGVZID0gKGhvdmVyQm91bmRpbmdSZWN0LmJvdHRvbSAtIGhvdmVyQm91bmRpbmdSZWN0LnRvcCkgLyAyO1xuXG4gICAgICAgIC8vIERldGVybWluZSBtb3VzZSBwb3NpdGlvblxuICAgICAgICBjb25zdCBjbGllbnRPZmZzZXQgPSBtb25pdG9yLmdldENsaWVudE9mZnNldCgpO1xuXG4gICAgICAgIC8vIEdldCBwaXhlbHMgdG8gdGhlIHRvcFxuICAgICAgICBjb25zdCBob3ZlckNsaWVudFkgPSBjbGllbnRPZmZzZXQueSAtIGhvdmVyQm91bmRpbmdSZWN0LnRvcDtcblxuICAgICAgICAvLyBPbmx5IHBlcmZvcm0gdGhlIG1vdmUgd2hlbiB0aGUgbW91c2UgaGFzIGNyb3NzZWQgaGFsZiBvZiB0aGUgaXRlbXMgaGVpZ2h0XG4gICAgICAgIC8vIFdoZW4gZHJhZ2dpbmcgZG93bndhcmRzLCBvbmx5IG1vdmUgd2hlbiB0aGUgY3Vyc29yIGlzIGJlbG93IDUwJVxuICAgICAgICAvLyBXaGVuIGRyYWdnaW5nIHVwd2FyZHMsIG9ubHkgbW92ZSB3aGVuIHRoZSBjdXJzb3IgaXMgYWJvdmUgNTAlXG5cbiAgICAgICAgLy8gRHJhZ2dpbmcgZG93bndhcmRzXG4gICAgICAgIGlmIChkcmFnSW5kZXggPCBob3ZlckluZGV4ICYmIGhvdmVyQ2xpZW50WSA8IGhvdmVyTWlkZGxlWSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRHJhZ2dpbmcgdXB3YXJkc1xuICAgICAgICBpZiAoZHJhZ0luZGV4ID4gaG92ZXJJbmRleCAmJiBob3ZlckNsaWVudFkgPiBob3Zlck1pZGRsZVkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRpbWUgdG8gYWN0dWFsbHkgcGVyZm9ybSB0aGUgYWN0aW9uXG4gICAgICAgIHByb3BzLm1vdmVDYXJkKGRyYWdJbmRleCwgaG92ZXJJbmRleCk7XG5cbiAgICAgICAgLy8gTm90ZTogd2UncmUgbXV0YXRpbmcgdGhlIG1vbml0b3IgaXRlbSBoZXJlIVxuICAgICAgICAvLyBHZW5lcmFsbHkgaXQncyBiZXR0ZXIgdG8gYXZvaWQgbXV0YXRpb25zLFxuICAgICAgICAvLyBidXQgaXQncyBnb29kIGhlcmUgZm9yIHRoZSBzYWtlIG9mIHBlcmZvcm1hbmNlXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4cGVuc2l2ZSBpbmRleCBzZWFyY2hlcy5cbiAgICAgICAgbW9uaXRvci5nZXRJdGVtKCkuaW5kZXggPSBob3ZlckluZGV4O1xuICAgIH0sXG59O1xuXG5jbGFzcyBTb3J0YWJsZVRhYmxlUm93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyB0ZXh0LCBpc0RyYWdnaW5nLCBjb25uZWN0RHJhZ1NvdXJjZSwgY29ubmVjdERyb3BUYXJnZXQsIGNoaWxkcmVuLCBldmVuLCBpZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3Qgb3BhY2l0eSA9IGlzRHJhZ2dpbmcgPyAwIDogMTtcblxuICAgICAgICByZXR1cm4gY29ubmVjdERyYWdTb3VyY2UoY29ubmVjdERyb3BUYXJnZXQoXG4gICAgICAgICAgICA8dHIgaWQ9e2lkfSByb2xlPVwicm93XCIgY2xhc3NOYW1lPXtldmVuID8gJ2V2ZW4nIDogJ29kZCd9IHN0eWxlPXt7IC4uLnN0eWxlLCBvcGFjaXR5IH19PlxuXHRcdCAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgPC90cj4sXG4gICAgICAgICkpO1xuICAgIH1cbn1cblxuU29ydGFibGVUYWJsZVJvdy5wcm9wVHlwZXMgPSB7XG4gICAgY29ubmVjdERyYWdTb3VyY2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY29ubmVjdERyb3BUYXJnZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgaW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBpc0RyYWdnaW5nOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGlkOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgbW92ZUNhcmQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdFxuICAgIERyYWdTb3VyY2UoJ2NhcmQnLCByb3dTb3VyY2UsIChjb25uZWN0LCBtb25pdG9yKSA9PiAoe1xuICAgICAgICBjb25uZWN0RHJhZ1NvdXJjZTogY29ubmVjdC5kcmFnU291cmNlKCksXG4gICAgICAgIGlzRHJhZ2dpbmc6IG1vbml0b3IuaXNEcmFnZ2luZygpLFxuICAgICAgICB9KSkoXG4gICAgRHJvcFRhcmdldCgnY2FyZCcsIHJvd1RhcmdldCwgY29ubmVjdCA9PiAoe1xuICAgICAgICBjb25uZWN0RHJvcFRhcmdldDogY29ubmVjdC5kcm9wVGFyZ2V0KCksXG4gICAgICAgIH0pKVxuICAgIChTb3J0YWJsZVRhYmxlUm93KSk7XG5cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFjdGlvbnNUYWJsZUNlbGwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uID0gdGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uID0gdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uLmJpbmQodGhpcyk7XG5cbiAgICB9XG5cbiAgICBzaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbikge1xuICAgICAgICBsZXQge2lkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFhY3Rpb24uaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLmRpc3BsYXkoaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQWN0aW9uKGFjdGlvbiwgaWQsIGV2KSB7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGFjdGlvbihpZCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2FjdGlvbnMsIGlkfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwiYWN0aW9uc1wiIGtleT1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICB7YWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZGVsZXRlJykgJiYgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbnMuZGVsZXRlKSAgJiZcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPVwiZGVsZXRlXCIgb25DbGljaz17dGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzLCBhY3Rpb25zLmRlbGV0ZS5vbkNsaWNrLCBpZCl9ID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRyYXNoLW8gZGVsZXRlLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2FjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2N1c3RvbScpICYmIGFjdGlvbnMuY3VzdG9tLm1hcChhID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhKSAmJlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgZGF0YS10aXA9e2EudG9vbHRpcH0ga2V5PXsnY3VzdG9tXycgKyBhLm5hbWV9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcywgYS5vbkNsaWNrLCBpZCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2EuaWNvbn1cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgIH1cbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRhYmxlSGVhZGluZyBmcm9tICcuL1RhYmxlSGVhZGluZyc7XG5pbXBvcnQgVGFibGVDZWxsIGZyb20gJy4vVGFibGVDZWxsJztcbmltcG9ydCBUYWJsZVJvdyBmcm9tICcuL1RhYmxlUm93JztcbmltcG9ydCBBY3Rpb25zVGFibGVDZWxsIGZyb20gJy4vQWN0aW9uc1RhYmxlQ2VsbCc7XG5pbXBvcnQgUmVhY3RUb29sdGlwIGZyb20gJ3JlYWN0LXRvb2x0aXAnXG5cbmltcG9ydCAnLi90YWJsZS5jc3MnO1xuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgICBzb3J0RnVuYzogKGEsYikgPT4gKGEgPCBiID8gLTEgOiAoYSA+IGIgPyAxIDogMCkpLFxuICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICBzb3J0Q29sOiAwLFxuICAgIHNvcnREaXI6IDEsXG4gICAgY29sV2lkdGg6ICcnXG59XG5cbmNvbnN0IGNyZWF0ZVJvdyA9IChyb3csIGNvbHVtbnMsIGFjdGlvbnMpID0+IHtcblxuICAgIHZhciBhY3Rpb25fYnV0dG9ucyA9ICcnO1xuICAgIHZhciBjZWxscyA9IGNvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuICAgICAgICBpZihjb2wuaGFzT3duUHJvcGVydHkoXCJyZW5kZXJcIikpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxUYWJsZUNlbGwga2V5PXsnY2VsbF8nK2l9ID5cbiAgICAgICAgICAgICAgICAgICAge2NvbC5yZW5kZXIocm93LCByb3dbY29sLmNvbHVtbktleV0pfVxuICAgICAgICAgICAgICAgIDwvVGFibGVDZWxsPlxuICAgICAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFRhYmxlQ2VsbCBrZXk9eydjZWxsXycraX0gPlxuICAgICAgICAgICAgICAgIHtyb3dbY29sLmNvbHVtbktleV19XG4gICAgICAgICAgICA8L1RhYmxlQ2VsbD5cbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmIChhY3Rpb25zKSB7XG4gICAgICAgIGNlbGxzLnB1c2goPEFjdGlvbnNUYWJsZUNlbGwga2V5PSdhY3Rpb25zX2NlbGwnIGlkPXtyb3dbJ2lkJ119IGFjdGlvbnM9e2FjdGlvbnN9IC8+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbHM7XG59O1xuXG5jb25zdCBnZXRTb3J0RGlyID0gKGNvbHVtbktleSwgY29sdW1uSW5kZXgsIHNvcnRDb2wsIHNvcnREaXIpID0+IHtcbiAgICBpZihjb2x1bW5LZXkgJiYgKGNvbHVtbktleSA9PT0gc29ydENvbCkpIHtcbiAgICAgICAgcmV0dXJuIHNvcnREaXI7XG4gICAgfVxuICAgIGlmKHNvcnRDb2wgPT09IGNvbHVtbkluZGV4KSB7XG4gICAgICAgIHJldHVybiBzb3J0RGlyO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbFxufTtcblxuY29uc3QgVGFibGUgPSAocHJvcHMpID0+IHtcbiAgICBsZXQge29wdGlvbnMsIGNvbHVtbnN9ID0gcHJvcHM7XG4gICAgbGV0IHRhYmxlQ2xhc3MgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSA/IG9wdGlvbnMuY2xhc3NOYW1lIDogJyc7XG4gICAgdGFibGVDbGFzcyArPSAob3B0aW9ucy5hY3Rpb25zLmhhc093blByb3BlcnR5KCdlZGl0JykpID8gJyB0YWJsZS1ob3ZlcicgOiAnJztcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXtcInRhYmxlIHRhYmxlLXN0cmlwZWQgZGF0YVRhYmxlIFwiICsgdGFibGVDbGFzc30+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnRDb2wgPSAodHlwZW9mIG9wdGlvbnMuc29ydENvbCAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLnNvcnRDb2wgOiBkZWZhdWx0cy5zb3J0Q29sO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnREaXIgPSAodHlwZW9mIG9wdGlvbnMuc29ydERpciAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLnNvcnREaXIgOiBkZWZhdWx0cy5zb3J0RGlyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnRGdW5jID0gKHR5cGVvZiBvcHRpb25zLnNvcnRGdW5jICE9ICd1bmRlZmluZWQnKSA/IG9wdGlvbnMuc29ydEZ1bmMgOiBkZWZhdWx0cy5zb3J0RnVuYztcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0YWJsZSA9ICh0eXBlb2YgY29sLnNvcnRhYmxlICE9ICd1bmRlZmluZWQnKSA/IGNvbC5zb3J0YWJsZSA6IGRlZmF1bHRzLnNvcnRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFdpZHRoID0gKHR5cGVvZiBjb2wud2lkdGggIT0gJ3VuZGVmaW5lZCcpID8gY29sLndpZHRoIDogZGVmYXVsdHMuY29sV2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlSGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNvcnQ9e3Byb3BzLm9uU29ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydERpcj17Z2V0U29ydERpcihjb2wuY29sdW1uS2V5LCBpLCBzb3J0Q29sLCBzb3J0RGlyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGU9e3NvcnRhYmxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0RnVuYz17c29ydEZ1bmN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4PXtpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5LZXk9e2NvbC5jb2x1bW5LZXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXtjb2xXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXsnaGVhZGluZ18nK2l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29sLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIHtvcHRpb25zLmFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUhlYWRpbmcga2V5PSdhY3Rpb25zX2hlYWRpbmcnID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3B0aW9ucy5hY3Rpb25zSGVhZGVyIHx8ICcgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLmxlbmd0aCA+IDAgJiYgcHJvcHMuZGF0YS5tYXAoKHJvdyxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJvdykgJiYgcm93Lmxlbmd0aCAhPT0gY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYERhdGEgYXQgcm93ICR7aX0gaXMgJHtyb3cubGVuZ3RofS4gSXQgc2hvdWxkIGJlICR7Y29sdW1ucy5sZW5ndGh9LmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8dHIga2V5PXsncm93XycraX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVSb3cgZXZlbj17aSUyID09PSAwfSBrZXk9eydyb3dfJytpfSBpZD17cm93WydpZCddfSBhY3Rpb25zPXtvcHRpb25zLmFjdGlvbnN9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3JlYXRlUm93KHJvdywgY29sdW1ucywgb3B0aW9ucy5hY3Rpb25zKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8UmVhY3RUb29sdGlwIGRlbGF5U2hvdz17MTB9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmF3SFRNTCBmcm9tICcuLi9yYXctaHRtbCc7XG5cbmNvbnN0IFRhYmxlQ2VsbCA9IChwcm9wcykgPT4ge1xuICAgIGxldCB7Y2hpbGRyZW59ID0gcHJvcHM7XG5cdGxldCB2YWx1ZSA9ICcnO1xuXHRpZihjaGlsZHJlbikge1xuXHQgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuXHQgICAgICAgIHZhbHVlID0gY2hpbGRyZW47XG4gICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdmFsdWUgPSA8UmF3SFRNTD57Y2hpbGRyZW4udG9TdHJpbmcoKX08L1Jhd0hUTUw+XG4gICAgICAgIH1cbiAgICB9XG5cblx0cmV0dXJuIChcblx0XHQ8dGQgey4uLnByb3BzfT5cbiAgICAgICAgICAgIHt2YWx1ZX1cblx0XHQ8L3RkPlxuXHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVDZWxsO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmNsYXNzIFRhYmxlSGVhZGluZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cblx0Y29uc3RydWN0b3IgKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuXHRcdHRoaXMuaGFuZGxlU29ydCA9IHRoaXMuaGFuZGxlU29ydC5iaW5kKHRoaXMpO1xuXHR9XG5cblx0Z2V0U29ydENsYXNzKCkge1xuXG5cdFx0aWYgKCF0aGlzLnByb3BzLnNvcnRhYmxlKSByZXR1cm4gbnVsbDtcblxuXHRcdHN3aXRjaCh0aGlzLnByb3BzLnNvcnREaXIpIHtcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0cmV0dXJuICdzb3J0aW5nX2FzYyc7XG5cdFx0XHRjYXNlIC0xOlxuXHRcdFx0XHRyZXR1cm4gJ3NvcnRpbmdfZGVzYyc7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9wcy5zb3J0YWJsZSA/ICdzb3J0aW5nJyA6IG51bGxcblx0XHR9XG5cdH1cblxuXHRoYW5kbGVTb3J0KGUpIHtcblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0aWYoIXRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ29uU29ydCcpIHx8ICF0aGlzLnByb3BzLnNvcnRhYmxlKSByZXR1cm47XG5cblx0XHR0aGlzLnByb3BzLm9uU29ydChcblx0XHRcdHRoaXMucHJvcHMuY29sdW1uSW5kZXgsXG5cdFx0XHR0aGlzLnByb3BzLmNvbHVtbktleSxcblx0XHRcdHRoaXMucHJvcHMuc29ydERpciA/IHRoaXMucHJvcHMuc29ydERpciotMSA6IDEsXG5cdFx0XHR0aGlzLnByb3BzLnNvcnRGdW5jXG5cdFx0KTtcblx0fVxuXG5cdHJlbmRlciAoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDx0aCBvbkNsaWNrPXt0aGlzLmhhbmRsZVNvcnR9XG5cdFx0XHRcdGNsYXNzTmFtZT17dGhpcy5nZXRTb3J0Q2xhc3MoKX1cblx0XHRcdFx0d2lkdGg9e3RoaXMucHJvcHMud2lkdGh9XG5cdFx0XHRcdD5cblx0XHRcdFx0e3RoaXMucHJvcHMuY2hpbGRyZW59XG5cdFx0XHQ8L3RoPlxuXHRcdCk7XHRcblx0fVxuXHRcbn1cblxuVGFibGVIZWFkaW5nLnByb3BUeXBlcyA9IHtcblx0b25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcblx0c29ydERpcjogUHJvcFR5cGVzLm51bWJlcixcblx0Y29sdW1uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG5cdGNvbHVtbktleTogUHJvcFR5cGVzLmFueSxcblx0c29ydGFibGU6IFByb3BUeXBlcy5ib29sLFxuXHRzb3J0RnVuYzogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGluZzsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZVJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVFZGl0ID0gdGhpcy5oYW5kbGVFZGl0LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb24pIHtcbiAgICAgICAgbGV0IHtpZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghYWN0aW9uLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNwbGF5KGlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUVkaXQoaWQsIGV2KSB7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5lZGl0Lm9uQ2xpY2soaWQpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtldmVuLCBhY3Rpb25zLCBpZCwgY2hpbGRyZW59ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGNhbkVkaXQgPSAoYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZWRpdCcpICYmIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb25zLmVkaXQpKTtcbiAgICAgICAgbGV0IHJvd0NsYXNzID0gZXZlbiA/ICdldmVuJyA6ICdvZGQnO1xuXG4gICAgICAgIGlmIChjYW5FZGl0KSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx0ciByb2xlPVwicm93XCIgY2xhc3NOYW1lPXtyb3dDbGFzcyArIFwiIGNhbi1lZGl0XCJ9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlRWRpdC5iaW5kKHRoaXMsIGlkKX0+XG4gICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHRyIHJvbGU9XCJyb3dcIiBjbGFzc05hbWU9e3Jvd0NsYXNzfT5cbiAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCB1c2VGaXRUZXh0ID0gKG1heFNpemUgPSA1MCwgbWluU2l6ZSA9IDEzMCkgPT4ge1xuICAgIGNvbnN0IE1JTl9GT05UX1NJWkUgPSBtaW5TaXplO1xuICAgIGNvbnN0IE1BWF9GT05UX1NJWkUgPSBtYXhTaXplO1xuICAgIGNvbnN0IFJFU09MVVRJT04gPSA1O1xuXG4gICAgY29uc3QgcmVmID0gdXNlUmVmKG51bGwpO1xuXG4gICAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZSh7XG4gICAgICAgIGZvbnRTaXplOiBNQVhfRk9OVF9TSVpFLFxuICAgICAgICBmb250U2l6ZVByZXY6IE1JTl9GT05UX1NJWkUsXG4gICAgICAgIGZvbnRTaXplTWF4OiBNQVhfRk9OVF9TSVpFLFxuICAgICAgICBmb250U2l6ZU1pbjogTUlOX0ZPTlRfU0laRSxcbiAgICB9KTtcbiAgICBjb25zdCB7IGZvbnRTaXplLCBmb250U2l6ZU1heCwgZm9udFNpemVNaW4sIGZvbnRTaXplUHJldiB9ID0gc3RhdGU7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBpc0RvbmUgPSBNYXRoLmFicyhmb250U2l6ZSAtIGZvbnRTaXplUHJldikgPD0gUkVTT0xVVElPTjtcbiAgICAgICAgY29uc3QgaXNPdmVyZmxvdyA9XG4gICAgICAgICAgICAhIXJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICAocmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0ID4gcmVmLmN1cnJlbnQub2Zmc2V0SGVpZ2h0IHx8XG4gICAgICAgICAgICAgICAgcmVmLmN1cnJlbnQuc2Nyb2xsV2lkdGggPiByZWYuY3VycmVudC5vZmZzZXRXaWR0aCk7XG4gICAgICAgIGNvbnN0IGlzQXNjID0gZm9udFNpemUgPiBmb250U2l6ZVByZXY7XG5cbiAgICAgICAgLy8gcmV0dXJuIGlmIHRoZSBmb250IHNpemUgaGFzIGJlZW4gYWRqdXN0ZWQgXCJlbm91Z2hcIiAoY2hhbmdlIHdpdGhpbiBSRVNPTFVUSU9OKVxuICAgICAgICAvLyByZWR1Y2UgZm9udCBzaXplIGJ5IG9uZSBpbmNyZW1lbnQgaWYgaXQncyBvdmVyZmxvd2luZ1xuICAgICAgICBpZiAoaXNEb25lKSB7XG4gICAgICAgICAgICBpZiAoaXNPdmVyZmxvdykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRTaXplTmV3ID1cbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemVQcmV2IDwgZm9udFNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZm9udFNpemVQcmV2XG4gICAgICAgICAgICAgICAgICAgICAgICA6IGZvbnRTaXplIC0gKGZvbnRTaXplUHJldiAtIGZvbnRTaXplKTtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBmb250U2l6ZU5ldyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemVNYXgsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplTWluLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZVByZXYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5hcnkgc2VhcmNoIHRvIGFkanVzdCBmb250IHNpemVcbiAgICAgICAgbGV0IGRlbHRhO1xuICAgICAgICBsZXQgbmV3TWF4ID0gZm9udFNpemVNYXg7XG4gICAgICAgIGxldCBuZXdNaW4gPSBmb250U2l6ZU1pbjtcbiAgICAgICAgaWYgKGlzT3ZlcmZsb3cpIHtcbiAgICAgICAgICAgIGRlbHRhID0gaXNBc2MgPyBmb250U2l6ZVByZXYgLSBmb250U2l6ZSA6IGZvbnRTaXplTWluIC0gZm9udFNpemU7XG4gICAgICAgICAgICBuZXdNYXggPSBNYXRoLm1pbihmb250U2l6ZU1heCwgZm9udFNpemUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsdGEgPSBpc0FzYyA/IGZvbnRTaXplTWF4IC0gZm9udFNpemUgOiBmb250U2l6ZVByZXYgLSBmb250U2l6ZTtcbiAgICAgICAgICAgIG5ld01pbiA9IE1hdGgubWF4KGZvbnRTaXplTWluLCBmb250U2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgZm9udFNpemU6IGZvbnRTaXplICsgZGVsdGEgLyAyLFxuICAgICAgICAgICAgZm9udFNpemVNYXg6IG5ld01heCxcbiAgICAgICAgICAgIGZvbnRTaXplTWluOiBuZXdNaW4sXG4gICAgICAgICAgICBmb250U2l6ZVByZXY6IGZvbnRTaXplLFxuICAgICAgICB9KTtcbiAgICB9LCBbZm9udFNpemUsIGZvbnRTaXplTWF4LCBmb250U2l6ZU1pbiwgZm9udFNpemVQcmV2LCByZWZdKTtcblxuICAgIHJldHVybiB7IGZvbnRTaXplOiBgJHtmb250U2l6ZX0lYCwgbGluZUhlaWdodDogYCR7Zm9udFNpemUgLSAxMH0lYCwgcmVmIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1c2VGaXRUZXh0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHZpZGVvanMgZnJvbSAndmlkZW8uanMnXG5cbmltcG9ydCAndmlkZW8uanMvZGlzdC92aWRlby1qcy5jc3MnXG5cbmNvbnN0IFlvdXR1YmVWaWRlb0NvbXBvbmVudCA9ICh7IHZpZGVvU3JjVVJMLCB2aWRlb1RpdGxlIH0pID0+IChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInZpZGVvXCI+XG4gICAgICAgIDxpZnJhbWVcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCI3MjBcIlxuICAgICAgICAgICAgdGl0bGU9e3ZpZGVvVGl0bGV9XG4gICAgICAgICAgICBzcmM9e3ZpZGVvU3JjVVJMfVxuICAgICAgICAgICAgZnJhbWVCb3JkZXI9XCIwXCJcbiAgICAgICAgICAgIGFsbG93PVwiYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmVcIlxuICAgICAgICAgICAgYWxsb3dGdWxsU2NyZWVuXG4gICAgICAgIC8+XG4gICAgPC9kaXY+XG4pO1xuXG5cbmNsYXNzIExpdmVWaWRlb1BsYXllciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgdGhpcy5wbGF5ZXIgPSB2aWRlb2pzKHRoaXMudmlkZW9Ob2RlLCB0aGlzLnByb3BzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgaWYgKHRoaXMucGxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLnBsYXllci5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGRhdGEtdmpzLXBsYXllcj1cIlwiPlxuICAgICAgICAgICAgICAgIDx2aWRlbyByZWY9e25vZGUgPT4gdGhpcy52aWRlb05vZGUgPSBub2RlfSBjbGFzc05hbWU9XCJ2aWRlby1qcyB2anMtYmlnLXBsYXktY2VudGVyZWRcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5jb25zdCBWaWRlb1N0cmVhbSA9ICh7IHVybCB9KSA9PiB7XG4gICAgbGV0IGxheW91dCA9IG51bGw7XG4gICAgY29uc3QgY2hlY2tMaXZlVmlkZW8gPSAoKSA9PiB7XG4gICAgICAgIGxldCBpc0xpdmVWaWRlbyA9IG51bGw7XG4gICAgICAgIHVybC5tYXRjaCgvLm0zdTgvKSA/IGlzTGl2ZVZpZGVvID0gdHJ1ZSA6IGlzTGl2ZVZpZGVvID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBpc0xpdmVWaWRlbztcbiAgICB9O1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgICBpZiAoY2hlY2tMaXZlVmlkZW8oKSkge1xuICAgICAgICAgICAgY29uc3QgdmlkZW9Kc09wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgYXV0b3BsYXk6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udHJvbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgZmx1aWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc291cmNlczogW3tcbiAgICAgICAgICAgICAgICAgICAgc3JjOiB1cmwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi94LW1wZWdVUkwnXG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxheW91dCA9IDxMaXZlVmlkZW9QbGF5ZXIgey4uLnZpZGVvSnNPcHRpb25zfSAvPjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxheW91dCA9IDxZb3V0dWJlVmlkZW9Db21wb25lbnQgdmlkZW9TcmNVUkw9e3VybH0gLz47XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsYXlvdXQgPSA8c3BhbiBjbGFzc05hbWU9XCJuby12aWRlb1wiPk5vIHZpZGVvIFVSTCBQcm92aWRlZDwvc3Bhbj47XG4gICAgfVxuXG4gICAgcmV0dXJuIGxheW91dDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFZpZGVvU3RyZWFtO1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2VuLmpzb25cIjogXCIuL3NyYy9pMThuL2VuLmpzb25cIixcblx0XCIuL2VzLmpzb25cIjogXCIuL3NyYy9pMThuL2VzLmpzb25cIixcblx0XCIuL3poLmpzb25cIjogXCIuL3NyYy9pMThuL3poLmpzb25cIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi9zcmMvaTE4biBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qc29uJFwiOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IHJlcXVlc3QgZnJvbSAnc3VwZXJhZ2VudCc7XG5pbXBvcnQgVVJJIGZyb20gXCJ1cmlqc1wiO1xubGV0IGh0dHAgPSByZXF1ZXN0O1xuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuaW1wb3J0IFQgZnJvbSBcImkxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0XCI7XG5pbXBvcnQge29iamVjdFRvUXVlcnlTdHJpbmcsIGlzQ2xlYXJpbmdTZXNzaW9uU3RhdGUsIHNldFNlc3Npb25DbGVhcmluZ1N0YXRlLCBnZXRDdXJyZW50UGF0aE5hbWV9IGZyb20gJy4vbWV0aG9kcyc7XG5pbXBvcnQge2RvTG9naW4sIGluaXRMb2dPdXQsIENMRUFSX1NFU1NJT05fU1RBVEUsIExPR09VVF9VU0VSfSBmcm9tICcuLi9jb21wb25lbnRzL3NlY3VyaXR5L2FjdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgR0VORVJJQ19FUlJPUiAgPSBcIllpa2VzLiBTb21ldGhpbmcgc2VlbXMgdG8gYmUgYnJva2VuLiBPdXIgd2ViIHRlYW0gaGFzIGJlZW4gbm90aWZpZWQsIGFuZCB3ZSBhcG9sb2dpemUgZm9yIHRoZSBpbmNvbnZlbmllbmNlLlwiO1xuZXhwb3J0IGNvbnN0IFJFU0VUX0xPQURJTkcgID0gJ1JFU0VUX0xPQURJTkcnO1xuZXhwb3J0IGNvbnN0IFNUQVJUX0xPQURJTkcgID0gJ1NUQVJUX0xPQURJTkcnO1xuZXhwb3J0IGNvbnN0IFNUT1BfTE9BRElORyAgID0gJ1NUT1BfTE9BRElORyc7XG5leHBvcnQgY29uc3QgVkFMSURBVEUgICAgICAgPSAnVkFMSURBVEUnO1xuZXhwb3J0IGNvbnN0IENMRUFSX01FU1NBR0UgID0gJ0NMRUFSX01FU1NBR0UnO1xuZXhwb3J0IGNvbnN0IFNIT1dfTUVTU0FHRSAgID0gJ1NIT1dfTUVTU0FHRSc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBY3Rpb24gPSB0eXBlID0+IHBheWxvYWQgPT4gKHtcbiAgICB0eXBlLFxuICAgIHBheWxvYWRcbn0pO1xuXG5leHBvcnQgY29uc3QgcmVzZXRMb2FkaW5nID0gY3JlYXRlQWN0aW9uKFJFU0VUX0xPQURJTkcpO1xuZXhwb3J0IGNvbnN0IHN0YXJ0TG9hZGluZyA9IGNyZWF0ZUFjdGlvbihTVEFSVF9MT0FESU5HKTtcbmV4cG9ydCBjb25zdCBzdG9wTG9hZGluZyAgPSBjcmVhdGVBY3Rpb24oU1RPUF9MT0FESU5HKTtcblxuY29uc3QgeGhycyA9IHt9O1xuXG5jb25zdCBjYW5jZWwgPSAoa2V5KSA9PiB7XG4gICAgaWYoeGhyc1trZXldKSB7XG4gICAgICAgIHhocnNba2V5XS5hYm9ydCgpO1xuICAgICAgICBjb25zb2xlLmxvZyhgYWJvcnRlZCByZXF1ZXN0ICR7a2V5fWApO1xuICAgICAgICBkZWxldGUgeGhyc1trZXldO1xuICAgIH1cbn1cblxuY29uc3Qgc2NoZWR1bGUgPSAoa2V5LCByZXEpID0+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhgc2NoZWR1bGluZyAke2tleX1gKTtcbiAgICB4aHJzW2tleV0gPSByZXE7XG59O1xuXG5jb25zdCBpc09iamVjdEVtcHR5ID0gKG9iaikgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMCAmJiBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdCA7XG59XG5cbmV4cG9ydCBjb25zdCBhdXRoRXJyb3JIYW5kbGVyID0gKGVyciwgcmVzKSA9PiAoZGlzcGF0Y2gsIHN0YXRlKSA9PiB7XG4gICAgbGV0IGNvZGUgPSBlcnIuc3RhdHVzO1xuICAgIGxldCBtc2cgPSAnJztcblxuICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgICAgbGV0IGVycm9yX21lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdFUlJPUicsXG4gICAgICAgICAgICAgICAgaHRtbDogVC50cmFuc2xhdGUoXCJlcnJvcnMudXNlcl9ub3RfYXV0aHpcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJ1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZGlzcGF0Y2goc2hvd01lc3NhZ2UoIGVycm9yX21lc3NhZ2UsIGluaXRMb2dPdXQgKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgICBsZXQgY3VycmVudExvY2F0aW9uID0gZ2V0Q3VycmVudFBhdGhOYW1lKCk7XG4gICAgICAgICAgICBsZXQgY2xlYXJpbmdfc2Vzc2lvbl9zdGF0ZSA9IGlzQ2xlYXJpbmdTZXNzaW9uU3RhdGUoKTtcblxuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IENMRUFSX1NFU1NJT05fU1RBVEUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDoge31cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZighY2xlYXJpbmdfc2Vzc2lvbl9zdGF0ZSkge1xuICAgICAgICAgICAgICAgIHNldFNlc3Npb25DbGVhcmluZ1N0YXRlKHRydWUpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdhdXRoRXJyb3JIYW5kbGVyIDQwMSAtIHJlIGxvZ2luJyk7XG4gICAgICAgICAgICAgICAgZG9Mb2dpbihjdXJyZW50TG9jYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDA0OlxuICAgICAgICAgICAgbXNnID0gXCJcIjtcblxuICAgICAgICAgICAgaWYgKGVyci5yZXNwb25zZS5ib2R5ICYmIGVyci5yZXNwb25zZS5ib2R5Lm1lc3NhZ2UpIG1zZyA9IGVyci5yZXNwb25zZS5ib2R5Lm1lc3NhZ2U7XG4gICAgICAgICAgICBlbHNlIGlmIChlcnIucmVzcG9uc2UuZXJyb3IgJiYgZXJyLnJlc3BvbnNlLmVycm9yLm1lc3NhZ2UpIG1zZyA9IGVyci5yZXNwb25zZS5lcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgZWxzZSBtc2cgPSBlcnIubWVzc2FnZTtcblxuICAgICAgICAgICAgU3dhbC5maXJlKFwiTm90IEZvdW5kXCIsIG1zZywgXCJ3YXJuaW5nXCIpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTI6XG4gICAgICAgICAgICBmb3IgKHZhciBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXJyLnJlc3BvbnNlLmJvZHkuZXJyb3JzKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZyArPSBrZXkgKyAnOiAnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG1zZyArPSB2YWx1ZSArICc8YnI+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFN3YWwuZmlyZShcIlZhbGlkYXRpb24gZXJyb3JcIiwgbXNnLCBcIndhcm5pbmdcIik7XG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogVkFMSURBVEUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDoge2Vycm9yczogZXJyLnJlc3BvbnNlLmJvZHkuZXJyb3JzfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIFN3YWwuZmlyZShcIkVSUk9SXCIsIFQudHJhbnNsYXRlKFwiZXJyb3JzLnNlcnZlcl9lcnJvclwiKSwgXCJlcnJvclwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRSZXF1ZXN0ID0oXG4gICAgcmVxdWVzdEFjdGlvbkNyZWF0b3IsXG4gICAgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsXG4gICAgZW5kcG9pbnQsXG4gICAgZXJyb3JIYW5kbGVyID0gZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICByZXF1ZXN0QWN0aW9uUGF5bG9hZCA9IHt9XG4pID0+IChwYXJhbXMgPSB7fSkgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGxldCBrZXkgPSB1cmwudG9TdHJpbmcoKTtcblxuICAgIGlmKHJlcXVlc3RBY3Rpb25DcmVhdG9yICYmIHR5cGVvZiByZXF1ZXN0QWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZGlzcGF0Y2gocmVxdWVzdEFjdGlvbkNyZWF0b3IocmVxdWVzdEFjdGlvblBheWxvYWQpKTtcblxuICAgIGNhbmNlbChrZXkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHJlcSA9IGh0dHAuZ2V0KHVybC50b1N0cmluZygpKVxuICAgICAgICAudGltZW91dCh7XG4gICAgICAgICAgICByZXNwb25zZTogNjAwMDAsXG4gICAgICAgICAgICBkZWFkbGluZTogNjAwMDAsXG4gICAgICAgIH0pXG4gICAgICAgIC5lbmQocmVzcG9uc2VIYW5kbGVyKGRpc3BhdGNoLCBzdGF0ZSwgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsIGVycm9ySGFuZGxlciwgcmVzb2x2ZSwgcmVqZWN0KSlcblxuICAgICAgICBzY2hlZHVsZShrZXksIHJlcSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHV0UmVxdWVzdCA9IChcbiAgICByZXF1ZXN0QWN0aW9uQ3JlYXRvcixcbiAgICByZWNlaXZlQWN0aW9uQ3JlYXRvcixcbiAgICBlbmRwb2ludCxcbiAgICBwYXlsb2FkLFxuICAgIGVycm9ySGFuZGxlciA9IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgcmVxdWVzdEFjdGlvblBheWxvYWQgPSB7fVxuKSA9PiAocGFyYW1zID0ge30pID0+ICggZGlzcGF0Y2gsIHN0YXRlKSA9PiB7XG5cbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgaWYocmVxdWVzdEFjdGlvbkNyZWF0b3IgJiYgdHlwZW9mIHJlcXVlc3RBY3Rpb25DcmVhdG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICBkaXNwYXRjaChyZXF1ZXN0QWN0aW9uQ3JlYXRvcihyZXF1ZXN0QWN0aW9uUGF5bG9hZCkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYocGF5bG9hZCA9PSBudWxsKVxuICAgICAgICAgICAgcGF5bG9hZCA9IHt9O1xuICAgICAgICBodHRwLnB1dCh1cmwudG9TdHJpbmcoKSlcbiAgICAgICAgICAgIC5zZW5kKHBheWxvYWQpXG4gICAgICAgICAgICAuZW5kKHJlc3BvbnNlSGFuZGxlcihkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCkpXG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVxdWVzdCA9IChcbiAgICByZXF1ZXN0QWN0aW9uQ3JlYXRvcixcbiAgICByZWNlaXZlQWN0aW9uQ3JlYXRvcixcbiAgICBlbmRwb2ludCxcbiAgICBwYXlsb2FkLFxuICAgIGVycm9ySGFuZGxlciAgPSBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIHJlcXVlc3RBY3Rpb25QYXlsb2FkID0ge31cbikgPT4gKHBhcmFtcykgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuICAgIGxldCB1cmwgPSBVUkkoZW5kcG9pbnQpO1xuXG4gICAgaWYoIWlzT2JqZWN0RW1wdHkocGFyYW1zKSlcbiAgICAgICAgdXJsID0gdXJsLnF1ZXJ5KHBhcmFtcyk7XG5cbiAgICBpZihyZXF1ZXN0QWN0aW9uQ3JlYXRvciAmJiB0eXBlb2YgcmVxdWVzdEFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIGRpc3BhdGNoKHJlcXVlc3RBY3Rpb25DcmVhdG9yKHJlcXVlc3RBY3Rpb25QYXlsb2FkKSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpZihwYXlsb2FkID09IG51bGwpXG4gICAgICAgICAgICBwYXlsb2FkID0ge307XG5cbiAgICAgICAgaHR0cC5kZWxldGUodXJsKVxuICAgICAgICAgICAgLnNlbmQocGF5bG9hZClcbiAgICAgICAgICAgIC5lbmQocmVzcG9uc2VIYW5kbGVyKGRpc3BhdGNoLCBzdGF0ZSwgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsIGVycm9ySGFuZGxlciwgcmVzb2x2ZSwgcmVqZWN0KSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcG9zdFJlcXVlc3QgPSAoXG4gICAgICAgIHJlcXVlc3RBY3Rpb25DcmVhdG9yLFxuICAgICAgICByZWNlaXZlQWN0aW9uQ3JlYXRvcixcbiAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgIHBheWxvYWQsXG4gICAgICAgIGVycm9ySGFuZGxlciA9IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgICAgIHJlcXVlc3RBY3Rpb25QYXlsb2FkID0ge31cbikgPT4gKHBhcmFtcyA9IHt9KSA9PiAoZGlzcGF0Y2gsIHN0YXRlKSA9PiB7XG5cbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgaWYocmVxdWVzdEFjdGlvbkNyZWF0b3IgJiYgdHlwZW9mIHJlcXVlc3RBY3Rpb25DcmVhdG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICBkaXNwYXRjaChyZXF1ZXN0QWN0aW9uQ3JlYXRvcihyZXF1ZXN0QWN0aW9uUGF5bG9hZCkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICBsZXQgcmVxdWVzdCA9IGh0dHAucG9zdCh1cmwpO1xuXG4gICAgICAgIGlmKHBheWxvYWQgIT0gbnVsbClcbiAgICAgICAgICAgIHJlcXVlc3Quc2VuZChwYXlsb2FkKTtcbiAgICAgICAgZWxzZSAvLyB0byBiZSBhIHNpbXBsZSBDT1JTIHJlcXVlc3RcbiAgICAgICAgICAgIHJlcXVlc3Quc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuXG4gICAgICAgIHJlcXVlc3QuZW5kKHJlc3BvbnNlSGFuZGxlcihkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHBvc3RGaWxlID0gKFxuICAgIHJlcXVlc3RBY3Rpb25DcmVhdG9yLFxuICAgIHJlY2VpdmVBY3Rpb25DcmVhdG9yLFxuICAgIGVuZHBvaW50LFxuICAgIGZpbGUsXG4gICAgZmlsZU1ldGFkYXRhID0ge30sXG4gICAgZXJyb3JIYW5kbGVyID0gZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICByZXF1ZXN0QWN0aW9uUGF5bG9hZCA9IHt9XG4pID0+IChwYXJhbXMgPSB7fSkgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGlmKHJlcXVlc3RBY3Rpb25DcmVhdG9yICYmIHR5cGVvZiByZXF1ZXN0QWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZGlzcGF0Y2gocmVxdWVzdEFjdGlvbkNyZWF0b3IocmVxdWVzdEFjdGlvblBheWxvYWQpKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgY29uc3QgcmVxID0gaHR0cC5wb3N0KHVybClcbiAgICAgICAgICAgICAgICAgICAgLmF0dGFjaCgnZmlsZScsIGZpbGUpO1xuXG4gICAgICAgIGlmKCFpc09iamVjdEVtcHR5KGZpbGVNZXRhZGF0YSkpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVNZXRhZGF0YSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZmlsZU1ldGFkYXRhW2tleV07XG4gICAgICAgICAgICAgICAgcmVxLmZpZWxkKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXEuZW5kKHJlc3BvbnNlSGFuZGxlcihkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHB1dEZpbGUgPSAoXG4gICAgcmVxdWVzdEFjdGlvbkNyZWF0b3IsXG4gICAgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsXG4gICAgZW5kcG9pbnQsXG4gICAgZmlsZSA9IG51bGwsXG4gICAgZmlsZU1ldGFkYXRhID0ge30sXG4gICAgZXJyb3JIYW5kbGVyID0gZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICByZXF1ZXN0QWN0aW9uUGF5bG9hZCA9IHt9XG4pID0+IChwYXJhbXMgPSB7fSkgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGlmKHJlcXVlc3RBY3Rpb25DcmVhdG9yICYmIHR5cGVvZiByZXF1ZXN0QWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZGlzcGF0Y2gocmVxdWVzdEFjdGlvbkNyZWF0b3IocmVxdWVzdEFjdGlvblBheWxvYWQpKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgY29uc3QgcmVxID0gaHR0cC5wdXQodXJsKTtcblxuICAgICAgICBpZihmaWxlICE9IG51bGwpe1xuICAgICAgICAgICAgcmVxLmF0dGFjaCgnZmlsZScsIGZpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzT2JqZWN0RW1wdHkoZmlsZU1ldGFkYXRhKSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZmlsZU1ldGFkYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBmaWxlTWV0YWRhdGFba2V5XTtcbiAgICAgICAgICAgICAgICByZXEuZmllbGQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcS5lbmQocmVzcG9uc2VIYW5kbGVyKGRpc3BhdGNoLCBzdGF0ZSwgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsIGVycm9ySGFuZGxlciwgcmVzb2x2ZSwgcmVqZWN0KSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEVycm9ySGFuZGxlciA9IChlcnIsIHJlcykgPT4gKGRpc3BhdGNoKSA9PiB7XG4gICAgbGV0IGJvZHkgPSByZXMuYm9keTtcbiAgICBsZXQgdGV4dCA9ICcnO1xuICAgIGlmKGJvZHkgaW5zdGFuY2VvZiBPYmplY3Qpe1xuICAgICAgICBpZihib2R5Lmhhc093blByb3BlcnR5KCdtZXNzYWdlJykpXG4gICAgICAgICAgICB0ZXh0ID0gYm9keS5tZXNzYWdlO1xuICAgIH1cbiAgICBTd2FsLmZpcmUocmVzLnN0YXR1c1RleHQsIHRleHQsIFwiZXJyb3JcIik7XG59XG5cbmV4cG9ydCBjb25zdCByZXNwb25zZUhhbmRsZXIgPVxuICAgICggZGlzcGF0Y2gsIHN0YXRlLCByZWNlaXZlQWN0aW9uQ3JlYXRvciwgZXJyb3JIYW5kbGVyLCByZXNvbHZlLCByZWplY3QgKSA9PlxuICAgIChlcnIsIHJlcykgPT4ge1xuICAgIGlmIChlcnIgfHwgIXJlcy5vaykge1xuICAgICAgICBpZihlcnJvckhhbmRsZXIpIHtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcihlcnIsIHJlcykoZGlzcGF0Y2gsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVqZWN0KHsgZXJyLCByZXMsIGRpc3BhdGNoLCBzdGF0ZSB9KVxuICAgIH1cbiAgICBsZXQganNvbiA9IHJlcy5ib2R5O1xuICAgIGlmKHR5cGVvZiByZWNlaXZlQWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBkaXNwYXRjaChyZWNlaXZlQWN0aW9uQ3JlYXRvcih7cmVzcG9uc2U6IGpzb259KSk7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHtyZXNwb25zZToganNvbn0pO1xuICAgIH1cbiAgICBkaXNwYXRjaChyZWNlaXZlQWN0aW9uQ3JlYXRvcik7XG4gICAgcmV0dXJuIHJlc29sdmUoe3Jlc3BvbnNlOiBqc29ufSk7XG59XG5cblxuZXhwb3J0IGNvbnN0IGZldGNoRXJyb3JIYW5kbGVyID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgbGV0IGNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgbGV0IG1zZyA9IHJlc3BvbnNlLnN0YXR1c1RleHQ7XG5cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICBTd2FsLmZpcmUoXCJFUlJPUlwiLCBULnRyYW5zbGF0ZShcImVycm9ycy51c2VyX25vdF9hdXRoelwiKSwgXCJ3YXJuaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgU3dhbC5maXJlKFwiRVJST1JcIiwgVC50cmFuc2xhdGUoXCJlcnJvcnMuc2Vzc2lvbl9leHBpcmVkXCIpLCBcImVycm9yXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDEyOlxuICAgICAgICAgICAgU3dhbC5maXJlKFwiRVJST1JcIiwgbXNnLCBcIndhcm5pbmdcIik7XG4gICAgICAgIGNhc2UgNTAwOlxuICAgICAgICAgICAgU3dhbC5maXJlKFwiRVJST1JcIiwgVC50cmFuc2xhdGUoXCJlcnJvcnMuc2VydmVyX2Vycm9yXCIpLCBcImVycm9yXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZldGNoUmVzcG9uc2VIYW5kbGVyID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IHNob3dNZXNzYWdlID0gKHNldHRpbmdzLCBjYWxsYmFjayA9IHt9KSA9PiAoZGlzcGF0Y2gpID0+IHtcbiAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcblxuICAgIFN3YWwuZmlyZShzZXR0aW5ncykudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsdWUgJiYgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBzaG93U3VjY2Vzc01lc3NhZ2UgPSAoaHRtbCkgPT4gKGRpc3BhdGNoKSA9PiB7XG4gICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgU3dhbC5maXJlKHtcbiAgICAgICAgdGl0bGU6IFQudHJhbnNsYXRlKFwiZ2VuZXJhbC5kb25lXCIpLFxuICAgICAgICBodG1sOiBodG1sLFxuICAgICAgICB0eXBlOiAnc3VjY2VzcydcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkRmlsZUJ5Q29udGVudCA9IChmaWxlbmFtZSwgY29udGVudCwgbWltZSkgPT4ge1xuICAgIGxldCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxpbmsudGV4dENvbnRlbnQgPSAnZG93bmxvYWQnO1xuICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICBsaW5rLmhyZWYgPSBgZGF0YToke21pbWV9LCR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnQpfWBcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOyAvLyBSZXF1aXJlZCBmb3IgRkZcbiAgICBsaW5rLmNsaWNrKCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldENTViA9IChlbmRwb2ludCwgcGFyYW1zLCBmaWxlbmFtZSwgaGVhZGVyID0gbnVsbCkgPT4gKGRpc3BhdGNoKSA9PiB7XG5cbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgZGlzcGF0Y2goc3RhcnRMb2FkaW5nKCkpO1xuXG4gICAgcmV0dXJuIGZldGNoKHVybC50b1N0cmluZygpKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKGNzdikgPT4ge1xuICAgICAgICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG5cbiAgICAgICAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICBjc3YgPSBoZWFkZXIgKyAnXFxyXFxyJyArIGNzdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvd25sb2FkRmlsZUJ5Q29udGVudChmaWxlbmFtZSwgY3N2LCAndGV4dC9jc3Y7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJhd0NTViA9IChlbmRwb2ludCwgcGFyYW1zLCBoZWFkZXIgPSBudWxsKSA9PiB7XG5cbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgcmV0dXJuIGZldGNoKHVybC50b1N0cmluZygpKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKGNzdikgPT4ge1xuICAgICAgICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICAgICAgICAgIGNzdiA9IGhlYWRlciArICdcXHJcXHInICsgY3N2O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNzdjtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBlc2NhcGVGaWx0ZXJWYWx1ZSA9ICh2YWx1ZSkgPT4ge1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvLC9nLCBcIlxcXFwsXCIpO1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvOy9nLCBcIlxcXFw7XCIpO1xuICAgIHJldHVybiB2YWx1ZTtcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5pbXBvcnQgVVJJIGZyb20gXCJ1cmlqc1wiO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0bydcblxuZXhwb3J0IGNvbnN0IGZpbmRFbGVtZW50UG9zID0gKG9iaikgPT4ge1xuICAgIHZhciBjdXJ0b3AgPSAtNzA7XG4gICAgaWYgKG9iai5vZmZzZXRQYXJlbnQpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY3VydG9wICs9IG9iai5vZmZzZXRUb3A7XG4gICAgICAgIH0gd2hpbGUgKG9iaiA9IG9iai5vZmZzZXRQYXJlbnQpO1xuICAgICAgICByZXR1cm4gW2N1cnRvcF07XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGVwb2NoVG9Nb21lbnQgPSAoYXRpbWUpID0+IHtcbiAgICBpZighYXRpbWUpIHJldHVybiBhdGltZTtcbiAgICBhdGltZSA9IGF0aW1lICogMTAwMDtcbiAgICByZXR1cm4gbW9tZW50KGF0aW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBlcG9jaFRvTW9tZW50VGltZVpvbmUgPSAoYXRpbWUsIHRpbWVfem9uZSkgPT4ge1xuICAgIGlmKCFhdGltZSkgcmV0dXJuIGF0aW1lO1xuICAgIGF0aW1lID0gYXRpbWUgKiAxMDAwO1xuICAgIHJldHVybiBtb21lbnQoYXRpbWUpLnR6KHRpbWVfem9uZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RXBvY2ggPSAoYXRpbWUsIGZvcm1hdCA9ICdNL0QvWVlZWSBoOm1tIGEnKSA9PiB7XG4gICAgaWYoIWF0aW1lKSByZXR1cm4gYXRpbWU7XG4gICAgcmV0dXJuIGVwb2NoVG9Nb21lbnQoYXRpbWUpLmZvcm1hdChmb3JtYXQpO1xufTtcblxuZXhwb3J0IGNvbnN0IG9iamVjdFRvUXVlcnlTdHJpbmcgPSAob2JqKSA9PiB7XG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoc3RyICE9IFwiXCIpIHtcbiAgICAgICAgICAgIHN0ciArPSBcIiZcIjtcbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0ga2V5ICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2JqW2tleV0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmFja1VSTCA9ICgpID0+IHtcbiAgICBsZXQgdXJsICAgICAgPSBVUkkod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIGxldCBxdWVyeSAgICA9IHVybC5zZWFyY2godHJ1ZSk7XG4gICAgbGV0IGZyYWdtZW50ID0gdXJsLmZyYWdtZW50KCk7XG4gICAgbGV0IGJhY2tVcmwgID0gcXVlcnkuaGFzT3duUHJvcGVydHkoJ0JhY2tVcmwnKSA/IHF1ZXJ5WydCYWNrVXJsJ10gOiBudWxsO1xuICAgIGlmKGZyYWdtZW50ICE9IG51bGwgJiYgZnJhZ21lbnQgIT0gJycpe1xuICAgICAgICBiYWNrVXJsICs9IGAjJHtmcmFnbWVudH1gO1xuICAgIH1cbiAgICByZXR1cm4gYmFja1VybDtcbn07XG5cblxuZXhwb3J0IGNvbnN0IGdldEF1dGhDYWxsYmFjayA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYXV0aC9jYWxsYmFja2A7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRMb2NhdGlvbiA9ICgpID0+IHtcbiAgICBsZXQgbG9jYXRpb24gPSAnJztcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIG9uIGlmcmFtZVxuICAgICAgICBpZiAod2luZG93LnRvcClcbiAgICAgICAgICAgIGxvY2F0aW9uID0gd2luZG93LnRvcC5sb2NhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2F0aW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE9yaWdpbiA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFBhdGhOYW1lID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudEhyZWYgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxvd2VkVXNlckdyb3VwcyA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LkFMTE9XRURfVVNFUl9HUk9VUFMgfHwgJyc7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkQVBJQmFzZVVybCA9IChyZWxhdGl2ZVVybCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgcmV0dXJuIGAke3dpbmRvdy5BUElfQkFTRV9VUkx9JHtyZWxhdGl2ZVVybH1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbGBgO1xufTtcblxuZXhwb3J0IGNvbnN0IHB1dE9uTG9jYWxTdG9yYWdlID0gKGtleSwgdmFsdWUpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEZyb21Mb2NhbFN0b3JhZ2UgPSAoa2V5LCByZW1vdmVJdCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxldCB2YWwgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICAgICAgaWYocmVtb3ZlSXQpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coYGdldEZyb21Mb2NhbFN0b3JhZ2UgcmVtb3Zpbmcga2V5ICR7a2V5fWApO1xuICAgICAgICAgICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UgPSAoa2V5KSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgaXNDbGVhcmluZ1Nlc3Npb25TdGF0ZSA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LmNsZWFyaW5nX3Nlc3Npb25fc3RhdGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSA9ICh2YWwpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cuY2xlYXJpbmdfc2Vzc2lvbl9zdGF0ZSA9IHZhbDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFVzZXJMYW5ndWFnZSA9ICgpID0+IHtcbiAgICBsZXQgbGFuZ3VhZ2UgPSAnZW4nO1xuICAgIGlmKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxhbmd1YWdlID0gKG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlc1swXSkgfHwgbmF2aWdhdG9yLmxhbmd1YWdlIHx8IG5hdmlnYXRvci51c2VyTGFuZ3VhZ2U7XG4gICAgfVxuICAgIHJldHVybiBsYW5ndWFnZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzY3JvbGxUb0Vycm9yID0gKGVycm9ycykgPT4ge1xuICAgIGlmKE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBmaXJzdEVycm9yID0gT2JqZWN0LmtleXMoZXJyb3JzKVswXTtcbiAgICAgICAgY29uc3QgZmlyc3ROb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmlyc3RFcnJvcik7XG4gICAgICAgIGlmIChmaXJzdE5vZGUpIHdpbmRvdy5zY3JvbGxUbygwLCBmaW5kRWxlbWVudFBvcyhmaXJzdE5vZGUpKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaGFzRXJyb3JzID0gKGZpZWxkLCBlcnJvcnMpID0+IHtcbiAgICBpZihmaWVsZCBpbiBlcnJvcnMpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yc1tmaWVsZF07XG4gICAgfVxuICAgIHJldHVybiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBzaGFsbG93RXF1YWwgPSAob2JqZWN0MSwgb2JqZWN0MikgPT4ge1xuICAgIGNvbnN0IGtleXMxID0gT2JqZWN0LmtleXMob2JqZWN0MSk7XG4gICAgY29uc3Qga2V5czIgPSBPYmplY3Qua2V5cyhvYmplY3QyKTtcblxuICAgIGlmIChrZXlzMS5sZW5ndGggIT09IGtleXMyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQga2V5IG9mIGtleXMxKSB7XG4gICAgICAgIGlmIChvYmplY3QxW2tleV0gIT09IG9iamVjdDJba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgYXJyYXlzRXF1YWwgPSAoYTEsIGEyKSA9PlxuICAgIGExLmxlbmd0aCA9PT0gYTIubGVuZ3RoICYmIGExLmV2ZXJ5KChvLCBpZHgpID0+IHNoYWxsb3dFcXVhbChvLCBhMltpZHhdKSk7XG5cbmV4cG9ydCBjb25zdCBpc0VtcHR5ID0gKG9iaikgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn07XG5cbmV4cG9ydCBjb25zdCBiYXNlNjRVUkxFbmNvZGUgPSAoc3RyKSA9PiB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgICAudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgICAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgICAgLnJlcGxhY2UoLz0vZywgJycpXG59XG5cbmV4cG9ydCBjb25zdCBzaGEyNTYgPSAoYnVmZmVyKSA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShidWZmZXIpLmRpZ2VzdCgpXG59XG5cbmV4cG9ydCBjb25zdCByZXRyeVByb21pc2UgPSBhc3luYyAoXG4gICAgY2IsXG4gICAgbWF4TnVtYmVyT2ZSZXRyaWVzID0gM1xuKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhOdW1iZXJPZlJldHJpZXM7IGkrKykge1xuICAgICAgICBpZiAoYXdhaXQgY2IoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCB7ZmV0Y2hFcnJvckhhbmRsZXIsIGZldGNoUmVzcG9uc2VIYW5kbGVyLCBlc2NhcGVGaWx0ZXJWYWx1ZSB9IGZyb20gXCIuL2FjdGlvbnNcIjtcbmltcG9ydCB7Z2V0QWNjZXNzVG9rZW59IGZyb20gJy4uL2NvbXBvbmVudHMvc2VjdXJpdHkvbWV0aG9kcyc7XG5pbXBvcnQge2J1aWxkQVBJQmFzZVVybH0gZnJvbSBcIi4vbWV0aG9kc1wiO1xuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIjtcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5leHBvcnQgY29uc3QgUkVDRUlWRV9DT1VOVFJJRVMgID0gJ1JFQ0VJVkVfQ09VTlRSSUVTJztcbmNvbnN0IGNhbGxEZWxheSA9IDUwMDsgLy9taWxpc2Vjb25kc1xuXG5leHBvcnQgY29uc3QgcXVlcnlNZW1iZXJzID0gXy5kZWJvdW5jZShhc3luYyAoaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYGZ1bGxfbmFtZT1AJHtpbnB1dH0sZmlyc3RfbmFtZT1AJHtpbnB1dH0sbGFzdF9uYW1lPUAke2lucHV0fSxlbWFpbD1AJHtpbnB1dH1gKTtcbiAgICBsZXQgZXhwYW5kID0gYHRpY2tldHMscnN2cCxzY2hlZHVsZV9zdW1taXRfZXZlbnRzLGFsbF9hZmZpbGlhdGlvbnNgXG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvbWVtYmVycz9maWx0ZXI9JHtmaWx0ZXJzfSZleHBhbmQ9JHtleHBhbmR9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5U3VtbWl0cyA9IF8uZGVib3VuY2UoYXN5bmMgKGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBuYW1lPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL3N1bW1pdHMvYWxsP2ZpbHRlcj0ke2ZpbHRlcnN9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5U3BlYWtlcnMgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYGZ1bGxfbmFtZT1AJHtpbnB1dH0sZmlyc3RfbmFtZT1AJHtpbnB1dH0sbGFzdF9uYW1lPUAke2lucHV0fSxlbWFpbD1AJHtpbnB1dH1gKTtcbiAgICBsZXQgYXBpVXJsID0gYC9hcGkvdjFgO1xuXG4gICAgaWYgKHN1bW1pdElkKSB7XG4gICAgICAgIGFwaVVybCArPSBgL3N1bW1pdHMvJHtzdW1taXRJZH1gO1xuICAgIH1cblxuICAgIGFwaVVybCArPSBgL3NwZWFrZXJzP2ZpbHRlcj0ke2ZpbHRlcnN9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufSZleHBhbmQ9bWVtYmVyLHJlZ2lzdHJhdGlvbl9yZXF1ZXN0YDtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChhcGlVcmwpKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5VGFncyA9IF8uZGVib3VuY2UoYXN5bmMgKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgYXBpVXJsID0gYC9hcGkvdjFgO1xuICAgIGxldCBmaWx0ZXIgPSBlbmNvZGVVUklDb21wb25lbnQoYHRhZz1AJHtpbnB1dH1gKTtcblxuICAgIGlmIChzdW1taXRJZCkge1xuICAgICAgICBhcGlVcmwgKz0gYC9zdW1taXRzLyR7c3VtbWl0SWR9L3RyYWNrLXRhZy1ncm91cHMvYWxsL2FsbG93ZWQtdGFncz9maWx0ZXI9JHtmaWx0ZXJ9JmV4cGFuZD10YWcsdHJhY2tfdGFnX2dyb3VwYDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhcGlVcmwgKz0gYC90YWdzP2ZpbHRlcj0ke2ZpbHRlcn1gO1xuICAgIH1cblxuICAgIGFwaVVybCArPSBgJm9yZGVyPXRhZyZwYWdlPTEmcGVyX3BhZ2U9NTAmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YDtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChhcGlVcmwpKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGlmIChzdW1taXRJZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLm1hcCh0ID0+IHQudGFnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlUcmFja3MgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlciA9IGVuY29kZVVSSUNvbXBvbmVudChgbmFtZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L3RyYWNrcz9maWx0ZXI9JHtmaWx0ZXJ9Jm9yZGVyPW5hbWUmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlUcmFja0dyb3VwcyA9IF8uZGVib3VuY2UoYXN5bmMgKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVyID0gaW5wdXQgPyBlbmNvZGVVUklDb21wb25lbnQoYGZpbHRlcj1uYW1lPUAke2lucHV0fWApIDogJyc7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvc3VtbWl0cy8ke3N1bW1pdElkfS90cmFjay1ncm91cHM/b3JkZXI9bmFtZSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn0mJHtmaWx0ZXJ9YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlFdmVudHMgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIG9ubHlQdWJsaXNoZWQgPSBmYWxzZSwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgYmFzZVVybCA9IGAvYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vZXZlbnRzYCArIChvbmx5UHVibGlzaGVkID8gJy9wdWJsaXNoZWQnIDogJycpO1xuICAgIGxldCBmaWx0ZXIgPSBlbmNvZGVVUklDb21wb25lbnQoYHRpdGxlPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAke2Jhc2VVcmx9P2ZpbHRlcj0ke2ZpbHRlcn0mb3JkZXI9dGl0bGUmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlHcm91cHMgPSBfLmRlYm91bmNlKGFzeW5jIChpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgdGl0bGU9QCR7aW5wdXR9LGNvZGU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvZ3JvdXBzP2ZpbHRlcj0ke2ZpbHRlcnN9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5Q29tcGFuaWVzID0gXy5kZWJvdW5jZShhc3luYyAoaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYG5hbWU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvY29tcGFuaWVzP2ZpbHRlcj0ke2ZpbHRlcnN9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5UmVnaXN0cmF0aW9uQ29tcGFuaWVzID0gXy5kZWJvdW5jZShhc3luYyAoc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjaykgPT4ge1xuICAgIFxuICAgIGxldCBhY2Nlc3NUb2tlbjtcblxuICAgIHRyeSB7XG4gICAgICAgIGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGFwaVVybCA9IFVSSShgL2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L3JlZ2lzdHJhdGlvbi1jb21wYW5pZXNgKTtcbiAgICBhcGlVcmwuYWRkUXVlcnkoJ2FjY2Vzc190b2tlbicsIGFjY2Vzc1Rva2VuKTtcbiAgICBhcGlVcmwuYWRkUXVlcnkoJ29yZGVyJywnbmFtZScpXG5cbiAgICBpZihpbnB1dCkge1xuICAgICAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICAgICAgYXBpVXJsLmFkZFF1ZXJ5KCdmaWx0ZXJbXScsIGBuYW1lPUAke2lucHV0fWApO1xuICAgIH1cblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChhcGlVcmwudG9TdHJpbmcoKSkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlTcG9uc29ycyA9IF8uZGVib3VuY2UoYXN5bmMgKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgY29tcGFueV9uYW1lPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vc3BvbnNvcnM/ZmlsdGVyPSR7ZmlsdGVyc30mZXhwYW5kPWNvbXBhbnksc3BvbnNvcnNoaXAmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlBY2Nlc3NMZXZlbHMgPSBfLmRlYm91bmNlKChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBsZXQgYWNjZXNzVG9rZW4gPSBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBuYW1lPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vYWNjZXNzLWxldmVsLXR5cGVzP2ZpbHRlcj0ke2ZpbHRlcnN9JiZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeU9yZ2FuaXphdGlvbnMgPSBfLmRlYm91bmNlKGFzeW5jIChpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgbmFtZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9vcmdhbml6YXRpb25zP2ZpbHRlcj0ke2ZpbHRlcnN9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IGdldExhbmd1YWdlTGlzdCA9IChjYWxsYmFjaywgc2lnbmFsKSA9PiB7XG4gICAgcmV0dXJuIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS9wdWJsaWMvdjEvbGFuZ3VhZ2VzYCksIHtzaWduYWx9KVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb3VudHJ5TGlzdCA9IChjYWxsYmFjaywgc2lnbmFsKSA9PiB7XG5cbiAgICByZXR1cm4gZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3B1YmxpYy92MS9jb3VudHJpZXNgKSwge3NpZ25hbH0pXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufTtcblxudmFyIGdlb2NvZGVyO1xuXG5leHBvcnQgY29uc3QgZ2VvQ29kZUFkZHJlc3MgPSAoYWRkcmVzcykgPT4ge1xuXG4gICAgaWYgKCFnZW9jb2RlcikgZ2VvY29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcblxuICAgIC8vIHJldHVybiBhIFByb21pc2VcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSxyZWplY3QpIHtcbiAgICAgICAgZ2VvY29kZXIuZ2VvY29kZSggeyAnYWRkcmVzcyc6IGFkZHJlc3N9LCBmdW5jdGlvbihyZXN1bHRzLCBzdGF0dXMpIHtcbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gZ29vZ2xlLm1hcHMuR2VvY29kZXJTdGF0dXMuT0spIHtcbiAgICAgICAgICAgICAgICAvLyByZXNvbHZlIHJlc3VsdHMgdXBvbiBhIHN1Y2Nlc3NmdWwgc3RhdHVzXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHRzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcmVqZWN0IHN0YXR1cyB1cG9uIHVuLXN1Y2Nlc3NmdWwgc3RhdHVzXG4gICAgICAgICAgICAgICAgcmVqZWN0KHN0YXR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdlb0NvZGVMYXRMbmcgPSAobGF0LCBsbmcpID0+IHtcblxuICAgIGlmICghZ2VvY29kZXIpIGdlb2NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XG5cbiAgICB2YXIgbGF0bG5nID0ge2xhdDogcGFyc2VGbG9hdChsYXQpLCBsbmc6IHBhcnNlRmxvYXQobG5nKX07XG4gICAgLy8gcmV0dXJuIGEgUHJvbWlzZVxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLHJlamVjdCkge1xuICAgICAgICBnZW9jb2Rlci5nZW9jb2RlKCB7ICdsb2NhdGlvbic6IGxhdGxuZ30sIGZ1bmN0aW9uKHJlc3VsdHMsIHN0YXR1cykge1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBnb29nbGUubWFwcy5HZW9jb2RlclN0YXR1cy5PSykge1xuICAgICAgICAgICAgICAgIC8vIHJlc29sdmUgcmVzdWx0cyB1cG9uIGEgc3VjY2Vzc2Z1bCBzdGF0dXNcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyByZWplY3Qgc3RhdHVzIHVwb24gdW4tc3VjY2Vzc2Z1bCBzdGF0dXNcbiAgICAgICAgICAgICAgICByZWplY3Qoc3RhdHVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVlcnlUaWNrZXRUeXBlcyA9IF8uZGVib3VuY2UoKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGxldCBhY2Nlc3NUb2tlbiA9IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYG5hbWU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvc3VtbWl0cy8ke3N1bW1pdElkfS90aWNrZXQtdHlwZXM/ZmlsdGVyPSR7ZmlsdGVyc30mJmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuXG4iLCJleHBvcnQgY29uc3QgQ2hlY2tCb3hRdWVzdGlvblR5cGUgPSAnQ2hlY2tCb3gnO1xuZXhwb3J0IGNvbnN0IENvbWJvQm94UXVlc3Rpb25UeXBlID0gJ0NvbWJvQm94J1xuZXhwb3J0IGNvbnN0IENoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSA9ICdDaGVja0JveExpc3QnO1xuZXhwb3J0IGNvbnN0IFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZSA9ICdSYWRpb0J1dHRvbkxpc3QnO1xuZXhwb3J0IGNvbnN0IEFsbG93ZWRNdWx0aXBsZVZhbHVlUXVlc3Rpb25UeXBlID0gW0NvbWJvQm94UXVlc3Rpb25UeXBlLCBDaGVja0JveExpc3RRdWVzdGlvblR5cGUsIFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZV07XG5leHBvcnQgY29uc3QgQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kID0gJ0FuZCc7XG5leHBvcnQgY29uc3QgQW5zd2VyVmFsdWVzT3BlcmF0b3JfT3IgPSAnT3InO1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb25kaXRpb25fRXF1YWwgPSAnRXF1YWwnO1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb25kaXRpb25fTm90RXF1YWwgPSAnTm90RXF1YWwnO1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlfVmlzaWJsZSA9ICdWaXNpYmxlJztcbmV4cG9ydCBjb25zdCBNYWluUXVlc3Rpb25DbGFzc1R5cGUgPSAnTWFpblF1ZXN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVlc3Rpb25zU2V0IHtcblxuICAgIGNvbnN0cnVjdG9yKHF1ZXN0aW9ucywgYW5zd2VycyA9IFtdKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gcXVlc3Rpb25zO1xuICAgICAgICB0aGlzLm9yaWdpbmFsQW5zd2VycyA9IGFuc3dlcnNcbiAgICAgICAgdGhpcy5hbnN3ZXJzID0gW107XG4gICAgICAgIC8vIG1hcCBhbnN3ZXJzIHRvIGFzc29jaWF0ZSBhcnJheVxuICAgICAgICBmb3IgKGxldCBhIG9mIHRoaXMub3JpZ2luYWxBbnN3ZXJzKVxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2EucXVlc3Rpb25faWRdID0gYTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJ5TmFtZSA9IHt9XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeUlkID0ge31cbiAgICAgICAgLy8gYXNzb2NpYXRpdmUgYXJyYXkgKCBydWxlIGlkICwgcnVsZSk7XG4gICAgICAgIHRoaXMucnVsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fcGFyc2VRdWVzdGlvbnMoKTtcbiAgICB9XG5cbiAgICBfcGFyc2VRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeU5hbWVbcS5uYW1lXSA9IHE7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeUlkW3BhcnNlSW50KHEuaWQpXSA9IHE7XG4gICAgICAgIGlmKHEuaGFzT3duUHJvcGVydHkoJ3N1Yl9xdWVzdGlvbl9ydWxlcycpKVxuICAgICAgICAgICAgZm9yIChsZXQgciBvZiBxLnN1Yl9xdWVzdGlvbl9ydWxlcykge1xuICAgICAgICAgICAgICAgIHRoaXMucnVsZXNbcGFyc2VJbnQoci5pZCldID0gcjtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZVF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICB9XG5cbiAgICBfcGFyc2VRdWVzdGlvbnMgPSAoKSA9PiB7XG4gICAgICAgIGZvciAobGV0IHEgb2YgdGhpcy5xdWVzdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcnNlUXVlc3Rpb24ocSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWxsb3dzVmFsdWVzID0gKHEpID0+IHtcbiAgICAgICAgcmV0dXJuIEFsbG93ZWRNdWx0aXBsZVZhbHVlUXVlc3Rpb25UeXBlLmluY2x1ZGVzKHEudHlwZSk7XG4gICAgfVxuXG4gICAgX2FsbG93c1ZhbHVlID0gKHEsIGFuc3dlcikgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBhbnN3ZXIudmFsdWUuc3BsaXQoJywnKS5tYXAodiA9PiBwYXJzZUludCh2KSk7XG4gICAgICAgIGZvciAobGV0IGF2IG9mIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXEudmFsdWVzLm1hcChlID0+IGUuaWQpLmluY2x1ZGVzKGF2KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgX2dldEFuc3dlckZvciA9IChxKSA9PiB7XG4gICAgICAgIGxldCBpZCA9IE51bWJlci5pc0ludGVnZXIocSkgPyBxIDogcS5pZDtcbiAgICAgICAgbGV0IGEgPSB0aGlzLmFuc3dlcnNbaWRdIHx8IG51bGw7XG4gICAgICAgIHJldHVybiBhID8gYSA6IG51bGw7XG4gICAgfVxuXG4gICAgX2hhc1ZhbHVlID0gKGFuc3dlcikgPT4ge1xuICAgICAgICByZXR1cm4gYW5zd2VyLnZhbHVlICE9PSAnJztcbiAgICB9XG5cbiAgICBfYW5zd2VyQ29udGFpbnMgPSAoYW5zd2VyLCB2YWwpID0+IHtcbiAgICAgICAgcmV0dXJuIGFuc3dlci52YWx1ZS5zcGxpdCgnLCcpLmluY2x1ZGVzKHZhbCk7XG4gICAgfVxuXG4gICAgX2lzU3ViUXVlc3Rpb25WaXNpYmxlID0gKHJ1bGUpID0+IHtcbiAgICAgICAgbGV0IGluaXRpYWxDb25kaXRpb24gPSBydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgY29uc3QgcGFyZW50UXVlc3Rpb25BbnN3ZXIgPSB0aGlzLl9nZXRBbnN3ZXJGb3IocnVsZS5wYXJlbnRfcXVlc3Rpb25faWQpO1xuICAgICAgICBpZiAoIXBhcmVudFF1ZXN0aW9uQW5zd2VyKSB7XG4gICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gcnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbiA9PT0gVmlzaWJpbGl0eUNvbmRpdGlvbl9FcXVhbCA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAocnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgVmlzaWJpbGl0eUNvbmRpdGlvbl9FcXVhbDoge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhbnN3ZXJWYWx1ZSBvZiBydWxlLmFuc3dlcl92YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiAmJiB0aGlzLl9hbnN3ZXJDb250YWlucyhwYXJlbnRRdWVzdGlvbkFuc3dlciwgYW5zd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uIHx8IHRoaXMuX2Fuc3dlckNvbnRhaW5zKHBhcmVudFF1ZXN0aW9uQW5zd2VyLCBhbnN3ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgVmlzaWJpbGl0eUNvbmRpdGlvbl9Ob3RFcXVhbDoge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhbnN3ZXJWYWx1ZSBvZiBydWxlLmFuc3dlcl92YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiAmJiAhdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiB8fCAhdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluYWwgdmlzaWJpbGl0eSBjaGVja1xuICAgICAgICBpZiAocnVsZS52aXNpYmlsaXR5ID09PSBWaXNpYmlsaXR5X1Zpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybiBpbml0aWFsQ29uZGl0aW9uO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdCB2aXNpYmxlXG4gICAgICAgIHJldHVybiAhaW5pdGlhbENvbmRpdGlvbjtcbiAgICB9XG5cbiAgICBfaXNBbnN3ZXJlZCA9IChxKSA9PiB7XG4gICAgICAgIGNvbnN0IGFuc3dlciA9IHRoaXMuX2dldEFuc3dlckZvcihxKTtcblxuICAgICAgICBpZiAocS5jbGFzcyA9PT0gTWFpblF1ZXN0aW9uQ2xhc3NUeXBlKSB7XG4gICAgICAgICAgICBpZiAoIXEubWFuZGF0b3J5KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghYW5zd2VyKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2hhc1ZhbHVlKGFuc3dlcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9hbGxvd3NWYWx1ZXMocSkgJiYgIXRoaXMuX2FsbG93c1ZhbHVlKHEsIGFuc3dlcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBwYXJlbnQgcnVsZXMgLi4uXG4gICAgICAgIGZvciAobGV0IHJ1bGVJZCBvZiBxLnBhcmVudF9ydWxlcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1N1YlF1ZXN0aW9uVmlzaWJsZSh0aGlzLnJ1bGVzW3J1bGVJZF0pKSAvLyBpZiBxdWVzdGlvbiBpcyBub3QgdmlzaWJsZSBza2lwIGl0XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIXEubWFuZGF0b3J5KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghYW5zd2VyKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2hhc1ZhbHVlKGFuc3dlcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9hbGxvd3NWYWx1ZXMocSkgJiYgIXRoaXMuX2FsbG93c1ZhbHVlKHEsIGFuc3dlcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBfY2hlY2tRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgICAgIGxldCByZXMgPSB0aGlzLl9pc0Fuc3dlcmVkKHEpO1xuICAgICAgICBpZihxLmhhc093blByb3BlcnR5KCdzdWJfcXVlc3Rpb25fcnVsZXMnKSlcbiAgICAgICAgICAgIGZvciAobGV0IHJ1bGUgb2YgcS5zdWJfcXVlc3Rpb25fcnVsZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayByZWN1cnNpdmUgYWxsIHRoZSB0cmVlIHRpbGwgbGVhdmVzIC4uLlxuICAgICAgICAgICAgICAgIHJlcyA9IHJlcyAmJiB0aGlzLl9jaGVja1F1ZXN0aW9uKHJ1bGUuc3ViX3F1ZXN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBfZm9ybWF0UXVlc3Rpb25BbnN3ZXIgPSAocXVlc3Rpb24pID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHt9O1xuICAgICAgICBsZXQgdXNlckFuc3dlciA9IHRoaXMub3JpZ2luYWxBbnN3ZXJzLmZpbmQoYSA9PiBhLnF1ZXN0aW9uX2lkID09PSBxdWVzdGlvbi5pZCk/LnZhbHVlO1xuXG4gICAgICAgIGlmKHVzZXJBbnN3ZXIpIHtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSBDaGVja0JveFF1ZXN0aW9uVHlwZSkgdXNlckFuc3dlciA9IHVzZXJBbnN3ZXIgPT09ICdmYWxzZScgPyBmYWxzZSA6ICEhdXNlckFuc3dlcjtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSBSYWRpb0J1dHRvbkxpc3RRdWVzdGlvblR5cGUgfHwgcXVlc3Rpb24udHlwZSA9PT0gQ29tYm9Cb3hRdWVzdGlvblR5cGUpIHVzZXJBbnN3ZXIgPSBwYXJzZUludCh1c2VyQW5zd2VyKTtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSBDaGVja0JveExpc3RRdWVzdGlvblR5cGUpIHVzZXJBbnN3ZXIgPSB1c2VyQW5zd2VyLnNwbGl0KCcsJykubWFwKGFuc1ZhbCA9PiBwYXJzZUludChhbnNWYWwpKSB8fCBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc1txdWVzdGlvbi5uYW1lXSA9ICB1c2VyQW5zd2VyIHx8ICcnO1xuICAgICAgICBpZihxdWVzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnc3ViX3F1ZXN0aW9uX3J1bGVzJykpXG4gICAgICAgICAgICBmb3IgKGxldCBydWxlIG9mIHF1ZXN0aW9uLnN1Yl9xdWVzdGlvbl9ydWxlcykge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHJlY3Vyc2l2ZSBhbGwgdGhlIHRyZWUgdGlsbCBsZWF2ZXMgLi4uXG4gICAgICAgICAgICAgICAgbGV0IHJlczEgPSB0aGlzLl9mb3JtYXRRdWVzdGlvbkFuc3dlcihydWxlLnN1Yl9xdWVzdGlvbik7XG4gICAgICAgICAgICAgICAgcmVzID0gey4uLnJlcywgLi4ucmVzMX07XG4gICAgICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZm9ybWF0QW5zd2VycyA9ICgpID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHt9XG4gICAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2gocSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzMSA9IHRoaXMuX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyKHEpO1xuICAgICAgICAgICAgcmVzID0gey4uLnJlcywuLi5yZXMxfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgY29tcGxldGVkID0gKCkgPT4ge1xuICAgICAgICBsZXQgcmVzID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgcSBvZiB0aGlzLnF1ZXN0aW9ucykge1xuICAgICAgICAgICAgcmVzID0gcmVzICYmIHRoaXMuX2NoZWNrUXVlc3Rpb24ocSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBnZXRRdWVzdGlvbkJ5TmFtZSA9IChuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQnlOYW1lW25hbWVdIHx8IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0UXVlc3Rpb25CeUlkID0gKGlkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQnlJZFtwYXJzZUludChpZCldIHx8IG51bGw7XG4gICAgfVxufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImF3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94L2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94LmNzc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJicm93c2VyLXRhYnMtbG9ja1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcnlwdG9cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZHJvcHpvbmVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZHJvcHpvbmUvZGlzdC9kcm9wem9uZS5jc3NcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZXh0ZW5kXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImkxOG4tcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaWR0b2tlbi12ZXJpZmllclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJpbW11dGFiaWxpdHktaGVscGVyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJtb21lbnQtdGltZXpvbmVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1kYXRldGltZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1kbmRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG5kLWh0bWw1LWJhY2tlbmRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG9tXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRyb3B6b25lXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWZpbmFsLWZvcm1cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZ29vZ2xlLW1hcHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZ29vZ2xlLW1hcHMvbGliL2NvbXBvbmVudHMvYWRkb25zL01hcmtlckNsdXN0ZXJlclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1yZWR1eFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1ydGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0L2xpYi9Bc3luY0NyZWF0YWJsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1zZWxlY3QvbGliL0NyZWF0YWJsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1zZWxlY3QvbGliL2NvbXBvbmVudHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtdG9vbHRpcFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdXBlcmFnZW50XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN3ZWV0YWxlcnQyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInVyaWpzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInZpZGVvLmpzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInZpZGVvLmpzL2Rpc3QvdmlkZW8tanMuY3NzXCIpOyJdLCJzb3VyY2VSb290IjoiIn0=