@ditojs/admin 2.2.7-debug.1 → 2.2.7-debug.2

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.
@@ -7800,6 +7800,13 @@ function Us(e, t) {
7800
7800
  return (n = s == null ? void 0 : s.form) == null ? void 0 : n.components;
7801
7801
  }
7802
7802
  function Ru(e, t) {
7803
+ console.log(
7804
+ "formatFiltersData()",
7805
+ {
7806
+ data: JSON.stringify(t),
7807
+ schema: JSON.stringify(Object.keys(e.components || {}))
7808
+ }
7809
+ );
7803
7810
  const s = [];
7804
7811
  for (const n in t) {
7805
7812
  const o = t[n];
@@ -9690,4 +9697,4 @@ function Ih(e, t) {
9690
9697
  export {
9691
9698
  Dc as default
9692
9699
  };
9693
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RvbWFpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdWlkLmpzIiwiLi4vc3JjL3V0aWxzL1NjaGVtYUdyYXBoLmpzIiwiLi4vc3JjL3V0aWxzL3NjaGVtYS5qcyIsIi4uL3NyYy91dGlscy9vcHRpb25zLmpzIiwiLi4vc3JjL0RpdG9Db21wb25lbnQuanMiLCIuLi9zcmMvRGl0b1VzZXIuanMiLCIuLi9zcmMvbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUm91dGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9kYXRlLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3Njcm9sbC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9Td2l0Y2hCdXR0b24udnVlIiwiLi4vLi4vdWkvc3JjL3RyYW5zaXRpb25zL1RyYW5zaXRpb25IZWlnaHQudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NwaW5uZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWUiLCIuLi9zcmMvbWl4aW5zL1B1bGxkb3duTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZSIsIi4uL3NyYy91dGlscy9tYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvdXRpbHMvdnVlLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9wYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU29ydGFibGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudC5tanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRHJhZ2dhYmxlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvRGl0b1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29kZS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb2xvci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlRGF0ZS52dWUiLCIuLi9zcmMvbWl4aW5zL1NvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2ZpbHRlci5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTWFya3VwLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU11bHRpc2VsZWN0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvTnVtYmVyTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlY3Rpb24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTd2l0Y2gudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVGV4dC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUcmVlTGlzdC52dWUiLCIuLi9zcmMvdXRpbHMvdW5pdHMuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVVcGxvYWQudnVlIiwiLi4vc3JjL3V0aWxzL2RlcHJlY2F0ZS5qcyIsIi4uL3NyYy91dGlscy9yb3V0ZS5qcyIsIi4uL3NyYy92ZXJicy5qcyIsIi4uL3NyYy9EaXRvQWRtaW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5cbmV4cG9ydCBkZWZhdWx0IHJlYWN0aXZlKHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufSlcbiIsImltcG9ydCB7XG4gIGlzSW50ZWdlcixcbiAgcGFyc2VEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKSB7XG4gIHJldHVybiBkYXRhUGF0aFxuICAgID8gYCR7ZGF0YVBhdGh9LyR7dG9rZW59YFxuICAgIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHBhdGg/LnBvcCgpXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5lc3RlZCA/IHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIDogcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICBpZiAocGF0aCkge1xuICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHRva2VuLiBJZiBpdCdzIGEgbnVtYmVyLCB0aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhblxuICAgIC8vIGFycmF5IGFuZCBuZWVkIHRvIHJlbW92ZSBtb3JlIHRva2VucyB1bnRpbCB3ZSBtZWV0IHRoZSBhY3R1YWwgcGFyZW50OlxuICAgIGxldCB0b2tlblxuICAgIGRvIHtcbiAgICAgIHRva2VuID0gcGF0aC5wb3AoKVxuICAgIH0gd2hpbGUgKHRva2VuICE9IG51bGwgJiYgaXNJbnRlZ2VyKCt0b2tlbikpXG4gICAgLy8gSWYgdGhlIHJlbW92ZWQgdG9rZW4gaXMgdmFsaWQsIHdlIGNhbiBnZXQgdGhlIHBhcmVudCBkYXRhOlxuICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aE5hbWUoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgcmV0dXJuIHRva2VuID09IG51bGwgfHwgaXNJbnRlZ2VyKCt0b2tlbikgPyBudWxsIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aEluZGV4KGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIGNvbnN0IGluZGV4ID0gdG9rZW4gPT0gbnVsbCA/IG51bGwgOiArdG9rZW5cbiAgcmV0dXJuIGlzSW50ZWdlcihpbmRleCkgPyBpbmRleCA6IG51bGxcbn1cblxubGV0IHRlbXBvcmFyeUlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBUZW1wb3JhcnkgaWRzIGFyZSBtYXJrZWQgd2l0aCBhICdAJyBhdCB0aGUgYmVnaW5uaW5nLlxuICBkYXRhW2lkS2V5XSA9IGBAJHsrK3RlbXBvcmFyeUlkfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcG9yYXJ5SWQoaWQpIHtcbiAgcmV0dXJuIC9eQC8udGVzdChpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYW4gb2JqZWN0IHRoYXQgaG9sZHMgbm90aGluZyBtb3JlIHRoYW4gYW4gaWQuXG4gIHJldHVybiBkYXRhPy5baWRLZXldICE9IG51bGwgJiYgT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09PSAxXG59XG4iLCJpbXBvcnQgeyB0b1JhdyB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLFxuICBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsXG4gIGdldFBhcmVudEl0ZW0sXG4gIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsXG4gIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuY29uc3QgeyBoYXNPd25Qcm9wZXJ0eSB9ID0gT2JqZWN0LnByb3RvdHlwZVxuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQodG9SYXcoY29udGV4dCkpXG4gIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV1cbiAgLy8gSWYgYG9iamVjdGAgZXhwbGljaXRseSBzZXRzIHRoZSBrZXkgdG8gYHVuZGVmaW5lZGAsIHJldHVybiBpdC5cbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICAgID8gZGVmYXVsdFZhbHVlKClcbiAgICAgIDogZGVmYXVsdFZhbHVlXG59XG5cbmZ1bmN0aW9uIHNldChjb250ZXh0LCBrZXksIHZhbHVlKSB7XG4gIGNvbnRleHRzLmdldCh0b1Jhdyhjb250ZXh0KSlba2V5XSA9IHZhbHVlXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Db250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgLy8gVXNlIHRoZSBwcm92aWRlZCBwYXJhbXMgb2JqZWN0IC8gZnVuY3Rpb24sIG9yIGNyZWF0ZSBhIG5ldyBvbmU6XG4gICAgY29udGV4dCA9IGNvbnRleHRcbiAgICAgID8gaXNGdW5jdGlvbihjb250ZXh0KVxuICAgICAgICA/IGNvbnRleHQoKVxuICAgICAgICA6IHsgLi4uY29udGV4dCB9XG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgLy8gTm8gbmVlZCBmb3IgYHRvUmF3KHRoaXMpYCBoZXJlIGFzIGl0J3MgYWx3YXlzIHJhdyBpbnNpZGUgdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnRleHRzLnNldCh0aGlzLCBvYmplY3QpXG4gIH1cblxuICBzdGF0aWMgZ2V0KGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0IGluc3RhbmNlb2YgRGl0b0NvbnRleHRcbiAgICAgID8gY29udGV4dFxuICAgICAgOiBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCBjb250ZXh0KVxuICB9XG5cbiAgLy8gYG5lc3RlZGAgaXMgYHRydWVgIHdoZW4gdGhlIGRhdGEtcGF0aCBwb2ludHMgYSB2YWx1ZSBpbnNpZGUgYW4gaXRlbSwgYW5kXG4gIC8vIGBmYWxzZWAgd2hlbiBpdCBwb2ludHMgdG8gdGhlIGl0ZW0gaXRzZWxmLlxuICBnZXQgbmVzdGVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25lc3RlZCcsIHRydWUpXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYScsIG51bGwpXG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmFsdWUnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YVBhdGgnLCAnJylcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25hbWUnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhOYW1lKHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGluZGV4KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2luZGV4JywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgaXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLml0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMucGFyZW50SXRlbURhdGFQYXRoKVxuICB9XG5cbiAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHM6XG4gIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gIGdldCBpdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGEnLCAoKSA9PlxuICAgICAgZ2V0SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICApXG4gIH1cblxuICAvLyBOT1RFOiBgcGFyZW50SXRlbWAgaXNuJ3QgdGhlIGNsb3Nlc3QgZGF0YSBwYXJlbnQgdG8gYGl0ZW1gLCBpdCdzIHRoZVxuICAvLyBjbG9zZXN0IHBhcmVudCB0aGF0IGlzbid0IGFuIGFycmF5LCBlLmcuIGZvciByZWxhdGlvbnMgb3IgbmVzdGVkIEpTT04gZGF0YS5cbiAgLy8gVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlIHVzZSBvZlxuICAvLyBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0IHBhcmVudC4gSWZcbiAgLy8gbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsIHNvcnRzIG9mIGRhdGFcbiAgLy8gcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IGl0ZW0gPSAoXG4gICAgICBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKSB8fFxuICAgICAgbnVsbFxuICAgIClcbiAgICByZXR1cm4gaXRlbSAhPT0gdGhpcy5pdGVtID8gaXRlbSA6IG51bGxcbiAgfVxuXG4gIGdldCByb290SXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyb290RGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwcm9jZXNzZWREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBjbGlwYm9hcmRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NsaXBib2FyZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndXNlcicsIG51bGwpXG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2FwaScsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld3MoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld3MnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGl0ZW1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpdGVtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgLy8gTk9URTogTGlrZSAnb3B0aW9ucycsIHRoZSBhc3NvY2lhdGVkIGNvbXBvbmVudCBkb2Vzbid0IGFsd2F5cyBleGlzdCwgZS5nLlxuICAvLyBpbiBuZXN0ZWQgZm9ybXMgZHVyaW5nIGBwcm9jZXNzRGF0YSgpYC4gQnV0IGBzY2hlbWFgIGlzIGd1YXJhbnRlZWQgdG9cbiAgLy8gYWx3YXlzIGJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdGVuZXJzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBBc3luYyBvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlIGV2ZW50cyBhZGRlZCAvXG4gICAgLy8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3MgaWYgdGhlIGNvbXBvbmVudFxuICAgIC8vIGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8PSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gKGxpc3RlbmVyc1tldmVudF0gfHw9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnRcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RlbmVyc1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZShldmVudCwgdGFyZ2V0KSB7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUoZXYsIHRhcmdldClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbihldmVudCwgKC4uLmFyZ3MpID0+IHRhcmdldC5lbWl0KGV2ZW50LCAuLi5hcmdzKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNCb29sZWFuLFxuICBpc051bWJlcixcbiAgaXNGdW5jdGlvbixcbiAgaXNEYXRlLFxuICBpc1JlZ0V4cCxcbiAgYXNBcnJheVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ2hlY2tlcnMgPSB7XG4gIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgTnVtYmVyOiBpc051bWJlcixcbiAgU3RyaW5nOiBpc1N0cmluZyxcbiAgRGF0ZTogaXNEYXRlLFxuICBBcnJheTogaXNBcnJheSxcbiAgT2JqZWN0OiBpc09iamVjdCxcbiAgUmVnRXhwOiBpc1JlZ0V4cCxcbiAgRnVuY3Rpb246IGlzRnVuY3Rpb25cbn1cblxuLy8gRGVjbGFyZSB0aGVzZSBzZXBhcmF0ZWx5IGZyb20gdGhlIGB0eXBlQ29udmVydGVyc2Agb2JqZWN0LCB0byBwcmV2ZW50XG4vLyBCYWJlbCBpc3N1ZXMgd2l0aCBgT2JqZWN0YCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgYE9iamVjdGA6XG5jb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiAhIXZhbHVlXG5jb25zdCB0b051bWJlciA9IHZhbHVlID0+ICt2YWx1ZVxuY29uc3QgdG9TdHJpbmcgPSB2YWx1ZSA9PiBTdHJpbmcodmFsdWUpXG5cbmNvbnN0IHRvRGF0ZSA9IHZhbHVlID0+XG4gIGlzRGF0ZSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+XG4gIGlzQXJyYXkodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICAgIDogYXNBcnJheSh2YWx1ZSlcblxuY29uc3QgdG9PYmplY3QgPSB2YWx1ZSA9PlxuICBpc09iamVjdCh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiAvLyBJZiBhIE9iamVjdCBpcyBleHBlY3RlZCBidXQgYSBCb29sZWFuIHByb3ZpZGUsIGNvbnZlcnQgdG8gYW4gZW1wdHlcbiAgICAgIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICAgICAgdmFsdWUgPT09IHRydWVcbiAgICAgID8ge31cbiAgICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+XG4gIGlzUmVnRXhwKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBwaWNrQnkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVzb3VyY2Uoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFJlc291cmNlKHNjaGVtYS5yZXNvdXJjZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlKHJlc291cmNlLCBkZWZhdWx0cyA9IHt9KSB7XG4gIGNvbnN0IHsgcGFyZW50LCAuLi5kZWZzIH0gPSBkZWZhdWx0c1xuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKVxuICAgID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSlcbiAgICAgID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdtZW1iZXInLFxuICAgICAgICAuLi5waWNrQnkoXG4gICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgKHZhbHVlLCBrZXkpID0+IFsnbWV0aG9kJywgJ3BhdGgnLCAncGFyZW50J10uaW5jbHVkZXMoa2V5KVxuICAgICAgICApLFxuICAgICAgICBpZDogYCR7aWR9YFxuICAgICAgfVxuICAgIDogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBhc0FycmF5LFxuICBlcXVhbHMsXG4gIGdldFZhbHVlQXREYXRhUGF0aCxcbiAgbGFiZWxpemUsXG4gIGh5cGhlbmF0ZSxcbiAgZm9ybWF0XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgYXBwU3RhdGUgZnJvbSAnLi4vYXBwU3RhdGUuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRwYXJlbnRDb21wb25lbnQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8ge1xuICAgICAgICAgICRwYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgJHBhcmVudENvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgICAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGUsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRyZWZzLnJvb3RcbiAgICB9LFxuXG4gICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gRGl0b1NjaGVtYSBjYW5cbiAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgIHBhcmVudENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnRDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2NoZW1hQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQ/LnBhcmVudENvbXBvbmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Um91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudD8ucGFyZW50Q29tcG9uZW50LnJvdXRlQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudEZvcm1Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXJlbnRDb21wb25lbnQuZm9ybUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkYXRhIG9mIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHNcbiAgICAvLyB0aGF0IGxvYWRzIGl0cyBvd24gZGF0YSBmcm9tIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlLlxuICAgIHJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YUNvbXBvbmVudD8uZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgY29uc3QgdWlkID0gbmV4dFVpZCsrXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICckdWlkJywge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdWlkXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGFiZWxpemUsXG5cbiAgICAvLyBUaGUgc3RhdGUgb2YgY29tcG9uZW50cyBpcyBvbmx5IGF2YWlsYWJsZSBkdXJpbmcgdGhlIGxpZmUtY3ljbGUgb2YgYVxuICAgIC8vIGNvbXBvbmVudC4gU29tZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIGF2YWlsYWJsZSBsb25nZXIgdGhhbiB0aGF0LCBlLmcuXG4gICAgLy8gYHF1ZXJ5YCAmIGB0b3RhbGAgb24gVHlwZUxpc3QsIHNvIHRoYXQgd2hlbiB0aGUgdXNlciBuYXZpZ2F0ZXMgYmFjayBmcm9tXG4gICAgLy8gZWRpdGluZyBhbiBpdGVtIGluIHRoZSBsaXN0LCB0aGUgc3RhdGUgb2YgdGhlIGxpc3QgaXMgc3RpbGwgdGhlIHNhbWUuXG4gICAgLy8gV2UgY2FuJ3Qgc3RvcmUgdGhpcyBpbiBgZGF0YWAsIGFzIHRoaXMgaXMgYWxyZWFkeSB0aGUgcHVyZSBkYXRhIGZyb20gdGhlXG4gICAgLy8gQVBJIHNlcnZlci4gVGhhdCdzIHdoYXQgdGhlIGBzdG9yZWAgaXMgZm9yOiBNZW1vcnkgdGhhdCdzIGF2YWlsYWJsZSBhc1xuICAgIC8vIGxvbmcgYXMgdGhlIGN1cnJlbnQgZWRpdGluZyBwYXRoIGlzIHN0aWxsIHZhbGlkLiBGb3IgdHlwZSBjb21wb25lbnRzLFxuICAgIC8vIHRoaXMgbWVtb3J5IGlzIHByb3ZpZGVkIGJ5IHRoZSBwYXJlbnQsIHNlZSBSb3V0ZU1peGluIGFuZCBEaXRvUGFuZS5cbiAgICBnZXRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlW2tleV1cbiAgICB9LFxuXG4gICAgc2V0U3RvcmUoa2V5LCB2YWx1ZSkge1xuICAgICAgdGhpcy5zdG9yZVtrZXldID0gdmFsdWVcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmUoa2V5KSB8fCB0aGlzLnNldFN0b3JlKGtleSwgcmVhY3RpdmUoe30pKVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFWYWx1ZShcbiAgICAgIGtleU9yRGF0YVBhdGgsXG4gICAgICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgc2NoZW1hID0gdGhpcy5zY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbiAgICApIHtcbiAgICAgIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gICAgICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgZGF0YS1wYXRocyBpbiBga2V5T3JEYXRhUGF0aGAgY2FuIG9ubHkgYmVcbiAgICAgIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICAgICAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgICAgID8gaXNBcnJheShrZXlPckRhdGFQYXRoKVxuICAgICAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnMgZm9yIGFueSB0eXBlIGV4Y2VwdCBgRnVuY3Rpb25gOlxuICAgICAgICAgIGRlZiA9IGRlZi5jYWxsKHRoaXMpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH1cbiAgICAgIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAgICAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUodGhpcy5jb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gTm93IGZpbmFsbHkgc2VlIGlmIHdlIGNhbiBjb252ZXJ0IHRvIHRoZSBleHBlY3QgdHlwZXMuXG4gICAgICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCAmJiAhaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgICAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSlcbiAgICAgICAgICBpZiAoY29udmVydGVkICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIGdldExhYmVsKHNjaGVtYSwgbmFtZSkge1xuICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2xhYmVsJywgeyB0eXBlOiBTdHJpbmcsIHNjaGVtYSB9KSB8fFxuICAgICAgICAgIGxhYmVsaXplKG5hbWUgfHwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogbGFiZWxpemUobmFtZSkgfHwgJydcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzczogYGRpdG8tYnV0dG9uLSR7dmVyYn1gLFxuICAgICAgICB0aXRsZTogbGFiZWxpemUodmVyYilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVE9ETzogUmVuYW1lICpMaW5rKCkgdG8gKlJvdXRlKCkuXG4gICAgZ2V0UXVlcnlMaW5rKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgaGFzaDogdGhpcy4kcm91dGUuaGFzaFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG91bGRSZW5kZXIoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3VsZFNob3coc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3Zpc2libGUnLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIHNjaGVtYVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2hvdWxkRGlzYWJsZShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZGlzYWJsZWQnLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlUGF0aChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZSlcbiAgICAgIC8vIFJlc291cmNlcyB3aXRob3V0IGEgcGFyZW50IGluaGVyaXQgdGhlIG9uZSBmcm9tIGBkYXRhQ29tcG9uZW50YFxuICAgICAgLy8gYXV0b21hdGljYWxseS5cbiAgICAgIGlmIChyZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvdXJjZS5wYXJlbnQgPSB0aGlzLmRhdGFDb21wb25lbnQ/LnJlc291cmNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hcGkucmVzb3VyY2VzLmFueShnZXRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QoeyBtZXRob2QsIHVybCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBpbnRlcm5hbCB9KSB7XG4gICAgICB1cmwgfHw9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgbWV0aG9kIHx8PSByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlVcmwodXJsKVxuICAgICAgaWYgKGNoZWNrVXNlcikge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZW5zdXJlVXNlcigpXG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpLnJlcXVlc3QoeyBtZXRob2QsIHVybCwgZGF0YSwgcXVlcnkgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHsgY29tcG9uZW50cywgYnV0dG9ucywgZGF0YSwgc2V0dGluZ3MgfSkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdENvbXBvbmVudC5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc2V0dGluZ3NcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlcXVlc3QoeyBjYWNoZSwgLi4ub3B0aW9ucyB9KSB7XG4gICAgICAvLyBBbGxvdyBjYWNoaW5nIG9mIGxvYWRlZCBkYXRhIG9uIHR3byBsZXZlbHM6XG4gICAgICAvLyAtICdnbG9iYWwnOiBjYWNoZSBnbG9iYWxseSwgZm9yIHRoZSBlbnRpcmUgYWRtaW4gc2Vzc2lvblxuICAgICAgLy8gLSAnbG9jYWwnOiBjYWNoZSBsb2NhbGx5IHdpdGhpbiB0aGUgY2xvc2VzdCByb3V0ZSBjb21wb25lbnQgdGhhdCBpc1xuICAgICAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UgYW5kIGxvYWRzIGl0cyBvd24gZGF0YS5cbiAgICAgIGNvbnN0IGNhY2hlUGFyZW50ID0gKFxuICAgICAgICBjYWNoZSAmJlxuICAgICAgICB7XG4gICAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICAgIGxvY2FsOiB0aGlzLmRhdGFDb21wb25lbnRcbiAgICAgICAgfVtjYWNoZV1cbiAgICAgIClcbiAgICAgIGNvbnN0IGxvYWRDYWNoZSA9IGNhY2hlUGFyZW50Py5sb2FkQ2FjaGVcbiAgICAgIC8vIEJ1aWxkIGEgY2FjaGUga2V5IGZyb20gdGhlIGNvbmZpZzpcbiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gKFxuICAgICAgICBsb2FkQ2FjaGUgJiZcbiAgICAgICAgYCR7XG4gICAgICAgICAgb3B0aW9ucy5tZXRob2QgfHwgJ2dldCdcbiAgICAgICAgfSAke1xuICAgICAgICAgIG9wdGlvbnMudXJsXG4gICAgICAgIH0gJHtcbiAgICAgICAgICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBgcXVlcnlgIG9uXG4gICAgICAgICAgLy8gMjAyMi0xMS0wMSwgcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLnF1ZXJ5IHx8IG9wdGlvbnMucGFyYW1zIHx8ICcnKVxuICAgICAgICB9ICR7XG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5kYXRhIHx8ICcnKVxuICAgICAgICB9YFxuICAgICAgKVxuICAgICAgaWYgKGxvYWRDYWNoZSAmJiAoY2FjaGVLZXkgaW4gbG9hZENhY2hlKSkge1xuICAgICAgICByZXR1cm4gbG9hZENhY2hlW2NhY2hlS2V5XVxuICAgICAgfVxuICAgICAgLy8gTk9URTogTm8gYXdhaXQgaGVyZSwgcmVzIGlzIGEgcHJvbWlzZSB0aGF0IHdlIGNhbiBlYXNpbHkgY2FjaGUuXG4gICAgICAvLyBUaGF0J3MgZmluZSBiZWNhdXNlIHByb21pc2VzIGNhbiBiZSByZXNvbHZlZCBvdmVyIGFuZCBvdmVyIGFnYWluLlxuICAgICAgY29uc3QgcmVzID0gdGhpcy5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIENvbnZlcnQgYXhpb3MgZXJyb3JzIHRvIG5vcm1hbCBlcnJvcnNcbiAgICAgICAgICBjb25zdCBkYXRhID0gZXJyb3IucmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICB0aHJvdyBkYXRhXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGRhdGEubWVzc2FnZSksIGRhdGEpXG4gICAgICAgICAgICA6IGVycm9yXG4gICAgICAgIH0pXG4gICAgICBpZiAobG9hZENhY2hlKSB7XG4gICAgICAgIGxvYWRDYWNoZVtjYWNoZUtleV0gPSByZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9LFxuXG4gICAgZm9ybWF0KHZhbHVlLCB7XG4gICAgICBsb2NhbGUgPSB0aGlzLmFwaS5sb2NhbGUsXG4gICAgICBkZWZhdWx0cyA9IHRoaXMuYXBpLmZvcm1hdHMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCB7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlKGxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVyLnB1c2gobG9jYXRpb24pXG4gICAgfSxcblxuICAgIGRvd25sb2FkKG9wdGlvbnMgPSB7fSkge1xuICAgICAgaWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9XG4gICAgICB9XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80OTkxNzA2Ni8xMTYzNzA4XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBhLmhyZWYgPSB0aGlzLmFwaS5nZXRBcGlVcmwob3B0aW9ucylcbiAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLmZpbGVuYW1lID8/IG51bGxcbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSlcbiAgICAgIGEuY2xpY2soKVxuICAgICAgYm9keS5yZW1vdmVDaGlsZChhKVxuICAgIH0sXG5cbiAgICBub3RpZnkob3B0aW9ucykge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQuY2xvc2VOb3RpZmljYXRpb25zKClcbiAgICB9LFxuXG4gICAgc2V0dXBTY2hlbWFGaWVsZHMoKSB7XG4gICAgICB0aGlzLnNldHVwTWV0aG9kcygpXG4gICAgICB0aGlzLnNldHVwQ29tcHV0ZWQoKVxuICAgICAgdGhpcy5zZXR1cEV2ZW50cygpXG4gICAgfSxcblxuICAgIHNldHVwTWV0aG9kcygpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLm1ldGhvZHMgfHwge30pKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHRoaXNba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBtZXRob2QgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBDb21wdXRlZCgpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLmNvbXB1dGVkIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IGlzRnVuY3Rpb24odmFsdWUpXG4gICAgICAgICAgPyB7IGdldDogdmFsdWUgfVxuICAgICAgICAgIDogaXNPYmplY3QodmFsdWUpICYmIGlzRnVuY3Rpb24odmFsdWUuZ2V0KVxuICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChhY2Nlc3Nvcikge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIGFjY2Vzc29yKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBjb21wdXRlZCBwcm9wZXJ0eSBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgd2F0Y2gsIGV2ZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmICh3YXRjaCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGlzRnVuY3Rpb24od2F0Y2gpID8gd2F0Y2guY2FsbCh0aGlzKSA6IHdhdGNoXG4gICAgICAgIGlmIChpc09iamVjdChoYW5kbGVycykpIHtcbiAgICAgICAgICAvLyBJbnN0YWxsIHRoZSB3YXRjaCBoYW5kbGVycyBpbiB0aGUgbmV4dCB0aWNrLCBzbyBhbGwgY29tcG9uZW50cyBhcmVcbiAgICAgICAgICAvLyBpbml0aWFsaXplZCBhbmQgd2UgY2FuIGNoZWNrIGFnYWluc3QgdGhlaXIgbmFtZXMuXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgICAgIC8vIEV4cGFuZCBwcm9wZXJ0eSBuYW1lcyB0byAnZGF0YS5wcm9wZXJ0eSc6XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeU5hbWUoa2V5KVxuICAgICAgICAgICAgICAgID8gYGRhdGEuJHtrZXl9YFxuICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgIHRoaXMuJHdhdGNoKGV4cHIsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkRXZlbnQgPSAoa2V5LCBldmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgdGhpcy5vbihoeXBoZW5hdGUoZXZlbnQpLCBjYWxsYmFjaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGV2ZW50IGRlZmluaXRpb246ICR7a2V5fTogJHtjYWxsYmFja31gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzY2FuIHNjaGVtYSBmb3IgYG9uW0EtWl1gLXN0eWxlIGNhbGxiYWNrcyBhbmQgYWRkIHRoZW1cbiAgICAgIC8vIFRPRE86IERlcHJlY2F0ZSBvbmUgZm9ybWF0IG9yIHRoZSBvdGhlciwgaW4gZmF2b3VyIG9mIG9ubHkgb25lIHdheSBvZlxuICAgICAgLy8gZG9pbmcgdGhpbmdzLiBEZWNpZGUgd2hpY2ggb25lIHRvIHJlbW92ZS5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hKSkge1xuICAgICAgICBpZiAoL15vbltBLVpdLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleS5zbGljZSgyKSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEV2ZW50KGV2ZW50LCB7XG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIHBhcmVudCA9IG51bGxcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IGhhc0xpc3RlbmVycyA9IHRoaXMuaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgY29uc3QgcGFyZW50SGFzTGlzdGVuZXJzID0gcGFyZW50Py5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBpZiAoaGFzTGlzdGVuZXJzIHx8IHBhcmVudEhhc0xpc3RlbmVycykge1xuICAgICAgICAvLyBUaGUgZWZmZWN0cyBvZiBzb21lIGV2ZW50cyBuZWVkIHNvbWUgdGltZSB0byBwcm9wYWdhdGUgdGhyb3VnaCBWdWUuXG4gICAgICAgIC8vIFVzZSAkbmV4dFRpY2soKSB0byBtYWtlIHN1cmUgb3VyIGhhbmRsZXJzIHNlZSB0aGVzZSBjaGFuZ2VzLlxuICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYHByb2Nlc3NlZEl0ZW1gIGlzIG9ubHkgY29ycmVjdCBhZnRlciBjb21wb25lbnRzIHRoYXRcbiAgICAgICAgLy8gYXJlIG5ld2x5IHJlbmRlcmVkIGR1ZSB0byBkYXRhIGNoYW5nZXMgaGF2ZSByZWdpc3RlcmVkIHRoZW1zZWx2ZXMuXG4gICAgICAgIGlmIChbJ2xvYWQnLCAnY2hhbmdlJ10uaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+IChjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KHRoaXMsIGNvbnRleHQpKVxuICAgICAgICBjb25zdCByZXMgPSBoYXNMaXN0ZW5lcnNcbiAgICAgICAgICA/IGF3YWl0IHRoaXMuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIC8vIERvbid0IGJ1YmJsZSB0byBwYXJlbnQgaWYgaGFuZGxlZCBldmVudCByZXR1cm5lZCBgZmFsc2VgXG4gICAgICAgIGlmIChwYXJlbnRIYXNMaXN0ZW5lcnMgJiYgcmVzICE9PSBmYWxzZSkge1xuICAgICAgICAgIHBhcmVudC5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH1cbiAgfVxufVxuXG5sZXQgbmV4dFVpZCA9IDBcbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT5cbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2Bcbn1cbiIsImltcG9ydCB7IGlzRW1haWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZW1haWwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0VtYWlsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgYSB2YWxpZCBlbWFpbCdcbn1cbiIsImltcG9ydCB7IGlzSG9zdG5hbWUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0hvc3RuYW1lKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGhvc3QgbmFtZSdcbn1cbiIsImltcG9ydCB7IGlzRG9tYWluIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRG9tYWluKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGRvbWFpbidcbn1cbiIsImltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpbnRlZ2VyID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNJbnRlZ2VyKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgd2hvbGUgbnVtYmVyJ1xufVxuIiwiZXhwb3J0IGNvbnN0IG1heCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWF4KSA9PiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIG1heCkge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21heH0gb3IgbGVzc2BcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IG1pbiA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWluKSA9PiB2YWx1ZSA+PSBtaW4sXG4gIG1lc3NhZ2UodmFsdWUsIG1pbikge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21pbn0gb3IgbW9yZWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHBhc3N3b3JkID0ge1xuICAvLyBBbGxvdyBhbnkgdmFsdWUuIEZvciBub3cgdGhpcyBpcyBvbmx5IHVzZWQgYXMgYSBtYXJrZXIsIHRvIGFsbG93IHRoZVxuICAvLyByZXF1aXJlZCB2YWxpZGF0aW9uIHRvIGhhbmRsZSB1bmNoYW5nZWQgcGFzc3dvcmRzIHNlcGFyYXRlbHkuXG4gIHZhbGlkYXRlOiAoKSA9PiB0cnVlXG59XG4iLCJleHBvcnQgY29uc3QgcmFuZ2UgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIFttaW4sIG1heF0pID0+IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIFttaW4sIG1heF0pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJlcXVpcmVkID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBzZXR0aW5ncywgeyBwYXNzd29yZCB9KSA9PiAoXG4gICAgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKSB8fFxuICAgIC8vIFBhc3N3b3JkIGZpZWxkcyB1c2UgYHVuZGVmaW5lZGAgYXMgb3Bwb3NlZCB0byBgbnVsbGAgd2hlbiB0aGV5J3JlIHNldFxuICAgIC8vIGJ1dCB1bmNoYW5nZWQsIGFsbG93IHRoaXMgdG8gcGFzcyB0aHJvdWdoOlxuICAgIChwYXNzd29yZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICApLFxuICBtZXNzYWdlOiAnaXMgcmVxdWlyZWQnLFxuICBudWxsaXNoOiB0cnVlXG59XG4iLCJpbXBvcnQgeyBpc1VybCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCB1cmwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc1VybCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSB2YWxpZCBVUkwnXG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIHZhbGlkYXRpb25zIGZyb20gJy4uL3ZhbGlkYXRpb25zL2luZGV4LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWydlcnJvcnMnXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1RvdWNoZWQ6IGZhbHNlLFxuICAgICAgaXNEaXJ0eTogZmFsc2UsXG4gICAgICBpc1ZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZShub3RpZnkgPSB0cnVlKSB7XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAvLyBjb25zb2xlLmxvZygndmFsaWRhdGUnLCB0aGlzLmRhdGFQYXRoLCB2YWx1ZSwgdGhpcy52YWxpZGF0aW9ucylcbiAgICAgIGZvciAoY29uc3QgW3J1bGUsIHNldHRpbmddIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbmFtZXNwYWNlXG4gICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IHZhbGlkYXRpb25zW3J1bGVdXG4gICAgICAgIGlmICh2YWxpZGF0b3IgJiYgKHZhbGlkYXRvci5udWxsaXNoIHx8IHZhbHVlICE9IG51bGwpKSB7XG4gICAgICAgICAgY29uc3QgeyB2YWxpZGF0ZSwgbWVzc2FnZSB9ID0gdmFsaWRhdG9yXG4gICAgICAgICAgaWYgKCF2YWxpZGF0ZSh2YWx1ZSwgc2V0dGluZywgdGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzRnVuY3Rpb24obWVzc2FnZSlcbiAgICAgICAgICAgICAgICA/IG1lc3NhZ2UodmFsdWUsIHNldHRpbmcsIHRoaXMpXG4gICAgICAgICAgICAgICAgOiBtZXNzYWdlXG4gICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IsIHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuaXNWYWxpZCA9IGlzVmFsaWRcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlKGZhbHNlKVxuICAgIH0sXG5cbiAgICBtYXJrVG91Y2hlZCgpIHtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBtYXJrRGlydHkoKSB7XG4gICAgICB0aGlzLmlzRGlydHkgPSB0cnVlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICAvLyBDbGVhciBjdXJyZW50bHkgZGlzcGxheWVkIGVycm9ycyBvbiBuZXcgaW5wdXQuXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgYWRkRXJyb3IoZXJyb3IsIGFkZExhYmVsID0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZXJyb3JzIHx8PSBbXVxuICAgICAgaWYgKGFkZExhYmVsKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5sYWJlbCB8fCB0aGlzLnBsYWNlaG9sZGVyIHx8IHRoaXMubmFtZVxuICAgICAgICBlcnJvciA9IGBUaGUgJHtsYWJlbH0gZmllbGQgJHtlcnJvcn0uYFxuICAgICAgfVxuICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcilcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICAvLyBDb252ZXJ0IGZyb20gQUpWIGVycm9ycyBvYmplY3RzIHRvIGFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzXG4gICAgICB0aGlzLmVycm9ycyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IHsgbWVzc2FnZSB9IG9mIGVycm9ycykge1xuICAgICAgICB0aGlzLmFkZEVycm9yKG1lc3NhZ2UsIHRydWUpXG4gICAgICB9XG4gICAgICBpZiAoZm9jdXMpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBnZXRFcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lcnJvcnMgPyBbLi4udGhpcy5lcnJvcnNdIDogbnVsbFxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gbnVsbFxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmluZyxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYUFjY2Vzc29yKFxuICBrZXlPckRhdGFQYXRoLFxuICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbikge1xuICAvLyBga2V5T3JEYXRhUGF0aGAgY2FuIGJlIGEgc2ltcGxlIHByb3BlcnR5IGtleSxcbiAgLy8gb3IgYSBkYXRhLXBhdGggaW50byBzdWItcHJvcGVydGllcywgYm90aCBpbiBhcnJheSBvciBzdHJpbmcgZm9ybWF0LlxuICBpZiAoaXNTdHJpbmcoa2V5T3JEYXRhUGF0aCkgJiYga2V5T3JEYXRhUGF0aC5pbmNsdWRlcygnLicpKSB7XG4gICAga2V5T3JEYXRhUGF0aCA9IHBhcnNlRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgfVxuICAvLyBVc2UgdGhlIG5vcm1hbGl6ZWQgZGF0YSBwYXRoIGZvciB0aGUgaGFuZGxpbmcgb3ZlcnJpZGVzXG4gIGNvbnN0IG5hbWUgPSBub3JtYWxpemVEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIC8vIE9ubHkgZGV0ZXJtaW5lIHNjaGVtYSB2YWx1ZSBpZiB3ZSBoYXZlIG5vIGdldHRlciwgb3IgdGhlIGdldHRlclxuICAgICAgLy8gd2FudHMgdG8gcmVjZWl2ZSB0aGUgdmFsdWUgYW5kIHByb2Nlc3MgaXQgZnVydGhlcjpcbiAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgIWdldCB8fCBnZXQubGVuZ3RoID4gMFxuICAgICAgICAgID8gLy8gTk9URTogQmVjYXVzZSBgc2NoZW1hYCBvYmplY3RzIGFyZSByZXRyaWV2ZWQgZnJvbSBgbWV0YWAsIHRoZXlcbiAgICAgICAgICAgIC8vIGRvbid0IHNlZW0gdG8gYmUgcmVhY3RpdmUuIFRvIGFsbG93IGNoYW5nZWQgaW4gYHNjaGVtYWAgdmFsdWVzLFxuICAgICAgICAgICAgLy8gYHNldCgpYCBzdG9yZXMgY2hhbmdlZCB2YWx1ZXMgaW4gdGhlIHNlcGFyYXRlIGBvdmVycmlkZXNgIG9iamVjdC5cbiAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVzICYmIG5hbWUgaW4gdGhpcy5vdmVycmlkZXNcbiAgICAgICAgICAgID8gdGhpcy5vdmVycmlkZXNbbmFtZV1cbiAgICAgICAgICAgIDogdGhpcy5nZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7XG4gICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBkZWYsXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHNldCkge1xuICAgICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzIHx8PSB7fVxuICAgICAgICB0aGlzLm92ZXJyaWRlc1tuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdG9yZUFjY2Vzc29yKG5hbWUsIHsgZGVmYXVsdDogZGVmLCBnZXQsIHNldCB9ID0ge30pIHtcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9uczpcbiAgICAgICAgdmFsdWUgPSBpc0Z1bmN0aW9uKGRlZikgPyBkZWYuY2FsbCh0aGlzKSA6IGRlZlxuICAgICAgICAvLyBUcmlnZ2VyIHNldHRlciBieSBzZXR0aW5nIHZhbHVlIGFuZCBhY2Nlc3NvciB0byBkZWZhdWx0OlxuICAgICAgICB0aGlzW25hbWVdID0gdmFsdWVcbiAgICAgICAgLy8gTm93IGFjY2VzcyBzdG9yZSBhZ2FpbiwgZm9yIHJlYWN0aXZpdHkgdHJhY2tpbmdcbiAgICAgICAgdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIGdldHRlciB0byBmdXJ0aGVyIGNoYW5nZSBvciBwcm9jZXNzIHRoZSB2YWx1ZVxuICAgICAgLy8gcmV0cmlldmVkIGZyb20gdGhlIHN0b3JlOlxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIHNldHRlciB0byByZXR1cm4gYSBuZXcgdmFsdWUgdG8gc2V0LCBvciBkbyB0aGVcbiAgICAgIC8vIHNldHRpbmcgaXRzZWxmLCBhbmQgdGhlbiByZXR1cm4gYHVuZGVmaW5lZGA6XG4gICAgICBpZiAoIXNldCB8fCAodmFsdWUgPSBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdG9yZShuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBWYWxpZGF0aW9uTWl4aW4gZnJvbSAnLi9WYWxpZGF0aW9uTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgY29tcHV0ZVZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbSwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSwgY2FtZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0aW9uTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBOT1RFOiBXaGlsZSBgZGF0YVBhdGhgIHBvaW50cyB0byB0aGUgYWN0dWFsIGB2YWx1ZWAsIGBkYXRhYCByZXByZXNlbnRzXG4gICAgLy8gdGhlIGBpdGVtYCBpbiB3aGljaCB0aGUgYHZhbHVlYCBpcyBjb250YWluZWQsIHVuZGVyIHRoZSBrZXkgYG5hbWVgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VkVmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGNoYW5nZWRWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShcbiAgICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgeyBjb21wb25lbnQ6IHRoaXMgfVxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHsgZm9ybWF0IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICAvLyBgc2NoZW1hLmZvcm1hdGAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgcmV0dXJuIGZvcm1hdFxuICAgICAgICAgID8gZm9ybWF0LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgcGFyc2UgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEucGFyc2VgIGlzIG9ubHkgZXZlciBjYWxsZWQgaW4gdGhlIGxpZmUtY3ljbGVcbiAgICAgICAgLy8gb2YgdGhlIGNvbXBvbmVudCBhbmQgdGh1cyBpdCdzIG9rIHRvIGJpbmQgaXQgdG8gYHRoaXNgXG4gICAgICAgIHRoaXMucGFyc2VkVmFsdWUgPSBwYXJzZVxuICAgICAgICAgID8gcGFyc2UuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgdGhpcy5kYXRhW3RoaXMubmFtZV0gPSB0aGlzLnBhcnNlZFZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgZGF0YSB0aHJvdWdoIHRoZSBzY2hlbWFDb21wb25lbnQsIGJ1dFxuICAgICAgLy8gdGhhdCdzIG5vdCBuZWNlc3NhcmlseSB0aGUgaXRlbSByZXByZXNlbnRlZCBieSB0aGlzIGNvbXBvbmVudC5cbiAgICAgIC8vIFNvbHV0aW9uOiBGaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgcHJvY2Vzc2VkIHN1Yi1pdGVtIGZyb20gdGhlcmU6XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGdldEl0ZW0oXG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5wcm9jZXNzZWREYXRhLFxuICAgICAgICAvLyBHZXQgdGhlIGRhdGFQYXRoIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWFDb21wb25lbnQncyBkYXRhOlxuICAgICAgICB0aGlzLmRhdGFQYXRoLnNsaWNlKHNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aC5sZW5ndGgpLFxuICAgICAgICB0aGlzLm5lc3RlZFxuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50RGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGxhYmVsOiBnZXRTY2hlbWFBY2Nlc3NvcignbGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcobGFiZWwpXG4gICAgICAgICAgPyBsYWJlbFxuICAgICAgICAgIDogbGFiZWwgIT09IGZhbHNlICYmIHRoaXMuJG9wdGlvbnMuZ2VuZXJhdGVMYWJlbFxuICAgICAgICAgICAgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXVxuICAgIH0pLFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZz9cbiAgICBleGNsdWRlOiBnZXRTY2hlbWFBY2Nlc3NvcignZXhjbHVkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVxdWlyZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXF1aXJlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBhIHN1Yi1jbGFzcyBjb21wb25lbnQgdXNlZCBmb3IgYWxsIGlucHV0IGNvbXBvbmVudHM/XG4gICAgcmVhZG9ubHk6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWFkb25seScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgYXV0b2ZvY3VzOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2ZvY3VzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUbyBiZSB1c2VkIGZvciBzZWxlY3RzIGFuZCBpbnB1dHMgb25seT9cbiAgICBjbGVhcmFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjbGVhcmFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncGxhY2Vob2xkZXInLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF1dG9jb21wbGV0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9jb21wbGV0ZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgZXZlbnRzKCkge1xuICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5nZXRFdmVudHMoKVxuICAgICAgLy8gUmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBhbGwgcHJvdmlkZXMgbm9uLXJlY29nbml6ZWQgZXZlbnRzLFxuICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgIC8vIFRPRE86IE1vdmUgdG8gdnVlMy1zdHlsZSBgb25bQS1aXWAgZXZlbnQgaGFuZGxlcnMgbmFtaW5nIHRoYXQgYXJlbid0XG4gICAgICAvLyBuYW1lc3BhY2VkIGluIGBzY2hlbWEuZXZlbnRzYCBvbmNlIHRoZSB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5ldmVudHMgfHwge30pKSB7XG4gICAgICAgIGV2ZW50c1tgb24ke2NhbWVsaXplKGV2ZW50LCB0cnVlKX1gXSA/Pz0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW1pdEV2ZW50KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnRzXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgLi4udGhpcy5ldmVudHMsXG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChuYXRpdmVGaWVsZCkge1xuICAgICAgICBhdHRyaWJ1dGVzLm5hbWUgPSB0aGlzLm5hbWVcbiAgICAgICAgaWYgKHRoaXMubGFiZWwpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnRpdGxlID0gdGhpcy5sYWJlbFxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZXMucmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5XG4gICAgICAgIGF0dHJpYnV0ZXMuYXV0b2ZvY3VzID0gdGhpcy5hdXRvZm9jdXNcbiAgICAgICAgaWYgKHRleHRGaWVsZCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyXG4gICAgICAgICAgYXR0cmlidXRlcy5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIHZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7IC4uLnRoaXMuZ2V0VmFsaWRhdGlvbnMoKSB9XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBkZWZhdWx0IHJ1bGVzIGFuZCBhZGQgYW55IG5ldyBvbmVzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEucnVsZXMgfHwge30pKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHZhbGlkYXRpb25zW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uc1trZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfSxcblxuICAgIHNob3dDbGVhckJ1dHRvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLnZhbHVlICE9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0RXZlbnRzKCkge1xuICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH0gPSB0aGlzXG4gICAgICByZXR1cm4geyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBbZWxlbWVudF0gPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZCwgYGZvY3VzKClgIHdpbGwgbGlrZWx5IG5vdCBoYXZlIHRoZVxuICAgICAgICAgIC8vIGRlc2lyZWQgZWZmZWN0LiBVc2UgYHNjcm9sbEludG9WaWV3KClgIGlmIGF2YWlsYWJsZTpcbiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgOyhlbGVtZW50LiRlbCB8fCBlbGVtZW50KS5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgLy8gQWxzbyBmb2N1cyB0aGlzIGNvbXBvbmVudCdzIHNjaGVtYSBhbmQgcGFuZWwgaW4gY2FzZSBpdCdzIGEgdGFiLlxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuZm9jdXMoKVxuICAgICAgdGhpcy50YWJDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgY2xlYXIoKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgfSxcblxuICAgIG9uRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlXG4gICAgICB0aGlzLm1hcmtUb3VjaGVkKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLnZhbGlkYXRlKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdibHVyJylcbiAgICB9LFxuXG4gICAgb25JbnB1dCgpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdvbklucHV0KCknLCB0aGlzLm5hbWUpXG4gICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5wdXQnKVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5wYXJzZWRWYWx1ZSA6IHRoaXMudmFsdWVcblxuICAgICAgaWYgKHRoaXMuJG9wdGlvbnMubmF0aXZlRmllbGQpIHtcbiAgICAgICAgLy8gRm9yIHNvbWUgb2RkIHJlYXNvbiwgdGhlIG5hdGl2ZSBjaGFuZ2UgZXZlbnQgbm93IHNvbWV0aW1lcyBmaXJlc1xuICAgICAgICAvLyB0d2ljZSBvbiBWdWUzLiBGaWx0ZXIgb3V0IHNlY29uZCBjYWxsLlxuICAgICAgICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSB3aHkgdGhpcyBoYXBwZW5zLCBhbmQgaWYgaXQncyBhIGJ1ZyBpbiBWdWUzLlxuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuY2hhbmdlZFZhbHVlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ29uQ2hhbmdlKCkgZG91YmxlJywgdGhpcy5uYW1lKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlZFZhbHVlID0gdmFsdWVcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coJ29uQ2hhbmdlKCknLCB0aGlzLm5hbWUsIHZhbHVlKVxuICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScsIHtcbiAgICAgICAgLy8gUHJldmVudCBlbmRsZXNzIHBhcnNlIHJlY3Vyc2lvbjpcbiAgICAgICAgY29udGV4dDogeyB2YWx1ZSB9LFxuICAgICAgICAvLyBQYXNzIGBzY2hlbWFDb21wb25lbnRgIGFzIHBhcmVudCwgc28gY2hhbmdlIGV2ZW50cyBjYW4gcHJvcGFnYXRlIHVwLlxuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiY29uc3QgdWlkTWFwID0gbmV3IFdlYWtNYXAoKVxuXG4vLyBHZW5lcmF0ZWQgYW5kIHJlbWVtYmVycyB1bmlxdWUgaWRzIHBlciBwYXNzZWQgb2JqZWN0IHVzaW5nIGEgd2VhayBtYXAuXG5sZXQgdWlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIGdldFVpZChvYmplY3QsIGl0ZW1JZCkge1xuICBsZXQgaWQgPSB1aWRNYXAuZ2V0KG9iamVjdClcbiAgaWYgKCFpZCkge1xuICAgIGlkID0gaXRlbUlkIHx8IGBAJHsrK3VpZH1gXG4gICAgdWlkTWFwLnNldChvYmplY3QsIGlkKVxuICB9XG4gIHJldHVybiBpZFxufVxuIiwiaW1wb3J0IHsgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzSW50ZWdlcixcbiAgYXNBcnJheSxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnXG5cbi8vIFNjaGVtYUdyYXBoIGlzIGEgY2xhc3MgdG8gY29sbGVjdCBzY2hlbWEgZ3JhcGggbWV0YSBpbmZvcm1hdGlvbiBpbiBvcmRlciB0b1xuLy8gcHJvY2VzcyBzb3VyY2VzIGFuZCByZWxhdGlvbnMgZm9yIHRoZSBnaXZlbiB0YXJnZXRzICdzZXJ2ZXInIGFuZCAnY2xpcGJvYXJkJyxcbi8vIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuLy9cbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXJ2ZXIgICAgfCBjbGlwYm9hcmQgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IGZhbHNlICAgICAgICAgICB8IGtlZXAgaWQgICB8IGtlZXAgaWQgICB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSwgdGVtcG9yYXJ5IHwgcmVmLCAjcmVmIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSwgdGVtcG9yYXJ5ICAgfCByZWYsICNpZCAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSAgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjaWQgIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUsIHRlbXBvcmFyeSAgICB8IHJlZiwgI2lkICB8IHJlZiwgI2lkICB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuXG5leHBvcnQgY2xhc3MgU2NoZW1hR3JhcGgge1xuICBncmFwaCA9IHt9XG4gIHJlZmVyZW5jZXMgPSB7fVxuXG4gIHNldChkYXRhUGF0aCwgc2V0dGluZ3MsIGRlZmF1bHRzKSB7XG4gICAgZGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgIGxldCBzdWJHcmFwaCA9IHRoaXMuZ3JhcGhcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGF0YVBhdGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlzSW50ZWdlcigrcGFydCkgPyAnKicgOiBwYXJ0XG4gICAgICBzdWJHcmFwaCA9IHN1YkdyYXBoW2tleV0gPz89IHt9XG4gICAgfVxuICAgIHN1YkdyYXBoLiRzZXR0aW5ncyA9IHtcbiAgICAgIC4uLmRlZmF1bHRzLCAvLyBTZWUgYGFkZFNvdXJjZShkYXRhUGF0aClgXG4gICAgICAuLi5zdWJHcmFwaC4kc2V0dGluZ3MsXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgLy8gT25seSBzZXQgYHJlbGF0ZWQ6IGZhbHNlYCB0aHJvdWdoIHRoZSBkZWZhdWx0cywgYXMgYHNldFNvdXJjZVJlbGF0ZWQoKWBcbiAgICAvLyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBgYWRkU291cmNlKClgLCBkZXBlbmRpbmcgb24gdGhlIGdyYXBoIHN0cnVjdHVyZS5cbiAgICB0aGlzLnNldChkYXRhUGF0aCwgeyB0eXBlOiAnc291cmNlJywgc2NoZW1hIH0sIHsgcmVsYXRlZDogZmFsc2UgfSlcbiAgfVxuXG4gIHNldFNvdXJjZVJlbGF0ZWQoZGF0YVBhdGgpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgcmVsYXRlZDogdHJ1ZSxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgc2NoZW1hLFxuICAgICAgaW50ZXJuYWw6ICEhcmVsYXRlZERhdGFQYXRoLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChyZWxhdGVkRGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aCkge1xuICAgIHJldHVybiBkYXRhUGF0aFxuICAgICAgPyAodGhpcy5yZWZlcmVuY2VzW2RhdGFQYXRoXSA/Pz0gbmFub2lkKDYpKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBmbGF0dGVuKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSBncmFwaCA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGZvciAoY29uc3QgW2tleSwgeyAkc2V0dGluZ3MsIC4uLnN1YkdyYXBoIH1dIG9mIE9iamVjdC5lbnRyaWVzKGdyYXBoKSkge1xuICAgICAgICBpZiAoJHNldHRpbmdzKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksICRzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbc3ViS2V5LCBzZXR0aW5nc10gb2YgZmxhdHRlbihzdWJHcmFwaCkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2Ake2tleX0vJHtzdWJLZXl9YCwgc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllc1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKHRoaXMuZ3JhcGgpXG4gIH1cblxuICBwcm9jZXNzKHNvdXJjZVNjaGVtYSwgZGF0YSwgeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGNsaXBib2FyZCA9IHRhcmdldCA9PT0gJ2NsaXBib2FyZCdcbiAgICBpZiAoY2xpcGJvYXJkKSB7XG4gICAgICBkZWxldGUgZGF0YVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIHNldHRpbmdzXSBvZiB0aGlzLmZsYXR0ZW4oKSkge1xuICAgICAgY29uc3QgeyB0eXBlLCBzY2hlbWEsIGludGVybmFsLCByZWxhdGVkLCByZWZlcmVuY2UgfSA9IHNldHRpbmdzXG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlID09PSAnc291cmNlJ1xuICAgICAgY29uc3QgcmVsYXRpb24gPSB0eXBlID09PSAncmVsYXRpb24nXG4gICAgICBpZiAoc291cmNlIHx8IHJlbGF0aW9uICYmIGludGVybmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlQXREYXRhUGF0aChkYXRhLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgY29uc3QgcmVtb3ZlSWQgPSBjbGlwYm9hcmQgJiYgc291cmNlICYmICFyZWxhdGVkXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gKFxuICAgICAgICAgIGNsaXBib2FyZCAmJiAoXG4gICAgICAgICAgICByZWxhdGlvbiAmJiBpbnRlcm5hbCB8fFxuICAgICAgICAgICAgc291cmNlICYmIHJlbGF0ZWRcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhc0FycmF5KHZhbHVlcykuZmxhdCgpKSB7XG4gICAgICAgICAgY29uc3QgaWRLZXkgPSAoXG4gICAgICAgICAgICBzb3VyY2UgJiYgc2NoZW1hLmlkS2V5IHx8XG4gICAgICAgICAgICByZWxhdGlvbiAmJiBzY2hlbWEucmVsYXRlQnkgfHxcbiAgICAgICAgICAgICdpZCdcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWU/LltpZEtleV1cbiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZUlkKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VJZCB8fCBpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICBpZiAoaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgICBpZCA9IGlkLnNsaWNlKDEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmVmS2V5ID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyAvLyBDbGlwYm9hcmQganVzdCBuZWVkcyB0ZW1wb3JhcnkgaWRzIHVuZGVyIHRoZSBhY3R1YWwgYGlkS2V5YFxuICAgICAgICAgICAgICAgICAgaWRLZXlcbiAgICAgICAgICAgICAgICA6IC8vIFNlcnZlciB3YW50cyBPYmplY3Rpb24tc3R5bGUgJyNpZCcgLyAnI3JlZicgcGFpcnMuXG4gICAgICAgICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgICAgID8gJyNpZCdcbiAgICAgICAgICAgICAgICAgIDogJyNyZWYnXG4gICAgICAgICAgICAgIGNvbnN0IHJldlZhbHVlID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyBgQCR7aWR9YFxuICAgICAgICAgICAgICAgIDogLy8gS2VlcCB0aGUgaWRzIHVuaXF1ZSBpbiByZWZlcmVuY2UgZ3JvdXBzLCBzaW5jZSB0aGV5XG4gICAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgYWNyb3NzIHRoZSBmdWxsIGdyYXBoLlxuICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICA/IGAke3JlZmVyZW5jZX0tJHtpZH1gXG4gICAgICAgICAgICAgICAgICA6IGlkIC8vIEEgdGVtcG9yYXJ5IGlkIHdpdGhvdXQgYSByZWxhdGVkLCBqdXN0IHByZXNlcnZlIGl0LlxuICAgICAgICAgICAgICB2YWx1ZVtyZWZLZXldID0gcmV2VmFsdWVcbiAgICAgICAgICAgICAgaWYgKHJlZktleSAhPT0gaWRLZXkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VWlkIH0gZnJvbSAnLi91aWQuanMnXG5pbXBvcnQgeyBTY2hlbWFHcmFwaCB9IGZyb20gJy4vU2NoZW1hR3JhcGguanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNBcnJheSxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBpc01vZHVsZSxcbiAgY2xvbmUsXG4gIG1lcmdlLFxuICBjYW1lbGl6ZSxcbiAgbWFwQ29uY3VycmVudGx5XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBtYXJrUmF3IH0gZnJvbSAndnVlJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWFzLCBjYWxsYmFjaykge1xuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSwgMClcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hLmNvbXBvbmVudHMgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSwgMSlcbiAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBzY2hlbWFcbiAgICA/IGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKFtzY2hlbWEsIC4uLmdldFRhYlNjaGVtYXMoc2NoZW1hKV0sIGNhbGxiYWNrKVxuICAgIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IGNvbXBvbmVudCA6IHVuZGVmaW5lZClcbiAgICApIHx8IG51bGxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyB0cnVlIDogdW5kZWZpbmVkKVxuICAgICkgPT09IHRydWVcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gdW5kZWZpbmVkIDogZmFsc2UpXG4gICAgKSAhPT0gZmFsc2VcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY2hlbWEoc2NoZW1hKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWEpICYmIGlzU3RyaW5nKHNjaGVtYS50eXBlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGb3JtKHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ2Zvcm0nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpZXcoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAndmlldydcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFiKHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ3RhYidcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFuZWwoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAncGFuZWwnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLm5hbWUgfHwgc2NoZW1hLmxhYmVsIHx8IHNjaGVtYS50eXBlXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlID0gZmFsc2UpIHtcbiAgaWYgKGlzRnVuY3Rpb24oc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpXG4gIH1cbiAgaWYgKGlzUHJvbWlzZShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gYXdhaXQgc2NoZW1hXG4gIH1cbiAgaWYgKGlzTW9kdWxlKHNjaGVtYSkpIHtcbiAgICAvLyBDb3B5IHRvIGNvbnZlcnQgZnJvbSBtb2R1bGUgdG8gb2JqZWN0OlxuICAgIHNjaGVtYSA9IHsgLi4uc2NoZW1hIH1cbiAgICAvLyBVbndyYXAgZGVmYXVsdCBvciBuYW1lZCBzY2hlbWFcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmICh1bndyYXBNb2R1bGUgfHwgc2NoZW1hLmRlZmF1bHQpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSB7XG4gIC8vIFJlc29sdmVzIGFzeW5jIHNjaGVtYSBjb21wb25lbnRzIGFuZCBhZGRzIERpdG9NaXhpbiBhbmQgVHlwZU1peGluIHRvIHRoZW0uXG4gIGxldCB7IGNvbXBvbmVudCB9ID0gc2NoZW1hXG4gIGlmIChjb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBhd2FpdCByZXNvbHZlU2NoZW1hKGNvbXBvbmVudCwgdHJ1ZSlcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAvLyBQcmV2ZW50IHdhcm5pbmc6IFwiVnVlIHJlY2VpdmVkIGEgQ29tcG9uZW50IHdoaWNoIHdhcyBtYWRlIGEgcmVhY3RpdmVcbiAgICAgIC8vIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgYW5kIHNob3VsZFxuICAgICAgLy8gYmUgYXZvaWRlZCBieSBtYXJraW5nIHRoZSBjb21wb25lbnQgd2l0aCBgbWFya1Jhd2BcIjpcbiAgICAgIHNjaGVtYS5jb21wb25lbnQgPSBtYXJrUmF3KHtcbiAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICBtaXhpbnM6IFtEaXRvTWl4aW4sIFR5cGVNaXhpbiwgLi4uKGNvbXBvbmVudC5taXhpbnMgfHwgW10pXVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYXMpIHtcbiAgLy8gYHNjaGVtYXNgIGFyZSBvZiB0aGUgc2FtZSBwb3NzaWJsZSBmb3JtcyBhcyBwYXNzZWQgdG8gYGdldE5hbWVkU2NoZW1hcygpYFxuICBhd2FpdCBtYXBDb25jdXJyZW50bHkoT2JqZWN0LnZhbHVlcyhzY2hlbWFzIHx8IHt9KSwgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwXG4pIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBjb25zdCBwcm9jZXNzID0gKGNvbXBvbmVudCwgbmFtZSwgcmVsYXRpdmVMZXZlbCkgPT4ge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICAgICAgICBhcGksXG4gICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCArIHJlbGF0aXZlTGV2ZWxcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIHByb2Nlc3MpXG4gIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLCBwcm9jZXNzKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudChcbiAgYXBpLFxuICBzY2hlbWEsXG4gIG5hbWUsXG4gIHJvdXRlcyA9IG51bGwsXG4gIGxldmVsID0gMFxuKSB7XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcblxuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLy8gQWxzbyBwcm9jZXNzIG5lc3RlZCBwYW5lbCBzY2hlbWFzLlxuICAgIG1hcENvbmN1cnJlbnRseShcbiAgICAgIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBwYW5lbCwgcm91dGVzLCBsZXZlbClcbiAgICApLFxuICAgIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NTY2hlbWE/LihcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbFxuICAgIClcbiAgXSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUpIHtcbiAgaWYgKCFpc1ZpZXcoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2aWV3IHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICBhd2FpdCBwcm9jZXNzTmVzdGVkU2NoZW1hcyhhcGksIHNjaGVtYSlcbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4sIDApXG4gIHJldHVybiB7XG4gICAgcGF0aDogYC8ke3NjaGVtYS5wYXRofWAsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIGxldCBkZWZhdWx0cyA9IGFwaS5kZWZhdWx0c1tzY2hlbWEudHlwZV1cbiAgaWYgKGRlZmF1bHRzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdHMpKSB7XG4gICAgICBkZWZhdWx0cyA9IGRlZmF1bHRzKHNjaGVtYSlcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGRlZmF1bHRzKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdHMpKSB7XG4gICAgICAgIGlmIChzY2hlbWFba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjaGVtYVtrZXldID0gbWVyZ2UodmFsdWUsIHNjaGVtYVtrZXldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpIHtcbiAgLy8gUHJvY2VzcyBkZWZhdWx0cyBmb3IgbmVzdGVkIHNjaGVtYXMuIE5vdGUgdGhhdCB0aGlzIGlzIGFsc28gZG9uZSB3aGVuXG4gIC8vIGNhbGxpbmcgYHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKClgLCBidXQgdGhhdCBmdW5jdGlvbiBpcyBhc3luYywgYW5kIHdlXG4gIC8vIG5lZWQgYSBzeW5jIHZlcnNpb24gdGhhdCBvbmx5IGhhbmRsZXMgdGhlIGRlZmF1bHRzIGZvciBmaWx0ZXJzLCBzZWVcbiAgLy8gYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjb21wb25lbnQgPT4ge1xuICAgIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIGNvbXBvbmVudClcbiAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1TY2hlbWFzKGNvbXBvbmVudClcbiAgICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICAgIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyhhcGksIGZvcm0pXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW4uXG4gIHNjaGVtYS5uYW1lID0gbmFtZVxuICBzY2hlbWEucGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGgobmFtZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpIHtcbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICBpZiAoZm9ybXMpIHtcbiAgICBmb3JtcyA9IHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCBmb3JtID0+XG4gICAgICBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gICAgKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gIH0gZWxzZSBpZiAoY29tcG9uZW50cykge1xuICAgIC8vIE5PVEU6IFByb2Nlc3NpbmcgZm9ybXMgaW4gY29tcHV0ZWQgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSBpdFxuICAgIC8vIG9ubHkgY2FuIGJlIGNvbXB1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggYWN0dWFsIGRhdGEuXG4gICAgaWYgKGlzT2JqZWN0KGNvbXBvbmVudHMpKSB7XG4gICAgICBmb3JtID0geyBjb21wb25lbnRzIH1cbiAgICB9XG4gIH1cblxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH0gLy8gT25seSB1c2VkIGZvciBwcm9jZXNzIGxvb3AgYmVsb3cuXG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBmb3JtLCBjaGlsZHJlbiwgbGV2ZWwpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRm9ybShhcGksIHNjaGVtYSkge1xuICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdHJ1ZSlcbiAgaWYgKCFpc0Zvcm0oc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JtIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgYXdhaXQgcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NUYWIoYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNUYWIoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0YWIgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzUGFuZWwoYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNQYW5lbChzY2hlbWEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhbmVsIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpIHtcbiAgY29uc3QgeyB0YWJzLCBwYW5lbHMgfSA9IHNjaGVtYVxuICBpZiAodGFicykge1xuICAgIHNjaGVtYS50YWJzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoXG4gICAgICB0YWJzLFxuICAgICAgdGFiID0+IHByb2Nlc3NUYWIoYXBpLCB0YWIpXG4gICAgKVxuICB9XG4gIGlmIChwYW5lbHMpIHtcbiAgICBzY2hlbWEucGFuZWxzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoXG4gICAgICBwYW5lbHMsXG4gICAgICBwYW5lbCA9PiBwcm9jZXNzUGFuZWwoYXBpLCBwYW5lbClcbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgYm90aCBzaW5nbGUgZm9ybSBhbmQgbXVsdGlwbGUgZm9ybXMgbm90YXRpb24sIGFzIHdlbGwgYXMgaW5saW5lZFxuICAvLyBjb21wb25lbnRzLlxuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBpc09iamVjdChzY2hlbWEuZm9ybSB8fCBzY2hlbWEuZm9ybXMgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiAoXG4gICAgaXNTY2hlbWEoc2NoZW1hKSAmJlxuICAgIE9iamVjdC5rZXlzKHNjaGVtYT8uZm9ybXMgfHwge30pLmxlbmd0aCA+IDFcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzVmlldyhzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmNvbXBvbmVudClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdmlldyB9ID0gc2NoZW1hXG4gIGNvbnN0IHZpZXdTY2hlbWEgPSB2aWV3ICYmIGNvbnRleHQudmlld3Nbdmlld11cbiAgcmV0dXJuIHZpZXdTY2hlbWFcbiAgICA/IC8vIE5PVEU6IFZpZXdzIGNhbiBoYXZlIHRhYnMsIGluIHdoaWNoIGNhc2UgdGhlIHZpZXcgY29tcG9uZW50IGlzIG5lc3RlZFxuICAgICAgLy8gaW4gb25lIG9mIHRoZSB0YWJzLCBnbyBmaW5kIGl0LlxuICAgICAgZmluZFNjaGVtYUNvbXBvbmVudCh2aWV3U2NoZW1hLCBoYXNGb3JtU2NoZW1hKSB8fCBudWxsXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICAgID8gY29udGV4dC52aWV3c1tzY2hlbWEudmlld11cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICByZXR1cm4gdmlld1xuICAgID8gaXNTaW5nbGVDb21wb25lbnRWaWV3KHZpZXcpXG4gICAgICA/IGAvJHt2aWV3LnBhdGh9YFxuICAgICAgOiBgLyR7dmlldy5wYXRofS8ke3ZpZXcucGF0aH1gXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIG1vZGlmeUZvcm0pIHtcbiAgY29uc3Qgdmlld1NjaGVtYSA9IGNvbnRleHQgJiYgZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlld1NjaGVtYSkge1xuICAgIHNjaGVtYSA9IHZpZXdTY2hlbWFcbiAgfSBlbHNlIGlmIChzY2hlbWEudmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB2aWV3OiAnJHtzY2hlbWEudmlld30nYClcbiAgfVxuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzLCBjb21wYWN0IH0gPSBzY2hlbWFcbiAgaWYgKCFmb3JtICYmICFmb3Jtcykge1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAvLyBDb252ZXJ0IGlubGluZWQgY29tcG9uZW50cyB0byBmb3Jtcywgc3VwcG9ydGluZyBgY29tcGFjdGAgc2V0dGluZy5cbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMsIGNvbXBhY3QgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBgZm9ybXNgLCBgZm9ybWAgb3IgYGNvbXBvbmVudHNgLCByZXR1cm4gYW5kIGVtcHR5IGBmb3Jtc2Agb2JqZWN0LlxuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZvcm1zKS5tYXAoKFt0eXBlLCBmb3JtXSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBgc2NoZW1hLmNvbXBvbmVudHNgIGNhbGxiYWNrcyB0byBjcmVhdGUgY29tcG9uZW50cyBvbiB0aGUgZmx5LlxuICAgICAgaWYgKGNvbnRleHQgJiYgaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGZvcm0gPSB7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhY3Qoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5jb21wYWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEuaW5saW5lZCB8fCBzY2hlbWEuY29tcG9uZW50cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLm5lc3RlZCB8fCBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0TmVzdGVkID09PSB0cnVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdFBhZGRpbmcoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lm9taXRQYWRkaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGlnbkJvdHRvbShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uYWxpZ25Cb3R0b21cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBkZWZhdWx0IHZhbHVlcyBib3RoIG9uIHNjaGVtYSBhbmQgb24gY29tcG9uZW50IGxldmVsLlxuICAvLyBOT1RFOiBBdCB0aGUgdGltZSBvZiBjcmVhdGlvbiwgY29tcG9uZW50cyBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCwgKGUuZy4gaWZcbiAgLy8gZW50cmllcyBhcmUgY3JlYXRlZCB0aHJvdWdoIG5lc3RlZCBmb3JtcywgdGhlIHBhcmVudCBmb3JtIGlzbid0IG1vdW50ZWQpIHNvXG4gIC8vIHdlIGNhbid0IHVzZSBgZGF0YVBhdGhgIHRvIGdldCB0byBjb21wb25lbnRzLCBhbmQgdGhlIGBkZWZhdWx0VmFsdWVgIGZyb21cbiAgLy8gdGhlcmUuIFRoYXQncyB3aHkgYGRlZmF1bHRWYWx1ZWAgaXMgZGVmaW5lZCBzdGF0aWNhbGx5IGluIHRoZSBjb21wb25lbnRzOlxuICBjb25zdCBkZWZhdWx0VmFsdWUgPSBzY2hlbWEuZGVmYXVsdFxuICBjb25zdCB2YWx1ZSA9XG4gICAgZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgID8gZGVmYXVsdFZhbHVlXG4gICAgICA6IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHRWYWx1ZVxuICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSlcbiAgICA/IHZhbHVlKHNjaGVtYSlcbiAgICA6IGNsb25lKHZhbHVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkge1xuICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcbiAgcmV0dXJuICEhKFxuICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHwgdHlwZU9wdGlvbnM/Lmlnbm9yZU1pc3NpbmdWYWx1ZT8uKHNjaGVtYSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdFZhbHVlcyhzY2hlbWEsIGRhdGEgPSB7fSwgY29tcG9uZW50KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgcm9vdERhdGE6IGRhdGEgfVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lKSA9PiB7XG4gICAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNldHMgdXAgYSBkYXRhIG9iamVjdCB0aGF0IGhhcyBrZXlzIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbFxuICAvLyBmb3JtIGZpZWxkcywgc28gdGhleSBjYW4gYmUgY29ycmVjdGx5IHdhdGNoZWQgZm9yIGNoYW5nZXMuXG4gIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsXG4gICAgZGF0YSxcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBudWxsLFxuICAgIG9wdGlvbnNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50ID0gbnVsbCxcbiAgcm9vdERhdGEgPSBjb21wb25lbnQ/LnJvb3REYXRhXG59ID0ge30pIHtcbiAgY29uc3QgeyBjb21wdXRlIH0gPSBzY2hlbWFcbiAgaWYgKGNvbXB1dGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGUoXG4gICAgICBEaXRvQ29udGV4dC5nZXQoY29tcG9uZW50LCB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgLy8gT3ZlcnJpZGUgdmFsdWUgdG8gcHJldmVudCBlbmRsZXNzIHJlY3Vyc2lvbiB0aHJvdWdoIGNhbGxpbmcgdGhlXG4gICAgICAgIC8vIGdldHRlciBmb3IgYHRoaXMudmFsdWVgIGluIGBEaXRvQ29udGV4dGA6XG4gICAgICAgIHZhbHVlOiBkYXRhW25hbWVdLFxuICAgICAgICBuYW1lLFxuICAgICAgICBkYXRhLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgcm9vdERhdGFcbiAgICAgIH0pXG4gICAgKVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBY2Nlc3MgYGRhdGFbbmFtZV1gIGRpcmVjdGx5IGluc3RlYWQgb2YgYHRoaXMudmFsdWUgPSDigKZgIHRvIHVwZGF0ZSB0aGVcbiAgICAgIC8vIHZhbHVlIHdpdGhvdXQgY2FsbGluZyBwYXJzZSgpOlxuICAgICAgZGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBzdGlsbCBtaXNzaW5nIGFmdGVyIGNvbXB1dGUsIHNldCB0aGUgZGVmYXVsdCBmb3IgaXQ6XG4gIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gIH1cbiAgLy8gTm93IGFjY2VzcyB0aGUgdmFsdWUuIFRoaXMgaXMgaW1wb3J0YW50IGZvciByZWFjdGl2aXR5IGFuZCBuZWVkcyB0b1xuICAvLyBoYXBwZW4gYWZ0ZXIgYWxsIHByaW9yIG1hbmlwdWxhdGlvbiBvZiBgZGF0YVtuYW1lXWAsIHNlZSBhYm92ZTpcbiAgcmV0dXJuIGRhdGFbbmFtZV1cbn1cblxuZnVuY3Rpb24gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgaXRlbSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5zY2hlbWFPbmx5KSB7XG4gICAgY29uc3QgY29weSA9IHt9XG4gICAgY29uc3QgeyBpZEtleSA9ICdpZCcsIG9yZGVyS2V5IH0gPSBzb3VyY2VTY2hlbWFcbiAgICBjb25zdCBpZCA9IGl0ZW1baWRLZXldXG4gICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvcHlbaWRLZXldID0gaWRcbiAgICB9XG4gICAgLy8gQ29weSBvdmVyIHR5cGUgaW4gY2FzZSB0aGVyZSBhcmUgbXVsdGlwbGUgZm9ybXMgdG8gY2hvb3NlIGZyb20uXG4gICAgaWYgKGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc291cmNlU2NoZW1hKSkge1xuICAgICAgY29weS50eXBlID0gaXRlbS50eXBlXG4gICAgfVxuICAgIGlmIChvcmRlcktleSkge1xuICAgICAgY29weVtvcmRlcktleV0gPSBpdGVtW29yZGVyS2V5XVxuICAgIH1cbiAgICByZXR1cm4gY29weVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRGF0YShzY2hlbWEsIHNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50LFxuICBzY2hlbWFPbmx5LCAvLyB3aGV0aGVyIHRvIG9ubHkgaW5jbHVkZSBkYXRhIGNvdmVyZWQgYnkgdGhlIHNjaGVtYSwgb3IgYWxsIGRhdGFcbiAgdGFyZ2V0XG59ID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCBzY2hlbWFPbmx5LCB0YXJnZXQsIHJvb3REYXRhOiBkYXRhIH1cbiAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGRhdGEsIG9wdGlvbnMpXG4gIGNvbnN0IGdyYXBoID0gbmV3IFNjaGVtYUdyYXBoKClcblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgb3B0aW9ucylcbiAgICAvLyBUaGUgc2NoZW1hIGV4cGVjdHMgdGhlIGB3cmFwUHJpbWl0aXZlc2AgdHJhbnNmb3JtYXRpb25zIHRvIGJlIHByZXNlbnQgb25cbiAgICAvLyB0aGUgZGF0YSB0aGF0IGl0IGlzIGFwcGxpZWQgb24sIHNvIHdhcnAgYmVmb3JlIGFuZCB1bndyYXAgYWZ0ZXIuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBvcmRlcktleSwgaWRLZXkgPSAnaWQnIH0gPSBzY2hlbWFcbiAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChlbnRyeSA9PiAoe1xuICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IGVudHJ5XG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWx3YXlzIHNoYWxsb3ctY2xvbmUgYXJyYXkgdmFsdWVzOlxuICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZV1cbiAgICAgIH1cbiAgICAgIGlmIChvcmRlcktleSAmJiB0YXJnZXQgPT09ICdjbGlwYm9hcmQnKSB7XG4gICAgICAgIC8vIFNvcnQgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSBuYXR1cmFsIHNlcXVlbmNlIGFzIGRlZmluZWQgYnkgdGhlaXIgaWRzLFxuICAgICAgICAvLyBzbyBjb3B5LXBhc3RpbmcgYmV0d2VlbiBzZXJ2ZXJzIChlLmcuIG5lc3RlZCBmb250LWN1dHMgb24gTGluZXRvKVxuICAgICAgICAvLyBuYXR1cmFsbHkgZ2V0cyBtYXBwZWQgdG8gdGhlIHNhbWUgZW50cmllcyBpbiB0aGUgZ3JhcGguXG4gICAgICAgIHZhbHVlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBpZDEgPSBhPy5baWRLZXldXG4gICAgICAgICAgY29uc3QgaWQyID0gYj8uW2lkS2V5XVxuICAgICAgICAgIHJldHVybiBpZDEgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMSlcbiAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMilcbiAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICA6IGlkMSAtIGlkMlxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgZXhjbHVkZSwgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG5cbiAgICAvLyBOT1RFOiBXZSBkb24ndCBjYWNoZSB0aGlzIGNvbnRleHQsIHNpbmNlIGB2YWx1ZWAgaXMgY2hhbmdpbmcuXG4gICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+XG4gICAgICBEaXRvQ29udGV4dC5nZXQoY29tcG9uZW50LCB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YSxcbiAgICAgICAgLy8gUGFzcyB0aGUgYWxyZWFkeSBwcm9jZXNzZWQgZGF0YSB0byBgcHJvY2VzcygpYCwgc28gaXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICAgIHByb2Nlc3NlZERhdGFcbiAgICAgIH0pXG5cbiAgICAvLyBGaXJzdCB1bndyYXAgdGhlIHdyYXBwZWQgcHJpbWl0aXZlcyBhZ2FpbiwgdG8gYnJpbmcgdGhlIGRhdGEgYmFjayBpbnRvXG4gICAgLy8gaXRzIG5hdGl2ZSBmb3JtLiBTZSBgcHJvY2Vzc0JlZm9yZSgpYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSB1c2VyJ3MgYHByb2Nlc3MoKWAgY2FsbGJhY2sgZmlyc3QsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoKSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgICAvLyBTdXBwb3J0IGZ1bmN0aW9ucyBuZXh0IHRvIGJvb2xlYW5zIGZvciBgc2NoZW1hLmV4Y2x1ZGVgOlxuICAgICAgZXhjbHVkZSA9PT0gdHJ1ZSB8fFxuICAgICAgaXNGdW5jdGlvbihleGNsdWRlKSAmJiBleGNsdWRlKGdldENvbnRleHQoKSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzZWREYXRhW25hbWVdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVhY2ggY29tcG9uZW50IHR5cGUgY2FuIHByb3ZpZGUgaXRzIG93biBzdGF0aWMgYHByb2Nlc3NWYWx1ZSgpYCBtZXRob2RcbiAgICAgIC8vIHRvIGNvbnZlcnQgdGhlIGRhdGEgZm9yIHN0b3JhZ2UuXG4gICAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSB0eXBlT3B0aW9ucz8ucHJvY2Vzc1ZhbHVlXG4gICAgICBpZiAocHJvY2Vzc1ZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaClcbiAgICAgIH1cbiAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIGRhdGFQYXRoLFxuICAgIHByb2Nlc3NlZERhdGEsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgb3B0aW9uc1xuICApXG5cbiAgcmV0dXJuIGdyYXBoLnByb2Nlc3Moc291cmNlU2NoZW1hLCBwcm9jZXNzZWREYXRhLCBvcHRpb25zKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURhdGEoXG4gIHNjaGVtYSxcbiAgZGF0YSxcbiAgZGF0YVBhdGgsXG4gIHByb2Nlc3NlZERhdGEsXG4gIHByb2Nlc3NCZWZvcmUsXG4gIHByb2Nlc3NBZnRlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IHByb2Nlc3NDb21wb25lbnRzID0gY29tcG9uZW50cyA9PiB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoZGF0YVBhdGgsIHRva2VuKSA9PlxuICAgICAgZGF0YVBhdGggIT0gbnVsbFxuICAgICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbilcbiAgICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGF0aCA9XG4gICAgICAgICAgICAgIGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICAgICAgPyBnZXREYXRhUGF0aChjb21wb25lbnREYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgICAgICAgOiBjb21wb25lbnREYXRhUGF0aFxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IERpdG9Db250ZXh0LmdldChvcHRpb25zLmNvbXBvbmVudCwge1xuICAgICAgICAgICAgICBzY2hlbWE6IGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjb25zdCBnZXRGb3JtcyA9IChcbiAgICAgICAgICAgICAgZ2V0VHlwZU9wdGlvbnMoY29tcG9uZW50U2NoZW1hKT8uZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nIHx8XG4gICAgICAgICAgICAgIGdldEZvcm1TY2hlbWFzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1zKGNvbXBvbmVudFNjaGVtYSwgY29udGV4dClcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSlcbiAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW0gPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyBjbG9uZUl0ZW0oY29tcG9uZW50U2NoZW1hLCBpdGVtLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZEl0ZW0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJdGVtcyB3aXRob3V0IGZvcm1zIHN0aWxsIGdldCBmdWxseSAoYnV0IHNoYWxsb3dseSkgY2xvbmVkLlxuICAgICAgICAgICAgICAvLyBUT0RPOiBGaW5kIG91dCBvZiB0aGlzIGlzIGFjdHVhbGx5IG5lZWRlZCAvIHVzZWQgYXQgYWxsP1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcm9jZXNzQmVmb3JlPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNvbXBvbmVudERhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhID8gcHJvY2Vzc2VkRGF0YVtuYW1lXSA6IGRhdGFbbmFtZV1cbiAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBoYXNGb3JtU2NoZW1hKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgZGF0YSBvbiBuZXN0ZWQgZm9ybSBpdGVtcy5cbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAvLyBPcHRpbWl6YXRpb246IE5vIG5lZWQgdG8gY29sbGVjdCB2YWx1ZXMgaWYgd2UncmUgbm90IGNsb25pbmchXG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgICAgIDogdmFsdWUuZm9yRWFjaChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc0l0ZW0odmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzc2VkRGF0YSkge1xuICAgICAgICAgICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvY2Vzc0FmdGVyPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNvbXBvbmVudERhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBmb3IgKGNvbnN0IHRhYiBvZiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyh0YWIuY29tcG9uZW50cylcbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuY29tcG9uZW50cylcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWREYXRhIHx8IGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkU2NoZW1hcyhzY2hlbWFzLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0b1NjaGVtYSh2YWx1ZSlcbiAgICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID1cbiAgICAgICAgICAgICAgc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgICAgIDogc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgICAgfSwge30pXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBpc0FycmF5KHNjaGVtYXMpXG4gICAgPyB0b09iamVjdChzY2hlbWFzLCB2YWx1ZSA9PlxuICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG5hbWU6IGNhbWVsaXplKHZhbHVlLCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgIClcbiAgICA6IGlzT2JqZWN0KHNjaGVtYXMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiAoXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKGdldFR5cGUoc2NoZW1hT3JUeXBlKSkgPz9cbiAgICBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cnkoc2NoZW1hLCBkYXRhUGF0aCA9IG51bGwsIHRhYkNvbXBvbmVudCA9IG51bGwpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgIGRhdGFQYXRoICE9IG51bGwgJiYgc2NoZW1hLm5hbWVcbiAgICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbEVudHJpZXMoXG4gIHBhbmVsU2NoZW1hcyxcbiAgZGF0YVBhdGggPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsLFxuICBwYW5lbEVudHJpZXMgPSBbXVxuKSB7XG4gIGlmIChwYW5lbFNjaGVtYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMocGFuZWxTY2hlbWFzKSkge1xuICAgICAgY29uc3QgZW50cnkgPSBnZXRQYW5lbEVudHJ5KFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGRhdGFQYXRoICE9IG51bGwgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwga2V5KSA6IG51bGwsXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHBhbmVsRW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxFbnRyaWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy50YWJzID8gT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy5wYW5lbHMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS5wYW5lbHMpIDogW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFBhbmVsRW50cmllcyhcbiAgYXBpLFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoID0gbnVsbCxcbiAgc2NoZW1hQ29tcG9uZW50ID0gbnVsbCxcbiAgdGFiQ29tcG9uZW50ID0gbnVsbFxuKSB7XG4gIGNvbnN0IHBhbmVsU2NoZW1hID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZ2V0UGFuZWxTY2hlbWE/LihcbiAgICBhcGksXG4gICAgc2NoZW1hLFxuICAgIGRhdGFQYXRoLFxuICAgIHNjaGVtYUNvbXBvbmVudFxuICApXG4gIGNvbnN0IHBhbmVsRW50cmllcyA9IHBhbmVsU2NoZW1hXG4gICAgPyBbZ2V0UGFuZWxFbnRyeShwYW5lbFNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCldXG4gICAgOiBbXVxuICAvLyBBbGxvdyBlYWNoIGNvbXBvbmVudCB0byBwcm92aWRlIGl0cyBvd24gc2V0IG9mIHBhbmVscywgaW5cbiAgLy8gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgb25lIChlLmcuIGdldEZpbHRlcnNQYW5lbCgpLCAkZmlsdGVycyk6XG4gIGdldFBhbmVsRW50cmllcyhzY2hlbWE/LnBhbmVscywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxFbnRyaWVzKVxuICByZXR1cm4gcGFuZWxFbnRyaWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ29iamVjdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ2xpc3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIGNvbnN0IGlkID0gaXRlbVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgcmV0dXJuIGlkICE9IG51bGwgPyBTdHJpbmcoaWQpIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICAvLyBUcnkgdG8gdXNlIHRoZSBpdGVtIGlkIGFzIHRoZSB1aWQsIGZhbGxpbmcgYmFjayBvbiBhdXRvLWdlbmVyYXRlZCBpZHMsIGJ1dFxuICAvLyBlaXRoZXIgd2F5LCBwYXNzIHRocm91Z2ggYGdldFVpZCgpYCBzbyB0aGF0IHRoZSBpZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgLy8gaXRlbSB0aHJvdWdoIGEgd2VhayBtYXAsIGFzIHRoZSBpZHMgY2FuIGJlIGZpbHRlcmVkIG91dCBpbiBgcHJvY2Vzc0RhdGEoKWBcbiAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHVpZHMgYXMga2V5IGFyZSBzdGlsbCB2aXNpYmxlLlxuICByZXR1cm4gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pKVxufVxuIiwiLy8gQSBtaW5pLXJlcGxpY2F0aW9uIG9mIHZ1ZSdzIGludGVybmFsIGByZXNvbHZlTWVyZ2VkT3B0aW9ucygpYCBidXQgb25seVxuLy8gaGFuZGxpbmcgb3VyIG93biBhZGRlZCBvcHRpb25zIHByb3BlcnRpZXMgYW5kIG1lcmdpbmcgdGhlbSBlYXJseSBpbnN0ZWFkXG4vLyBvZiBsYXppbHkuXG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTWVyZ2VkT3B0aW9ucyhvcHRpb25zKSB7XG4gIGNvbnN0IHsgbWl4aW5zIH0gPSBvcHRpb25zXG4gIHJldHVybiBtaXhpbnMgfHwgb3B0aW9ucy5leHRlbmRzXG4gICAgPyBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHsgLi4ub3B0aW9ucyB9LFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgOiBvcHRpb25zXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU9wdGlvbnModG8sIGZyb20pIHtcbiAgaWYgKGZyb20uZXh0ZW5kcykge1xuICAgIG1lcmdlT3B0aW9ucyh0bywgZnJvbS5leHRlbmRzKVxuICB9XG4gIGlmIChmcm9tLm1peGlucykge1xuICAgIGZvciAoY29uc3QgbWl4aW4gb2YgZnJvbS5taXhpbnMpIHtcbiAgICAgIG1lcmdlT3B0aW9ucyh0bywgbWl4aW4pXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIGRpdG9PcHRpb25LZXlzKSB7XG4gICAgaWYgKGtleSBpbiBmcm9tKSB7XG4gICAgICB0b1trZXldID0gZnJvbVtrZXldXG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG5jb25zdCBkaXRvT3B0aW9uS2V5cyA9IFtcbiAgJ2RlZmF1bHRWYWx1ZScsXG4gICdkZWZhdWx0TmVzdGVkJyxcbiAgJ2RlZmF1bHRWaXNpYmxlJyxcbiAgJ2dlbmVyYXRlTGFiZWwnLFxuICAnZXhjbHVkZVZhbHVlJyxcbiAgJ2lnbm9yZU1pc3NpbmdWYWx1ZScsXG4gICdhbGlnbkJvdHRvbScsXG4gICdvbWl0UGFkZGluZycsXG4gICdwcm9jZXNzVmFsdWUnLFxuICAncHJvY2Vzc1NjaGVtYScsXG4gICdnZXRQYW5lbFNjaGVtYScsXG4gICdnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcnLFxuICAvLyBWdWUgMyAvIFZ1ZS1yb3V0ZXIgNCBmb3JnZXRzIHRoZXNlLlxuICAvLyBUT0RPOiBDcmVhdGUgYnVnLXJlcG9ydD9cbiAgJ2JlZm9yZVJvdXRlVXBkYXRlJyxcbiAgJ2JlZm9yZVJvdXRlTGVhdmUnXG5dXG4iLCJpbXBvcnQgRGl0b01peGluIGZyb20gJy4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVNZXJnZWRPcHRpb25zIH0gZnJvbSAnLi91dGlscy9vcHRpb25zLmpzJ1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuICAvLyBNYWtlIHN1cmUgdGhhdCByZWdpc3RlcmVkIGNvbXBvbmVudHMgYXJlIHByZXNlbnQgaW4gYWxsIERpdG9Db21wb25lbnQuXG4gIGNvbXBvbmVudHMsXG5cbiAgY29tcG9uZW50KG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IHJlc29sdmVNZXJnZWRPcHRpb25zKHtcbiAgICAgICAgICBleHRlbmRzOiB0aGlzLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgLi4uZGVmaW5pdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29tcG9uZW50c1tuYW1lXSA9IGRlZmluaXRpb25cbiAgICB9XG4gICAgaWYgKCEobmFtZSBpbiBjb21wb25lbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgXCIke25hbWV9XCIgbm90IHJlZ2lzdGVyZWRgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Vc2VyIHtcbiAgaGFzUm9sZSguLi5yb2xlcykge1xuICAgIGlmICh0aGlzLnJvbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICAgICAgaWYgKHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtYUNvbXBvbmVudHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWFpblNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHNbMF1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBgRGl0b1NjaGVtYS5jcmVhdGVkKCkvdW5tb3VudGVkKClgIG9uIGl0c1xuICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50YCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgeyBlcnJvcnMgfSkgPT5cbiAgICAgICAgICBlcnJvcnMgJiYgcmVzdWx0ID8gcmVzdWx0LmNvbmNhdChlcnJvcnMpIDogZXJyb3JzLFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsb2FkOiBmYWxzZSxcbiAgICAgIC8vIEVhY2ggcm91dGUtY29tcG9uZW50IGRlZmluZXMgYSBzdG9yZSB0aGF0IGdldHMgcGFzc2VkIG9uIHRvIGl0c1xuICAgICAgLy8gY2hpbGQgY29tcG9uZW50cywgc28gdGhleSBjYW4gc3RvcmUgdmFsdWVzIGluIHRoZW0gdGhhdCBsaXZlIGJleW9uZFxuICAgICAgLy8gdGhlaXIgbGlmZS1jeWNsZS4gU2VlOiBEaXRvUGFuZSwgU291cmNlTWl4aW5cbiAgICAgIHN0b3JlOiB7fSxcbiAgICAgIGxvYWRDYWNoZToge30gLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHJvdXRlQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByb3V0ZUxldmVsKCkge1xuICAgICAgbGV0IGxldmVsID0gMFxuICAgICAgbGV0IHJvdXRlQ29tcG9uZW50ID0gdGhpc1xuICAgICAgd2hpbGUgKChyb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50LnBhcmVudENvbXBvbmVudC5yb3V0ZUNvbXBvbmVudCkpIHtcbiAgICAgICAgbGV2ZWwrK1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxldmVsXG4gICAgfSxcblxuICAgIHJvdXRlUmVjb3JkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm1hdGNoZWRbdGhpcy5yb3V0ZUxldmVsXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgaXNWaWV3KCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZD8ubWV0YVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Um91dGVQYXRoKHRoaXMucm91dGVSZWNvcmQucGF0aClcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYigpIHtcbiAgICAgIGNvbnN0IHsgYnJlYWRjcnVtYiB9ID0gdGhpcy5zY2hlbWEgfHwge31cbiAgICAgIHJldHVybiBicmVhZGNydW1iIHx8IGAke3RoaXMuYnJlYWRjcnVtYlByZWZpeH0gJHt0aGlzLmxhYmVsfWBcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH0sXG5cbiAgICBwYXJhbSgpIHtcbiAgICAgIC8vIFdvcmthcm91bmQgZm9yIHZ1ZS1yb3V0ZXIgbm90IGJlaW5nIGFibGUgdG8gbWFwIG11bHRpcGxlIHVybCBwYXJhbWV0ZXJzXG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gbXVsdGlwbGUgY29tcG9uZW50cywgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXJhbXNbdGhpcy5tZXRhPy5wYXJhbV0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGUsIHNlZSBEaXRvRm9ybVxuICAgIGlzTXV0YXRpbmcoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlUm91dGVVcGRhdGUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBiZWZvcmVSb3V0ZUxlYXZlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcz8uYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBLZWVwIGEgc2hhcmVkIHN0YWNrIG9mIHJvb3QgY29tcG9uZW50cyBmb3IgRGl0b1RyYWlsIHRvIHVzZSB0byByZW5kZXJcbiAgICAvLyBsYWJlbHMuIENhbid0IHJlbHkgb24gJHJvdXRlLm1hdGNoZWRbaV0uaW5zdGFuY2VzLmRlZmF1bHQgdW5mb3J0dW5hdGVseSxcbiAgICAvLyBhcyBpbnN0YW5jZXMgYXJlbid0IGltbWVkaWF0ZWx5IHJlYWR5LCBhbmQgaW5zdGFuY2VzIGlzIG5vdCByZWFjdGl2ZS5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5wdXNoKHRoaXMpXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgcm91dGVDb21wb25lbnRzLnNwbGljZShyb3V0ZUNvbXBvbmVudHMuaW5kZXhPZih0aGlzKSwgMSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpIHtcbiAgICAgIGxldCBvayA9IHRydWVcbiAgICAgIGNvbnN0IGlzQ2xvc2luZyA9IChcbiAgICAgICAgLy8gT25seSBoYW5kbGUgdGhpcyByb3V0ZSBjaGFuZ2UgaWYgdGhlIGZvcm0gaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZVxuICAgICAgICAvLyBgZnJvbWAgcm91dGUsIGJ1dCBpbmNsdWRlIHBhcmVudCBmb3JtcyBvZiBjbG9zaW5nIG5lc3RlZCBmb3JtcyBhcyBhc1xuICAgICAgICAvLyB3ZWxsLCBieSBtYXRjaGluZyB0aGUgdGhlIHN0YXJ0IG9mIGZyb20vdG8gcGF0aCBhZ2FpbnN0IGB0aGlzLnBhdGhgOlxuICAgICAgICBmcm9tLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgICF0by5wYXRoLnN0YXJ0c1dpdGgodGhpcy5wYXRoKSAmJlxuICAgICAgICAvLyBFeGNsdWRlIGhhc2ggY2hhbmdlcyBvbmx5ICg9IHRhYiBjaGFuZ2VzKTpcbiAgICAgICAgZnJvbS5wYXRoICE9PSB0by5wYXRoICYmIChcbiAgICAgICAgICB0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSB8fFxuICAgICAgICAgIC8vIERlY2lkZSBpZiB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhIG5ldyBuZXN0ZWQgZm9ybSwgb3IgY2xvc2luZyAvXG4gICAgICAgICAgLy8gcmVwbGFjaW5nIGFuIGFscmVhZHkgb3BlbiBvbmUgYnkgY29tcGFyaW5nIHBhdGggbGVuZ3Rocy5cbiAgICAgICAgICAvLyBUaGUgY2FzZSBvZiBgPWAgbWF0Y2hlcyB0aGUgcmVwbGFjaW5nIG9mIGFuIGFscmVhZHkgb3BlbiBvbmUuXG4gICAgICAgICAgdG8ucGF0aC5sZW5ndGggPD0gZnJvbS5wYXRoLmxlbmd0aFxuICAgICAgICApXG4gICAgICApXG4gICAgICBpZiAoaXNDbG9zaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTXV0YXRpbmcpIHtcbiAgICAgICAgICAvLyBGb3IgYWN0aXZlIGRpcmVjdGx5IG11dGF0aW5nIChuZXN0ZWQpIGZvcm1zIHRoYXQgd2VyZSBub3QgdmFsaWRhdGVkXG4gICAgICAgICAgLy8geWV0LCB2YWxpZGF0ZSB0aGVtIG9uY2UuIElmIHRoZSB1c2VyIHRoZW4gc3RpbGwgd2FudHMgdG8gbGVhdmVcbiAgICAgICAgICAvLyB0aGVtLCB0aGV5IGNhbiBjbGljayBjbG9zZSAvIG5hdmlnYXRlIGF3YXkgYWdhaW4uXG4gICAgICAgICAgb2sgPSAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRhdGVkIHx8XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlQWxsKClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhlIGZvcm0gZG9lc24ndCBkaXJlY3RseSBtdXRhdGUgZGF0YS4gSWYgaXQgaXMgZGlydHksIGFzayBpZiB1c2VyXG4gICAgICAgICAgLy8gd2FudHMgdG8gcGVyc2lzdCBkYXRhIGZpcnN0LlxuICAgICAgICAgIGlmICh0aGlzLmlzRGlydHkpIHtcbiAgICAgICAgICAgIG9rID0gd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgICAgIGBZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIERvIHlvdSByZWFsbHkgd2FudCB0byAke1xuICAgICAgICAgICAgICAgIHRoaXMudmVyYnMuY2FuY2VsXG4gICAgICAgICAgICAgIH0/YFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV4dChvaylcbiAgICB9LFxuXG4gICAgZ2V0Um91dGVQYXRoKHRlbXBsYXRlUGF0aCkge1xuICAgICAgLy8gTWFwcyB0aGUgcm91dGUncyBhY3R1YWwgcGF0aCB0byB0aGUgbWF0Y2hlZCByb3V0ZXMgYnkgY291bnRpbmcgaXRzXG4gICAgICAvLyBwYXJ0cyBzZXBhcmF0ZWQgYnkgJy8nLCBzcGxpdHRpbmcgdGhlIHBhdGggaW50byB0aGUgbWFwcGVkIHBhcnRzXG4gICAgICAvLyBjb250YWluaW5nIGFjdHVhbCBwYXJhbWV0ZXJzLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGhcbiAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgLnNsaWNlKDAsIHRlbXBsYXRlUGF0aC5zcGxpdCgnLycpLmxlbmd0aClcbiAgICAgICAgLmpvaW4oJy8nKVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRlbXBsYXRlKFxuICB2LWlmPVwidXNlclwiXG4pXG4gIC8vLSBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4gIC8vLSBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbiAgLy8tIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuICAvLy0gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG4gIFJvdXRlclZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4gICAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4gIClcbiAgICBEaXRvU2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgeyBzb21lU2NoZW1hQ29tcG9uZW50LCBpc1NpbmdsZUNvbXBvbmVudFZpZXcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9WaWV3Jywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIC8vIFJlZGlyZWN0ICRzb3VyY2VDb21wb25lbnQgYW5kICRyZXNvdXJjZUNvbXBvbmVudCB0byB0aGUgbWFpbiBjb21wb25lbnQ6XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8uc291cmNlQ29tcG9uZW50IHx8IG51bGwsXG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8ucmVzb3VyY2VDb21wb25lbnQgfHwgbnVsbFxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBVcGRhdGVkIGZyb20gTG9hZGluZ01peGluIHRocm91Z2ggYHNldExvYWRpbmcoaXNMb2FkaW5nKWA6XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgLy8gTk9URTogRGF0YSBpcyBzaGFyZWQgYWNyb3NzIGFsbCB2aWV3cyBiZWNhdXNlIHRoZSByb3V0ZXIgcmVjeWNsZXMgdGhlXG4gICAgICAvLyBEaXRvVmlldyBjb21wb25lbnQuXG4gICAgICBkYXRhOiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEuc2NoZW1hXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICBpc1ZpZXcoKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudFZpZXcoKSB7XG4gICAgICByZXR1cm4gaXNTaW5nbGVDb21wb25lbnRWaWV3KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBtYWluQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKHRoaXMubmFtZSlcbiAgICB9LFxuXG4gICAgdmlld1NjaGVtYSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50LCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAvLyBUcmFuc2xhdGUgc2luZ2xlLWNvbXBvbmVudCBzY2hlbWFzIGludG8gbXVsdGktY29tcG9uZW50IHNjaGVtYXMsXG4gICAgICAvLyBzbyB0aGV5IGNhbiBiZSByZW5kZXJlZCBkaXJlY3RseSB0aHJvdWdoIERpdG9TY2hlbWEgYWxzbzpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgW3NjaGVtYS5uYW1lXToge1xuICAgICAgICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAuLi5jb21wb25lbnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzY2hlbWFcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHNvbWVTY2hlbWFDb21wb25lbnQodGhpcy52aWV3U2NoZW1hLCBoYXNSZXNvdXJjZSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIC8vIFNlZSBpZiB0aGUgcm91dGUgY2hhbmdlcyBjb21wbGV0ZWx5LCBhbmQgY2xlYXIgdGhlIGRhdGEgaWYgaXQgZG9lcy5cbiAgICAgIGlmICh0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSkge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGF0YSA9IHt9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIC8vIExpc3RzIGluc2lkZSBzaW5nbGUtY29tcG9uZW50IHZpZXdzIHVzZSB0aGUgdmlldydzIHBhdGggZm9yIHN1Yi1wYXRoczpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHRoaXMucGF0aFxuICAgICAgICA6IGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5RGF0ZShkYXRlLCB7XG4gIHllYXIgPSBkYXRlPy5nZXRGdWxsWWVhcigpID8/IDAsXG4gIG1vbnRoID0gZGF0ZT8uZ2V0TW9udGgoKSA/PyAwLFxuICBkYXkgPSBkYXRlPy5nZXREYXRlKCkgPz8gMCxcbiAgaG91ciA9IGRhdGU/LmdldEhvdXJzKCkgPz8gMCxcbiAgbWludXRlID0gZGF0ZT8uZ2V0TWludXRlcygpID8/IDAsXG4gIHNlY29uZCA9IGRhdGU/LmdldFNlY29uZHMoKSA/PyAwLFxuICBtaWxsaXNlY29uZCA9IGRhdGU/LmdldE1pbGxpc2Vjb25kcygpID8/IDBcbn0gPSB7fSkge1xuICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERhdGUoZGF0ZSkge1xuICByZXR1cm4gaXNEYXRlKGRhdGUpID8gZGF0ZSA6IGRhdGUgPyBuZXcgRGF0ZShkYXRlKSA6IG51bGxcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY2FsZW5kYXJcbiAgLmRpdG8tY2FsZW5kYXItcG9wdXBcbiAgICAuZGl0by1jYWxlbmRhci1pbm5lclxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ2RheSdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IDEgfSkgfX1cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtbW9udGgoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ21vbnRoJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IG1vbnRoOiAxIH0pIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIndlZWtkYXkgaW4gd2Vla2RheU5hbWVzXCJcbiAgICAgICAgICAgICkge3sgd2Vla2RheS5zaG9ydCB9fVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWRhdGVzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cImRhdGUgaW4gZGF0ZVJhbmdlXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZGF0ZS5zdGF0ZSAmJiBgZGl0by1jYWxlbmRhci1pdGVtLSR7ZGF0ZS5zdGF0ZX1gXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShkYXRlLmRhdGUsIGRhdGUuc3RhdGUsIHRydWUpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZS50ZXh0IH19XG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtdG9kYXkoXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpLCB7IHllYXI6IDEsIG1vbnRoOiAxLCBkYXk6IDEgfSlcIlxuICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAnbW9udGgnXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1tb250aHNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiKG1vbnRoLCBpbmRleCkgaW4gbW9udGhOYW1lc1wiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldE1vbnRoQ2xhc3MoaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0TW9udGgoaW5kZXgpXCJcbiAgICAgICAgICAgICkge3sgbW9udGguc2hvcnQgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ3llYXInXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhbiB7eyBkZWNhZGVUb1N0cmluZyhjdXJyZW50VmFsdWUpIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXllYXJzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cInllYXIgaW4geWVhclJhbmdlXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0WWVhckNsYXNzKHllYXIpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0WWVhcih5ZWFyKVwiXG4gICAgICAgICAgICApIHt7IHllYXIgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjb3B5RGF0ZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgbW9kZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdkYXknIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgd2Vla2RheU5hbWVzLCBtb250aE5hbWVzIH0gPSBnZXRMb2NhbGVOYW1lcyh0aGlzLmxvY2FsZSlcbiAgICByZXR1cm4ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lcyxcbiAgICAgIGRhdGVSYW5nZTogW10sXG4gICAgICB5ZWFyUmFuZ2U6IFtdLFxuICAgICAgY3VycmVudFZhbHVlOiAoXG4gICAgICAgIHRoaXMubW9kZWxWYWx1ZSB8fFxuICAgICAgICAvLyBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgdXNlIGN1cnJlbnQgZGF0ZSBidXQgY2xlYXIgdGltZSBmaWVsZHM6XG4gICAgICAgIGNvcHlEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApLFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMubW9kZVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG8gfHwgbmV3IERhdGUoKVxuICAgICAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZERhdGU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuXG4gICAgbW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TW9udGhDbGFzcyhtb250aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOiAoXG4gICAgICAgICAgdGhpcy5tb2RlbFZhbHVlICYmXG4gICAgICAgICAgbW9udGggPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRNb250aCgpICYmXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzogbW9udGggPT09IHRoaXMuY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0WWVhckNsYXNzKHllYXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzogKFxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJiB5ZWFyID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgICApLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOiB5ZWFyID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudFZhbHVlLCBvdmVycmlkZXMpXG4gICAgfSxcblxuICAgIHN0ZXBEZWNhZGUoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiAxMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2V0TW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH0sXG5cbiAgICBzdGVwTW9udGgoc3RlcCkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgeWVhciwgbW9udGggfSA9IHRoaXMuZ2V0WWVhck1vbnRoKFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBzdGVwXG4gICAgICApXG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICBtb250aCxcbiAgICAgICAgZGF5OiBNYXRoLm1pbihcbiAgICAgICAgICB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXREYXRlKClcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc3RlcFllYXIoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdERhdGUoZGF0ZSwgc3RhdGUsIGNvcHkgPSBmYWxzZSkge1xuICAgICAgaWYgKHN0YXRlICE9PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICBkYXk6IGRhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RNb250aChtb250aCkge1xuICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgLy8gU2V0IGRheSB0byAxIHRvIGF2b2lkIHNlbGVjdGluZyBhIGRhdGUgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZVxuICAgICAgLy8gbmV3IG1vbnRoLCBlLmcuIEZlYiAzMSAtPiBNYXIgMy5cbiAgICAgIHRoaXMuc2V0RGF0ZSh7IG1vbnRoLCBkYXk6IDEgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0WWVhcih5ZWFyKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgIHRoaXMuc2V0RGF0ZSh7IHllYXIgfSlcbiAgICB9LFxuXG4gICAgZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICBpZiAobW9udGggPiAxMSkge1xuICAgICAgICB5ZWFyKytcbiAgICAgICAgbW9udGggPSAwXG4gICAgICB9IGVsc2UgaWYgKG1vbnRoIDwgMCkge1xuICAgICAgICB5ZWFyLS1cbiAgICAgICAgbW9udGggPSAxMVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgeWVhciwgbW9udGggfVxuICAgIH0sXG5cbiAgICBkYXRlVG9TdHJpbmcoZGF0ZSwgeyB5ZWFyLCBtb250aCwgZGF5IH0pIHtcbiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlLCB7XG4gICAgICAgIHllYXI6IHllYXIgJiYgJ251bWVyaWMnLFxuICAgICAgICBtb250aDogbW9udGggJiYgJ2xvbmcnLFxuICAgICAgICBkYXk6IGRheSAmJiAnbnVtZXJpYydcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGRlY2FkZVRvU3RyaW5nKGRhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKGRhdGUuZ2V0RnVsbFllYXIoKSlcbiAgICAgIHJldHVybiBgJHt5ZWFyfSDigJMgJHt5ZWFyICsgOX1gXG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKS5nZXREYXRlKClcbiAgICB9LFxuXG4gICAgZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcikge1xuICAgICAgY29uc3QgeWVhclN0ciA9IHllYXIudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuICtgJHt5ZWFyU3RyLnNsaWNlKDAsIC0xKX0wYFxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZSh7IGhvciwgdmVyLCBlbnRlciB9KSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRNb2RlLCBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGlmIChob3IgfHwgdmVyKSB7XG4gICAgICAgIHN3aXRjaCAoY3VycmVudE1vZGUpIHtcbiAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgICAgZGF5OiBjdXJyZW50VmFsdWUuZ2V0RGF0ZSgpICsgaG9yICsgdmVyICogN1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgICAgbW9udGg6IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgaG9yICsgdmVyICogNlxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgICB5ZWFyOiBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIGhvciArIHZlciAqIDVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgIHN3aXRjaCAoY3VycmVudE1vZGUpIHtcbiAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRlKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVEYXRlUmFuZ2UoKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IFtdXG4gICAgICB0aGlzLnllYXJSYW5nZSA9IFtdXG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB5ZWFyID0gY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIGNvbnN0IG1vbnRoID0gY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcilcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICB0aGlzLnllYXJSYW5nZS5wdXNoKHN0YXJ0WWVhciArIGkpXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyTW9udGhGaXJzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKVxuICAgICAgbGV0IGZpcnN0RGF5V2VlayA9IGN1cnJNb250aEZpcnN0RGF5LmdldERheSgpICsgMVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA9PT0gMCkge1xuICAgICAgICBmaXJzdERheVdlZWsgPSA3XG4gICAgICB9XG4gICAgICBjb25zdCBudW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aClcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPiAxKSB7XG4gICAgICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoIC0gMSlcbiAgICAgICAgY29uc3QgcHJldk1vbnRoTnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoXG4gICAgICAgICAgcHJldk1vbnRoLnllYXIsXG4gICAgICAgICAgcHJldk1vbnRoLm1vbnRoXG4gICAgICAgIClcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmaXJzdERheVdlZWs7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRheSA9IHByZXZNb250aE51bURheXMgLSBmaXJzdERheVdlZWsgKyBpICsgMVxuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShwcmV2TW9udGgueWVhciwgcHJldk1vbnRoLm1vbnRoLCBkYXkpXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBkYXksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBudW1EYXlzOyBpKyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKVxuICAgICAgICBjb25zdCBpc0RheSA9IGRhdGUgPT4gKFxuICAgICAgICAgIGRhdGUgJiZcbiAgICAgICAgICBkYXRlLmdldERhdGUoKSA9PT0gaSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxuICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGhcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBzdGF0ZSA9IGlzRGF5KHRoaXMubW9kZWxWYWx1ZSlcbiAgICAgICAgICA/ICdhY3RpdmUnXG4gICAgICAgICAgOiBpc0RheSh0b2RheSlcbiAgICAgICAgICAgID8gJ3RvZGF5J1xuICAgICAgICAgICAgOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKVxuICAgICAgICAgICAgICA/ICdkaXNhYmxlZCdcbiAgICAgICAgICAgICAgOiBpc0RheShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICAgICAgPyAnY3VycmVudCdcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBkYXRlLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRNb250aE5lZWQgPSA0MiAtIHRoaXMuZGF0ZVJhbmdlLmxlbmd0aFxuICAgICAgaWYgKG5leHRNb250aE5lZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoICsgMSlcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbmV4dE1vbnRoTmVlZDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5leHRNb250aC55ZWFyLCBuZXh0TW9udGgubW9udGgsIGkpXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGxvY2FsZU5hbWVzID0ge31cblxuLy8gQ2FsbGluZyBgdG9Mb2NhbGVTdHJpbmcoKWAgdGhpcyBtdWNoIGFwcGVhcnMgdG8gYmUgZXhwZW5zaXZlLCBzbyBjYWNoZSBpdDpcbmZ1bmN0aW9uIGdldExvY2FsZU5hbWVzKGxvY2FsZSkge1xuICBsZXQgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdXG4gIGlmICghbmFtZXMpIHtcbiAgICBjb25zdCB3ZWVrZGF5TmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgMCwgaSlcbiAgICAgIHdlZWtkYXlOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIGksIDApXG4gICAgICBtb250aE5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXSA9IHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jYWxlbmRhciB7XG4gIG1pbi13aWR0aDogMjQwcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5kaXRvLWNhbGVuZGFyLXBvcHVwIHtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgei1pbmRleDogMTAwMDtcbn1cblxuLmRpdG8tY2FsZW5kYXItYm9keSB7XG4gIHBhZGRpbmc6IDAgMC41ZW07XG5cbiAgc3BhbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA3KTtcbiAgICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6IGNhbGMoI3skaW5wdXQtaGVpZ2h0fSAtIDJweCk7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS10b2RheSB7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmU7XG4gICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSB7XG4gICAgJixcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZCxcbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1ncmF5IHtcbiAgICBjb2xvcjogIzk5OTk5OTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1tb250aHMsXG4uZGl0by1jYWxlbmRhci15ZWFycyB7XG4gIHNwYW4ge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA0KTtcbiAgICBtYXJnaW46IDAuNWVtIDA7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhbiB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLyA1KTtcbn1cblxuLmRpdG8tY2FsZW5kYXIgYSxcbi5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW4sXG4uZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbixcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW4ge1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlciBzcGFuIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gIGEge1xuICAgIHBhZGRpbmc6IDAgMC4yZW07XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyLW1vbnRocyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyOm5vdCg6aG92ZXIpIC5kaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCB7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG59XG5cbi5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzIHNwYW4ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlcixcbi5kaXRvLWNhbGVuZGFyLWZvb3RlciB7XG4gIEBleHRlbmQgJWlucHV0LWhlaWdodDtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmRpdG8tY2FsZW5kYXItZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogJGJvcmRlci1zdHlsZTtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGU7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgPiBzcGFuIHtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgcGFkZGluZzogMCAwLjVlbTtcbiAgfVxuXG4gIGEge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LFxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNSU7XG4gIG1pbi13aWR0aDogMmVtO1xuICBtYXgtd2lkdGg6IDNlbTtcblxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgZm9udC1zaXplOiAxLjI1ZW07XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLknO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCqyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLonO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCuyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICdOb3cnO1xuICB9XG59XG48L3N0eWxlPlxuIiwiZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50cyh0YXJnZXQsIGV2ZW50cykge1xuICBmb3IgKGNvbnN0IHR5cGUgaW4gZXZlbnRzKSB7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZSBpbiBldmVudHMpIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleShldmVudCkge1xuICByZXR1cm4ge1xuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICAxMzogJ2VudGVyJ1xuICB9W2V2ZW50LmtleUNvZGVdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KSB7XG4gIGNvbnN0IGtleSA9IGdldEtleShldmVudClcbiAgcmV0dXJuIHtcbiAgICBob3I6IHsgbGVmdDogLTEsIHJpZ2h0OiAxIH1ba2V5XSB8fCAwLFxuICAgIHZlcjogeyB1cDogLTEsIGRvd246IDEgfVtrZXldIHx8IDAsXG4gICAgZW50ZXI6IGtleSA9PT0gJ2VudGVyJ1xuICB9XG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyaWdnZXItY29udGFpbmVyXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1pZj1cImFsd2F5c1Nob3dcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2NsaWNrJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2ZvY3VzJyB8fCB0cmlnZ2VyID09PSAnYWx3YXlzJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgVHJhbnNpdGlvbig6bmFtZT1cInRyYW5zaXRpb25cIilcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1lbHNlXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpzaG93J10sXG5cbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2NsaWNrJyB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbScgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgekluZGV4OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIGtlZXBJblZpZXc6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhpZGVXaGVuQ2xpY2tPdXRzaWRlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhbHdheXNTaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY292ZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoaWRlRGVsYXk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIHBvcHVwUGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyaWdnZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXRyaWdnZXItZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBvcHVwQ2xhc3MoKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICBbYGRpdG8tcG9wdXAtJHtoeXBoZW5hdGUodGhpcy5wbGFjZW1lbnQpfWBdOiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXN0b21DbGFzcykge1xuICAgICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3NdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgcG9wdXBTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA/IGB6LWluZGV4OiAke3RoaXMuekluZGV4fWAgOiAnJ1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93IHx8IHRoaXMuYWx3YXlzU2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgICAgaWYgKHRvKSB7XG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRyaWdnZXIucXVlcnlTZWxlY3RvcignaW5wdXQsIHRleHRhcmVhJylcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0V2ZW50cyA9IGFkZEV2ZW50cyh0YXJnZXQsIHtcbiAgICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVXaGVuQ2xpY2tPdXRzaWRlICYmICF0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIC8vIFVzZSAnbW91c2V1cCcgaW5zdGVhZCBvZiAnY2xpY2snLCBzaW5jZSBjbGljayBhcHBlYXJzIHRvIGhhcHBlbiBhZnRlclxuICAgICAgLy8gdGhlIERPTSBpbnNpZGUgb2YgcG9wdXBzIGNvdWxkIGNoYW5nZSBpbiBhIHdheSBzbyB0aGF0IHRoZSBjaGVja1xuICAgICAgLy8gYHBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldClgIHdvdWxkIGZhaWw6XG4gICAgICB0aGlzLmNsb3NlRXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgJiZcbiAgICAgICAgICAgICFwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdHJpZ2dlci5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSB0aGlzLnNob3dcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5mb2N1c0V2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLmNsb3NlRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMubW91c2VMZWF2ZVRpbWVyID0gbnVsbFxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICAgIGlmICh0aGlzLnNob3cgJiYgcG9wdXAub2Zmc2V0V2lkdGggPT09IDApIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVBvc2l0aW9uKCksIDApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBpc1N0cmluZyh0aGlzLnRhcmdldClcbiAgICAgICAgPyB0aGlzLiRyZWZzW3RoaXMudGFyZ2V0XVxuICAgICAgICA6IHRoaXMudGFyZ2V0XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIC8vIEFjdHVhbGx5IHJlc2l6ZSB0aGUgcG9wdXAncyBmaXJzdCBjaGlsZCwgc28gdGhleSBjYW4gc2V0IHNpemUgbGltaXRzLlxuICAgICAgICBjb25zdCBlbCA9IHRhcmdldCA9PT0gcG9wdXAgPyB0cmlnZ2VyIDogcG9wdXAuZmlyc3RFbGVtZW50Q2hpbGRcbiAgICAgICAgaWYgKGVsKSB7XG4gICAgICAgICAgZWwuc3R5bGUud2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkud2lkdGhcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBib3VuZHMgPSAodGFyZ2V0IHx8IHRyaWdnZXIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCB0cmlnZ2VyTGVmdCA9IGJvdW5kcy5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICAgIGNvbnN0IHRyaWdnZXJUb3AgPSBib3VuZHMudG9wICsgd2luZG93LnNjcm9sbFlcbiAgICAgIGNvbnN0IHRyaWdnZXJXaWR0aCA9IGJvdW5kcy53aWR0aFxuICAgICAgY29uc3QgdHJpZ2dlckhlaWdodCA9IGJvdW5kcy5oZWlnaHRcbiAgICAgIGNvbnN0IHBvcHVwV2lkdGggPSBwb3B1cC5vZmZzZXRXaWR0aFxuICAgICAgY29uc3QgcG9wdXBIZWlnaHQgPSBwb3B1cC5vZmZzZXRIZWlnaHRcblxuICAgICAgbGV0IFtwYXJ0MSwgcGFydDJdID0gdGhpcy5wb3B1cFBsYWNlbWVudC5zcGxpdCgnLScpIHx8IFtdXG4gICAgICBpZiAodGhpcy5rZWVwSW5WaWV3KSB7XG4gICAgICAgIGNvbnN0IHdpbldpZHRoID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICAgY29uc3Qgd2luSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnQyID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgKyB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0ICsgdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGxlZnQgPSAwXG4gICAgICBsZXQgdG9wID0gMFxuICAgICAgc3dpdGNoIChwYXJ0MSkge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0ICs9IHRyaWdnZXJXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgc3dpdGNoIChwYXJ0Mikge1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoIC0gdHJpZ2dlcldpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHQgLSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvdmVyKSB7XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIHRvcCAtPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0ICE9PSB0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJCb3VuZHMgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGxlZnQgKz0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyQm91bmRzLmxlZnRcbiAgICAgICAgdG9wICs9IHRyaWdnZXJUb3AgLSB0cmlnZ2VyQm91bmRzLnRvcFxuICAgICAgfVxuICAgICAgcG9wdXAuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgXG4gICAgICBwb3B1cC5zdHlsZS50b3AgPSBgJHt0b3B9cHhgXG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5zaG93UG9wdXBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Ib3ZlcihlbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlTGVhdmVUaW1lcilcbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGlkZURlbGF5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICB9LCB0aGlzLmhpZGVEZWxheSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcbkBpbXBvcnQgJy4uL3N0eWxlcy90cmFuc2l0aW9ucy9pbmRleC5zY3NzJztcblxuLmRpdG8tdHJpZ2dlci1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5kaXRvLXRyaWdnZXItZGlzYWJsZWQge1xuICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICAqIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tcG9wdXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAwMDtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8taW5wdXRcbiAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gIGlucHV0KFxuICAgIDppZD1cImlkXCJcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgOnR5cGU9XCJ0eXBlXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOnJlYWRvbmx5PVwicmVhZG9ubHlcIlxuICAgIDphdXRvZm9jdXM9XCJhdXRvZm9jdXNcIlxuICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICA6YXV0b2NvbXBsZXRlPVwiYXV0b2NvbXBsZXRlXCJcbiAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgICB2LWJpbmQ9XCIkYXR0cnNcIlxuICApXG4gIHNsb3QobmFtZT1cImFmdGVyXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHlwZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICd0ZXh0JyB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdGl0bGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICByZWFkb25seTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGF1dG9mb2N1czogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGF1dG9jb21wbGV0ZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdvZmYnIH1cbiAgICAvKlxuICAgIGNsZWFyYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gICAgc3VmZml4SWNvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwcmVmaXhJY29uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gICAgKi9cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIGhvdmVyaW5nOiBmYWxzZSxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2l6ZSgpIHtcbiAgICAgIC8vIERldGVybWluZSBzaXplIGJhc2VkIG9uIG1pbiAmIG1heCBzZXR0aW5ncywgaWYgdGhleSdyZSBwcm92aWRlZC5cbiAgICAgIGNvbnN0IHsgc2l6ZSwgbWluLCBtYXggfSA9IHRoaXMuJGF0dHJzXG4gICAgICBjb25zdCBnZXRMZW5ndGggPSB2YWx1ZSA9PiAodmFsdWUgIT0gbnVsbCA/IGAke3ZhbHVlfWAubGVuZ3RoIDogMClcbiAgICAgIHJldHVybiBzaXplIHx8IGdldExlbmd0aChtaW4pIHx8IGdldExlbmd0aChtYXgpIHx8IHVuZGVmaW5lZFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShjdXJyZW50VmFsdWUpIHtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IHRoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8taW5wdXQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICBAZXh0ZW5kICVpbnB1dDtcblxuICBpbnB1dCB7XG4gICAgLy8gSW5oZXJpdCBhbGwgc3R5bGluZyBmcm9tIC5kaXRvLWlucHV0XG4gICAgYWxsOiBpbmhlcml0O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXI6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICBJbnB1dEZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgcmVhZG9ubHlcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgKVxuICAvLyBpY29uKHR5cGU9XCJjYWxlbmRhclwiIDpjb2xvcj1cImljb25Db2xvclwiKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgQ2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IENhbGVuZGFyIGZyb20gJy4vQ2FsZW5kYXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIENhbGVuZGFyLCBJbnB1dEZpZWxkIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2ZvY3VzJywgJ2JsdXInXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkYXRlRm9ybWF0OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gZGVmYXVsdEZvcm1hdHMuZGF0ZSB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB7XG4gICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICBkYXRlOiB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgICAgdGltZTogZmFsc2VcbiAgICAgICAgfSkgfHwgJydcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShjdXJyZW50VmFsdWUpIHtcbiAgICAgIGlmICgrY3VycmVudFZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICAgIGlmICghdG8gJiYgdGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgICAgLy8gVE9ETzogVGhpcyBzZWVtcyB0byBjb250cmFkaWN0IHRoZSBgY3VycmVudFZhbHVlKClgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgLy8gICAgICAgSXMgdGhpcyBuZWVkZWQgYXQgYWxsP1xuICAgICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy4kcmVmcy5jYWxlbmRhcj8ubmF2aWdhdGUoZ2V0S2V5TmF2aWdhdGlvbihldmVudCkpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXBpY2tlciB7XG4gIG1pbi13aWR0aDogMTBlbTtcblxuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAge1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG48L3N0eWxlPlxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbikge1xuICBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoXG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBzZXRUaW1lb3V0KGFyZ3VtZW50c1swXSwgMTApXG4gICAgfVxuICApXG4gIGlmIChkdXJhdGlvbiA8PSAwKSB7XG4gICAgZWxlbWVudC5zY3JvbGxUb3AgPSB0b1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0byAtIGVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgY29uc3QgcGVyVGljayA9IGRpZmZlcmVuY2UgLyBkdXJhdGlvbiAqIDEwXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gZWxlbWVudC5zY3JvbGxUb3AgKyBwZXJUaWNrXG4gICAgICBpZiAoZWxlbWVudC5zY3JvbGxUb3AgPT09IHRvKSByZXR1cm5cbiAgICAgIHNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbiAtIDEwKVxuICAgIH0pXG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZmllbGQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKGZpZWxkLmNyZWF0ZVRleHRSYW5nZSkge1xuICAgIGNvbnN0IHJhbmdlID0gZmllbGQuY3JlYXRlVGV4dFJhbmdlKClcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgc3RhcnQpXG4gICAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgZW5kKVxuICAgIHJhbmdlLnNlbGVjdCgpXG4gICAgZmllbGQuZm9jdXMoKVxuICB9IGVsc2UgaWYgKGZpZWxkLnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgZmllbGQuZm9jdXMoKVxuICAgIGZpZWxkLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpXG4gIH0gZWxzZSBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBmaWVsZCkge1xuICAgIGZpZWxkLnNlbGVjdGlvblN0YXJ0ID0gc3RhcnRcbiAgICBmaWVsZC5zZWxlY3Rpb25FbmQgPSBlbmRcbiAgICBmaWVsZC5mb2N1cygpXG4gIH1cbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVHJpZ2dlci5kaXRvLXRpbWUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIElucHV0RmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICByZWFkb25seVxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICAgICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICApXG4gICAgLy8tIGljb24odHlwZT1cInRpbWVcIlxuICAgIC8vLSA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gICAgLy8tIClcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgICAgcmVmPVwiaG91clwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDBcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUoXG4gICAgICAgICAgcmVmPVwibWludXRlXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkTWludXRlKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwibWludXRlID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChcbiAgICAgICAgICByZWY9XCJzZWNvbmRcIlxuICAgICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAyXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWNvbmQgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCB7IGNvcHlEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IHNjcm9sbFRvIH0gZnJvbSAnLi4vdXRpbHMvc2Nyb2xsLmpzJ1xuaW1wb3J0IHsgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgSW5wdXRGaWVsZCB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICd1cGRhdGU6c2hvdycsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgZGlzYWJsZWRIb3VyOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkTWludXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkU2Vjb25kOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBzZWxlY3Rpb246IDAsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWVcbiAgICAgICAgPyBgJHtcbiAgICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLmhvdXIpXG4gICAgICAgICAgfToke1xuICAgICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMubWludXRlKVxuICAgICAgICAgIH06JHtcbiAgICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLnNlY29uZClcbiAgICAgICAgICB9YFxuICAgICAgICA6ICcnXG4gICAgfSxcblxuICAgIGN1cnJlbnREYXRlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgfHxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IERhdGUoKSBvYmplY3Qgd2l0aCB0aGUgdGltZSBzZXQgdG8gMCwgdG8gYmUgdXNlZCB3aGVuXG4gICAgICAgIC8vIGZpcnN0IHNldHRpbmcgYW55IG9mIHRoZSB0aW1lcywgZm9yIG1lYW5pbmdmdWwgZGF0ZXMgaW4gY2FzZSB0aGVcbiAgICAgICAgLy8gb2JqZWN0IGlzIHNoYXJlZCB3aXRoIGEgRGF0ZVBpY2tlciwgZS5nLiB0aHJvdWdoIERhdGVUaW1lUGlja2VyLlxuICAgICAgICBjb3B5RGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBob3VyOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldEhvdXJzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChob3VyKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IGhvdXIgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWludXRlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldE1pbnV0ZXMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KG1pbnV0ZSkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBtaW51dGUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Vjb25kOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldFNlY29uZHMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KHNlY29uZCkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBzZWNvbmQgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGRhdGUpXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6ICd1cGRhdGVTZWxlY3Rpb24nLFxuXG4gICAgc2VsZWN0aW9uOiAndXBkYXRlU2VsZWN0aW9uJyxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKClcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoMClcbiAgICAgIH1cbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgICAgaWYgKCF0byAmJiB0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsZWZ0UGFkKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKCcwJyArIHZhbHVlKS5zbGljZSgtMilcbiAgICB9LFxuXG4gICAgc2V0VGltZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gY29weURhdGUodGhpcy5jdXJyZW50RGF0ZSwge1xuICAgICAgICAuLi5vdmVycmlkZXMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVTZWxlY3Rpb24oZm9yY2UgPSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMuc2hvd1BvcHVwIHx8IGZvcmNlKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gMyAqIHRoaXMuc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbih0aGlzLiRyZWZzLmlucHV0LCBzdGFydCwgc3RhcnQgKyAyKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Nyb2xsQWxsKGR1cmF0aW9uID0gMTAwKSB7XG4gICAgICBjb25zdCBzY3JvbGwgPSAocmVmLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRyZWZzW3JlZl1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIC8vIEZpcnN0IGFuZCBsYXN0IG9uZSBhZGQgMyB0aW1lcyB0aGUgbWFyZ2luXG4gICAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IHRhcmdldC5zY3JvbGxIZWlnaHQgLyAodGFyZ2V0LmNoaWxkcmVuLmxlbmd0aCArIDYpXG4gICAgICAgICAgc2Nyb2xsVG8odGFyZ2V0LCBNYXRoLnJvdW5kKHZhbHVlICogbGluZUhlaWdodCksIGR1cmF0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHNjcm9sbCgnaG91cicsIHRoaXMuaG91cilcbiAgICAgICAgc2Nyb2xsKCdtaW51dGUnLCB0aGlzLm1pbnV0ZSlcbiAgICAgICAgc2Nyb2xsKCdzZWNvbmQnLCB0aGlzLnNlY29uZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBbJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCddW3RoaXMuc2VsZWN0aW9uXVxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IHsgaG9yLCB2ZXIsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgICBpZiAoaG9yKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGlvbiArIGhvclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gdmFsdWUgPCAwID8gMiA6IHZhbHVlID4gMiA/IDAgOiB2YWx1ZVxuICAgICAgICB9IGVsc2UgaWYgKHZlcikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tzZWxlY3RlZF0gKyB2ZXJcbiAgICAgICAgICBjb25zdCB7IGxlbmd0aCB9ID0gdGhpcy4kcmVmc1tzZWxlY3RlZF0uY2hpbGRyZW5cbiAgICAgICAgICB0aGlzW3NlbGVjdGVkXSA9XG4gICAgICAgICAgICB2YWx1ZSA8IDBcbiAgICAgICAgICAgICAgPyB2YWx1ZSArIGxlbmd0aFxuICAgICAgICAgICAgICA6IHZhbHVlID49IGxlbmd0aFxuICAgICAgICAgICAgICAgID8gdmFsdWUgLSBsZW5ndGhcbiAgICAgICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChob3IgfHwgdmVyIHx8IGVudGVyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odHJ1ZSlcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIG1heC13aWR0aDogMTYwcHg7XG4gIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbn1cblxuJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0OiAyNHB4O1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC5kaXRvLWljb24tdGltZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiA3cHg7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAgLmRpdG8tdGltZS1waWNrZXItcGFuZWwge1xuICBmbG9hdDogbGVmdDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItd2lkdGg6IDAgMXB4IDA7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogY2FsYygxMDAlIC8gMyArIDFweCk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgJjpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gIH1cblxuICB1bCB7XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDA7XG4gICAgLy8gSGlkZSBzY3JvbGxiYXI6XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgcGFkZGluZzogMCAxN3B4IDAgMDtcbiAgICBoZWlnaHQ6IDcgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG5cbiAgICAmID4gbGkge1xuICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgbGluZS1oZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG4gICAgICB9XG5cbiAgICAgICYuc2VsZWN0ZWQsXG4gICAgICAmLnNlbGVjdGVkOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRhdGUtdGltZS1waWNrZXIocmVmPVwicGlja2VyXCIpXG4gIC5kaXRvLXBpY2tlcnMoOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiKVxuICAgIERhdGVQaWNrZXIoXG4gICAgICByZWY9XCJkYXRlXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd0RhdGVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlaG9sZGVyLCBsb2NhbGUsIGRhdGVGb3JtYXQsIGRpc2FibGVkIH1cIlxuICAgICAgQGZvY3VzPVwiZGF0ZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwiZGF0ZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgKVxuICAgIFRpbWVQaWNrZXIoXG4gICAgICByZWY9XCJ0aW1lXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd1RpbWVcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBkaXNhYmxlZCB9XCJcbiAgICAgIEBmb2N1cz1cInRpbWVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cInRpbWVGb2N1c2VkID0gZmFsc2VcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tICcuL0RhdGVQaWNrZXIudnVlJ1xuaW1wb3J0IFRpbWVQaWNrZXIgZnJvbSAnLi9UaW1lUGlja2VyLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIgfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd0RhdGU6IGZhbHNlLFxuICAgICAgc2hvd1RpbWU6IGZhbHNlLFxuICAgICAgZGF0ZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgdGltZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUZvY3VzZWQgfHwgdGhpcy50aW1lRm9jdXNlZFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGRhdGUpIHtcbiAgICAgIGlmICgrZGF0ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgZGF0ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgICAgaWYgKCF0byAmJiB0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuZGF0ZS5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmRhdGUuYmx1cigpXG4gICAgICB0aGlzLiRyZWZzLnRpbWUuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXRpbWUtcGlja2VyIHtcbiAgLmRpdG8tcGlja2VycyB7XG4gICAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgICBwYWRkaW5nOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICAuZGl0by1pbnB1dCB7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyOiAwO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWRhdGUtcGlja2VyIHtcbiAgICB3aWR0aDogNjAlO1xuICAgIG1pbi13aWR0aDogNi45ZW07XG5cbiAgICAuZGl0by1pbnB1dCB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXRpbWUtcGlja2VyIHtcbiAgICB3aWR0aDogNDAlO1xuICAgIG1pbi13aWR0aDogNS40ZW07XG5cbiAgICAuZGl0by1pbnB1dCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLy8gYHlhcm4gYnVpbGQ6aWNvbnNgIGNvbnZlcnRzIHRoZSBpY29uIFNWRyBmaWxlcyB0byBzaWxlbnQgY2xhc3NlcyBpbnNpZGVcbi8vIGBzcmMvc3R5bGVzL21peGlucy9faWNvbnMuc2Nzc2AsIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBhbGwgb3RoZXIgc2Fzc1xuLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4vLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSB0aGVtIGFzIG5vcm1hbCBDU1MgY2xhc3NlcywgY29udmVydCB0aGVtIGhlcmU6XG5AZWFjaCAkbmFtZSBpbiAkaWNvbnMge1xuICAuZGl0by1pY29uLSN7JG5hbWV9IHtcbiAgICBAZXh0ZW5kICVpY29uLSN7JG5hbWV9O1xuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWUvbm8tdGVtcGxhdGUtc2hhZG93IC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhZ2luYXRpb25cbiAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInRvdGFsID4gMFwiXG4gICAgKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1lbHNlXG4gICAgKSAwXG4gICAgfCAvIHt7IHRvdGFsIH19XG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1mb3I9XCJwYWdlIGluIHBhZ2VSYW5nZVwiXG4gICAgICA6Y2xhc3M9XCJnZXRQYWdlQ2xhc3MocGFnZSlcIlxuICAgICAgOmRpc2FibGVkPVwicGFnZS5kaXNhYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvbkNsaWNrUGFnZShwYWdlKVwiXG4gICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1pZj1cInBhZ2UudGV4dFwiXG4gICAgICApIHt7IHBhZ2UudGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOnBhZ2UnXSxcblxuICBwcm9wczoge1xuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIHBhZ2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxMCB9LFxuICAgIHNob3dUb3RhbDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlUmFuZ2U6IFtdLFxuICAgICAgc2hvd1ByZXY6IHRydWUsXG4gICAgICBzaG93TmV4dDogdHJ1ZSxcbiAgICAgIG51bVBhZ2VzOiAwLFxuICAgICAgY3VycmVudFBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpcnN0KCkge1xuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLmN1cnJlbnRQYWdlU2l6ZSArIDFcbiAgICB9LFxuXG4gICAgbGFzdCgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0ICsgdGhpcy5jdXJyZW50UGFnZVNpemUgLSAxLCB0aGlzLnRvdGFsKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHRvdGFsOiAndXBkYXRlUGFnZVJhbmdlJyxcbiAgICBzaG93UHJldjogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd05leHQ6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuXG4gICAgcGFnZShwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZShwYWdlU2l6ZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSBwYWdlU2l6ZVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZVNpemUoY3VycmVudFBhZ2VTaXplKSB7XG4gICAgICB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWwgLyBjdXJyZW50UGFnZVNpemUpXG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMubnVtUGFnZXNcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2UodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpwYWdlJywgdG8pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZVxuICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrUGFnZShwYWdlKSB7XG4gICAgICBpZiAocGFnZS5pbmRleCAmJiAhcGFnZS5kaXNhYmxlZCAmJiBwYWdlLmluZGV4ICE9PSB0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlLmluZGV4XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFBhZ2VDbGFzcyhwYWdlKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICAnZGl0by1zZWxlY3RlZCc6IHBhZ2UuYWN0aXZlXG4gICAgICB9XG4gICAgICBpZiAocGFnZS50eXBlKSB7XG4gICAgICAgIGNsYXNzZXNbYGRpdG8tYnV0dG9uLSR7cGFnZS50eXBlfWBdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgdXBkYXRlUGFnZVJhbmdlKCkge1xuICAgICAgY29uc3QgeyBzaG93UHJldiwgc2hvd05leHQsIHRvdGFsLCBjdXJyZW50UGFnZVNpemUsIGN1cnJlbnRQYWdlIH0gPSB0aGlzXG4gICAgICBjb25zdCBzaG93TGVuZ3RoID0gc2hvd1ByZXYgKyBzaG93TmV4dCArIDFcbiAgICAgIGNvbnN0IG51bVBhZ2VzID0gKHRoaXMubnVtUGFnZXMgPSBNYXRoLmNlaWwodG90YWwgLyBjdXJyZW50UGFnZVNpemUpKVxuXG4gICAgICBsZXQgc3RhcnQgPSAxXG4gICAgICBsZXQgZW5kID0gMVxuICAgICAgaWYgKG51bVBhZ2VzIDw9IHNob3dMZW5ndGgpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPD0gc2hvd1ByZXYgKyAxKSB7XG4gICAgICAgIGVuZCA9IHNob3dMZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gbnVtUGFnZXMgLSBzaG93TmV4dCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgICBzdGFydCA9IG51bVBhZ2VzIC0gc2hvd0xlbmd0aCArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gY3VycmVudFBhZ2UgLSBzaG93UHJldlxuICAgICAgICBlbmQgPSBjdXJyZW50UGFnZSArIHNob3dOZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2VSYW5nZSA9IFtdXG4gICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSAtIDEsXG4gICAgICAgIHR5cGU6ICdwcmV2JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlIDw9IDFcbiAgICAgIH0pXG4gICAgICBpZiAoc3RhcnQgPj0gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiAxLCB0ZXh0OiAxIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPiAyKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgYWN0aXZlOiBpID09PSBjdXJyZW50UGFnZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWluKG51bVBhZ2VzLCBjdXJyZW50UGFnZSArIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtbmV4dCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPD0gbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgKyAxLFxuICAgICAgICB0eXBlOiAnbmV4dCcsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA+PSBudW1QYWdlc1xuICAgICAgfSlcblxuICAgICAgdGhpcy5wYWdlUmFuZ2UgPSBwYWdlUmFuZ2VcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhZ2luYXRpb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgbWFyZ2luOiAwIDAuNWVtO1xuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICB9XG5cbiAgLmRpdG8tYnV0dG9uIHtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLCBjb2xvciAwcywgYmFja2dyb3VuZCAwcywgYm9yZGVyIDBzO1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgcGFkZGluZzogMCAwLjVlbTtcblxuICAgICYtcHJldixcbiAgICAmLW5leHQge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1hcnJvdztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLXByZXY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgfVxuXG4gICAgJi1lbGxpcHNpcy1wcmV2LFxuICAgICYtZWxsaXBzaXMtbmV4dCB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWVsbGlwc2lzO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWNoZXZyb25zO1xuICAgICAgfVxuXG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcblxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi1lbGxpcHNpcy1wcmV2OjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zd2l0Y2goXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKVxuICAuZGl0by1zd2l0Y2gtcGFuZVxuICAgIGlucHV0KFxuICAgICAgOmlkPVwiaWRcIlxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1iaW5kPVwiJGF0dHJzXCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICA6bmFtZT1cIm5hbWVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZSddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbHM6IHsgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkOiB0aGlzLm1vZGVsVmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgY29uc3QgeyBjaGVja2VkLCBkaXNhYmxlZCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2hlY2tlZCc6IGNoZWNrZWQsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKG1vZGVsVmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IG1vZGVsVmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY2hlY2tlZClcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY2hlY2tlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAvLyBVc2Ugd2hvbGUgbXVsdGlwbGVzIG9mIGByZW1gIGZvciBzaXplcyBhbmQgYHB4YCBtYXJnaW5zL3BhZGRpbmcgYWxvbmdcbiAgLy8gd2l0aCBgY2FsYygpYCB0byBlbmQgdXAgd2l0aCBldmVuIHBpeGVsIHNpemVzLiBgcmVtYCBpcyBuZWVkZWQgYmVjYXVzZSB3ZVxuICAvLyBjaGFuZ2UgYGZvbnQtc2l6ZWAgaW5zaWRlIGAuZGl0by1zd2l0Y2gtYnV0dG9uYFxuICAtLXN3aXRjaC13aWR0aDogNHJlbTtcbiAgLS1zd2l0Y2gtaGVpZ2h0OiAycmVtO1xuICAtLXN3aXRjaC1tYXJnaW46IDJweDtcbiAgLS1zd2l0Y2gtcGFkZGluZzogM3B4O1xuICAtLXN3aXRjaC1zcGVlZDogMzAwbXM7XG4gIC0tbGFiZWwtbWFyZ2luOiAwLjVlbTtcbiAgLS13aWR0aDogY2FsYyh2YXIoLS1zd2l0Y2gtd2lkdGgpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1oZWlnaHQ6IGNhbGModmFyKC0tc3dpdGNoLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpO1xuICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKTtcblxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KTtcbiAgLy8gVG8gbWFrZSBpbmxpbmUgbGFiZWxzIGFwcGVhciBvbiBjb25zaXN0ZW50IGJhc2VsaW5lOlxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAuZGl0by1zd2l0Y2gtcGFuZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiB2YXIoLS13aWR0aCk7XG4gICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUsXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjNzLCBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLy8gU2V0IGZvbnQtc2l6ZSB0byBoZWlnaHQsIHNvIHdlIGNhbiB1c2Ugd2lkdGgvaGVpZ2h0ID0gMWVtIGZvciBjaXJjbGU6XG4gICAgZm9udC1zaXplOiBjYWxjKHZhcigtLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLXBhZGRpbmcpKTtcbiAgICB0b3A6IHZhcigtLXN3aXRjaC1wYWRkaW5nKTtcbiAgICBsZWZ0OiB2YXIoLS1zd2l0Y2gtcGFkZGluZyk7XG4gICAgd2lkdGg6IDFlbTtcbiAgICBoZWlnaHQ6IDFlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwLjVlbTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tc3dpdGNoLXNwZWVkKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICB9XG5cbiAgJi5kaXRvLWNoZWNrZWQge1xuICAgIGlucHV0IHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgodmFyKC0tb2Zmc2V0KSk7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgICByaWdodDogdW5zZXQ7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWRpc2FibGVkIHtcbiAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWQ7XG4gIH1cblxuICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKSB7XG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgeyBoIGFzIGNyZWF0ZUVsZW1lbnQsIFRyYW5zaXRpb24gfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBUcmFuc2l0aW9uSGVpZ2h0KHsgZW5hYmxlZCB9LCB7IHNsb3RzIH0pIHtcbiAgcmV0dXJuIGVuYWJsZWRcbiAgICA/IGNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgcHJvcHMsIHNsb3RzKVxuICAgIDogc2xvdHMuZGVmYXVsdCgpXG59XG5cblRyYW5zaXRpb25IZWlnaHQucHJvcHMgPSB7XG4gIGVuYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25IZWlnaHRcblxuY29uc3Qgc2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgcHJvcHMgPSB7XG4gIG5hbWU6ICdoZWlnaHQnLFxuXG4gIG9uQWZ0ZXJFbnRlcihlbGVtZW50KSB7XG4gICAgLy8gQSB0aW1lb3V0IGJlZm9yZSBzZXR0aW5nIHN0eWxlIGlzIG9ubHkgcmVhbGx5IG5lZWRlZCBhZnRlciBjYWxscyB0b1xuICAgIC8vIGBmb3JjZVJlcGFpbnQoKWAsIGJ1dCB1c2luZyBvbmUgaGVyZSB0b28gcHJlc2VydmVzIGV4ZWN1dGlvbiBzZXF1ZW5jZSBzb1xuICAgIC8vIHRoYXQgdGhlIGNhbGwgZnJvbSBgZW50ZXIoKWAgY2FuIG5ldmVyIG91dHJ1biB0aGUgb25lIGZyb20gYGFmdGVyRW50ZXIoKWBcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAnYXV0bycgfSkpXG4gIH0sXG5cbiAgb25FbnRlcihlbGVtZW50KSB7XG4gICAgY29uc3QgeyB3aWR0aCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgIGhlaWdodDogJ2F1dG8nXG4gICAgfSlcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgcG9zaXRpb246IG51bGwsXG4gICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICB9LFxuXG4gIG9uTGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kZHVyYXRpb246IDAuMTVzO1xuXG4uaGVpZ2h0LWVudGVyLWFjdGl2ZSxcbi5oZWlnaHQtbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNpdGlvbjogaGVpZ2h0ICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5oZWlnaHQtZW50ZXItYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBzbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xufVxuXG4uaGVpZ2h0LWxlYXZlLWFjdGl2ZSB7XG4gIGFuaW1hdGlvbjogc2xpZGUtbGVhdmUgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbn1cblxuLmhlaWdodC1lbnRlci1mcm9tLFxuLmhlaWdodC1sZWF2ZS10byB7XG4gIGhlaWdodDogMDtcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBkZWZpbmVDb21wb25lbnQsIHJlZiwgd2F0Y2gsIG9uU2NvcGVEaXNwb3NlLCBoIH0gZnJvbSAndnVlLWRlbWknO1xuaW1wb3J0IHsgY3JlYXRlRm9jdXNUcmFwIH0gZnJvbSAnZm9jdXMtdHJhcCc7XG5pbXBvcnQgeyB1bnJlZkVsZW1lbnQgfSBmcm9tICdAdnVldXNlL2NvcmUnO1xuXG5jb25zdCBVc2VGb2N1c1RyYXAgPSAvKiBAX19QVVJFX18gKi8gLyogI19fUFVSRV9fICovIGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IFwiVXNlRm9jdXNUcmFwXCIsXG4gIHByb3BzOiBbXCJhc1wiLCBcIm9wdGlvbnNcIl0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcbiAgICBsZXQgdHJhcDtcbiAgICBjb25zdCB0YXJnZXQgPSByZWYoKTtcbiAgICBjb25zdCBhY3RpdmF0ZSA9ICgpID0+IHRyYXAgJiYgdHJhcC5hY3RpdmF0ZSgpO1xuICAgIGNvbnN0IGRlYWN0aXZhdGUgPSAoKSA9PiB0cmFwICYmIHRyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHdhdGNoKFxuICAgICAgKCkgPT4gdW5yZWZFbGVtZW50KHRhcmdldCksXG4gICAgICAoZWwpID0+IHtcbiAgICAgICAgaWYgKCFlbClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRyYXAgPSBjcmVhdGVGb2N1c1RyYXAoZWwsIHByb3BzLm9wdGlvbnMgfHwge30pO1xuICAgICAgICBhY3RpdmF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHsgZmx1c2g6IFwicG9zdFwiIH1cbiAgICApO1xuICAgIG9uU2NvcGVEaXNwb3NlKCgpID0+IGRlYWN0aXZhdGUoKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzbG90cy5kZWZhdWx0KVxuICAgICAgICByZXR1cm4gaChwcm9wcy5hcyB8fCBcImRpdlwiLCB7IHJlZjogdGFyZ2V0IH0sIHNsb3RzLmRlZmF1bHQoKSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IFVzZUZvY3VzVHJhcCB9O1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRpYWxvZyhcbiAgcmVmPVwiZGlhbG9nXCJcbiAgcm9sZT1cImRpYWxvZ1wiXG4gIGFyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJcbiAgYXJpYS1tb2RhbD1cInRydWVcIlxuICA6c3R5bGU9XCJ7ICctLXdpZHRoJzogYCR7c2V0dGluZ3Mud2lkdGh9cHhgIH1cIlxuICBAbW91c2V1cD1cIm9uTW91c2VVcFwiXG4pXG4gIFVzZUZvY3VzVHJhcC5kaXRvLWRpYWxvZ19fZm9jdXMtdHJhcChcbiAgICA6b3B0aW9ucz1cInsgaW1tZWRpYXRlOiB0cnVlLCBmYWxsYmFja0ZvY3VzOiAoKSA9PiAkcmVmcy5kaWFsb2cgfVwiXG4gIClcbiAgICBmb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgICAgIEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiXG4gICAgKVxuICAgICAgRGl0b1NjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgVXNlRm9jdXNUcmFwIH0gZnJvbSAnQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlRm9jdXNUcmFwL2NvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRGlhbG9nJywge1xuICBjb21wb25lbnRzOiB7IFVzZUZvY3VzVHJhcCB9LFxuICBlbWl0czogWydyZW1vdmUnXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzZXR0aW5nczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgd2lkdGg6IDQ4MCxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBNYWtlIHN1cmUgZGlhbG9nIGRhdGEgY29udGFpbnMgYWxsIHRoZSBleHBlY3RlZCBrZXlzXG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IGNsb25lKHRoaXMuZGF0YSlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBkaWFsb2dEYXRhKSkge1xuICAgICAgICBkaWFsb2dEYXRhW2tleV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB3aW5kb3dFdmVudHM6IG51bGwsXG4gICAgICBkaWFsb2dEYXRhXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYnV0dG9uU2NoZW1hcykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoKHRoaXMuaGFzQ2FuY2VsIHx8ICF0aGlzLmhhc0J1dHRvbnMpICYmIGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgncmVtb3ZlJylcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgdGhpcy5yZXNvbHZlKG51bGwpXG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgdGhpcy5jYW5jZWwoKVxuICAgIH0sXG5cbiAgICBvbk1vdXNlVXAoKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5jbGlja1RvQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGlhbG9nIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBpbnNldDogMDtcbiAgei1pbmRleDogMjAwMDtcbiAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC8vIFByZXZlbnQgc2Nyb2xsaW5nIG9mIHRoZSBwYWdlIGJlaGluZCB0aGUgZGlhbG9nOlxuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG5cbiAgJl9fZm9jdXMtdHJhcCB7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgfVxuXG4gIC8vIFRPRE86IGAmX19pbm5lcmBcbiAgZm9ybSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLCA0ODBweCk7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICBib3gtc2hhZG93OiAwIDIwcHggNjBweCAtMnB4IHJnYmEoMjcsIDMzLCA1OCwgMC40KTtcbiAgfVxufVxuXG4uZGl0by1kaWFsb2ctZW50ZXItYWN0aXZlLFxuLmRpdG8tZGlhbG9nLWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXM7XG5cbiAgZm9ybSB7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMjVzO1xuICB9XG59XG5cbi5kaXRvLWRpYWxvZy1lbnRlci1mcm9tLFxuLmRpdG8tZGlhbG9nLWxlYXZlLXRvIHtcbiAgb3BhY2l0eTogMDtcblxuICBmb3JtIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbUhhbmRsZXJzOiBbXVxuICAgIH1cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbW92ZSB9IG9mIHRoaXMuZG9tSGFuZGxlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICAgIHRoaXMuZG9tSGFuZGxlcnMgPSBbXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb21PbihlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRFdmVudHMoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlzT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgW3R5cGVdOiBoYW5kbGVyIH1cbiAgICAgIClcbiAgICAgIHRoaXMuZG9tSGFuZGxlcnMucHVzaChyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcm9vdFxuICBWdWVOb3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgKVxuICBUcmFuc2l0aW9uR3JvdXAobmFtZT1cImRpdG8tZGlhbG9nXCIpXG4gICAgRGl0b0RpYWxvZyhcbiAgICAgIHYtZm9yPVwiKGRpYWxvZywga2V5KSBpbiBkaWFsb2dzXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOmNvbXBvbmVudHM9XCJkaWFsb2cuY29tcG9uZW50c1wiXG4gICAgICA6YnV0dG9ucz1cImRpYWxvZy5idXR0b25zXCJcbiAgICAgIDpwcm9taXNlPVwiZGlhbG9nLnByb21pc2VcIlxuICAgICAgOmRhdGE9XCJkaWFsb2cuZGF0YVwiXG4gICAgICA6c2V0dGluZ3M9XCJkaWFsb2cuc2V0dGluZ3NcIlxuICAgICAgQHJlbW92ZT1cInJlbW92ZURpYWxvZyhrZXkpXCJcbiAgICApXG4gIERpdG9NZW51XG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIERpdG9IZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgICBEaXRvQWNjb3VudChcbiAgICAgICAgdi1pZj1cInVzZXJcIlxuICAgICAgKVxuICAgICAgYS5kaXRvLWxvZ2luKFxuICAgICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICAgIClcbiAgICAgICAgc3BhbiBMb2dpblxuICAgIFJvdXRlclZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBhc0FycmF5LCBtYXBDb25jdXJyZW50bHksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERpdG9EaWFsb2cgZnJvbSAnLi9EaXRvRGlhbG9nLnZ1ZSdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQge1xuICBwcm9jZXNzVmlldyxcbiAgcmVzb2x2ZVNjaGVtYXMsXG4gIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUm9vdCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IERpdG9EaWFsb2cgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgcmVtb3ZlUm91dGVzOiBudWxsLFxuICAgICAgZGlhbG9nczoge30sXG4gICAgICBhbGxvd0xvZ2luOiBmYWxzZSxcbiAgICAgIGxvYWRpbmdDb3VudDogMFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5ub3RpZmljYXRpb25zXG4gICAgfSxcblxuICAgIGlzTG9hZGluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdDb3VudCA+IDBcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmFwcFN0YXRlLnRpdGxlID0gZG9jdW1lbnQudGl0bGUgfHwgJ0RpdG8uanMgQWRtaW4nXG4gICAgLy8gV2l0aCBob3QtcmVsb2FkaW5nLCBpdCBsb29rcyBsaWtlIGRlc3Ryb3llZCBob29rcyBhcmVuJ3QgYWx3YXlzIGNhbGxlZFxuICAgIC8vIGZvciByb3V0ZSBjb21wb25lbnRzIHNvIHJlc2V0IHRoZSBhcnJheSBvZiByZWdpc3RlcmVkIGNvbXBvbmVudHMgaW5zdGVhZC5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cyA9IFtdXG4gIH0sXG5cbiAgYXN5bmMgbW91bnRlZCgpIHtcbiAgICAvLyBDbGVhciB0aGUgbGFiZWwgbWFya2VkIGFzIGFjdGl2ZSBvbiBhbGwgbW91c2UgYW5kIGtleWJvYXJkIGV2ZW50cywgZXhjZXB0XG4gICAgLy8gdGhlIG9uZXMgdGhhdCBEaXRvTGFiZWwgaXRzZWxmIGludGVyY2VwdHMuXG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY2xpY2s6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCFldmVudC50YXJnZXQuY2xvc2VzdCgnLmRpdG8tbGFiZWwnKSkge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGtleXVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSAnVGFiJykge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSBmYWxzZVxuICAgICAgaWYgKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICB9XG4gICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBub3RpZnkoeyB0eXBlID0gJ2luZm8nLCB0aXRsZSwgdGV4dCB9ID0ge30pIHtcbiAgICAgIHRpdGxlIHx8PSAoXG4gICAgICAgIHtcbiAgICAgICAgICB3YXJuaW5nOiAnV2FybmluZycsXG4gICAgICAgICAgZXJyb3I6ICdFcnJvcicsXG4gICAgICAgICAgaW5mbzogJ0luZm9ybWF0aW9uJyxcbiAgICAgICAgICBzdWNjZXNzOiAnU3VjY2VzcydcbiAgICAgICAgfVt0eXBlXSB8fFxuICAgICAgICAnTm90aWZpY2F0aW9uJ1xuICAgICAgKVxuICAgICAgdGV4dCA9IGA8cD4ke1xuICAgICAgICBhc0FycmF5KHRleHQpLmpvaW4oJzwvcD4gPHA+JylcbiAgICAgIH08L3A+YC5yZXBsYWNlKC9cXG58XFxyXFxufFxcci9nLCAnPGJyPicpXG4gICAgICBjb25zdCBsb2cgPSAoXG4gICAgICAgIHtcbiAgICAgICAgICB3YXJuaW5nOiAnd2FybicsXG4gICAgICAgICAgZXJyb3I6ICdlcnJvcicsXG4gICAgICAgICAgaW5mbzogJ2xvZycsXG4gICAgICAgICAgc3VjY2VzczogJ2xvZydcbiAgICAgICAgfVt0eXBlXSB8fFxuICAgICAgICAnZXJyb3InXG4gICAgICApXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZVtsb2ddKHN0cmlwVGFncyh0ZXh0KSlcbiAgICAgIGNvbnN0IHsgbm90aWZpY2F0aW9ucyA9IHRydWUgfSA9IHRoaXMuYXBpXG4gICAgICBpZiAobm90aWZpY2F0aW9ucykge1xuICAgICAgICAvLyBDYWxjdWxhdGUgZGlzcGxheS1kdXJhdGlvbiBmb3IgdGhlIG5vdGlmaWNhdGlvbiBiYXNlZCBvbiBpdHMgY29udGVudFxuICAgICAgICAvLyBhbmQgdGhlIHNldHRpbmcgb2YgdGhlIGBkdXJhdGlvbkZhY3RvcmAgY29uZmlndXJhdGlvbi4gSXQgZGVmaW5lcyB0aGVcbiAgICAgICAgLy8gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBtdWx0aXBsaWVkIHdpdGggdGhlIGFtb3VudCBvZiBjaGFyYWN0ZXJzXG4gICAgICAgIC8vIGRpc3BsYXllZCBpbiB0aGUgbm90aWZpY2F0aW9uLCBwbHVzIDQwICg0MCArIHRpdGxlICsgbWVzc2FnZSk6XG4gICAgICAgIGNvbnN0IHsgZHVyYXRpb25GYWN0b3IgPSAyMCB9ID0gbm90aWZpY2F0aW9uc1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9ICg0MCArIHRleHQubGVuZ3RoICsgdGl0bGUubGVuZ3RoKSAqIGR1cmF0aW9uRmFjdG9yXG4gICAgICAgIHRoaXMuJG5vdGlmeSh7IHR5cGUsIHRpdGxlLCB0ZXh0LCBkdXJhdGlvbiB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGVzdHJveUFsbCgpXG4gICAgfSxcblxuICAgIHJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMubG9hZGluZ0NvdW50ICs9IGlzTG9hZGluZyA/IDEgOiAtMVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHsgY29tcG9uZW50cywgYnV0dG9ucywgZGF0YSwgc2V0dGluZ3MgfSkge1xuICAgICAgLy8gU2hvd3MgYSBkaXRvLWRpYWxvZyBjb21wb25lbnQgYW5kIHdyYXBzIGl0IGluIGEgcHJvbWlzZSBzbyB0aGF0IHRoZVxuICAgICAgLy8gYnV0dG9ucyBpbiB0aGUgZGlhbG9nIGNhbiB1c2UgYGRpYWxvZy5yZXNvbHZlKClgIGFuZCBgZGlhbG9nLnJlamVjdCgpYFxuICAgICAgLy8gdG8gY2xvc2UgdGhlIG1vZGFsIGRpYWxvZyBhbmQgcmVzb2x2ZSAvIHJlamVjdCB0aGUgcHJvbWlzZSBhdCBvbmNlLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxuICAgICAgICBhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgLy8gUHJvY2VzcyBjb21wb25lbnRzIHRvIHJlc29sdmUgYXN5bmMgc2NoZW1hcy5cbiAgICAgICAgICBjb25zdCByb3V0ZXMgPSBbXVxuICAgICAgICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKHRoaXMuYXBpLCB7IGNvbXBvbmVudHMgfSwgcm91dGVzLCAwKVxuICAgICAgICAgIGlmIChyb3V0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnRGlhbG9ncyBkbyBub3Qgc3VwcG9ydCBjb21wb25lbnRzIHRoYXQgcHJvZHVjZSByb3V0ZXMnXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGtleSA9IGBkaWFsb2ctJHsrK2RpYWxvZ0lkfWBcbiAgICAgICAgICB0aGlzLmRpYWxvZ3Nba2V5XSA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgICBidXR0b25zLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgICAgcHJvbWlzZTogeyByZXNvbHZlLCByZWplY3QgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICByZW1vdmVEaWFsb2coa2V5KSB7XG4gICAgICBkZWxldGUgdGhpcy5kaWFsb2dzW2tleV1cbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge1xuICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJ1xuICAgICAgICAgICAgLy8gTk9URTogVGhlIGNsaWNrIGV2ZW50IGlzIGFkZGVkIGluIERpdG9EaWFsb2cuYnV0dG9uU2NoZW1hcygpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGxvZ2luOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgIHRleHQ6ICdMb2dpbidcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAobG9naW5EYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5sb2dpbixcbiAgICAgICAgICAgIGRhdGE6IGxvZ2luRGF0YSxcbiAgICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAocmVkaXJlY3RBZnRlckxvZ2luKSB7XG4gICAgICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKHJlZGlyZWN0QWZ0ZXJMb2dpbilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRVc2VyKHJlc3BvbnNlLmRhdGEudXNlcilcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gZXJyLnJlc3BvbnNlPy5kYXRhPy5lcnJvclxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICAgIHRleHQ6IGVycm9yIHx8IGVyclxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5yZXNwb25zZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2dpbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbmF2aWdhdGVIb21lKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUoJy8nKVxuICAgIH0sXG5cbiAgICBhc3luYyBsb2dvdXQoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5sb2dvdXQsXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuc2V0VXNlcihudWxsKVxuICAgICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFVzZXIoKSB7XG4gICAgICBsZXQgdXNlciA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLnNlc3Npb24sXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgdXNlciA9IHJlc3BvbnNlLmRhdGEudXNlciB8fCBudWxsXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgdGV4dDogZXJyXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICB0aGlzLnNldFVzZXIodXNlcilcbiAgICAgIHJldHVybiB1c2VyXG4gICAgfSxcblxuICAgIHNldFVzZXIodXNlcikge1xuICAgICAgdGhpcy5hcHBTdGF0ZS51c2VyID0gKFxuICAgICAgICB1c2VyICYmXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih1c2VyLCBEaXRvVXNlci5wcm90b3R5cGUpXG4gICAgICApXG4gICAgICAvLyBDbGVhciByZXNvbHZlZCB2aWV3cyB3aGVuIHVzZXIgaXMgbG9nZ2VkIG91dC5cbiAgICAgIGlmICghdXNlcikge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSB7fVxuICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVuc3VyZVVzZXIoKSB7XG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmZldGNoVXNlcigpKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZVZpZXdzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXModGhpcy51bnJlc29sdmVkVmlld3MpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIWVycm9yLnJlcXVlc3QpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICAgIC8vIENvbGxlY3QgYWxsIHJvdXRlcyBmcm9tIHRoZSByb290IHNjaGVtYSBjb21wb25lbnRzXG4gICAgICBjb25zdCByb3V0ZXMgPSBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb2x2ZWRWaWV3cyksXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4gcHJvY2Vzc1ZpZXcoRGl0b1ZpZXcsIHRoaXMuYXBpLCBzY2hlbWEsIG5hbWUpXG4gICAgICApXG4gICAgICAvLyBOb3cgdGhhdCB0aGUgcm91dGVzIGFyZSBsb2FkZWQsIHJlcGxhY2UgYWxsIGV4aXN0aW5nIHJvdXRlcyB3aXRoIHRoZVxuICAgICAgLy8gbmV3IHJvdXRlcywgYW5kIHJlc3RvcmUgdGhlIGN1cnJlbnQgcGF0aC5cbiAgICAgIGNvbnN0IHsgZnVsbFBhdGggfSA9IHRoaXMuJHJvdXRlXG4gICAgICB0aGlzLnJlbW92ZVJvdXRlcz8uKClcbiAgICAgIHRoaXMucmVtb3ZlUm91dGVzID0gYWRkUm91dGVzKHRoaXMuJHJvdXRlciwgW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3Jvb3QnLFxuICAgICAgICAgIHBhdGg6ICcvJyxcbiAgICAgICAgICBjb21wb25lbnRzOiB7fVxuICAgICAgICB9LFxuICAgICAgICAuLi5yb3V0ZXNcbiAgICAgIF0pXG4gICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZShmdWxsUGF0aClcbiAgICB9XG4gIH1cbn0pXG5cbmxldCBkaWFsb2dJZCA9IDBcblxuZnVuY3Rpb24gYWRkUm91dGVzKHJvdXRlciwgcm91dGVzKSB7XG4gIGNvbnN0IHJlbW92ZXJzID0gW11cbiAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICBjb25zdCByZW1vdmVSb3V0ZSA9IHJvdXRlci5hZGRSb3V0ZShyb3V0ZSlcbiAgICByZW1vdmVycy5wdXNoKHJlbW92ZVJvdXRlKVxuICB9XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IHJlbW92ZSBvZiByZW1vdmVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9zdHlsZSc7XG5cbi5kaXRvLWFwcCxcbi5kaXRvLXJvb3Qge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuXG4uZGl0by1yb290IHtcbiAgLmRpdG8tcGFnZSB7XG4gICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAvLyBUaGUgcm9vdC1sZXZlbCB2aWV3cyBhbmQgZm9ybXMgbWF5IGhhdmUgYSBgLmRpdG8tc2NoZW1hLWhlYWRlcmAgdGhhdFxuICAgIC8vIHNob3VsZCBhcHBlYXIgbGF5ZXJlZCBvdmVyIGAuZGl0by1tZW51YCwgd2hpbGUgaGF2aW5nIGBvdmVybGF5OiBoaWRkZW5gXG4gICAgLy8gc2V0IGJ5IGAuZGl0by1zY3JvbGwtcGFyZW50YCB0byBkZWxlZ2F0ZSBzY3JvbGxpbmcgdG8gYC5kaXRvLXNjcm9sbGAuXG4gICAgLy8gSW4gb3JkZXIgdG8gbm90IGhhdmUgdGhlIGhlYWRlciBjbGlwcGVkLCBhZGp1c3QgdGhlIHRvcCBoZXJlOlxuICAgID4gLmRpdG8tZm9ybSxcbiAgICA+IC5kaXRvLXZpZXcge1xuICAgICAgbWFyZ2luLXRvcDogLSRtZW51LWhlaWdodDtcbiAgICAgIHBhZGRpbmctdG9wOiAkbWVudS1oZWlnaHQ7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbm5hdi5kaXRvLW1lbnUuZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIHVsLmRpdG8tc2Nyb2xsXG4gICAgbGkoXG4gICAgICB2LWZvcj1cInZpZXcgaW4gdmlld3NcIlxuICAgIClcbiAgICAgIFJvdXRlckxpbmsoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICB2LXNsb3Q9XCJ7IGlzQWN0aXZlLCBocmVmLCByb3V0ZSB9XCJcbiAgICAgICAgY3VzdG9tXG4gICAgICAgIDp0bz1cImAvJHt2aWV3LnBhdGh9YFwiXG4gICAgICApXG4gICAgICAgIGEuZGl0by1saW5rKFxuICAgICAgICAgIDpocmVmPVwiaHJlZlwiXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbiAgICAgICAgICBAY2xpY2sucHJldmVudD1cIm9uQ2xpY2tMaW5rKHJvdXRlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9NZW51Jywge1xuICBtZXRob2RzOiB7XG4gICAgb25DbGlja0xpbmsocm91dGUpIHtcbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgLi4ucm91dGUsIGZvcmNlOiB0cnVlIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbWVudSB7XG4gIGZsZXg6IGluaXRpYWw7XG4gIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICB1bCB7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXN0eWxlO1xuICB9XG5cbiAgYSxcbiAgaDEge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgaDEge1xuICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmc7XG4gICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXI7XG4gICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1kYXJrZXN0O1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gIH1cblxuICAuZGl0by1saW5rIHtcbiAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nO1xuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodDtcblxuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLWxpbmsge1xuICAmOmZvY3VzOm5vdCg6YWN0aXZlLCAuZGl0by1hY3RpdmUpIHtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNwaW5uZXIoXG4gIHYtc2hvdz1cImxvYWRpbmdcIlxuKVxuICAvLy0gVE9ETzogQ29udmVydCB0byBCRU1cbiAgLnYtcHVsc2Uudi1wdWxzZTEoOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSwgc3Bpbm5lckRlbGF5MV1cIilcbiAgLnYtcHVsc2Uudi1wdWxzZTIoOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSwgc3Bpbm5lckRlbGF5Ml1cIilcbiAgLnYtcHVsc2Uudi1wdWxzZTMoOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSwgc3Bpbm5lckRlbGF5M11cIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIzVkYzU5NidcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxNXB4J1xuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMnB4J1xuICAgIH0sXG4gICAgcmFkaXVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTAwJSdcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIHVzaW5nIG9ubHkgY2xhc3Nlc1xuICAgIHJldHVybiB7XG4gICAgICBzcGlubmVyU3R5bGU6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgICB3aWR0aDogdGhpcy5zaXplLFxuICAgICAgICBoZWlnaHQ6IHRoaXMuc2l6ZSxcbiAgICAgICAgbWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgIGFuaW1hdGlvbk5hbWU6ICd2LXB1bHNlU3RyZXRjaERlbGF5JyxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICcwLjc1cycsXG4gICAgICAgIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAnaW5maW5pdGUnLFxuICAgICAgICBhbmltYXRpb25UaW1pbmdGdW5jdGlvbjogJ2N1YmljLWJlemllciguMiwuNjgsLjE4LDEuMDgpJyxcbiAgICAgICAgYW5pbWF0aW9uRmlsbE1vZGU6ICdib3RoJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTE6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjEycydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkyOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4yNHMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mzoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMzZzJ1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5IHtcbiAgMCUsXG4gIDgwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgNDUlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheSB7XG4gIDAlLFxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5uYXYuZGl0by1oZWFkZXJcbiAgLmRpdG8tdHJhaWxcbiAgICB1bFxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1pZj1cImluZGV4ID09PSB0cmFpbC5sZW5ndGggLSAxXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgICAgUm91dGVyTGluay5kaXRvLWJyZWFkY3J1bWIoXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgOnRvPVwiY29tcG9uZW50LnBhdGhcIlxuICAgICAgICApXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgIERpdG9TcGlubmVyKFxuICAgICAgdi1pZj1cImlzTG9hZGluZ1wiXG4gICAgKVxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvU3Bpbm5lciBmcm9tICcuL0RpdG9TcGlubmVyLnZ1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvSGVhZGVyJywge1xuICBjb21wb25lbnRzOiB7IERpdG9TcGlubmVyIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzcGlubmVyOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBpc0xvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyYWlsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLmZpbHRlcihcbiAgICAgICAgY29tcG9uZW50ID0+ICEhY29tcG9uZW50LnJvdXRlUmVjb3JkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc2l6ZSA9ICc4cHgnLFxuICAgICAgY29sb3IgPSAnIzk5OSdcbiAgICB9ID0gdGhpcy5zcGlubmVyIHx8IHt9XG4gICAgLy8gVE9ETzogVGhpcyBpcyBhIGhhY2sgdG8gc2V0IHRoZSBkZWZhdWx0IHByb3BzIGZvciB0aGUgRGl0b1NwaW5uZXIuXG4gICAgLy8gUGFzcyB0aGVtIG9uIHRocm91Z2ggdGhlIHRlbXBsYXRlIGluc3RlYWQhXG4gICAgY29uc3QgeyBwcm9wcyB9ID0gRGl0b1NwaW5uZXJcbiAgICBwcm9wcy5zaXplLmRlZmF1bHQgPSBzaXplXG4gICAgcHJvcHMuY29sb3IuZGVmYXVsdCA9IGNvbG9yXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWRpcnR5JzogY29tcG9uZW50LmlzRGlydHlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1oZWFkZXIge1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItYmxhY2s7XG4gIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplO1xuICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHQ7XG4gIHotaW5kZXg6ICRtZW51LXotaW5kZXg7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIHNwYW4ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nO1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gIH1cblxuICAuZGl0by10cmFpbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGhlaWdodDogM2VtO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nO1xuXG4gICAgdWwge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICB9XG5cbiAgICBhIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZy1yaWdodDogMC40ZW07XG5cbiAgICAgICRhbmdsZTogMzNkZWc7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogIzk5OTk5OTtcbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICB3aWR0aDogMXB4O1xuICAgICAgICBoZWlnaHQ6IDEuMmVtO1xuICAgICAgICByaWdodDogLTFweDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcms7XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgkYW5nbGUpO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3A7XG4gICAgICB9XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgYm90dG9tOiA1MCU7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0kYW5nbGUpO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b207XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc3Bpbm5lciB7XG4gICAgbWFyZ2luLXRvcDogJG1lbnUtcGFkZGluZy12ZXI7XG4gIH1cblxuICAuZGl0by1kaXJ0eSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICB3aWR0aDogOHB4O1xuICAgICAgaGVpZ2h0OiA4cHg7XG4gICAgICBtYXJnaW46IDJweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwLjVlbTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYWNjb3VudCxcbiAgLmRpdG8tbG9naW4ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmRpdG8tYWNjb3VudCB7XG4gICAgbGVmdDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nICogMjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEb21NaXhpbiBmcm9tICcuL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbGRvd246IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgY2hlY2tUaW1lOiB0cnVlLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBtb3VzZWRvd246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblB1bGxkb3duTW91c2VVcChudWxsKSkge1xuICAgICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyczogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3Blbih0cnVlKVxuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93bk1vdXNlVXAodmFsdWUpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnRUaW1lIH0gPSB0aGlzLnB1bGxkb3duXG4gICAgICBpZiAoIXRoaXMuY2hlY2tUaW1lIHx8IHN0YXJ0VGltZSAmJiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDI1MCkpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMub25QdWxsZG93blNlbGVjdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KC8qIHZhbHVlICovKSB7XG4gICAgICAvLyBOT1RFOiBUbyBiZSBvdmVycmlkZGVuLlxuICAgIH0sXG5cbiAgICBzZXRQdWxsZG93bk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5wdWxsZG93bi5vcGVuID0gb3BlblxuICAgICAgdGhpcy5wdWxsZG93bi5zdGFydFRpbWUgPSBvcGVuID8gRGF0ZS5ub3coKSA6IDBcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB0aGlzLnB1bGxkb3duLmV2ZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiKVxuICAgIGxpKFxuICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgKVxuICAgICAgYShcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9BY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlICdsb2dvdXQnOlxuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1hY2NvdW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXB1bGxkb3duIHtcbiAgICB0b3A6ICRwdWxsZG93bi1wYWRkaW5nLXZlcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQoXG4gIHYtaWY9XCJjb250ZW50XCJcbiAgOmlzPVwib3B0aW9ucy50YWcgfHwgdGFnXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pIHt7IG9wdGlvbnMudGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FbGVtZW50Jywge1xuICBwcm9wczoge1xuICAgIHRhZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzcGFuJyB9LFxuICAgIGNvbnRlbnQ6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgeyBjb250ZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QoY29udGVudCkgPyBjb250ZW50IDogeyB0ZXh0OiBjb250ZW50IH1cbiAgICB9LFxuXG4gICAgY2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLmNsYXNzLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuY2xhc3MpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLnN0eWxlLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuc3R5bGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBhc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gYXNBcnJheSh2YWx1ZSkucmVkdWNlKChvYmplY3QsIGVudHJ5KSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKGVudHJ5KSkge1xuICAgICAgb2JqZWN0W2VudHJ5XSA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGVudHJ5KSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmplY3QsIGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0XG4gIH0sIHt9KVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgOmlzPVwidGFnXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4pXG4gIC5kaXRvLWNoZXZyb24oXG4gICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6ICFjb2xsYXBzZWQgfVwiXG4gIClcbiAgRGl0b0VsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICApXG4gIGxhYmVsKFxuICAgIDpmb3I9XCJkYXRhUGF0aFwiXG4gICAgdi1odG1sPVwidGV4dFwiXG4gIClcbiAgRGl0b0VsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICApXG4gIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0xhYmVsJywge1xuICBlbWl0czogWydleHBhbmQnXSxcblxuICBwcm9wczoge1xuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/ICdhJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHRleHQoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QobGFiZWwpID8gbGFiZWw/LnRleHQgOiBsYWJlbFxuICAgIH0sXG5cbiAgICBwcmVmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnByZWZpeClcbiAgICB9LFxuXG4gICAgc3VmZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5zdWZmaXgpXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/IHsgb25DbGljazogdGhpcy5vbkNsaWNrIH0gOiB7fVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID09PSB0aGlzXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrKCkge1xuICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IHRoaXNcbiAgICAgIHRoaXMuJGVtaXQoJ2V4cGFuZCcsIHRoaXMuY29sbGFwc2VkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWxhYmVsIHtcbiAgLS1sYWJlbC1wYWRkaW5nOiAwO1xuICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBhbGwgaXRlbXMgaW4gdGhlIGxhYmVsLCBlLmcuIGNoZXZyb24sIGVkaXQtYnV0dG9ucy5cbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZyk7XG4gIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmctaGFsZiAwO1xuXG4gIGxhYmVsIHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgY3Vyc29yOiBpbmhlcml0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICBsYWJlbCxcbiAgLmRpdG8tbGFiZWwtcHJlZml4LFxuICAuZGl0by1sYWJlbC1zdWZmaXgge1xuICAgICY6bnRoLWxhc3QtY2hpbGQoMikge1xuICAgICAgLy8gVG8gc3RyZXRjaCBlaXRoZXIgbGFiZWwgb3IgLmRpdG8tbGFiZWwtc3VmZml4IHRvIGZ1bGwgYXZhaWxhYmxlIHdpZHRoXG4gICAgICAvLyBzbyB0aGF0IGJ1dHRvbnMgYWx3YXlzIGFwcGVhciByaWdodC1hbGlnbmVkOlxuICAgICAgZmxleDogMSAxIGF1dG87XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJ1xcYTAnOyAvLyAmbmJzcDs7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tbGFiZWwtcHJlZml4LFxuICAuZGl0by1sYWJlbC1zdWZmaXgge1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuICB9XG5cbiAgLmRpdG8tYnV0dG9ucyB7XG4gICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICBtYXJnaW46IGNhbGMoLTEgKiB2YXIoLS1sYWJlbC1wYWRkaW5nKSk7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZyk7XG4gIH1cblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgLy8gSW4gb3JkZXIgZm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gbGFiZWxzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGxheW91dCxcbiAgICAvLyB3ZSBuZWVkIHRvIHBvc2l0aW9uIGl0IGFic29sdXRlbHkgaW5zaWRlIGl0cyBjb250YWluZXIuXG4gICAgbGFiZWwge1xuICAgICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICBjb250ZW50OiAnXFwyMDBiJzsgLy8gemVyby13aWR0aCBzcGFjZTtcbiAgICB9XG4gIH1cbn1cblxuYS5kaXRvLWxhYmVsIHtcbiAgJjpob3ZlciB7XG4gICAgLmRpdG8tY2hldnJvbiB7XG4gICAgICBjb2xvcjogJGNvbG9yLWRhcmtlcjtcbiAgICB9XG4gIH1cblxuICAmOmZvY3VzOm5vdCg6YWN0aXZlLCAuZGl0by1hY3RpdmUpIHtcbiAgICAuZGl0by1jaGV2cm9uIHtcbiAgICAgIC13ZWJraXQtdGV4dC1zdHJva2U6ICRib3JkZXItd2lkdGggJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gICAgLy8gRGlzcGxheSBsYWJlbHMgaW4gY29tcGFjdCBzY2hlbWEgYXMgaW5saW5lLWJsb2NrcywgdG8gYWxsb3cgY29tcGFjdFxuICAgIC8vIGxheW91dHMgd2l0aCBgd2lkdGg6ICdhdXRvJ2AgZWxlbWVudHM6XG4gICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gY29udHJvbCB0aGlzIGJlaGF2aW9yLlxuICB9XG59XG5cbi5kaXRvLXNjaGVtYS1jb21wYWN0IHtcbiAgPiAuZGl0by1zY2hlbWEtY29udGVudCB7XG4gICAgPiAuZGl0by1wYW5lIHtcbiAgICAgID4gLmRpdG8tY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLFxuICBnZXRJdGVtSWQsXG4gIGdldEl0ZW1VaWQsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICAgIGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAgIChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IGluZGV4IDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRJdGVtTGFiZWwoc291cmNlU2NoZW1hLCBpdGVtLCB7XG4gICAgICBpbmRleCA9IG51bGwsXG4gICAgICBleHRlbmRlZCA9IGZhbHNlLFxuICAgICAgYXNPYmplY3QgPSBmYWxzZVxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgeyBpdGVtTGFiZWwgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKCFpdGVtIHx8ICFleHRlbmRlZCAmJiBpdGVtTGFiZWwgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhUGF0aFxuICAgICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoKSA9PlxuICAgICAgICAoZGF0YVBhdGggfHw9IHRoaXMuZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpKVxuXG4gICAgICBsZXQgZm9ybUxhYmVsXG4gICAgICBjb25zdCBnZXRGb3JtTGFiZWwgPSAoKSA9PlxuICAgICAgICAoZm9ybUxhYmVsIHx8PSB0aGlzLmdldExhYmVsKFxuICAgICAgICAgIGdldEl0ZW1Gb3JtU2NoZW1hKHNvdXJjZVNjaGVtYSwgaXRlbSwgdGhpcy5jb250ZXh0KVxuICAgICAgICApKVxuXG4gICAgICBsZXQgdGV4dFxuICAgICAgbGV0IHByZWZpeFxuICAgICAgbGV0IHN1ZmZpeFxuICAgICAgaWYgKGlzRnVuY3Rpb24oaXRlbUxhYmVsKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1MYWJlbC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICBpbmRleCxcblxuICAgICAgICAgICAgZ2V0IGRhdGFQYXRoKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RGF0YVBhdGgoKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1MYWJlbCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBpZiAoaXNPYmplY3QobGFiZWwpKSB7XG4gICAgICAgICAgOyh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiAhKGl0ZW1MYWJlbCBpbiBpdGVtKSkge1xuICAgICAgICAvLyBgaXRlbUxhYmVsYCBjYW4gYmUgYm90aCBhIGtleSwgb3Igc2ltcGx5IGEgbGFiZWwuXG4gICAgICAgIHRleHQgPSBpdGVtTGFiZWxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgLy8gSWYgbm8gbGFiZWwgd2FzIGZvdW5kIHNvIGZhciwgdHJ5IHRvIHByb2R1Y2Ugb25lIGZyb20gdGhlIGluZGV4LlxuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgdGV4dCA9XG4gICAgICAgICAgaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgID8gKHRleHQgPSBgJHtpbmRleCArIDF9YClcbiAgICAgICAgICAgIDogJydcbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0ID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9IDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnNsb3QobmFtZT1cImJlZm9yZVwiKVxuLmRpdG8tc2NoZW1hKFxuICB2LWJpbmQ9XCIkYXR0cnNcIlxuKVxuICAuZGl0by1zY2hlbWEtY29udGVudFxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtbWVudS1oZWFkZXInOiBtZW51SGVhZGVyIH1cIlxuICAgIClcbiAgICAgIERpdG9MYWJlbChcbiAgICAgICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgOmNvbGxhcHNlZD1cIiFvcGVuZWRcIlxuICAgICAgICBAZXhwYW5kPVwib25FeHBhbmRcIlxuICAgICAgKVxuICAgICAgICAvLy0gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiaW5saW5lZFwiXG4gICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICApXG4gICAgICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gICAgICBEaXRvVGFicyhcbiAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICA6c2VsZWN0ZWRUYWI9XCJzZWxlY3RlZFRhYlwiXG4gICAgICApXG4gICAgICBEaXRvQ2xpcGJvYXJkKFxuICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgIClcbiAgICAgIERpdG9QYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgICAgcmVmPVwidGFic1wiXG4gICAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgICA6dmlzaWJsZT1cInNlbGVjdGVkVGFiID09PSB0YWJcIlxuICAgICAgICA6dGFiPVwidGFiXCJcbiAgICAgICAgOnNjaGVtYT1cInRhYlNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgVHJhbnNpdGlvbkhlaWdodCg6ZW5hYmxlZD1cImlubGluZWRcIilcbiAgICAgIERpdG9QYW5lLmRpdG8tcGFuZS1tYWluKFxuICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgKVxuICB0ZW1wbGF0ZShcbiAgICB2LWlmPVwiaW5saW5lZFwiXG4gIClcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICApXG4gIHRlbXBsYXRlKFxuICAgIHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCJcbiAgKVxuICAgIERpdG9QYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxFbnRyaWVzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbnNsb3QobmFtZT1cImFmdGVyXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb24sXG4gIGlzUmVnRXhwLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldFBhbmVsRW50cmllcyxcbiAgc2V0RGVmYXVsdFZhbHVlcyxcbiAgcHJvY2Vzc0RhdGFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY2hlbWEnLCB7XG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVHJhbnNpdGlvbkhlaWdodCB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJyRzY2hlbWFQYXJlbnRDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBtZW51SGVhZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICByZXR1cm4ge1xuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIHByb3ZpZGUgbW9yZSBkYXRhIHRocm91Z2ggYHNjaGVtYS5kYXRhYCwgdnVlLXN0eWxlOlxuICAgICAgLi4uKFxuICAgICAgICBkYXRhICYmIGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgICA/IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICAgIDogZGF0YVxuICAgICAgKSxcbiAgICAgIGNvbXBvbmVudHNSZWdpc3RyeToge30sXG4gICAgICBwYW5lc1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVsc1JlZ2lzdHJ5OiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHNjaGVtYUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFyZW50IHNjaGVtYSBpcyB0aGlzIHNjaGVtYSBoYW5kbGVzIGl0cyBvd25cbiAgICAgIC8vIGRhdGEuIFRoaXMgcHJldmVudHMgZGVsZWdhdGluZyBldmVudHMgdG8gdGhlIHBhcmVudCwgYW5kIHJlZ2lzdGVyaW5nXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggdGhlIHBhcmVudCB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIHNldCBpc0RpcnR5IGZsYWdzLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IG51bGwgOiB0aGlzLnBhcmVudENvbXBvbmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFuZWxFbnRyaWVzKCkge1xuICAgICAgY29uc3QgcGFuZWxFbnRyaWVzID0gZ2V0UGFuZWxFbnRyaWVzKHRoaXMuc2NoZW1hLnBhbmVscywgJycpXG4gICAgICBmb3IgKGNvbnN0IHBhbmUgb2YgdGhpcy5wYW5lcykge1xuICAgICAgICBwYW5lbEVudHJpZXMucHVzaCguLi5wYW5lLnBhbmVsRW50cmllcylcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYW5lbEVudHJpZXNcbiAgICB9LFxuXG4gICAgdGFicygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEudGFicylcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICBjb25zdCBjdXJyZW50VGFiID0gdGhpcy4kcm91dGUuaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgICAgY29uc3QgdGFiID1cbiAgICAgICAgY3VycmVudFRhYiAmJiB0aGlzLnNob3VsZFJlbmRlcih0aGlzLnRhYnNbY3VycmVudFRhYl0pXG4gICAgICAgICAgPyBjdXJyZW50VGFiXG4gICAgICAgICAgOiB0aGlzLmRlZmF1bHRUYWI/Lm5hbWUgfHwgbnVsbFxuICAgICAgaWYgKHRhYiAhPT0gY3VycmVudFRhYikge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgd2F0Y2hlciFcbiAgICAgICAgLy8gQW55IHRhYiBjaGFuZ2UgbmVlZHMgdG8gYmUgcmVmbGVjdGVkIGluIHRoZSByb3V0ZXIgYWxzby5cbiAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBoYXNoOiBgIyR7dGFifWAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YWJcbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0VGFiIH0gPSB0YWJcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpXG4gICAgICAgICAgICAgID8gZGVmYXVsdFRhYih0aGlzLmNvbnRleHQpXG4gICAgICAgICAgICAgIDogZGVmYXVsdFRhYlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0XG4gICAgfSxcblxuICAgIGNsaXBib2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYT8uY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdzZXJ2ZXInLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGNsaXBib2FyZERhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAuLi50aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzLlxuICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgYXM6XG4gICAgLy8gcmV0dXJuIGdldEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudERhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkYXRlZClcbiAgICB9LFxuXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMubGFiZWwgfHwgdGhpcy5jb2xsYXBzaWJsZVxuICAgIH0sXG5cbiAgICBoYXNUYWJzKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlubGluZWQgJiYgISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaGFzTWFpblBhbmUoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gISFjb21wb25lbnRzICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgb3BlbmVkOiBnZXRTdG9yZUFjY2Vzc29yKCdvcGVuZWQnLCB7XG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sbGFwc2VkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gICAgLy8gRGVsZWdhdGUgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIHBhcmVudCBzY2hlbWE6XG4gICAgdGhpcy5kZWxlZ2F0ZSgnY2hhbmdlJywgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQpXG4gICAgdGhpcy5lbWl0RXZlbnQoJ2luaXRpYWxpemUnKSAvLyBOb3QgYCdjcmVhdGUnYCwgc2luY2UgdGhhdCdzIGZvciBkYXRhLlxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmVtaXRFdmVudCgnZGVzdHJveScpXG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKFxuICAgICAgICB0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzQnlOYW1lKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeU5hbWUobmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50KGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25FeHBhbmQoZXhwYW5kKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnZXhwYW5kJywge1xuICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBleHBvc2UgdGhpcyBvbiBEaXRvQ29udGV4dD9cbiAgICAgICAgY29udGV4dDogeyBleHBhbmQgfVxuICAgICAgfSlcbiAgICAgIC8vIFByZXZlbnQgY2xvc2luZyB0aGUgc2NoZW1hIHdpdGggaW52YWxpZCBkYXRhLCBzaW5jZSB0aGUgaW4tY29tcG9uZW50XG4gICAgICAvLyB2YWxpZGF0aW9uIHdpbGwgbm90IGJlIGV4ZWN1dGVkIG9uY2UgaXQncyBjbG9zZWQuXG5cbiAgICAgIC8vIFRPRE86IE1vdmUgdmFsaWRhdGlvbiBvdXQgb2YgY29tcG9uZW50cywgdG8gc2NoZW1hLCBqdXN0IGxpa2VcbiAgICAgIC8vIHByb2Nlc3NpbmcsIGFuZCB1c2UgYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIGZvciB0aGUgcmVzdWx0aW5nIGVycm9ycyxcbiAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoaXMgcmVxdWlyZW1lbnQsIHNpbmNlIHdlIGNhbiB2YWxpZGF0ZSBjbG9zZWQgZm9ybXMgYW5kXG4gICAgICAvLyBzY2hlbWFzIHRoZW4uXG4gICAgICBpZiAoIXRoaXMub3BlbmVkIHx8IGV4cGFuZCB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBleHBhbmRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJylcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5mb2N1cygpXG4gICAgICB0aGlzLm9wZW5lZCA9IHRydWVcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuZm9jdXMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGNvbnN0IHVubWF0Y2hlZCA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgZXJyc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JzKSkge1xuICAgICAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGEgZGF0YS1yb290LCBwcmVmaXggaXRzIG93biBkYXRhUGF0aCB0byBhbGwgZXJyb3JzLFxuICAgICAgICAvLyBzaW5jZSB0aGUgZGF0YSB0aGF0IGl0IHNlbmRzIGFuZCB2YWxpZGF0ZXMgd2lsbCBiZSB1bnByZWZpeGVkLlxuICAgICAgICBjb25zdCBmdWxsRGF0YVBhdGggPSB0aGlzLmhhc093bkRhdGFcbiAgICAgICAgICA/IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICAgIDogZGF0YVBhdGhcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5oYXNPd25EYXRhLCBmdWxsRGF0YVBhdGgpXG4gICAgICAgIC8vIENvbnZlcnQgZnJvbSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvbiwgdG8gb3VyIG93biBmb3JtXG4gICAgICAgIC8vIG9mIHJlbGF0aXZlIEpTT04gcG9pbnRlcnMgYXMgZGF0YS1wYXRoczpcbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZnVsbERhdGFQYXRoKVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgYXdhaXQgY29tcG9uZW50Lm5hdmlnYXRlVG9Db21wb25lbnQ/LihcbiAgICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICAgIHN1YkNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJycyA9IGVycm9yc1tjb21wb25lbnQuZGF0YVBhdGhdXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJycyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKVxuICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgZm9ybSB0byBkaXNwbGF5IGF0IGxlYXN0IHBhcnRzIGZvIHRoZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbGwgZXJyb3JzIGF0IG9uY2UsIHNvIHdlJ3JlIGRvbmUuIERvbid0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBgbm90aWZ5RXJyb3JzKClgIHlldCwgYXMgd2UgY2FuIG9ubHkgZGlzcGxheSBpdCBvbmNlXG4gICAgICAgICAgICAgICAgLy8gYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIHdhcyBjYWxsZWQgZnJvbSBgRGl0b0Zvcm0ubW91bnRlZCgpYFxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGlsbCBoZXJlLCBzbyBrZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXaGVuIHRoZSBlcnJvciBjYW4ndCBiZSBtYXRjaGVkLCBhZGQgaXQgdG8gYSBsaXN0IG9mIHVubWF0Y2hlZFxuICAgICAgICAgIC8vIGVycm9ycyB3aXRoIGRlY2VudCBtZXNzYWdlLCB0byByZXBvcnQgYXQgdGhlIGVuZC5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhYmVsaXplKHByb3BlcnR5KVxuICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZpZWxkXG4gICAgICAgICAgICAgID8gYFRoZSBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICAgICAgICAgOiBgVGhlICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goYCR7cHJlZml4fSAke2Vyci5tZXNzYWdlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnModW5tYXRjaGVkLmpvaW4oJ1xcbicpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBub3RpZnlFcnJvcnMobWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1ZhbGlkYXRpb24gRXJyb3JzJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZSB8fCAnUGxlYXNlIGNvcnJlY3QgdGhlIGhpZ2hsaWdodGVkIGVycm9ycy4nXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4ndCBzZXQgYHRoaXMuZGF0YSA9IC4uLmAgYmVjYXVzZSBpdCdzIGEgcHJvcGVydHksIGJ1dCB3ZSBjYW4gc2V0XG4gICAgICAvLyBhbGwga25vd24gcHJvcGVydGllcyBvbiBpdCB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5XG4gICAgICAvLyBgc2V0RGVmYXVsdFZhbHVlcygpYCwgYXMgdGhleSBhcmUgYWxsIHJlYWN0aXZlIGFscmVhZHkgZnJvbSB0aGUgc3RhcnRzOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIHNldERlZmF1bHRWYWx1ZXModGhpcy5zY2hlbWEsIHt9LCB0aGlzKSlcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgICB0aGlzLmRhdGFbbmFtZV0gPSBkYXRhW25hbWVdXG4gICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpKSB7XG4gICAgICAgICAgICBjb21wb25lbnQubWFya0RpcnR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZmlsdGVyRGF0YShkYXRhKSB7XG4gICAgICAvLyBGaWx0ZXJzIG91dCBhcnJheXMgYW5kIG9iamVjdHMgdGhhdCBhcmUgYmFjayBieSBkYXRhIHJlc291cmNlc1xuICAgICAgLy8gdGhlbXNlbHZlcywgYXMgdGhvc2UgYXJlIGFscmVhZHkgdGFraW5nIGNhcmUgb2YgdGhyb3VnaCB0aGVpciBvd24gQVBJXG4gICAgICAvLyByZXNvdXJjZSBlbmQtcG9pbnRzIGFuZCBzaG91bGRuJ3QgYmUgc2V0LlxuICAgICAgY29uc3QgY29weSA9IHt9XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSlcbiAgICAgICAgICBpZiAoY29tcG9uZW50cy5zb21lKGNvbXBvbmVudCA9PiBjb21wb25lbnQucHJvdmlkZXNEYXRhKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29weVtuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY29weVxuICAgIH0sXG5cbiAgICBwcm9jZXNzRGF0YSh7IHRhcmdldCA9ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5ID0gdHJ1ZSB9ID0ge30pIHtcbiAgICAgIHJldHVybiBwcm9jZXNzRGF0YShcbiAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIERpdG9Db250ZXh0IGhhbmRsaW5nIGluc2lkZSBgcHJvY2Vzc0RhdGFgIGFuZFxuICAgICAgICAgIC8vIGBwcm9jZXNzU2NoZW1hRGF0YSgpYDpcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgc2NoZW1hT25seSxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBgJHNjaGVtYVBhcmVudENvbXBvbmVudCgpYCBpcyBvbmx5IHNldCBpZiBvbmUgb2YgdGhlIGFuY2VzdG9ycyB1c2VzXG4gICAgICAvLyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICAgIHRoaXMuJHNjaGVtYVBhcmVudENvbXBvbmVudCgpPy5fcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5jb21wb25lbnRzUmVnaXN0cnksIGNvbXBvbmVudCwgYWRkKVxuICAgICAgLy8gT25seSByZWdpc3RlciB3aXRoIHRoZSBwYXJlbnQgaWYgc2NoZW1hIHNoYXJlcyBkYXRhIHdpdGggaXQuXG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lKHBhbmUsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVzUmVnaXN0cnksIHBhbmUsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZWwocGFuZWwsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVsc1JlZ2lzdHJ5LCBwYW5lbCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJFbnRyeShyZWdpc3RyeSwgZW50cnksIGFkZCkge1xuICAgICAgY29uc3QgdWlkID0gZW50cnkuJHVpZFxuICAgICAgaWYgKGFkZCkge1xuICAgICAgICByZWdpc3RyeVt1aWRdID0gZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSByZWdpc3RyeVt1aWRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIF9saXN0RW50cmllc0J5RGF0YVBhdGgocmVnaXN0cnkpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlZ2lzdHJ5KS5yZWR1Y2UoKGVudHJpZXNCeURhdGFQYXRoLCBlbnRyeSkgPT4ge1xuICAgICAgICAvLyBNdWx0aXBsZSBlbnRyaWVzIGNhbiBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgZGF0YS1wYXRoLCBlLmcuIHdoZW5cbiAgICAgICAgLy8gdGhlcmUgYXJlIHRhYnMuIExpbmsgZWFjaCBkYXRhLXBhdGggdG8gYW4gYXJyYXkgb2YgZW50cmllcy5cbiAgICAgICAgY29uc3QgeyBkYXRhUGF0aCB9ID0gZW50cnlcbiAgICAgICAgY29uc3QgZW50cmllcyA9IChlbnRyaWVzQnlEYXRhUGF0aFtkYXRhUGF0aF0gfHw9IFtdKVxuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFxuICAgICAgfSwge30pXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCkuc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICA/IHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgICAgIDogdGhpcy5fZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW25vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW2FwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2ZpbHRlckVudHJpZXMoZW50cmllcywgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaCA/IGVudHJpZXMuZmlsdGVyKG1hdGNoKSA6IGVudHJpZXNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY2hlbWEge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAvLyBUbyBkaXNwbGF5IHNjaGVtYSBuZXh0IHRvIHBhbmVsczpcbiAgZGlzcGxheTogZmxleDtcbiAgbWluLWhlaWdodDogMTAwJTtcblxuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICBmbGV4OiAxIDEgMTAwJTtcbiAgICAvLyBTbyB0aGF0IHNjaGVtYSBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG5cbiAgICA+ICo6b25seS1jaGlsZCB7XG4gICAgICBncmlkLXJvdy1lbmQ6IG5vbmU7XG4gICAgfVxuXG4gICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aDtcbiAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nO1xuICB9XG5cbiAgPiAuZGl0by1idXR0b25zLFxuICA+IC5kaXRvLXBhbmVscyB7XG4gICAgZmxleDogMSAxIDAlO1xuICB9XG5cbiAgPiAuZGl0by1idXR0b25zIHtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZztcbiAgfVxuXG4gID4gLmRpdG8tcGFuZWxzIHtcbiAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgJGNvbnRlbnQtcGFkZGluZyAwO1xuICB9XG5cbiAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgLmRpdG8tcGFuZS10YWIgKyAuZGl0by1wYW5lLW1haW4ge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZTtcbiAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW4gdG8gdGhlIHJ1bGVyXG4gICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmcgJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tc2NoZW1hLWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAuZGl0by10YWJzLFxuICAuZGl0by1jbGlwYm9hcmQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7XG4gIH1cblxuICAuZGl0by1jbGlwYm9hcmQge1xuICAgICY6b25seS1jaGlsZCB7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICB9XG5cbiAgICAuZGl0by1idXR0b24ge1xuICAgICAgbWFyZ2luOiAwIDAgJHRhYi1tYXJnaW4gJHRhYi1tYXJnaW47XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLXNjaGVtYS1tZW51LWhlYWRlciB7XG4gICAgLy8gQnJpbmcgdGhlIHRhYnMgdXAgdG8gdGhlIG1lbnUuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGhlaWdodDogJG1lbnUtaGVpZ2h0O1xuICAgIHBhZGRpbmc6IDAgJG1lbnUtcGFkZGluZy1ob3I7XG4gICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aDtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICB6LWluZGV4OiAkbWVudS16LWluZGV4O1xuICAgIC8vIFR1cm4gb2ZmIHBvaW50ZXIgZXZlbnRzIHNvIHRoYXQgRGl0b1RyYWlsIGtlZXBzIHJlY2VpdmluZyBldmVudHMuLi5cbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAvLyAuLi5idXQgYWxsb3cgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdGFicyBhbmQgYnV0dG9ucyAoZS5nLiBjbGlwYm9hcmQpXG4gICAgLy8gbGF5ZXJlZCBvbiB0b3Agb2YgRGl0b1RyYWlsLlxuICAgIC5kaXRvLXRhYnMsXG4gICAgLmRpdG8tYnV0dG9ucyB7XG4gICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodDtcbiAgICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplO1xuICAgIH1cbiAgfVxuXG4gIGJ1dHRvbi5kaXRvLWxhYmVsIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICAvLyBDYXRjaCBhbGwgY2xpY2tzLCBldmVuIHdoZW4gaXQgd291bGQgYmUgcGFydGlhbGx5IGNvdmVyZWQgYnkgc2NoZW1hLlxuICAgIHotaW5kZXg6IDE7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuRGl0b1NjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmdlbmVyYXRlTGFiZWxzPVwiIWlzQ29tcGFjdFwiXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4pXG4gIC8vLSBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2NoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vLSBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNDb21wYWN0IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hSW5saW5lZCcsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gaXNDb21wYWN0KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBhY3QgJiYgISF0aGlzLmxhYmVsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NoZW1hLWlubGluZWQge1xuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyIHtcbiAgICAgIC8vIENoYW5nZSBzcGFjaW5nIHNvIC5kaXRvLWxhYmVsIGNvdmVycyB0aGUgZnVsbCAuZGl0by1zY2hlbWEtaGVhZGVyLlxuICAgICAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZztcblxuICAgICAgLmRpdG8tbGFiZWwge1xuICAgICAgICAvLyBBZGQgcmVtb3ZlZCAkZm9ybS1zcGFjaW5nIGFnYWluXG4gICAgICAgIC0tbGFiZWwtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfTtcblxuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICAgICAgLy8gQmVjYXVzZSB0YWJsZXMgaGF2ZSBhIGZ1bm55IHdheSBvZiBhbGxvd2luZyB0b28gbXVjaCB3aWR0aCBncm93dGg6XG4gICAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGg7XG4gICAgICAgIC8vIFByZXZlbnQgY29sbGFwc2luZyB0byBtaW4taGVpZ2h0IHdoZW4gYWxvbmUgaW5cbiAgICAgICAgLy8gLmRpdG8tc2NoZW1hLWNvbnRlbnQsIGR1ZSB0byBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICAgIG1pbi1oZWlnaHQ6IDJlbTtcbiAgICAgIH1cblxuICAgICAgJiArIC5kaXRvLXBhbmUge1xuICAgICAgICAvLyBOZWVkZWQgZm9yIHRyYW5zaXRpb24taGVpZ2h0IGluIERpdG9TY2hlbWE6XG4gICAgICAgIG1pbi1oZWlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWUvbm8tdGVtcGxhdGUtc2hhZG93IC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmUoXG4gIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICB2LXNob3c9XCJ2aXNpYmxlXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBEaXRvQ29udGFpbmVyKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgIClcbiAgICAuZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0QWxsUGFuZWxFbnRyaWVzLCBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZScsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy50YWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0YWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdmlzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgICAgICBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IG5lc3RlZCA/IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKSA6IHRoaXMuc3RvcmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcGFuZWxFbnRyaWVzKCkge1xuICAgICAgLy8gR2F0aGVyIGFsbCBwYW5lbCBzY2hlbWFzIGZyb20gYWxsIGNvbXBvbmVudCBzY2hlbWFzLCBieSBmaW5kaW5nIHRob3NlXG4gICAgICAvLyB0aGF0IHdhbnQgdG8gcHJvdmlkZSBhIHBhbmVsLiBTZWUgYGdldEFsbFBhbmVsRW50cmllcygpYCBmb3IgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFNjaGVtYXMuZmxhdE1hcChcbiAgICAgICAgKHsgc2NoZW1hLCBuZXN0ZWREYXRhUGF0aDogZGF0YVBhdGggfSkgPT5cbiAgICAgICAgICBnZXRBbGxQYW5lbEVudHJpZXMoXG4gICAgICAgICAgICB0aGlzLmFwaSxcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQsXG4gICAgICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaW5nbGUgJiYgdGhpcy5jb21wb25lbnRTY2hlbWFzLmxlbmd0aCA9PT0gMVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lKHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy50YWIpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBoYXNoOiBgIyR7dGhpcy50YWJ9YCB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGFkZGVkIGJ5IGAuZGl0by1jb250YWluZXJgIGluc2lkZSBgLmRpdG8tcGFuZWA6XG4gIG1hcmdpbjogKC0kZm9ybS1zcGFjaW5nKSAoLSRmb3JtLXNwYWNpbmctaGFsZik7XG4gIC8vIEFkZCByZW1vdmVkIGhvcml6b250YWwgbWFyZ2luIGFnYWluIHRvIG1heC13aWR0aDpcbiAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArIDIgKiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIC8vIFVzZSBgZmxleDogMCVgIGZvciBhbGwgYC5kaXRvLXBhbmVgIGV4Y2VwdCBgLmRpdG8tcGFuZS1tYWluYCxcbiAgLy8gc28gdGhhdCB0aGUgYC5kaXRvLWJ1dHRvbnMtbWFpbmAgY2FuIGJlIG1vdmVkIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b20uXG4gIGZsZXg6IDAlO1xuXG4gICYuZGl0by1wYW5lLW1haW4ge1xuICAgIGZsZXg6IDEwMCU7XG4gIH1cblxuICAuZGl0by1zY2hlbWEtaGVhZGVyOm5vdCguZGl0by1zY2hlbWEtbWVudS1oZWFkZXIpICsgJiB7XG4gICAgLy8gQ2xlYXIgdG9wLW1hcmdpbiBpZiB0aGUgY29tcG9uZW50cyBhcmUgcHJlY2VkZWQgYnkgYSBzY2hlbWEgaGVhZGVyLlxuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cblxuICAuZGl0by1jb250YWluZXItLW9taXQtcGFkZGluZyA+ICYge1xuICAgIC8vIENsZWFyIG1hcmdpbnMgc2V0IGFib3ZlIGFnYWluIGlmIHBhcmVudCBpcyBvbWl0dGluZyBwYWRkaW5nLlxuICAgIG1hcmdpbjogMDtcbiAgICBtYXgtd2lkdGg6IHVuc2V0O1xuICB9XG5cbiAgLmRpdG8tYnJlYWsge1xuICAgIGZsZXg6IDEwMCU7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFjdGlvbih2YWx1ZSkge1xuICBjb25zdCBtYXRjaCA9IChcbiAgICBpc1N0cmluZyh2YWx1ZSkgJiZcbiAgICB2YWx1ZS5tYXRjaCgvXlxccyooWystXT9cXGQrKVxccypcXC9cXHMqKFsrLV0/XFxkKylcXHMqJC8pXG4gIClcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgWywgZGl2aWRlbmQsIGRpdmlzb3JdID0gbWF0Y2hcbiAgICByZXR1cm4gcGFyc2VGbG9hdChkaXZpZGVuZCkgLyBwYXJzZUZsb2F0KGRpdmlzb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbilcbiAgRGl0b0xhYmVsKFxuICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgKVxuICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgOmlzPVwidHlwZUNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICApXG4gIERpdG9FcnJvcnMoOmVycm9ycz1cImVycm9yc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBpc051bWJlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQsIGFsaWduQm90dG9tLCBvbWl0UGFkZGluZyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHBhcnNlRnJhY3Rpb24gfSBmcm9tICcuLi91dGlscy9tYXRoLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Db250YWluZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdHlwZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KHRoaXMuc2NoZW1hLnR5cGUpXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGxhYmVsICE9PSBmYWxzZSAmJiAoXG4gICAgICAgICAgISFsYWJlbCB8fFxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVMYWJlbHMgJiYgdGhpcy50eXBlQ29tcG9uZW50Py5nZW5lcmF0ZUxhYmVsXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNMYWJlbCA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpIDogbnVsbFxuICAgIH0sXG5cbiAgICBsYWJlbERhdGFQYXRoKCkge1xuICAgICAgLy8gVW5uZXN0ZWQgdHlwZXMgZG9uJ3QgaGF2ZSBhIGRhdGFQYXRoIGZvciB0aGVtc2VsdmVzLCBkb24ndCB1c2UgaXQ6XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLmRhdGFQYXRoIDogbnVsbFxuICAgIH0sXG5cbiAgICBjb21wb25lbnRXaWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRXaWR0aFxuICAgICAgfSxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICAvLyBVc2UgMTAwJSA9PSAxLjAgYXMgZGVmYXVsdCB3aWR0aCB3aGVuIG5vdGhpbmcgaXMgc2V0OlxuICAgICAgICByZXR1cm4gd2lkdGggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gMS4wXG4gICAgICAgICAgOiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqWzw+XT9cXHMqKC4qKSQvKVsxXSAvLyBSZW1vdmUgd2lkdGggb3BlcmF0b3JcbiAgICAgICAgICAgIDogd2lkdGhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFdpZHRoT3BlcmF0b3I6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccyooWzw+XT8pLylbMV0gfHwgbnVsbFxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50VmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZUNvbXBvbmVudD8uZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudERpc2FibGVkOiBnZXRTY2hlbWFBY2Nlc3NvcignZGlzYWJsZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIGRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbnRhaW5lckNsYXNzKCkge1xuICAgICAgY29uc3QgeyBjbGFzczogY29udGFpbmVyQ2xhc3MgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1jb250YWluZXInXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYCR7cHJlZml4fS0tc2luZ2xlYF06IHRoaXMuc2luZ2xlLFxuICAgICAgICBbYCR7cHJlZml4fS0taGFzLWxhYmVsYF06IHRoaXMuaGFzTGFiZWwsXG4gICAgICAgIFtgJHtwcmVmaXh9LS1hbGlnbi1ib3R0b21gXTogYWxpZ25Cb3R0b20odGhpcy5zY2hlbWEpLFxuICAgICAgICBbYCR7cHJlZml4fS0tb21pdC1wYWRkaW5nYF06IG9taXRQYWRkaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGlzU3RyaW5nKGNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgPyB7IFtjb250YWluZXJDbGFzc106IHRydWUgfVxuICAgICAgICAgICAgOiBjb250YWluZXJDbGFzc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNvbXBvbmVudFdpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgY29uc3QgYmFzaXMgPSBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKVxuICAgICAgICA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aClcbiAgICAgICAgICA/IHBhcnNlRmxvYXQod2lkdGgpIC8vIHBlcmNlbnRhZ2VcbiAgICAgICAgICA6IC9bYS16XS8udGVzdCh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpICogMTAwIC8vIGZyYWN0aW9uXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYmFzaXMpID8gYCR7YmFzaXN9JWAgOiBiYXNpc1xuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZSgpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgY29uc3QgZ3JvdyA9IChcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgY29uc3Qgc2hyaW5rID0gdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZsZXg6IGAke2dyb3cgPyAxIDogMH0gJHtzaHJpbmsgPyAxIDogMH0gJHt0aGlzLmNvbXBvbmVudEJhc2lzfWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3MoKSB7XG4gICAgICBjb25zdCBiYXNpc0lzQXV0byA9IHRoaXMuY29tcG9uZW50QmFzaXMgPT09ICdhdXRvJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gVE9ETzogQkVNXG4gICAgICAgICdkaXRvLXNpbmdsZSc6IHRoaXMuc2luZ2xlLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IHRoaXMuY29tcG9uZW50RGlzYWJsZWQsXG4gICAgICAgICdkaXRvLXdpZHRoLWZpbGwnOiAhYmFzaXNJc0F1dG8gfHwgdGhpcy5jb21wb25lbnRXaWR0aCA9PT0gJ2ZpbGwnLFxuICAgICAgICAnZGl0by13aWR0aC1hdXRvJzogYmFzaXNJc0F1dG8sXG4gICAgICAgICdkaXRvLWhhcy1lcnJvcnMnOiAhIXRoaXMuZXJyb3JzXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkVycm9ycyhlcnJvcnMpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAvLyBOZWVkZWQgZm9yIGJldHRlciB2ZXJ0aWNhbCBhbGlnbm1lbnQ6XG4gIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICBtYXgtd2lkdGg6IDEwMCU7XG4gIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAvLyBwZXJjZW50YWdlcyBpbiBmbGV4LWJhc2lzIHRvIHdvcmsuXG4gIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gICY6ZW1wdHkge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAmLS1hbGlnbi1ib3R0b20ge1xuICAgIGp1c3RpZnktY29udGVudDogZW5kOyAvLyBUbyBhbGlnbiBjb21wb25lbnRzIHdpdGggYW5kIHdpdGhvdXQgbGFiZWxzLlxuICB9XG5cbiAgJi0tb21pdC1wYWRkaW5nIHtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgPiAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmIDA7XG4gICAgfVxuICB9XG5cbiAgJi0tc2luZ2xlIHtcbiAgICBoZWlnaHQ6IDEwMCU7IC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgYXQgdGhlIGJvdHRvbTtcbiAgfVxufVxuXG4vLyBOT1RFOiBUaGlzIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGAuZGl0by1jb250YWluZXJgIHNvIHRoYXQgb3RoZXJcbi8vIHR5cGUgY29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgYC5kaXRvLXdpZHRoLWZpbGxgIGNsYXNzIChmaWx0ZXIgcHJlY2VkZW5jZSkuXG4uZGl0by1jb21wb25lbnQge1xuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgJi5kaXRvLXJhZGlvLWJ1dHRvbiB7XG4gICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10YWJzXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgKVxuICAgIFJvdXRlckxpbmsuZGl0by1saW5rKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih0YWJTY2hlbWEpXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOnRvPVwieyBoYXNoOiBgIyR7a2V5fWAgfVwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IHNlbGVjdGVkVGFiID09PSBrZXkgfVwiXG4gICAgKSB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJzJywge1xuICBwcm9wczoge1xuICAgIHRhYnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2VsZWN0ZWRUYWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbiR0YWItY29sb3ItYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuJHRhYi1jb2xvci1pbmFjdGl2ZTogJGNvbG9yLWxpZ2h0O1xuJHRhYi1jb2xvci1hY3RpdmU6ICRjb2xvci1saWdodGVzdDtcbiR0YWItY29sb3ItaG92ZXI6ICRjb2xvci13aGl0ZTtcblxuLmRpdG8tdGFicyB7XG4gIC8vIFNlZTogaHR0cHM6Ly9jb2RlcGVuLmlvL3Rob2xleC9wZW4vaHZlQngvXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuXG4gIGEge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1pbmFjdGl2ZTtcbiAgICBwYWRkaW5nOiAkdGFiLXBhZGRpbmctdmVyICR0YWItcGFkZGluZy1ob3I7XG4gICAgbWFyZ2luLWxlZnQ6ICR0YWItbWFyZ2luO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1cztcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1ob3ZlcjtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItYmFja2dyb3VuZDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgOmlzPVwicGFuZWxUYWdcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgRGl0b1NjaGVtYS5kaXRvLXBhbmVsX19zY2hlbWEoXG4gICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gIClcbiAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgaDIuZGl0by1wYW5lbF9faGVhZGVyKDpjbGFzcz1cInsgJ2RpdG8tcGFuZWxfX2hlYWRlci0tc3RpY2t5Jzogc3RpY2t5IH1cIilcbiAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbChcbiAgICAgICAgICA6YnV0dG9ucz1cInBhbmVsQnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgRGl0b0J1dHRvbnMoXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZWwnLCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFuZWxUYWJDb21wb25lbnQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25EYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgcGFuZWxCdXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEucGFuZWxCdXR0b25zKVxuICAgIH0sXG5cbiAgICB0YXJnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudGFyZ2V0IHx8IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgaGFzT3duRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMub3duRGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25EYXRhIHx8IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYSgpIHtcbiAgICAgIGlmICh0aGlzLmhhc093bkRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgYGRhdGFgIGZyb20gdGhlIHNjaGVtYSwgc28gdGhhdCBEaXRvU2NoZW1hIGlzbid0IHVzaW5nIGl0IHRvXG4gICAgICAgIC8vIHByb2R1Y2UgaXRzIG93biBkYXRhLiBTZWUgJGZpbHRlcnMgcGFuZWwgZm9yIG1vcmUgZGV0YWlscyBvbiBkYXRhLlxuICAgICAgICBjb25zdCB7IGRhdGEsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbFRhZygpIHtcbiAgICAgIC8vIFBhbmVscyB0aGF0IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEgbmVlZCB0aGVpciBvd24gZm9ybS5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyAnZm9ybScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICBwYW5lbERhdGFQYXRoKCkge1xuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gZGF0YSwgdGhlbiBpdCBuZWVkcyB0byBwcmVmaXggYWxsXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggaXRzIGRhdGEtcGF0aCwgYnV0IGlmIGl0IHNoYXJlcyBkYXRhIHdpdGggdGhlIHNjaGVtYVxuICAgICAgLy8gY29tcG9uZW50LCB0aGVuIGl0IHNob3VsZCBzaGFyZSB0aGUgZGF0YS1wYXRoIG5hbWUgc3BhY2UgdG9vLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IHRoaXMuZGF0YVBhdGggOiB0aGlzLnNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSksXG5cbiAgICBzdGlja3k6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGlja3knLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBgc2NoZW1hLmRhdGFgIGhhbmRsaW5nIGluIERpdG9TY2hlbWEsXG4gICAgLy8gd2hlcmUgdGhlIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGFjdHVhbCBjb21wb25lbnQuXG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLm93bkRhdGEgPSBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgID8gZGF0YSh0aGlzLmNvbnRleHQpXG4gICAgICAgIDogZGF0YVxuICAgIH1cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSBwYW5lbHMgc28gdGhhdCBvdGhlciBjb21wb25lbnRzIGNhbiBmaW5kIHRoZW0gYnkgdGhlaXJcbiAgICAgIC8vIGRhdGEtcGF0aCwgZS5nLiBpbiBUeXBlTGlzdC5vbkZpbHRlckVycm9ycygpXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lbCh0aGlzLCBhZGQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZWwge1xuICBwYWRkaW5nLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZztcblxuICAmX19oZWFkZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgIGJhY2tncm91bmQ6ICRidXR0b24tY29sb3I7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgICYtLXN0aWNreSB7XG4gICAgICAkbWFyZ2luOiAkaW5wdXQtaGVpZ2h0LWZhY3RvciAqICRsaW5lLWhlaWdodCAqICRmb250LXNpemUtc21hbGwgK1xuICAgICAgICAkZm9ybS1zcGFjaW5nO1xuXG4gICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgdG9wOiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbjtcbiAgICAgIHotaW5kZXg6IDE7XG5cbiAgICAgICYgKyAqIHtcbiAgICAgICAgbWFyZ2luLXRvcDogLSRtYXJnaW47XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgaGVpZ2h0OiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgICB0b3A6IC0kY29udGVudC1wYWRkaW5nO1xuICAgICAgICBtYXJnaW46IC0kYm9yZGVyLXdpZHRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5kaXRvLWJ1dHRvbnMge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6ICRpbnB1dC1wYWRkaW5nLXZlcjtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIH1cbiAgfVxuXG4gICZfX3NjaGVtYSB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudCB7XG4gICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZztcblxuICAgICAgLmRpdG8tY29udGFpbmVyIHtcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgICAgfVxuXG4gICAgICAuZGl0by1vYmplY3Qge1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB9XG5cbiAgICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICAgIC0tYnV0dG9uLW1hcmdpbjogI3skZm9ybS1zcGFjaW5nfTtcblxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgMDtcblxuICAgICAgICAuZGl0by1jb250YWluZXIge1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgIGxhYmVsIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1wYW5lIHtcbiAgICAgIG1hcmdpbjogMCAoLSRmb3JtLXNwYWNpbmctaGFsZik7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gIClcbiAgICBEaXRvUGFuZWwoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmVscycsIHtcbiAgcHJvcHM6IHtcbiAgICBwYW5lbHM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gICAgICAvLyBBbGxvdyBzZXBhcmF0ZSB0YWJzIHRvIHVzZSBwYW5lbHMgb2YgdGhlIHNhbWUgbmFtZSwgYnlcbiAgICAgIC8vIHByZWZpeGluZyB0aGVpciBrZXkgd2l0aCB0aGUgdGFiIG5hbWUuXG4gICAgICByZXR1cm4gdGFiQ29tcG9uZW50ID8gYCR7dGFiQ29tcG9uZW50LnRhYn1fJHtkYXRhUGF0aH1gIDogZGF0YVBhdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lbHMge1xuICBtYXgtd2lkdGg6ICRjb250ZW50LXNpZGViYXItd2lkdGg7XG4gIG1pbi13aWR0aDogY2FsYygkY29udGVudC1zaWRlYmFyLXdpZHRoIC8gMik7XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgdXNlU2xvdHMsIENvbW1lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNWTm9kZUNvbnRlbnQodm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlICYmIGFzQXJyYXkodm5vZGUpLnNvbWUodm5vZGUgPT4gdm5vZGUudHlwZSAhPT0gQ29tbWVudClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Nsb3RDb250ZW50KHNsb3QsIHByb3BzID0ge30pIHtcbiAgc2xvdCA9IGlzU3RyaW5nKHNsb3QpID8gdXNlU2xvdHMoKVtzbG90XSA6IHNsb3RcbiAgcmV0dXJuIGhhc1ZOb2RlQ29udGVudChzbG90Py4ocHJvcHMpKVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8IGhhc1Nsb3RDb250ZW50KCRzbG90cy5kZWZhdWx0KVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICApXG4gICAgRGl0b0NvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICApXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwidm5vZGUgb2YgJHNsb3RzLmRlZmF1bHQ/LigpXCJcbiAgKVxuICAgIC8vLSBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsXG4gICAgLy8tIHNvIGl0IGNhbiBiZSB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc1ZOb2RlQ29udGVudCh2bm9kZSlcIlxuICAgIClcbiAgICAgIERpdG9Wbm9kZSg6dm5vZGU9XCJ2bm9kZVwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBoYXNTbG90Q29udGVudCwgaGFzVk5vZGVDb250ZW50IH0gZnJvbSAnLi4vdXRpbHMvdnVlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9CdXR0b25zJywge1xuICBwcm92aWRlOiB7XG4gICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgYnV0dG9ucyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5cy5cbiAgICAgIGNvbnN0IHsgZGF0YVBhdGgsIGJ1dHRvbnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgICAgID8gT2JqZWN0LnZhbHVlcyhidXR0b25zKS5yZWR1Y2UoKHNjaGVtYXMsIGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNTbG90Q29udGVudCxcbiAgICBoYXNWTm9kZUNvbnRlbnRcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWJ1dHRvbnMge1xuICA+IC5kaXRvLWNvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gU2V0IGBAY2xpY2suc3RvcGAgdG8gcHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsLlxuRGl0b0J1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIFJvdXRlckxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gIClcbiAgRGl0b0NyZWF0ZUJ1dHRvbihcbiAgICB2LWlmPVwiaXNDcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FZGl0QnV0dG9ucycsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNyZWF0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNyZWF0ZVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEuZm9ybSlcbiAgICB9LFxuXG4gICAgaXNEcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RyYWdnYWJsZScpXG4gICAgfSxcblxuICAgIGlzRWRpdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2VkaXRhYmxlJykgJiYgISF0aGlzLmVkaXRQYXRoXG4gICAgfSxcblxuICAgIGlzQ3JlYXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdjcmVhdGFibGUnKSAmJiAhIXRoaXMuY3JlYXRlUGF0aFxuICAgIH0sXG5cbiAgICBpc0RlbGV0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZGVsZXRhYmxlJylcbiAgICB9LFxuXG4gICAgY3JlYXRlQnV0dG9uVGV4dCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBjcmVhdGUgYnV0dG9uIHRocm91Z2ggY3JlYXRhYmxlIG9iamVjdDpcbiAgICAgICAgdGhpcy5zY2hlbWEuY3JlYXRhYmxlPy5sYWJlbCB8fCAoXG4gICAgICAgICAgLy8gQXV0by1nZW5lcmF0ZSBjcmVhdGUgYnV0dG9uIGxhYmVscyBmcm9tIGZyb20gbGFiZWxzIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcyB3aXRoIG9ubHkgb25lIGZvcm06XG4gICAgICAgICAgdGhpcy5mb3JtTGFiZWwgJiZcbiAgICAgICAgICBgJHtjYXBpdGFsaXplKHRoaXMudmVyYnMuY3JlYXRlKX0gJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICkgfHxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzT3B0aW9uKG5hbWUpIHtcbiAgICAgIC8vIFRoZSBvcHRpb25zIG9mIHRoZSBvdXRlciBjb21wb25lbnQgYXJlIHBhc3NlZCB0byB0aGUgYnV0dG9ucyBjb21wb25lbnRcbiAgICAgIC8vIHRocm91Z2ggcHJvcGVydGllcyBgdGhpc1tuYW1lXWAsIGJ1dCBjYW4gYmUgZGlzYWJsZWQgb24gYSBwZXItZm9ybVxuICAgICAgLy8gYmFzaXMgYnkgc2V0dGluZyBgc2NoZW1hW25hbWVdYCB0byBgZmFsc2VgLlxuICAgICAgcmV0dXJuICEhKHRoaXNbbmFtZV0gJiYgdGhpcy5zY2hlbWFbbmFtZV0gIT09IGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gIC8vIE92ZXJyaWRlIGN1cnNvciBmcm9tIGNvbGxhcHNpYmxlIGRpdG8tbGFiZWw6XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgZmxleDogbm9uZTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY3JlYXRlLWJ1dHRvblxuICB0ZW1wbGF0ZShcbiAgICB2LWlmPVwic2hvd1B1bGxkb3duXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93big6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIilcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiXG4gICAgICApXG4gICAgICAgIGEoXG4gICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihmb3JtKVwiXG4gICAgICAgICAgdi1zaG93PVwic2hvdWxkU2hvdyhmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiZ2V0Rm9ybUNsYXNzKGZvcm0sIHR5cGUpXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHR5cGUpXCJcbiAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1lbHNlXG4gICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICBAY2xpY2s9XCJjcmVhdGVJdGVtKGZvcm1zLmRlZmF1bHQpXCJcbiAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ3JlYXRlQnV0dG9uJywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdmVyYjogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGV4dDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgaXNJbmxpbmVkKCkge1xuICAgICAgcmV0dXJuIGlzSW5saW5lZCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgc2hvd1B1bGxkb3duKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZm9ybXMpLmxlbmd0aCA+IDEgfHwgIXRoaXMuZm9ybXMuZGVmYXVsdFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkUmVuZGVyKGZvcm0pICYmICF0aGlzLnNob3VsZERpc2FibGUoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGb3JtQ2xhc3MoZm9ybSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2BkaXRvLXR5cGUtJHt0eXBlfWBdOiB0cnVlLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IHRoaXMuc2hvdWxkRGlzYWJsZShmb3JtKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tY3JlYXRlLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1wdWxsZG93biB7XG4gICAgcmlnaHQ6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY2xpcGJvYXJkLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIHYtaWY9XCJjbGlwYm9hcmRcIlxuKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tY29weShcbiAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJDb3B5IERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25Db3B5XCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJQYXN0ZSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzT2JqZWN0LCBjbG9uZSwgZGVpbmRlbnQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0NsaXBib2FyZCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgY2xpcGJvYXJkOiB7IHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpeENsaXBib2FyZDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIGNvcHkuY2FsbChcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbG9uZShjbGlwYm9hcmREYXRhKVxuICAgIH0sXG5cbiAgICBwYXN0ZURhdGEoKSB7XG4gICAgICBjb25zdCB7IHBhc3RlIH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBwYXN0ZVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIHBhc3RlLmNhbGwoXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY29weTogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGZvY3VzOiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLiR3YXRjaCgnZGF0YScsIHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICh0bywgZnJvbSkgPT4ge1xuICAgICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKHRoaXMuZml4Q2xpcGJvYXJkICYmIGpzb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgbmVlZGVkIG9uIFNhZmFyaSB0byBwcmV2ZW50IGEgc3RyYW5nZSBcIlBhc3RlXCJcbiAgICAgICAgICAvLyBidXR0b24gZnJvbSBhcHBlYXJpbmcgd2hlbiB0aGUgY2xpcGJvYXJkIGlzIGFjY2Vzc2VkICh3aHk/ISkuXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICB0aGlzLmZpeENsaXBib2FyZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBjaGVja0NsaXBib2FyZCgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSAhIXRoaXMuZGF0YVxuICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhKGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkpIC8vIGRvbid0IHJlcG9ydFxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGFjdGl2YXRlIHRoZSBwYXN0ZSBidXR0b24sIGRlcGVuZGluZyBvbiBicm93c2VyczpcbiAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25QYXN0ZSgpIHtcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKHRydWUpIC8vIHJlcG9ydFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5wYXN0ZURhdGEoZGF0YSlcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZywgeyB1cGRhdGVSb290ID0gZmFsc2UsIHVwZGF0ZVZpZXcgPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICghdGhpcy5pc0xvYWRpbmcgXiAhaXNMb2FkaW5nKSB7XG4gICAgICAgIC8vIEJvb2xlYW4geG9yXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICAgICAgaWYgKHVwZGF0ZVJvb3QpIHtcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQucmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlVmlldykge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXRMb2FkaW5nKHRoaXMuaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcbmltcG9ydCB7IHNldERlZmF1bHRWYWx1ZXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiYgKFxuICAgICAgICAgICc8Yj5Ob3RlPC9iPjogdGhlIHBhcmVudCBzdGlsbCBuZWVkcyB0byBiZSBzYXZlZCAnICtcbiAgICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgdmVyYnMgd2l0aCB0aGVpciB0cmFuc2llbnQgdmVyc2lvbnM6XG4gICAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICAgIHNhdmU6ICdhcHBseScsXG4gICAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICAgIGRlbGV0ZWQ6ICdyZW1vdmVkJ1xuICAgICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhXG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHF1ZXJ5IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgIGlmICghY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgIGNvbnN0IHRpdGxlID0gaXNTdHJpbmcoZGF0YT8udHlwZSlcbiAgICAgICAgICAgID8gbGFiZWxpemUoZGF0YS50eXBlKVxuICAgICAgICAgICAgOiAnRXJyb3InXG4gICAgICAgICAgY29uc3QgdGV4dCA9IGRhdGE/Lm1lc3NhZ2UgPz8gZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7IHR5cGU6ICdlcnJvcicsIHRpdGxlLCB0ZXh0IH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgICB9KSxcbiAgICAgIG5vdGlmeUVycm9yID0gZXJyb3IgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGF0aChwYXRoKSB7XG4gIC8vIEZvciBwYXRocyBzdGFyaW5nIHdpdGggYC9gLCB3ZSBjYW4gdXNlIHRoZSBuYXRpdmUgYFVSTCgpYCBjbGFzcyB0byByZXNvbHZlXG4gIC8vIHRoZSBwYXRoLCB3aGljaCB3aWxsIGFsc28gaGFuZGxlIGAuLmAgYW5kIGAuYCBzZWdtZW50czpcbiAgcmV0dXJuIG5ldyBVUkwoYGZpbGU6JHtwYXRofWApLnBhdGhuYW1lXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8tIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLy0gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLy0gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLy0gYW5kIG5vdCBhIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICBSb3V0ZXJWaWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8tIFVzZSBhIDxkaXY+IGZvciBpbmxpbmVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG4gIGNvbXBvbmVudC5kaXRvLXNjcm9sbChcbiAgICB2LXNob3c9XCJpc0FjdGl2ZVwiXG4gICAgOmlzPVwiaXNOZXN0ZWRSb3V0ZSA/ICdkaXYnIDogJ2Zvcm0nXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIERpdG9TY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgICApXG4gICAgLy8tIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLy0gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWRcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIG1lcmdlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzLCBpc09iamVjdFNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvcGF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybScsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbiwgUmVzb3VyY2VNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlZERhdGE6IG51bGwsXG4gICAgICBjbG9uZWREYXRhOiB1bmRlZmluZWQsXG4gICAgICBzb3VyY2VLZXk6IG51bGwsXG4gICAgICBpc0Zvcm06IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIEFkZCBzdWJtaXQgLyBzdWJtaXR0ZWQgdG8gdGhlIHZlcmJzIHJldHVybmVkIGJ5IFJlc291cmNlTWl4aW5cbiAgICAgIC8vIE5PVEU6IFRoZXNlIGdldCBwYXNzZWQgb24gdG8gY2hpbGRyZW4gdGhyb3VnaDpcbiAgICAgIC8vIGBwcm92aWRlKCkgLi4uIHsgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzIH1gIGluIFJlc291cmNlTWl4aW5cbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy5nZXRWZXJicygpXG4gICAgICBjb25zdCB7IGlzQ3JlYXRpbmcsIHByb3ZpZGVzRGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmVyYnMsXG4gICAgICAgIHN1Ym1pdDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZSA6IHZlcmJzLnNhdmUsXG4gICAgICAgIHN1Ym1pdHRlZDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZWQgOiB2ZXJicy5zYXZlZCxcbiAgICAgICAgY2FuY2VsOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWwgOiB2ZXJicy5jbG9zZSxcbiAgICAgICAgY2FuY2VsbGVkOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWxsZWQgOiB2ZXJicy5jbG9zZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCwgcHJvdmlkZSBhbiBlbXB0eSBvYmplY3Qgd2l0aCBqdXN0IHRoZVxuICAgICAgICAgIC8vIHJpZ2h0IHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgICAgdGhpcy5kYXRhIHx8IHsgdHlwZTogdGhpcy50eXBlIH0sXG4gICAgICAgICAgdGhpcy5jb250ZXh0XG4gICAgICAgICkgfHwge31cbiAgICAgICkgLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmlzTXV0YXRpbmcgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNNdXRhdGluZyAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBpc011dGF0aW5nKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIHBlcnNpc3RlbmNlIHVwb24gc3VibWlzc2lvbi5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuICEhdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5wYXJhbSA/PyBudWxsXG4gICAgfSxcblxuICAgIG1ldGhvZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmcgPyAncG9zdCcgOiAncGF0Y2gnXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKClcbiAgICAgIHJldHVybiBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLml0ZW1JZCwgcmVzb3VyY2UpIHx8IHJlc291cmNlXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZSh0aGlzLmlzQ3JlYXRpbmcgPyB0aGlzLnZlcmJzLmNyZWF0ZSA6IHRoaXMudmVyYnMuZWRpdClcbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIC8vIFJldHVybiBkaWZmZXJlbnQgZGF0YSBcImNvbnRhaW5lcnNcIiBiYXNlZCBvbiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgICAgLy8gMS4gY3JlYXRlZERhdGEsIGlmIHdlJ3JlIGluIGEgZm9ybSBmb3IgYSBuZXdseSBjcmVhdGVkIG9iamVjdC5cbiAgICAgIC8vIDIuIGxvYWRlZERhdGEsIGlmIHRoZSBmb3JtIGl0c2VsZiBpcyB0aGUgcm9vdCBvZiB0aGUgZGF0YSAoZS5nLiB3aGVuXG4gICAgICAvLyAgICBkaXJlY3RseSBsb2FkaW5nIGFuIGVkaXRpbmcgcm9vdCkuXG4gICAgICAvLyAzLiBUaGUgZGF0YSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LCB3aGljaCBpdHNlbGYgbWF5IGJlIGVpdGhlciBhXG4gICAgICAvLyAgICB2aWV3IHRoYXQgbG9hZGVkIHRoZSBkYXRhLCBvciBhIGZvcm0gdGhhdCBlaXRoZXIgbG9hZGVkIHRoZSBkYXRhLCBvclxuICAgICAgLy8gICAgYWxzbyBpbmhlcml0ZWQgaXQgZnJvbSBpdHMgcGFyZW50LiBOb3RlIHRoYXQgd2UgdXNlIGEgY2xvbmUgb2YgaXQsXG4gICAgICAvLyAgICBzbywgZGF0YSBjaGFuZ2VzIGFyZW4ndCBhcHBsaWVkIHVudGlsIHNldFNvdXJjZURhdGEoKSBpcyBjYWxsZWQuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVkRGF0YSB8fCB0aGlzLmxvYWRlZERhdGEgfHwgdGhpcy5pbmhlcml0ZWREYXRhIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5kYXRhQ29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhKCkge1xuICAgICAgLy8gUG9zc2libGUgcGFyZW50cyBhcmUgRGl0b0Zvcm0gZm9yIGZvcm1zLCBvciBEaXRvVmlldyBmb3Igcm9vdCBsaXN0cy5cbiAgICAgIC8vIEJvdGggaGF2ZSBhIGRhdGEgcHJvcGVydHkgd2hpY2ggYWJzdHJhY3RzIGF3YXkgbG9hZGluZyBhbmQgaW5oZXJpdGluZ1xuICAgICAgLy8gb2YgZGF0YS5cbiAgICAgIC8vIEZvcm1zIHRoYXQgYXJlIGFib3V0IHRvIGJlIGRlc3Ryb3llZCBkdWUgdG8gbmF2aWdhdGlvbiBsb29zZSB0aGVpclxuICAgICAgLy8gcm91dGUtcmVjb3JkLCBidXQgbWlnaHQgc3RpbGwgdHJpZ2dlciB0aGlzIGdldHRlci4gRmlsdGVyIHRob3NlIG91dC5cbiAgICAgIGxldCBkYXRhID0gdGhpcy5yb3V0ZVJlY29yZCA/IHRoaXMucGFyZW50Um91dGVDb21wb25lbnQuZGF0YSA6IG51bGxcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZGF0YSBieSBzcGxpdHRpbmcgdGhlIGRhdGFQYXRoLCBpdGVyYXRlIHRocm91Z2ggdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkYXRhIGFuZCBsb29rIG5lc3QgY2hpbGQtZGF0YSB1cC5cbiAgICAgICAgY29uc3QgZGF0YVBhcnRzID0gcGFyc2VEYXRhUGF0aChcbiAgICAgICAgICB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50KVxuICAgICAgICApXG4gICAgICAgIC8vIENvbXBhcmUgZGF0YVBhcnRzIGFnYWluc3QgbWF0Y2hlZCByb3V0ZVBhdGggcGFydHMsIHRvIGlkZW50aWZ5IHRob3NlXG4gICAgICAgIC8vIHBhcnRzIHRoYXQgbmVlZCB0byBiZSB0cmVhdGVkIGxpa2UgaWRzIGFuZCBtYXBwZWQgdG8gaW5kaWNlcyBpbiBkYXRhLlxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnJvdXRlUmVjb3JkLnBhdGguc3BsaXQoJy8nKVxuICAgICAgICBjb25zdCByb3V0ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKHBhdGhQYXJ0cy5sZW5ndGggLSBkYXRhUGFydHMubGVuZ3RoKVxuICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuc291cmNlS2V5ID0ga2V5XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGluaGVyaXRlZERhdGEoKSB7XG4gICAgICAvLyBEYXRhIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgYW5kIGNsb25lZCB0byBwcm90ZWN0IGFnYWluc3QgcmVhY3RpdmVcbiAgICAgIC8vIGNoYW5nZXMgdW50aWwgY2hhbmdlcyBhcmUgYXBwbGllZCB0aHJvdWdoIHNldFNvdXJjZURhdGEoKSwgdW5sZXNzXG4gICAgICAvLyBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBkYXRhIGlzIG11dGF0ZWQgZGlyZWN0bHkuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhICYmXG4gICAgICAgIHRoaXMuc291cmNlS2V5ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldXG4gICAgICAgIGlmICghdGhpcy5pc011dGF0aW5nKSB7XG4gICAgICAgICAgLy8gVXNlIGEgdHJpY2sgdG8gc3RvcmUgY2xvbmVkIGluaGVyaXRlZCBkYXRhIGluIGNsb25lZERhdGEsIHRvIG1ha2VcbiAgICAgICAgICAvLyBpdCByZWFjdGl2ZSBhbmQgcHJldmVudCBpdCBmcm9tIGJlaW5nIGNsb25lZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNsb25lZERhdGFcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBpdGVtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgeyBleHRlbmRlZDogdHJ1ZSB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNvdXJjZURhdGE6ICdjbGVhckNsb25lZERhdGEnLFxuICAgIC8vIE5lZWRlZCBmb3IgdGhlICdjcmVhdGUnIHJlZGlyZWN0IGluIGBpbmhlcml0ZWREYXRhKClgIHRvIHdvcms6XG4gICAgY3JlYXRlOiAnc2V0dXBEYXRhJ1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9LFxuXG4gICAgZ2V0RGF0YVBhdGhGcm9tKHJvdXRlKSB7XG4gICAgICAvLyBHZXQgdGhlIGRhdGEgcGF0aCBieSBkZW5vcm1hbGl6ZVBhdGggdGhlIHJlbGF0aXZlIHJvdXRlIHBhdGhcbiAgICAgIHJldHVybiB0aGlzLmFwaS5kZW5vcm1hbGl6ZVBhdGgoXG4gICAgICAgIHRoaXMucGF0aFxuICAgICAgICAgIC8vIERpdG9WaWV3cyBoYXZlIG5lc3RlZCByb3V0ZXMsIHNvIGRvbid0IHJlbW92ZSB0aGVpciBwYXRoLlxuICAgICAgICAgIC5zbGljZSgocm91dGUuaXNWaWV3ID8gMCA6IHJvdXRlLnBhdGgubGVuZ3RoKSArIDEpXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldHVwRGF0YSgpXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhIHx8PSB0aGlzLmNyZWF0ZURhdGEodGhpcy5zY2hlbWEsIHRoaXMudHlwZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgaWYgKHRoaXMuc291cmNlRGF0YSAmJiB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IG1haW5TY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhW3RoaXMuc291cmNlS2V5XSA9IG1haW5TY2hlbWFDb21wb25lbnQuZmlsdGVyRGF0YShkYXRhKVxuICAgICAgICBtYWluU2NoZW1hQ29tcG9uZW50Lm9uQ2hhbmdlKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhZGRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSlcbiAgICAgICAgPyB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiAhIXRoaXMuc291cmNlRGF0YT8ucHVzaChkYXRhKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5jbGVhckRhdGEoKVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMuc2V0RGF0YShudWxsKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXREYXRhKClcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIC8vIHNldERhdGEoKSBpcyBjYWxsZWQgYWZ0ZXIgc3VibWl0IHdoZW4gZGF0YSBoYXMgY2hhbmdlZC5cbiAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIC8vIEZvciBjb21wb25lbnRzIHdpdGggdHJhbnNpZW50IGRhdGEsIG1vZGlmeSB0aGlzLnNvdXJjZURhdGEuXG4gICAgICAgIHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckNsb25lZERhdGEodG8sIGZyb20pIHtcbiAgICAgIC8vIE9ubHkgY2xlYXIgaWYgdGhlIHdhdGNoZWQgc291cmNlRGF0YSBpdHNlbGYgY2hhbmdlcyBpbiB0aGUgZm9ybS5cbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLmNsb25lZERhdGEgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKVxuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQucGF0aClcbiAgICB9LFxuXG4gICAgZ2V0U3VibWl0VmVyYihwcmVzZW50ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHByZXNlbnRcbiAgICAgICAgICA/ICdjcmVhdGUnXG4gICAgICAgICAgOiAnY3JlYXRlZCdcbiAgICAgICAgOiBwcmVzZW50XG4gICAgICAgICAgPyAnc3VibWl0J1xuICAgICAgICAgIDogJ3N1Ym1pdHRlZCdcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbiwgeyB2YWxpZGF0ZSA9IHRydWUsIGNsb3NlRm9ybSA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKHZhbGlkYXRlICYmICF0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdldFZlcmIgPSBwcmVzZW50ID0+IHRoaXMudmVyYnNbdGhpcy5nZXRTdWJtaXRWZXJiKHByZXNlbnQpXVxuXG4gICAgICAvLyBBbGxvdyBidXR0b25zIHRvIG92ZXJyaWRlIGJvdGggbWV0aG9kIGFuZCByZXNvdXJjZSBwYXRoIHRvIHN1Ym1pdCB0bzpcbiAgICAgIGNvbnN0IGJ1dHRvblJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXNvdXJjZSA9IGJ1dHRvblJlc291cmNlIHx8IHRoaXMucmVzb3VyY2VcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlc291cmNlPy5tZXRob2QgfHwgdGhpcy5tZXRob2RcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgbGV0IHN1Y2Nlc3NcbiAgICAgIGlmICghYnV0dG9uUmVzb3VyY2UgJiYgdGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2llbnQoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT5cbiAgICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgPyBgSXRlbSAke2NhcGl0YWxpemUodmVyYil9YFxuICAgICAgICAgICAgICAgIDogYENoYW5nZSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgICAgICAgOiBgQ2hhbmdlcyB0byAke3RoaXMuaXRlbUxhYmVsfSB3ZXJlICR7dmVyYn0uYCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBzZXREYXRhOiB0cnVlLFxuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+XG4gICAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGBTdWNjZXNzZnVsbHkgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0ke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgICAgaWYgKGNsb3NlRm9ybSB8fCBidXR0b24uY2xvc2VGb3JtKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGZvcm0gZWRpdGluZyB0aGUgbmV3bHkgY3JlYXRlZCBpdGVtOlxuICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHBhdGg6IHJlc29sdmVQYXRoKGAke3RoaXMucGF0aH0vLi4vJHtpZH1gKSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRUcmFuc2llbnQoYnV0dG9uLCBfcmVzb3VyY2UsIF9tZXRob2QsIGRhdGEsIHtcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzLFxuICAgICAgbm90aWZ5RXJyb3JcbiAgICB9KSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIGRlZmF1bHQgXCJzdWJtaXR0aW5nXCIgb2YgdHJhbnNpZW50LCBuZXN0ZWQgZGF0YTpcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyB0aGlzLmFkZFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gJ0NvdWxkIG5vdCBzdWJtaXQgdHJhbnNpZW50IGl0ZW0nXG4gICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Gb3JtIGZyb20gJy4vRGl0b0Zvcm0udnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Gb3JtTmVzdGVkJywge1xuICBleHRlbmRzOiBEaXRvRm9ybVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWZvcm0tbmVzdGVkIHtcbiAgJixcbiAgLmRpdG8tc2Nyb2xsIHtcbiAgICAvLyBObyBzY3JvbGxpbmcgaW5zaWRlIG5lc3RlZCBmb3JtcywgYW5kIHByZXZlbnQgb3BlbiAubXVsdGlzZWxlY3QgZnJvbVxuICAgIC8vIGJlaW5nIGNyb3BwZWQuXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZXJyb3JzKFxuICB2LWlmPVwiZXJyb3JzXCJcbilcbiAgdWxcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCJcbiAgICApXG4gICAgICB8IHt7IGVycm9yIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRXJyb3JzJywge1xuICBwcm9wczoge1xuICAgIGVycm9yczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1lcnJvcnMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG5cbiAgdWwge1xuICAgIG1hcmdpbi10b3A6IDFweDtcbiAgICBjb2xvcjogJGNvbG9yLWVycm9yO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNjb3Blc1xuICBSb3V0ZXJMaW5rKFxuICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgOmtleT1cImtleVwiXG4gICAgdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b21cbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NvcGVzJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY29wZXM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFNjb3BlTGluayhzY29wZSkge1xuICAgICAgY29uc3QgcXVlcnkgPSB7IC4uLnRoaXMucXVlcnksIHNjb3BlOiBzY29wZS5uYW1lIH1cbiAgICAgIGlmIChxdWVyeS5wYWdlKSB7XG4gICAgICAgIHF1ZXJ5LnBhZ2UgPSAwXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsocXVlcnkpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NvcGVzIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1idXR0b24ge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAvLyBBIGJpdCBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIGVsbGlwc2lzLCB0byBwcmV2ZW50IHJlcGxhY2luZyBzaG9ydCB3b3Jkc1xuICAgIC8vIHdpdGggZWxsaXBzaXMuXG4gICAgbWluLXdpZHRoOiAzZW07XG4gICAgZmxleDogMCAxIGF1dG87XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbTtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmctbGVmdDogMWVtO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMWVtO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTtcbiAgICB9XG5cbiAgICAmICsgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgIH0gLy8gRG9uJ3QgY292ZXIgdGhlIGZvY3VzZWQgYm9yZGVyIG9mIGJ1dHRvbnM6XG4gICAgJjpmb2N1cyB7XG4gICAgICB6LWluZGV4OiAxO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5QYWdpbmF0aW9uKFxuICB2LW1vZGVsOnBhZ2U9XCJwYWdlXCJcbiAgOnBhZ2VTaXplPVwibGltaXRcIlxuICA6dG90YWw9XCJ0b3RhbFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFnaW5hdGlvbicsIHtcbiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKCt0aGlzLnF1ZXJ5LnBhZ2UgfHwgMCkgKyAxXG4gICAgICB9LFxuXG4gICAgICBzZXQocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgICB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgICAgIHBhZ2U6IHBhZ2UgLSAxXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFNvcnRhYmxlT3B0aW9ucyhmb3JjZUZhbGxiYWNrID0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFuaW1hdGlvbjogMTUwLFxuICAgICAgICBoYW5kbGU6ICcuZGl0by1idXR0b24tZHJhZycsXG4gICAgICAgIGRyYWdDbGFzczogJ2RpdG8tc29ydGFibGUtYWN0aXZlJyxcbiAgICAgICAgY2hvc2VuQ2xhc3M6ICdkaXRvLXNvcnRhYmxlLWNob3NlbicsXG4gICAgICAgIGdob3N0Q2xhc3M6ICdkaXRvLXNvcnRhYmxlLWdob3N0JyxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogJ2RpdG8tc29ydGFibGUtZmFsbGJhY2snLFxuICAgICAgICBmb3JjZUZhbGxiYWNrLFxuICAgICAgICBvblN0YXJ0OiB0aGlzLm9uU3RhcnREcmFnLFxuICAgICAgICBvbkVuZDogdGhpcy5vbkVuZERyYWdcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkVuZERyYWcoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlXG4gICAgICBpZiAob2xkSW5kZXggIT09IG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3QsIHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgY29uc3QgeyBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgICAgLy8gUmVvcmRlciB0aGUgY2hhbmdlZCBlbnRyaWVzIGJ5IHRoZWlyIG9yZGVyIGtleSwgdGFraW5nIHBhZ2luYXRpb25cbiAgICAgICAgLy8gb2Zmc2V0cyBpbnRvIGFjY291bnQ6XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhZ2luYXRpb25SYW5nZT8uWzBdIHx8IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXVtvcmRlcktleV0gPSBpICsgb2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJlZS1pdGVtKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gIH1gXG4gIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4pXG4gIC5kaXRvLXRyZWUtaGVhZGVyKFxuICAgIHYtaWY9XCJsYWJlbFwiXG4gIClcbiAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgKVxuICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwoXG4gICAgICAgIHYtaHRtbD1cImxhYmVsXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtaW5mbyhcbiAgICAgICAgdi1pZj1cImRldGFpbHNcIlxuICAgICAgKSB7eyBkZXRhaWxzIH19XG4gICAgLmRpdG8tdHJlZS1sZWFmKFxuICAgICAgdi1lbHNlXG4gICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbChcbiAgICAgICAgdi1odG1sPVwibGFiZWxcIlxuICAgICAgKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKFxuICAgICAgdi1pZj1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgRGl0b0xhYmVsKFxuICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICApXG4gICAgICBEaXRvVGFibGVDZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgRGl0b0RyYWdnYWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgOm1vZGVsVmFsdWU9XCJ1cGRhdGVPcmRlcihjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0KVwiXG4gICAgOm9wdGlvbnM9XCJnZXRTb3J0YWJsZU9wdGlvbnModHJ1ZSlcIlxuICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgQHVwZGF0ZTptb2RlbFZhbHVlPVwidmFsdWUgPT4gKGNoaWxkcmVuTGlzdCA9IHZhbHVlKVwiXG4gIClcbiAgICBEaXRvVHJlZUl0ZW0oXG4gICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICA6a2V5PVwiZ2V0SXRlbVVpZChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhKVwiXG4gICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgOmRhdGE9XCJpdGVtLmRhdGFcIlxuICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgOmFjdGl2ZT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICA6bGV2ZWw9XCJsZXZlbCArIDFcIlxuICAgIClcbiAgICAvLy0gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgIC8vLSBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UcmVlSXRlbScsIHtcbiAgbWl4aW5zOiBbU29ydGFibGVNaXhpbl0sXG4gIGluamVjdDogWydjb250YWluZXInXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW0FycmF5LCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgb3BlbjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjdGl2ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxldmVsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbmVkOiB0aGlzLm9wZW4gfHwgdGhpcy5zY2hlbWEub3BlblxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIubWV0YVxuICAgIH0sXG5cbiAgICBzdG9yZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5zdG9yZVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5kaXNhYmxlZFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnByb3BlcnRpZXMpXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFNob3VsZCB0aGlzIGJlIG5hbWVkIGBzb3VyY2VTY2hlbWFgIGluc3RlYWQ/IFVzZSBTb3VyY2VNaXhpbj9cbiAgICBjaGlsZHJlblNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5jaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkxpc3QoKSB7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5jaGlsZHJlblNjaGVtYT8ubmFtZVxuICAgICAgcmV0dXJuIG5hbWUgJiYgdGhpcy5kYXRhW25hbWVdXG4gICAgfSxcblxuICAgIGNoaWxkcmVuRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZHJhZ2dhYmxlJywge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgc2NoZW1hOiB0aGlzLmNoaWxkcmVuU2NoZW1hXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG51bUNoaWxkcmVuKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1Qcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcz8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtRW50cmllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLm51bVByb3BlcnRpZXMgKyB0aGlzLm51bUNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuSXRlbXMoKSB7XG4gICAgICBjb25zdCB7IGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QgfSA9IHRoaXNcbiAgICAgIGlmIChjaGlsZHJlblNjaGVtYSAmJiBjaGlsZHJlbkxpc3QpIHtcbiAgICAgICAgY29uc3QgeyBlZGl0UGF0aCB9ID0gdGhpcy5jb250YWluZXJcbiAgICAgICAgY29uc3QgY2hpbGRyZW5PcGVuID0gIXRoaXMucGF0aCAmJiBjaGlsZHJlblNjaGVtYS5vcGVuXG4gICAgICAgIC8vIEJ1aWxkIGEgY2hpbGRyZW4gbGlzdCB3aXRoIGNoaWxkIG1ldGEgaW5mb3JtYXRpb24gZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JkZXIoXG4gICAgICAgICAgY2hpbGRyZW5TY2hlbWEsXG4gICAgICAgICAgY2hpbGRyZW5MaXN0Lm1hcCgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICAgIGNoaWxkcmVuU2NoZW1hLnBhdGggJiZcbiAgICAgICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2NoaWxkcmVuU2NoZW1hLnBhdGh9LyR7aW5kZXh9YFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3BlbiA9IChcbiAgICAgICAgICAgICAgY2hpbGRyZW5PcGVuIHx8XG4gICAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgICAgZWRpdFBhdGguc3RhcnRzV2l0aChwYXRoKSAmJiBwYXRoLmxlbmd0aCA8IGVkaXRQYXRoLmxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgYWN0aXZlID0gZWRpdFBhdGggPT09IHBhdGhcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICAgIGFjdGl2ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXVxuICAgIH0sXG5cbiAgICBkZXRhaWxzKCkge1xuICAgICAgY29uc3QgeyBudW1DaGlsZHJlbiB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbnVtQ2hpbGRyZW4gJiZcbiAgICAgICAgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgICAgbnVtQ2hpbGRyZW4gPT09IDEgPyAnaXRlbScgOiAnaXRlbXMnXG4gICAgICAgIH1gXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZHJhZ2dhYmxlIHx8IHRoaXMuZWRpdGFibGUgfHwgdGhpcy5kZWxldGFibGVcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU3VwcG9ydCBjcmVhdGFibGUhXG4gICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNyZWF0YWJsZSwgZWRpdGFibGUgYW5kIGRlbGV0YWJsZSBvdmVycmlkZXMgb24gdGhlXG4gICAgLy8gYXNzb2NpYXRlZCBmb3JtcywganVzdCBsaWtlIGluIGBUeXBlTGlzdGAgYW5kIGBUeXBlT2JqZWN0YCwgdGhyb3VnaFxuICAgIC8vIGBEaXRvRWRpdEJ1dHRvbnNgLiBJdCB3b3VsZCBiZSBiZXN0IHRvIHVzZSBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIHRvby5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgcHJvcGVydHkubmFtZSlcbiAgICB9LFxuXG4gICAgb25FZGl0KCkge1xuICAgICAgLy8gQWxsIHdlIGdvdCB0byBkbyBpcyBwdXNoIHRoZSByaWdodCBlZGl0IHBhdGggdG8gdGhlIHJvdXRlciwgdGhlIHJlc3RcbiAgICAgIC8vIGlzIGhhbmRsZWQgYnkgb3VyIHJvdXRlcywgYWxsb3dpbmcgcmVsb2FkcyBhcyB3ZWxsLlxuICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICBwYXRoOiBgJHt0aGlzLmNvbnRhaW5lci5wYXRofSR7dGhpcy5wYXRofWAsXG4gICAgICAgIC8vIFByZXNlcnZlIGN1cnJlbnQgcXVlcnlcbiAgICAgICAgcXVlcnk6IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkRlbGV0ZSgpIHtcbiAgICAgIC8vIFRPRE86IEltcGxlbWVudCFcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5vbkNoYW5nZSgpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdHJlZS1pdGVtIHtcbiAgLS1jaGV2cm9uLWluZGVudDogI3skY2hldnJvbi1pbmRlbnR9O1xuXG4gID4gLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgID4gLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgPiAuZGl0by10cmVlLWxlYWYge1xuICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAvLyBwYWRkaW5nIGRpcmVjdGx5IGluc3RlYWQgb2YgaGF2aW5nIGl0IGFjY3VtdWxhdGUgaW4gbmVzdGVkIENTUy5cbiAgICAgIC8vIFRoaXMgd2F5LCB3ZSBjYW4ga2VlcCB0aGUgLmRpdG8tYWN0aXZlIGFyZWEgY292ZXIgdGhlIGZ1bGwgd2lkdGg6XG4gICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKTtcbiAgICB9XG4gIH1cblxuICAuZGl0by10cmVlLWJyYW5jaCB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1icmFuY2gsXG4gIC5kaXRvLXRyZWUtbGVhZiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4OiBhdXRvO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW46IDFweCAwO1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1sYWJlbCxcbiAgLmRpdG8tdHJlZS1pbmZvIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1pbmZvIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbTtcbiAgICBjb2xvcjogcmdiYSgkY29sb3ItYmxhY2ssIDAuMik7XG4gIH1cblxuICAuZGl0by1idXR0b25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWFyZ2luOiAxcHggMCAxcHggMWVtO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXIge1xuICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgIH0gLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICB9XG5cbiAgJi5kaXRvLWRyYWdnaW5nIHtcbiAgICAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgPiAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgcGFkZGluZzogMCAkaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgICBtYXJnaW46IDAgKC0kaW5wdXQtcGFkZGluZy1ob3IpO1xuXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoIHtcbiAgICAgICAgPiAuZGl0by1jaGV2cm9uOjpiZWZvcmUge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tcHJvcGVydGllcyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudDtcblxuICAgID4gdHIge1xuICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICAgIH1cblxuICAgIC5kaXRvLWxhYmVsIHtcbiAgICAgIG1hcmdpbjogMDtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnOiAnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgdHJcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgIClcbiAgICAgIHRoKFxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICAgIClcbiAgICAgICAgUm91dGVyTGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICAgIGN1c3RvbVxuICAgICAgICApXG4gICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRTb3J0Q2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tb3JkZXItYXJyb3dzXG4gICAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgICAgc3BhbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgoXG4gICAgICB2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICAgIC8vLSBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNjc3NcbiAgICAgIHNwYW5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVGFibGVIZWFkJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2x1bW5zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBoYXNFZGl0QnV0dG9uczogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3J0KCkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAodGhpcy5xdWVyeS5vcmRlciB8fCAnJykuc3BsaXQoL1xccysvKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogb3JkZXJbMF0sXG4gICAgICAgIG9yZGVyOiBvcmRlclsxXVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY29sdW1uLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldFNvcnRDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWVcbiAgICAgICAgPyBgZGl0by1zZWxlY3RlZCBkaXRvLW9yZGVyLSR7dGhpcy5zb3J0Lm9yZGVyfWBcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFNvcnRMaW5rKGNvbHVtbikge1xuICAgICAgLy8gVG9nZ2xlIG9yZGVyIGlmIHRoZSBzYW1lIGNvbHVtbiBpcyBjbGlja2VkIGFnYWluLlxuICAgICAgY29uc3Qgb3JkZXIgPVxuICAgICAgICB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgJiYgdGhpcy5zb3J0Lm9yZGVyID09PSAnYXNjJ1xuICAgICAgICAgID8gJ2Rlc2MnXG4gICAgICAgICAgOiAnYXNjJ1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgb3JkZXI6IGAke2NvbHVtbi5uYW1lfSAke29yZGVyfWBcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGFibGUtaGVhZCB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIHRyIHtcbiAgICB0aCB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgICAuZGl0by1idXR0b24ge1xuICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmcsIHNlZSBiZWxvd1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAgICY6ZW1wdHk6OmFmdGVyIHtcbiAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRkKFxuICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4pXG4gIC8vLSBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjZWxsLmNvbXBvbmVudFwiXG4gICAgOmlzPVwiY2VsbC5jb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUNlbGwnLCB7XG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJDZWxsKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgcmVuZGVyIH0gPSB0aGlzLmNlbGxcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtuYW1lXVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwodmFsdWUpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBuZXh0VGljaywgZGVmaW5lQ29tcG9uZW50LCByZWYsIHJlYWN0aXZlLCBoIH0gZnJvbSAndnVlLWRlbWknO1xuaW1wb3J0IHsgdHJ5T25Nb3VudGVkLCB0cnlPblNjb3BlRGlzcG9zZSwgdW5yZWZFbGVtZW50LCBkZWZhdWx0RG9jdW1lbnQsIHRvVmFsdWUsIHVzZVZNb2RlbCB9IGZyb20gJ0B2dWV1c2UvY29yZSc7XG5pbXBvcnQgU29ydGFibGUgZnJvbSAnc29ydGFibGVqcyc7XG5cbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX29ialJlc3QgPSAoc291cmNlLCBleGNsdWRlKSA9PiB7XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKHNvdXJjZSwgcHJvcCkgJiYgZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMClcbiAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgaWYgKHNvdXJjZSAhPSBudWxsICYmIF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKHNvdXJjZSkpIHtcbiAgICAgIGlmIChleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwICYmIF9fcHJvcElzRW51bS5jYWxsKHNvdXJjZSwgcHJvcCkpXG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICB9XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuZnVuY3Rpb24gdXNlU29ydGFibGUoZWwsIGxpc3QsIG9wdGlvbnMgPSB7fSkge1xuICBsZXQgc29ydGFibGU7XG4gIGNvbnN0IF9hID0gb3B0aW9ucywgeyBkb2N1bWVudCA9IGRlZmF1bHREb2N1bWVudCB9ID0gX2EsIHJlc2V0T3B0aW9ucyA9IF9fb2JqUmVzdChfYSwgW1wiZG9jdW1lbnRcIl0pO1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBvblVwZGF0ZTogKGUpID0+IHtcbiAgICAgIG1vdmVBcnJheUVsZW1lbnQobGlzdCwgZS5vbGRJbmRleCwgZS5uZXdJbmRleCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBzdGFydCA9ICgpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSB0eXBlb2YgZWwgPT09IFwic3RyaW5nXCIgPyBkb2N1bWVudCA9PSBudWxsID8gdm9pZCAwIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCkgOiB1bnJlZkVsZW1lbnQoZWwpO1xuICAgIGlmICghdGFyZ2V0KVxuICAgICAgcmV0dXJuO1xuICAgIHNvcnRhYmxlID0gbmV3IFNvcnRhYmxlKHRhcmdldCwgX19zcHJlYWRWYWx1ZXMoX19zcHJlYWRWYWx1ZXMoe30sIGRlZmF1bHRPcHRpb25zKSwgcmVzZXRPcHRpb25zKSk7XG4gIH07XG4gIGNvbnN0IHN0b3AgPSAoKSA9PiBzb3J0YWJsZSA9PSBudWxsID8gdm9pZCAwIDogc29ydGFibGUuZGVzdHJveSgpO1xuICB0cnlPbk1vdW50ZWQoc3RhcnQpO1xuICB0cnlPblNjb3BlRGlzcG9zZShzdG9wKTtcbiAgcmV0dXJuIHsgc3RvcCwgc3RhcnQgfTtcbn1cbmZ1bmN0aW9uIG1vdmVBcnJheUVsZW1lbnQobGlzdCwgZnJvbSwgdG8pIHtcbiAgY29uc3QgYXJyYXkgPSB0b1ZhbHVlKGxpc3QpO1xuICBpZiAodG8gPj0gMCAmJiB0byA8IGFycmF5Lmxlbmd0aCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheS5zcGxpY2UoZnJvbSwgMSlbMF07XG4gICAgbmV4dFRpY2soKCkgPT4gYXJyYXkuc3BsaWNlKHRvLCAwLCBlbGVtZW50KSk7XG4gIH1cbn1cblxuY29uc3QgVXNlU29ydGFibGUgPSAvKiBAX19QVVJFX18gKi8gLyogI19fUFVSRV9fICovIGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IFwiVXNlU29ydGFibGVcIixcbiAgbW9kZWw6IHtcbiAgICAvLyBDb21wYXRpYmxlIHdpdGggdnVlMlxuICAgIHByb3A6IFwibW9kZWxWYWx1ZVwiLFxuICAgIGV2ZW50OiBcInVwZGF0ZTptb2RlbFZhbHVlXCJcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IFwiZGl2XCJcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBzbG90cyB9KSB7XG4gICAgY29uc3QgbGlzdCA9IHVzZVZNb2RlbChwcm9wcywgXCJtb2RlbFZhbHVlXCIpO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZigpO1xuICAgIGNvbnN0IGRhdGEgPSByZWFjdGl2ZSh1c2VTb3J0YWJsZSh0YXJnZXQsIGxpc3QsIHByb3BzLm9wdGlvbnMpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHNsb3RzLmRlZmF1bHQpXG4gICAgICAgIHJldHVybiBoKHByb3BzLnRhZywgeyByZWY6IHRhcmdldCB9LCBzbG90cy5kZWZhdWx0KGRhdGEpKTtcbiAgICB9O1xuICB9XG59KTtcblxuZXhwb3J0IHsgVXNlU29ydGFibGUgfTtcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5Vc2VTb3J0YWJsZShcbiAgdi1pZj1cImRyYWdnYWJsZVwiXG4gIDp0YWc9XCJ0YWdcIlxuICA6bW9kZWxWYWx1ZT1cIm1vZGVsVmFsdWVcIlxuICA6b3B0aW9ucz1cIm9wdGlvbnNcIlxuICBAdXBkYXRlOm1vZGVsVmFsdWU9XCIkZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCAkZXZlbnQpXCJcbilcbiAgc2xvdFxuY29tcG9uZW50KFxuICB2LWVsc2VcbiAgOmlzPVwidGFnXCJcbilcbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQnXG5pbXBvcnQgeyBVc2VTb3J0YWJsZSB9IGZyb20gJ0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRHJhZ2dhYmxlJywge1xuICBjb21wb25lbnRzOiB7IFVzZVNvcnRhYmxlIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkaXYnXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZHJhZ2dhYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBEaXRvVk5vZGUoeyB2bm9kZSB9KSB7XG4gIHJldHVybiB2bm9kZVxufVxuXG5EaXRvVk5vZGUucHJvcHMgPSB7XG4gIHZub2RlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1Zub2RlJywgRGl0b1ZOb2RlKVxuPC9zY3JpcHQ+XG4iLCIvLyBEaXRvVHlwZUNvbXBvbmVudCBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjb21wb25lbnQgZm9yIGFsbCBvdGhlciB0eXBlXG4vLyBjb21wb25lbnRzIGluc2lkZSB0aGUgdHlwZXMvIGZvbGRlci4gVGhlcmUncyBhbHNvIGEgc2VwYXJhdGUgY29uY3JldGVcbi8vIGBEaXRvVHlwZUNvbXBvbmVudC52dWVgIGNvbXBvbmVudCwgdXNlIHRvIHJlbmRlciBgeyB0eXBlOiAnY29tcG9uZW50JyB9YFxuaW1wb3J0IHsgYXNBcnJheSwgY2FtZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyByZWdpc3RlclR5cGVDb21wb25lbnQsIGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZXh0ZW5kczogRGl0b0NvbXBvbmVudCxcbiAgbWl4aW5zOiBbVHlwZU1peGluXSxcblxuICBuYXRpdmVGaWVsZDogZmFsc2UsXG4gIHRleHRGaWVsZDogZmFsc2UsXG4gIC8vIFNldCByZWFzb25hYmxlIGRlZmF1bHRzIGZvciBhbGwgb2YgdGhlc2UgdGhhdCBhcmUgdXNlZCBieSBtb3N0IHR5cGVcbiAgLy8gY29tcG9uZW50cy4gVGhlc2Ugb25seSBuZWVkIGRlZmluaW5nIGluIHN1Yi1jbGFzc2VzIHdoZW4gdGhleSBkaWZmZXIuXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGVmYXVsdE5lc3RlZDogdHJ1ZSxcbiAgZGVmYXVsdFZpc2libGU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IHRydWUsXG4gIGV4Y2x1ZGVWYWx1ZTogZmFsc2UsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogbnVsbCxcbiAgYWxpZ25Cb3R0b206IHRydWUsXG4gIG9taXRQYWRkaW5nOiBmYWxzZSxcblxuICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50LFxuXG4gIGdldDogZ2V0VHlwZUNvbXBvbmVudCxcblxuICByZWdpc3Rlcih0eXBlcywgZGVmaW5pdGlvbiA9IHt9KSB7XG4gICAgdHlwZXMgPSBhc0FycmF5KHR5cGVzKVxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KFxuICAgICAgYERpdG9UeXBlJHtjYW1lbGl6ZSh0eXBlc1swXSwgdHJ1ZSl9YCxcbiAgICAgIGRlZmluaXRpb25cbiAgICApXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5idXR0b24uZGl0by1idXR0b24oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDp0eXBlPVwidHlwZVwiXG4gIDp0aXRsZT1cInRpdGxlXCJcbiAgOmNsYXNzPVwiYnV0dG9uQ2xhc3NcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbikge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydidXR0b24nLCAnc3VibWl0J10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgICBleGNsdWRlVmFsdWU6IHRydWUsXG4gICAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gICAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgdmVyYigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyYnNbdGhpcy5uYW1lXVxuICAgICAgfSxcblxuICAgICAgYnV0dG9uQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcmIgPyBgZGl0by1idXR0b24tJHt0aGlzLnZlcmJ9YCA6IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHRleHQ6IGdldFNjaGVtYUFjY2Vzc29yKCd0ZXh0Jywge1xuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICAgIH0pLFxuXG4gICAgICB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dCB8fCBsYWJlbGl6ZSh0aGlzLnZlcmIpXG4gICAgICB9LFxuXG4gICAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAvLyBAb3ZlcnJpZGVcbiAgICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uQ2xpY2sgfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIHsgb25Gb2N1cywgb25CbHVyLCBvbkNsaWNrIH1cbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlQ29tcG9uZW50Py5zdWJtaXQodGhpcywgb3B0aW9ucylcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZW1pdEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICAgIH0pXG4gICAgICAgIC8vIEhhdmUgYnV0dG9ucyB0aGF0IGRlZmluZSByZXNvdXJjZXMgY2FsbCBgdGhpcy5zdWJtaXQoKWAgYnkgZGVmYXVsdDpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgICBoYXNSZXNvdXJjZSh0aGlzLnNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5pbnB1dC5kaXRvLWNoZWNrYm94KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB0eXBlPVwiY2hlY2tib3hcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2hlY2tib3gge1xuICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0Z1bmN0aW9uLFxuICBpc1Byb21pc2UsXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbTG9hZGluZ01peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgYXN5bmNEYXRhRW50cmllczoge31cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCBuYW1lLCB7XG4gICAgICByZXNvbHZlQ291bnRlciA9IDEsXG4gICAgICAuLi5sb2FkaW5nT3B0aW9uc1xuICAgIH0gPSB7fSkge1xuICAgICAgaWYgKCFpc09iamVjdChzY2hlbWEpKSB7XG4gICAgICAgIHNjaGVtYSA9IHsgZGF0YTogc2NoZW1hIH1cbiAgICAgIH1cbiAgICAgIGxldCB7IGRhdGEgPSB1bmRlZmluZWQsIGRhdGFQYXRoID0gbnVsbCB9ID0gc2NoZW1hXG4gICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYXN5bmMgZGF0YSBsb2FkaW5nIGFscmVhZHkgaW4gcHJvY2Vzcy5cbiAgICAgIGNvbnN0IGFzeW5jRW50cnkgPSAodGhpcy5hc3luY0RhdGFFbnRyaWVzW25hbWVdIHx8PSByZWFjdGl2ZSh7XG4gICAgICAgIGRlcGVuZGVuY3lGdW5jdGlvbjogbnVsbCxcbiAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDAsXG4gICAgICAgIHJlc29sdmVkRGF0YTogbnVsbCxcbiAgICAgICAgcmVzb2x2aW5nOiBmYWxzZVxuICAgICAgfSkpXG4gICAgICAvLyBJZiB0aGUgZGF0YSBjYWxsYmFjayBwcm92aWRlZCBhIGRlcGVuZGVuY3kgZnVuY3Rpb24gd2hlbiBpdCB3YXMgY2FsbGVkLFxuICAgICAgLy8gY2FsIGl0IGluIGV2ZXJ5IGNhbGwgb2YgYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8gZm9yY2UgVnVlIHRvIGtlZXAgdHJhY2tcbiAgICAgIC8vIG9mIHRoZSBhc3luYyBkZXBlbmRlbmNpZXMuXG4gICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbj8uKHRoaXMuY29udGV4dClcblxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPiAwKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSB2YWx1ZSBvbmNlXG4gICAgICAgIC8vIGByZXNvbHZlQ291bnRlcmAgcmVhY2hlcyB6ZXJvLiBDb3VudGluZyBpcyBuZWVkZWQgYmVjYXVzZSBkZXBlbmRpbmdcbiAgICAgICAgLy8gb24gdGhlIHVzZSBvZiBkYXRhIGFuZCByZWFjdGl2aXR5LCBtdWx0aXBsZSBjYWxscyB0byB0aGUgY29tcHV0ZWRcbiAgICAgICAgLy8gZ2V0dGVyIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZGF0YSBpcyBjaGFuZ2luZy4gQ2xlYXJpbmcgdGhlIHJlc29sdmVkXG4gICAgICAgIC8vIGRhdGEgd29ya3MgYmVjYXVzZSBWdWUgY2FjaGVzIHRoZSByZXN1bHQgb2YgY29tcHV0ZWQgZ2V0dGVycyBhbmQgb25seVxuICAgICAgICAvLyByZWV2YWx1YXRlcyBpZiBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VkLiBUaGlzIGlzIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IGEgY2FjaGVkIHZhbHVlIGhlcmUgZG9lc24ndCBibG9jayAvIG92ZXJyaWRlIHJlZXZhbHVhdGlvbjpcbiAgICAgICAgY29uc3QgeyByZXNvbHZlZERhdGEgfSA9IGFzeW5jRW50cnlcbiAgICAgICAgaWYgKC0tYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9PT0gMCkge1xuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZERhdGFcbiAgICAgIH1cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgdGhlIGRhdGEgZnVuY3Rpb24gdHdpY2U6XG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZpbmcpIHtcbiAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICAgIC8vIElmIHRoZSByZXN1bHQgb2YgdGhlIGRhdGEgZnVuY3Rpb24gaXMgYW5vdGhlciBmdW5jdGlvbiwgdGhlbiB0aGVcbiAgICAgICAgICAvLyBmaXJzdCBkYXRhIGZ1bmN0aW9uIGlzIHRoZXJlIHRvIHRyYWNrIGRlcGVuZGVuY2llcyBhbmQgdGhlIHJlYWxcbiAgICAgICAgICAvLyBkYXRhIGxvYWRpbmcgaGFwcGVucyBpbiB0aGUgZnVuY3Rpb24gdGhhdCBpdCByZXR1cm5lZC4gS2VlcCB0cmFja1xuICAgICAgICAgIC8vIGl0IGluIGBkZXBlbmRlbmN5RnVuY3Rpb25gIHNvIGl0IGNhbiBiZSBjYWxsZWQgb24gZWFjaCBjYWxsIG9mXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8ga2VlcCB0aGUgZGVwZW5kZW5jaWVzIGludGFjdCwgYW5kIGNhbGxcbiAgICAgICAgICAvLyB0aGUgZnVuY3Rpb24gdGhhdCBpdCByZXR1cm5lZCBvbmNlIHRvIGdldCB0aGUgYWN0dWFsIGRhdGE6XG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVzdWx0KSkge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24gPSBkYXRhXG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0KHRoaXMuY29udGV4dClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGRhdGEpKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRhdGEgaXMgYXN5bmNocm9ub3VzLCBpdCBjYW4ndCBiZSByZXR1cm5lZCBzdHJhaWdodCBhd2F5LlxuICAgICAgICAgIC8vIEJ1dCB3ZSBjYW4gY2hlYXQgdXNpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhbmQgYHJlc29sdmVkRGF0YWAsXG4gICAgICAgICAgLy8gd2hpY2ggaXMgZ29pbmcgdG8gcmVjZWl2ZSB0aGUgbG9hZGVkIGRhdGEgYXN5bmNocm9ub3VzbHksXG4gICAgICAgICAgLy8gdHJpZ2dlcmluZyBhIHJlY29tcHV0ZSBvZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCBjYWxsc1xuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgLlxuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gdHJ1ZVxuICAgICAgICAgIHRoaXMucmVzb2x2ZURhdGEoZGF0YSwgbG9hZGluZ09wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID0gcmVzb2x2ZUNvdW50ZXJcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gZGF0YVxuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gQ2xlYXIgZGF0YSB1bnRpbCBwcm9taXNlIGlzIHJlc29sdmVkIGFuZCBgcmVzb2x2ZWREYXRhYCBpcyBzZXRcbiAgICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGFQYXRoKSB7XG4gICAgICAgIGRhdGEgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5yb290RGF0YSxcbiAgICAgICAgICBub3JtYWxpemVEYXRhUGF0aChgJHt0aGlzLmRhdGFQYXRofS8ke2RhdGFQYXRofWApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVEYXRhKGxvYWQsIGxvYWRpbmdPcHRpb25zID0ge30pIHtcbiAgICAgIC8vIFVzZSBhIHRpbWVvdXQgdG8gYWxsb3cgYWxyZWFkeSByZXNvbHZlZCBwcm9taXNlcyB0byByZXR1cm4gZGF0YSB3aXRob3V0XG4gICAgICAvLyBzaG93aW5nIGEgbG9hZGluZyBpbmRpY2F0b3IuXG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKSwgMClcbiAgICAgIGxldCBkYXRhID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IChpc0Z1bmN0aW9uKGxvYWQpID8gbG9hZCgpIDogbG9hZClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBlcnJvcilcbiAgICAgIH1cbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuL0RhdGFNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBzZXRUZW1wb3JhcnlJZCwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemUsXG4gIGRlYm91bmNlQXN5bmNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNPcHRpb25zOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gdmFsdWUgPT5cbiAgICAgICAgICB0aGlzLnJlbGF0ZVxuICAgICAgICAgICAgPyB0aGlzLmhhc09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgICAgPyB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICAgICAgPyB0aGlzLnZhbHVlLm1hcChjb252ZXJ0VmFsdWUpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICA6IGNvbnZlcnRWYWx1ZSh0aGlzLnZhbHVlKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gV2hlbiByZWxhdGluZyBhbmQgYXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLi4uXG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiZcbiAgICAgICAgICB0aGlzLmhhc09wdGlvbnMgJiYgKFxuICAgICAgICAgICAgLy8gLi4uaWYgdGhlIHZhbHVlIGlzIGZvcmNlZCB0byBudWxsIGJlY2F1c2UgYSBkaXNhcHBlYXJlZCBvcHRpb24uLi5cbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsICYmIHRoaXMudmFsdWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIC8vIC4uLm9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlZmVyZW5jZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBvcHRpb25cbiAgICAgICAgICAgIC8vIHZhbHVlLCBzbyB0aGF0IGl0J2xsIGhvbGQgYWN0dWFsIGRhdGEsIG5vdCBqdXN0IGEgcmVmZXJlbmNlIGlkLlxuICAgICAgICAgICAgaXNSZWZlcmVuY2UodGhpcy52YWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjb252ZXJ0ID0gdmFsdWUgPT5cbiAgICAgICAgICB0aGlzLnJlbGF0ZVxuICAgICAgICAgICAgPyB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKVxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlLm1hcChjb252ZXJ0KVxuICAgICAgICAgIDogY29udmVydCh2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRPcHRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpXG4gICAgfSxcblxuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHRoaXMuc2NoZW1hLm9wdGlvbnMsICdvcHRpb25zJywge1xuICAgICAgICByZXNvbHZlQ291bnRlcjogMVxuICAgICAgfSkgPz8gW11cbiAgICAgIGlmICghaXNBcnJheShkYXRhKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb3B0aW9ucyBkYXRhLCBzaG91bGQgYmUgYXJyYXk6ICR7ZGF0YX1gKVxuICAgICAgfVxuICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgdGhpcy5oYXNPcHRpb25zID0gZGF0YS5sZW5ndGggPiAwXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzT3B0aW9ucyhkYXRhKVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgLy8gVGhpcyBpcyBvdmVycmlkZGVuIGluIGBUeXBlTXVsdGlzZWxlY3RgIHRvIHJldHVybiB0aGUgYHNlYXJjaGVkT3B0aW9uc2BcbiAgICAgIC8vIHdoZW4gYSBzZWFyY2ggZmlsdGVyIHdhcyBhcHBsaWVkLlxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICByZWxhdGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWxhdGUnLCB7XG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIGByZWxhdGVCeTogJ2lkJ2BcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIFdlIGNhbm5vdCB1c2Ugc2NoZW1hIGFjY2Vzc29yIGNhbGxiYWNrIG1hZ2ljIGZvciBgcmVsYXRlYCBhcyB3ZSBuZWVkXG4gICAgICAvLyB0aGlzIG91dHNpZGUgb2YgdGhlIGNvbXBvbmVudCdzIGxpZmUtc3Bhbiwgc2VlIGBwcm9jZXNzRGF0YSgpYCBiZWxvdy5cbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZ3JvdXBCeTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2dyb3VwQnknLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYG9wdGlvbnMubGFiZWxLZXlgIC8gYG9wdGlvbkxhYmVsS2V5YD9cbiAgICBvcHRpb25MYWJlbDogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMubGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAnbGFiZWwnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGxhYmVsIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ2xhYmVsJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgb3B0aW9ucy52YWx1ZUtleWAgLyBgb3B0aW9uVmFsdWVLZXlgP1xuICAgIG9wdGlvblZhbHVlOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy52YWx1ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQodmFsdWUpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICd2YWx1ZSc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdmFsdWUgfHxcbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJiAnaWQnIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ3ZhbHVlJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IENvbnNpZGVyIG1vdmluZyBzZWFyY2ggdG8gYG9wdGlvbnMuc2VhcmNoYD9cbiAgICBzZWFyY2hGaWx0ZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2gnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHNlYXJjaCkge1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgY29uc3QgeyBmaWx0ZXIsIGRlYm91bmNlIH0gPSBpc0Z1bmN0aW9uKHNlYXJjaClcbiAgICAgICAgICAgID8geyBmaWx0ZXI6IHNlYXJjaCB9XG4gICAgICAgICAgICA6IHNlYXJjaFxuICAgICAgICAgIHJldHVybiBkZWJvdW5jZSA/IGRlYm91bmNlQXN5bmMoZmlsdGVyLCBkZWJvdW5jZSkgOiBmaWx0ZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZ3JvdXBCeUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSA/ICdsYWJlbCcgOiBudWxsXG4gICAgfSxcblxuICAgIGdyb3VwQnlPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSA/ICdvcHRpb25zJyA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE9wdGlvbktleShrZXkpIHtcbiAgICAgIGNvbnN0IFtvcHRpb25dID0gdGhpcy5hY3RpdmVPcHRpb25zXG4gICAgICByZXR1cm4gaXNPYmplY3Qob3B0aW9uKSAmJiBrZXkgaW4gb3B0aW9uID8ga2V5IDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVsYXRlKSB7XG4gICAgICAgICAgLy8gSWYgaWRzIGFyZSBtaXNzaW5nIGFuZCB3ZSB3YW50IHRvIHJlbGF0ZSwgc2V0IHRlbXBvcmFyeSBpZHMuXG4gICAgICAgICAgLy8gTk9URTogV2UgbmVlZCB0byBtb2RpZnkgdGhlIGFjdHVhbCBkYXRhLCBtYWtpbmcgYSBjb3B5IHdvbid0IHdvcmtcbiAgICAgICAgICAvLyBhcyBpdCB3b24ndCBwcm9wYWdhdGUuXG4gICAgICAgICAgLy8gTk9URTogVGhpcyBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSBkYXRhIGlzIGZyb20gdGhlIGdyYXBoIHRoYXRcbiAgICAgICAgICAvLyB3ZSdyZSBjdXJyZW50bHkgZWRpdGluZy5cbiAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoISgnaWQnIGluIG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgc2V0VGVtcG9yYXJ5SWQob3B0aW9uLCAnaWQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cEJ5KSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBlZCA9IHt9XG4gICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMucmVkdWNlKFxuICAgICAgICAgICAgKHJlc3VsdHMsIG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBncm91cCA9IG9wdGlvblt0aGlzLmdyb3VwQnldXG4gICAgICAgICAgICAgIGxldCBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdXG4gICAgICAgICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdID0ge1xuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeUxhYmVsXTogZ3JvdXAsXG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5T3B0aW9uc106IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChlbnRyeSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbnRyeS5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH0sXG5cbiAgICBoYXNPcHRpb24ob3B0aW9uKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICB9LFxuXG4gICAgZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgIGNvbnN0IGZpbmRPcHRpb24gPSAob3B0aW9ucywgdmFsdWUsIGdyb3VwQnkpID0+IHtcbiAgICAgICAgLy8gU2VhcmNoIGZvciB0aGUgb3B0aW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBhbmQgcmV0dXJuIHRoZVxuICAgICAgICAvLyB3aG9sZSBvYmplY3QuXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXBCeSkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kT3B0aW9uKG9wdGlvbi5vcHRpb25zLCB2YWx1ZSwgbnVsbClcbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uVmFsdWVcbiAgICAgICAgPyBmaW5kT3B0aW9uKHRoaXMuYWN0aXZlT3B0aW9ucywgdmFsdWUsIHRoaXMuZ3JvdXBCeSlcbiAgICAgICAgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25WYWx1ZSlcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25WYWx1ZV1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvblZhbHVlKVxuICAgICAgICAgID8gb3B0aW9uVmFsdWUuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBvcHRpb25cbiAgICB9LFxuXG4gICAgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvbkxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uTGFiZWwpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uTGFiZWxdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25MYWJlbClcbiAgICAgICAgICA/IG9wdGlvbkxhYmVsLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogbGFiZWxpemUoYCR7b3B0aW9ufWApXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBpZiAoc2NoZW1hLnJlbGF0ZSkge1xuICAgICAgLy8gRm9yIGludGVybmFsbHkgcmVsYXRpbmcgZGF0YSAoYHNjaGVtYS5vcHRpb25zLmRhdGFQYXRoYCksIHdlIG5lZWQgdG9cbiAgICAgIC8vIHByb2Nlc3MgYm90aCB0aGUgb3B0aW9ucyAoZm9yICcjcmVmJykgYW5kIHRoZSB2YWx1ZSAoJyNpZCcpLlxuICAgICAgLy8gU2VlIGBEYXRhTWl4aW4uaGFuZGxlRGF0YVNjaGVtYSgpYDpcbiAgICAgIGNvbnN0IHBhdGggPSBzY2hlbWEub3B0aW9ucz8uZGF0YVBhdGhcbiAgICAgIGNvbnN0IHJlbGF0ZWREYXRhUGF0aCA9IHBhdGhcbiAgICAgICAgPyBub3JtYWxpemVEYXRhUGF0aChgJHtkYXRhUGF0aH0vJHtwYXRofWApXG4gICAgICAgIDogbnVsbFxuICAgICAgZ3JhcGguYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKVxuICAgICAgaWYgKHJlbGF0ZWREYXRhUGF0aCkge1xuICAgICAgICBncmFwaC5zZXRTb3VyY2VSZWxhdGVkKHJlbGF0ZWREYXRhUGF0aClcbiAgICAgIH1cbiAgICAgIC8vIENvbnZlcnQgcmVsYXRpbmcgb2JqZWN0cyB0byBhIHNoYWxsb3cgY29weSB3aXRoIG9ubHkgdGhlIGlkIGxlZnQuXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIHVzaW5nIGByZWxhdGVCeWA6XG4gICAgICBjb25zdCBwcm9jZXNzUmVsYXRlID0gdmFsdWUgPT4gKHZhbHVlID8geyBpZDogdmFsdWUuaWQgfSA6IHZhbHVlKVxuICAgICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgYm90aCBvYmplY3RzICYgYXJyYXlzLCBlLmcuICdjaGVja2JveGVzJzpcbiAgICAgIHZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc1JlbGF0ZSlcbiAgICAgICAgOiBwcm9jZXNzUmVsYXRlKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tY2hlY2tib3hlcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICApXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94ZXMnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIGRlZmF1bHRWYWx1ZTogW10sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gb3B0aW9uIHx8IFtdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2hlY2tib3hlcyB7XG4gIGxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xuICB9XG5cbiAgLmRpdG8tY2hlY2tib3gge1xuICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb2RlKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImNvZGVcIlxuICA6c3R5bGU9XCJzdHlsZVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBDb2RlRmxhc2sgZnJvbSAnY29kZWZsYXNrJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvZGUnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgYWxpZ25Cb3R0b206IGZhbHNlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgM1xuICAgIH0sXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiBgaGVpZ2h0OiBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgZmxhc2sgPSBuZXcgQ29kZUZsYXNrKHRoaXMuJHJlZnMuY29kZSwge1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMuc2NoZW1hLmxhbmd1YWdlIHx8ICdqYXZhc2NyaXB0JyxcbiAgICAgIHRhYlNpemU6IHRoaXMuc2NoZW1hLmluZGVudFNpemUgfHwgMixcbiAgICAgIGxpbmVOdW1iZXJzOiBmYWxzZVxuICAgIH0pXG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICBsZXQgaWdub3JlVXBkYXRlID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgdGhpcy5kb21Pbih0aGlzLiRyZWZzLmNvZGUucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSwge1xuICAgICAgZm9jdXM6IG9uRm9jdXMsXG4gICAgICBibHVyOiBvbkJsdXJcbiAgICB9KVxuXG4gICAgY29uc3Qgc2V0Q29kZSA9IGNvZGUgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IGZsYXNrLmNvZGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gdHJ1ZVxuICAgICAgICBmbGFzay51cGRhdGVDb2RlKGNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICBvbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxhc2sub25VcGRhdGUodmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVVwZGF0ZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2RlKHZhbHVlIHx8ICcnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRDb2RlKHRoaXMudmFsdWUgfHwgJycpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb2RlIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBGb3IgcHJvcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAuY29kZWZsYXNrIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIC8vIElnbm9yZSB0aGUgcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICB9XG5cbiAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gIC5jb2RlZmxhc2tfX3ByZSB7XG4gICAgLy8gVXNlIHNhbWUgcGFkZGluZyBhcyAuZGl0by1jb2RlXG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gIH1cblxuICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgLmNvZGVmbGFza19fY29kZSxcbiAgLmNvZGVmbGFza19fbGluZXMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ubztcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcbiAgfVxuXG4gIC5jb2RlZmxhc2tfX2xpbmVzIHtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tY29sb3IoXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIC5kaXRvLWlucHV0KDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiKVxuICAgICAgaW5wdXQoXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICApXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBTa2V0Y2hQaWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZUFscGhhPVwiIWFscGhhXCJcbiAgICAgIDpkaXNhYmxlRmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0Q29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aW55Y29sb3IgZnJvbSAndGlueWNvbG9yMidcbmltcG9ydCB7IFNrZXRjaCBhcyBTa2V0Y2hQaWNrZXIgfSBmcm9tICdAbGs3Ny92dWUzLWNvbG9yJ1xuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgVHJpZ2dlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gTk9URTogdnVlMy1jb2xvciBjYWxscyBpdCAnaGV4Jywgd2hpbGUgdGlueWNvbG9yIGNhbGxzIGl0ICdoZXg2J1xuICAgICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICAgIHJnYjogJ3JnYmEnXG4gICAgICAgICAgfVtmb3JtYXRdIHx8XG4gICAgICAgICAgZm9ybWF0XG4gICAgICAgIClcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVtrZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRpbnljb2xvcih2YWx1ZSkudG9TdHJpbmcoZm9ybWF0KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBoZXhWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcih0aGlzLnZhbHVlKVxuICAgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93QWxwaGFgP1xuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0c2A/XG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZm9jdXNlZChmb2N1c2VkKSB7XG4gICAgICBpZiAoIWZvY3VzZWQgJiYgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcihgIyR7dGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZX1gKVxuICAgICAgICBpZiAoY29sb3I/LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBjb2xvci50b1N0cmluZyh0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIC8vIFRPRE86IEVtaXQgJ2lucHV0JyBoZXJlIGluc3RlYWQsIGFuZCAnY2hhbmdlJyBpbiBibHVyLCBsaWtlIG90aGVycy5cbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbiRjb2xvci1zd2F0Y2gtd2lkdGg6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeS1zaXplO1xuJGNvbG9yLXN3YXRjaC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gJGJvcmRlci13aWR0aDtcblxuLmRpdG8tY29sb3Ige1xuICAuZGl0by1pbnB1dCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgaW5wdXQge1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbi1jbGVhciB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoO1xuICB9XG5cbiAgLmRpdG8tY29sb3ItcGlja2VyIHtcbiAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgfVxuXG4gIC5kaXRvLWNvbG9yLXByZXZpZXcge1xuICAgIGJhY2tncm91bmQ6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeTtcbiAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZTtcblxuICAgICYsXG4gICAgZGl2IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHdpZHRoOiAkY29sb3Itc3dhdGNoLXdpZHRoO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXM7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXM7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudChcbiAgOmlzPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gIHYtYmluZD1cIiRwcm9wc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuLy8gVGhpcyBpcyB0aGUgZ2VuZXJhbCBwdXJwb3NlICdjb21wb25lbnQnIHR5cGUsIHdoaWNoIGNhbiByZXNvbHZlIHRvIGFueSBjdXN0b21cbi8vIGNvbXBvbmVudCB0aHJvdWdoIGBzY2hlbWEuY29tcG9uZW50YCwgc2VlIGByZXNvbHZlU2NoZW1hQ29tcG9uZW50KClgLiBUaGlzXG4vLyBjYW4gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyByZXNvbHZlU2NoZW1hQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbXBvbmVudCcsIHtcbiAgLy8gT3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGBkZWZhdWx0VmFsdWU6IG51bGxgIHRvIG5vdCBzZXQgYW55IGRhdGEgZm9yIGN1c3RvbVxuICAvLyBjb21wb25lbnRzLCB1bmxlc3MgdGhleSBwcm92aWRlIGEgZGVmYXVsdCB2YWx1ZS5cbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGFsaWduQm90dG9tOiBmYWxzZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8tIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4uL21peGlucy9EYXRhTWl4aW4uanMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2NvbXB1dGVkJywgJ2RhdGEnLCAnaGlkZGVuJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gICAgZGVmYXVsdFZpc2libGU6IGZhbHNlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICAgIGlmIChzY2hlbWEuZGF0YSB8fCBzY2hlbWEuZGF0YVBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgJ3NjaGVtYScsIHtcbiAgICAgICAgICAgICAgLy8gTW9kaWZ5aW5nIGB0aGlzLmRhdGFgIGJlbG93IHRyaWdnZXJzIGFub3RoZXIgY2FsbCBvZiB0aGVcbiAgICAgICAgICAgICAgLy8gYHZhbHVlYCBnZXR0ZXIsIHNvIHVzZSBhIHZhbHVlIG9mIDIgZm9yIGByZXNvbHZlQ291bnRlcmAgdG9cbiAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSByZXNvbHZlZCBkYXRhIHR3aWNlLlxuICAgICAgICAgICAgICByZXNvbHZlQ291bnRlcjogMlxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMubmFtZV0gPSB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnZGF0ZScsICdkYXRldGltZScsICd0aW1lJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0sXG4gICAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGhlcmUgc28gd2UgZ2V0IHBsYWNlaG9sZGVyIGFkZGVkLiBDb21lIHVwIHdpdGggYVxuICAgIC8vIGJldHRlciB3YXkgdG8gc3VwcG9ydCBhdHRyaWJ1dGVzIHBlciBjb21wb25lbnQgKGEgbGlzdCBvZiBhY3R1YWxseVxuICAgIC8vIHN1cHBvcnRlZCBhdHRyaWJ1dGVzKVxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBkYXRlVmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBkYXRlRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZGF0ZUZvcm1hdCcsIHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGU6ICdkYXRlLXBpY2tlcicsXG4gICAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICAgIH1bdHlwZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBpc0RhdGUodmFsdWUpID8gdmFsdWUudG9JU09TdHJpbmcoKSA6IHZhbHVlXG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsXG4gIHByb2Nlc3NGb3JtcyxcbiAgZ2V0TmFtZWRTY2hlbWFzLFxuICBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLFxuICBnZXRGb3JtU2NoZW1hcyxcbiAgZ2V0Vmlld1NjaGVtYSxcbiAgaXNDb21wYWN0LFxuICBpc0lubGluZWQsXG4gIGlzT2JqZWN0U291cmNlLFxuICBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0FycmF5LFxuICBpc051bWJlcixcbiAgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtSZXNvdXJjZU1peGluLCBTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgZGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAgIHJldHVybiBpc0xpc3RTb3VyY2Uoc2NoZW1hKSA/IFtdIDogbnVsbFxuICB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JhcHBlZFByaW1pdGl2ZXM6IG51bGwsXG4gICAgICBpZ25vcmVSb3V0ZUNoYW5nZTogZmFsc2UsXG4gICAgICB1bndyYXBwaW5nUHJpbWl0aXZlczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBpc09iamVjdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIGlzTGlzdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc0xpc3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICBpc1JlYWR5KCkge1xuICAgICAgLy8gTGlzdHMgdGhhdCBoYXZlIG5vIGRhdGEgYW5kIG5vIGFzc29jaWF0ZWQgcmVzb3VyY2Ugc2hvdWxkIHN0aWxsIHJlbmRlcixcbiAgICAgIC8vIGFzIHRoZXkgbWF5IGJlIGdldHRpbmcgdGhlaXIgZGF0YSBlbHNld2hlcmUsIGUuZy4gYGNvbXB1dGUoKWAuXG4gICAgICByZXR1cm4gdGhpcy5oYXNEYXRhIHx8ICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0luVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld0NvbXBvbmVudFxuICAgIH0sXG5cbiAgICB3cmFwUHJpbWl0aXZlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS53cmFwUHJpbWl0aXZlc1xuICAgIH0sXG5cbiAgICBsaXN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMudmFsdWVcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IHRvIGxpc3QgYXJyYXkuXG4gICAgICAgICAgZGF0YSA9IGRhdGEgIT0gbnVsbCA/IFtkYXRhXSA6IFtdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBnZXRzIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgdW53cmFwcGluZyBpcyBub3QgaGFwcGVuaW5nXG4gICAgICAgICAgLy8gYXQgdGhlIHJvb3QgaW4gYHNldERhdGEoKWAsIGJ1dCBoZXJlIGluc3RlYWQuXG4gICAgICAgICAgZGF0YSA9IHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkgfHwgZGF0YVxuICAgICAgICB9XG4gICAgICAgIGRhdGEgfHw9IFtdXG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgaWYgKHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgdW53cmFwcGluZyBvbmNlIGBsaXN0RGF0YWAgaXMgcmVldmFsdWF0ZWQsIHNvIHNldFxuICAgICAgICAgICAgLy8gdGhpcyB0byBgZmFsc2VgIGFnYWluLiBTZWUgYHdyYXBwZWRQcmltaXRpdmVzYCB3YXRjaGVyIGFib3ZlLlxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhLm1hcCh2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiB2YWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRQcmltaXRpdmVzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyBkYXRhICYmIGRhdGEubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IGRhdGFbMF1cbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvYmplY3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBnbyB0aHJvdWdoIGBsaXN0RGF0YWAgaW50ZXJuYWxseSwgd2hpY2ggZG9lcyBhbGwgdGhlXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgb2YgYHdyYXBQcmltaXRpdmVzYCwgZXRjLlxuICAgICAgICByZXR1cm4gdGhpcy5saXN0RGF0YVswXSB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gZGF0YSA/IFtkYXRhXSA6IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIC8vIFRoZSBzb3VyY2VTY2hlbWEgb2YgYSBsaXN0IGlzIHRoZSBsaXN0J3Mgc2NoZW1hIGl0c2VsZi5cbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBUZWxsIHRoZSBgJHJvdXRlYCB3YXRjaGVyIHRvIGlnbm9yZSB0aGUgY2hhbmdlZCB0cmlnZ2VyZWQgaGVyZTpcbiAgICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcXVlcnksIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2ggfSlcbiAgICAgICAgICAvLyBDaGFuZ2UgdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMsIGJ1dCBkb24ndCB0cmlnZ2VyIGEgcm91dGVcbiAgICAgICAgICAvLyBjaGFuZ2UsIGFzIHRoYXQgd291bGQgY2F1c2UgdGhlIGxpc3QgdG8gcmVsb2FkLlxuICAgICAgICAgIC8vIHJlcGxhY2VSb3V0ZSh7IHF1ZXJ5IH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5IC8vIExldCBnZXRTdG9yZUFjY2Vzc29yKCkgZG8gdGhlIGFjdHVhbCBzZXR0aW5nXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB0b3RhbDogZ2V0U3RvcmVBY2Nlc3NvcigndG90YWwnKSxcblxuICAgIGNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLmNvbHVtbnMpXG4gICAgfSxcblxuICAgIHNjb3BlcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuc2NvcGVzKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0U2NvcGUoKSB7XG4gICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2NvcGVzKSkge1xuICAgICAgICAgIGlmIChzY29wZS5kZWZhdWx0U2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlyc3RcbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpKVxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBsaW5rZWQgdmlldyBzY2hlbWEgaWYgdGhpcyBzb3VyY2UgZWRpdHMgaXQgaXRzIGl0ZW1zIHRocm91Z2hcbiAgICAvLyBhIGxpbmtlZCB2aWV3LlxuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gZ2V0Vmlld1NjaGVtYSh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld1xuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVkICYmICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSkge1xuICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZnJvbS5wYXRoID09PSB0by5wYXRoICYmIGZyb20uaGFzaCA9PT0gdG8uaGFzaCkge1xuICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIC8vIFNraXAgdGhlIGluaXRpYWwgc2V0dGluZyBvZiB3cmFwcGVkUHJpbWl0aXZlcyBhcnJheVxuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgZnJvbSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIHRoZSB3cmFwcGVkUHJpbWl0aXZlcyBjaGFuZ2UsIG1hcCB0aGVpciB2YWx1ZXMgYmFjayB0b1xuICAgICAgICAgIC8vIHRoZSBhcnJheSBvZiBwcmltaXRpdmVzLCBpbiBhIHByaW1pdGl2ZSB3YXkgOilcbiAgICAgICAgICAvLyBCdXQgc2V0IGB1bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVgLCBzbyB0aGUgYGxpc3REYXRhYCBjb21wdXRlZFxuICAgICAgICAgIC8vIHByb3BlcnR5IGtub3dzIGFib3V0IGl0LCB3aGljaCBzZXRzIGl0IHRvIGBmYWxzZWAgYWdhaW4uXG4gICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdG8ubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy50b3RhbCA9IDBcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gV2hlbiBuZXcgZGF0YSBpcyBsb2FkZWQsIHdlIGNhbiBzdG9yZSBpdCByaWdodCBiYWNrIGluIHRoZSBkYXRhIG9mIHRoZVxuICAgICAgLy8gdmlldyBvciBmb3JtIHRoYXQgY3JlYXRlZCB0aGlzIGxpc3QgY29tcG9uZW50LlxuICAgICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBmb3IgbGlzdCBkYXRhOlxuICAgICAgLy8gLSBBcnJheTogYFsuLi5dYFxuICAgICAgLy8gLSBPYmplY3Q6IGB7IHJlc3VsdHM6IFsuLi5dLCB0b3RhbCB9YCwgc2VlIGB1bndyYXBMaXN0RGF0YSgpYFxuICAgICAgaWYgKFxuICAgICAgICAhZGF0YSB8fFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJiBpc0FycmF5KGRhdGEpIHx8XG4gICAgICAgIHRoaXMuaXNPYmplY3RTb3VyY2UgJiYgaXNPYmplY3QoZGF0YSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSBmb3JtYXQgZGlkbid0IG1hdGNoLCBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyBvYmplY3QsIGluIHdoaWNoIGNhc2UgYHRoaXMudmFsdWVgIHdhcyBhbHJlYWR5IHNldCBieVxuICAgICAgICAvLyBgdW53cmFwTGlzdERhdGEoKWAgYW5kIHdlJ3JlIGRvbmUgbm93LlxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSAmJiB0aGlzLmlzSW5WaWV3KSB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sbGVyIGlzIHNlbmRpbmcgZGF0YSBmb3IgYSBmdWxsIG11bHRpLWNvbXBvbmVudCB2aWV3LFxuICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIG5lc3RlZCBsaXN0IGRhdGEuXG4gICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVud3JhcExpc3REYXRhKGRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiZcbiAgICAgICAgaXNPYmplY3QoZGF0YSkgJiZcbiAgICAgICAgaXNOdW1iZXIoZGF0YS50b3RhbCkgJiZcbiAgICAgICAgaXNBcnJheShkYXRhLnJlc3VsdHMpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgQGRpdG9qcy9zZXJ2ZXIgc2VuZHMgZGF0YSBpbiB0aGUgZm9ybSBvZiBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIHJlc3VsdCwgYnV0IHJlbWVtYmVyIHRoZSB0b3RhbCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnRvdGFsXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhLnJlc3VsdHNcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9wZW5TY2hlbWFDb21wb25lbnQoLTEpKVxuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICByZXR1cm4gaXRlbVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtKGl0ZW0pIHtcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdERhdGEgJiYgbGlzdERhdGEuaW5kZXhPZihpdGVtKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGxpc3REYXRhLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxldGVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBjb25zdCBsYWJlbCA9IChcbiAgICAgICAgaXRlbSAmJlxuICAgICAgICB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgaXRlbSwge1xuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGV4dGVuZGVkOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICApXG5cbiAgICAgIGNvbnN0IG5vdGlmeSA9ICgpID0+XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiB0aGlzLmlzVHJhbnNpZW50ID8gJ2luZm8nIDogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgIGAke2xhYmVsfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmAsXG4gICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG5cbiAgICAgIGlmIChcbiAgICAgICAgaXRlbSAmJlxuICAgICAgICB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5kZWxldGV9ICR7bGFiZWx9P2BcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSlcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5tYXRjaChwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSB0aGVyZSwgc28ganVzdCBjYWxsIGBvbkNvbXBsZXRlKClgOlxuICAgICAgICAgICAgICBjYWxsT25Db21wbGV0ZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgY29tcG9uZW50J3MgcGF0aCwgdGhlbiBjYWxsIGBvbkNvbXBsZXRlKClgXzpcbiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyXG4gICAgICAgICAgICAgICAgLnB1c2goeyBwYXRoIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdClcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBLZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIC8vIGVuZCBvZiBgbWV0aG9kc2BcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0xpc3RzIHdpdGggbmVzdGVkIGZvcm1zIGNhbm5vdCBsb2FkIGRhdGEgZnJvbSB0aGVpciBvd24gcmVzb3VyY2VzJ1xuICAgICAgKVxuICAgIH1cbiAgICAvLyBVc2UgZGlmZmVyZW50bHkgbmFtZWQgdXJsIHBhcmFtZXRlcnMgb24gZWFjaCBuZXN0ZWQgbGV2ZWwgZm9yIGlkIGFzXG4gICAgLy8gb3RoZXJ3aXNlIHRoZXkgd291bGQgY2xhc2ggYW5kIG92ZXJyaWRlIGVhY2ggb3RoZXIgaW5zaWRlICRyb3V0ZS5wYXJhbXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgY29uc3QgcGFyYW0gPSBgaWQke2xldmVsICsgMX1gXG4gICAgY29uc3QgbWV0YSA9IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgICBjb25zdCBmb3JtTWV0YSA9IHtcbiAgICAgIC4uLm1ldGEsXG4gICAgICAvLyBXaGVuIGNoaWxkcmVuIGFyZSBmbGF0dGVuZWQgKGUuZy4gdHJlZS1saXN0cyksIGluY2x1ZGUgdGhlIGBmbGF0dGVuYFxuICAgICAgLy8gc2V0dGluZyBhbHNvLCBmb3IgZmxhdHRlbmluZyBiZWxvdy5cbiAgICAgIGZsYXR0ZW4sXG4gICAgICBuZXN0ZWQsXG4gICAgICBwYXJhbVxuICAgIH1cbiAgICBjb25zdCBjaGlsZFJvdXRlcyA9IGF3YWl0IHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3MoY2hpbGRSb3V0ZXMsIGxldmVsICsgMSlcbiAgICB9XG4gICAgLy8gSW5saW5lZCBmb3JtcyBkb24ndCBuZWVkIHRvIGFjdHVhbGx5IGFkZCByb3V0ZXMuXG4gICAgaWYgKGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAhaW5saW5lZCkge1xuICAgICAgY29uc3QgZ2V0UGF0aFdpdGhQYXJhbSA9IChwYXRoLCBwYXJhbSkgPT5cbiAgICAgICAgcGFyYW1cbiAgICAgICAgICA/IHBhdGhcbiAgICAgICAgICAgID8gYCR7cGF0aH0vOiR7cGFyYW19YFxuICAgICAgICAgICAgOiBgOiR7cGFyYW19YFxuICAgICAgICAgIDogcGF0aFxuXG4gICAgICAvLyBMaXN0cyBpbiBzaW5nbGUtY29tcG9uZW50LXZpZXdzIChsZXZlbCA9PT0gMCkgdXNlIHRoZWlyIHZpZXcncyBwYXRoLFxuICAgICAgLy8gd2hpbGUgYWxsIG90aGVycyBuZWVkIHRoZWlyIHBhdGggcHJlZml4ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGF0aDpcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBsZXZlbCA9PT0gMCA/ICcnIDogc2NoZW1hLnBhdGhcbiAgICAgIGNvbnN0IGZvcm1Sb3V0ZSA9IHtcbiAgICAgICAgLy8gT2JqZWN0IHNvdXJjZXMgZG9uJ3QgbmVlZCBpZCBwYXJhbXMgaW4gdGhlaXIgZm9ybSBwYXRocywgYXMgdGhleVxuICAgICAgICAvLyBkaXJlY3RseSBlZGl0IG9uZSBvYmplY3QuXG4gICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgaXNMaXN0U291cmNlKHNjaGVtYSkgJiYgcGFyYW0pLFxuICAgICAgICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50KFxuICAgICAgICAgIG5lc3RlZCA/ICdEaXRvRm9ybU5lc3RlZCcgOiAnRGl0b0Zvcm0nXG4gICAgICAgICksXG4gICAgICAgIG1ldGE6IGZvcm1NZXRhXG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3RTb3VyY2Uoc2NoZW1hKSkge1xuICAgICAgICAvLyBBbHNvIGFkZCBhIHBhcmFtIHJvdXRlLCBzaW1wbHkgdG8gaGFuZGxlICcvY3JlYXRlJyBsaW5rcyB0aGUgc2FtZVxuICAgICAgICAvLyB3YXkgdGhhdCBsaXN0cyBkbywgd2hlcmUgaXQgb3ZlcmxhcHMgd2l0aCA6aWQgZm9yIGl0ZW0gaWRzLlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgLi4uZm9ybVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgcGFyYW0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aCkge1xuICAgICAgICAvLyBKdXN0IHJlZGlyZWN0IGJhY2sgdG8gdGhlIHBhcmVudCB3aGVuIGEgbmVzdGVkIHNvdXJjZSByb3V0ZSBpcyBoaXQuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgICAgIHJlZGlyZWN0OiAnLicsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gUGFydGl0aW9uIGNoaWxkUm91dGVzIGludG8gdGhvc2UgdGhhdCBuZWVkIGZsYXR0ZW5pbmcgKGUuZy4gdHJlZS1saXN0cylcbiAgICAgIC8vIGFuZCB0aG9zZSB0aGF0IGRvbid0LCBhbmQgcHJvY2VzcyBlYWNoIGdyb3VwIHNlcGFyYXRlbHkgYWZ0ZXIuXG4gICAgICBjb25zdCBbZmxhdFJvdXRlcywgc3ViUm91dGVzXSA9IGNoaWxkUm91dGVzLnJlZHVjZShcbiAgICAgICAgKHJlcywgcm91dGUpID0+IHtcbiAgICAgICAgICByZXNbcm91dGUubWV0YS5mbGF0dGVuID8gMCA6IDFdLnB1c2gocm91dGUpXG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9LFxuICAgICAgICBbW10sIFtdXVxuICAgICAgKVxuICAgICAgaWYgKHN1YlJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9ybVJvdXRlLmNoaWxkcmVuID0gc3ViUm91dGVzXG4gICAgICB9XG4gICAgICByb3V0ZXMucHVzaChmb3JtUm91dGUpXG4gICAgICAvLyBBZGQgdGhlIHByZWZpeGVkIGZvcm1Sb3V0ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBmb3IgbmVzdGVkIGxpc3RzLlxuICAgICAgaWYgKGZsYXRSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRSb3V0ZSBvZiBmbGF0Um91dGVzKSB7XG4gICAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgICAgLi4uKGNoaWxkUm91dGUucmVkaXJlY3QgPyBjaGlsZFJvdXRlIDogZm9ybVJvdXRlKSxcbiAgICAgICAgICAgIHBhdGg6IGAke2Zvcm1Sb3V0ZS5wYXRofS8ke2NoaWxkUm91dGUucGF0aH1gLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAuLi5jaGlsZFJvdXRlLm1ldGEsXG4gICAgICAgICAgICAgIGZsYXR0ZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBncmFwaC5hZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMgfSBmcm9tICcuL3NjaGVtYSdcblxuZXhwb3J0IGNvbnN0IGZpbHRlckNvbXBvbmVudHMgPSB7XG4gICd0ZXh0JyhmaWx0ZXIpIHtcbiAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ2NvbnRhaW5zJyxcbiAgICAgICAgdmFsdWU6ICdjb250YWlucydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZXF1YWxzJyxcbiAgICAgICAgdmFsdWU6ICdlcXVhbHMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ3N0YXJ0cyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdzdGFydHMtd2l0aCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZW5kcyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdlbmRzLXdpdGgnXG4gICAgICB9XG4gICAgXVxuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yc1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgd2lkdGg6ICcyLzUnLFxuICAgICAgICAgICAgb3B0aW9uczogaXNBcnJheShmaWx0ZXIub3BlcmF0b3JzKVxuICAgICAgICAgICAgICA/IG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgb3B0aW9uID0+IGZpbHRlci5vcGVyYXRvcnMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBvcHRpb25zLFxuICAgICAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICB0ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgd2lkdGg6IGZpbHRlci5vcGVyYXRvcnMgPyAnMy81JyA6ICdmaWxsJyxcbiAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gICdkYXRlLXJhbmdlJygpIHtcbiAgICAvLyBVc2Ugc2hvcnRlciBkYXRlIGZvcm1hdCBpbiBkYXRlLXJhbmdlIGZpbHRlcnM6XG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHtcbiAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbToge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzEvMicsXG4gICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnMS8yJyxcbiAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGaWx0ZXJzUGFuZWwoYXBpLCBmaWx0ZXJzLCBkYXRhUGF0aCwgcHJveHkpIHtcbiAgY29uc3QgeyBzdGlja3ksIC4uLmZpbHRlclNjaGVtYXMgfSA9IGZpbHRlcnNcbiAgY29uc3QgcGFuZWwgPSB7XG4gICAgdHlwZTogJ3BhbmVsJyxcbiAgICBsYWJlbDogJ0ZpbHRlcnMnLFxuICAgIG5hbWU6ICckZmlsdGVycycsXG4gICAgdGFyZ2V0OiBkYXRhUGF0aCxcbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzdGlja3ksXG5cbiAgICAvLyBOT1RFOiBPbiBwYW5lbHMsIHRoZSBkYXRhKCkgY2FsbGJhY2sgZG9lcyBzb21ldGhpbmcgZWxzZSB0aGFuIG9uIG5vcm1hbFxuICAgIC8vIHNjaGVtYTogSXQgcHJvZHVjZXMgdGhlIGBkYXRhYCBwcm9wZXJ0eSB0byBiZSBwYXNzZWQgdG8gdGhlIHBhbmVsJ3NcbiAgICAvLyBzY2hlbWEsIG5vdCB0aGUgZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgcGFuZWwgY29tcG9uZW50IGRpcmVjdGx5LlxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzRGF0YShcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIHByb3h5LnF1ZXJ5XG4gICAgICApXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHM6IGNyZWF0ZUZpbHRlcnNDb21wb25lbnRzKGZpbHRlclNjaGVtYXMpLFxuICAgIGJ1dHRvbnM6IGNyZWF0ZUZpbHRlcnNCdXR0b25zKGZhbHNlKSxcbiAgICBwYW5lbEJ1dHRvbnM6IGNyZWF0ZUZpbHRlcnNCdXR0b25zKHRydWUpLFxuXG4gICAgZXZlbnRzOiB7XG4gICAgICBjaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGZpbHRlcnMoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRGaWx0ZXJzRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgfSxcblxuICAgICAgaGFzRmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVycy5sZW5ndGggPiAwXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFwcGx5RmlsdGVycygpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgJ2FwcGx5RmlsdGVycygpJyxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmZpbHRlcnNcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHByb3h5LnF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnByb3h5LnF1ZXJ5LFxuICAgICAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXJzLFxuICAgICAgICAgIC8vIENsZWFyIHBhZ2luYXRpb24gd2hlbiBhcHBseWluZyBvciBjbGVhcmluZyBmaWx0ZXJzOlxuICAgICAgICAgIHBhZ2U6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBjbGVhckZpbHRlcnMoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjbGVhckZpbHRlcnMoKScpXG4gICAgICAgIHRoaXMucmVzZXREYXRhKClcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBwYW5lbClcbiAgcmV0dXJuIHBhbmVsXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNCdXR0b25zKHNtYWxsKSB7XG4gIHJldHVybiB7XG4gICAgY2xlYXI6IHtcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgdGV4dDogc21hbGwgPyBudWxsIDogJ0NsZWFyJyxcbiAgICAgIGRpc2FibGVkOiAoeyBzY2hlbWFDb21wb25lbnQgfSkgPT4gIXNjaGVtYUNvbXBvbmVudC5oYXNGaWx0ZXJzLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAvLyBTaW5jZSBwYW5lbCBidXR0b25zIGFyZSBvdXRzaWRlIG9mIHRoZSBzY2hlbWEsIHdlIG5lZWQgdG8gdXNlIHRoZVxuICAgICAgICAgIC8vIHNjaGVtYSBjb21wb25lbnQgcmVjZWl2ZWQgZnJvbSB0aGUgaW5pdGlhbGl6ZSBldmVudCBiZWxvdzpcbiAgICAgICAgICBzY2hlbWFDb21wb25lbnQuY2xlYXJGaWx0ZXJzKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdWJtaXQ6IHtcbiAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgdGV4dDogc21hbGwgPyBudWxsIDogJ0ZpbHRlcicsXG4gICAgICB2aXNpYmxlOiAhc21hbGwsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpIHtcbiAgY29uc3QgY29tcHMgPSB7fVxuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBPYmplY3QudmFsdWVzKGdldE5hbWVkU2NoZW1hcyhmaWx0ZXJzKSB8fCB7fSkpIHtcbiAgICAvLyBTdXBwb3J0IGJvdGggY3VzdG9tIGZvcm1zIGFuZCBkZWZhdWx0IGZpbHRlciBjb21wb25lbnRzLCB0aHJvdWdoIHRoZVxuICAgIC8vIGBmaWx0ZXJDb21wb25lbnRzYCByZWdpc3RyeS4gRXZlbiBmb3IgZGVmYXVsdCBmaWx0ZXJzLCBzdGlsbCB1c2UgdGhlXG4gICAgLy8gcHJvcGVydGllcyBpbiBgZmlsdGVyYCBhcyB0aGUgYmFzZSBmb3IgYGZvcm1gLCBzbyB0aGluZ3MgbGlrZSBgbGFiZWxgXG4gICAgLy8gY2FuIGJlIGNoYW5nZWQgb24gdGhlIHJlc3VsdGluZyBmb3JtLlxuICAgIGNvbnN0IHsgZmlsdGVyOiB0eXBlLCB3aWR0aCwgLi4uZm9ybSB9ID0gZmlsdGVyXG4gICAgY29uc3QgY29tcG9uZW50cyA9IHR5cGVcbiAgICAgID8gZmlsdGVyQ29tcG9uZW50c1t0eXBlXT8uKGZpbHRlcilcbiAgICAgIDogZmlsdGVyLmNvbXBvbmVudHNcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9ybS50eXBlID0gJ2Zvcm0nXG4gICAgICBmb3JtLmNvbXBvbmVudHMgPSB7fVxuICAgICAgLy8gQ29udmVydCBsYWJlbHMgdG8gcGxhY2Vob2xkZXJzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNvbXBvbmVudC5sYWJlbCB8fCBsYWJlbGl6ZShjb21wb25lbnQubmFtZSB8fCBrZXkpXG4gICAgICAgICAgZm9ybS5jb21wb25lbnRzW2tleV0gPSB7XG4gICAgICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFiZWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbXBzW2ZpbHRlci5uYW1lXSA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm0ubGFiZWwsXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgICAgZm9ybSxcbiAgICAgICAgaW5saW5lZDogdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZpbHRlciAnJHtmaWx0ZXIubmFtZX0nOiBVbmtub3duIGZpbHRlciB0eXBlICcke3R5cGV9Jy5gXG4gICAgICApXG4gICAgfVxuICB9XG4gIHJldHVybiBjb21wc1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkge1xuICBjb25zdCBjb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50c1tuYW1lXVxuICByZXR1cm4gY29tcG9uZW50Py5mb3JtPy5jb21wb25lbnRzXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbHRlcnNEYXRhKHNjaGVtYSwgZGF0YSkge1xuICBjb25zdCBmaWx0ZXJzID0gW11cbiAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbnRyeSA9IGRhdGFbbmFtZV1cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIC8vIE1hcCBjb21wb25lbnRzIHNlcXVlbmNlIHRvIGFyZ3VtZW50czpcbiAgICAgIGNvbnN0IGFyZ3MgPSBPYmplY3Qua2V5cyhnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkpLm1hcChcbiAgICAgICAga2V5ID0+IGVudHJ5W2tleV0gPz8gbnVsbFxuICAgICAgKVxuICAgICAgLy8gT25seSBhcHBseSBmaWx0ZXIgaWYgdGhlcmUgYXJlIHNvbWUgYXJndW1lbnRzIHRoYXQgYXJlbid0IG51bGw6XG4gICAgICBpZiAoYXJncy5zb21lKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKSkge1xuICAgICAgICBmaWx0ZXJzLnB1c2goYCR7bmFtZX06JHthcmdzLm1hcChKU09OLnN0cmluZ2lmeSkuam9pbignLCcpfWApXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWx0ZXJzXG59XG5cbmZ1bmN0aW9uIHBhcnNlRmlsdGVyc0RhdGEoc2NoZW1hLCBxdWVyeSkge1xuICBjb25zdCBmaWx0ZXJzID0ge31cbiAgLy8gU2FtZSBhcyBAZGl0b2pzL3NlcnZlcidzIFF1ZXJ5UGFyYW1ldGVycy5maWx0ZXI6IFRyYW5zbGF0ZSB0aGUgc3RyaW5nIGRhdGFcbiAgLy8gZnJvbSAkcm91dGUucXVlcnkgYmFjayB0byBwYXJhbSBsaXN0cyBwZXIgZmlsdGVyOlxuICBpZiAocXVlcnkpIHtcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBhc0FycmF5KHF1ZXJ5LmZpbHRlcikpIHtcbiAgICAgIGNvbnN0IFssIG5hbWUsIGpzb25dID0gZmlsdGVyLm1hdGNoKC9eKFxcdyspOiguKikkLylcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbHRlcnNbbmFtZV0gPSBhc0FycmF5KEpTT04ucGFyc2UoYFske2pzb259XWApKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgfVxuICB9XG4gIGNvbnN0IGZpbHRlcnNEYXRhID0ge31cbiAgZm9yIChjb25zdCBuYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tuYW1lXVxuICAgIGlmIChhcmdzKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpXG4gICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBhcmdzW2luZGV4KytdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlsdGVyc0RhdGFbbmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbGlzdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4pXG4gIC5kaXRvLW5hdmlnYXRpb24oXG4gICAgdi1pZj1cInNjb3BlcyB8fCBoYXNQYWdpbmF0aW9uXCJcbiAgKVxuICAgIERpdG9TY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAvLy0gV2hlbiB0aGVyZSdzIG9ubHkgcGFnaW5hdGlvbiB3aXRob3V0IHNjb3Blcywgd2UgbmVlZCBhIGdvb2Qgb2wnIHNwYWNlclxuICAgIC8vLSBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgIClcbiAgICBEaXRvUGFnaW5hdGlvbihcbiAgICAgIHYtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgIClcbiAgdGFibGUuZGl0by10YWJsZShcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICB9YFxuICApXG4gICAgRGl0b1RhYmxlSGVhZChcbiAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgIERpdG9EcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICA6bW9kZWxWYWx1ZT1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgOm9wdGlvbnM9XCJnZXRTb3J0YWJsZU9wdGlvbnMoZmFsc2UpXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgQHVwZGF0ZTptb2RlbFZhbHVlPVwidmFsdWUgPT4gKGxpc3REYXRhID0gdmFsdWUpXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGxpc3REYXRhXCJcbiAgICAgICAgOmlkPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoc2NoZW1hLCBpdGVtKVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgRGl0b1RhYmxlQ2VsbChcbiAgICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0Q2VsbENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApXG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIERpdG9TY2hlbWFJbmxpbmVkKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgICAgICAgICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgIClcbiAgICAvLy0gUmVuZGVyIGNyZWF0ZSBidXR0b25zIGluc2lkZSB0YWJsZSB3aGVuIG5vdCBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICB0Zm9vdChcbiAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiAhc2luZ2xlXCJcbiAgICApXG4gICAgICB0clxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKDpjb2xzcGFuPVwibnVtQ29sdW1uc1wiKVxuICAgICAgICAgIERpdG9FZGl0QnV0dG9ucyhcbiAgICAgICAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICApXG4gIC8vLSBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICBEaXRvRWRpdEJ1dHRvbnMuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQge1xuICBnZXRWaWV3RWRpdFBhdGgsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnQsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGNyZWF0ZUZpbHRlcnNQYW5lbCB9IGZyb20gJy4uL3V0aWxzL2ZpbHRlci5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IHBpY2tCeSwgZXF1YWxzLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluLCBTb3J0YWJsZU1peGluXSxcbiAgYWxpZ25Cb3R0b206IGZhbHNlLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShhcGksIHNjaGVtYSwgZGF0YVBhdGgsIHNjaGVtYUNvbXBvbmVudCkge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gc2NoZW1hXG4gICAgLy8gU2VlIGlmIHRoaXMgbGlzdCBjb21wb25lbnQgd2FudHMgdG8gZGlzcGxheSBhIGZpbHRlciBwYW5lbCwgYW5kIGlmIHNvLFxuICAgIC8vIGNyZWF0ZSB0aGUgcGFuZWwgc2NoZW1hIGZvciBpdCB0aHJvdWdoIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIC8vIEF0IHRoZSB0aW1lIG9mIHRoZSBjcmVhdGlvbiBvZiB0aGUgcGFuZWwgc2NoZW1hLCB0aGUgc2NoZW1hQ29tcG9uZW50IGlzXG4gICAgICAvLyBub3QgZmlsbGVkIHlldCwgc28gd2UgY2FuJ3QgZ2V0IHRoZSB0YXJnZXQgY29tcG9uZW50IChkYXRhUGF0aCkgcmlnaHRcbiAgICAgIC8vIGF3YXkuIFVzZSBhIHByb3h5IGFuZCBhIGdldHRlciBpbnN0ZWFkLCB0byBnZXQgYXJvdW5kIHRoaXM6XG4gICAgICBjb25zdCBnZXRMaXN0Q29tcG9uZW50ID0gKCkgPT5cbiAgICAgICAgc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgoXG4gICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgY29tcG9uZW50ID0+IGNvbXBvbmVudC50eXBlID09PSAnbGlzdCdcbiAgICAgICAgKVxuXG4gICAgICByZXR1cm4gY3JlYXRlRmlsdGVyc1BhbmVsKGFwaSwgZmlsdGVycywgZGF0YVBhdGgsIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgc2ltcGxlIHByb3h5IHRvIGdldCAvIHNldCB0aGUgcXVlcnksIHNlZSBnZXRGaWx0ZXJzUGFuZWwoKVxuICAgICAgICBnZXQgcXVlcnkoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldExpc3RDb21wb25lbnQoKT8ucXVlcnlcbiAgICAgICAgfSxcbiAgICAgICAgc2V0IHF1ZXJ5KHF1ZXJ5KSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZ2V0TGlzdENvbXBvbmVudCgpXG4gICAgICAgICAgY29uc29sZS5sb2coJ3NldCBxdWVyeScsICEhY29tcG9uZW50KVxuICAgICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIHZhbHVlcyBmb3IgY29tcGFyaW5nIHdpdGggZXF1YWxzKClcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG9iaiA9PiBwaWNrQnkob2JqLCB2YWx1ZSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICdzZXQgcXVlcnknLFxuICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShmaWx0ZXIocXVlcnkpKSxcbiAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZmlsdGVyKGNvbXBvbmVudC5xdWVyeSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoIWVxdWFscyhmaWx0ZXIocXVlcnkpLCBmaWx0ZXIoY29tcG9uZW50LnF1ZXJ5KSkpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2xvYWQgZGF0YScpXG4gICAgICAgICAgICAgIGNvbXBvbmVudC5xdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzUGFnaW5hdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlICYmIHRoaXMudG90YWwgPiB0aGlzLnBhZ2luYXRlXG4gICAgfSxcblxuICAgIGhhc0xpc3RCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICEhKHRoaXMuYnV0dG9uU2NoZW1hcyB8fCB0aGlzLmNyZWF0YWJsZSlcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsaXN0RGF0YS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICB0aGlzLmVkaXRhYmxlIHx8XG4gICAgICAgICAgdGhpcy5kZWxldGFibGUgfHxcbiAgICAgICAgICB0aGlzLmRyYWdnYWJsZVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NlbGxFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0lubGluZWQgJiYgdGhpcy5oYXNFZGl0QnV0dG9uc1xuICAgIH0sXG5cbiAgICBoYXNFdmVuQ291bnQoKSB7XG4gICAgICByZXR1cm4gISh0aGlzLmxpc3REYXRhLmxlbmd0aCAlIDIpXG4gICAgfSxcblxuICAgIG51bUNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodGhpcy5jb2x1bW5zID8gT2JqZWN0LmtleXModGhpcy5jb2x1bW5zKS5sZW5ndGggOiAxKSArXG4gICAgICAgICh0aGlzLmhhc0NlbGxFZGl0QnV0dG9ucyA/IDEgOiAwKVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0RGF0YVBhdGgoaW5kZXgpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICB9LFxuXG4gICAgZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRWaWV3RWRpdFBhdGgodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkgfHwgdGhpcy5wYXRoXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICByZXR1cm4gYCR7cGF0aH0vJHtpZH1gXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDZWxsQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY2VsbC0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBkYXRhUGF0aDogdGhpcy5nZXREYXRhUGF0aChpbmRleClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRmlsdGVyRXJyb3JzKGVycm9ycykge1xuICAgICAgY29uc3QgZmlsdGVyc0RhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgJyRmaWx0ZXJzJylcbiAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0UGFuZWxCeURhdGFQYXRoKGZpbHRlcnNEYXRhUGF0aClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpLFxuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLmNvbHVtbnMpLFxuICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgYXBpLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJvdXRlcyxcbiAgICAgICAgbGV2ZWwsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgZmxhdHRlbixcbiAgICAgICAgcHJvY2Vzc1xuICAgICAgKVxuICAgIF0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1saXN0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLW5hdmlnYXRpb24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIHBhZGRpbmctYm90dG9tOiAkY29udGVudC1wYWRkaW5nLWhhbGY7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAmOmVtcHR5IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc2NvcGVzLFxuICAgIC5kaXRvLXBhZ2luYXRpb24ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1zaW5nbGUge1xuICAgIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9MYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudChcbiAgOmxhYmVsPVwidmFsdWVcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xhYmVsJywge1xuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBhbGlnbkJvdHRvbTogZmFsc2Vcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1sYWJlbC1jb21wb25lbnQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDJlbTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbWFya3VwKDppZD1cImRhdGFQYXRoXCIpXG4gIC5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgIClcbiAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgIDprZXk9XCJuYW1lXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICApXG4gICAgICAgICAgSWNvbig6bmFtZT1cImljb25cIilcbiAgRWRpdG9yQ29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgcmVmPVwiZWRpdG9yXCJcbiAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gIC5kaXRvLXJlc2l6ZShcbiAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IEVkaXRvciwgRWRpdG9yQ29udGVudCwgTWFyaywgZ2V0TWFya0F0dHJpYnV0ZXMgfSBmcm9tICdAdGlwdGFwL3Z1ZS0zJ1xuLy8gaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbi8vIEVzc2VudGlhbHM6XG5pbXBvcnQgeyBEb2N1bWVudCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWRvY3VtZW50J1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQnXG4vLyBNYXJrczpcbmltcG9ydCB7IEJvbGQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ib2xkJ1xuaW1wb3J0IHsgQ29kZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUnXG5pbXBvcnQgeyBJdGFsaWMgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pdGFsaWMnXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbGluaydcbmltcG9ydCB7IFN0cmlrZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXN0cmlrZSdcbmltcG9ydCB7IFVuZGVybGluZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXVuZGVybGluZSdcbi8vIE5vZGVzOlxuaW1wb3J0IHsgQmxvY2txdW90ZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJsb2NrcXVvdGUnXG5pbXBvcnQgeyBDb2RlQmxvY2sgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlLWJsb2NrJ1xuaW1wb3J0IHsgSGFyZEJyZWFrIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGFyZC1icmVhaydcbmltcG9ydCB7IEhlYWRpbmcgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oZWFkaW5nJ1xuaW1wb3J0IHsgUGFyYWdyYXBoIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tcGFyYWdyYXBoJ1xuaW1wb3J0IHsgSG9yaXpvbnRhbFJ1bGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ob3Jpem9udGFsLXJ1bGUnXG5pbXBvcnQgeyBPcmRlcmVkTGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLW9yZGVyZWQtbGlzdCdcbmltcG9ydCB7IEJ1bGxldExpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1idWxsZXQtbGlzdCdcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbGlzdC1pdGVtJ1xuLy8gVE9ETzpcbi8vIGltcG9ydCB7IEltYWdlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taW1hZ2UnXG4vLyBpbXBvcnQgeyBNZW50aW9uIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbWVudGlvbidcbi8vIGltcG9ydCB7IENvZGVCbG9ja0hpZ2hsaWdodCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUtYmxvY2staGlnaGxpZ2h0J1xuLy8gaW1wb3J0IHsgVGFibGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZSdcbi8vIGltcG9ydCB7IFRhYmxlQ2VsbCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLWNlbGwnXG4vLyBpbXBvcnQgeyBUYWJsZUhlYWRlciB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLWhlYWRlcidcbi8vIGltcG9ydCB7IFRhYmxlTm9kZXMgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1ub2Rlcydcbi8vIGltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtcm93J1xuLy8gaW1wb3J0IHsgVGFza0xpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YXNrLWxpc3QnXG4vLyBpbXBvcnQgeyBUYXNrSXRlbSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhc2staXRlbSdcbi8vIFRvb2xzOlxuaW1wb3J0IHsgSGlzdG9yeSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhpc3RvcnknXG5cbmltcG9ydCB7IEljb24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzT2JqZWN0LFxuICB1bmRlcnNjb3JlLFxuICBoeXBoZW5hdGUsXG4gIGRlYm91bmNlLFxuICBjYW1lbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ21hcmt1cCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBJY29uXG4gIH0sXG5cbiAgYWxpZ25Cb3R0b206IGZhbHNlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVkaXRvcjogbnVsbCxcbiAgICAgIGhlaWdodDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDEwXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgfHwgYGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWFya0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdtYXJrcycsIHtcbiAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgaXRhbGljOiB0cnVlLFxuICAgICAgICB1bmRlcmxpbmU6IHRydWUsXG4gICAgICAgIHN0cmlrZTogdHJ1ZSxcbiAgICAgICAgc21hbGw6IHRydWUsXG4gICAgICAgIGNvZGU6IHRydWUsXG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICBvbkNsaWNrOiBlZGl0b3IgPT4gdGhpcy5vbkNsaWNrTGluayhlZGl0b3IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGJhc2ljTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgcGFyYWdyYXBoOiB7XG4gICAgICAgICAgLy8gRG8gbm90IHNob3cgdGhlIHBhcmFncmFwaCBjb21tYW5kIGFzIGFjdGl2ZSBpZiBhbnkgb2YgdGhlIGJsb2NrXG4gICAgICAgICAgLy8gY29tbWFuZHMgYXJlIGFsc28gYWN0aXZlOlxuICAgICAgICAgIGlnbm9yZUFjdGl2ZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMub3RoZXJOb2RlQnV0dG9ucy5zb21lKGJ1dHRvbiA9PiBidXR0b24uaXNBY3RpdmUpXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRpbmc6IHtcbiAgICAgICAgICBhdHRyaWJ1dGU6ICdsZXZlbCcsXG4gICAgICAgICAgdmFsdWVzOiBbMSwgMiwgMywgNCwgNSwgNl1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb3RoZXJOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBidWxsZXRMaXN0OiB0cnVlLFxuICAgICAgICBvcmRlcmVkTGlzdDogdHJ1ZSxcbiAgICAgICAgYmxvY2txdW90ZTogdHJ1ZSxcbiAgICAgICAgY29kZUJsb2NrOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB0b29sQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ3Rvb2xzJywge1xuICAgICAgICB1bmRvOiB0cnVlLFxuICAgICAgICByZWRvOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBncm91cGVkQnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya0J1dHRvbnMsXG4gICAgICAgIGJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIG90aGVyTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRvb2xCdXR0b25zXG4gICAgICB9ID0gdGhpc1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgbWFya0J1dHRvbnMsXG4gICAgICAgIGJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIG90aGVyTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRvb2xCdXR0b25zXG4gICAgICBdLmZpbHRlcihidXR0b25zID0+IGJ1dHRvbnMubGVuZ3RoID4gMClcbiAgICB9LFxuXG4gICAgcGFyc2VPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlOiB7XG4gICAgICAgICAgJ2NvbGxhcHNlJzogZmFsc2UsXG4gICAgICAgICAgJ3ByZXNlcnZlJzogdHJ1ZSxcbiAgICAgICAgICAncHJlc2VydmUtYWxsJzogJ2Z1bGwnXG4gICAgICAgIH1bdGhpcy53aGl0ZXNwYWNlXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBlZGl0b3JPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWRpdGFibGU6ICF0aGlzLnJlYWR5b25seSxcbiAgICAgICAgYXV0b0ZvY3VzOiB0aGlzLmF1dG9mb2N1cyxcbiAgICAgICAgZGlzYWJsZUlucHV0UnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLmlucHV0LFxuICAgICAgICBkaXNhYmxlUGFzdGVSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMucGFzdGUsXG4gICAgICAgIHBhcnNlT3B0aW9uczogdGhpcy5wYXJzZU9wdGlvbnNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB3aGl0ZXNwYWNlOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2hpdGVzcGFjZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdjb2xsYXBzZSdcbiAgICAgIC8vIFBvc3NpYmxlIHZhbHVlcyBhcmU6ICdjb2xsYXBzZScsICdwcmVzZXJ2ZScsICdwcmVzZXJ2ZS1hbGwnXG4gICAgfSksXG5cbiAgICBlbmFibGVSdWxlczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VuYWJsZVJ1bGVzJywge1xuICAgICAgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlbmFibGVSdWxlcykge1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoZW5hYmxlUnVsZXMpXG4gICAgICAgICAgPyBlbmFibGVSdWxlc1xuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBpbnB1dDogISFlbmFibGVSdWxlcyxcbiAgICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgcmVhZHlvbmx5OiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgYXV0b2ZvY3VzOiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgZW5hYmxlUnVsZXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJ1xuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlRGVib3VuY2VkID0gZGVib3VuY2UoZWRpdG9yID0+IHtcbiAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgdGhpcy52YWx1ZSA9IGVkaXRvci5nZXRIVE1MKClcbiAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfSwgMTAwKVxuXG4gICAgY29uc3Qgb25VcGRhdGUgPSAoeyBlZGl0b3IgfSkgPT4ge1xuICAgICAgc2V0VmFsdWVEZWJvdW5jZWQoZWRpdG9yKVxuICAgICAgdGhpcy5vbklucHV0KClcbiAgICB9XG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Q29udGVudCh2YWx1ZSwgZmFsc2UsIHRoaXMucGFyc2VPcHRpb25zKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3Ioe1xuICAgICAgLi4udGhpcy5lZGl0b3JPcHRpb25zLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgZXh0ZW5zaW9uczogdGhpcy5nZXRFeHRlbnNpb25zKCksXG4gICAgICBjb250ZW50OiB0aGlzLnZhbHVlIHx8ICcnXG4gICAgfSlcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhlZGl0b3IpIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUobnVsbClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogZ2V0TWFya0F0dHJpYnV0ZXModGhpcy5lZGl0b3Iuc3RhdGUsICdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgICBsZXQgeyBocmVmLCB0aXRsZSB9ID0gYXR0cmlidXRlc1xuICAgICAgICBpZiAoaHJlZikge1xuICAgICAgICAgIC8vIFNlZSBpZiBgaHJlZmAgY2FuIGJlIHBhcnNlZCBhcyBhIFVSTCwgYW5kIGlmIG5vdCxcbiAgICAgICAgICAvLyBwcmVmaXggaXQgd2l0aCBhIGRlZmF1bHQgcHJvdG9jb2wuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXdcbiAgICAgICAgICAgIG5ldyBVUkwoaHJlZilcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGhyZWYgPSBgaHR0cHM6Ly8ke2hyZWZ9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuY29tbWFuZHMuc2V0TGluayh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3IuY29tbWFuZHMudW5zZXRMaW5rKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RXh0ZW5zaW9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya3MgPSB7fSxcbiAgICAgICAgbm9kZXMgPSB7fSxcbiAgICAgICAgdG9vbHMgPSB7fVxuICAgICAgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gW1xuICAgICAgICAvLyBFc3NlbnRpYWxzOlxuICAgICAgICBEb2N1bWVudCxcbiAgICAgICAgVGV4dCxcbiAgICAgICAgUGFyYWdyYXBoLCAvLyBidXR0b24gY2FuIGJlIGNvbnRyb2xsZWQsIGJ1dCBub2RlIG5lZWRzIHRvIGJlIG9uLlxuXG4gICAgICAgIC8vIE1hcmtzOiBgc2NoZW1hLm1hcmtzYFxuICAgICAgICBtYXJrcy5ib2xkICYmIEJvbGQsXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBJdGFsaWMsXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBVbmRlcmxpbmUsXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBTdHJpa2UsXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIFNtYWxsLFxuICAgICAgICBtYXJrcy5jb2RlICYmIENvZGUsXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgTGlua1dpdGhUaXRsZSxcblxuICAgICAgICAvLyBOb2RlczogYHNjaGVtYS5ub2Rlc2BcbiAgICAgICAgbm9kZXMuYmxvY2txdW90ZSAmJiBCbG9ja3F1b3RlLFxuICAgICAgICBub2Rlcy5jb2RlQmxvY2sgJiYgQ29kZUJsb2NrLFxuICAgICAgICBIYXJkQnJlYWssIC8vIFRPRE86IFNob3VsZCB0aGlzIGFsd2F5cyBvbj9cbiAgICAgICAgbm9kZXMuaGVhZGluZyAmJiBIZWFkaW5nLmNvbmZpZ3VyZSh7IGxldmVsczogbm9kZXMuaGVhZGluZyB9KSxcbiAgICAgICAgbm9kZXMuaG9yaXpvbnRhbFJ1bGUgJiYgSG9yaXpvbnRhbFJ1bGUsXG4gICAgICAgIChub2Rlcy5vcmRlcmVkTGlzdCB8fCBub2Rlcy5idWxsZXRMaXN0KSAmJiBMaXN0SXRlbSxcbiAgICAgICAgbm9kZXMuYnVsbGV0TGlzdCAmJiBCdWxsZXRMaXN0LFxuICAgICAgICBub2Rlcy5vcmRlcmVkTGlzdCAmJiBPcmRlcmVkTGlzdCxcbiAgICAgICAgLy8gVE9ETzpcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgVG9kb0l0ZW0sXG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIFRvZG9MaXN0LFxuXG4gICAgICAgIC8vIFRvb2xzOiBgc2NoZW1hLnRvb2xzYFxuICAgICAgICB0b29scy5oaXN0b3J5ICYmIEhpc3RvcnlcbiAgICAgIF0uZmlsdGVyKGV4dGVuc2lvbiA9PiAhIWV4dGVuc2lvbilcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9ucyhzZXR0aW5nc05hbWUsIGRlc2NyaXB0aW9ucykge1xuICAgICAgY29uc3QgbGlzdCA9IFtdXG5cbiAgICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICh7IG5hbWUsIGljb24sIGF0dHJpYnV0ZXMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiAoXG4gICAgICAgICAgICB0aGlzLmVkaXRvci5pc0FjdGl2ZShuYW1lLCBhdHRyaWJ1dGVzKSAmJlxuICAgICAgICAgICAgKGlnbm9yZUFjdGl2ZSA9PSBudWxsIHx8ICFpZ25vcmVBY3RpdmUoKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGB0b2dnbGUke2NhbWVsaXplKG5hbWUsIHRydWUpfWBcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvci5jb21tYW5kc1trZXldKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBhdHRyaWJ1dGVzID0+XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuY2hhaW4oKVtrZXldKGF0dHJpYnV0ZXMpLmZvY3VzKCkucnVuKClcbiAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgID8gb25DbGljayh0aGlzLmVkaXRvciwgYXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICA6IGNvbW1hbmQoYXR0cmlidXRlcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zY2hlbWFbc2V0dGluZ3NOYW1lXVxuICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZGVzY3JpcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucykpIHtcbiAgICAgICAgICBjb25zdCBzZXR0aW5nTmFtZSA9IFsndW5kbycsICdyZWRvJ10uaW5jbHVkZXMoa2V5KSA/ICdoaXN0b3J5JyA6IGtleVxuICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tzZXR0aW5nTmFtZV1cbiAgICAgICAgICBjb25zdCBuYW1lID0gdW5kZXJzY29yZShrZXkpXG4gICAgICAgICAgY29uc3QgaWNvbiA9IGh5cGhlbmF0ZShrZXkpXG4gICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGF0dHJpYnV0ZSwgdmFsdWVzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZXMpICYmIGlzQXJyYXkoc2V0dGluZykpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgaGVhZGluZyBsZXZlbCBhdHRyczpcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYCR7aWNvbn0tJHt2YWx1ZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogeyBbYXR0cmlidXRlXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IFNtYWxsID0gTWFyay5jcmVhdGUoe1xuICBuYW1lOiAnc21hbGwnLFxuXG4gIHBhcnNlSFRNTCgpIHtcbiAgICByZXR1cm4gW3sgdGFnOiAnc21hbGwnIH1dXG4gIH0sXG5cbiAgcmVuZGVySFRNTCgpIHtcbiAgICByZXR1cm4gWydzbWFsbCcsIDBdXG4gIH0sXG5cbiAgYWRkQ29tbWFuZHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNldFNtYWxsOlxuICAgICAgICBhdHRyaWJ1dGVzID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMuc2V0TWFyayh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpXG4gICAgICAgIH0sXG4gICAgICB0b2dnbGVTbWFsbDpcbiAgICAgICAgYXR0cmlidXRlcyA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnRvZ2dsZU1hcmsodGhpcy5uYW1lLCBhdHRyaWJ1dGVzKVxuICAgICAgICB9LFxuICAgICAgdW5zZXRTbWFsbDpcbiAgICAgICAgKCkgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy51bnNldE1hcmsodGhpcy5uYW1lKVxuICAgICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBMaW5rV2l0aFRpdGxlID0gTGluay5leHRlbmQoe1xuICBpbmNsdXNpdmU6IGZhbHNlLFxuICBzY2hlbWE6IHtcbiAgICBhdHRyczoge1xuICAgICAgaHJlZjoge1xuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9LFxuICAgICAgdGl0bGU6IHtcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYXJzZUhUTUwoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgdGFnOiAnYScsXG4gICAgICAgICAgZ2V0QXR0cnM6IGVsZW1lbnQgPT4gKHtcbiAgICAgICAgICAgIGhyZWY6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgICB0aXRsZTogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcblxuICAgIHJlbmRlckhUTUwobm9kZSkge1xuICAgICAgcmV0dXJuIFsnYScsIG5vZGUuYXR0cnMsIDBdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbWFya3VwIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXJlc2l6ZSB7XG4gICAgQGV4dGVuZCAlaWNvbi1yZXNpemU7XG5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiB1bnNldDtcbiAgICBsZWZ0OiB1bnNldDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgd2lkdGg6IDFlbTtcbiAgICBoZWlnaHQ6IDFlbTtcbiAgfVxuXG4gIC5Qcm9zZU1pcnJvciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAuZGl0by1tYXJrdXAtZWRpdG9yIHtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgLy8gTW92ZSBwYWRkaW5nIFwiaW5zaWRlXCIgZWRpdG9yIHRvIGNvcnJlY3RseSBwb3NpdGlvbiBzY3JvbGxiYXJcbiAgICBtYXJnaW4tcmlnaHQ6IC0kaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgcGFkZGluZy1yaWdodDogJGlucHV0LXBhZGRpbmctaG9yO1xuICB9XG5cbiAgLmRpdG8tYnV0dG9ucy10b29sYmFyIHtcbiAgICBtYXJnaW46ICRpbnB1dC1wYWRkaW5nLXZlciAwO1xuICB9XG5cbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgcCxcbiAgdWwsXG4gIG9sLFxuICBwcmUsXG4gIGJsb2NrcXVvdGUge1xuICAgIG1hcmdpbjogMXJlbSAwO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogMS40cmVtO1xuICB9XG5cbiAgaDIge1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB9XG5cbiAgdWwge1xuICAgIGxpc3Qtc3R5bGU6IGRpc2M7XG4gIH1cblxuICBjb2RlIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm87XG4gIH1cblxuICBwcmUge1xuICAgIHBhZGRpbmc6IDAuN3JlbSAxcmVtO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXI7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuXG4gICAgY29kZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cblxuICBwIGNvZGUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuM3JlbTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcbiAgfVxuXG4gIGEge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICBjb2xvcjogYmx1ZTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgfVxuXG4gIHVsLFxuICBvbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAycmVtO1xuICB9XG5cbiAgbGkge1xuICAgICYgPiBwLFxuICAgICYgPiBvbCxcbiAgICAmID4gdWwge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxuXG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXI7XG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcblxuICAgIHAge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tdWx0aXNlbGVjdChcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgfWBcbilcbiAgVnVlTXVsdGlzZWxlY3QoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgOmNsYXNzPVwieyAnbXVsdGlzZWxlY3QtLXNob3ctaGlnaGxpZ2h0Jzogc2hvd0hpZ2hsaWdodCB9XCJcbiAgICA6c2hvd0xhYmVscz1cImZhbHNlXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgdGFnUGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiXG4gICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICA6Y3VzdG9tTGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgOnRyYWNrQnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgOmdyb3VwTGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgIDpncm91cFZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgOmludGVybmFsU2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgOnByZXNlcnZlU2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbGVhck9uU2VsZWN0PVwiIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsb3NlT25TZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICBAb3Blbj1cIm9uT3BlblwiXG4gICAgQGNsb3NlPVwib25DbG9zZVwiXG4gICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuaW1wb3J0IFZ1ZU11bHRpc2VsZWN0IGZyb20gJ3Z1ZS1tdWx0aXNlbGVjdCdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0Jvb2xlYW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ211bHRpc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFZ1ZU11bHRpc2VsZWN0IH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNNb3VudGVkOiBmYWxzZSxcbiAgICAgIHNlYXJjaGVkT3B0aW9uczogbnVsbCxcbiAgICAgIHBvcHVsYXRlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSlcbiAgICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAvLyBJZiBhbiBvcHRpb24gY2Fubm90IGJlIGZvdW5kLCB3ZSBtYXkgYmUgaW4gdGFnZ2FibGUgbW9kZSBhbmRcbiAgICAgICAgICAgICAgICAvLyBjYW4gYWRkIGl0LlxuICAgICAgICAgICAgICAgIHZhbHVlID0+IChcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHx8IHRoaXMuYWRkVGFnT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IG9wdGlvbnMgdGhhdCB3ZSBjb3VsZG4ndCBtYXRjaC5cbiAgICAgICAgICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGRpc3BsYXkgYW4gZXJyb3IgaW5zdGVhZD9cbiAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgIDogdGhpcy5zZWxlY3RlZE9wdGlvblxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIG9wdGlvbnMgb2JqZWN0LCBzaW5jZSB2dWUtbXVsdGlzZWxlY3QgY2FuJ3QgbWFwIHRoYXRcbiAgICAgICAgLy8gaXRzZWxmIHVuZm9ydHVuYXRlbHkuIGB0cmFjay1ieWAgaXMgdXNlZCBmb3IgOmtleSBtYXBwaW5nIGl0IHNlZW1zLlxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAob3B0aW9uIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSkpXG4gICAgICAgICAgOiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hlZE9wdGlvbnMgfHwgdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHNlYXJjaGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2hhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB0YWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdGF5T3BlbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0YXlPcGVuJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcigpIHtcbiAgICAgIGxldCB7IHBsYWNlaG9sZGVyLCBzZWFyY2hhYmxlLCB0YWdnYWJsZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmIChpc0Jvb2xlYW4ocGxhY2Vob2xkZXIpKSB7XG4gICAgICAgIHBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIgPyB1bmRlZmluZWQgOiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXIgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNlYXJjaGFibGUgJiYgdGFnZ2FibGVcbiAgICAgICAgICA/IGBTZWFyY2ggb3IgYWRkIGEgJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgICA6IHNlYXJjaGFibGVcbiAgICAgICAgICAgID8gYFNlbGVjdCBvciBzZWFyY2ggJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIDogcGxhY2Vob2xkZXJcbiAgICB9LFxuXG4gICAgc2hvd0hpZ2hsaWdodCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTW91bnRlZCAmJiB0aGlzLiRyZWZzLmVsZW1lbnQucG9pbnRlckRpcnR5XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5pc01vdW50ZWQgPSB0cnVlXG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICAvLyB2dWUtbXVsdGlzZWxlY3QgZG9lc24ndCBzdXBwb3J0IHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlLiBXZSBuZWVkIHRvXG4gICAgICAvLyBoYW5kbGUgaXQgaGVyZS5cbiAgICAgIHRoaXMuZm9jdXMoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYWRkVGFnT3B0aW9uKHRhZykge1xuICAgICAgaWYgKHRoaXMudGFnZ2FibGUpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCwgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgICAgY29uc3Qgb3B0aW9uID1cbiAgICAgICAgICBvcHRpb25MYWJlbCAmJiBvcHRpb25WYWx1ZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXTogdGFnLFxuICAgICAgICAgICAgICAgIC8vIFRPRE86IERlZmluZSBhIHNpbXBsZSBzY2hlbWEgb3B0aW9uIHRvIGNvbnZlcnQgdGhlIHRhZyB2YWx1ZVxuICAgICAgICAgICAgICAgIC8vIHRvIHNvbWV0aGluZyBlbHNlLCBlLmcuIGB0b1RhZzogdGFnID0+IHVuZGVyc2NvcmUodGFnKWBcbiAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdOiB0YWdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB0YWdcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5hY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIG9uT3BlbigpIHtcbiAgICAgIHRoaXMucG9wdWxhdGUgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uQ2xvc2UoKSB7XG4gICAgICAvLyBTaW5jZSB3ZSBkb24ndCBmaXJlIGJsdXIgZXZlbnRzIHdoaWxlIHRoZSBtdWx0aXNlbGVjdCBpcyBvcGVuIChzZWVcbiAgICAgIC8vIGJlbG93KSwgd2UgbmVlZCB0byBkbyBpdCBoZXJlLCB3aGVuIGl0J3MgYWN0dWFsbHkgY2xvc2VkLlxuICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICB0aGlzLm9uQmx1cigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIGlmICghdGhpcy4kcmVmcy5lbGVtZW50LmlzT3Blbikge1xuICAgICAgICBUeXBlTWl4aW4ubWV0aG9kcy5vbkJsdXIuY2FsbCh0aGlzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkFkZFRhZyh0YWcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuYWRkVGFnT3B0aW9uKHRhZylcbiAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25TZWFyY2hDaGFuZ2UocXVlcnkpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZpbHRlcikge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAvLyBTZXQgYHNlYXJjaGVkT3B0aW9uc2AgdG8gYW4gZW1wdHkgYXJyYXksIGJlZm9yZSBpdCB3aWxsIGJlXG4gICAgICAgICAgLy8gcG9wdWxhdGVkIGFzeW5jaHJvbm91c2x5IHdpdGggdGhlIGFjdHVhbCByZXN1bHRzLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gW11cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IGF3YWl0IHRoaXMucmVzb2x2ZURhdGEoXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnNlYXJjaEZpbHRlcihuZXcgRGl0b0NvbnRleHQodGhpcywgeyBxdWVyeSB9KSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ2xlYXIgYHNlYXJjaGVkT3B0aW9uc2Agd2hlbiB0aGUgcXVlcnkgaXMgY2xlYXJlZC5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5AaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QuY3NzJztcblxuJHNwaW5uZXItd2lkdGg6ICRzZWxlY3QtYXJyb3ctd2lkdGg7XG4kdGFnLWljb24td2lkdGg6IDEuOGVtO1xuJHRhZy1tYXJnaW46IDJweDtcbiR0YWctcGFkZGluZzogM3B4O1xuJHRhZy1saW5lLWhlaWdodDogMWVtO1xuXG4uZGl0by1tdWx0aXNlbGVjdCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmLmRpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlIHtcbiAgICAtLWlucHV0LXdpZHRoOiAxMDAlO1xuICB9XG5cbiAgJi5kaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlIHtcbiAgICAtLWlucHV0LXdpZHRoOiBhdXRvO1xuICB9XG5cbiAgJi5kaXRvLWhhcy1lcnJvcnMge1xuICAgICZfX3RhZ3Mge1xuICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9uLWNsZWFyIHtcbiAgICB3aWR0aDogJHNwaW5uZXItd2lkdGg7XG4gIH1cblxuICAubXVsdGlzZWxlY3Qge1xuICAgICRzZWxmOiBsYXN0LXNlbGVjdG9yKCYpO1xuXG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgY29sb3I6ICRjb2xvci1ibGFjaztcblxuICAgICYtLWFjdGl2ZSB7XG4gICAgICAjeyRzZWxmfV9fcGxhY2Vob2xkZXIge1xuICAgICAgICAvLyBEb24ndCB1c2UgYGRpc3BsYXk6IG5vbmVgIHRvIGhpZGUgcGxhY2UtaG9sZGVyLCBhcyB0aGUgbGF5b3V0IHdvdWxkXG4gICAgICAgIC8vIGNvbGxhcHNlLlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX3NpbmdsZSxcbiAgICAgICN7JHNlbGZ9X19pbnB1dCB7XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnQ7XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlO1xuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgICBtYXJnaW46IC0xcHggMCAwO1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgJiN7JHNlbGZ9LS1hYm92ZSB7XG4gICAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmU7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgICAgICBtYXJnaW46IDAgMCAtMXB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWdzIHtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgbWluLWhlaWdodDogaW5oZXJpdDtcbiAgICAgIHBhZGRpbmc6IDAgJHNwaW5uZXItd2lkdGggMCAwO1xuICAgICAgLy8gU28gdGFncyBjYW4gZmxvYXQgb24gbXVsdGlwbGUgbGluZXMgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnM6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHRhZy1tYXJnaW47XG4gICAgfVxuXG4gICAgJl9fdGFnIHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgbWFyZ2luOiAkdGFnLW1hcmdpbiAwIDAgJHRhZy1tYXJnaW47XG4gICAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nOiAkdGFnLXBhZGRpbmcgJHRhZy1pY29uLXdpZHRoICR0YWctcGFkZGluZyAwLjhlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0O1xuICAgICAgaGVpZ2h0OiBjYWxjKCRpbnB1dC1oZWlnaHQgLSAyICogJHRhZy1wYWRkaW5nKTtcbiAgICB9XG5cbiAgICAmX190YWdzLXdyYXAge1xuICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICBsaW5lLWhlaWdodDogMDtcbiAgICB9XG5cbiAgICAmX19zaW5nbGUsXG4gICAgJl9fcGxhY2Vob2xkZXIsXG4gICAgJl9faW5wdXQge1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgbWFyZ2luOiAwIDAgMXB4IDA7XG4gICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIHN0eWxlPVwicGFkZGluZzogLi4uO1wiIGluIGFkZGl0aW9uIHRvIHVzaW5nXG4gICAgICAvLyBjbGFzc2VzLCBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcgIWltcG9ydGFudDtcbiAgICAgIC8vIFNvIGlucHV0IGNhbiBmbG9hdCBuZXh0IHRvIHRhZ3MgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnMgd2l0aFxuICAgICAgLy8gJl9fdGFnczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIH1cblxuICAgICZfX3BsYWNlaG9sZGVyLFxuICAgICZfX2lucHV0OjpwbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogJGNvbG9yLXBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgICZfX3BsYWNlaG9sZGVyIHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgLy8gRW5mb3JjZSBhY3R1YWwgbGluZS1oZWlnaHQgZm9yIHBvc2l0aW9uaW5nLlxuICAgICAgICBjb250ZW50OiAnXFwyMDBiJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19zZWxlY3QsXG4gICAgJl9fc3Bpbm5lciB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgLy8gJGJvcmRlci13aWR0aCB0byBwcmV2ZW50IG1hc2tpbmcgYm9yZGVyIHdpdGggJl9fc3Bpbm5lclxuICAgICAgdG9wOiAkYm9yZGVyLXdpZHRoO1xuICAgICAgcmlnaHQ6ICRib3JkZXItd2lkdGg7XG4gICAgICBib3R0b206ICRib3JkZXItd2lkdGg7XG4gICAgICBoZWlnaHQ6IGluaGVyaXQ7XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB9XG5cbiAgICAmX19zZWxlY3Qge1xuICAgICAgd2lkdGg6IDA7XG4gICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoJHNlbGVjdC1hcnJvdy13aWR0aCAvIDIpO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAaW5jbHVkZSBhcnJvdygkc2VsZWN0LWFycm93LXNpemUpO1xuXG4gICAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b207XG4gICAgICAgIHJpZ2h0OiBjYWxjKC0xICogJHNlbGVjdC1hcnJvdy1zaXplIC8gMik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fc3Bpbm5lciB7XG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGg7XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgbG9hZGluZyBzcGlubmVyXG4gICAgICAgIGJvcmRlci13aWR0aDogM3B4O1xuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgbWFyZ2luOiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX29wdGlvbiB7XG4gICAgICAkb3B0aW9uOiBsYXN0LXNlbGVjdG9yKCYpO1xuXG4gICAgICBtaW4taGVpZ2h0OiB1bnNldDtcbiAgICAgIGhlaWdodDogdW5zZXQ7XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodDtcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIEluc3RydWN0aW9uIHRleHQgZm9yIG9wdGlvbnNcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHNob3cgdGhlIGhpZ2hsaWdodCBvbmNlIHRoZSBwdWxsZG93biBoYXMgcmVjZWl2ZWQgbW91c2Ugb3JcbiAgICAgIC8vIGtleWJvYXJkIGludGVyYWN0aW9uLCBpbiB3aGljaCBjYXNlIGAmLS1zaG93LWhpZ2hsaWdodGAgd2lsbCBiZSBzZXQsXG4gICAgICAvLyB3aGljaCBpcyBjb250cm9sbGVkIGJ5IGBwb2ludGVyRGlydHlgIGluIHZ1ZS1tdWx0aXNlbGVjdC5cbiAgICAgIC8vIFVudGlsIHRoZW4sIGNsZWFyIHRoZSBoaWdobGlnaHQgc3R5bGUsIGJ1dCBvbmx5IGlmIGl0IGlzbid0IGFsc29cbiAgICAgIC8vIGRpc2FibGVkIG9yIHNlbGVjdGVkLCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8ga2VlcCB0aGUgc3R5bGUuXG4gICAgICBAYXQtcm9vdCAjeyRzZWxmfTpub3QoI3skc2VsZn0tLXNob3ctaGlnaGxpZ2h0KVxuICAgICAgICAgICN7JG9wdGlvbn06bm90KCN7JG9wdGlvbn0tLWRpc2FibGVkKTpub3QoI3skb3B0aW9ufS0tc2VsZWN0ZWQpIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cblxuICAgICAgJi0taGlnaGxpZ2h0IHtcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgQGF0LXJvb3QgI3skc2VsZn0jeyRzZWxmfS0tc2hvdy1oaWdobGlnaHQgI3tsYXN0LXNlbGVjdG9yKCYpfSB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi0tc2VsZWN0ZWQge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG5cbiAgICAgICAgJiN7JG9wdGlvbn0tLWhpZ2hsaWdodCB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYtLWRpc2FibGVkIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWcge1xuICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAmX190YWctaWNvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgICAgd2lkdGg6ICR0YWctaWNvbi13aWR0aDtcbiAgICAgIG1hcmdpbjogMDtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWNsZWFyO1xuXG4gICAgICAgIGZvbnQtc2l6ZTogMC45ZW07XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgIH1cblxuICAgICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGFncyxcbiAgICAmX19jb250ZW50LXdyYXBwZXIge1xuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgIT09IG51bGwgPyB0aGlzLnZhbHVlIDogJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID1cbiAgICAgICAgICB2YWx1ZSAhPT0gJydcbiAgICAgICAgICAgID8gdGhpcy5pc0ludGVnZXJcbiAgICAgICAgICAgICAgPyBwYXJzZUludCh2YWx1ZSwgMTApXG4gICAgICAgICAgICAgIDogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc3RlcFZhbHVlKCkge1xuICAgICAgLy8gRG9uJ3Qgc2hvdyBzdGVwcyBpZiB0aGUgaW5wdXQgaXMgYWxzbyBjbGVhcmFibGUsIHNpbmNlIHRoZSBzdGVwIGJ1dHRvbnNcbiAgICAgIC8vIHdvdWxkIGNvbGxpZGUgd2l0aCB0aGUgY2xlYXIgYnV0dG9uLlxuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHRoaXMuc3RlcCA9PSBudWxsICYmICF0aGlzLmlzSW50ZWdlclxuICAgICAgICAgID8gJ2FueSdcbiAgICAgICAgICA6IHRoaXMuc3RlcFxuICAgIH0sXG5cbiAgICBkZWNpbWFsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlY2ltYWxzJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBzdGVwOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RlcCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChzdGVwKSB7XG4gICAgICAgIC8vIEZvciBpbnRlZ2Vycywgcm91bmQgdGhlIHN0ZXBzIHRvIHRoZSBuZXh0IGJpZ2dlciBpbnRlZ2VyIHZhbHVlOlxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgc3RlcCAhPSBudWxsID8gTWF0aC5jZWlsKHN0ZXApIDogc3RlcFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWluOiBnZXRTY2hlbWFBY2Nlc3NvcignbWluJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1pbikge1xuICAgICAgICBtaW4gPVxuICAgICAgICAgIG1pbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzBdXG4gICAgICAgICAgICA6IG1pblxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWluICE9IG51bGwgPyBNYXRoLmZsb29yKG1pbikgOiBtaW5cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heDogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtYXgpIHtcbiAgICAgICAgbWF4ID1cbiAgICAgICAgICBtYXggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlsxXVxuICAgICAgICAgICAgOiBtYXhcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1heCAhPSBudWxsID8gTWF0aC5jZWlsKG1heCkgOiBtYXhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHJhbmdlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmFuZ2UnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gYHRoaXMubWluYCwgYHRoaXMubWF4YCBhbHJlYWR5IHN1cHBvcnQgYHNjaGVtYS5yYW5nZWAsXG4gICAgICAgIC8vIHNvIHJlZGlyZWN0IHRoZXJlLlxuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzXG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiBtYXggIT0gbnVsbCA/IFttaW4sIG1heF0gOiB1bmRlZmluZWRcbiAgICAgIH0sXG5cbiAgICAgIHNldChyYW5nZSkge1xuICAgICAgICAvLyBQcm92aWRlIGEgc2V0dGVyIHRoYXQgZGVsZWdhdGVzIHRvIGBbdGhpcy5taW4sIHRoaXMubWF4XWAsXG4gICAgICAgIC8vIHNpbmNlIHRob3NlIGFscmVhZHkgaGFuZGxlIGBzY2hlbWEucmFuZ2VgLlxuICAgICAgICBpZiAoaXNBcnJheShyYW5nZSkpIHtcbiAgICAgICAgICA7W3RoaXMubWluLCB0aGlzLm1heF0gPSByYW5nZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHt9XG4gICAgICBjb25zdCB7IHJhbmdlLCBtaW4sIG1heCwgZGVjaW1hbHMsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yYW5nZSA9IHJhbmdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWluICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5taW4gPSBtaW5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5tYXggPSBtYXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlY2ltYWxzICE9IG51bGwpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgfSBlbHNlIGlmIChzdGVwKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxzID0gKGAke3N0ZXB9YC5zcGxpdCgnLicpWzFdIHx8ICcnKS5sZW5ndGhcbiAgICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0ludGVnZXIpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbklucHV0RmllbGQuZGl0by1udW1iZXIoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdHlwZT1cIm51bWJlclwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6bWluPVwibWluXCJcbiAgOm1heD1cIm1heFwiXG4gIDpzdGVwPVwic3RlcFZhbHVlXCJcbilcbiAgdGVtcGxhdGUoI2FmdGVyKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnbnVtYmVyJywgJ2ludGVnZXInXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW051bWJlck1peGluXSxcbiAgICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgaXNJbnRlZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW50ZWdlcidcbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi8vIE9ubHkgc2hvdyBzcGluIGJ1dHRvbnMgaWYgdGhlIG51bWJlciBjb21wb25lbnQgZGVmaW5lcyBhIHN0ZXAgc2l6ZS5cbmlucHV0W3R5cGU9J251bWJlciddOm5vdChbc3RlcF0pIHtcbiAgJjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgJjo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLy0gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgOmxhYmVsPVwib2JqZWN0TGFiZWxcIlxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgKVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtZWxzZS1pZj1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgOmlzPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICApXG4gIERpdG9FZGl0QnV0dG9ucyhcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6ZGVsZXRhYmxlPVwib2JqZWN0RGF0YSAmJiBkZWxldGFibGVcIlxuICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmVkaXRQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICA6cGF0aD1cInBhdGhcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyByZXNvbHZlU2NoZW1hQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGFsaWduQm90dG9tOiBmYWxzZSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvYmplY3RMYWJlbCgpIHtcbiAgICAgIC8vIE9ubHkgc2hvdyBhIGxhYmVsIGlmIHRoZSBvYmplY3QgaXMgY29sbGFwc2libGUuXG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZVxuICAgICAgICA/IHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCB0aGlzLm9iamVjdERhdGEsIHsgYXNPYmplY3Q6IHRydWUgfSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGRhdGE6IHRoaXMub2JqZWN0RGF0YSB9KVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIHByb2Nlc3NcbiAgICAgIClcbiAgICBdKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tb2JqZWN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gIC5kaXRvLW9iamVjdC1jb250ZW50IHtcbiAgICBmbGV4OiAwIDEgMTAwJTtcbiAgfVxuXG4gID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgZmxleDogMSAwIDAlO1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwYW5lbCcsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIGFsaWduQm90dG9tOiBmYWxzZSxcbiAgb21pdFBhZGRpbmc6IHRydWUsXG5cbiAgZ2V0UGFuZWxTY2hlbWEoYXBpLCBzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5wcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgOm1heD1cInByb2dyZXNzTWF4XCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwcm9ncmVzcycsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wdXRlZDoge1xuICAgIHByb2dyZXNzVmFsdWUoKSB7XG4gICAgICBsZXQgeyB2YWx1ZSwgcmFuZ2UsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICB2YWx1ZSAtPSByYW5nZVswXVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3RlcCkgKiBzdGVwXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gJydcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBwcm9ncmVzc01heCgpIHtcbiAgICAgIGNvbnN0IHsgcmFuZ2UgfSA9IHRoaXNcbiAgICAgIHJldHVybiByYW5nZSA/IHJhbmdlWzFdIC0gcmFuZ2VbMF0gOiBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1yYWRpby1idXR0b25zKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gIClcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdyYWRpbycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXJhZGlvLWJ1dHRvbnMge1xuICBsYWJlbCB7XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbiAgfVxuXG4gIC5kaXRvLXJhZGlvLWJ1dHRvbiB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNlY3Rpb24oOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLWxhYmVsbGVkJzogISFzY2hlbWEubGFiZWwgfVwiKVxuICBEaXRvUGFuZS5kaXRvLXNlY3Rpb24tcGFuZShcbiAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbUZvcm1TY2hlbWEsIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlY3Rpb24nLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhc2NoZW1hLm5lc3RlZCAmJiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuICBkZWZhdWx0TmVzdGVkOiBmYWxzZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIGFsaWduQm90dG9tOiBmYWxzZSxcblxuICBjb21wdXRlZDoge1xuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5kYXRhXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgICAvLyBQcm9jZXNzIHNlY3Rpb24gY29tcG9uZW50cyBzbyB0aGVpciBmb3JtcyBnZXQgcmVzb2x2ZWQgdG9vLlxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2VjdGlvbiB7XG4gICYuZGl0by1zZWN0aW9uLWxhYmVsbGVkIHtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbi5kaXRvLXNlbGVjdFxuICBzZWxlY3QoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgIClcbiAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgIG9wdGlvbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgKVxuICAgICAgb3B0aW9uKDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIikge3sgZ2V0TGFiZWxGb3JPcHRpb24oc2VsZWN0ZWRPcHRpb24pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi8vIFRPRE86IE1vdmUgdG8gZGl0by11aVxuJHNlbGVjdC1hcnJvdy1yaWdodDogY2FsYygoJHNlbGVjdC1hcnJvdy13aWR0aCAtICRzZWxlY3QtYXJyb3ctc2l6ZSkgLyAyKTtcblxuLmRpdG8tc2VsZWN0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgc2VsZWN0IHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoO1xuICB9XG4gIC8vIEhhbmRsZSAuZGl0by13aWR0aC1maWxsIHNlcGFyYXRlbHkgZHVlIHRvIHJlcXVpcmVkIG5lc3Rpbmcgb2Ygc2VsZWN0OlxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgc2VsZWN0IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gICY6OmFmdGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgQGluY2x1ZGUgYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKTtcblxuICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b207XG4gICAgcmlnaHQ6IGNhbGMoI3skc2VsZWN0LWFycm93LXJpZ2h0fSArICN7JGJvcmRlci13aWR0aH0pO1xuICB9XG5cbiAgJi5kaXRvLWRpc2FibGVkOjphZnRlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNsaWRlclxuICBpbnB1dC5kaXRvLXJhbmdlKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdHlwZT1cInJhbmdlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbiAgSW5wdXRGaWVsZC5kaXRvLW51bWJlcihcbiAgICB2LWlmPVwiaW5wdXRcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzbGlkZXInLCB7XG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93SW5wdXRgP1xuICAgIGlucHV0OiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zbGlkZXIge1xuICBAZXh0ZW5kICVpbnB1dDtcblxuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLXJhbmdlIHtcbiAgICBmbGV4OiBhdXRvO1xuICAgIGhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpO1xuICB9XG5cbiAgLmRpdG8tbnVtYmVyIHtcbiAgICBib3JkZXI6IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblN3aXRjaEJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgOmxhYmVscz1cImxhYmVsc1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFN3aXRjaEJ1dHRvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3N3aXRjaCcsIHtcbiAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgY29tcG9uZW50czoge1xuICAgIFN3aXRjaEJ1dHRvblxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGFiZWxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxhYmVsc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXN3aXRjaCB7XG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbklucHV0RmllbGQuZGl0by10ZXh0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIDp0eXBlPVwiaW5wdXRUeXBlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG4gIHRlbXBsYXRlKCNhZnRlcilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuY29uc3QgbWFza2VkUGFzc3dvcmQgPSAnKioqKioqKioqKioqKioqKidcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFtcbiAgICAndGV4dCcsXG4gICAgJ2VtYWlsJyxcbiAgICAndXJsJyxcbiAgICAnaG9zdG5hbWUnLFxuICAgICdkb21haW4nLFxuICAgICd0ZWwnLFxuICAgICdwYXNzd29yZCcsXG4gICAgJ2NyZWRpdGNhcmQnXG4gIF0sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG4gICAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gc2NoZW1hLnR5cGUgPT09ICdwYXNzd29yZCcsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgaW5wdXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNyZWRpdGNhcmQ6ICd0ZXh0JyxcbiAgICAgICAgICAgIGhvc3RuYW1lOiAndGV4dCcsXG4gICAgICAgICAgICBkb21haW46ICd0ZXh0J1xuICAgICAgICAgIH1bdGhpcy50eXBlXSB8fFxuICAgICAgICAgIHRoaXMudHlwZVxuICAgICAgICApXG4gICAgICB9LFxuXG4gICAgICBpbnB1dFZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmXG4gICAgICAgICAgICB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICF0aGlzLmZvY3VzZWRcbiAgICAgICAgICApXG4gICAgICAgICAgICA/IG1hc2tlZFBhc3N3b3JkXG4gICAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAgICBlbWFpbDogJ2VtYWlsJyxcbiAgICAgICAgICB1cmw6ICd1cmwnLFxuICAgICAgICAgIGhvc3RuYW1lOiAnaG9zdG5hbWUnLFxuICAgICAgICAgIGRvbWFpbjogJ2RvbWFpbicsXG4gICAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZCcsXG4gICAgICAgICAgY3JlZGl0Y2FyZDogJ2NyZWRpdGNhcmQnXG4gICAgICAgIH1bdGhpcy50eXBlXVxuICAgICAgICByZXR1cm4gcnVsZSA/IHsgW3J1bGVdOiB0cnVlIH0gOiB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOnJvd3M9XCJsaW5lc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG4gIGFsaWduQm90dG9tOiBmYWxzZSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDRcbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRleHRhcmVhIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHJlc2l6ZTogbm9uZTtcbiAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjezIgKiAkaW5wdXQtcGFkZGluZy12ZXJ9KTtcblxuICAmLmRpdG8tcmVzaXphYmxlIHtcbiAgICByZXNpemU6IHZlcnRpY2FsO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyZWUtbGlzdFxuICBEaXRvU2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgRGl0b1RyZWVJdGVtKFxuICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6b3Blbj1cInRydWVcIlxuICAgIClcbiAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgIClcbiAgICAgIC8vLSBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgIFJvdXRlclZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHtcbiAgaGFzRm9ybVNjaGVtYSxcbiAgZ2V0Rm9ybVNjaGVtYXMsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgICBhbGlnbkJvdHRvbTogZmFsc2UsXG5cbiAgICBwcm92aWRlKCkge1xuICAgICAgcmV0dXJuIHsgY29udGFpbmVyOiB0aGlzIH1cbiAgICB9LFxuXG4gICAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZSA9PT0gJ3RyZWUtb2JqZWN0JyA/ICdvYmplY3QnIDogJ2xpc3QnXG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBwYXRoKCkge1xuICAgICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIucGF0aGA6XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGVkaXRQYXRoKCkge1xuICAgICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aC5zbGljZSh0aGlzLnBhdGg/Lmxlbmd0aClcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHsgW3RoaXMubmFtZV06IHRoaXMudmFsdWUgfVxuICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgfSxcblxuICAgICAgdHJlZURhdGFQYXRoKCkge1xuICAgICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWRcbiAgICAgICAgLy8gdG8gYHRyZWVEYXRhYCBhbmQgYHRyZWVTY2hlbWFgXG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8gdGhpcy5kYXRhUGF0aC5zbGljZSgwLCB0aGlzLmRhdGFQYXRoLmxlbmd0aCAtIHRoaXMubmFtZS5sZW5ndGgpXG4gICAgICAgICAgOiB0aGlzLmRhdGFQYXRoXG4gICAgICB9LFxuXG4gICAgICB0cmVlU2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdGhpcy5zY2hlbWFcbiAgICAgIH0sXG5cbiAgICAgIGhhc0VkaXRhYmxlRm9ybXMoKSB7XG4gICAgICAgIGNvbnN0IGhhc0VkaXRhYmxlRm9ybXMgPSBzY2hlbWEgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgKFxuICAgICAgICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdlZGl0YWJsZScsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNjaGVtYVxuICAgICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgICBzY2hlbWEuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgaGFzRWRpdGFibGVGb3JtcyhzY2hlbWEuY2hpbGRyZW4pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgICAgYXBpLFxuICAgICAgc2NoZW1hLFxuICAgICAgbmFtZSxcbiAgICAgIHJvdXRlcyxcbiAgICAgIGxldmVsLFxuICAgICAgbmVzdGVkID0gdHJ1ZSxcbiAgICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICAgIHByb2Nlc3MgPSBudWxsXG4gICAgKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYS5wcm9wZXJ0aWVzKSxcbiAgICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICBhcGksXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgcm91dGVzLFxuICAgICAgICAgIGxldmVsLFxuICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICBmbGF0dGVuLFxuICAgICAgICAgIC8vIFBhc3MgcHJvY2VzcygpIHRvIGFkZCBtb3JlIHJvdXRlcyB0byBjaGlsZFJvdXRlczpcbiAgICAgICAgICAoY2hpbGRSb3V0ZXMsIGxldmVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgICAgICAvLyBBZGQgYHR5cGVgIHRvIHRoZSBuZXN0ZWQgdHJlZSBsaXN0LlxuICAgICAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgY2FsbCBgcHJvY2Vzc1NjaGVtYSgpYCBmb3IgdGhlIG5lc3RlZCB0cmVlIGxpc3Q6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLm5hbWUsXG4gICAgICAgICAgICAgICAgY2hpbGRSb3V0ZXMsXG4gICAgICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgICAgIHRydWUsIC8vIFBhc3MgYHRydWVgIGZvciBgZmxhdHRlbmAgaW4gdHJlZSBsaXN0cy5cbiAgICAgICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgfSxcblxuICAgIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAgIC8vIENvbnZlcnQgbmVzdGVkIGNoaWxkcmVuIHNjaGVtYSB0byBzdGFuZC1hbG9uZSBzY2hlbWEgY29tcG9uZW50LFxuICAgICAgLy8gcHJlc2VudCBpbiBlYWNoIG9mIHRoZSBmb3JtcywgYXMgcmVxdWlyZWQgYnkgYHByb2Nlc3NTY2hlbWFEYXRhKClgXG4gICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyhcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlblxuICAgICAgICAgID8gZm9ybSA9PiAoe1xuICAgICAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICAgICAgLi4uZm9ybS5jb21wb25lbnRzLFxuICAgICAgICAgICAgICAgIFtjaGlsZHJlbi5uYW1lXTogY2hpbGRyZW5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRyZWUtbGlzdCB7XG4gIEBleHRlbmQgJWZpZWxkO1xuXG4gIC5kaXRvLXRyZWUtcGFuZWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgPiAuZGl0by10cmVlLWl0ZW0ge1xuICAgICAgZmxleDogMSAxIDI1JTtcbiAgICB9XG5cbiAgICA+IC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIge1xuICAgICAgZmxleDogMCAxIDc1JTtcbiAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGU7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMTtcbiAgICAgIG1hcmdpbjogKC0kaW5wdXQtcGFkZGluZy12ZXIpICgtJGlucHV0LXBhZGRpbmctaG9yKTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZmlsZXNpemUgfSBmcm9tICdmaWxlc2l6ZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKHNpemUpIHtcbiAgcmV0dXJuIGZpbGVzaXplKHNpemUsIHsgYmFzZTogMTAgfSlcbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by11cGxvYWRcbiAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICB0clxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhblxuICAgIERpdG9EcmFnZ2FibGUoXG4gICAgICB2LW1vZGVsPVwiZmlsZXNcIlxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgOm9wdGlvbnM9XCJnZXRTb3J0YWJsZU9wdGlvbnMoZmFsc2UpXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgKVxuICAgICAgICB0ZChcbiAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgIClcbiAgICAgICAgdGQge3sgZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKSB9fVxuICAgICAgICB0ZFxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1pZj1cImZpbGUudXBsb2FkXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgdi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICApXG4gICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgIHRmb290XG4gICAgICB0clxuICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiaXNVcGxvYWRSZWFkeVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICkgVXBsb2FkIEFsbFxuICAgICAgICAgICAgICBWdWVVcGxvYWQuZGl0by1idXR0b24uZGl0by1idXR0b24tYWRkLXVwbG9hZChcbiAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICA6aW5wdXRJZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgOnBvc3RBY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiVXBsb2FkIEZpbGVzXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsdGVyPVwiaW5wdXRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIEBpbnB1dC1maWxlPVwiaW5wdXRGaWxlXCJcbiAgICAgICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHBhcnNlRmlsZVNpemUgZnJvbSAnZmlsZXNpemUtcGFyc2VyJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vdXRpbHMvdW5pdHMuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBWdWVVcGxvYWQgZnJvbSAndnVlLXVwbG9hZC1jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBtaXhpbnM6IFtTb3J0YWJsZU1peGluXSxcbiAgY29tcG9uZW50czogeyBWdWVVcGxvYWQgfSxcblxuICBhbGlnbkJvdHRvbTogZmFsc2UsXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy51cGxvYWRcbiAgICB9LFxuXG4gICAgZmlsZXMoKSB7XG4gICAgICByZXR1cm4gYXNGaWxlcyh0aGlzLnZhbHVlKVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gTm8gY2FsbGJhY2sgYXMgaXQncyB1c2VkIGluIGBwcm9jZXNzVmFsdWUoKWBcbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZXh0ZW5zaW9uczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4dGVuc2lvbnMnLCB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgUmVnRXhwXVxuICAgIH0pLFxuXG4gICAgYWNjZXB0OiBnZXRTY2hlbWFBY2Nlc3NvcignYWNjZXB0Jywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoYWNjZXB0KSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KGFjY2VwdCkgPyBhY2NlcHQuam9pbignLCcpIDogYWNjZXB0XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhTaXplOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4U2l6ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBnZXQobWF4U2l6ZSkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZSA/IHBhcnNlRmlsZVNpemUobWF4U2l6ZSkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGRyYWdnYWJsZSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgaXNVcGxvYWRSZWFkeSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5sZW5ndGggJiZcbiAgICAgICAgISh0aGlzLnVwbG9hZC5hY3RpdmUgfHwgdGhpcy51cGxvYWQudXBsb2FkZWQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVXBsb2FkQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgZmlsZS5wcm9ncmVzcywgMCkgL1xuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoXG4gICAgICApXG4gICAgfSxcblxuICAgIHVwbG9hZFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybCh7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9ybWF0RmlsZVNpemUsXG5cbiAgICByZW5kZXJGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IHJlbmRlciB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiByZW5kZXJcbiAgICAgICAgPyByZW5kZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgICB2YWx1ZTogZmlsZSxcbiAgICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlcyxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwoZmlsZS5uYW1lKVxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKFxuICAgICAgICBmaWxlICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUudXBsb2FkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWQucmVtb3ZlKGZpbGUudXBsb2FkKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IGAke25hbWV9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGaWxlSW5kZXgoZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZVxuICAgICAgICA/IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ID0+IGl0LmlkID09PSBmaWxlLmlkKVxuICAgICAgICA6IC0xXG4gICAgfSxcblxuICAgIGFkZEZpbGUoZmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gW2ZpbGVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VGaWxlKGZpbGUsIG5ld0ZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGaWxlSW5kZXgoZmlsZSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSBuZXdGaWxlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIGlucHV0RmlsZShuZXdGaWxlLCBvbGRGaWxlKSB7XG4gICAgICBpZiAobmV3RmlsZSAmJiAhb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IGlkLCBuYW1lLCBzaXplIH0gPSBuZXdGaWxlXG4gICAgICAgIHRoaXMuYWRkRmlsZSh7IGlkLCBuYW1lLCBzaXplLCB1cGxvYWQ6IG5ld0ZpbGUgfSlcbiAgICAgIH1cbiAgICAgIGlmIChuZXdGaWxlICYmIG9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gbmV3RmlsZVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlLnJlc3BvbnNlWzBdXG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUudXBsb2FkID0gbmV3RmlsZVxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXBsb2FkIGZpbGUgb2JqZWN0IHdpdGggdGhlIGZpbGUgb2JqZWN0IHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSB1cGxvYWQgcmVzcG9uc2UuXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VGaWxlKG5ld0ZpbGUsIGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSAoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFib3J0OiAnVXBsb2FkIGFib3J0ZWQnLFxuICAgICAgICAgICAgICBkZW5pZWQ6ICdVcGxvYWQgZGVuaWVkJyxcbiAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBgVW5zdXBwb3J0ZWQgZmlsZS10eXBlOiAke25ld0ZpbGUubmFtZX1gLFxuICAgICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29yayBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgICAgc2VydmVyOiAnU2VydmVyIGVycm9yIG9jY3VycmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgICBzaXplOiBgRmlsZSBpcyB0b28gbGFyZ2U6ICR7Zm9ybWF0RmlsZVNpemUobmV3RmlsZS5zaXplKX1gLFxuICAgICAgICAgICAgICB0aW1lb3V0OiAnVGltZW91dCBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJ1xuICAgICAgICAgICAgfVtlcnJvcl0gfHxcbiAgICAgICAgICAgIGBVbmtub3duIEZpbGUgVXBsb2FkIEVycm9yOiAnJHtlcnJvcn0nYFxuICAgICAgICAgIClcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdGaWxlIFVwbG9hZCBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbHRlcihuZXdGaWxlIC8qLCBvbGRGaWxlLCBwcmV2ZW50ICovKSB7XG4gICAgICBjb25zdCB4aHIgPSBuZXdGaWxlPy54aHJcbiAgICAgIGlmICh0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFscyAmJiB4aHIgJiYgIXhoci53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAvLyBGaWx0ZXIgb3V0IGFsbCBuZXdseSBhZGRlZCBmaWxlcyB0aGF0IHdlcmVuJ3QgYWN0dWFsbHkgdXBsb2FkZWQuXG4gICAgY29uc3QgZmlsZXMgPSBhc0ZpbGVzKHZhbHVlKVxuICAgICAgLm1hcCgoeyB1cGxvYWQsIC4uLmZpbGUgfSkgPT4gKCF1cGxvYWQgfHwgdXBsb2FkLnN1Y2Nlc3MgPyBmaWxlIDogbnVsbCkpXG4gICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZSlcbiAgICByZXR1cm4gc2NoZW1hLm11bHRpcGxlID8gZmlsZXMgOiBmaWxlc1swXSB8fCBudWxsXG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzRmlsZXModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gYXNBcnJheSh2YWx1ZSkgOiBbXVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdXBsb2FkIHtcbiAgLmRpdG8tdGFibGUge1xuICAgIHRyIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQge1xuICAgIHBhZGRpbmc6IDA7XG5cbiAgICA+ICoge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXVwbG9hZC1mb290ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgLmRpdG8tcHJvZ3Jlc3Mge1xuICAgICAgZmxleDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJjb25zdCBsb2dnZWREZXByZWNhdGlvbnMgPSBuZXcgU2V0KClcblxuZXhwb3J0IGZ1bmN0aW9uIGRlcHJlY2F0ZShtZXNzYWdlKSB7XG4gIC8vIE9ubHkgbG9nIGRlcHJlY2F0aW9uIG1lc3NhZ2VzIG9uY2UuXG4gIGlmICghbG9nZ2VkRGVwcmVjYXRpb25zLmhhcyhtZXNzYWdlKSkge1xuICAgIGxvZ2dlZERlcHJlY2F0aW9ucy5hZGQobWVzc2FnZSlcbiAgICBjb25zb2xlLndhcm4obWVzc2FnZSlcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRRdWVyeShxdWVyeSkge1xuICBjb25zdCBlbnRyaWVzID0gcXVlcnlcbiAgICA/IGlzQXJyYXkocXVlcnkpXG4gICAgICA/IHF1ZXJ5XG4gICAgICA6IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KVxuICAgIDogW11cbiAgcmV0dXJuIChcbiAgICBuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgLy8gRXhwYW5kIGFycmF5IHZhbHVlcyBpbnRvIG11bHRpcGxlIGVudHJpZXMgdW5kZXIgdGhlIHNhbWUga2V5LCBzb1xuICAgICAgLy8gYGZvcm1hdFF1ZXJ5KHsgZm9vOiBbMSwgMl0sIGJhcjogMyB9KWAgPT4gJ2Zvbz0xJmZvbz0yJmJhcj0zJy5cbiAgICAgIGVudHJpZXMucmVkdWNlKFxuICAgICAgICAoZW50cmllcywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgYXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCB2YWxdKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZW50cmllc1xuICAgICAgICB9LFxuICAgICAgICBbXVxuICAgICAgKVxuICAgIClcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAvLyBkZWNvZGUgYWxsIHRoZXNlIGVuY29kZWQgY2hhcmFjdGVycyB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW9yIGFzXG4gICAgICAvLyB2dWUtcm91dGVyJ3Mgb3duIHF1ZXJ5IGVuY29kaW5nLlxuICAgICAgLnJlcGxhY2VBbGwoLyUoPzoyMXwyNHwyOHwyOXwyQ3wyRnwzQXwzQnwzRHwzRnw0MCkvZywgZGVjb2RlVVJJQ29tcG9uZW50KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlUm91dGUoeyBwYXRoLCBxdWVyeSwgaGFzaCB9KSB7XG4gIC8vIFByZXNlcnZlIGBoaXN0b3J5LnN0YXRlYCwgc2VlOlxuICAvLyBodHRwczovL3JvdXRlci52dWVqcy5vcmcvZ3VpZGUvbWlncmF0aW9uLyN1c2FnZS1vZi1oaXN0b3J5LXN0YXRlXG4gIGhpc3RvcnkucmVwbGFjZVN0YXRlKFxuICAgIGhpc3Rvcnkuc3RhdGUsXG4gICAgbnVsbCxcbiAgICBgJHtcbiAgICAgIGxvY2F0aW9uLm9yaWdpblxuICAgIH0ke1xuICAgICAgcGF0aCA/PyBsb2NhdGlvbi5wYXRobmFtZVxuICAgIH0/JHtcbiAgICAgIHF1ZXJ5ID8gZm9ybWF0UXVlcnkocXVlcnkpIDogbG9jYXRpb24uc2VhcmNoLnNsaWNlKDEpXG4gICAgfSR7XG4gICAgICBoYXNoID8/IGxvY2F0aW9uLmhhc2hcbiAgICB9YFxuICApXG59XG4iLCJleHBvcnQgZGVmYXVsdCBbXG4gICdjcmVhdGUnLCAnY3JlYXRlZCcsXG4gICdzYXZlJywgJ3NhdmVkJyxcbiAgJ3N1Ym1pdCcsICdzdWJtaXR0ZWQnLFxuICAnZGVsZXRlJywgJ2RlbGV0ZWQnLFxuICAnZWRpdCcsICdlZGl0ZWQnLFxuICAnY2xlYXInLCAnY2xlYXJlZCcsXG4gICdjbG9zZScsICdjbG9zZWQnLFxuICAnY2FuY2VsJywgJ2NhbmNlbGxlZCcsXG4gICdkcmFnJywgJ2RyYWdnZWQnLFxuICAnbG9naW4nLCAnbG9nZ2VkIGluJ1xuXS5yZWR1Y2UoKHZlcmJzLCB2ZXJiKSA9PiB7XG4gIHZlcmJzW3ZlcmJdID0gdmVyYlxuICByZXR1cm4gdmVyYnNcbn0sIHt9KVxuIiwiaW1wb3J0IHsgY3JlYXRlQXBwLCBoIGFzIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXIsIGNyZWF0ZVdlYkhpc3RvcnkgfSBmcm9tICd2dWUtcm91dGVyJ1xuaW1wb3J0IFZ1ZU5vdGlmaWNhdGlvbnMgZnJvbSAnQGt5dmcvdnVlMy1ub3RpZmljYXRpb24nXG5pbXBvcnQge1xuICBpc1N0cmluZyxcbiAgaXNBYnNvbHV0ZVVybCxcbiAgbWVyZ2UsXG4gIGh5cGhlbmF0ZSxcbiAgY2FtZWxpemUsXG4gIGRlZmF1bHRGb3JtYXRzXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyBjb21wb25lbnRzIGZyb20gJy4vY29tcG9uZW50cy9pbmRleC5qcydcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vdHlwZXMvaW5kZXguanMnXG5pbXBvcnQgRGl0b1Jvb3QgZnJvbSAnLi9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSdcbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZGVwcmVjYXRlIH0gZnJvbSAnLi91dGlscy9kZXByZWNhdGUuanMnXG5pbXBvcnQgeyBmb3JtYXRRdWVyeSB9IGZyb20gJy4vdXRpbHMvcm91dGUuanMnXG5pbXBvcnQgdmVyYnMgZnJvbSAnLi92ZXJicy5qcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0FkbWluIHtcbiAgY29uc3RydWN0b3IoZWwsIHtcbiAgICAvLyBgZGl0b2AgY29udGFpbnMgdGhlIGJhc2UgYW5kIGFwaSBzZXR0aW5ncyBwYXNzZWQgZnJvbSBgQWRtaW5Db250cm9sbGVyYFxuICAgIGRpdG8gPSB7fSxcbiAgICBhcGksXG4gICAgdmlld3MgPSB7fSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIC8vIE1lcmdlIGluIGBhcGlgIHNldHRpbmdzIGFzIHBhc3NlZCBmcm9tIGBjb25maWcuYWRtaW5gIGFuZCB0aHJvdWdoIHRoZVxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgIHdpdGggYGFwaWAgdmFsdWVzIGZyb20gZnJvbSAnYWRtaW4vaW5kZXguanMnXG4gICAgLy8gTk9URTogYEFkbWluQ29udHJvbGxlcmAgcHJvdmlkZXMgYGRpdG8uYXBpLmJhc2VgXG4gICAgdGhpcy5hcGkgPSBhcGkgPSBtZXJnZSh7IGJhc2U6ICcvJyB9LCBkaXRvLmFwaSwgYXBpKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIC8vIFNldHVwIGRlZmF1bHQgYXBpIHNldHRpbmdzOlxuICAgIGFwaS5sb2NhbGUgfHw9ICdlbi1VUydcbiAgICBhcGkuZm9ybWF0cyA9IG1lcmdlKHt9LCBkZWZhdWx0Rm9ybWF0cywgYXBpLmZvcm1hdHMpXG4gICAgYXBpLnJlcXVlc3QgfHw9IG9wdGlvbnMgPT4gcmVxdWVzdChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmdldEFwaVVybCB8fD0gb3B0aW9ucyA9PiBnZXRBcGlVcmwoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5pc0FwaVVybCB8fD0gdXJsID0+IGlzQXBpVXJsKGFwaSwgdXJsKVxuICAgIC8vIFNldHRpbmcgYGFwaS5ub3JtYWxpemVQYXRocyA9IHRydWUgKHBsdXJhbCkgc2V0cyBib3RoOlxuICAgIC8vIGBhcGkubm9ybWFsaXplUGF0aCA9IGh5cGhlbmF0ZWAgYW5kIGBhcGkuZGVub3JtYWxpemVQYXRoID0gY2FtZWxpemVgXG4gICAgYXBpLm5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGh5cGhlbmF0ZSA6IHZhbCA9PiB2YWxcbiAgICBhcGkuZGVub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBjYW1lbGl6ZSA6IHZhbCA9PiB2YWxcblxuICAgIC8vIEFsbG93IGRlZmluaXRpb24gb2YgZGVmYXVsdHMgZm9yIGFkbWluIGNvbXBvbmVudCB0eXBlcywgbmVzdGVkIHBlciB0eXBlOlxuICAgIC8vIGFwaS5kZWZhdWx0cyA9IHtcbiAgICAvLyAgICdtdWx0aXNlbGVjdCc6IHtcbiAgICAvLyAgICAgc2VsZWN0YWJsZTogdHJ1ZVxuICAgIC8vICAgfSxcbiAgICAvLyAgICdmYWtlLXR5cGUnOiBzY2hlbWEgPT4ge1xuICAgIC8vICAgICAvLyBSZXR1cm4gZGVmYXVsdHMsIG9yIGRpcmVjdGx5IG1vZGlmeSB0aGUgc2NoZW1hOlxuICAgIC8vICAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwge1xuICAgIC8vICAgICAgIHR5cGU6ICdyZWFsLXR5cGUnLFxuICAgIC8vICAgICAgIGZvcm1hdDogKHsgdmFsdWUgfSkgPT4gYEZvcm1hdHRlZCAke3ZhbHVlfWAsXG4gICAgLy8gICAgICAgcHJvY2VzczogKHsgdmFsdWUgfSkgPT4gYFByb2Nlc3NlZCAke3ZhbHVlfWBcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkuZGVmYXVsdHMgfHw9IHt9XG5cbiAgICAvLyBBbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbGwgYXV0aCByZXNvdXJjZXMsIGxpa2Ugc286XG4gICAgLy8gYXBpLnVzZXJzID0ge1xuICAgIC8vICAgcGF0aDogJy9hZG1pbnMnLFxuICAgIC8vICAgLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0czpcbiAgICAvLyAgIGxvZ2luOiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dpbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgbG9nb3V0OiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dvdXQnLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIHNlc3Npb246IHtcbiAgICAvLyAgICAgcGF0aDogJ3Nlc3Npb24nLFxuICAgIC8vICAgICBtZXRob2Q6ICdnZXQnXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIGNvbnN0IHVzZXJzID0gZ2V0UmVzb3VyY2UoYXBpLnVzZXJzLCB7XG4gICAgICB0eXBlOiAnY29sbGVjdGlvbidcbiAgICB9KSB8fCB7fVxuICAgIHVzZXJzLmxvZ2luID0gZ2V0UmVzb3VyY2UodXNlcnMubG9naW4gfHwgJ2xvZ2luJywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5sb2dvdXQgPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dvdXQgfHwgJ2xvZ291dCcsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMuc2Vzc2lvbiA9IGdldFJlc291cmNlKHVzZXJzLnNlc3Npb24gfHwgJ3Nlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgYXBpLnVzZXJzID0gdXNlcnNcblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgb2YgcmVzb3VyY2UgcGF0aCBoYW5kbGVyczpcbiAgICAvLyBhcGkucmVzb3VyY2VzID0ge1xuICAgIC8vICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgIC8vICAgICByZXR1cm4gcmVzb3VyY2UucGFyZW50XG4gICAgLy8gICAgICAgPyBgJHtyZXNvdXJjZS5wYXRofT8ke3Jlc291cmNlLnBhcmVudC5wYXRofV9pZD0ke1xuICAgIC8vICAgICAgICAgIHJlc291cmNlLnBhcmVudC5pZH1gXG4gICAgLy8gICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLnJlc291cmNlcyA9IHtcbiAgICAgIGFueShyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpc1tyZXNvdXJjZT8udHlwZV0gfHwgdGhpcy5kZWZhdWx0XG4gICAgICAgIHJldHVybiByZXNvdXJjZSAmJiBoYW5kbGVyLmNhbGwodGhpcywgcmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBkZWZhdWx0KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0aGlzLmFueShyZXNvdXJjZS5wYXJlbnQpXG4gICAgICAgIHJldHVybiBwYXJlbnRQYXRoXG4gICAgICAgICAgPyBgJHtwYXJlbnRQYXRofS8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgICAgfSxcblxuICAgICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0KHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgbWVtYmVyKHJlc291cmNlKSB7XG4gICAgICAgIC8vIE5PVEU6IFdlIGFzc3VtZSB0aGF0IGFsbCBtZW1iZXJzIGhhdmUgcm9vdC1sZXZlbCBjb2xsZWN0aW9uIHJvdXRlcyxcbiAgICAgICAgLy8gdG8gYXZvaWQgZXhjZXNzaXZlIG5lc3Rpbmcgb2YgKHN1Yi0pY29sbGVjdGlvbiByb3V0ZXMuXG4gICAgICAgIHJldHVybiBgJHtyZXNvdXJjZS5wYXRofS8ke3Jlc291cmNlLmlkfWBcbiAgICAgIH0sXG5cbiAgICAgIHVwbG9hZChyZXNvdXJjZSkge1xuICAgICAgICAvLyBEaXRvIFNlcnZlciBoYW5kbGVzIHVwbG9hZCByb3V0ZXMgb24gdGhlIGNvbGxlY3Rpb24gcmVzb3VyY2U6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbGxlY3Rpb24ocmVzb3VyY2UucGFyZW50KX0vdXBsb2FkLyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICB9LFxuXG4gICAgICAuLi5hcGkucmVzb3VyY2VzXG4gICAgfVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyAvIGV4dGVuZGluZyBvZiBoZWFkZXJzOlxuICAgIC8vIGFwaS5oZWFkZXJzID0ge1xuICAgIC8vICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIC8vIH1cbiAgICBhcGkuaGVhZGVycyA9IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAuLi5hcGkuaGVhZGVyc1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhlbCkpIHtcbiAgICAgIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbClcbiAgICB9XG5cbiAgICBjb25zdCBhcHAgPSAodGhpcy5hcHAgPSBjcmVhdGVBcHAoe1xuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBEaXRvUm9vdCxcbiAgICAgICAgVnVlTm90aWZpY2F0aW9ucyxcbiAgICAgICAgLy8gVGhpcyBtYXkgb25seSBiZSBuZWVkZWQgdG8gYXZvaWQgdHJlZS1zaGFja2luZyBvZiB0aGVzZSBjb21wb25lbnRzLFxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFjdHVhbGx5IGhhbmRsZSByZWdpc3RyeSBpbnRlcm5hbGx5IGFscmVhZHkuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIG9uY2Ugd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbi5cbiAgICAgICAgLi4uY29tcG9uZW50cyxcbiAgICAgICAgLi4udHlwZXNcbiAgICAgIH0sXG5cbiAgICAgIC8vIE1vc3QgaW5qZWN0cyBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlIHJlYWN0aXZlbmVzcyBhY3Jvc3NcbiAgICAgIC8vIHByb3ZpZGUvaW5qZWN0LCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICAgIHByb3ZpZGU6IHtcbiAgICAgICAgYXBpLFxuICAgICAgICAvLyBBIGRlZmF1bHQgbGlzdCBvZiB2ZXJicyBhcmUgcHJvdmlkZWQgYnkgJHZlcmJzKCkgYW5kIGNhbiBiZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGF0IGFueSBwb2ludCBpbiB0aGUgY29tcG9uZW50IGhpZXJhcmNoeS5cbiAgICAgICAgJHZlcmJzOiAoKSA9PiB2ZXJicyxcbiAgICAgICAgLy8gUHJvdmlkZSBkZWZhdWx0cyBzbyBEaXRvTWl4aW4gY2FuIGluamVjdCB0aGVtIGZvciBhbGwgY29tcG9uZW50czpcbiAgICAgICAgLy8gICBpbmplY3Q6IFsgICckaXNQb3B1bGF0ZWQnLCAnJHNjaGVtYUNvbXBvbmVudCcsICckcm91dGVDb21wb25lbnQnIF1cbiAgICAgICAgJHZpZXdzOiAoKSA9PiB7fSxcbiAgICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0cnVlLFxuICAgICAgICAkcGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkYXRhQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICAgICAgfSxcblxuICAgICAgcmVuZGVyOiAoKSA9PlxuICAgICAgICBjcmVhdGVFbGVtZW50KERpdG9Sb290LCB7XG4gICAgICAgICAgcmVmOiAncm9vdCcsXG4gICAgICAgICAgY2xhc3M6IGRpdG8uc2V0dGluZ3Mucm9vdENsYXNzLFxuICAgICAgICAgIHVucmVzb2x2ZWRWaWV3czogdmlld3MsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICB9KVxuICAgIH0pKVxuXG4gICAgYXBwLnVzZShWdWVOb3RpZmljYXRpb25zLCB7XG4gICAgICBuYW1lOiAnbm90aWZ5JyxcbiAgICAgIGNvbXBvbmVudE5hbWU6ICdWdWVOb3RpZmljYXRpb25zJ1xuICAgIH0pXG5cbiAgICAvLyByb290LmNvbXBvbmVudCgndnVlLW1vZGFsJywgVnVlTW9kYWwpXG5cbiAgICBhcHAudXNlKFxuICAgICAgY3JlYXRlUm91dGVyKHtcbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIGNhdGNoLWFsbCByb3V0ZSwgdG8gYmUgcmVwbGFjZWQgYnkgdGhlIGFjdHVhbCByb3V0ZXNcbiAgICAgICAgLy8gb25jZSB0aGUgc2NoZW1hcyBhcmUgbG9hZGVkLCB0byBwcmV2ZW50IHZ1ZS1yb3V0ZXIgZnJvbSBjb21wbGFpbmluZyxcbiAgICAgICAgLy8gc2VlOiBgcmVzb2x2ZVZpZXdzKClgIGluIGBEaXRvUm9vdGAgZm9yIHRoZSBhY3R1YWwgcm91dGUgc2V0dXAuXG4gICAgICAgIHJvdXRlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdjYXRjaC1hbGwnLFxuICAgICAgICAgICAgcGF0aDogJy86XyguKiknLFxuICAgICAgICAgICAgY29tcG9uZW50czoge31cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGhpc3Rvcnk6IGNyZWF0ZVdlYkhpc3RvcnkoZGl0by5iYXNlKSxcbiAgICAgICAgbGlua0FjdGl2ZUNsYXNzOiAnJyxcbiAgICAgICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICcnXG4gICAgICB9KVxuICAgIClcblxuICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2RpdG8tYXBwJylcbiAgICBhcHAubW91bnQoZWwpXG4gIH1cblxuICByZWdpc3Rlcih0eXBlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgIHN1cGVyKFxuICAgICAgYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfSAoJHtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzVGV4dFxuICAgICAgfSlgXG4gICAgKVxuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QoYXBpLCB7XG4gIHVybCxcbiAgbWV0aG9kID0gJ2dldCcsXG4gIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGBxdWVyeWAgb24gMjAyMi0xMS0wMSxcbiAgLy8gcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgcGFyYW1zID0gbnVsbCxcbiAgcXVlcnkgPSBwYXJhbXMgfHwgbnVsbCxcbiAgaGVhZGVycyA9IG51bGwsXG4gIGRhdGEgPSBudWxsXG59KSB7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBkZXByZWNhdGUoXG4gICAgICBgcmVxdWVzdC5wYXJhbXMgaXMgZGVwcmVjYXRlZC4gVXNlIGFjdGlvbi5tZXRob2QgYW5kIGFjdGlvbi5wYXRoIGluc3RlYWQuYFxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGlzQXBpVXJsID0gYXBpLmlzQXBpVXJsKHVybClcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5IH0pLCB7XG4gICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAuLi4oZGF0YSAmJiB7IGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpIH0pLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLihpc0FwaVVybCAmJiBhcGkuaGVhZGVycyksXG4gICAgICAuLi5oZWFkZXJzXG4gICAgfSxcbiAgICBjcmVkZW50aWFsczpcbiAgICAgIGlzQXBpVXJsICYmIGFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgICAgICA/ICdpbmNsdWRlJ1xuICAgICAgICA6ICdzYW1lLW9yaWdpbidcbiAgfSlcblxuICBpZiAocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgcmVzcG9uc2UuZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICB9XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IocmVzcG9uc2UpXG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIGlzQXBpVXJsKGFwaSwgdXJsKSB7XG4gIHJldHVybiAhaXNBYnNvbHV0ZVVybCh1cmwpIHx8IHVybC5zdGFydHNXaXRoKGFwaS51cmwpXG59XG5cbmZ1bmN0aW9uIGdldEFwaVVybChhcGksIHsgdXJsLCBxdWVyeSB9KSB7XG4gIGlmICghaXNBYnNvbHV0ZVVybCh1cmwpKSB7XG4gICAgdXJsID0gY29tYmluZVVybHMoYXBpLnVybCwgdXJsKVxuICB9XG4gIC8vIFN1cHBvcnQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycywgdG8gYmUgYXJlIGFkZGVkIHRvIHRoZSBVUkwuXG4gIGNvbnN0IHNlYXJjaCA9IGZvcm1hdFF1ZXJ5KHF1ZXJ5KVxuICByZXR1cm4gc2VhcmNoID8gYCR7dXJsfT8ke3NlYXJjaH1gIDogdXJsXG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVVcmxzKGJhc2VVcmwsIHJlbGF0aXZlVXJsKSB7XG4gIC8vIFVzZSBzYW1lIGFwcHJvYWNoIGFzIGF4aW9zIGBjb21iaW5lVVJMcygpYCB0byBqb2luIGJhc2VVcmwgJiByZWxhdGl2ZVVybDpcbiAgcmV0dXJuIGAke2Jhc2VVcmwucmVwbGFjZSgvXFwvKyQvLCAnJyl9LyR7cmVsYXRpdmVVcmwucmVwbGFjZSgvXlxcLysvLCAnJyl9YFxufVxuIl0sIm5hbWVzIjpbImFwcFN0YXRlIiwicmVhY3RpdmUiLCJhcHBlbmREYXRhUGF0aCIsImRhdGFQYXRoIiwidG9rZW4iLCJwYXJzZVBhcmVudERhdGFQYXRoIiwicGF0aCIsInBhcnNlRGF0YVBhdGgiLCJwYXJzZUl0ZW1EYXRhUGF0aCIsIm5lc3RlZCIsImdldEl0ZW1EYXRhUGF0aCIsIm5vcm1hbGl6ZURhdGFQYXRoIiwicGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgiLCJpc0ludGVnZXIiLCJnZXRQYXJlbnRJdGVtRGF0YVBhdGgiLCJnZXRJdGVtIiwicm9vdEl0ZW0iLCJnZXRWYWx1ZUF0RGF0YVBhdGgiLCJnZXRQYXJlbnRJdGVtIiwiZ2V0TGFzdERhdGFQYXRoVG9rZW4iLCJnZXRMYXN0RGF0YVBhdGhOYW1lIiwiZ2V0TGFzdERhdGFQYXRoSW5kZXgiLCJpbmRleCIsInRlbXBvcmFyeUlkIiwic2V0VGVtcG9yYXJ5SWQiLCJkYXRhIiwiaWRLZXkiLCJpc1RlbXBvcmFyeUlkIiwiaWQiLCJpc1JlZmVyZW5jZSIsImhhc093blByb3BlcnR5IiwiY29udGV4dHMiLCJnZXQiLCJjb250ZXh0Iiwia2V5IiwiZGVmYXVsdFZhbHVlIiwib2JqZWN0IiwidG9SYXciLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJzZXQiLCJEaXRvQ29udGV4dCIsImNvbXBvbmVudCIsIml0ZW0iLCJvcHRpb25zIiwibG9jYXRpb24iLCJyZXNvdXJjZSIsIkVtaXR0ZXJNaXhpbiIsImV2ZW50IiwiY2FsbGJhY2siLCJpc0FycmF5IiwiZXYiLCJpc1BsYWluT2JqZWN0IiwibGlzdGVuZXJzIiwiY2FsbGJhY2tzIiwib24iLCJhcmdzIiwiZW50cnkiLCJfYSIsImNiIiwicXVldWUiLCJyZXNvbHZlIiwibmV4dCIsInJlc3VsdCIsInJlcyIsImVycm9yIiwidGFyZ2V0IiwidHlwZUNoZWNrZXJzIiwiaXNCb29sZWFuIiwiaXNOdW1iZXIiLCJpc1N0cmluZyIsImlzRGF0ZSIsImlzT2JqZWN0IiwiaXNSZWdFeHAiLCJ0b0Jvb2xlYW4iLCJ0b051bWJlciIsInRvU3RyaW5nIiwidG9EYXRlIiwidG9BcnJheSIsImFzQXJyYXkiLCJ0b09iamVjdCIsInRvUmVnRXhwIiwidHlwZUNvbnZlcnRlcnMiLCJpc01hdGNoaW5nVHlwZSIsInR5cGVzIiwidHlwZSIsImNvbnZlcnRUeXBlIiwiY29udmVydGVyIiwiaGFzUmVzb3VyY2UiLCJzY2hlbWEiLCJnZXRSZXNvdXJjZSIsImRlZmF1bHRzIiwicGFyZW50IiwiZGVmcyIsImdldE1lbWJlclJlc291cmNlIiwicGlja0J5IiwiRGl0b01peGluIiwidWlkIiwibmV4dFVpZCIsImxhYmVsaXplIiwia2V5T3JEYXRhUGF0aCIsImRlZiIsImNvbnZlcnRlZCIsIm5hbWUiLCJ2ZXJiIiwicXVlcnkiLCJ1cmwiLCJtZXRob2QiLCJpbnRlcm5hbCIsImNoZWNrVXNlciIsInJlc3BvbnNlIiwiZXF1YWxzIiwiY29tcG9uZW50cyIsImJ1dHRvbnMiLCJzZXR0aW5ncyIsImNhY2hlIiwiY2FjaGVQYXJlbnQiLCJsb2FkQ2FjaGUiLCJjYWNoZUtleSIsImxvY2FsZSIsImZvcm1hdCIsImEiLCJib2R5IiwiYWNjZXNzb3IiLCJ3YXRjaCIsImV2ZW50cyIsImhhbmRsZXJzIiwiZXhwciIsImFkZEV2ZW50IiwiaHlwaGVuYXRlIiwiaGFzTGlzdGVuZXJzIiwicGFyZW50SGFzTGlzdGVuZXJzIiwiZ2V0Q29udGV4dCIsInBhcmFtcyIsImNyZWRpdGNhcmQiLCJpc0NyZWRpdENhcmQiLCJkZWNpbWFscyIsIm1hdGNoIiwiZW1haWwiLCJpc0VtYWlsIiwiaG9zdG5hbWUiLCJpc0hvc3RuYW1lIiwiZG9tYWluIiwiaXNEb21haW4iLCJpbnRlZ2VyIiwibWF4IiwibWluIiwicGFzc3dvcmQiLCJyYW5nZSIsInJlcXVpcmVkIiwiaXNVcmwiLCJWYWxpZGF0aW9uTWl4aW4iLCJub3RpZnkiLCJpc1ZhbGlkIiwicnVsZSIsInNldHRpbmciLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0aW9ucyIsInZhbGlkYXRlIiwibWVzc2FnZSIsImFkZExhYmVsIiwiZXJyb3JzIiwiZm9jdXMiLCJnZXRTY2hlbWFBY2Nlc3NvciIsImdldFN0b3JlQWNjZXNzb3IiLCJUeXBlTWl4aW4iLCJjb21wdXRlVmFsdWUiLCJwYXJzZSIsInNjaGVtYUNvbXBvbmVudCIsImxhYmVsIiwiY2FtZWxpemUiLCJuYXRpdmVGaWVsZCIsInRleHRGaWVsZCIsImF0dHJpYnV0ZXMiLCJhZGQiLCJvbkZvY3VzIiwib25CbHVyIiwib25JbnB1dCIsIm9uQ2hhbmdlIiwiZWxlbWVudCIsIl9iIiwidWlkTWFwIiwiZ2V0VWlkIiwiaXRlbUlkIiwiU2NoZW1hR3JhcGgiLCJfX3B1YmxpY0ZpZWxkIiwic3ViR3JhcGgiLCJwYXJ0IiwicmVsYXRlZERhdGFQYXRoIiwibmFub2lkIiwiZmxhdHRlbiIsImdyYXBoIiwiZW50cmllcyIsIiRzZXR0aW5ncyIsInN1YktleSIsInNvdXJjZVNjaGVtYSIsImNsaXBib2FyZCIsInJlbGF0ZWQiLCJyZWZlcmVuY2UiLCJzb3VyY2UiLCJyZWxhdGlvbiIsInZhbHVlcyIsInJlbW92ZUlkIiwicmVmZXJlbmNlSWQiLCJyZWZLZXkiLCJyZXZWYWx1ZSIsInR5cGVDb21wb25lbnRzIiwidW5rbm93blR5cGVSZXBvcnRlZCIsInJlZ2lzdGVyVHlwZUNvbXBvbmVudCIsImdldFR5cGVDb21wb25lbnQiLCJhbGxvd051bGwiLCJpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyIsInNjaGVtYXMiLCJpc1NpbmdsZUNvbXBvbmVudFZpZXciLCJpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyIsImdldFRhYlNjaGVtYXMiLCJmaW5kU2NoZW1hQ29tcG9uZW50Iiwic29tZVNjaGVtYUNvbXBvbmVudCIsImlzU2NoZW1hIiwiaXNGb3JtIiwiaXNWaWV3IiwiaXNUYWIiLCJpc1BhbmVsIiwiZ2V0U2NoZW1hSWRlbnRpZmllciIsInJlc29sdmVTY2hlbWEiLCJ1bndyYXBNb2R1bGUiLCJpc1Byb21pc2UiLCJpc01vZHVsZSIsImtleXMiLCJyZXNvbHZlU2NoZW1hcyIsInVucmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZUl0ZW0iLCJtYXBDb25jdXJyZW50bHkiLCJyZXNvbHZlU2NoZW1hQ29tcG9uZW50IiwibWFya1JhdyIsInJlc29sdmVTY2hlbWFDb21wb25lbnRzIiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMiLCJhcGkiLCJyb3V0ZXMiLCJsZXZlbCIsInByb21pc2VzIiwicHJvY2VzcyIsInJlbGF0aXZlTGV2ZWwiLCJwcm9jZXNzU2NoZW1hQ29tcG9uZW50IiwiZ2V0UGFuZWxTY2hlbWFzIiwicHJvY2Vzc1NjaGVtYURlZmF1bHRzIiwicGFuZWwiLCJnZXRUeXBlT3B0aW9ucyIsInByb2Nlc3NWaWV3IiwicHJvY2Vzc1JvdXRlU2NoZW1hIiwicHJvY2Vzc05lc3RlZFNjaGVtYXMiLCJjaGlsZHJlbiIsIm1lcmdlIiwicHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzIiwiZm9ybXMiLCJnZXRGb3JtU2NoZW1hcyIsImZvcm0iLCJwcm9jZXNzRm9ybXMiLCJwcm9jZXNzRm9ybSIsInByb2Nlc3NUYWIiLCJwcm9jZXNzUGFuZWwiLCJ0YWJzIiwicGFuZWxzIiwidGFiIiwiaGFzRm9ybVNjaGVtYSIsImhhc011bHRpcGxlRm9ybVNjaGVtYXMiLCJnZXRWaWV3Rm9ybVNjaGVtYSIsInZpZXciLCJ2aWV3U2NoZW1hIiwiZ2V0Vmlld1NjaGVtYSIsImdldFZpZXdFZGl0UGF0aCIsIm1vZGlmeUZvcm0iLCJjb21wYWN0IiwiZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMiLCJnZXRJdGVtRm9ybVNjaGVtYSIsImlzQ29tcGFjdCIsImlzSW5saW5lZCIsImlzTmVzdGVkIiwib21pdFBhZGRpbmciLCJhbGlnbkJvdHRvbSIsImdldERlZmF1bHRWYWx1ZSIsImNsb25lIiwiaWdub3JlTWlzc2luZ1ZhbHVlIiwidHlwZU9wdGlvbnMiLCJzZXREZWZhdWx0VmFsdWVzIiwicHJvY2Vzc1NjaGVtYURhdGEiLCJyb290RGF0YSIsImNvbXB1dGUiLCJjbG9uZUl0ZW0iLCJjb3B5Iiwib3JkZXJLZXkiLCJwcm9jZXNzRGF0YSIsInNjaGVtYU9ubHkiLCJwcm9jZXNzZWREYXRhIiwid3JhcFByaW1pdGl2ZXMiLCJiIiwiaWQxIiwiaWQyIiwiZXhjbHVkZSIsInByb2Nlc3NWYWx1ZSIsInByb2Nlc3NCZWZvcmUiLCJwcm9jZXNzQWZ0ZXIiLCJwcm9jZXNzQ29tcG9uZW50cyIsImdldERhdGFQYXRoIiwiY29tcG9uZW50U2NoZW1hIiwiY29tcG9uZW50RGF0YVBhdGgiLCJwcm9jZXNzSXRlbSIsInByb2Nlc3NlZEl0ZW0iLCJnZXROYW1lZFNjaGVtYXMiLCJhcnJheSIsInRvU2NoZW1hIiwiZ2V0QnV0dG9uU2NoZW1hcyIsImdldFR5cGUiLCJzY2hlbWFPclR5cGUiLCJnZXRTb3VyY2VUeXBlIiwiZ2V0UGFuZWxFbnRyeSIsInRhYkNvbXBvbmVudCIsImdldFBhbmVsRW50cmllcyIsInBhbmVsU2NoZW1hcyIsInBhbmVsRW50cmllcyIsImdldEFsbFBhbmVsRW50cmllcyIsInBhbmVsU2NoZW1hIiwiaXNPYmplY3RTb3VyY2UiLCJpc0xpc3RTb3VyY2UiLCJnZXRJdGVtSWQiLCJnZXRJdGVtVWlkIiwicmVzb2x2ZU1lcmdlZE9wdGlvbnMiLCJtaXhpbnMiLCJtZXJnZU9wdGlvbnMiLCJ0byIsImZyb20iLCJtaXhpbiIsImRpdG9PcHRpb25LZXlzIiwiRGl0b0NvbXBvbmVudCIsImRlZmluaXRpb24iLCJEaXRvVXNlciIsInJvbGVzIiwicm9sZSIsIlNjaGVtYVBhcmVudE1peGluIiwic2NoZW1hQ29tcG9uZW50cyIsIlZhbGlkYXRvck1peGluIiwiaXQiLCJSb3V0ZU1peGluIiwicm91dGVDb21wb25lbnQiLCJtYXRjaGVkIiwiaSIsInJlY29yZCIsImJyZWFkY3J1bWIiLCJyb3V0ZUNvbXBvbmVudHMiLCJvayIsInRlbXBsYXRlUGF0aCIsInJvb3RQYXRoIiwiZ2V0Q29tbW9uUHJlZml4IiwiaXNMb2FkaW5nIiwiY29weURhdGUiLCJkYXRlIiwieWVhciIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiX3NmY19tYWluIiwid2Vla2RheU5hbWVzIiwibW9udGhOYW1lcyIsImdldExvY2FsZU5hbWVzIiwibW9kZSIsIm92ZXJyaWRlcyIsInN0ZXAiLCJjdXJyZW50VmFsdWUiLCJzdGF0ZSIsImhvciIsInZlciIsImVudGVyIiwiY3VycmVudE1vZGUiLCJzdGFydFllYXIiLCJmaXJzdERheVdlZWsiLCJudW1EYXlzIiwicHJldk1vbnRoIiwicHJldk1vbnRoTnVtRGF5cyIsInRvZGF5IiwiaXNEYXkiLCJuZXh0TW9udGhOZWVkIiwibmV4dE1vbnRoIiwibG9jYWxlTmFtZXMiLCJuYW1lcyIsImFkZEV2ZW50cyIsImdldEtleSIsImdldEtleU5hdmlnYXRpb24iLCJjbGFzc2VzIiwic2hvdyIsInRyaWdnZXIiLCJwb3B1cCIsImVsIiwiYm91bmRzIiwidHJpZ2dlckxlZnQiLCJ0cmlnZ2VyVG9wIiwidHJpZ2dlcldpZHRoIiwidHJpZ2dlckhlaWdodCIsInBvcHVwV2lkdGgiLCJwb3B1cEhlaWdodCIsInBhcnQxIiwicGFydDIiLCJ3aW5XaWR0aCIsIndpbkhlaWdodCIsImxlZnQiLCJ0b3AiLCJ0cmlnZ2VyQm91bmRzIiwic2l6ZSIsImdldExlbmd0aCIsIlRyaWdnZXIiLCJDYWxlbmRhciIsIklucHV0RmllbGQiLCJkZWZhdWx0Rm9ybWF0cyIsInNjcm9sbFRvIiwiZHVyYXRpb24iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJwZXJUaWNrIiwic2V0U2VsZWN0aW9uIiwiZmllbGQiLCJzdGFydCIsImVuZCIsImZvcmNlIiwic2Nyb2xsIiwicmVmIiwibGluZUhlaWdodCIsInNlbGVjdGVkIiwibGVuZ3RoIiwiRGF0ZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJwYWdlIiwicGFnZVNpemUiLCJjdXJyZW50UGFnZVNpemUiLCJzaG93UHJldiIsInNob3dOZXh0IiwidG90YWwiLCJjdXJyZW50UGFnZSIsInNob3dMZW5ndGgiLCJudW1QYWdlcyIsInBhZ2VSYW5nZSIsImNoZWNrZWQiLCJkaXNhYmxlZCIsInVuY2hlY2tlZCIsIm1vZGVsVmFsdWUiLCJUcmFuc2l0aW9uSGVpZ2h0IiwiZW5hYmxlZCIsInNsb3RzIiwiY3JlYXRlRWxlbWVudCIsIlRyYW5zaXRpb24iLCJwcm9wcyIsInNldFN0eWxlIiwic3R5bGUiLCJmb3JjZVJlcGFpbnQiLCJ3aWR0aCIsImhlaWdodCIsIlVzZUZvY3VzVHJhcCIsImRlZmluZUNvbXBvbmVudCIsInRyYXAiLCJhY3RpdmF0ZSIsImRlYWN0aXZhdGUiLCJ1bnJlZkVsZW1lbnQiLCJjcmVhdGVGb2N1c1RyYXAiLCJvblNjb3BlRGlzcG9zZSIsImgiLCJkaWFsb2dEYXRhIiwiRG9tTWl4aW4iLCJyZW1vdmUiLCJoYW5kbGVyIiwiRGl0b0RpYWxvZyIsImVyciIsInRpdGxlIiwidGV4dCIsImxvZyIsInN0cmlwVGFncyIsIm5vdGlmaWNhdGlvbnMiLCJkdXJhdGlvbkZhY3RvciIsInJlamVjdCIsImRpYWxvZ0lkIiwiYWRkaXRpb25hbENvbXBvbmVudHMiLCJyZWRpcmVjdEFmdGVyTG9naW4iLCJsb2dpbkRhdGEiLCJ1c2VyIiwiRGl0b1ZpZXciLCJmdWxsUGF0aCIsImFkZFJvdXRlcyIsInJvdXRlciIsInJlbW92ZXJzIiwicm91dGUiLCJyZW1vdmVSb3V0ZSIsIkRpdG9TcGlubmVyIiwiY29sb3IiLCJQdWxsZG93bk1peGluIiwic3RhcnRUaW1lIiwib3BlbiIsImNvbnRlbnQiLCJhc09iamVjdCIsIkl0ZW1NaXhpbiIsImV4dGVuZGVkIiwiaXRlbUxhYmVsIiwiZm9ybUxhYmVsIiwiZ2V0Rm9ybUxhYmVsIiwicHJlZml4Iiwic3VmZml4IiwiY29sdW1ucyIsImhhZExhYmVsIiwicGFuZSIsImN1cnJlbnRUYWIiLCJmaXJzdCIsImRlZmF1bHRUYWIiLCJkYXRhUGF0aE9yTmFtZSIsImV4cGFuZCIsImNvbXBvbmVudHNCeURhdGFQYXRoIiwiZGF0YVBhdGhzIiwiY2hlY2siLCJ1bm1hdGNoZWQiLCJlcnJzIiwiZnVsbERhdGFQYXRoIiwiZGF0YVBhdGhQYXJ0cyIsImZvdW5kIiwicHJvcGVydHkiLCJzdWJDb21wb25lbnRzIiwicmVnaXN0cnkiLCJlbnRyaWVzQnlEYXRhUGF0aCIsIl9ob2lzdGVkXzEiLCJfb3BlbkJsb2NrIiwiX2NyZWF0ZUVsZW1lbnRCbG9jayIsIl9GcmFnbWVudCIsIl9yZW5kZXJMaXN0IiwiX2N0eCIsIl9ob2lzdGVkXzIiLCJfY3JlYXRlQmxvY2siLCJfY29tcG9uZW50X0RpdG9Db250YWluZXIiLCJuZXN0ZWREYXRhUGF0aCIsInN0b3JlIiwiX2hvaXN0ZWRfMyIsInBhcnNlRnJhY3Rpb24iLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJjb250YWluZXJDbGFzcyIsImJhc2lzIiwiZ3JvdyIsInNocmluayIsImJhc2lzSXNBdXRvIiwiaGFzVk5vZGVDb250ZW50Iiwidm5vZGUiLCJDb21tZW50IiwiaGFzU2xvdENvbnRlbnQiLCJzbG90IiwidXNlU2xvdHMiLCJidXR0b24iLCJjYXBpdGFsaXplIiwiY2xpcGJvYXJkRGF0YSIsInBhc3RlIiwicmVwb3J0IiwianNvbiIsIl9kIiwiX2MiLCJkZWluZGVudCIsIiRzY2hlbWEiLCJfZSIsIkxvYWRpbmdNaXhpbiIsInVwZGF0ZVJvb3QiLCJ1cGRhdGVWaWV3IiwiUmVzb3VyY2VNaXhpbiIsImFtb3VudCIsInZlcmJzIiwiY2xlYXIiLCJsb2FkaW5nT3B0aW9ucyIsInJlcXVlc3QiLCJzZXREYXRhIiwib25TdWNjZXNzIiwib25FcnJvciIsIm5vdGlmeVN1Y2Nlc3MiLCJub3RpZnlFcnJvciIsInJlc29sdmVQYXRoIiwiaXNDcmVhdGluZyIsInByb3ZpZGVzRGF0YSIsImRhdGFQYXJ0cyIsInBhdGhQYXJ0cyIsInJvdXRlUGFydHMiLCJsYXN0RGF0YVBhcnQiLCJsIiwiZGF0YVBhcnQiLCJtYWluU2NoZW1hQ29tcG9uZW50IiwicHJlc2VudCIsImNsb3NlRm9ybSIsImdldFZlcmIiLCJidXR0b25SZXNvdXJjZSIsInN1Y2Nlc3MiLCJfcmVzb3VyY2UiLCJfbWV0aG9kIiwiRGl0b0Zvcm0iLCJzY29wZSIsIlBhZ2luYXRpb24iLCJTb3J0YWJsZU1peGluIiwiZm9yY2VGYWxsYmFjayIsIm9sZEluZGV4IiwibmV3SW5kZXgiLCJsaXN0IiwicGFnaW5hdGlvblJhbmdlIiwib2Zmc2V0IiwiX25vcm1hbGl6ZVN0eWxlIiwiX2NhY2hlIiwiX3dpdGhNb2RpZmllcnMiLCIkZXZlbnQiLCJfbm9ybWFsaXplQ2xhc3MiLCJfY3JlYXRlRWxlbWVudFZOb2RlIiwiX2hvaXN0ZWRfNCIsIl90b0Rpc3BsYXlTdHJpbmciLCJfaG9pc3RlZF81IiwiX2hvaXN0ZWRfNyIsIl9tZXJnZVByb3BzIiwiX3dpdGhEaXJlY3RpdmVzIiwiX2hvaXN0ZWRfOCIsIl9jb21wb25lbnRfRGl0b0xhYmVsIiwiX2NyZWF0ZVZOb2RlIiwiX2NvbXBvbmVudF9EaXRvVGFibGVDZWxsIiwiX2NvbXBvbmVudF9EaXRvRHJhZ2dhYmxlIiwiX2NvbXBvbmVudF9EaXRvVHJlZUl0ZW0iLCJjaGlsZHJlblNjaGVtYSIsImNoaWxkcmVuTGlzdCIsImVkaXRQYXRoIiwiY2hpbGRyZW5PcGVuIiwibnVtQ2hpbGRyZW4iLCJjcmVhdGFibGUiLCJlZGl0YWJsZSIsIm9yZGVyIiwiY29sdW1uIiwicmVuZGVyIiwiZXNjYXBlSHRtbCIsIl9fZGVmUHJvcCIsIl9fZ2V0T3duUHJvcFN5bWJvbHMiLCJfX2hhc093blByb3AiLCJfX3Byb3BJc0VudW0iLCJfX2RlZk5vcm1hbFByb3AiLCJvYmoiLCJfX3NwcmVhZFZhbHVlcyIsInByb3AiLCJfX29ialJlc3QiLCJ1c2VTb3J0YWJsZSIsInNvcnRhYmxlIiwiZG9jdW1lbnQiLCJkZWZhdWx0RG9jdW1lbnQiLCJyZXNldE9wdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsImUiLCJtb3ZlQXJyYXlFbGVtZW50IiwiU29ydGFibGUiLCJzdG9wIiwidHJ5T25Nb3VudGVkIiwidHJ5T25TY29wZURpc3Bvc2UiLCJ0b1ZhbHVlIiwibmV4dFRpY2siLCJVc2VTb3J0YWJsZSIsInVzZVZNb2RlbCIsIkRpdG9WTm9kZSIsIkRpdG9UeXBlQ29tcG9uZW50JDEiLCJEaXRvVHlwZUNvbXBvbmVudCIsIm9uQ2xpY2siLCJEYXRhTWl4aW4iLCJyZXNvbHZlQ291bnRlciIsImFzeW5jRW50cnkiLCJyZXNvbHZlZERhdGEiLCJsb2FkIiwidGltZXIiLCJPcHRpb25zTWl4aW4iLCJjb252ZXJ0VmFsdWUiLCJjb252ZXJ0Iiwic2VhcmNoIiwiZmlsdGVyIiwiZGVib3VuY2UiLCJkZWJvdW5jZUFzeW5jIiwib3B0aW9uIiwiZ3JvdXBlZCIsInJlc3VsdHMiLCJncm91cCIsImZpbmRPcHRpb24iLCJncm91cEJ5Iiwib3B0aW9uVmFsdWUiLCJvcHRpb25MYWJlbCIsInByb2Nlc3NSZWxhdGUiLCJmbGFzayIsIkNvZGVGbGFzayIsImNoYW5nZWQiLCJpZ25vcmVXYXRjaCIsImlnbm9yZVVwZGF0ZSIsInNldENvZGUiLCJjb2RlIiwic2V0VmFsdWUiLCJTa2V0Y2hQaWNrZXIiLCJ0aW55Y29sb3IiLCJmb2N1c2VkIiwiRGF0ZVRpbWVQaWNrZXIiLCJTb3VyY2VNaXhpbiIsImRlZmF1bHRTb3J0IiwiZGlyZWN0aW9uIiwiZHJhZ2dhYmxlIiwiY29sbGFwc2libGUiLCJsaXN0RGF0YSIsIm9uQ29tcGxldGUiLCJvcGVuZWQiLCJjYWxsT25Db21wbGV0ZSIsImlubGluZWQiLCJwYXJhbSIsIm1ldGEiLCJmb3JtTWV0YSIsImNoaWxkUm91dGVzIiwiZ2V0UGF0aFdpdGhQYXJhbSIsInNvdXJjZVBhdGgiLCJmb3JtUm91dGUiLCJmbGF0Um91dGVzIiwic3ViUm91dGVzIiwiY2hpbGRSb3V0ZSIsImZpbHRlckNvbXBvbmVudHMiLCJkYXRlRm9ybWF0IiwiY3JlYXRlRmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInByb3h5Iiwic3RpY2t5IiwiZmlsdGVyU2NoZW1hcyIsInBhcnNlRmlsdGVyc0RhdGEiLCJjcmVhdGVGaWx0ZXJzQ29tcG9uZW50cyIsImNyZWF0ZUZpbHRlcnNCdXR0b25zIiwiZm9ybWF0RmlsdGVyc0RhdGEiLCJzbWFsbCIsImNvbXBzIiwiZ2V0Q29tcG9uZW50c0ZvckZpbHRlciIsImZpbHRlcnNEYXRhIiwiX2NvbXBvbmVudF9EaXRvVGFibGVIZWFkIiwiX2NvbXBvbmVudF9EaXRvU2NoZW1hSW5saW5lZCIsIl9yZXNvbHZlRHluYW1pY0NvbXBvbmVudCIsIl9jb21wb25lbnRfRGl0b0VkaXRCdXR0b25zIiwiX2hvaXN0ZWRfOSIsImdldExpc3RDb21wb25lbnQiLCJmaWx0ZXJzRGF0YVBhdGgiLCJFZGl0b3JDb250ZW50IiwiSWNvbiIsImVkaXRvciIsIm1hcmtCdXR0b25zIiwiYmFzaWNOb2RlQnV0dG9ucyIsIm90aGVyTm9kZUJ1dHRvbnMiLCJ0b29sQnV0dG9ucyIsImVuYWJsZVJ1bGVzIiwic2V0VmFsdWVEZWJvdW5jZWQiLCJvblVwZGF0ZSIsIkVkaXRvciIsImdldFBvaW50IiwieCIsInkiLCJwcmV2WSIsIm1vdXNlbW92ZSIsImRpYWxvZ0NvbXBvbmVudCIsImdldE1hcmtBdHRyaWJ1dGVzIiwiaHJlZiIsIm1hcmtzIiwibm9kZXMiLCJ0b29scyIsIkRvY3VtZW50IiwiVGV4dCIsIlBhcmFncmFwaCIsIkJvbGQiLCJJdGFsaWMiLCJVbmRlcmxpbmUiLCJTdHJpa2UiLCJTbWFsbCIsIkNvZGUiLCJMaW5rV2l0aFRpdGxlIiwiQmxvY2txdW90ZSIsIkNvZGVCbG9jayIsIkhhcmRCcmVhayIsIkhlYWRpbmciLCJIb3Jpem9udGFsUnVsZSIsIkxpc3RJdGVtIiwiQnVsbGV0TGlzdCIsIk9yZGVyZWRMaXN0IiwiSGlzdG9yeSIsImV4dGVuc2lvbiIsInNldHRpbmdzTmFtZSIsImRlc2NyaXB0aW9ucyIsImFkZEJ1dHRvbiIsImljb24iLCJpZ25vcmVBY3RpdmUiLCJkZXNjcmlwdGlvbiIsInNldHRpbmdOYW1lIiwidW5kZXJzY29yZSIsImF0dHJpYnV0ZSIsIk1hcmsiLCJjb21tYW5kcyIsIkxpbmsiLCJub2RlIiwiX2NvbXBvbmVudF9WdWVNdWx0aXNlbGVjdCIsIlZ1ZU11bHRpc2VsZWN0IiwicGxhY2Vob2xkZXIiLCJzZWFyY2hhYmxlIiwidGFnZ2FibGUiLCJ0YWciLCJOdW1iZXJNaXhpbiIsIlN3aXRjaEJ1dHRvbiIsIm1hc2tlZFBhc3N3b3JkIiwiaGFzRWRpdGFibGVGb3JtcyIsImZvcm1hdEZpbGVTaXplIiwiZmlsZXNpemUiLCJWdWVVcGxvYWQiLCJhc0ZpbGVzIiwiYWNjZXB0IiwibWF4U2l6ZSIsInBhcnNlRmlsZVNpemUiLCJmaWxlIiwibmV3RmlsZSIsIm9sZEZpbGUiLCJ4aHIiLCJmaWxlcyIsInVwbG9hZCIsImxvZ2dlZERlcHJlY2F0aW9ucyIsImRlcHJlY2F0ZSIsImZvcm1hdFF1ZXJ5IiwidmFsIiwiRGl0b0FkbWluIiwiZGl0byIsInZpZXdzIiwiZ2V0QXBpVXJsIiwiaXNBcGlVcmwiLCJ1c2VycyIsInBhcmVudFBhdGgiLCJhcHAiLCJjcmVhdGVBcHAiLCJEaXRvUm9vdCIsIlZ1ZU5vdGlmaWNhdGlvbnMiLCJjcmVhdGVSb3V0ZXIiLCJjcmVhdGVXZWJIaXN0b3J5IiwiUmVxdWVzdEVycm9yIiwiaGVhZGVycyIsImlzQWJzb2x1dGVVcmwiLCJjb21iaW5lVXJscyIsImJhc2VVcmwiLCJyZWxhdGl2ZVVybCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFBQSxLQUFlQyxHQUFTO0FBQUEsRUFDdEIsT0FBTztBQUFBLEVBQ1AsaUJBQWlCLENBQUU7QUFBQSxFQUNuQixNQUFNO0FBQUEsRUFDTixXQUFXLENBQUU7QUFBQTtBQUFBLEVBQ2IsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUNqQixDQUFDO0FDRk0sU0FBU0MsRUFBZUMsR0FBVUMsR0FBTztBQUM5QyxTQUFPRCxJQUNILEdBQUdBLEtBQVlDLE1BQ2ZBO0FBQ047QUFFTyxTQUFTQyxHQUFvQkYsR0FBVTtBQUM1QyxRQUFNRyxJQUFPQyxHQUFjSixDQUFRO0FBQ25DLFNBQUFHLEtBQUEsUUFBQUEsRUFBTSxPQUNDQTtBQUNUO0FBTU8sU0FBU0UsR0FBa0JMLEdBQVVNLElBQVMsSUFBTztBQUMxRCxTQUFPQSxJQUFTSixHQUFvQkYsQ0FBUSxJQUFJSSxHQUFjSixDQUFRO0FBQ3hFO0FBRU8sU0FBU08sR0FBZ0JQLEdBQVVNLElBQVMsSUFBTztBQUN4RCxTQUFPRSxHQUFrQkgsR0FBa0JMLEdBQVVNLENBQU0sQ0FBQztBQUM5RDtBQUVPLFNBQVNHLEdBQXdCVCxHQUFVTSxJQUFTLElBQU87QUFDaEUsUUFBTUgsSUFBT0UsR0FBa0JMLEdBQVVNLENBQU07QUFDL0MsTUFBSUgsR0FBTTtBQUdSLFFBQUlGO0FBQ0o7QUFDRSxNQUFBQSxJQUFRRSxFQUFLLElBQUs7QUFBQSxXQUNYRixLQUFTLFFBQVFTLEdBQVUsQ0FBQ1QsQ0FBSztBQUUxQyxRQUFJQSxLQUFTO0FBQ1gsYUFBT0U7QUFBQTtBQUdYLFNBQU87QUFDVDtBQUVPLFNBQVNRLEdBQXNCWCxHQUFVTSxJQUFTLElBQU87QUFDOUQsU0FBT0UsR0FBa0JDLEdBQXdCVCxHQUFVTSxDQUFNLENBQUM7QUFD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O0FBQ0g7QUFFQSxlQUFlMmMsR0FBUTVVLEdBQUs7QUFBQSxFQUMxQixLQUFBbkk7QUFBQSxFQUNBLFFBQUFDLElBQVM7QUFBQTtBQUFBO0FBQUEsRUFHVCxRQUFBMEIsSUFBUztBQUFBLEVBQ1QsT0FBQTVCLElBQVE0QixLQUFVO0FBQUEsRUFDbEIsU0FBQTJyQixJQUFVO0FBQUEsRUFDVixNQUFBdnlCLElBQU87QUFDVCxHQUFHOztBQUNELEVBQUk0RyxLQUNGMHFCO0FBQUEsSUFDRTtBQUFBLEVBQ0Q7QUFHSCxRQUFNTyxJQUFXemtCLEVBQUksU0FBU25JLENBQUcsR0FFM0JJLElBQVcsTUFBTSxNQUFNK0gsRUFBSSxVQUFVLEVBQUUsS0FBQW5JLEdBQUssT0FBQUQsRUFBSyxDQUFFLEdBQUc7QUFBQSxJQUMxRCxRQUFRRSxFQUFPLFlBQWE7QUFBQSxJQUM1QixHQUFJbEYsS0FBUSxFQUFFLE1BQU0sS0FBSyxVQUFVQSxDQUFJO0lBQ3ZDLFNBQVM7QUFBQSxNQUNQLEdBQUk2eEIsS0FBWXprQixFQUFJO0FBQUEsTUFDcEIsR0FBR21sQjtBQUFBLElBQ0o7QUFBQSxJQUNELGFBQ0VWLE9BQVk1dkIsSUFBQW1MLEVBQUksU0FBSixRQUFBbkwsRUFBVSxlQUNsQixZQUNBO0FBQUEsRUFDVixDQUFHO0FBTUQsT0FKSTBILElBQUF0RSxFQUFTLFFBQVEsSUFBSSxjQUFjLE1BQW5DLFFBQUFzRSxFQUFzQyxTQUFTLHdCQUNqRHRFLEVBQVMsT0FBTyxNQUFNQSxFQUFTLEtBQU0sSUFHbkMsQ0FBQ0EsRUFBUztBQUNaLFVBQU0sSUFBSWl0QixHQUFhanRCLENBQVE7QUFFakMsU0FBT0E7QUFDVDtBQUVBLFNBQVN3c0IsR0FBU3prQixHQUFLbkksR0FBSztBQUMxQixTQUFPLENBQUN1dEIsR0FBY3Z0QixDQUFHLEtBQUtBLEVBQUksV0FBV21JLEVBQUksR0FBRztBQUN0RDtBQUVBLFNBQVN3a0IsR0FBVXhrQixHQUFLLEVBQUUsS0FBQW5JLEdBQUssT0FBQUQsRUFBSyxHQUFJO0FBQ3RDLEVBQUt3dEIsR0FBY3Z0QixDQUFHLE1BQ3BCQSxJQUFNd3RCLEdBQVlybEIsRUFBSSxLQUFLbkksQ0FBRztBQUdoQyxRQUFNbWpCLElBQVNtSixHQUFZdnNCLENBQUs7QUFDaEMsU0FBT29qQixJQUFTLEdBQUduakIsS0FBT21qQixNQUFXbmpCO0FBQ3ZDO0FBRUEsU0FBU3d0QixHQUFZQyxHQUFTQyxHQUFhO0FBRXpDLFNBQU8sR0FBR0QsRUFBUSxRQUFRLFFBQVEsRUFBRSxLQUFLQyxFQUFZLFFBQVEsUUFBUSxFQUFFO0FBQ3pFOyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOls0Niw4M119
9700
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19lbWFpbC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RvbWFpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdWlkLmpzIiwiLi4vc3JjL3V0aWxzL1NjaGVtYUdyYXBoLmpzIiwiLi4vc3JjL3V0aWxzL3NjaGVtYS5qcyIsIi4uL3NyYy91dGlscy9vcHRpb25zLmpzIiwiLi4vc3JjL0RpdG9Db21wb25lbnQuanMiLCIuLi9zcmMvRGl0b1VzZXIuanMiLCIuLi9zcmMvbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUm91dGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9kYXRlLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3Njcm9sbC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9Td2l0Y2hCdXR0b24udnVlIiwiLi4vLi4vdWkvc3JjL3RyYW5zaXRpb25zL1RyYW5zaXRpb25IZWlnaHQudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NwaW5uZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWUiLCIuLi9zcmMvbWl4aW5zL1B1bGxkb3duTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZSIsIi4uL3NyYy91dGlscy9tYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvdXRpbHMvdnVlLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9wYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU29ydGFibGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudC5tanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRHJhZ2dhYmxlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvRGl0b1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29kZS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb2xvci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlRGF0ZS52dWUiLCIuLi9zcmMvbWl4aW5zL1NvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2ZpbHRlci5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTWFya3VwLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU11bHRpc2VsZWN0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvTnVtYmVyTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlY3Rpb24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTd2l0Y2gudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVGV4dC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUcmVlTGlzdC52dWUiLCIuLi9zcmMvdXRpbHMvdW5pdHMuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVVcGxvYWQudnVlIiwiLi4vc3JjL3V0aWxzL2RlcHJlY2F0ZS5qcyIsIi4uL3NyYy91dGlscy9yb3V0ZS5qcyIsIi4uL3NyYy92ZXJicy5qcyIsIi4uL3NyYy9EaXRvQWRtaW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5cbmV4cG9ydCBkZWZhdWx0IHJlYWN0aXZlKHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufSlcbiIsImltcG9ydCB7XG4gIGlzSW50ZWdlcixcbiAgcGFyc2VEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKSB7XG4gIHJldHVybiBkYXRhUGF0aFxuICAgID8gYCR7ZGF0YVBhdGh9LyR7dG9rZW59YFxuICAgIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHBhdGg/LnBvcCgpXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5lc3RlZCA/IHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIDogcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICBpZiAocGF0aCkge1xuICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHRva2VuLiBJZiBpdCdzIGEgbnVtYmVyLCB0aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhblxuICAgIC8vIGFycmF5IGFuZCBuZWVkIHRvIHJlbW92ZSBtb3JlIHRva2VucyB1bnRpbCB3ZSBtZWV0IHRoZSBhY3R1YWwgcGFyZW50OlxuICAgIGxldCB0b2tlblxuICAgIGRvIHtcbiAgICAgIHRva2VuID0gcGF0aC5wb3AoKVxuICAgIH0gd2hpbGUgKHRva2VuICE9IG51bGwgJiYgaXNJbnRlZ2VyKCt0b2tlbikpXG4gICAgLy8gSWYgdGhlIHJlbW92ZWQgdG9rZW4gaXMgdmFsaWQsIHdlIGNhbiBnZXQgdGhlIHBhcmVudCBkYXRhOlxuICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aE5hbWUoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgcmV0dXJuIHRva2VuID09IG51bGwgfHwgaXNJbnRlZ2VyKCt0b2tlbikgPyBudWxsIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aEluZGV4KGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIGNvbnN0IGluZGV4ID0gdG9rZW4gPT0gbnVsbCA/IG51bGwgOiArdG9rZW5cbiAgcmV0dXJuIGlzSW50ZWdlcihpbmRleCkgPyBpbmRleCA6IG51bGxcbn1cblxubGV0IHRlbXBvcmFyeUlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBUZW1wb3JhcnkgaWRzIGFyZSBtYXJrZWQgd2l0aCBhICdAJyBhdCB0aGUgYmVnaW5uaW5nLlxuICBkYXRhW2lkS2V5XSA9IGBAJHsrK3RlbXBvcmFyeUlkfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcG9yYXJ5SWQoaWQpIHtcbiAgcmV0dXJuIC9eQC8udGVzdChpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYW4gb2JqZWN0IHRoYXQgaG9sZHMgbm90aGluZyBtb3JlIHRoYW4gYW4gaWQuXG4gIHJldHVybiBkYXRhPy5baWRLZXldICE9IG51bGwgJiYgT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09PSAxXG59XG4iLCJpbXBvcnQgeyB0b1JhdyB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLFxuICBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsXG4gIGdldFBhcmVudEl0ZW0sXG4gIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsXG4gIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuY29uc3QgeyBoYXNPd25Qcm9wZXJ0eSB9ID0gT2JqZWN0LnByb3RvdHlwZVxuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQodG9SYXcoY29udGV4dCkpXG4gIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV1cbiAgLy8gSWYgYG9iamVjdGAgZXhwbGljaXRseSBzZXRzIHRoZSBrZXkgdG8gYHVuZGVmaW5lZGAsIHJldHVybiBpdC5cbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICAgID8gZGVmYXVsdFZhbHVlKClcbiAgICAgIDogZGVmYXVsdFZhbHVlXG59XG5cbmZ1bmN0aW9uIHNldChjb250ZXh0LCBrZXksIHZhbHVlKSB7XG4gIGNvbnRleHRzLmdldCh0b1Jhdyhjb250ZXh0KSlba2V5XSA9IHZhbHVlXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Db250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgLy8gVXNlIHRoZSBwcm92aWRlZCBwYXJhbXMgb2JqZWN0IC8gZnVuY3Rpb24sIG9yIGNyZWF0ZSBhIG5ldyBvbmU6XG4gICAgY29udGV4dCA9IGNvbnRleHRcbiAgICAgID8gaXNGdW5jdGlvbihjb250ZXh0KVxuICAgICAgICA/IGNvbnRleHQoKVxuICAgICAgICA6IHsgLi4uY29udGV4dCB9XG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgLy8gTm8gbmVlZCBmb3IgYHRvUmF3KHRoaXMpYCBoZXJlIGFzIGl0J3MgYWx3YXlzIHJhdyBpbnNpZGUgdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnRleHRzLnNldCh0aGlzLCBvYmplY3QpXG4gIH1cblxuICBzdGF0aWMgZ2V0KGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0IGluc3RhbmNlb2YgRGl0b0NvbnRleHRcbiAgICAgID8gY29udGV4dFxuICAgICAgOiBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCBjb250ZXh0KVxuICB9XG5cbiAgLy8gYG5lc3RlZGAgaXMgYHRydWVgIHdoZW4gdGhlIGRhdGEtcGF0aCBwb2ludHMgYSB2YWx1ZSBpbnNpZGUgYW4gaXRlbSwgYW5kXG4gIC8vIGBmYWxzZWAgd2hlbiBpdCBwb2ludHMgdG8gdGhlIGl0ZW0gaXRzZWxmLlxuICBnZXQgbmVzdGVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25lc3RlZCcsIHRydWUpXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYScsIG51bGwpXG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmFsdWUnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YVBhdGgnLCAnJylcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25hbWUnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhOYW1lKHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGluZGV4KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2luZGV4JywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgaXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLml0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMucGFyZW50SXRlbURhdGFQYXRoKVxuICB9XG5cbiAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHM6XG4gIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gIGdldCBpdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGEnLCAoKSA9PlxuICAgICAgZ2V0SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICApXG4gIH1cblxuICAvLyBOT1RFOiBgcGFyZW50SXRlbWAgaXNuJ3QgdGhlIGNsb3Nlc3QgZGF0YSBwYXJlbnQgdG8gYGl0ZW1gLCBpdCdzIHRoZVxuICAvLyBjbG9zZXN0IHBhcmVudCB0aGF0IGlzbid0IGFuIGFycmF5LCBlLmcuIGZvciByZWxhdGlvbnMgb3IgbmVzdGVkIEpTT04gZGF0YS5cbiAgLy8gVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlIHVzZSBvZlxuICAvLyBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0IHBhcmVudC4gSWZcbiAgLy8gbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsIHNvcnRzIG9mIGRhdGFcbiAgLy8gcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IGl0ZW0gPSAoXG4gICAgICBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKSB8fFxuICAgICAgbnVsbFxuICAgIClcbiAgICByZXR1cm4gaXRlbSAhPT0gdGhpcy5pdGVtID8gaXRlbSA6IG51bGxcbiAgfVxuXG4gIGdldCByb290SXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyb290RGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwcm9jZXNzZWREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBjbGlwYm9hcmRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NsaXBib2FyZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndXNlcicsIG51bGwpXG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2FwaScsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld3MoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld3MnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGl0ZW1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpdGVtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgLy8gTk9URTogTGlrZSAnb3B0aW9ucycsIHRoZSBhc3NvY2lhdGVkIGNvbXBvbmVudCBkb2Vzbid0IGFsd2F5cyBleGlzdCwgZS5nLlxuICAvLyBpbiBuZXN0ZWQgZm9ybXMgZHVyaW5nIGBwcm9jZXNzRGF0YSgpYC4gQnV0IGBzY2hlbWFgIGlzIGd1YXJhbnRlZWQgdG9cbiAgLy8gYWx3YXlzIGJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdGVuZXJzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBBc3luYyBvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlIGV2ZW50cyBhZGRlZCAvXG4gICAgLy8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3MgaWYgdGhlIGNvbXBvbmVudFxuICAgIC8vIGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8PSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gKGxpc3RlbmVyc1tldmVudF0gfHw9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnRcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RlbmVyc1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZShldmVudCwgdGFyZ2V0KSB7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUoZXYsIHRhcmdldClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbihldmVudCwgKC4uLmFyZ3MpID0+IHRhcmdldC5lbWl0KGV2ZW50LCAuLi5hcmdzKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNCb29sZWFuLFxuICBpc051bWJlcixcbiAgaXNGdW5jdGlvbixcbiAgaXNEYXRlLFxuICBpc1JlZ0V4cCxcbiAgYXNBcnJheVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ2hlY2tlcnMgPSB7XG4gIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgTnVtYmVyOiBpc051bWJlcixcbiAgU3RyaW5nOiBpc1N0cmluZyxcbiAgRGF0ZTogaXNEYXRlLFxuICBBcnJheTogaXNBcnJheSxcbiAgT2JqZWN0OiBpc09iamVjdCxcbiAgUmVnRXhwOiBpc1JlZ0V4cCxcbiAgRnVuY3Rpb246IGlzRnVuY3Rpb25cbn1cblxuLy8gRGVjbGFyZSB0aGVzZSBzZXBhcmF0ZWx5IGZyb20gdGhlIGB0eXBlQ29udmVydGVyc2Agb2JqZWN0LCB0byBwcmV2ZW50XG4vLyBCYWJlbCBpc3N1ZXMgd2l0aCBgT2JqZWN0YCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgYE9iamVjdGA6XG5jb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiAhIXZhbHVlXG5jb25zdCB0b051bWJlciA9IHZhbHVlID0+ICt2YWx1ZVxuY29uc3QgdG9TdHJpbmcgPSB2YWx1ZSA9PiBTdHJpbmcodmFsdWUpXG5cbmNvbnN0IHRvRGF0ZSA9IHZhbHVlID0+XG4gIGlzRGF0ZSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+XG4gIGlzQXJyYXkodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICAgIDogYXNBcnJheSh2YWx1ZSlcblxuY29uc3QgdG9PYmplY3QgPSB2YWx1ZSA9PlxuICBpc09iamVjdCh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiAvLyBJZiBhIE9iamVjdCBpcyBleHBlY3RlZCBidXQgYSBCb29sZWFuIHByb3ZpZGUsIGNvbnZlcnQgdG8gYW4gZW1wdHlcbiAgICAgIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICAgICAgdmFsdWUgPT09IHRydWVcbiAgICAgID8ge31cbiAgICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+XG4gIGlzUmVnRXhwKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBwaWNrQnkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVzb3VyY2Uoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFJlc291cmNlKHNjaGVtYS5yZXNvdXJjZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlKHJlc291cmNlLCBkZWZhdWx0cyA9IHt9KSB7XG4gIGNvbnN0IHsgcGFyZW50LCAuLi5kZWZzIH0gPSBkZWZhdWx0c1xuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKVxuICAgID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSlcbiAgICAgID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdtZW1iZXInLFxuICAgICAgICAuLi5waWNrQnkoXG4gICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgKHZhbHVlLCBrZXkpID0+IFsnbWV0aG9kJywgJ3BhdGgnLCAncGFyZW50J10uaW5jbHVkZXMoa2V5KVxuICAgICAgICApLFxuICAgICAgICBpZDogYCR7aWR9YFxuICAgICAgfVxuICAgIDogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBhc0FycmF5LFxuICBlcXVhbHMsXG4gIGdldFZhbHVlQXREYXRhUGF0aCxcbiAgbGFiZWxpemUsXG4gIGh5cGhlbmF0ZSxcbiAgZm9ybWF0XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgYXBwU3RhdGUgZnJvbSAnLi4vYXBwU3RhdGUuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0VtaXR0ZXJNaXhpbl0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJ2FwaScsXG4gICAgJyR2ZXJicycsXG4gICAgJyR2aWV3cycsXG4gICAgJyRpc1BvcHVsYXRlZCcsXG4gICAgJyRwYXJlbnRDb21wb25lbnQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8ge1xuICAgICAgICAgICRwYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgJHBhcmVudENvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgICAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGUsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRyZWZzLnJvb3RcbiAgICB9LFxuXG4gICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gRGl0b1NjaGVtYSBjYW5cbiAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgIHBhcmVudENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnRDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2NoZW1hQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQ/LnBhcmVudENvbXBvbmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Um91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudD8ucGFyZW50Q29tcG9uZW50LnJvdXRlQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudEZvcm1Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXJlbnRDb21wb25lbnQuZm9ybUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkYXRhIG9mIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHNcbiAgICAvLyB0aGF0IGxvYWRzIGl0cyBvd24gZGF0YSBmcm9tIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlLlxuICAgIHJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YUNvbXBvbmVudD8uZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgY29uc3QgdWlkID0gbmV4dFVpZCsrXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICckdWlkJywge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdWlkXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGFiZWxpemUsXG5cbiAgICAvLyBUaGUgc3RhdGUgb2YgY29tcG9uZW50cyBpcyBvbmx5IGF2YWlsYWJsZSBkdXJpbmcgdGhlIGxpZmUtY3ljbGUgb2YgYVxuICAgIC8vIGNvbXBvbmVudC4gU29tZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIGF2YWlsYWJsZSBsb25nZXIgdGhhbiB0aGF0LCBlLmcuXG4gICAgLy8gYHF1ZXJ5YCAmIGB0b3RhbGAgb24gVHlwZUxpc3QsIHNvIHRoYXQgd2hlbiB0aGUgdXNlciBuYXZpZ2F0ZXMgYmFjayBmcm9tXG4gICAgLy8gZWRpdGluZyBhbiBpdGVtIGluIHRoZSBsaXN0LCB0aGUgc3RhdGUgb2YgdGhlIGxpc3QgaXMgc3RpbGwgdGhlIHNhbWUuXG4gICAgLy8gV2UgY2FuJ3Qgc3RvcmUgdGhpcyBpbiBgZGF0YWAsIGFzIHRoaXMgaXMgYWxyZWFkeSB0aGUgcHVyZSBkYXRhIGZyb20gdGhlXG4gICAgLy8gQVBJIHNlcnZlci4gVGhhdCdzIHdoYXQgdGhlIGBzdG9yZWAgaXMgZm9yOiBNZW1vcnkgdGhhdCdzIGF2YWlsYWJsZSBhc1xuICAgIC8vIGxvbmcgYXMgdGhlIGN1cnJlbnQgZWRpdGluZyBwYXRoIGlzIHN0aWxsIHZhbGlkLiBGb3IgdHlwZSBjb21wb25lbnRzLFxuICAgIC8vIHRoaXMgbWVtb3J5IGlzIHByb3ZpZGVkIGJ5IHRoZSBwYXJlbnQsIHNlZSBSb3V0ZU1peGluIGFuZCBEaXRvUGFuZS5cbiAgICBnZXRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlW2tleV1cbiAgICB9LFxuXG4gICAgc2V0U3RvcmUoa2V5LCB2YWx1ZSkge1xuICAgICAgdGhpcy5zdG9yZVtrZXldID0gdmFsdWVcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RvcmUoa2V5KSB8fCB0aGlzLnNldFN0b3JlKGtleSwgcmVhY3RpdmUoe30pKVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFWYWx1ZShcbiAgICAgIGtleU9yRGF0YVBhdGgsXG4gICAgICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgc2NoZW1hID0gdGhpcy5zY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbiAgICApIHtcbiAgICAgIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gICAgICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgZGF0YS1wYXRocyBpbiBga2V5T3JEYXRhUGF0aGAgY2FuIG9ubHkgYmVcbiAgICAgIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICAgICAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgICAgID8gaXNBcnJheShrZXlPckRhdGFQYXRoKVxuICAgICAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnMgZm9yIGFueSB0eXBlIGV4Y2VwdCBgRnVuY3Rpb25gOlxuICAgICAgICAgIGRlZiA9IGRlZi5jYWxsKHRoaXMpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH1cbiAgICAgIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAgICAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUodGhpcy5jb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gTm93IGZpbmFsbHkgc2VlIGlmIHdlIGNhbiBjb252ZXJ0IHRvIHRoZSBleHBlY3QgdHlwZXMuXG4gICAgICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCAmJiAhaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgICAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSlcbiAgICAgICAgICBpZiAoY29udmVydGVkICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIGdldExhYmVsKHNjaGVtYSwgbmFtZSkge1xuICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2xhYmVsJywgeyB0eXBlOiBTdHJpbmcsIHNjaGVtYSB9KSB8fFxuICAgICAgICAgIGxhYmVsaXplKG5hbWUgfHwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogbGFiZWxpemUobmFtZSkgfHwgJydcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzczogYGRpdG8tYnV0dG9uLSR7dmVyYn1gLFxuICAgICAgICB0aXRsZTogbGFiZWxpemUodmVyYilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVE9ETzogUmVuYW1lICpMaW5rKCkgdG8gKlJvdXRlKCkuXG4gICAgZ2V0UXVlcnlMaW5rKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgaGFzaDogdGhpcy4kcm91dGUuaGFzaFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG91bGRSZW5kZXIoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3VsZFNob3coc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3Zpc2libGUnLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIHNjaGVtYVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2hvdWxkRGlzYWJsZShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZGlzYWJsZWQnLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlUGF0aChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZSlcbiAgICAgIC8vIFJlc291cmNlcyB3aXRob3V0IGEgcGFyZW50IGluaGVyaXQgdGhlIG9uZSBmcm9tIGBkYXRhQ29tcG9uZW50YFxuICAgICAgLy8gYXV0b21hdGljYWxseS5cbiAgICAgIGlmIChyZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvdXJjZS5wYXJlbnQgPSB0aGlzLmRhdGFDb21wb25lbnQ/LnJlc291cmNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hcGkucmVzb3VyY2VzLmFueShnZXRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QoeyBtZXRob2QsIHVybCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBpbnRlcm5hbCB9KSB7XG4gICAgICB1cmwgfHw9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgbWV0aG9kIHx8PSByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlVcmwodXJsKVxuICAgICAgaWYgKGNoZWNrVXNlcikge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZW5zdXJlVXNlcigpXG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpLnJlcXVlc3QoeyBtZXRob2QsIHVybCwgZGF0YSwgcXVlcnkgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHsgY29tcG9uZW50cywgYnV0dG9ucywgZGF0YSwgc2V0dGluZ3MgfSkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdENvbXBvbmVudC5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc2V0dGluZ3NcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlcXVlc3QoeyBjYWNoZSwgLi4ub3B0aW9ucyB9KSB7XG4gICAgICAvLyBBbGxvdyBjYWNoaW5nIG9mIGxvYWRlZCBkYXRhIG9uIHR3byBsZXZlbHM6XG4gICAgICAvLyAtICdnbG9iYWwnOiBjYWNoZSBnbG9iYWxseSwgZm9yIHRoZSBlbnRpcmUgYWRtaW4gc2Vzc2lvblxuICAgICAgLy8gLSAnbG9jYWwnOiBjYWNoZSBsb2NhbGx5IHdpdGhpbiB0aGUgY2xvc2VzdCByb3V0ZSBjb21wb25lbnQgdGhhdCBpc1xuICAgICAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UgYW5kIGxvYWRzIGl0cyBvd24gZGF0YS5cbiAgICAgIGNvbnN0IGNhY2hlUGFyZW50ID0gKFxuICAgICAgICBjYWNoZSAmJlxuICAgICAgICB7XG4gICAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICAgIGxvY2FsOiB0aGlzLmRhdGFDb21wb25lbnRcbiAgICAgICAgfVtjYWNoZV1cbiAgICAgIClcbiAgICAgIGNvbnN0IGxvYWRDYWNoZSA9IGNhY2hlUGFyZW50Py5sb2FkQ2FjaGVcbiAgICAgIC8vIEJ1aWxkIGEgY2FjaGUga2V5IGZyb20gdGhlIGNvbmZpZzpcbiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gKFxuICAgICAgICBsb2FkQ2FjaGUgJiZcbiAgICAgICAgYCR7XG4gICAgICAgICAgb3B0aW9ucy5tZXRob2QgfHwgJ2dldCdcbiAgICAgICAgfSAke1xuICAgICAgICAgIG9wdGlvbnMudXJsXG4gICAgICAgIH0gJHtcbiAgICAgICAgICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBgcXVlcnlgIG9uXG4gICAgICAgICAgLy8gMjAyMi0xMS0wMSwgcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLnF1ZXJ5IHx8IG9wdGlvbnMucGFyYW1zIHx8ICcnKVxuICAgICAgICB9ICR7XG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5kYXRhIHx8ICcnKVxuICAgICAgICB9YFxuICAgICAgKVxuICAgICAgaWYgKGxvYWRDYWNoZSAmJiAoY2FjaGVLZXkgaW4gbG9hZENhY2hlKSkge1xuICAgICAgICByZXR1cm4gbG9hZENhY2hlW2NhY2hlS2V5XVxuICAgICAgfVxuICAgICAgLy8gTk9URTogTm8gYXdhaXQgaGVyZSwgcmVzIGlzIGEgcHJvbWlzZSB0aGF0IHdlIGNhbiBlYXNpbHkgY2FjaGUuXG4gICAgICAvLyBUaGF0J3MgZmluZSBiZWNhdXNlIHByb21pc2VzIGNhbiBiZSByZXNvbHZlZCBvdmVyIGFuZCBvdmVyIGFnYWluLlxuICAgICAgY29uc3QgcmVzID0gdGhpcy5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIENvbnZlcnQgYXhpb3MgZXJyb3JzIHRvIG5vcm1hbCBlcnJvcnNcbiAgICAgICAgICBjb25zdCBkYXRhID0gZXJyb3IucmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICB0aHJvdyBkYXRhXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGRhdGEubWVzc2FnZSksIGRhdGEpXG4gICAgICAgICAgICA6IGVycm9yXG4gICAgICAgIH0pXG4gICAgICBpZiAobG9hZENhY2hlKSB7XG4gICAgICAgIGxvYWRDYWNoZVtjYWNoZUtleV0gPSByZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9LFxuXG4gICAgZm9ybWF0KHZhbHVlLCB7XG4gICAgICBsb2NhbGUgPSB0aGlzLmFwaS5sb2NhbGUsXG4gICAgICBkZWZhdWx0cyA9IHRoaXMuYXBpLmZvcm1hdHMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCB7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlKGxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVyLnB1c2gobG9jYXRpb24pXG4gICAgfSxcblxuICAgIGRvd25sb2FkKG9wdGlvbnMgPSB7fSkge1xuICAgICAgaWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9XG4gICAgICB9XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80OTkxNzA2Ni8xMTYzNzA4XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBhLmhyZWYgPSB0aGlzLmFwaS5nZXRBcGlVcmwob3B0aW9ucylcbiAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLmZpbGVuYW1lID8/IG51bGxcbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSlcbiAgICAgIGEuY2xpY2soKVxuICAgICAgYm9keS5yZW1vdmVDaGlsZChhKVxuICAgIH0sXG5cbiAgICBub3RpZnkob3B0aW9ucykge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQuY2xvc2VOb3RpZmljYXRpb25zKClcbiAgICB9LFxuXG4gICAgc2V0dXBTY2hlbWFGaWVsZHMoKSB7XG4gICAgICB0aGlzLnNldHVwTWV0aG9kcygpXG4gICAgICB0aGlzLnNldHVwQ29tcHV0ZWQoKVxuICAgICAgdGhpcy5zZXR1cEV2ZW50cygpXG4gICAgfSxcblxuICAgIHNldHVwTWV0aG9kcygpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLm1ldGhvZHMgfHwge30pKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHRoaXNba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBtZXRob2QgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBDb21wdXRlZCgpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLmNvbXB1dGVkIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IGlzRnVuY3Rpb24odmFsdWUpXG4gICAgICAgICAgPyB7IGdldDogdmFsdWUgfVxuICAgICAgICAgIDogaXNPYmplY3QodmFsdWUpICYmIGlzRnVuY3Rpb24odmFsdWUuZ2V0KVxuICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChhY2Nlc3Nvcikge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIGFjY2Vzc29yKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBjb21wdXRlZCBwcm9wZXJ0eSBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgd2F0Y2gsIGV2ZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmICh3YXRjaCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGlzRnVuY3Rpb24od2F0Y2gpID8gd2F0Y2guY2FsbCh0aGlzKSA6IHdhdGNoXG4gICAgICAgIGlmIChpc09iamVjdChoYW5kbGVycykpIHtcbiAgICAgICAgICAvLyBJbnN0YWxsIHRoZSB3YXRjaCBoYW5kbGVycyBpbiB0aGUgbmV4dCB0aWNrLCBzbyBhbGwgY29tcG9uZW50cyBhcmVcbiAgICAgICAgICAvLyBpbml0aWFsaXplZCBhbmQgd2UgY2FuIGNoZWNrIGFnYWluc3QgdGhlaXIgbmFtZXMuXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgICAgIC8vIEV4cGFuZCBwcm9wZXJ0eSBuYW1lcyB0byAnZGF0YS5wcm9wZXJ0eSc6XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeU5hbWUoa2V5KVxuICAgICAgICAgICAgICAgID8gYGRhdGEuJHtrZXl9YFxuICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgIHRoaXMuJHdhdGNoKGV4cHIsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkRXZlbnQgPSAoa2V5LCBldmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgdGhpcy5vbihoeXBoZW5hdGUoZXZlbnQpLCBjYWxsYmFjaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGV2ZW50IGRlZmluaXRpb246ICR7a2V5fTogJHtjYWxsYmFja31gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzY2FuIHNjaGVtYSBmb3IgYG9uW0EtWl1gLXN0eWxlIGNhbGxiYWNrcyBhbmQgYWRkIHRoZW1cbiAgICAgIC8vIFRPRE86IERlcHJlY2F0ZSBvbmUgZm9ybWF0IG9yIHRoZSBvdGhlciwgaW4gZmF2b3VyIG9mIG9ubHkgb25lIHdheSBvZlxuICAgICAgLy8gZG9pbmcgdGhpbmdzLiBEZWNpZGUgd2hpY2ggb25lIHRvIHJlbW92ZS5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hKSkge1xuICAgICAgICBpZiAoL15vbltBLVpdLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleS5zbGljZSgyKSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEV2ZW50KGV2ZW50LCB7XG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIHBhcmVudCA9IG51bGxcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IGhhc0xpc3RlbmVycyA9IHRoaXMuaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgY29uc3QgcGFyZW50SGFzTGlzdGVuZXJzID0gcGFyZW50Py5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBpZiAoaGFzTGlzdGVuZXJzIHx8IHBhcmVudEhhc0xpc3RlbmVycykge1xuICAgICAgICAvLyBUaGUgZWZmZWN0cyBvZiBzb21lIGV2ZW50cyBuZWVkIHNvbWUgdGltZSB0byBwcm9wYWdhdGUgdGhyb3VnaCBWdWUuXG4gICAgICAgIC8vIFVzZSAkbmV4dFRpY2soKSB0byBtYWtlIHN1cmUgb3VyIGhhbmRsZXJzIHNlZSB0aGVzZSBjaGFuZ2VzLlxuICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYHByb2Nlc3NlZEl0ZW1gIGlzIG9ubHkgY29ycmVjdCBhZnRlciBjb21wb25lbnRzIHRoYXRcbiAgICAgICAgLy8gYXJlIG5ld2x5IHJlbmRlcmVkIGR1ZSB0byBkYXRhIGNoYW5nZXMgaGF2ZSByZWdpc3RlcmVkIHRoZW1zZWx2ZXMuXG4gICAgICAgIGlmIChbJ2xvYWQnLCAnY2hhbmdlJ10uaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+IChjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KHRoaXMsIGNvbnRleHQpKVxuICAgICAgICBjb25zdCByZXMgPSBoYXNMaXN0ZW5lcnNcbiAgICAgICAgICA/IGF3YWl0IHRoaXMuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIC8vIERvbid0IGJ1YmJsZSB0byBwYXJlbnQgaWYgaGFuZGxlZCBldmVudCByZXR1cm5lZCBgZmFsc2VgXG4gICAgICAgIGlmIChwYXJlbnRIYXNMaXN0ZW5lcnMgJiYgcmVzICE9PSBmYWxzZSkge1xuICAgICAgICAgIHBhcmVudC5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH1cbiAgfVxufVxuXG5sZXQgbmV4dFVpZCA9IDBcbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT5cbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2Bcbn1cbiIsImltcG9ydCB7IGlzRW1haWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZW1haWwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0VtYWlsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgYSB2YWxpZCBlbWFpbCdcbn1cbiIsImltcG9ydCB7IGlzSG9zdG5hbWUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0hvc3RuYW1lKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGhvc3QgbmFtZSdcbn1cbiIsImltcG9ydCB7IGlzRG9tYWluIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRG9tYWluKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGRvbWFpbidcbn1cbiIsImltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpbnRlZ2VyID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNJbnRlZ2VyKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgd2hvbGUgbnVtYmVyJ1xufVxuIiwiZXhwb3J0IGNvbnN0IG1heCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWF4KSA9PiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIG1heCkge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21heH0gb3IgbGVzc2BcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IG1pbiA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWluKSA9PiB2YWx1ZSA+PSBtaW4sXG4gIG1lc3NhZ2UodmFsdWUsIG1pbikge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21pbn0gb3IgbW9yZWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHBhc3N3b3JkID0ge1xuICAvLyBBbGxvdyBhbnkgdmFsdWUuIEZvciBub3cgdGhpcyBpcyBvbmx5IHVzZWQgYXMgYSBtYXJrZXIsIHRvIGFsbG93IHRoZVxuICAvLyByZXF1aXJlZCB2YWxpZGF0aW9uIHRvIGhhbmRsZSB1bmNoYW5nZWQgcGFzc3dvcmRzIHNlcGFyYXRlbHkuXG4gIHZhbGlkYXRlOiAoKSA9PiB0cnVlXG59XG4iLCJleHBvcnQgY29uc3QgcmFuZ2UgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIFttaW4sIG1heF0pID0+IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIFttaW4sIG1heF0pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJlcXVpcmVkID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBzZXR0aW5ncywgeyBwYXNzd29yZCB9KSA9PiAoXG4gICAgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKSB8fFxuICAgIC8vIFBhc3N3b3JkIGZpZWxkcyB1c2UgYHVuZGVmaW5lZGAgYXMgb3Bwb3NlZCB0byBgbnVsbGAgd2hlbiB0aGV5J3JlIHNldFxuICAgIC8vIGJ1dCB1bmNoYW5nZWQsIGFsbG93IHRoaXMgdG8gcGFzcyB0aHJvdWdoOlxuICAgIChwYXNzd29yZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICApLFxuICBtZXNzYWdlOiAnaXMgcmVxdWlyZWQnLFxuICBudWxsaXNoOiB0cnVlXG59XG4iLCJpbXBvcnQgeyBpc1VybCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCB1cmwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc1VybCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSB2YWxpZCBVUkwnXG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIHZhbGlkYXRpb25zIGZyb20gJy4uL3ZhbGlkYXRpb25zL2luZGV4LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWydlcnJvcnMnXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1RvdWNoZWQ6IGZhbHNlLFxuICAgICAgaXNEaXJ0eTogZmFsc2UsXG4gICAgICBpc1ZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZShub3RpZnkgPSB0cnVlKSB7XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAvLyBjb25zb2xlLmxvZygndmFsaWRhdGUnLCB0aGlzLmRhdGFQYXRoLCB2YWx1ZSwgdGhpcy52YWxpZGF0aW9ucylcbiAgICAgIGZvciAoY29uc3QgW3J1bGUsIHNldHRpbmddIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbmFtZXNwYWNlXG4gICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IHZhbGlkYXRpb25zW3J1bGVdXG4gICAgICAgIGlmICh2YWxpZGF0b3IgJiYgKHZhbGlkYXRvci5udWxsaXNoIHx8IHZhbHVlICE9IG51bGwpKSB7XG4gICAgICAgICAgY29uc3QgeyB2YWxpZGF0ZSwgbWVzc2FnZSB9ID0gdmFsaWRhdG9yXG4gICAgICAgICAgaWYgKCF2YWxpZGF0ZSh2YWx1ZSwgc2V0dGluZywgdGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzRnVuY3Rpb24obWVzc2FnZSlcbiAgICAgICAgICAgICAgICA/IG1lc3NhZ2UodmFsdWUsIHNldHRpbmcsIHRoaXMpXG4gICAgICAgICAgICAgICAgOiBtZXNzYWdlXG4gICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IsIHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuaXNWYWxpZCA9IGlzVmFsaWRcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlKGZhbHNlKVxuICAgIH0sXG5cbiAgICBtYXJrVG91Y2hlZCgpIHtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBtYXJrRGlydHkoKSB7XG4gICAgICB0aGlzLmlzRGlydHkgPSB0cnVlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICAvLyBDbGVhciBjdXJyZW50bHkgZGlzcGxheWVkIGVycm9ycyBvbiBuZXcgaW5wdXQuXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgYWRkRXJyb3IoZXJyb3IsIGFkZExhYmVsID0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZXJyb3JzIHx8PSBbXVxuICAgICAgaWYgKGFkZExhYmVsKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5sYWJlbCB8fCB0aGlzLnBsYWNlaG9sZGVyIHx8IHRoaXMubmFtZVxuICAgICAgICBlcnJvciA9IGBUaGUgJHtsYWJlbH0gZmllbGQgJHtlcnJvcn0uYFxuICAgICAgfVxuICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcilcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICAvLyBDb252ZXJ0IGZyb20gQUpWIGVycm9ycyBvYmplY3RzIHRvIGFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzXG4gICAgICB0aGlzLmVycm9ycyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IHsgbWVzc2FnZSB9IG9mIGVycm9ycykge1xuICAgICAgICB0aGlzLmFkZEVycm9yKG1lc3NhZ2UsIHRydWUpXG4gICAgICB9XG4gICAgICBpZiAoZm9jdXMpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBnZXRFcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lcnJvcnMgPyBbLi4udGhpcy5lcnJvcnNdIDogbnVsbFxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gbnVsbFxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmluZyxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYUFjY2Vzc29yKFxuICBrZXlPckRhdGFQYXRoLFxuICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbikge1xuICAvLyBga2V5T3JEYXRhUGF0aGAgY2FuIGJlIGEgc2ltcGxlIHByb3BlcnR5IGtleSxcbiAgLy8gb3IgYSBkYXRhLXBhdGggaW50byBzdWItcHJvcGVydGllcywgYm90aCBpbiBhcnJheSBvciBzdHJpbmcgZm9ybWF0LlxuICBpZiAoaXNTdHJpbmcoa2V5T3JEYXRhUGF0aCkgJiYga2V5T3JEYXRhUGF0aC5pbmNsdWRlcygnLicpKSB7XG4gICAga2V5T3JEYXRhUGF0aCA9IHBhcnNlRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgfVxuICAvLyBVc2UgdGhlIG5vcm1hbGl6ZWQgZGF0YSBwYXRoIGZvciB0aGUgaGFuZGxpbmcgb3ZlcnJpZGVzXG4gIGNvbnN0IG5hbWUgPSBub3JtYWxpemVEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIC8vIE9ubHkgZGV0ZXJtaW5lIHNjaGVtYSB2YWx1ZSBpZiB3ZSBoYXZlIG5vIGdldHRlciwgb3IgdGhlIGdldHRlclxuICAgICAgLy8gd2FudHMgdG8gcmVjZWl2ZSB0aGUgdmFsdWUgYW5kIHByb2Nlc3MgaXQgZnVydGhlcjpcbiAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgIWdldCB8fCBnZXQubGVuZ3RoID4gMFxuICAgICAgICAgID8gLy8gTk9URTogQmVjYXVzZSBgc2NoZW1hYCBvYmplY3RzIGFyZSByZXRyaWV2ZWQgZnJvbSBgbWV0YWAsIHRoZXlcbiAgICAgICAgICAgIC8vIGRvbid0IHNlZW0gdG8gYmUgcmVhY3RpdmUuIFRvIGFsbG93IGNoYW5nZWQgaW4gYHNjaGVtYWAgdmFsdWVzLFxuICAgICAgICAgICAgLy8gYHNldCgpYCBzdG9yZXMgY2hhbmdlZCB2YWx1ZXMgaW4gdGhlIHNlcGFyYXRlIGBvdmVycmlkZXNgIG9iamVjdC5cbiAgICAgICAgICAgIHRoaXMub3ZlcnJpZGVzICYmIG5hbWUgaW4gdGhpcy5vdmVycmlkZXNcbiAgICAgICAgICAgID8gdGhpcy5vdmVycmlkZXNbbmFtZV1cbiAgICAgICAgICAgIDogdGhpcy5nZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7XG4gICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBkZWYsXG4gICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHNldCkge1xuICAgICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzIHx8PSB7fVxuICAgICAgICB0aGlzLm92ZXJyaWRlc1tuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdG9yZUFjY2Vzc29yKG5hbWUsIHsgZGVmYXVsdDogZGVmLCBnZXQsIHNldCB9ID0ge30pIHtcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9uczpcbiAgICAgICAgdmFsdWUgPSBpc0Z1bmN0aW9uKGRlZikgPyBkZWYuY2FsbCh0aGlzKSA6IGRlZlxuICAgICAgICAvLyBUcmlnZ2VyIHNldHRlciBieSBzZXR0aW5nIHZhbHVlIGFuZCBhY2Nlc3NvciB0byBkZWZhdWx0OlxuICAgICAgICB0aGlzW25hbWVdID0gdmFsdWVcbiAgICAgICAgLy8gTm93IGFjY2VzcyBzdG9yZSBhZ2FpbiwgZm9yIHJlYWN0aXZpdHkgdHJhY2tpbmdcbiAgICAgICAgdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIGdldHRlciB0byBmdXJ0aGVyIGNoYW5nZSBvciBwcm9jZXNzIHRoZSB2YWx1ZVxuICAgICAgLy8gcmV0cmlldmVkIGZyb20gdGhlIHN0b3JlOlxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIHNldHRlciB0byByZXR1cm4gYSBuZXcgdmFsdWUgdG8gc2V0LCBvciBkbyB0aGVcbiAgICAgIC8vIHNldHRpbmcgaXRzZWxmLCBhbmQgdGhlbiByZXR1cm4gYHVuZGVmaW5lZGA6XG4gICAgICBpZiAoIXNldCB8fCAodmFsdWUgPSBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdG9yZShuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBWYWxpZGF0aW9uTWl4aW4gZnJvbSAnLi9WYWxpZGF0aW9uTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgY29tcHV0ZVZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbSwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSwgY2FtZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0aW9uTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBOT1RFOiBXaGlsZSBgZGF0YVBhdGhgIHBvaW50cyB0byB0aGUgYWN0dWFsIGB2YWx1ZWAsIGBkYXRhYCByZXByZXNlbnRzXG4gICAgLy8gdGhlIGBpdGVtYCBpbiB3aGljaCB0aGUgYHZhbHVlYCBpcyBjb250YWluZWQsIHVuZGVyIHRoZSBrZXkgYG5hbWVgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VkVmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGNoYW5nZWRWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShcbiAgICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgeyBjb21wb25lbnQ6IHRoaXMgfVxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHsgZm9ybWF0IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICAvLyBgc2NoZW1hLmZvcm1hdGAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgcmV0dXJuIGZvcm1hdFxuICAgICAgICAgID8gZm9ybWF0LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgcGFyc2UgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEucGFyc2VgIGlzIG9ubHkgZXZlciBjYWxsZWQgaW4gdGhlIGxpZmUtY3ljbGVcbiAgICAgICAgLy8gb2YgdGhlIGNvbXBvbmVudCBhbmQgdGh1cyBpdCdzIG9rIHRvIGJpbmQgaXQgdG8gYHRoaXNgXG4gICAgICAgIHRoaXMucGFyc2VkVmFsdWUgPSBwYXJzZVxuICAgICAgICAgID8gcGFyc2UuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgdGhpcy5kYXRhW3RoaXMubmFtZV0gPSB0aGlzLnBhcnNlZFZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgZGF0YSB0aHJvdWdoIHRoZSBzY2hlbWFDb21wb25lbnQsIGJ1dFxuICAgICAgLy8gdGhhdCdzIG5vdCBuZWNlc3NhcmlseSB0aGUgaXRlbSByZXByZXNlbnRlZCBieSB0aGlzIGNvbXBvbmVudC5cbiAgICAgIC8vIFNvbHV0aW9uOiBGaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgcHJvY2Vzc2VkIHN1Yi1pdGVtIGZyb20gdGhlcmU6XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGdldEl0ZW0oXG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5wcm9jZXNzZWREYXRhLFxuICAgICAgICAvLyBHZXQgdGhlIGRhdGFQYXRoIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWFDb21wb25lbnQncyBkYXRhOlxuICAgICAgICB0aGlzLmRhdGFQYXRoLnNsaWNlKHNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aC5sZW5ndGgpLFxuICAgICAgICB0aGlzLm5lc3RlZFxuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50RGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGxhYmVsOiBnZXRTY2hlbWFBY2Nlc3NvcignbGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcobGFiZWwpXG4gICAgICAgICAgPyBsYWJlbFxuICAgICAgICAgIDogbGFiZWwgIT09IGZhbHNlICYmIHRoaXMuJG9wdGlvbnMuZ2VuZXJhdGVMYWJlbFxuICAgICAgICAgICAgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXVxuICAgIH0pLFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZz9cbiAgICBleGNsdWRlOiBnZXRTY2hlbWFBY2Nlc3NvcignZXhjbHVkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVxdWlyZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXF1aXJlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBhIHN1Yi1jbGFzcyBjb21wb25lbnQgdXNlZCBmb3IgYWxsIGlucHV0IGNvbXBvbmVudHM/XG4gICAgcmVhZG9ubHk6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWFkb25seScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgYXV0b2ZvY3VzOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2ZvY3VzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUbyBiZSB1c2VkIGZvciBzZWxlY3RzIGFuZCBpbnB1dHMgb25seT9cbiAgICBjbGVhcmFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjbGVhcmFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncGxhY2Vob2xkZXInLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF1dG9jb21wbGV0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9jb21wbGV0ZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgZXZlbnRzKCkge1xuICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5nZXRFdmVudHMoKVxuICAgICAgLy8gUmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBhbGwgcHJvdmlkZXMgbm9uLXJlY29nbml6ZWQgZXZlbnRzLFxuICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgIC8vIFRPRE86IE1vdmUgdG8gdnVlMy1zdHlsZSBgb25bQS1aXWAgZXZlbnQgaGFuZGxlcnMgbmFtaW5nIHRoYXQgYXJlbid0XG4gICAgICAvLyBuYW1lc3BhY2VkIGluIGBzY2hlbWEuZXZlbnRzYCBvbmNlIHRoZSB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5ldmVudHMgfHwge30pKSB7XG4gICAgICAgIGV2ZW50c1tgb24ke2NhbWVsaXplKGV2ZW50LCB0cnVlKX1gXSA/Pz0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW1pdEV2ZW50KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnRzXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgLi4udGhpcy5ldmVudHMsXG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChuYXRpdmVGaWVsZCkge1xuICAgICAgICBhdHRyaWJ1dGVzLm5hbWUgPSB0aGlzLm5hbWVcbiAgICAgICAgaWYgKHRoaXMubGFiZWwpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnRpdGxlID0gdGhpcy5sYWJlbFxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZXMucmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5XG4gICAgICAgIGF0dHJpYnV0ZXMuYXV0b2ZvY3VzID0gdGhpcy5hdXRvZm9jdXNcbiAgICAgICAgaWYgKHRleHRGaWVsZCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyXG4gICAgICAgICAgYXR0cmlidXRlcy5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIHZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7IC4uLnRoaXMuZ2V0VmFsaWRhdGlvbnMoKSB9XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBkZWZhdWx0IHJ1bGVzIGFuZCBhZGQgYW55IG5ldyBvbmVzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEucnVsZXMgfHwge30pKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHZhbGlkYXRpb25zW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uc1trZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfSxcblxuICAgIHNob3dDbGVhckJ1dHRvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLnZhbHVlICE9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0RXZlbnRzKCkge1xuICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH0gPSB0aGlzXG4gICAgICByZXR1cm4geyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBbZWxlbWVudF0gPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZCwgYGZvY3VzKClgIHdpbGwgbGlrZWx5IG5vdCBoYXZlIHRoZVxuICAgICAgICAgIC8vIGRlc2lyZWQgZWZmZWN0LiBVc2UgYHNjcm9sbEludG9WaWV3KClgIGlmIGF2YWlsYWJsZTpcbiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgOyhlbGVtZW50LiRlbCB8fCBlbGVtZW50KS5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgLy8gQWxzbyBmb2N1cyB0aGlzIGNvbXBvbmVudCdzIHNjaGVtYSBhbmQgcGFuZWwgaW4gY2FzZSBpdCdzIGEgdGFiLlxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuZm9jdXMoKVxuICAgICAgdGhpcy50YWJDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgY2xlYXIoKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgfSxcblxuICAgIG9uRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlXG4gICAgICB0aGlzLm1hcmtUb3VjaGVkKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLnZhbGlkYXRlKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdibHVyJylcbiAgICB9LFxuXG4gICAgb25JbnB1dCgpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdvbklucHV0KCknLCB0aGlzLm5hbWUpXG4gICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5wdXQnKVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5wYXJzZWRWYWx1ZSA6IHRoaXMudmFsdWVcblxuICAgICAgaWYgKHRoaXMuJG9wdGlvbnMubmF0aXZlRmllbGQpIHtcbiAgICAgICAgLy8gRm9yIHNvbWUgb2RkIHJlYXNvbiwgdGhlIG5hdGl2ZSBjaGFuZ2UgZXZlbnQgbm93IHNvbWV0aW1lcyBmaXJlc1xuICAgICAgICAvLyB0d2ljZSBvbiBWdWUzLiBGaWx0ZXIgb3V0IHNlY29uZCBjYWxsLlxuICAgICAgICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSB3aHkgdGhpcyBoYXBwZW5zLCBhbmQgaWYgaXQncyBhIGJ1ZyBpbiBWdWUzLlxuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuY2hhbmdlZFZhbHVlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ29uQ2hhbmdlKCkgZG91YmxlJywgdGhpcy5uYW1lKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlZFZhbHVlID0gdmFsdWVcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coJ29uQ2hhbmdlKCknLCB0aGlzLm5hbWUsIHZhbHVlKVxuICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScsIHtcbiAgICAgICAgLy8gUHJldmVudCBlbmRsZXNzIHBhcnNlIHJlY3Vyc2lvbjpcbiAgICAgICAgY29udGV4dDogeyB2YWx1ZSB9LFxuICAgICAgICAvLyBQYXNzIGBzY2hlbWFDb21wb25lbnRgIGFzIHBhcmVudCwgc28gY2hhbmdlIGV2ZW50cyBjYW4gcHJvcGFnYXRlIHVwLlxuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiY29uc3QgdWlkTWFwID0gbmV3IFdlYWtNYXAoKVxuXG4vLyBHZW5lcmF0ZWQgYW5kIHJlbWVtYmVycyB1bmlxdWUgaWRzIHBlciBwYXNzZWQgb2JqZWN0IHVzaW5nIGEgd2VhayBtYXAuXG5sZXQgdWlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIGdldFVpZChvYmplY3QsIGl0ZW1JZCkge1xuICBsZXQgaWQgPSB1aWRNYXAuZ2V0KG9iamVjdClcbiAgaWYgKCFpZCkge1xuICAgIGlkID0gaXRlbUlkIHx8IGBAJHsrK3VpZH1gXG4gICAgdWlkTWFwLnNldChvYmplY3QsIGlkKVxuICB9XG4gIHJldHVybiBpZFxufVxuIiwiaW1wb3J0IHsgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzSW50ZWdlcixcbiAgYXNBcnJheSxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnXG5cbi8vIFNjaGVtYUdyYXBoIGlzIGEgY2xhc3MgdG8gY29sbGVjdCBzY2hlbWEgZ3JhcGggbWV0YSBpbmZvcm1hdGlvbiBpbiBvcmRlciB0b1xuLy8gcHJvY2VzcyBzb3VyY2VzIGFuZCByZWxhdGlvbnMgZm9yIHRoZSBnaXZlbiB0YXJnZXRzICdzZXJ2ZXInIGFuZCAnY2xpcGJvYXJkJyxcbi8vIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuLy9cbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXJ2ZXIgICAgfCBjbGlwYm9hcmQgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IGZhbHNlICAgICAgICAgICB8IGtlZXAgaWQgICB8IGtlZXAgaWQgICB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSwgdGVtcG9yYXJ5IHwgcmVmLCAjcmVmIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSwgdGVtcG9yYXJ5ICAgfCByZWYsICNpZCAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSAgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjaWQgIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUsIHRlbXBvcmFyeSAgICB8IHJlZiwgI2lkICB8IHJlZiwgI2lkICB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuXG5leHBvcnQgY2xhc3MgU2NoZW1hR3JhcGgge1xuICBncmFwaCA9IHt9XG4gIHJlZmVyZW5jZXMgPSB7fVxuXG4gIHNldChkYXRhUGF0aCwgc2V0dGluZ3MsIGRlZmF1bHRzKSB7XG4gICAgZGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgIGxldCBzdWJHcmFwaCA9IHRoaXMuZ3JhcGhcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGF0YVBhdGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlzSW50ZWdlcigrcGFydCkgPyAnKicgOiBwYXJ0XG4gICAgICBzdWJHcmFwaCA9IHN1YkdyYXBoW2tleV0gPz89IHt9XG4gICAgfVxuICAgIHN1YkdyYXBoLiRzZXR0aW5ncyA9IHtcbiAgICAgIC4uLmRlZmF1bHRzLCAvLyBTZWUgYGFkZFNvdXJjZShkYXRhUGF0aClgXG4gICAgICAuLi5zdWJHcmFwaC4kc2V0dGluZ3MsXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgLy8gT25seSBzZXQgYHJlbGF0ZWQ6IGZhbHNlYCB0aHJvdWdoIHRoZSBkZWZhdWx0cywgYXMgYHNldFNvdXJjZVJlbGF0ZWQoKWBcbiAgICAvLyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBgYWRkU291cmNlKClgLCBkZXBlbmRpbmcgb24gdGhlIGdyYXBoIHN0cnVjdHVyZS5cbiAgICB0aGlzLnNldChkYXRhUGF0aCwgeyB0eXBlOiAnc291cmNlJywgc2NoZW1hIH0sIHsgcmVsYXRlZDogZmFsc2UgfSlcbiAgfVxuXG4gIHNldFNvdXJjZVJlbGF0ZWQoZGF0YVBhdGgpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgcmVsYXRlZDogdHJ1ZSxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgc2NoZW1hLFxuICAgICAgaW50ZXJuYWw6ICEhcmVsYXRlZERhdGFQYXRoLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChyZWxhdGVkRGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aCkge1xuICAgIHJldHVybiBkYXRhUGF0aFxuICAgICAgPyAodGhpcy5yZWZlcmVuY2VzW2RhdGFQYXRoXSA/Pz0gbmFub2lkKDYpKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBmbGF0dGVuKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSBncmFwaCA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGZvciAoY29uc3QgW2tleSwgeyAkc2V0dGluZ3MsIC4uLnN1YkdyYXBoIH1dIG9mIE9iamVjdC5lbnRyaWVzKGdyYXBoKSkge1xuICAgICAgICBpZiAoJHNldHRpbmdzKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksICRzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbc3ViS2V5LCBzZXR0aW5nc10gb2YgZmxhdHRlbihzdWJHcmFwaCkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2Ake2tleX0vJHtzdWJLZXl9YCwgc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllc1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKHRoaXMuZ3JhcGgpXG4gIH1cblxuICBwcm9jZXNzKHNvdXJjZVNjaGVtYSwgZGF0YSwgeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGNsaXBib2FyZCA9IHRhcmdldCA9PT0gJ2NsaXBib2FyZCdcbiAgICBpZiAoY2xpcGJvYXJkKSB7XG4gICAgICBkZWxldGUgZGF0YVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIHNldHRpbmdzXSBvZiB0aGlzLmZsYXR0ZW4oKSkge1xuICAgICAgY29uc3QgeyB0eXBlLCBzY2hlbWEsIGludGVybmFsLCByZWxhdGVkLCByZWZlcmVuY2UgfSA9IHNldHRpbmdzXG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlID09PSAnc291cmNlJ1xuICAgICAgY29uc3QgcmVsYXRpb24gPSB0eXBlID09PSAncmVsYXRpb24nXG4gICAgICBpZiAoc291cmNlIHx8IHJlbGF0aW9uICYmIGludGVybmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlQXREYXRhUGF0aChkYXRhLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgY29uc3QgcmVtb3ZlSWQgPSBjbGlwYm9hcmQgJiYgc291cmNlICYmICFyZWxhdGVkXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gKFxuICAgICAgICAgIGNsaXBib2FyZCAmJiAoXG4gICAgICAgICAgICByZWxhdGlvbiAmJiBpbnRlcm5hbCB8fFxuICAgICAgICAgICAgc291cmNlICYmIHJlbGF0ZWRcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhc0FycmF5KHZhbHVlcykuZmxhdCgpKSB7XG4gICAgICAgICAgY29uc3QgaWRLZXkgPSAoXG4gICAgICAgICAgICBzb3VyY2UgJiYgc2NoZW1hLmlkS2V5IHx8XG4gICAgICAgICAgICByZWxhdGlvbiAmJiBzY2hlbWEucmVsYXRlQnkgfHxcbiAgICAgICAgICAgICdpZCdcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWU/LltpZEtleV1cbiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZUlkKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VJZCB8fCBpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICBpZiAoaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgICBpZCA9IGlkLnNsaWNlKDEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmVmS2V5ID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyAvLyBDbGlwYm9hcmQganVzdCBuZWVkcyB0ZW1wb3JhcnkgaWRzIHVuZGVyIHRoZSBhY3R1YWwgYGlkS2V5YFxuICAgICAgICAgICAgICAgICAgaWRLZXlcbiAgICAgICAgICAgICAgICA6IC8vIFNlcnZlciB3YW50cyBPYmplY3Rpb24tc3R5bGUgJyNpZCcgLyAnI3JlZicgcGFpcnMuXG4gICAgICAgICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgICAgID8gJyNpZCdcbiAgICAgICAgICAgICAgICAgIDogJyNyZWYnXG4gICAgICAgICAgICAgIGNvbnN0IHJldlZhbHVlID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyBgQCR7aWR9YFxuICAgICAgICAgICAgICAgIDogLy8gS2VlcCB0aGUgaWRzIHVuaXF1ZSBpbiByZWZlcmVuY2UgZ3JvdXBzLCBzaW5jZSB0aGV5XG4gICAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgYWNyb3NzIHRoZSBmdWxsIGdyYXBoLlxuICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICA/IGAke3JlZmVyZW5jZX0tJHtpZH1gXG4gICAgICAgICAgICAgICAgICA6IGlkIC8vIEEgdGVtcG9yYXJ5IGlkIHdpdGhvdXQgYSByZWxhdGVkLCBqdXN0IHByZXNlcnZlIGl0LlxuICAgICAgICAgICAgICB2YWx1ZVtyZWZLZXldID0gcmV2VmFsdWVcbiAgICAgICAgICAgICAgaWYgKHJlZktleSAhPT0gaWRLZXkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VWlkIH0gZnJvbSAnLi91aWQuanMnXG5pbXBvcnQgeyBTY2hlbWFHcmFwaCB9IGZyb20gJy4vU2NoZW1hR3JhcGguanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNBcnJheSxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBpc01vZHVsZSxcbiAgY2xvbmUsXG4gIG1lcmdlLFxuICBjYW1lbGl6ZSxcbiAgbWFwQ29uY3VycmVudGx5XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBtYXJrUmF3IH0gZnJvbSAndnVlJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWFzLCBjYWxsYmFjaykge1xuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSwgMClcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hLmNvbXBvbmVudHMgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSwgMSlcbiAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBzY2hlbWFcbiAgICA/IGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKFtzY2hlbWEsIC4uLmdldFRhYlNjaGVtYXMoc2NoZW1hKV0sIGNhbGxiYWNrKVxuICAgIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IGNvbXBvbmVudCA6IHVuZGVmaW5lZClcbiAgICApIHx8IG51bGxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZVNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyB0cnVlIDogdW5kZWZpbmVkKVxuICAgICkgPT09IHRydWVcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gdW5kZWZpbmVkIDogZmFsc2UpXG4gICAgKSAhPT0gZmFsc2VcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY2hlbWEoc2NoZW1hKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWEpICYmIGlzU3RyaW5nKHNjaGVtYS50eXBlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGb3JtKHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ2Zvcm0nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpZXcoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAndmlldydcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFiKHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ3RhYidcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFuZWwoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAncGFuZWwnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLm5hbWUgfHwgc2NoZW1hLmxhYmVsIHx8IHNjaGVtYS50eXBlXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlID0gZmFsc2UpIHtcbiAgaWYgKGlzRnVuY3Rpb24oc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpXG4gIH1cbiAgaWYgKGlzUHJvbWlzZShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gYXdhaXQgc2NoZW1hXG4gIH1cbiAgaWYgKGlzTW9kdWxlKHNjaGVtYSkpIHtcbiAgICAvLyBDb3B5IHRvIGNvbnZlcnQgZnJvbSBtb2R1bGUgdG8gb2JqZWN0OlxuICAgIHNjaGVtYSA9IHsgLi4uc2NoZW1hIH1cbiAgICAvLyBVbndyYXAgZGVmYXVsdCBvciBuYW1lZCBzY2hlbWFcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmICh1bndyYXBNb2R1bGUgfHwgc2NoZW1hLmRlZmF1bHQpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSB7XG4gIC8vIFJlc29sdmVzIGFzeW5jIHNjaGVtYSBjb21wb25lbnRzIGFuZCBhZGRzIERpdG9NaXhpbiBhbmQgVHlwZU1peGluIHRvIHRoZW0uXG4gIGxldCB7IGNvbXBvbmVudCB9ID0gc2NoZW1hXG4gIGlmIChjb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBhd2FpdCByZXNvbHZlU2NoZW1hKGNvbXBvbmVudCwgdHJ1ZSlcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAvLyBQcmV2ZW50IHdhcm5pbmc6IFwiVnVlIHJlY2VpdmVkIGEgQ29tcG9uZW50IHdoaWNoIHdhcyBtYWRlIGEgcmVhY3RpdmVcbiAgICAgIC8vIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgYW5kIHNob3VsZFxuICAgICAgLy8gYmUgYXZvaWRlZCBieSBtYXJraW5nIHRoZSBjb21wb25lbnQgd2l0aCBgbWFya1Jhd2BcIjpcbiAgICAgIHNjaGVtYS5jb21wb25lbnQgPSBtYXJrUmF3KHtcbiAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICBtaXhpbnM6IFtEaXRvTWl4aW4sIFR5cGVNaXhpbiwgLi4uKGNvbXBvbmVudC5taXhpbnMgfHwgW10pXVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYXMpIHtcbiAgLy8gYHNjaGVtYXNgIGFyZSBvZiB0aGUgc2FtZSBwb3NzaWJsZSBmb3JtcyBhcyBwYXNzZWQgdG8gYGdldE5hbWVkU2NoZW1hcygpYFxuICBhd2FpdCBtYXBDb25jdXJyZW50bHkoT2JqZWN0LnZhbHVlcyhzY2hlbWFzIHx8IHt9KSwgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwXG4pIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBjb25zdCBwcm9jZXNzID0gKGNvbXBvbmVudCwgbmFtZSwgcmVsYXRpdmVMZXZlbCkgPT4ge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICAgICAgICBhcGksXG4gICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCArIHJlbGF0aXZlTGV2ZWxcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIHByb2Nlc3MpXG4gIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLCBwcm9jZXNzKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudChcbiAgYXBpLFxuICBzY2hlbWEsXG4gIG5hbWUsXG4gIHJvdXRlcyA9IG51bGwsXG4gIGxldmVsID0gMFxuKSB7XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcblxuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLy8gQWxzbyBwcm9jZXNzIG5lc3RlZCBwYW5lbCBzY2hlbWFzLlxuICAgIG1hcENvbmN1cnJlbnRseShcbiAgICAgIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBwYW5lbCwgcm91dGVzLCBsZXZlbClcbiAgICApLFxuICAgIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NTY2hlbWE/LihcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbFxuICAgIClcbiAgXSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUpIHtcbiAgaWYgKCFpc1ZpZXcoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2aWV3IHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICBhd2FpdCBwcm9jZXNzTmVzdGVkU2NoZW1hcyhhcGksIHNjaGVtYSlcbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4sIDApXG4gIHJldHVybiB7XG4gICAgcGF0aDogYC8ke3NjaGVtYS5wYXRofWAsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIGxldCBkZWZhdWx0cyA9IGFwaS5kZWZhdWx0c1tzY2hlbWEudHlwZV1cbiAgaWYgKGRlZmF1bHRzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdHMpKSB7XG4gICAgICBkZWZhdWx0cyA9IGRlZmF1bHRzKHNjaGVtYSlcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGRlZmF1bHRzKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdHMpKSB7XG4gICAgICAgIGlmIChzY2hlbWFba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjaGVtYVtrZXldID0gbWVyZ2UodmFsdWUsIHNjaGVtYVtrZXldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpIHtcbiAgLy8gUHJvY2VzcyBkZWZhdWx0cyBmb3IgbmVzdGVkIHNjaGVtYXMuIE5vdGUgdGhhdCB0aGlzIGlzIGFsc28gZG9uZSB3aGVuXG4gIC8vIGNhbGxpbmcgYHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKClgLCBidXQgdGhhdCBmdW5jdGlvbiBpcyBhc3luYywgYW5kIHdlXG4gIC8vIG5lZWQgYSBzeW5jIHZlcnNpb24gdGhhdCBvbmx5IGhhbmRsZXMgdGhlIGRlZmF1bHRzIGZvciBmaWx0ZXJzLCBzZWVcbiAgLy8gYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjb21wb25lbnQgPT4ge1xuICAgIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIGNvbXBvbmVudClcbiAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1TY2hlbWFzKGNvbXBvbmVudClcbiAgICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICAgIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyhhcGksIGZvcm0pXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW4uXG4gIHNjaGVtYS5uYW1lID0gbmFtZVxuICBzY2hlbWEucGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGgobmFtZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpIHtcbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICBpZiAoZm9ybXMpIHtcbiAgICBmb3JtcyA9IHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCBmb3JtID0+XG4gICAgICBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gICAgKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gIH0gZWxzZSBpZiAoY29tcG9uZW50cykge1xuICAgIC8vIE5PVEU6IFByb2Nlc3NpbmcgZm9ybXMgaW4gY29tcHV0ZWQgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSBpdFxuICAgIC8vIG9ubHkgY2FuIGJlIGNvbXB1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggYWN0dWFsIGRhdGEuXG4gICAgaWYgKGlzT2JqZWN0KGNvbXBvbmVudHMpKSB7XG4gICAgICBmb3JtID0geyBjb21wb25lbnRzIH1cbiAgICB9XG4gIH1cblxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH0gLy8gT25seSB1c2VkIGZvciBwcm9jZXNzIGxvb3AgYmVsb3cuXG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBmb3JtLCBjaGlsZHJlbiwgbGV2ZWwpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRm9ybShhcGksIHNjaGVtYSkge1xuICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdHJ1ZSlcbiAgaWYgKCFpc0Zvcm0oc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JtIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgYXdhaXQgcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NUYWIoYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNUYWIoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0YWIgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzUGFuZWwoYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNQYW5lbChzY2hlbWEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhbmVsIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpIHtcbiAgY29uc3QgeyB0YWJzLCBwYW5lbHMgfSA9IHNjaGVtYVxuICBpZiAodGFicykge1xuICAgIHNjaGVtYS50YWJzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoXG4gICAgICB0YWJzLFxuICAgICAgdGFiID0+IHByb2Nlc3NUYWIoYXBpLCB0YWIpXG4gICAgKVxuICB9XG4gIGlmIChwYW5lbHMpIHtcbiAgICBzY2hlbWEucGFuZWxzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoXG4gICAgICBwYW5lbHMsXG4gICAgICBwYW5lbCA9PiBwcm9jZXNzUGFuZWwoYXBpLCBwYW5lbClcbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgYm90aCBzaW5nbGUgZm9ybSBhbmQgbXVsdGlwbGUgZm9ybXMgbm90YXRpb24sIGFzIHdlbGwgYXMgaW5saW5lZFxuICAvLyBjb21wb25lbnRzLlxuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBpc09iamVjdChzY2hlbWEuZm9ybSB8fCBzY2hlbWEuZm9ybXMgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiAoXG4gICAgaXNTY2hlbWEoc2NoZW1hKSAmJlxuICAgIE9iamVjdC5rZXlzKHNjaGVtYT8uZm9ybXMgfHwge30pLmxlbmd0aCA+IDFcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzVmlldyhzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmNvbXBvbmVudClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdmlldyB9ID0gc2NoZW1hXG4gIGNvbnN0IHZpZXdTY2hlbWEgPSB2aWV3ICYmIGNvbnRleHQudmlld3Nbdmlld11cbiAgcmV0dXJuIHZpZXdTY2hlbWFcbiAgICA/IC8vIE5PVEU6IFZpZXdzIGNhbiBoYXZlIHRhYnMsIGluIHdoaWNoIGNhc2UgdGhlIHZpZXcgY29tcG9uZW50IGlzIG5lc3RlZFxuICAgICAgLy8gaW4gb25lIG9mIHRoZSB0YWJzLCBnbyBmaW5kIGl0LlxuICAgICAgZmluZFNjaGVtYUNvbXBvbmVudCh2aWV3U2NoZW1hLCBoYXNGb3JtU2NoZW1hKSB8fCBudWxsXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICAgID8gY29udGV4dC52aWV3c1tzY2hlbWEudmlld11cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICByZXR1cm4gdmlld1xuICAgID8gaXNTaW5nbGVDb21wb25lbnRWaWV3KHZpZXcpXG4gICAgICA/IGAvJHt2aWV3LnBhdGh9YFxuICAgICAgOiBgLyR7dmlldy5wYXRofS8ke3ZpZXcucGF0aH1gXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIG1vZGlmeUZvcm0pIHtcbiAgY29uc3Qgdmlld1NjaGVtYSA9IGNvbnRleHQgJiYgZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlld1NjaGVtYSkge1xuICAgIHNjaGVtYSA9IHZpZXdTY2hlbWFcbiAgfSBlbHNlIGlmIChzY2hlbWEudmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB2aWV3OiAnJHtzY2hlbWEudmlld30nYClcbiAgfVxuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzLCBjb21wYWN0IH0gPSBzY2hlbWFcbiAgaWYgKCFmb3JtICYmICFmb3Jtcykge1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAvLyBDb252ZXJ0IGlubGluZWQgY29tcG9uZW50cyB0byBmb3Jtcywgc3VwcG9ydGluZyBgY29tcGFjdGAgc2V0dGluZy5cbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMsIGNvbXBhY3QgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBgZm9ybXNgLCBgZm9ybWAgb3IgYGNvbXBvbmVudHNgLCByZXR1cm4gYW5kIGVtcHR5IGBmb3Jtc2Agb2JqZWN0LlxuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZvcm1zKS5tYXAoKFt0eXBlLCBmb3JtXSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBgc2NoZW1hLmNvbXBvbmVudHNgIGNhbGxiYWNrcyB0byBjcmVhdGUgY29tcG9uZW50cyBvbiB0aGUgZmx5LlxuICAgICAgaWYgKGNvbnRleHQgJiYgaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGZvcm0gPSB7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhY3Qoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5jb21wYWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEuaW5saW5lZCB8fCBzY2hlbWEuY29tcG9uZW50cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLm5lc3RlZCB8fCBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0TmVzdGVkID09PSB0cnVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdFBhZGRpbmcoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lm9taXRQYWRkaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGlnbkJvdHRvbShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uYWxpZ25Cb3R0b21cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBkZWZhdWx0IHZhbHVlcyBib3RoIG9uIHNjaGVtYSBhbmQgb24gY29tcG9uZW50IGxldmVsLlxuICAvLyBOT1RFOiBBdCB0aGUgdGltZSBvZiBjcmVhdGlvbiwgY29tcG9uZW50cyBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCwgKGUuZy4gaWZcbiAgLy8gZW50cmllcyBhcmUgY3JlYXRlZCB0aHJvdWdoIG5lc3RlZCBmb3JtcywgdGhlIHBhcmVudCBmb3JtIGlzbid0IG1vdW50ZWQpIHNvXG4gIC8vIHdlIGNhbid0IHVzZSBgZGF0YVBhdGhgIHRvIGdldCB0byBjb21wb25lbnRzLCBhbmQgdGhlIGBkZWZhdWx0VmFsdWVgIGZyb21cbiAgLy8gdGhlcmUuIFRoYXQncyB3aHkgYGRlZmF1bHRWYWx1ZWAgaXMgZGVmaW5lZCBzdGF0aWNhbGx5IGluIHRoZSBjb21wb25lbnRzOlxuICBjb25zdCBkZWZhdWx0VmFsdWUgPSBzY2hlbWEuZGVmYXVsdFxuICBjb25zdCB2YWx1ZSA9XG4gICAgZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgID8gZGVmYXVsdFZhbHVlXG4gICAgICA6IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHRWYWx1ZVxuICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSlcbiAgICA/IHZhbHVlKHNjaGVtYSlcbiAgICA6IGNsb25lKHZhbHVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkge1xuICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcbiAgcmV0dXJuICEhKFxuICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHwgdHlwZU9wdGlvbnM/Lmlnbm9yZU1pc3NpbmdWYWx1ZT8uKHNjaGVtYSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdFZhbHVlcyhzY2hlbWEsIGRhdGEgPSB7fSwgY29tcG9uZW50KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgcm9vdERhdGE6IGRhdGEgfVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lKSA9PiB7XG4gICAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNldHMgdXAgYSBkYXRhIG9iamVjdCB0aGF0IGhhcyBrZXlzIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbFxuICAvLyBmb3JtIGZpZWxkcywgc28gdGhleSBjYW4gYmUgY29ycmVjdGx5IHdhdGNoZWQgZm9yIGNoYW5nZXMuXG4gIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsXG4gICAgZGF0YSxcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBudWxsLFxuICAgIG9wdGlvbnNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50ID0gbnVsbCxcbiAgcm9vdERhdGEgPSBjb21wb25lbnQ/LnJvb3REYXRhXG59ID0ge30pIHtcbiAgY29uc3QgeyBjb21wdXRlIH0gPSBzY2hlbWFcbiAgaWYgKGNvbXB1dGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGUoXG4gICAgICBEaXRvQ29udGV4dC5nZXQoY29tcG9uZW50LCB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgLy8gT3ZlcnJpZGUgdmFsdWUgdG8gcHJldmVudCBlbmRsZXNzIHJlY3Vyc2lvbiB0aHJvdWdoIGNhbGxpbmcgdGhlXG4gICAgICAgIC8vIGdldHRlciBmb3IgYHRoaXMudmFsdWVgIGluIGBEaXRvQ29udGV4dGA6XG4gICAgICAgIHZhbHVlOiBkYXRhW25hbWVdLFxuICAgICAgICBuYW1lLFxuICAgICAgICBkYXRhLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgcm9vdERhdGFcbiAgICAgIH0pXG4gICAgKVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBY2Nlc3MgYGRhdGFbbmFtZV1gIGRpcmVjdGx5IGluc3RlYWQgb2YgYHRoaXMudmFsdWUgPSDigKZgIHRvIHVwZGF0ZSB0aGVcbiAgICAgIC8vIHZhbHVlIHdpdGhvdXQgY2FsbGluZyBwYXJzZSgpOlxuICAgICAgZGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBzdGlsbCBtaXNzaW5nIGFmdGVyIGNvbXB1dGUsIHNldCB0aGUgZGVmYXVsdCBmb3IgaXQ6XG4gIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gIH1cbiAgLy8gTm93IGFjY2VzcyB0aGUgdmFsdWUuIFRoaXMgaXMgaW1wb3J0YW50IGZvciByZWFjdGl2aXR5IGFuZCBuZWVkcyB0b1xuICAvLyBoYXBwZW4gYWZ0ZXIgYWxsIHByaW9yIG1hbmlwdWxhdGlvbiBvZiBgZGF0YVtuYW1lXWAsIHNlZSBhYm92ZTpcbiAgcmV0dXJuIGRhdGFbbmFtZV1cbn1cblxuZnVuY3Rpb24gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgaXRlbSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5zY2hlbWFPbmx5KSB7XG4gICAgY29uc3QgY29weSA9IHt9XG4gICAgY29uc3QgeyBpZEtleSA9ICdpZCcsIG9yZGVyS2V5IH0gPSBzb3VyY2VTY2hlbWFcbiAgICBjb25zdCBpZCA9IGl0ZW1baWRLZXldXG4gICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvcHlbaWRLZXldID0gaWRcbiAgICB9XG4gICAgLy8gQ29weSBvdmVyIHR5cGUgaW4gY2FzZSB0aGVyZSBhcmUgbXVsdGlwbGUgZm9ybXMgdG8gY2hvb3NlIGZyb20uXG4gICAgaWYgKGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc291cmNlU2NoZW1hKSkge1xuICAgICAgY29weS50eXBlID0gaXRlbS50eXBlXG4gICAgfVxuICAgIGlmIChvcmRlcktleSkge1xuICAgICAgY29weVtvcmRlcktleV0gPSBpdGVtW29yZGVyS2V5XVxuICAgIH1cbiAgICByZXR1cm4gY29weVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRGF0YShzY2hlbWEsIHNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50LFxuICBzY2hlbWFPbmx5LCAvLyB3aGV0aGVyIHRvIG9ubHkgaW5jbHVkZSBkYXRhIGNvdmVyZWQgYnkgdGhlIHNjaGVtYSwgb3IgYWxsIGRhdGFcbiAgdGFyZ2V0XG59ID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCBzY2hlbWFPbmx5LCB0YXJnZXQsIHJvb3REYXRhOiBkYXRhIH1cbiAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGRhdGEsIG9wdGlvbnMpXG4gIGNvbnN0IGdyYXBoID0gbmV3IFNjaGVtYUdyYXBoKClcblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgb3B0aW9ucylcbiAgICAvLyBUaGUgc2NoZW1hIGV4cGVjdHMgdGhlIGB3cmFwUHJpbWl0aXZlc2AgdHJhbnNmb3JtYXRpb25zIHRvIGJlIHByZXNlbnQgb25cbiAgICAvLyB0aGUgZGF0YSB0aGF0IGl0IGlzIGFwcGxpZWQgb24sIHNvIHdhcnAgYmVmb3JlIGFuZCB1bndyYXAgYWZ0ZXIuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBvcmRlcktleSwgaWRLZXkgPSAnaWQnIH0gPSBzY2hlbWFcbiAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChlbnRyeSA9PiAoe1xuICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IGVudHJ5XG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWx3YXlzIHNoYWxsb3ctY2xvbmUgYXJyYXkgdmFsdWVzOlxuICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZV1cbiAgICAgIH1cbiAgICAgIGlmIChvcmRlcktleSAmJiB0YXJnZXQgPT09ICdjbGlwYm9hcmQnKSB7XG4gICAgICAgIC8vIFNvcnQgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSBuYXR1cmFsIHNlcXVlbmNlIGFzIGRlZmluZWQgYnkgdGhlaXIgaWRzLFxuICAgICAgICAvLyBzbyBjb3B5LXBhc3RpbmcgYmV0d2VlbiBzZXJ2ZXJzIChlLmcuIG5lc3RlZCBmb250LWN1dHMgb24gTGluZXRvKVxuICAgICAgICAvLyBuYXR1cmFsbHkgZ2V0cyBtYXBwZWQgdG8gdGhlIHNhbWUgZW50cmllcyBpbiB0aGUgZ3JhcGguXG4gICAgICAgIHZhbHVlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBpZDEgPSBhPy5baWRLZXldXG4gICAgICAgICAgY29uc3QgaWQyID0gYj8uW2lkS2V5XVxuICAgICAgICAgIHJldHVybiBpZDEgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMSlcbiAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMilcbiAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICA6IGlkMSAtIGlkMlxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgZXhjbHVkZSwgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG5cbiAgICAvLyBOT1RFOiBXZSBkb24ndCBjYWNoZSB0aGlzIGNvbnRleHQsIHNpbmNlIGB2YWx1ZWAgaXMgY2hhbmdpbmcuXG4gICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+XG4gICAgICBEaXRvQ29udGV4dC5nZXQoY29tcG9uZW50LCB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YSxcbiAgICAgICAgLy8gUGFzcyB0aGUgYWxyZWFkeSBwcm9jZXNzZWQgZGF0YSB0byBgcHJvY2VzcygpYCwgc28gaXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICAgIHByb2Nlc3NlZERhdGFcbiAgICAgIH0pXG5cbiAgICAvLyBGaXJzdCB1bndyYXAgdGhlIHdyYXBwZWQgcHJpbWl0aXZlcyBhZ2FpbiwgdG8gYnJpbmcgdGhlIGRhdGEgYmFjayBpbnRvXG4gICAgLy8gaXRzIG5hdGl2ZSBmb3JtLiBTZSBgcHJvY2Vzc0JlZm9yZSgpYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSB1c2VyJ3MgYHByb2Nlc3MoKWAgY2FsbGJhY2sgZmlyc3QsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoKSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgICAvLyBTdXBwb3J0IGZ1bmN0aW9ucyBuZXh0IHRvIGJvb2xlYW5zIGZvciBgc2NoZW1hLmV4Y2x1ZGVgOlxuICAgICAgZXhjbHVkZSA9PT0gdHJ1ZSB8fFxuICAgICAgaXNGdW5jdGlvbihleGNsdWRlKSAmJiBleGNsdWRlKGdldENvbnRleHQoKSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzZWREYXRhW25hbWVdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVhY2ggY29tcG9uZW50IHR5cGUgY2FuIHByb3ZpZGUgaXRzIG93biBzdGF0aWMgYHByb2Nlc3NWYWx1ZSgpYCBtZXRob2RcbiAgICAgIC8vIHRvIGNvbnZlcnQgdGhlIGRhdGEgZm9yIHN0b3JhZ2UuXG4gICAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSB0eXBlT3B0aW9ucz8ucHJvY2Vzc1ZhbHVlXG4gICAgICBpZiAocHJvY2Vzc1ZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaClcbiAgICAgIH1cbiAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIGRhdGFQYXRoLFxuICAgIHByb2Nlc3NlZERhdGEsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgb3B0aW9uc1xuICApXG5cbiAgcmV0dXJuIGdyYXBoLnByb2Nlc3Moc291cmNlU2NoZW1hLCBwcm9jZXNzZWREYXRhLCBvcHRpb25zKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURhdGEoXG4gIHNjaGVtYSxcbiAgZGF0YSxcbiAgZGF0YVBhdGgsXG4gIHByb2Nlc3NlZERhdGEsXG4gIHByb2Nlc3NCZWZvcmUsXG4gIHByb2Nlc3NBZnRlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IHByb2Nlc3NDb21wb25lbnRzID0gY29tcG9uZW50cyA9PiB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoZGF0YVBhdGgsIHRva2VuKSA9PlxuICAgICAgZGF0YVBhdGggIT0gbnVsbFxuICAgICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbilcbiAgICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGF0aCA9XG4gICAgICAgICAgICAgIGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICAgICAgPyBnZXREYXRhUGF0aChjb21wb25lbnREYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgICAgICAgOiBjb21wb25lbnREYXRhUGF0aFxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IERpdG9Db250ZXh0LmdldChvcHRpb25zLmNvbXBvbmVudCwge1xuICAgICAgICAgICAgICBzY2hlbWE6IGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjb25zdCBnZXRGb3JtcyA9IChcbiAgICAgICAgICAgICAgZ2V0VHlwZU9wdGlvbnMoY29tcG9uZW50U2NoZW1hKT8uZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nIHx8XG4gICAgICAgICAgICAgIGdldEZvcm1TY2hlbWFzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1zKGNvbXBvbmVudFNjaGVtYSwgY29udGV4dClcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSlcbiAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW0gPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyBjbG9uZUl0ZW0oY29tcG9uZW50U2NoZW1hLCBpdGVtLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZEl0ZW0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJdGVtcyB3aXRob3V0IGZvcm1zIHN0aWxsIGdldCBmdWxseSAoYnV0IHNoYWxsb3dseSkgY2xvbmVkLlxuICAgICAgICAgICAgICAvLyBUT0RPOiBGaW5kIG91dCBvZiB0aGlzIGlzIGFjdHVhbGx5IG5lZWRlZCAvIHVzZWQgYXQgYWxsP1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcm9jZXNzQmVmb3JlPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNvbXBvbmVudERhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhID8gcHJvY2Vzc2VkRGF0YVtuYW1lXSA6IGRhdGFbbmFtZV1cbiAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBoYXNGb3JtU2NoZW1hKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgZGF0YSBvbiBuZXN0ZWQgZm9ybSBpdGVtcy5cbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAvLyBPcHRpbWl6YXRpb246IE5vIG5lZWQgdG8gY29sbGVjdCB2YWx1ZXMgaWYgd2UncmUgbm90IGNsb25pbmchXG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgICAgIDogdmFsdWUuZm9yRWFjaChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc0l0ZW0odmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzc2VkRGF0YSkge1xuICAgICAgICAgICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvY2Vzc0FmdGVyPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNvbXBvbmVudERhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBmb3IgKGNvbnN0IHRhYiBvZiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyh0YWIuY29tcG9uZW50cylcbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuY29tcG9uZW50cylcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWREYXRhIHx8IGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkU2NoZW1hcyhzY2hlbWFzLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0b1NjaGVtYSh2YWx1ZSlcbiAgICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID1cbiAgICAgICAgICAgICAgc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgICAgIDogc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgICAgfSwge30pXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBpc0FycmF5KHNjaGVtYXMpXG4gICAgPyB0b09iamVjdChzY2hlbWFzLCB2YWx1ZSA9PlxuICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG5hbWU6IGNhbWVsaXplKHZhbHVlLCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgIClcbiAgICA6IGlzT2JqZWN0KHNjaGVtYXMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiAoXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKGdldFR5cGUoc2NoZW1hT3JUeXBlKSkgPz9cbiAgICBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cnkoc2NoZW1hLCBkYXRhUGF0aCA9IG51bGwsIHRhYkNvbXBvbmVudCA9IG51bGwpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgIGRhdGFQYXRoICE9IG51bGwgJiYgc2NoZW1hLm5hbWVcbiAgICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbEVudHJpZXMoXG4gIHBhbmVsU2NoZW1hcyxcbiAgZGF0YVBhdGggPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsLFxuICBwYW5lbEVudHJpZXMgPSBbXVxuKSB7XG4gIGlmIChwYW5lbFNjaGVtYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMocGFuZWxTY2hlbWFzKSkge1xuICAgICAgY29uc3QgZW50cnkgPSBnZXRQYW5lbEVudHJ5KFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGRhdGFQYXRoICE9IG51bGwgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwga2V5KSA6IG51bGwsXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHBhbmVsRW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxFbnRyaWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy50YWJzID8gT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy5wYW5lbHMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS5wYW5lbHMpIDogW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFBhbmVsRW50cmllcyhcbiAgYXBpLFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoID0gbnVsbCxcbiAgc2NoZW1hQ29tcG9uZW50ID0gbnVsbCxcbiAgdGFiQ29tcG9uZW50ID0gbnVsbFxuKSB7XG4gIGNvbnN0IHBhbmVsU2NoZW1hID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZ2V0UGFuZWxTY2hlbWE/LihcbiAgICBhcGksXG4gICAgc2NoZW1hLFxuICAgIGRhdGFQYXRoLFxuICAgIHNjaGVtYUNvbXBvbmVudFxuICApXG4gIGNvbnN0IHBhbmVsRW50cmllcyA9IHBhbmVsU2NoZW1hXG4gICAgPyBbZ2V0UGFuZWxFbnRyeShwYW5lbFNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCldXG4gICAgOiBbXVxuICAvLyBBbGxvdyBlYWNoIGNvbXBvbmVudCB0byBwcm92aWRlIGl0cyBvd24gc2V0IG9mIHBhbmVscywgaW5cbiAgLy8gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgb25lIChlLmcuIGdldEZpbHRlcnNQYW5lbCgpLCAkZmlsdGVycyk6XG4gIGdldFBhbmVsRW50cmllcyhzY2hlbWE/LnBhbmVscywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxFbnRyaWVzKVxuICByZXR1cm4gcGFuZWxFbnRyaWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ29iamVjdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ2xpc3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIGNvbnN0IGlkID0gaXRlbVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgcmV0dXJuIGlkICE9IG51bGwgPyBTdHJpbmcoaWQpIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICAvLyBUcnkgdG8gdXNlIHRoZSBpdGVtIGlkIGFzIHRoZSB1aWQsIGZhbGxpbmcgYmFjayBvbiBhdXRvLWdlbmVyYXRlZCBpZHMsIGJ1dFxuICAvLyBlaXRoZXIgd2F5LCBwYXNzIHRocm91Z2ggYGdldFVpZCgpYCBzbyB0aGF0IHRoZSBpZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgLy8gaXRlbSB0aHJvdWdoIGEgd2VhayBtYXAsIGFzIHRoZSBpZHMgY2FuIGJlIGZpbHRlcmVkIG91dCBpbiBgcHJvY2Vzc0RhdGEoKWBcbiAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHVpZHMgYXMga2V5IGFyZSBzdGlsbCB2aXNpYmxlLlxuICByZXR1cm4gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pKVxufVxuIiwiLy8gQSBtaW5pLXJlcGxpY2F0aW9uIG9mIHZ1ZSdzIGludGVybmFsIGByZXNvbHZlTWVyZ2VkT3B0aW9ucygpYCBidXQgb25seVxuLy8gaGFuZGxpbmcgb3VyIG93biBhZGRlZCBvcHRpb25zIHByb3BlcnRpZXMgYW5kIG1lcmdpbmcgdGhlbSBlYXJseSBpbnN0ZWFkXG4vLyBvZiBsYXppbHkuXG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTWVyZ2VkT3B0aW9ucyhvcHRpb25zKSB7XG4gIGNvbnN0IHsgbWl4aW5zIH0gPSBvcHRpb25zXG4gIHJldHVybiBtaXhpbnMgfHwgb3B0aW9ucy5leHRlbmRzXG4gICAgPyBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHsgLi4ub3B0aW9ucyB9LFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgOiBvcHRpb25zXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU9wdGlvbnModG8sIGZyb20pIHtcbiAgaWYgKGZyb20uZXh0ZW5kcykge1xuICAgIG1lcmdlT3B0aW9ucyh0bywgZnJvbS5leHRlbmRzKVxuICB9XG4gIGlmIChmcm9tLm1peGlucykge1xuICAgIGZvciAoY29uc3QgbWl4aW4gb2YgZnJvbS5taXhpbnMpIHtcbiAgICAgIG1lcmdlT3B0aW9ucyh0bywgbWl4aW4pXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIGRpdG9PcHRpb25LZXlzKSB7XG4gICAgaWYgKGtleSBpbiBmcm9tKSB7XG4gICAgICB0b1trZXldID0gZnJvbVtrZXldXG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG5jb25zdCBkaXRvT3B0aW9uS2V5cyA9IFtcbiAgJ2RlZmF1bHRWYWx1ZScsXG4gICdkZWZhdWx0TmVzdGVkJyxcbiAgJ2RlZmF1bHRWaXNpYmxlJyxcbiAgJ2dlbmVyYXRlTGFiZWwnLFxuICAnZXhjbHVkZVZhbHVlJyxcbiAgJ2lnbm9yZU1pc3NpbmdWYWx1ZScsXG4gICdhbGlnbkJvdHRvbScsXG4gICdvbWl0UGFkZGluZycsXG4gICdwcm9jZXNzVmFsdWUnLFxuICAncHJvY2Vzc1NjaGVtYScsXG4gICdnZXRQYW5lbFNjaGVtYScsXG4gICdnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcnLFxuICAvLyBWdWUgMyAvIFZ1ZS1yb3V0ZXIgNCBmb3JnZXRzIHRoZXNlLlxuICAvLyBUT0RPOiBDcmVhdGUgYnVnLXJlcG9ydD9cbiAgJ2JlZm9yZVJvdXRlVXBkYXRlJyxcbiAgJ2JlZm9yZVJvdXRlTGVhdmUnXG5dXG4iLCJpbXBvcnQgRGl0b01peGluIGZyb20gJy4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVNZXJnZWRPcHRpb25zIH0gZnJvbSAnLi91dGlscy9vcHRpb25zLmpzJ1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuICAvLyBNYWtlIHN1cmUgdGhhdCByZWdpc3RlcmVkIGNvbXBvbmVudHMgYXJlIHByZXNlbnQgaW4gYWxsIERpdG9Db21wb25lbnQuXG4gIGNvbXBvbmVudHMsXG5cbiAgY29tcG9uZW50KG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IHJlc29sdmVNZXJnZWRPcHRpb25zKHtcbiAgICAgICAgICBleHRlbmRzOiB0aGlzLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgLi4uZGVmaW5pdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29tcG9uZW50c1tuYW1lXSA9IGRlZmluaXRpb25cbiAgICB9XG4gICAgaWYgKCEobmFtZSBpbiBjb21wb25lbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgXCIke25hbWV9XCIgbm90IHJlZ2lzdGVyZWRgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Vc2VyIHtcbiAgaGFzUm9sZSguLi5yb2xlcykge1xuICAgIGlmICh0aGlzLnJvbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICAgICAgaWYgKHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtYUNvbXBvbmVudHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWFpblNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHNbMF1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBgRGl0b1NjaGVtYS5jcmVhdGVkKCkvdW5tb3VudGVkKClgIG9uIGl0c1xuICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50YCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgeyBlcnJvcnMgfSkgPT5cbiAgICAgICAgICBlcnJvcnMgJiYgcmVzdWx0ID8gcmVzdWx0LmNvbmNhdChlcnJvcnMpIDogZXJyb3JzLFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsb2FkOiBmYWxzZSxcbiAgICAgIC8vIEVhY2ggcm91dGUtY29tcG9uZW50IGRlZmluZXMgYSBzdG9yZSB0aGF0IGdldHMgcGFzc2VkIG9uIHRvIGl0c1xuICAgICAgLy8gY2hpbGQgY29tcG9uZW50cywgc28gdGhleSBjYW4gc3RvcmUgdmFsdWVzIGluIHRoZW0gdGhhdCBsaXZlIGJleW9uZFxuICAgICAgLy8gdGhlaXIgbGlmZS1jeWNsZS4gU2VlOiBEaXRvUGFuZSwgU291cmNlTWl4aW5cbiAgICAgIHN0b3JlOiB7fSxcbiAgICAgIGxvYWRDYWNoZToge30gLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHJvdXRlQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByb3V0ZUxldmVsKCkge1xuICAgICAgbGV0IGxldmVsID0gMFxuICAgICAgbGV0IHJvdXRlQ29tcG9uZW50ID0gdGhpc1xuICAgICAgd2hpbGUgKChyb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50LnBhcmVudENvbXBvbmVudC5yb3V0ZUNvbXBvbmVudCkpIHtcbiAgICAgICAgbGV2ZWwrK1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxldmVsXG4gICAgfSxcblxuICAgIHJvdXRlUmVjb3JkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm1hdGNoZWRbdGhpcy5yb3V0ZUxldmVsXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgaXNWaWV3KCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZD8ubWV0YVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Um91dGVQYXRoKHRoaXMucm91dGVSZWNvcmQucGF0aClcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYigpIHtcbiAgICAgIGNvbnN0IHsgYnJlYWRjcnVtYiB9ID0gdGhpcy5zY2hlbWEgfHwge31cbiAgICAgIHJldHVybiBicmVhZGNydW1iIHx8IGAke3RoaXMuYnJlYWRjcnVtYlByZWZpeH0gJHt0aGlzLmxhYmVsfWBcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH0sXG5cbiAgICBwYXJhbSgpIHtcbiAgICAgIC8vIFdvcmthcm91bmQgZm9yIHZ1ZS1yb3V0ZXIgbm90IGJlaW5nIGFibGUgdG8gbWFwIG11bHRpcGxlIHVybCBwYXJhbWV0ZXJzXG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gbXVsdGlwbGUgY29tcG9uZW50cywgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXJhbXNbdGhpcy5tZXRhPy5wYXJhbV0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGUsIHNlZSBEaXRvRm9ybVxuICAgIGlzTXV0YXRpbmcoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlUm91dGVVcGRhdGUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBiZWZvcmVSb3V0ZUxlYXZlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcz8uYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBLZWVwIGEgc2hhcmVkIHN0YWNrIG9mIHJvb3QgY29tcG9uZW50cyBmb3IgRGl0b1RyYWlsIHRvIHVzZSB0byByZW5kZXJcbiAgICAvLyBsYWJlbHMuIENhbid0IHJlbHkgb24gJHJvdXRlLm1hdGNoZWRbaV0uaW5zdGFuY2VzLmRlZmF1bHQgdW5mb3J0dW5hdGVseSxcbiAgICAvLyBhcyBpbnN0YW5jZXMgYXJlbid0IGltbWVkaWF0ZWx5IHJlYWR5LCBhbmQgaW5zdGFuY2VzIGlzIG5vdCByZWFjdGl2ZS5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5wdXNoKHRoaXMpXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgcm91dGVDb21wb25lbnRzLnNwbGljZShyb3V0ZUNvbXBvbmVudHMuaW5kZXhPZih0aGlzKSwgMSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpIHtcbiAgICAgIGxldCBvayA9IHRydWVcbiAgICAgIGNvbnN0IGlzQ2xvc2luZyA9IChcbiAgICAgICAgLy8gT25seSBoYW5kbGUgdGhpcyByb3V0ZSBjaGFuZ2UgaWYgdGhlIGZvcm0gaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZVxuICAgICAgICAvLyBgZnJvbWAgcm91dGUsIGJ1dCBpbmNsdWRlIHBhcmVudCBmb3JtcyBvZiBjbG9zaW5nIG5lc3RlZCBmb3JtcyBhcyBhc1xuICAgICAgICAvLyB3ZWxsLCBieSBtYXRjaGluZyB0aGUgdGhlIHN0YXJ0IG9mIGZyb20vdG8gcGF0aCBhZ2FpbnN0IGB0aGlzLnBhdGhgOlxuICAgICAgICBmcm9tLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgICF0by5wYXRoLnN0YXJ0c1dpdGgodGhpcy5wYXRoKSAmJlxuICAgICAgICAvLyBFeGNsdWRlIGhhc2ggY2hhbmdlcyBvbmx5ICg9IHRhYiBjaGFuZ2VzKTpcbiAgICAgICAgZnJvbS5wYXRoICE9PSB0by5wYXRoICYmIChcbiAgICAgICAgICB0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSB8fFxuICAgICAgICAgIC8vIERlY2lkZSBpZiB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhIG5ldyBuZXN0ZWQgZm9ybSwgb3IgY2xvc2luZyAvXG4gICAgICAgICAgLy8gcmVwbGFjaW5nIGFuIGFscmVhZHkgb3BlbiBvbmUgYnkgY29tcGFyaW5nIHBhdGggbGVuZ3Rocy5cbiAgICAgICAgICAvLyBUaGUgY2FzZSBvZiBgPWAgbWF0Y2hlcyB0aGUgcmVwbGFjaW5nIG9mIGFuIGFscmVhZHkgb3BlbiBvbmUuXG4gICAgICAgICAgdG8ucGF0aC5sZW5ndGggPD0gZnJvbS5wYXRoLmxlbmd0aFxuICAgICAgICApXG4gICAgICApXG4gICAgICBpZiAoaXNDbG9zaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTXV0YXRpbmcpIHtcbiAgICAgICAgICAvLyBGb3IgYWN0aXZlIGRpcmVjdGx5IG11dGF0aW5nIChuZXN0ZWQpIGZvcm1zIHRoYXQgd2VyZSBub3QgdmFsaWRhdGVkXG4gICAgICAgICAgLy8geWV0LCB2YWxpZGF0ZSB0aGVtIG9uY2UuIElmIHRoZSB1c2VyIHRoZW4gc3RpbGwgd2FudHMgdG8gbGVhdmVcbiAgICAgICAgICAvLyB0aGVtLCB0aGV5IGNhbiBjbGljayBjbG9zZSAvIG5hdmlnYXRlIGF3YXkgYWdhaW4uXG4gICAgICAgICAgb2sgPSAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRhdGVkIHx8XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlQWxsKClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhlIGZvcm0gZG9lc24ndCBkaXJlY3RseSBtdXRhdGUgZGF0YS4gSWYgaXQgaXMgZGlydHksIGFzayBpZiB1c2VyXG4gICAgICAgICAgLy8gd2FudHMgdG8gcGVyc2lzdCBkYXRhIGZpcnN0LlxuICAgICAgICAgIGlmICh0aGlzLmlzRGlydHkpIHtcbiAgICAgICAgICAgIG9rID0gd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgICAgIGBZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIERvIHlvdSByZWFsbHkgd2FudCB0byAke1xuICAgICAgICAgICAgICAgIHRoaXMudmVyYnMuY2FuY2VsXG4gICAgICAgICAgICAgIH0/YFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV4dChvaylcbiAgICB9LFxuXG4gICAgZ2V0Um91dGVQYXRoKHRlbXBsYXRlUGF0aCkge1xuICAgICAgLy8gTWFwcyB0aGUgcm91dGUncyBhY3R1YWwgcGF0aCB0byB0aGUgbWF0Y2hlZCByb3V0ZXMgYnkgY291bnRpbmcgaXRzXG4gICAgICAvLyBwYXJ0cyBzZXBhcmF0ZWQgYnkgJy8nLCBzcGxpdHRpbmcgdGhlIHBhdGggaW50byB0aGUgbWFwcGVkIHBhcnRzXG4gICAgICAvLyBjb250YWluaW5nIGFjdHVhbCBwYXJhbWV0ZXJzLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGhcbiAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgLnNsaWNlKDAsIHRlbXBsYXRlUGF0aC5zcGxpdCgnLycpLmxlbmd0aClcbiAgICAgICAgLmpvaW4oJy8nKVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRlbXBsYXRlKFxuICB2LWlmPVwidXNlclwiXG4pXG4gIC8vLSBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4gIC8vLSBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbiAgLy8tIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuICAvLy0gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG4gIFJvdXRlclZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4gICAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4gIClcbiAgICBEaXRvU2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgeyBzb21lU2NoZW1hQ29tcG9uZW50LCBpc1NpbmdsZUNvbXBvbmVudFZpZXcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9WaWV3Jywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIC8vIFJlZGlyZWN0ICRzb3VyY2VDb21wb25lbnQgYW5kICRyZXNvdXJjZUNvbXBvbmVudCB0byB0aGUgbWFpbiBjb21wb25lbnQ6XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8uc291cmNlQ29tcG9uZW50IHx8IG51bGwsXG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8ucmVzb3VyY2VDb21wb25lbnQgfHwgbnVsbFxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBVcGRhdGVkIGZyb20gTG9hZGluZ01peGluIHRocm91Z2ggYHNldExvYWRpbmcoaXNMb2FkaW5nKWA6XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgLy8gTk9URTogRGF0YSBpcyBzaGFyZWQgYWNyb3NzIGFsbCB2aWV3cyBiZWNhdXNlIHRoZSByb3V0ZXIgcmVjeWNsZXMgdGhlXG4gICAgICAvLyBEaXRvVmlldyBjb21wb25lbnQuXG4gICAgICBkYXRhOiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEuc2NoZW1hXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICBpc1ZpZXcoKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudFZpZXcoKSB7XG4gICAgICByZXR1cm4gaXNTaW5nbGVDb21wb25lbnRWaWV3KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBtYWluQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKHRoaXMubmFtZSlcbiAgICB9LFxuXG4gICAgdmlld1NjaGVtYSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50LCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAvLyBUcmFuc2xhdGUgc2luZ2xlLWNvbXBvbmVudCBzY2hlbWFzIGludG8gbXVsdGktY29tcG9uZW50IHNjaGVtYXMsXG4gICAgICAvLyBzbyB0aGV5IGNhbiBiZSByZW5kZXJlZCBkaXJlY3RseSB0aHJvdWdoIERpdG9TY2hlbWEgYWxzbzpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgW3NjaGVtYS5uYW1lXToge1xuICAgICAgICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAuLi5jb21wb25lbnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzY2hlbWFcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHNvbWVTY2hlbWFDb21wb25lbnQodGhpcy52aWV3U2NoZW1hLCBoYXNSZXNvdXJjZSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIC8vIFNlZSBpZiB0aGUgcm91dGUgY2hhbmdlcyBjb21wbGV0ZWx5LCBhbmQgY2xlYXIgdGhlIGRhdGEgaWYgaXQgZG9lcy5cbiAgICAgIGlmICh0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSkge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGF0YSA9IHt9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIC8vIExpc3RzIGluc2lkZSBzaW5nbGUtY29tcG9uZW50IHZpZXdzIHVzZSB0aGUgdmlldydzIHBhdGggZm9yIHN1Yi1wYXRoczpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHRoaXMucGF0aFxuICAgICAgICA6IGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5RGF0ZShkYXRlLCB7XG4gIHllYXIgPSBkYXRlPy5nZXRGdWxsWWVhcigpID8/IDAsXG4gIG1vbnRoID0gZGF0ZT8uZ2V0TW9udGgoKSA/PyAwLFxuICBkYXkgPSBkYXRlPy5nZXREYXRlKCkgPz8gMCxcbiAgaG91ciA9IGRhdGU/LmdldEhvdXJzKCkgPz8gMCxcbiAgbWludXRlID0gZGF0ZT8uZ2V0TWludXRlcygpID8/IDAsXG4gIHNlY29uZCA9IGRhdGU/LmdldFNlY29uZHMoKSA/PyAwLFxuICBtaWxsaXNlY29uZCA9IGRhdGU/LmdldE1pbGxpc2Vjb25kcygpID8/IDBcbn0gPSB7fSkge1xuICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERhdGUoZGF0ZSkge1xuICByZXR1cm4gaXNEYXRlKGRhdGUpID8gZGF0ZSA6IGRhdGUgPyBuZXcgRGF0ZShkYXRlKSA6IG51bGxcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY2FsZW5kYXJcbiAgLmRpdG8tY2FsZW5kYXItcG9wdXBcbiAgICAuZGl0by1jYWxlbmRhci1pbm5lclxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ2RheSdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IDEgfSkgfX1cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtbW9udGgoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ21vbnRoJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IG1vbnRoOiAxIH0pIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIndlZWtkYXkgaW4gd2Vla2RheU5hbWVzXCJcbiAgICAgICAgICAgICkge3sgd2Vla2RheS5zaG9ydCB9fVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWRhdGVzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cImRhdGUgaW4gZGF0ZVJhbmdlXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZGF0ZS5zdGF0ZSAmJiBgZGl0by1jYWxlbmRhci1pdGVtLSR7ZGF0ZS5zdGF0ZX1gXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShkYXRlLmRhdGUsIGRhdGUuc3RhdGUsIHRydWUpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZS50ZXh0IH19XG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtdG9kYXkoXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpLCB7IHllYXI6IDEsIG1vbnRoOiAxLCBkYXk6IDEgfSlcIlxuICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAnbW9udGgnXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1tb250aHNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiKG1vbnRoLCBpbmRleCkgaW4gbW9udGhOYW1lc1wiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldE1vbnRoQ2xhc3MoaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0TW9udGgoaW5kZXgpXCJcbiAgICAgICAgICAgICkge3sgbW9udGguc2hvcnQgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ3llYXInXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhbiB7eyBkZWNhZGVUb1N0cmluZyhjdXJyZW50VmFsdWUpIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXllYXJzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cInllYXIgaW4geWVhclJhbmdlXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0WWVhckNsYXNzKHllYXIpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0WWVhcih5ZWFyKVwiXG4gICAgICAgICAgICApIHt7IHllYXIgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjb3B5RGF0ZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgbW9kZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdkYXknIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgd2Vla2RheU5hbWVzLCBtb250aE5hbWVzIH0gPSBnZXRMb2NhbGVOYW1lcyh0aGlzLmxvY2FsZSlcbiAgICByZXR1cm4ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lcyxcbiAgICAgIGRhdGVSYW5nZTogW10sXG4gICAgICB5ZWFyUmFuZ2U6IFtdLFxuICAgICAgY3VycmVudFZhbHVlOiAoXG4gICAgICAgIHRoaXMubW9kZWxWYWx1ZSB8fFxuICAgICAgICAvLyBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgdXNlIGN1cnJlbnQgZGF0ZSBidXQgY2xlYXIgdGltZSBmaWVsZHM6XG4gICAgICAgIGNvcHlEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApLFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMubW9kZVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG8gfHwgbmV3IERhdGUoKVxuICAgICAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZERhdGU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuXG4gICAgbW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TW9udGhDbGFzcyhtb250aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOiAoXG4gICAgICAgICAgdGhpcy5tb2RlbFZhbHVlICYmXG4gICAgICAgICAgbW9udGggPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRNb250aCgpICYmXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzogbW9udGggPT09IHRoaXMuY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0WWVhckNsYXNzKHllYXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzogKFxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJiB5ZWFyID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgICApLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOiB5ZWFyID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudFZhbHVlLCBvdmVycmlkZXMpXG4gICAgfSxcblxuICAgIHN0ZXBEZWNhZGUoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiAxMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2V0TW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH0sXG5cbiAgICBzdGVwTW9udGgoc3RlcCkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgeWVhciwgbW9udGggfSA9IHRoaXMuZ2V0WWVhck1vbnRoKFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBzdGVwXG4gICAgICApXG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICBtb250aCxcbiAgICAgICAgZGF5OiBNYXRoLm1pbihcbiAgICAgICAgICB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXREYXRlKClcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc3RlcFllYXIoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdERhdGUoZGF0ZSwgc3RhdGUsIGNvcHkgPSBmYWxzZSkge1xuICAgICAgaWYgKHN0YXRlICE9PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICBkYXk6IGRhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RNb250aChtb250aCkge1xuICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgLy8gU2V0IGRheSB0byAxIHRvIGF2b2lkIHNlbGVjdGluZyBhIGRhdGUgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZVxuICAgICAgLy8gbmV3IG1vbnRoLCBlLmcuIEZlYiAzMSAtPiBNYXIgMy5cbiAgICAgIHRoaXMuc2V0RGF0ZSh7IG1vbnRoLCBkYXk6IDEgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0WWVhcih5ZWFyKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgIHRoaXMuc2V0RGF0ZSh7IHllYXIgfSlcbiAgICB9LFxuXG4gICAgZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICBpZiAobW9udGggPiAxMSkge1xuICAgICAgICB5ZWFyKytcbiAgICAgICAgbW9udGggPSAwXG4gICAgICB9IGVsc2UgaWYgKG1vbnRoIDwgMCkge1xuICAgICAgICB5ZWFyLS1cbiAgICAgICAgbW9udGggPSAxMVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgeWVhciwgbW9udGggfVxuICAgIH0sXG5cbiAgICBkYXRlVG9TdHJpbmcoZGF0ZSwgeyB5ZWFyLCBtb250aCwgZGF5IH0pIHtcbiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlLCB7XG4gICAgICAgIHllYXI6IHllYXIgJiYgJ251bWVyaWMnLFxuICAgICAgICBtb250aDogbW9udGggJiYgJ2xvbmcnLFxuICAgICAgICBkYXk6IGRheSAmJiAnbnVtZXJpYydcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGRlY2FkZVRvU3RyaW5nKGRhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKGRhdGUuZ2V0RnVsbFllYXIoKSlcbiAgICAgIHJldHVybiBgJHt5ZWFyfSDigJMgJHt5ZWFyICsgOX1gXG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKS5nZXREYXRlKClcbiAgICB9LFxuXG4gICAgZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcikge1xuICAgICAgY29uc3QgeWVhclN0ciA9IHllYXIudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuICtgJHt5ZWFyU3RyLnNsaWNlKDAsIC0xKX0wYFxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZSh7IGhvciwgdmVyLCBlbnRlciB9KSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRNb2RlLCBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGlmIChob3IgfHwgdmVyKSB7XG4gICAgICAgIHN3aXRjaCAoY3VycmVudE1vZGUpIHtcbiAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgICAgZGF5OiBjdXJyZW50VmFsdWUuZ2V0RGF0ZSgpICsgaG9yICsgdmVyICogN1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgICAgbW9udGg6IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgaG9yICsgdmVyICogNlxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgICB5ZWFyOiBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIGhvciArIHZlciAqIDVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgIHN3aXRjaCAoY3VycmVudE1vZGUpIHtcbiAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRlKGN1cnJlbnRWYWx1ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVEYXRlUmFuZ2UoKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IFtdXG4gICAgICB0aGlzLnllYXJSYW5nZSA9IFtdXG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB5ZWFyID0gY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIGNvbnN0IG1vbnRoID0gY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcilcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICB0aGlzLnllYXJSYW5nZS5wdXNoKHN0YXJ0WWVhciArIGkpXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyTW9udGhGaXJzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKVxuICAgICAgbGV0IGZpcnN0RGF5V2VlayA9IGN1cnJNb250aEZpcnN0RGF5LmdldERheSgpICsgMVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA9PT0gMCkge1xuICAgICAgICBmaXJzdERheVdlZWsgPSA3XG4gICAgICB9XG4gICAgICBjb25zdCBudW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aClcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPiAxKSB7XG4gICAgICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoIC0gMSlcbiAgICAgICAgY29uc3QgcHJldk1vbnRoTnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoXG4gICAgICAgICAgcHJldk1vbnRoLnllYXIsXG4gICAgICAgICAgcHJldk1vbnRoLm1vbnRoXG4gICAgICAgIClcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmaXJzdERheVdlZWs7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRheSA9IHByZXZNb250aE51bURheXMgLSBmaXJzdERheVdlZWsgKyBpICsgMVxuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShwcmV2TW9udGgueWVhciwgcHJldk1vbnRoLm1vbnRoLCBkYXkpXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBkYXksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBudW1EYXlzOyBpKyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKVxuICAgICAgICBjb25zdCBpc0RheSA9IGRhdGUgPT4gKFxuICAgICAgICAgIGRhdGUgJiZcbiAgICAgICAgICBkYXRlLmdldERhdGUoKSA9PT0gaSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxuICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGhcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBzdGF0ZSA9IGlzRGF5KHRoaXMubW9kZWxWYWx1ZSlcbiAgICAgICAgICA/ICdhY3RpdmUnXG4gICAgICAgICAgOiBpc0RheSh0b2RheSlcbiAgICAgICAgICAgID8gJ3RvZGF5J1xuICAgICAgICAgICAgOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKVxuICAgICAgICAgICAgICA/ICdkaXNhYmxlZCdcbiAgICAgICAgICAgICAgOiBpc0RheShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICAgICAgPyAnY3VycmVudCdcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBkYXRlLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRNb250aE5lZWQgPSA0MiAtIHRoaXMuZGF0ZVJhbmdlLmxlbmd0aFxuICAgICAgaWYgKG5leHRNb250aE5lZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoICsgMSlcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbmV4dE1vbnRoTmVlZDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5leHRNb250aC55ZWFyLCBuZXh0TW9udGgubW9udGgsIGkpXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGxvY2FsZU5hbWVzID0ge31cblxuLy8gQ2FsbGluZyBgdG9Mb2NhbGVTdHJpbmcoKWAgdGhpcyBtdWNoIGFwcGVhcnMgdG8gYmUgZXhwZW5zaXZlLCBzbyBjYWNoZSBpdDpcbmZ1bmN0aW9uIGdldExvY2FsZU5hbWVzKGxvY2FsZSkge1xuICBsZXQgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdXG4gIGlmICghbmFtZXMpIHtcbiAgICBjb25zdCB3ZWVrZGF5TmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgMCwgaSlcbiAgICAgIHdlZWtkYXlOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIGksIDApXG4gICAgICBtb250aE5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXSA9IHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jYWxlbmRhciB7XG4gIG1pbi13aWR0aDogMjQwcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5kaXRvLWNhbGVuZGFyLXBvcHVwIHtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgei1pbmRleDogMTAwMDtcbn1cblxuLmRpdG8tY2FsZW5kYXItYm9keSB7XG4gIHBhZGRpbmc6IDAgMC41ZW07XG5cbiAgc3BhbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA3KTtcbiAgICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6IGNhbGMoI3skaW5wdXQtaGVpZ2h0fSAtIDJweCk7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS10b2RheSB7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmU7XG4gICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSB7XG4gICAgJixcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZCxcbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1ncmF5IHtcbiAgICBjb2xvcjogIzk5OTk5OTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1tb250aHMsXG4uZGl0by1jYWxlbmRhci15ZWFycyB7XG4gIHNwYW4ge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA0KTtcbiAgICBtYXJnaW46IDAuNWVtIDA7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhbiB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLyA1KTtcbn1cblxuLmRpdG8tY2FsZW5kYXIgYSxcbi5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW4sXG4uZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbixcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW4ge1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlciBzcGFuIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gIGEge1xuICAgIHBhZGRpbmc6IDAgMC4yZW07XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyLW1vbnRocyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyOm5vdCg6aG92ZXIpIC5kaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCB7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG59XG5cbi5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzIHNwYW4ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlcixcbi5kaXRvLWNhbGVuZGFyLWZvb3RlciB7XG4gIEBleHRlbmQgJWlucHV0LWhlaWdodDtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmRpdG8tY2FsZW5kYXItZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogJGJvcmRlci1zdHlsZTtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGU7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgPiBzcGFuIHtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgcGFkZGluZzogMCAwLjVlbTtcbiAgfVxuXG4gIGEge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LFxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNSU7XG4gIG1pbi13aWR0aDogMmVtO1xuICBtYXgtd2lkdGg6IDNlbTtcblxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgZm9udC1zaXplOiAxLjI1ZW07XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLknO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCqyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLonO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCuyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICdOb3cnO1xuICB9XG59XG48L3N0eWxlPlxuIiwiZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50cyh0YXJnZXQsIGV2ZW50cykge1xuICBmb3IgKGNvbnN0IHR5cGUgaW4gZXZlbnRzKSB7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZSBpbiBldmVudHMpIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleShldmVudCkge1xuICByZXR1cm4ge1xuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICAxMzogJ2VudGVyJ1xuICB9W2V2ZW50LmtleUNvZGVdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KSB7XG4gIGNvbnN0IGtleSA9IGdldEtleShldmVudClcbiAgcmV0dXJuIHtcbiAgICBob3I6IHsgbGVmdDogLTEsIHJpZ2h0OiAxIH1ba2V5XSB8fCAwLFxuICAgIHZlcjogeyB1cDogLTEsIGRvd246IDEgfVtrZXldIHx8IDAsXG4gICAgZW50ZXI6IGtleSA9PT0gJ2VudGVyJ1xuICB9XG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyaWdnZXItY29udGFpbmVyXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1pZj1cImFsd2F5c1Nob3dcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2NsaWNrJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2ZvY3VzJyB8fCB0cmlnZ2VyID09PSAnYWx3YXlzJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgVHJhbnNpdGlvbig6bmFtZT1cInRyYW5zaXRpb25cIilcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1lbHNlXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpzaG93J10sXG5cbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2NsaWNrJyB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbScgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgekluZGV4OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIGtlZXBJblZpZXc6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhpZGVXaGVuQ2xpY2tPdXRzaWRlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhbHdheXNTaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY292ZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoaWRlRGVsYXk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIHBvcHVwUGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyaWdnZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXRyaWdnZXItZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBvcHVwQ2xhc3MoKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICBbYGRpdG8tcG9wdXAtJHtoeXBoZW5hdGUodGhpcy5wbGFjZW1lbnQpfWBdOiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXN0b21DbGFzcykge1xuICAgICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3NdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgcG9wdXBTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA/IGB6LWluZGV4OiAke3RoaXMuekluZGV4fWAgOiAnJ1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93IHx8IHRoaXMuYWx3YXlzU2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgICAgaWYgKHRvKSB7XG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRyaWdnZXIucXVlcnlTZWxlY3RvcignaW5wdXQsIHRleHRhcmVhJylcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0V2ZW50cyA9IGFkZEV2ZW50cyh0YXJnZXQsIHtcbiAgICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVXaGVuQ2xpY2tPdXRzaWRlICYmICF0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIC8vIFVzZSAnbW91c2V1cCcgaW5zdGVhZCBvZiAnY2xpY2snLCBzaW5jZSBjbGljayBhcHBlYXJzIHRvIGhhcHBlbiBhZnRlclxuICAgICAgLy8gdGhlIERPTSBpbnNpZGUgb2YgcG9wdXBzIGNvdWxkIGNoYW5nZSBpbiBhIHdheSBzbyB0aGF0IHRoZSBjaGVja1xuICAgICAgLy8gYHBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldClgIHdvdWxkIGZhaWw6XG4gICAgICB0aGlzLmNsb3NlRXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgJiZcbiAgICAgICAgICAgICFwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdHJpZ2dlci5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSB0aGlzLnNob3dcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5mb2N1c0V2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLmNsb3NlRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMubW91c2VMZWF2ZVRpbWVyID0gbnVsbFxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICAgIGlmICh0aGlzLnNob3cgJiYgcG9wdXAub2Zmc2V0V2lkdGggPT09IDApIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVBvc2l0aW9uKCksIDApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBpc1N0cmluZyh0aGlzLnRhcmdldClcbiAgICAgICAgPyB0aGlzLiRyZWZzW3RoaXMudGFyZ2V0XVxuICAgICAgICA6IHRoaXMudGFyZ2V0XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIC8vIEFjdHVhbGx5IHJlc2l6ZSB0aGUgcG9wdXAncyBmaXJzdCBjaGlsZCwgc28gdGhleSBjYW4gc2V0IHNpemUgbGltaXRzLlxuICAgICAgICBjb25zdCBlbCA9IHRhcmdldCA9PT0gcG9wdXAgPyB0cmlnZ2VyIDogcG9wdXAuZmlyc3RFbGVtZW50Q2hpbGRcbiAgICAgICAgaWYgKGVsKSB7XG4gICAgICAgICAgZWwuc3R5bGUud2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkud2lkdGhcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBib3VuZHMgPSAodGFyZ2V0IHx8IHRyaWdnZXIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCB0cmlnZ2VyTGVmdCA9IGJvdW5kcy5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICAgIGNvbnN0IHRyaWdnZXJUb3AgPSBib3VuZHMudG9wICsgd2luZG93LnNjcm9sbFlcbiAgICAgIGNvbnN0IHRyaWdnZXJXaWR0aCA9IGJvdW5kcy53aWR0aFxuICAgICAgY29uc3QgdHJpZ2dlckhlaWdodCA9IGJvdW5kcy5oZWlnaHRcbiAgICAgIGNvbnN0IHBvcHVwV2lkdGggPSBwb3B1cC5vZmZzZXRXaWR0aFxuICAgICAgY29uc3QgcG9wdXBIZWlnaHQgPSBwb3B1cC5vZmZzZXRIZWlnaHRcblxuICAgICAgbGV0IFtwYXJ0MSwgcGFydDJdID0gdGhpcy5wb3B1cFBsYWNlbWVudC5zcGxpdCgnLScpIHx8IFtdXG4gICAgICBpZiAodGhpcy5rZWVwSW5WaWV3KSB7XG4gICAgICAgIGNvbnN0IHdpbldpZHRoID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICAgY29uc3Qgd2luSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnQyID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgKyB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0ICsgdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGxlZnQgPSAwXG4gICAgICBsZXQgdG9wID0gMFxuICAgICAgc3dpdGNoIChwYXJ0MSkge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0ICs9IHRyaWdnZXJXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgc3dpdGNoIChwYXJ0Mikge1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoIC0gdHJpZ2dlcldpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHQgLSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvdmVyKSB7XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIHRvcCAtPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0ICE9PSB0cmlnZ2VyKSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJCb3VuZHMgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGxlZnQgKz0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyQm91bmRzLmxlZnRcbiAgICAgICAgdG9wICs9IHRyaWdnZXJUb3AgLSB0cmlnZ2VyQm91bmRzLnRvcFxuICAgICAgfVxuICAgICAgcG9wdXAuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgXG4gICAgICBwb3B1cC5zdHlsZS50b3AgPSBgJHt0b3B9cHhgXG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5zaG93UG9wdXBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Ib3ZlcihlbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlTGVhdmVUaW1lcilcbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGlkZURlbGF5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICB9LCB0aGlzLmhpZGVEZWxheSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcbkBpbXBvcnQgJy4uL3N0eWxlcy90cmFuc2l0aW9ucy9pbmRleC5zY3NzJztcblxuLmRpdG8tdHJpZ2dlci1jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5kaXRvLXRyaWdnZXItZGlzYWJsZWQge1xuICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICAqIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICY6Zm9jdXMge1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tcG9wdXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAwMDtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8taW5wdXRcbiAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gIGlucHV0KFxuICAgIDppZD1cImlkXCJcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgOnR5cGU9XCJ0eXBlXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOnJlYWRvbmx5PVwicmVhZG9ubHlcIlxuICAgIDphdXRvZm9jdXM9XCJhdXRvZm9jdXNcIlxuICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICA6YXV0b2NvbXBsZXRlPVwiYXV0b2NvbXBsZXRlXCJcbiAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgICB2LWJpbmQ9XCIkYXR0cnNcIlxuICApXG4gIHNsb3QobmFtZT1cImFmdGVyXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHlwZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICd0ZXh0JyB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdGl0bGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICByZWFkb25seTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGF1dG9mb2N1czogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGF1dG9jb21wbGV0ZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdvZmYnIH1cbiAgICAvKlxuICAgIGNsZWFyYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gICAgc3VmZml4SWNvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwcmVmaXhJY29uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gICAgKi9cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIGhvdmVyaW5nOiBmYWxzZSxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2l6ZSgpIHtcbiAgICAgIC8vIERldGVybWluZSBzaXplIGJhc2VkIG9uIG1pbiAmIG1heCBzZXR0aW5ncywgaWYgdGhleSdyZSBwcm92aWRlZC5cbiAgICAgIGNvbnN0IHsgc2l6ZSwgbWluLCBtYXggfSA9IHRoaXMuJGF0dHJzXG4gICAgICBjb25zdCBnZXRMZW5ndGggPSB2YWx1ZSA9PiAodmFsdWUgIT0gbnVsbCA/IGAke3ZhbHVlfWAubGVuZ3RoIDogMClcbiAgICAgIHJldHVybiBzaXplIHx8IGdldExlbmd0aChtaW4pIHx8IGdldExlbmd0aChtYXgpIHx8IHVuZGVmaW5lZFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShjdXJyZW50VmFsdWUpIHtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IHRoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8taW5wdXQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICBAZXh0ZW5kICVpbnB1dDtcblxuICBpbnB1dCB7XG4gICAgLy8gSW5oZXJpdCBhbGwgc3R5bGluZyBmcm9tIC5kaXRvLWlucHV0XG4gICAgYWxsOiBpbmhlcml0O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXI6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICBJbnB1dEZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgcmVhZG9ubHlcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgKVxuICAvLyBpY29uKHR5cGU9XCJjYWxlbmRhclwiIDpjb2xvcj1cImljb25Db2xvclwiKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgQ2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IENhbGVuZGFyIGZyb20gJy4vQ2FsZW5kYXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIENhbGVuZGFyLCBJbnB1dEZpZWxkIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2ZvY3VzJywgJ2JsdXInXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkYXRlRm9ybWF0OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gZGVmYXVsdEZvcm1hdHMuZGF0ZSB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB7XG4gICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICBkYXRlOiB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICAgICAgdGltZTogZmFsc2VcbiAgICAgICAgfSkgfHwgJydcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShjdXJyZW50VmFsdWUpIHtcbiAgICAgIGlmICgrY3VycmVudFZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICAgIGlmICghdG8gJiYgdGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgICAgLy8gVE9ETzogVGhpcyBzZWVtcyB0byBjb250cmFkaWN0IHRoZSBgY3VycmVudFZhbHVlKClgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgLy8gICAgICAgSXMgdGhpcyBuZWVkZWQgYXQgYWxsP1xuICAgICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy4kcmVmcy5jYWxlbmRhcj8ubmF2aWdhdGUoZ2V0S2V5TmF2aWdhdGlvbihldmVudCkpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXBpY2tlciB7XG4gIG1pbi13aWR0aDogMTBlbTtcblxuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAge1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG48L3N0eWxlPlxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbikge1xuICBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoXG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBzZXRUaW1lb3V0KGFyZ3VtZW50c1swXSwgMTApXG4gICAgfVxuICApXG4gIGlmIChkdXJhdGlvbiA8PSAwKSB7XG4gICAgZWxlbWVudC5zY3JvbGxUb3AgPSB0b1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0byAtIGVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgY29uc3QgcGVyVGljayA9IGRpZmZlcmVuY2UgLyBkdXJhdGlvbiAqIDEwXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gZWxlbWVudC5zY3JvbGxUb3AgKyBwZXJUaWNrXG4gICAgICBpZiAoZWxlbWVudC5zY3JvbGxUb3AgPT09IHRvKSByZXR1cm5cbiAgICAgIHNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbiAtIDEwKVxuICAgIH0pXG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZmllbGQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKGZpZWxkLmNyZWF0ZVRleHRSYW5nZSkge1xuICAgIGNvbnN0IHJhbmdlID0gZmllbGQuY3JlYXRlVGV4dFJhbmdlKClcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgc3RhcnQpXG4gICAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgZW5kKVxuICAgIHJhbmdlLnNlbGVjdCgpXG4gICAgZmllbGQuZm9jdXMoKVxuICB9IGVsc2UgaWYgKGZpZWxkLnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgZmllbGQuZm9jdXMoKVxuICAgIGZpZWxkLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpXG4gIH0gZWxzZSBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBmaWVsZCkge1xuICAgIGZpZWxkLnNlbGVjdGlvblN0YXJ0ID0gc3RhcnRcbiAgICBmaWVsZC5zZWxlY3Rpb25FbmQgPSBlbmRcbiAgICBmaWVsZC5mb2N1cygpXG4gIH1cbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVHJpZ2dlci5kaXRvLXRpbWUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIElucHV0RmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICByZWFkb25seVxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICAgICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICApXG4gICAgLy8tIGljb24odHlwZT1cInRpbWVcIlxuICAgIC8vLSA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gICAgLy8tIClcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgICAgcmVmPVwiaG91clwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDBcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUoXG4gICAgICAgICAgcmVmPVwibWludXRlXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkTWludXRlKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwibWludXRlID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChcbiAgICAgICAgICByZWY9XCJzZWNvbmRcIlxuICAgICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAyXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWNvbmQgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCB7IGNvcHlEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IHNjcm9sbFRvIH0gZnJvbSAnLi4vdXRpbHMvc2Nyb2xsLmpzJ1xuaW1wb3J0IHsgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgSW5wdXRGaWVsZCB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICd1cGRhdGU6c2hvdycsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgZGlzYWJsZWRIb3VyOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkTWludXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkU2Vjb25kOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBzZWxlY3Rpb246IDAsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWVcbiAgICAgICAgPyBgJHtcbiAgICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLmhvdXIpXG4gICAgICAgICAgfToke1xuICAgICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMubWludXRlKVxuICAgICAgICAgIH06JHtcbiAgICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLnNlY29uZClcbiAgICAgICAgICB9YFxuICAgICAgICA6ICcnXG4gICAgfSxcblxuICAgIGN1cnJlbnREYXRlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgfHxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IERhdGUoKSBvYmplY3Qgd2l0aCB0aGUgdGltZSBzZXQgdG8gMCwgdG8gYmUgdXNlZCB3aGVuXG4gICAgICAgIC8vIGZpcnN0IHNldHRpbmcgYW55IG9mIHRoZSB0aW1lcywgZm9yIG1lYW5pbmdmdWwgZGF0ZXMgaW4gY2FzZSB0aGVcbiAgICAgICAgLy8gb2JqZWN0IGlzIHNoYXJlZCB3aXRoIGEgRGF0ZVBpY2tlciwgZS5nLiB0aHJvdWdoIERhdGVUaW1lUGlja2VyLlxuICAgICAgICBjb3B5RGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBob3VyOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldEhvdXJzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChob3VyKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IGhvdXIgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWludXRlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldE1pbnV0ZXMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KG1pbnV0ZSkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBtaW51dGUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Vjb25kOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldFNlY29uZHMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KHNlY29uZCkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBzZWNvbmQgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGRhdGUpXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6ICd1cGRhdGVTZWxlY3Rpb24nLFxuXG4gICAgc2VsZWN0aW9uOiAndXBkYXRlU2VsZWN0aW9uJyxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKClcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoMClcbiAgICAgIH1cbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgICAgaWYgKCF0byAmJiB0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsZWZ0UGFkKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKCcwJyArIHZhbHVlKS5zbGljZSgtMilcbiAgICB9LFxuXG4gICAgc2V0VGltZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gY29weURhdGUodGhpcy5jdXJyZW50RGF0ZSwge1xuICAgICAgICAuLi5vdmVycmlkZXMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVTZWxlY3Rpb24oZm9yY2UgPSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMuc2hvd1BvcHVwIHx8IGZvcmNlKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gMyAqIHRoaXMuc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbih0aGlzLiRyZWZzLmlucHV0LCBzdGFydCwgc3RhcnQgKyAyKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Nyb2xsQWxsKGR1cmF0aW9uID0gMTAwKSB7XG4gICAgICBjb25zdCBzY3JvbGwgPSAocmVmLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRyZWZzW3JlZl1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIC8vIEZpcnN0IGFuZCBsYXN0IG9uZSBhZGQgMyB0aW1lcyB0aGUgbWFyZ2luXG4gICAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IHRhcmdldC5zY3JvbGxIZWlnaHQgLyAodGFyZ2V0LmNoaWxkcmVuLmxlbmd0aCArIDYpXG4gICAgICAgICAgc2Nyb2xsVG8odGFyZ2V0LCBNYXRoLnJvdW5kKHZhbHVlICogbGluZUhlaWdodCksIGR1cmF0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHNjcm9sbCgnaG91cicsIHRoaXMuaG91cilcbiAgICAgICAgc2Nyb2xsKCdtaW51dGUnLCB0aGlzLm1pbnV0ZSlcbiAgICAgICAgc2Nyb2xsKCdzZWNvbmQnLCB0aGlzLnNlY29uZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBbJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCddW3RoaXMuc2VsZWN0aW9uXVxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IHsgaG9yLCB2ZXIsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgICBpZiAoaG9yKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGlvbiArIGhvclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gdmFsdWUgPCAwID8gMiA6IHZhbHVlID4gMiA/IDAgOiB2YWx1ZVxuICAgICAgICB9IGVsc2UgaWYgKHZlcikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tzZWxlY3RlZF0gKyB2ZXJcbiAgICAgICAgICBjb25zdCB7IGxlbmd0aCB9ID0gdGhpcy4kcmVmc1tzZWxlY3RlZF0uY2hpbGRyZW5cbiAgICAgICAgICB0aGlzW3NlbGVjdGVkXSA9XG4gICAgICAgICAgICB2YWx1ZSA8IDBcbiAgICAgICAgICAgICAgPyB2YWx1ZSArIGxlbmd0aFxuICAgICAgICAgICAgICA6IHZhbHVlID49IGxlbmd0aFxuICAgICAgICAgICAgICAgID8gdmFsdWUgLSBsZW5ndGhcbiAgICAgICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChob3IgfHwgdmVyIHx8IGVudGVyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odHJ1ZSlcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIG1heC13aWR0aDogMTYwcHg7XG4gIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbn1cblxuJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0OiAyNHB4O1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC5kaXRvLWljb24tdGltZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiA3cHg7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAgLmRpdG8tdGltZS1waWNrZXItcGFuZWwge1xuICBmbG9hdDogbGVmdDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItd2lkdGg6IDAgMXB4IDA7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogY2FsYygxMDAlIC8gMyArIDFweCk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgJjpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gIH1cblxuICB1bCB7XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDA7XG4gICAgLy8gSGlkZSBzY3JvbGxiYXI6XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgcGFkZGluZzogMCAxN3B4IDAgMDtcbiAgICBoZWlnaHQ6IDcgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG5cbiAgICAmID4gbGkge1xuICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgbGluZS1oZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG4gICAgICB9XG5cbiAgICAgICYuc2VsZWN0ZWQsXG4gICAgICAmLnNlbGVjdGVkOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRhdGUtdGltZS1waWNrZXIocmVmPVwicGlja2VyXCIpXG4gIC5kaXRvLXBpY2tlcnMoOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiKVxuICAgIERhdGVQaWNrZXIoXG4gICAgICByZWY9XCJkYXRlXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd0RhdGVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlaG9sZGVyLCBsb2NhbGUsIGRhdGVGb3JtYXQsIGRpc2FibGVkIH1cIlxuICAgICAgQGZvY3VzPVwiZGF0ZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwiZGF0ZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgKVxuICAgIFRpbWVQaWNrZXIoXG4gICAgICByZWY9XCJ0aW1lXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd1RpbWVcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBkaXNhYmxlZCB9XCJcbiAgICAgIEBmb2N1cz1cInRpbWVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cInRpbWVGb2N1c2VkID0gZmFsc2VcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tICcuL0RhdGVQaWNrZXIudnVlJ1xuaW1wb3J0IFRpbWVQaWNrZXIgZnJvbSAnLi9UaW1lUGlja2VyLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIgfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd0RhdGU6IGZhbHNlLFxuICAgICAgc2hvd1RpbWU6IGZhbHNlLFxuICAgICAgZGF0ZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgdGltZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUZvY3VzZWQgfHwgdGhpcy50aW1lRm9jdXNlZFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGRhdGUpIHtcbiAgICAgIGlmICgrZGF0ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgZGF0ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgICAgaWYgKCF0byAmJiB0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuZGF0ZS5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmRhdGUuYmx1cigpXG4gICAgICB0aGlzLiRyZWZzLnRpbWUuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXRpbWUtcGlja2VyIHtcbiAgLmRpdG8tcGlja2VycyB7XG4gICAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgICBwYWRkaW5nOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICAuZGl0by1pbnB1dCB7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyOiAwO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWRhdGUtcGlja2VyIHtcbiAgICB3aWR0aDogNjAlO1xuICAgIG1pbi13aWR0aDogNi45ZW07XG5cbiAgICAuZGl0by1pbnB1dCB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXRpbWUtcGlja2VyIHtcbiAgICB3aWR0aDogNDAlO1xuICAgIG1pbi13aWR0aDogNS40ZW07XG5cbiAgICAuZGl0by1pbnB1dCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLy8gYHlhcm4gYnVpbGQ6aWNvbnNgIGNvbnZlcnRzIHRoZSBpY29uIFNWRyBmaWxlcyB0byBzaWxlbnQgY2xhc3NlcyBpbnNpZGVcbi8vIGBzcmMvc3R5bGVzL21peGlucy9faWNvbnMuc2Nzc2AsIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBhbGwgb3RoZXIgc2Fzc1xuLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4vLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSB0aGVtIGFzIG5vcm1hbCBDU1MgY2xhc3NlcywgY29udmVydCB0aGVtIGhlcmU6XG5AZWFjaCAkbmFtZSBpbiAkaWNvbnMge1xuICAuZGl0by1pY29uLSN7JG5hbWV9IHtcbiAgICBAZXh0ZW5kICVpY29uLSN7JG5hbWV9O1xuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWUvbm8tdGVtcGxhdGUtc2hhZG93IC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhZ2luYXRpb25cbiAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICB2LWlmPVwic2hvd1RvdGFsXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInRvdGFsID4gMFwiXG4gICAgKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1lbHNlXG4gICAgKSAwXG4gICAgfCAvIHt7IHRvdGFsIH19XG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1mb3I9XCJwYWdlIGluIHBhZ2VSYW5nZVwiXG4gICAgICA6Y2xhc3M9XCJnZXRQYWdlQ2xhc3MocGFnZSlcIlxuICAgICAgOmRpc2FibGVkPVwicGFnZS5kaXNhYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvbkNsaWNrUGFnZShwYWdlKVwiXG4gICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1pZj1cInBhZ2UudGV4dFwiXG4gICAgICApIHt7IHBhZ2UudGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOnBhZ2UnXSxcblxuICBwcm9wczoge1xuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIHBhZ2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxMCB9LFxuICAgIHNob3dUb3RhbDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlUmFuZ2U6IFtdLFxuICAgICAgc2hvd1ByZXY6IHRydWUsXG4gICAgICBzaG93TmV4dDogdHJ1ZSxcbiAgICAgIG51bVBhZ2VzOiAwLFxuICAgICAgY3VycmVudFBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpcnN0KCkge1xuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLmN1cnJlbnRQYWdlU2l6ZSArIDFcbiAgICB9LFxuXG4gICAgbGFzdCgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0ICsgdGhpcy5jdXJyZW50UGFnZVNpemUgLSAxLCB0aGlzLnRvdGFsKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHRvdGFsOiAndXBkYXRlUGFnZVJhbmdlJyxcbiAgICBzaG93UHJldjogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd05leHQ6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuXG4gICAgcGFnZShwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZShwYWdlU2l6ZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSBwYWdlU2l6ZVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZVNpemUoY3VycmVudFBhZ2VTaXplKSB7XG4gICAgICB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWwgLyBjdXJyZW50UGFnZVNpemUpXG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMubnVtUGFnZXNcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2UodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpwYWdlJywgdG8pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZVxuICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrUGFnZShwYWdlKSB7XG4gICAgICBpZiAocGFnZS5pbmRleCAmJiAhcGFnZS5kaXNhYmxlZCAmJiBwYWdlLmluZGV4ICE9PSB0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlLmluZGV4XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFBhZ2VDbGFzcyhwYWdlKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICAnZGl0by1zZWxlY3RlZCc6IHBhZ2UuYWN0aXZlXG4gICAgICB9XG4gICAgICBpZiAocGFnZS50eXBlKSB7XG4gICAgICAgIGNsYXNzZXNbYGRpdG8tYnV0dG9uLSR7cGFnZS50eXBlfWBdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgdXBkYXRlUGFnZVJhbmdlKCkge1xuICAgICAgY29uc3QgeyBzaG93UHJldiwgc2hvd05leHQsIHRvdGFsLCBjdXJyZW50UGFnZVNpemUsIGN1cnJlbnRQYWdlIH0gPSB0aGlzXG4gICAgICBjb25zdCBzaG93TGVuZ3RoID0gc2hvd1ByZXYgKyBzaG93TmV4dCArIDFcbiAgICAgIGNvbnN0IG51bVBhZ2VzID0gKHRoaXMubnVtUGFnZXMgPSBNYXRoLmNlaWwodG90YWwgLyBjdXJyZW50UGFnZVNpemUpKVxuXG4gICAgICBsZXQgc3RhcnQgPSAxXG4gICAgICBsZXQgZW5kID0gMVxuICAgICAgaWYgKG51bVBhZ2VzIDw9IHNob3dMZW5ndGgpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPD0gc2hvd1ByZXYgKyAxKSB7XG4gICAgICAgIGVuZCA9IHNob3dMZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gbnVtUGFnZXMgLSBzaG93TmV4dCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgICBzdGFydCA9IG51bVBhZ2VzIC0gc2hvd0xlbmd0aCArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gY3VycmVudFBhZ2UgLSBzaG93UHJldlxuICAgICAgICBlbmQgPSBjdXJyZW50UGFnZSArIHNob3dOZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2VSYW5nZSA9IFtdXG4gICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSAtIDEsXG4gICAgICAgIHR5cGU6ICdwcmV2JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlIDw9IDFcbiAgICAgIH0pXG4gICAgICBpZiAoc3RhcnQgPj0gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiAxLCB0ZXh0OiAxIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPiAyKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgYWN0aXZlOiBpID09PSBjdXJyZW50UGFnZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWluKG51bVBhZ2VzLCBjdXJyZW50UGFnZSArIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtbmV4dCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPD0gbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgKyAxLFxuICAgICAgICB0eXBlOiAnbmV4dCcsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA+PSBudW1QYWdlc1xuICAgICAgfSlcblxuICAgICAgdGhpcy5wYWdlUmFuZ2UgPSBwYWdlUmFuZ2VcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhZ2luYXRpb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgbWFyZ2luOiAwIDAuNWVtO1xuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICB9XG5cbiAgLmRpdG8tYnV0dG9uIHtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLCBjb2xvciAwcywgYmFja2dyb3VuZCAwcywgYm9yZGVyIDBzO1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgcGFkZGluZzogMCAwLjVlbTtcblxuICAgICYtcHJldixcbiAgICAmLW5leHQge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1hcnJvdztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLXByZXY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgfVxuXG4gICAgJi1lbGxpcHNpcy1wcmV2LFxuICAgICYtZWxsaXBzaXMtbmV4dCB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWVsbGlwc2lzO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWNoZXZyb25zO1xuICAgICAgfVxuXG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcblxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi1lbGxpcHNpcy1wcmV2OjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zd2l0Y2goXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKVxuICAuZGl0by1zd2l0Y2gtcGFuZVxuICAgIGlucHV0KFxuICAgICAgOmlkPVwiaWRcIlxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1iaW5kPVwiJGF0dHJzXCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICA6bmFtZT1cIm5hbWVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZSddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbHM6IHsgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkOiB0aGlzLm1vZGVsVmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgY29uc3QgeyBjaGVja2VkLCBkaXNhYmxlZCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2hlY2tlZCc6IGNoZWNrZWQsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKG1vZGVsVmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IG1vZGVsVmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY2hlY2tlZClcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY2hlY2tlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAvLyBVc2Ugd2hvbGUgbXVsdGlwbGVzIG9mIGByZW1gIGZvciBzaXplcyBhbmQgYHB4YCBtYXJnaW5zL3BhZGRpbmcgYWxvbmdcbiAgLy8gd2l0aCBgY2FsYygpYCB0byBlbmQgdXAgd2l0aCBldmVuIHBpeGVsIHNpemVzLiBgcmVtYCBpcyBuZWVkZWQgYmVjYXVzZSB3ZVxuICAvLyBjaGFuZ2UgYGZvbnQtc2l6ZWAgaW5zaWRlIGAuZGl0by1zd2l0Y2gtYnV0dG9uYFxuICAtLXN3aXRjaC13aWR0aDogNHJlbTtcbiAgLS1zd2l0Y2gtaGVpZ2h0OiAycmVtO1xuICAtLXN3aXRjaC1tYXJnaW46IDJweDtcbiAgLS1zd2l0Y2gtcGFkZGluZzogM3B4O1xuICAtLXN3aXRjaC1zcGVlZDogMzAwbXM7XG4gIC0tbGFiZWwtbWFyZ2luOiAwLjVlbTtcbiAgLS13aWR0aDogY2FsYyh2YXIoLS1zd2l0Y2gtd2lkdGgpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1oZWlnaHQ6IGNhbGModmFyKC0tc3dpdGNoLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpO1xuICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKTtcblxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KTtcbiAgLy8gVG8gbWFrZSBpbmxpbmUgbGFiZWxzIGFwcGVhciBvbiBjb25zaXN0ZW50IGJhc2VsaW5lOlxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAuZGl0by1zd2l0Y2gtcGFuZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiB2YXIoLS13aWR0aCk7XG4gICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUsXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjNzLCBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLy8gU2V0IGZvbnQtc2l6ZSB0byBoZWlnaHQsIHNvIHdlIGNhbiB1c2Ugd2lkdGgvaGVpZ2h0ID0gMWVtIGZvciBjaXJjbGU6XG4gICAgZm9udC1zaXplOiBjYWxjKHZhcigtLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLXBhZGRpbmcpKTtcbiAgICB0b3A6IHZhcigtLXN3aXRjaC1wYWRkaW5nKTtcbiAgICBsZWZ0OiB2YXIoLS1zd2l0Y2gtcGFkZGluZyk7XG4gICAgd2lkdGg6IDFlbTtcbiAgICBoZWlnaHQ6IDFlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwLjVlbTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tc3dpdGNoLXNwZWVkKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICB9XG5cbiAgJi5kaXRvLWNoZWNrZWQge1xuICAgIGlucHV0IHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgodmFyKC0tb2Zmc2V0KSk7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgICByaWdodDogdW5zZXQ7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWRpc2FibGVkIHtcbiAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWQ7XG4gIH1cblxuICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKSB7XG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgeyBoIGFzIGNyZWF0ZUVsZW1lbnQsIFRyYW5zaXRpb24gfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBUcmFuc2l0aW9uSGVpZ2h0KHsgZW5hYmxlZCB9LCB7IHNsb3RzIH0pIHtcbiAgcmV0dXJuIGVuYWJsZWRcbiAgICA/IGNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgcHJvcHMsIHNsb3RzKVxuICAgIDogc2xvdHMuZGVmYXVsdCgpXG59XG5cblRyYW5zaXRpb25IZWlnaHQucHJvcHMgPSB7XG4gIGVuYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25IZWlnaHRcblxuY29uc3Qgc2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgcHJvcHMgPSB7XG4gIG5hbWU6ICdoZWlnaHQnLFxuXG4gIG9uQWZ0ZXJFbnRlcihlbGVtZW50KSB7XG4gICAgLy8gQSB0aW1lb3V0IGJlZm9yZSBzZXR0aW5nIHN0eWxlIGlzIG9ubHkgcmVhbGx5IG5lZWRlZCBhZnRlciBjYWxscyB0b1xuICAgIC8vIGBmb3JjZVJlcGFpbnQoKWAsIGJ1dCB1c2luZyBvbmUgaGVyZSB0b28gcHJlc2VydmVzIGV4ZWN1dGlvbiBzZXF1ZW5jZSBzb1xuICAgIC8vIHRoYXQgdGhlIGNhbGwgZnJvbSBgZW50ZXIoKWAgY2FuIG5ldmVyIG91dHJ1biB0aGUgb25lIGZyb20gYGFmdGVyRW50ZXIoKWBcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAnYXV0bycgfSkpXG4gIH0sXG5cbiAgb25FbnRlcihlbGVtZW50KSB7XG4gICAgY29uc3QgeyB3aWR0aCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgIGhlaWdodDogJ2F1dG8nXG4gICAgfSlcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgcG9zaXRpb246IG51bGwsXG4gICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICB9LFxuXG4gIG9uTGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kZHVyYXRpb246IDAuMTVzO1xuXG4uaGVpZ2h0LWVudGVyLWFjdGl2ZSxcbi5oZWlnaHQtbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNpdGlvbjogaGVpZ2h0ICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5oZWlnaHQtZW50ZXItYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBzbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xufVxuXG4uaGVpZ2h0LWxlYXZlLWFjdGl2ZSB7XG4gIGFuaW1hdGlvbjogc2xpZGUtbGVhdmUgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbn1cblxuLmhlaWdodC1lbnRlci1mcm9tLFxuLmhlaWdodC1sZWF2ZS10byB7XG4gIGhlaWdodDogMDtcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBkZWZpbmVDb21wb25lbnQsIHJlZiwgd2F0Y2gsIG9uU2NvcGVEaXNwb3NlLCBoIH0gZnJvbSAndnVlLWRlbWknO1xuaW1wb3J0IHsgY3JlYXRlRm9jdXNUcmFwIH0gZnJvbSAnZm9jdXMtdHJhcCc7XG5pbXBvcnQgeyB1bnJlZkVsZW1lbnQgfSBmcm9tICdAdnVldXNlL2NvcmUnO1xuXG5jb25zdCBVc2VGb2N1c1RyYXAgPSAvKiBAX19QVVJFX18gKi8gLyogI19fUFVSRV9fICovIGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IFwiVXNlRm9jdXNUcmFwXCIsXG4gIHByb3BzOiBbXCJhc1wiLCBcIm9wdGlvbnNcIl0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcbiAgICBsZXQgdHJhcDtcbiAgICBjb25zdCB0YXJnZXQgPSByZWYoKTtcbiAgICBjb25zdCBhY3RpdmF0ZSA9ICgpID0+IHRyYXAgJiYgdHJhcC5hY3RpdmF0ZSgpO1xuICAgIGNvbnN0IGRlYWN0aXZhdGUgPSAoKSA9PiB0cmFwICYmIHRyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHdhdGNoKFxuICAgICAgKCkgPT4gdW5yZWZFbGVtZW50KHRhcmdldCksXG4gICAgICAoZWwpID0+IHtcbiAgICAgICAgaWYgKCFlbClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRyYXAgPSBjcmVhdGVGb2N1c1RyYXAoZWwsIHByb3BzLm9wdGlvbnMgfHwge30pO1xuICAgICAgICBhY3RpdmF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHsgZmx1c2g6IFwicG9zdFwiIH1cbiAgICApO1xuICAgIG9uU2NvcGVEaXNwb3NlKCgpID0+IGRlYWN0aXZhdGUoKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzbG90cy5kZWZhdWx0KVxuICAgICAgICByZXR1cm4gaChwcm9wcy5hcyB8fCBcImRpdlwiLCB7IHJlZjogdGFyZ2V0IH0sIHNsb3RzLmRlZmF1bHQoKSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IFVzZUZvY3VzVHJhcCB9O1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRpYWxvZyhcbiAgcmVmPVwiZGlhbG9nXCJcbiAgcm9sZT1cImRpYWxvZ1wiXG4gIGFyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJcbiAgYXJpYS1tb2RhbD1cInRydWVcIlxuICA6c3R5bGU9XCJ7ICctLXdpZHRoJzogYCR7c2V0dGluZ3Mud2lkdGh9cHhgIH1cIlxuICBAbW91c2V1cD1cIm9uTW91c2VVcFwiXG4pXG4gIFVzZUZvY3VzVHJhcC5kaXRvLWRpYWxvZ19fZm9jdXMtdHJhcChcbiAgICA6b3B0aW9ucz1cInsgaW1tZWRpYXRlOiB0cnVlLCBmYWxsYmFja0ZvY3VzOiAoKSA9PiAkcmVmcy5kaWFsb2cgfVwiXG4gIClcbiAgICBmb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgICAgIEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiXG4gICAgKVxuICAgICAgRGl0b1NjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgVXNlRm9jdXNUcmFwIH0gZnJvbSAnQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlRm9jdXNUcmFwL2NvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRGlhbG9nJywge1xuICBjb21wb25lbnRzOiB7IFVzZUZvY3VzVHJhcCB9LFxuICBlbWl0czogWydyZW1vdmUnXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzZXR0aW5nczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgd2lkdGg6IDQ4MCxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBNYWtlIHN1cmUgZGlhbG9nIGRhdGEgY29udGFpbnMgYWxsIHRoZSBleHBlY3RlZCBrZXlzXG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IGNsb25lKHRoaXMuZGF0YSlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBkaWFsb2dEYXRhKSkge1xuICAgICAgICBkaWFsb2dEYXRhW2tleV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB3aW5kb3dFdmVudHM6IG51bGwsXG4gICAgICBkaWFsb2dEYXRhXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYnV0dG9uU2NoZW1hcykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoKHRoaXMuaGFzQ2FuY2VsIHx8ICF0aGlzLmhhc0J1dHRvbnMpICYmIGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgncmVtb3ZlJylcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgdGhpcy5yZXNvbHZlKG51bGwpXG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgdGhpcy5jYW5jZWwoKVxuICAgIH0sXG5cbiAgICBvbk1vdXNlVXAoKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5jbGlja1RvQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGlhbG9nIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBpbnNldDogMDtcbiAgei1pbmRleDogMjAwMDtcbiAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC8vIFByZXZlbnQgc2Nyb2xsaW5nIG9mIHRoZSBwYWdlIGJlaGluZCB0aGUgZGlhbG9nOlxuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG5cbiAgJl9fZm9jdXMtdHJhcCB7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgfVxuXG4gIC8vIFRPRE86IGAmX19pbm5lcmBcbiAgZm9ybSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLCA0ODBweCk7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICBib3gtc2hhZG93OiAwIDIwcHggNjBweCAtMnB4IHJnYmEoMjcsIDMzLCA1OCwgMC40KTtcbiAgfVxufVxuXG4uZGl0by1kaWFsb2ctZW50ZXItYWN0aXZlLFxuLmRpdG8tZGlhbG9nLWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXM7XG5cbiAgZm9ybSB7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMjVzO1xuICB9XG59XG5cbi5kaXRvLWRpYWxvZy1lbnRlci1mcm9tLFxuLmRpdG8tZGlhbG9nLWxlYXZlLXRvIHtcbiAgb3BhY2l0eTogMDtcblxuICBmb3JtIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbUhhbmRsZXJzOiBbXVxuICAgIH1cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbW92ZSB9IG9mIHRoaXMuZG9tSGFuZGxlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICAgIHRoaXMuZG9tSGFuZGxlcnMgPSBbXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb21PbihlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRFdmVudHMoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlzT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgW3R5cGVdOiBoYW5kbGVyIH1cbiAgICAgIClcbiAgICAgIHRoaXMuZG9tSGFuZGxlcnMucHVzaChyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcm9vdFxuICBWdWVOb3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgKVxuICBUcmFuc2l0aW9uR3JvdXAobmFtZT1cImRpdG8tZGlhbG9nXCIpXG4gICAgRGl0b0RpYWxvZyhcbiAgICAgIHYtZm9yPVwiKGRpYWxvZywga2V5KSBpbiBkaWFsb2dzXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOmNvbXBvbmVudHM9XCJkaWFsb2cuY29tcG9uZW50c1wiXG4gICAgICA6YnV0dG9ucz1cImRpYWxvZy5idXR0b25zXCJcbiAgICAgIDpwcm9taXNlPVwiZGlhbG9nLnByb21pc2VcIlxuICAgICAgOmRhdGE9XCJkaWFsb2cuZGF0YVwiXG4gICAgICA6c2V0dGluZ3M9XCJkaWFsb2cuc2V0dGluZ3NcIlxuICAgICAgQHJlbW92ZT1cInJlbW92ZURpYWxvZyhrZXkpXCJcbiAgICApXG4gIERpdG9NZW51XG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIERpdG9IZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgICBEaXRvQWNjb3VudChcbiAgICAgICAgdi1pZj1cInVzZXJcIlxuICAgICAgKVxuICAgICAgYS5kaXRvLWxvZ2luKFxuICAgICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICAgIClcbiAgICAgICAgc3BhbiBMb2dpblxuICAgIFJvdXRlclZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBhc0FycmF5LCBtYXBDb25jdXJyZW50bHksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERpdG9EaWFsb2cgZnJvbSAnLi9EaXRvRGlhbG9nLnZ1ZSdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQge1xuICBwcm9jZXNzVmlldyxcbiAgcmVzb2x2ZVNjaGVtYXMsXG4gIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUm9vdCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IERpdG9EaWFsb2cgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgcmVtb3ZlUm91dGVzOiBudWxsLFxuICAgICAgZGlhbG9nczoge30sXG4gICAgICBhbGxvd0xvZ2luOiBmYWxzZSxcbiAgICAgIGxvYWRpbmdDb3VudDogMFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5ub3RpZmljYXRpb25zXG4gICAgfSxcblxuICAgIGlzTG9hZGluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdDb3VudCA+IDBcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmFwcFN0YXRlLnRpdGxlID0gZG9jdW1lbnQudGl0bGUgfHwgJ0RpdG8uanMgQWRtaW4nXG4gICAgLy8gV2l0aCBob3QtcmVsb2FkaW5nLCBpdCBsb29rcyBsaWtlIGRlc3Ryb3llZCBob29rcyBhcmVuJ3QgYWx3YXlzIGNhbGxlZFxuICAgIC8vIGZvciByb3V0ZSBjb21wb25lbnRzIHNvIHJlc2V0IHRoZSBhcnJheSBvZiByZWdpc3RlcmVkIGNvbXBvbmVudHMgaW5zdGVhZC5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cyA9IFtdXG4gIH0sXG5cbiAgYXN5bmMgbW91bnRlZCgpIHtcbiAgICAvLyBDbGVhciB0aGUgbGFiZWwgbWFya2VkIGFzIGFjdGl2ZSBvbiBhbGwgbW91c2UgYW5kIGtleWJvYXJkIGV2ZW50cywgZXhjZXB0XG4gICAgLy8gdGhlIG9uZXMgdGhhdCBEaXRvTGFiZWwgaXRzZWxmIGludGVyY2VwdHMuXG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY2xpY2s6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCFldmVudC50YXJnZXQuY2xvc2VzdCgnLmRpdG8tbGFiZWwnKSkge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGtleXVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSAnVGFiJykge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSBmYWxzZVxuICAgICAgaWYgKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICB9XG4gICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBub3RpZnkoeyB0eXBlID0gJ2luZm8nLCB0aXRsZSwgdGV4dCB9ID0ge30pIHtcbiAgICAgIHRpdGxlIHx8PSAoXG4gICAgICAgIHtcbiAgICAgICAgICB3YXJuaW5nOiAnV2FybmluZycsXG4gICAgICAgICAgZXJyb3I6ICdFcnJvcicsXG4gICAgICAgICAgaW5mbzogJ0luZm9ybWF0aW9uJyxcbiAgICAgICAgICBzdWNjZXNzOiAnU3VjY2VzcydcbiAgICAgICAgfVt0eXBlXSB8fFxuICAgICAgICAnTm90aWZpY2F0aW9uJ1xuICAgICAgKVxuICAgICAgdGV4dCA9IGA8cD4ke1xuICAgICAgICBhc0FycmF5KHRleHQpLmpvaW4oJzwvcD4gPHA+JylcbiAgICAgIH08L3A+YC5yZXBsYWNlKC9cXG58XFxyXFxufFxcci9nLCAnPGJyPicpXG4gICAgICBjb25zdCBsb2cgPSAoXG4gICAgICAgIHtcbiAgICAgICAgICB3YXJuaW5nOiAnd2FybicsXG4gICAgICAgICAgZXJyb3I6ICdlcnJvcicsXG4gICAgICAgICAgaW5mbzogJ2xvZycsXG4gICAgICAgICAgc3VjY2VzczogJ2xvZydcbiAgICAgICAgfVt0eXBlXSB8fFxuICAgICAgICAnZXJyb3InXG4gICAgICApXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZVtsb2ddKHN0cmlwVGFncyh0ZXh0KSlcbiAgICAgIGNvbnN0IHsgbm90aWZpY2F0aW9ucyA9IHRydWUgfSA9IHRoaXMuYXBpXG4gICAgICBpZiAobm90aWZpY2F0aW9ucykge1xuICAgICAgICAvLyBDYWxjdWxhdGUgZGlzcGxheS1kdXJhdGlvbiBmb3IgdGhlIG5vdGlmaWNhdGlvbiBiYXNlZCBvbiBpdHMgY29udGVudFxuICAgICAgICAvLyBhbmQgdGhlIHNldHRpbmcgb2YgdGhlIGBkdXJhdGlvbkZhY3RvcmAgY29uZmlndXJhdGlvbi4gSXQgZGVmaW5lcyB0aGVcbiAgICAgICAgLy8gYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBtdWx0aXBsaWVkIHdpdGggdGhlIGFtb3VudCBvZiBjaGFyYWN0ZXJzXG4gICAgICAgIC8vIGRpc3BsYXllZCBpbiB0aGUgbm90aWZpY2F0aW9uLCBwbHVzIDQwICg0MCArIHRpdGxlICsgbWVzc2FnZSk6XG4gICAgICAgIGNvbnN0IHsgZHVyYXRpb25GYWN0b3IgPSAyMCB9ID0gbm90aWZpY2F0aW9uc1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9ICg0MCArIHRleHQubGVuZ3RoICsgdGl0bGUubGVuZ3RoKSAqIGR1cmF0aW9uRmFjdG9yXG4gICAgICAgIHRoaXMuJG5vdGlmeSh7IHR5cGUsIHRpdGxlLCB0ZXh0LCBkdXJhdGlvbiB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGVzdHJveUFsbCgpXG4gICAgfSxcblxuICAgIHJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMubG9hZGluZ0NvdW50ICs9IGlzTG9hZGluZyA/IDEgOiAtMVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHsgY29tcG9uZW50cywgYnV0dG9ucywgZGF0YSwgc2V0dGluZ3MgfSkge1xuICAgICAgLy8gU2hvd3MgYSBkaXRvLWRpYWxvZyBjb21wb25lbnQgYW5kIHdyYXBzIGl0IGluIGEgcHJvbWlzZSBzbyB0aGF0IHRoZVxuICAgICAgLy8gYnV0dG9ucyBpbiB0aGUgZGlhbG9nIGNhbiB1c2UgYGRpYWxvZy5yZXNvbHZlKClgIGFuZCBgZGlhbG9nLnJlamVjdCgpYFxuICAgICAgLy8gdG8gY2xvc2UgdGhlIG1vZGFsIGRpYWxvZyBhbmQgcmVzb2x2ZSAvIHJlamVjdCB0aGUgcHJvbWlzZSBhdCBvbmNlLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxuICAgICAgICBhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgLy8gUHJvY2VzcyBjb21wb25lbnRzIHRvIHJlc29sdmUgYXN5bmMgc2NoZW1hcy5cbiAgICAgICAgICBjb25zdCByb3V0ZXMgPSBbXVxuICAgICAgICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKHRoaXMuYXBpLCB7IGNvbXBvbmVudHMgfSwgcm91dGVzLCAwKVxuICAgICAgICAgIGlmIChyb3V0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnRGlhbG9ncyBkbyBub3Qgc3VwcG9ydCBjb21wb25lbnRzIHRoYXQgcHJvZHVjZSByb3V0ZXMnXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGtleSA9IGBkaWFsb2ctJHsrK2RpYWxvZ0lkfWBcbiAgICAgICAgICB0aGlzLmRpYWxvZ3Nba2V5XSA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgICBidXR0b25zLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgICAgcHJvbWlzZTogeyByZXNvbHZlLCByZWplY3QgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICByZW1vdmVEaWFsb2coa2V5KSB7XG4gICAgICBkZWxldGUgdGhpcy5kaWFsb2dzW2tleV1cbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge1xuICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJ1xuICAgICAgICAgICAgLy8gTk9URTogVGhlIGNsaWNrIGV2ZW50IGlzIGFkZGVkIGluIERpdG9EaWFsb2cuYnV0dG9uU2NoZW1hcygpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGxvZ2luOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgIHRleHQ6ICdMb2dpbidcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAobG9naW5EYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5sb2dpbixcbiAgICAgICAgICAgIGRhdGE6IGxvZ2luRGF0YSxcbiAgICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAocmVkaXJlY3RBZnRlckxvZ2luKSB7XG4gICAgICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKHJlZGlyZWN0QWZ0ZXJMb2dpbilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRVc2VyKHJlc3BvbnNlLmRhdGEudXNlcilcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gZXJyLnJlc3BvbnNlPy5kYXRhPy5lcnJvclxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICAgIHRleHQ6IGVycm9yIHx8IGVyclxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5yZXNwb25zZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2dpbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbmF2aWdhdGVIb21lKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUoJy8nKVxuICAgIH0sXG5cbiAgICBhc3luYyBsb2dvdXQoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5sb2dvdXQsXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuc2V0VXNlcihudWxsKVxuICAgICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFVzZXIoKSB7XG4gICAgICBsZXQgdXNlciA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLnNlc3Npb24sXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgdXNlciA9IHJlc3BvbnNlLmRhdGEudXNlciB8fCBudWxsXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgdGV4dDogZXJyXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICB0aGlzLnNldFVzZXIodXNlcilcbiAgICAgIHJldHVybiB1c2VyXG4gICAgfSxcblxuICAgIHNldFVzZXIodXNlcikge1xuICAgICAgdGhpcy5hcHBTdGF0ZS51c2VyID0gKFxuICAgICAgICB1c2VyICYmXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih1c2VyLCBEaXRvVXNlci5wcm90b3R5cGUpXG4gICAgICApXG4gICAgICAvLyBDbGVhciByZXNvbHZlZCB2aWV3cyB3aGVuIHVzZXIgaXMgbG9nZ2VkIG91dC5cbiAgICAgIGlmICghdXNlcikge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSB7fVxuICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVuc3VyZVVzZXIoKSB7XG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmZldGNoVXNlcigpKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZVZpZXdzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXModGhpcy51bnJlc29sdmVkVmlld3MpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIWVycm9yLnJlcXVlc3QpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICAgIC8vIENvbGxlY3QgYWxsIHJvdXRlcyBmcm9tIHRoZSByb290IHNjaGVtYSBjb21wb25lbnRzXG4gICAgICBjb25zdCByb3V0ZXMgPSBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb2x2ZWRWaWV3cyksXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4gcHJvY2Vzc1ZpZXcoRGl0b1ZpZXcsIHRoaXMuYXBpLCBzY2hlbWEsIG5hbWUpXG4gICAgICApXG4gICAgICAvLyBOb3cgdGhhdCB0aGUgcm91dGVzIGFyZSBsb2FkZWQsIHJlcGxhY2UgYWxsIGV4aXN0aW5nIHJvdXRlcyB3aXRoIHRoZVxuICAgICAgLy8gbmV3IHJvdXRlcywgYW5kIHJlc3RvcmUgdGhlIGN1cnJlbnQgcGF0aC5cbiAgICAgIGNvbnN0IHsgZnVsbFBhdGggfSA9IHRoaXMuJHJvdXRlXG4gICAgICB0aGlzLnJlbW92ZVJvdXRlcz8uKClcbiAgICAgIHRoaXMucmVtb3ZlUm91dGVzID0gYWRkUm91dGVzKHRoaXMuJHJvdXRlciwgW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3Jvb3QnLFxuICAgICAgICAgIHBhdGg6ICcvJyxcbiAgICAgICAgICBjb21wb25lbnRzOiB7fVxuICAgICAgICB9LFxuICAgICAgICAuLi5yb3V0ZXNcbiAgICAgIF0pXG4gICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZShmdWxsUGF0aClcbiAgICB9XG4gIH1cbn0pXG5cbmxldCBkaWFsb2dJZCA9IDBcblxuZnVuY3Rpb24gYWRkUm91dGVzKHJvdXRlciwgcm91dGVzKSB7XG4gIGNvbnN0IHJlbW92ZXJzID0gW11cbiAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICBjb25zdCByZW1vdmVSb3V0ZSA9IHJvdXRlci5hZGRSb3V0ZShyb3V0ZSlcbiAgICByZW1vdmVycy5wdXNoKHJlbW92ZVJvdXRlKVxuICB9XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IHJlbW92ZSBvZiByZW1vdmVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9zdHlsZSc7XG5cbi5kaXRvLWFwcCxcbi5kaXRvLXJvb3Qge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuXG4uZGl0by1yb290IHtcbiAgLmRpdG8tcGFnZSB7XG4gICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAvLyBUaGUgcm9vdC1sZXZlbCB2aWV3cyBhbmQgZm9ybXMgbWF5IGhhdmUgYSBgLmRpdG8tc2NoZW1hLWhlYWRlcmAgdGhhdFxuICAgIC8vIHNob3VsZCBhcHBlYXIgbGF5ZXJlZCBvdmVyIGAuZGl0by1tZW51YCwgd2hpbGUgaGF2aW5nIGBvdmVybGF5OiBoaWRkZW5gXG4gICAgLy8gc2V0IGJ5IGAuZGl0by1zY3JvbGwtcGFyZW50YCB0byBkZWxlZ2F0ZSBzY3JvbGxpbmcgdG8gYC5kaXRvLXNjcm9sbGAuXG4gICAgLy8gSW4gb3JkZXIgdG8gbm90IGhhdmUgdGhlIGhlYWRlciBjbGlwcGVkLCBhZGp1c3QgdGhlIHRvcCBoZXJlOlxuICAgID4gLmRpdG8tZm9ybSxcbiAgICA+IC5kaXRvLXZpZXcge1xuICAgICAgbWFyZ2luLXRvcDogLSRtZW51LWhlaWdodDtcbiAgICAgIHBhZGRpbmctdG9wOiAkbWVudS1oZWlnaHQ7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbm5hdi5kaXRvLW1lbnUuZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIHVsLmRpdG8tc2Nyb2xsXG4gICAgbGkoXG4gICAgICB2LWZvcj1cInZpZXcgaW4gdmlld3NcIlxuICAgIClcbiAgICAgIFJvdXRlckxpbmsoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICB2LXNsb3Q9XCJ7IGlzQWN0aXZlLCBocmVmLCByb3V0ZSB9XCJcbiAgICAgICAgY3VzdG9tXG4gICAgICAgIDp0bz1cImAvJHt2aWV3LnBhdGh9YFwiXG4gICAgICApXG4gICAgICAgIGEuZGl0by1saW5rKFxuICAgICAgICAgIDpocmVmPVwiaHJlZlwiXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbiAgICAgICAgICBAY2xpY2sucHJldmVudD1cIm9uQ2xpY2tMaW5rKHJvdXRlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9NZW51Jywge1xuICBtZXRob2RzOiB7XG4gICAgb25DbGlja0xpbmsocm91dGUpIHtcbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgLi4ucm91dGUsIGZvcmNlOiB0cnVlIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbWVudSB7XG4gIGZsZXg6IGluaXRpYWw7XG4gIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICB1bCB7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXN0eWxlO1xuICB9XG5cbiAgYSxcbiAgaDEge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgaDEge1xuICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmc7XG4gICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXI7XG4gICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1kYXJrZXN0O1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gIH1cblxuICAuZGl0by1saW5rIHtcbiAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nO1xuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodDtcblxuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLWxpbmsge1xuICAmOmZvY3VzOm5vdCg6YWN0aXZlLCAuZGl0by1hY3RpdmUpIHtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNwaW5uZXIoXG4gIHYtc2hvdz1cImxvYWRpbmdcIlxuKVxuICAvLy0gVE9ETzogQ29udmVydCB0byBCRU1cbiAgLnYtcHVsc2Uudi1wdWxzZTEoOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSwgc3Bpbm5lckRlbGF5MV1cIilcbiAgLnYtcHVsc2Uudi1wdWxzZTIoOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSwgc3Bpbm5lckRlbGF5Ml1cIilcbiAgLnYtcHVsc2Uudi1wdWxzZTMoOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSwgc3Bpbm5lckRlbGF5M11cIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIzVkYzU5NidcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxNXB4J1xuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMnB4J1xuICAgIH0sXG4gICAgcmFkaXVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTAwJSdcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIHVzaW5nIG9ubHkgY2xhc3Nlc1xuICAgIHJldHVybiB7XG4gICAgICBzcGlubmVyU3R5bGU6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgICB3aWR0aDogdGhpcy5zaXplLFxuICAgICAgICBoZWlnaHQ6IHRoaXMuc2l6ZSxcbiAgICAgICAgbWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgIGFuaW1hdGlvbk5hbWU6ICd2LXB1bHNlU3RyZXRjaERlbGF5JyxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICcwLjc1cycsXG4gICAgICAgIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAnaW5maW5pdGUnLFxuICAgICAgICBhbmltYXRpb25UaW1pbmdGdW5jdGlvbjogJ2N1YmljLWJlemllciguMiwuNjgsLjE4LDEuMDgpJyxcbiAgICAgICAgYW5pbWF0aW9uRmlsbE1vZGU6ICdib3RoJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTE6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjEycydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkyOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4yNHMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mzoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMzZzJ1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5IHtcbiAgMCUsXG4gIDgwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgNDUlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheSB7XG4gIDAlLFxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5uYXYuZGl0by1oZWFkZXJcbiAgLmRpdG8tdHJhaWxcbiAgICB1bFxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1pZj1cImluZGV4ID09PSB0cmFpbC5sZW5ndGggLSAxXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgICAgUm91dGVyTGluay5kaXRvLWJyZWFkY3J1bWIoXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgOnRvPVwiY29tcG9uZW50LnBhdGhcIlxuICAgICAgICApXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgIERpdG9TcGlubmVyKFxuICAgICAgdi1pZj1cImlzTG9hZGluZ1wiXG4gICAgKVxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvU3Bpbm5lciBmcm9tICcuL0RpdG9TcGlubmVyLnZ1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvSGVhZGVyJywge1xuICBjb21wb25lbnRzOiB7IERpdG9TcGlubmVyIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzcGlubmVyOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBpc0xvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyYWlsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLmZpbHRlcihcbiAgICAgICAgY29tcG9uZW50ID0+ICEhY29tcG9uZW50LnJvdXRlUmVjb3JkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc2l6ZSA9ICc4cHgnLFxuICAgICAgY29sb3IgPSAnIzk5OSdcbiAgICB9ID0gdGhpcy5zcGlubmVyIHx8IHt9XG4gICAgLy8gVE9ETzogVGhpcyBpcyBhIGhhY2sgdG8gc2V0IHRoZSBkZWZhdWx0IHByb3BzIGZvciB0aGUgRGl0b1NwaW5uZXIuXG4gICAgLy8gUGFzcyB0aGVtIG9uIHRocm91Z2ggdGhlIHRlbXBsYXRlIGluc3RlYWQhXG4gICAgY29uc3QgeyBwcm9wcyB9ID0gRGl0b1NwaW5uZXJcbiAgICBwcm9wcy5zaXplLmRlZmF1bHQgPSBzaXplXG4gICAgcHJvcHMuY29sb3IuZGVmYXVsdCA9IGNvbG9yXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWRpcnR5JzogY29tcG9uZW50LmlzRGlydHlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1oZWFkZXIge1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItYmxhY2s7XG4gIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplO1xuICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHQ7XG4gIHotaW5kZXg6ICRtZW51LXotaW5kZXg7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIHNwYW4ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nO1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gIH1cblxuICAuZGl0by10cmFpbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGhlaWdodDogM2VtO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nO1xuXG4gICAgdWwge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICB9XG5cbiAgICBhIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZy1yaWdodDogMC40ZW07XG5cbiAgICAgICRhbmdsZTogMzNkZWc7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogIzk5OTk5OTtcbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICB3aWR0aDogMXB4O1xuICAgICAgICBoZWlnaHQ6IDEuMmVtO1xuICAgICAgICByaWdodDogLTFweDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcms7XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgkYW5nbGUpO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3A7XG4gICAgICB9XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgYm90dG9tOiA1MCU7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0kYW5nbGUpO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b207XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc3Bpbm5lciB7XG4gICAgbWFyZ2luLXRvcDogJG1lbnUtcGFkZGluZy12ZXI7XG4gIH1cblxuICAuZGl0by1kaXJ0eSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICB3aWR0aDogOHB4O1xuICAgICAgaGVpZ2h0OiA4cHg7XG4gICAgICBtYXJnaW46IDJweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwLjVlbTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYWNjb3VudCxcbiAgLmRpdG8tbG9naW4ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmRpdG8tYWNjb3VudCB7XG4gICAgbGVmdDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nICogMjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEb21NaXhpbiBmcm9tICcuL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbGRvd246IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgY2hlY2tUaW1lOiB0cnVlLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBtb3VzZWRvd246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblB1bGxkb3duTW91c2VVcChudWxsKSkge1xuICAgICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyczogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3Blbih0cnVlKVxuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93bk1vdXNlVXAodmFsdWUpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnRUaW1lIH0gPSB0aGlzLnB1bGxkb3duXG4gICAgICBpZiAoIXRoaXMuY2hlY2tUaW1lIHx8IHN0YXJ0VGltZSAmJiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDI1MCkpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMub25QdWxsZG93blNlbGVjdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KC8qIHZhbHVlICovKSB7XG4gICAgICAvLyBOT1RFOiBUbyBiZSBvdmVycmlkZGVuLlxuICAgIH0sXG5cbiAgICBzZXRQdWxsZG93bk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5wdWxsZG93bi5vcGVuID0gb3BlblxuICAgICAgdGhpcy5wdWxsZG93bi5zdGFydFRpbWUgPSBvcGVuID8gRGF0ZS5ub3coKSA6IDBcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB0aGlzLnB1bGxkb3duLmV2ZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiKVxuICAgIGxpKFxuICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgKVxuICAgICAgYShcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9BY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlICdsb2dvdXQnOlxuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1hY2NvdW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXB1bGxkb3duIHtcbiAgICB0b3A6ICRwdWxsZG93bi1wYWRkaW5nLXZlcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQoXG4gIHYtaWY9XCJjb250ZW50XCJcbiAgOmlzPVwib3B0aW9ucy50YWcgfHwgdGFnXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pIHt7IG9wdGlvbnMudGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FbGVtZW50Jywge1xuICBwcm9wczoge1xuICAgIHRhZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzcGFuJyB9LFxuICAgIGNvbnRlbnQ6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgeyBjb250ZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QoY29udGVudCkgPyBjb250ZW50IDogeyB0ZXh0OiBjb250ZW50IH1cbiAgICB9LFxuXG4gICAgY2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLmNsYXNzLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuY2xhc3MpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLnN0eWxlLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuc3R5bGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBhc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gYXNBcnJheSh2YWx1ZSkucmVkdWNlKChvYmplY3QsIGVudHJ5KSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKGVudHJ5KSkge1xuICAgICAgb2JqZWN0W2VudHJ5XSA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGVudHJ5KSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmplY3QsIGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0XG4gIH0sIHt9KVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgOmlzPVwidGFnXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4pXG4gIC5kaXRvLWNoZXZyb24oXG4gICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6ICFjb2xsYXBzZWQgfVwiXG4gIClcbiAgRGl0b0VsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICApXG4gIGxhYmVsKFxuICAgIDpmb3I9XCJkYXRhUGF0aFwiXG4gICAgdi1odG1sPVwidGV4dFwiXG4gIClcbiAgRGl0b0VsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICApXG4gIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0xhYmVsJywge1xuICBlbWl0czogWydleHBhbmQnXSxcblxuICBwcm9wczoge1xuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/ICdhJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHRleHQoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QobGFiZWwpID8gbGFiZWw/LnRleHQgOiBsYWJlbFxuICAgIH0sXG5cbiAgICBwcmVmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnByZWZpeClcbiAgICB9LFxuXG4gICAgc3VmZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5zdWZmaXgpXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/IHsgb25DbGljazogdGhpcy5vbkNsaWNrIH0gOiB7fVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID09PSB0aGlzXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrKCkge1xuICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IHRoaXNcbiAgICAgIHRoaXMuJGVtaXQoJ2V4cGFuZCcsIHRoaXMuY29sbGFwc2VkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWxhYmVsIHtcbiAgLS1sYWJlbC1wYWRkaW5nOiAwO1xuICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBhbGwgaXRlbXMgaW4gdGhlIGxhYmVsLCBlLmcuIGNoZXZyb24sIGVkaXQtYnV0dG9ucy5cbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZyk7XG4gIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmctaGFsZiAwO1xuXG4gIGxhYmVsIHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgY3Vyc29yOiBpbmhlcml0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICBsYWJlbCxcbiAgLmRpdG8tbGFiZWwtcHJlZml4LFxuICAuZGl0by1sYWJlbC1zdWZmaXgge1xuICAgICY6bnRoLWxhc3QtY2hpbGQoMikge1xuICAgICAgLy8gVG8gc3RyZXRjaCBlaXRoZXIgbGFiZWwgb3IgLmRpdG8tbGFiZWwtc3VmZml4IHRvIGZ1bGwgYXZhaWxhYmxlIHdpZHRoXG4gICAgICAvLyBzbyB0aGF0IGJ1dHRvbnMgYWx3YXlzIGFwcGVhciByaWdodC1hbGlnbmVkOlxuICAgICAgZmxleDogMSAxIGF1dG87XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJ1xcYTAnOyAvLyAmbmJzcDs7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tbGFiZWwtcHJlZml4LFxuICAuZGl0by1sYWJlbC1zdWZmaXgge1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuICB9XG5cbiAgLmRpdG8tYnV0dG9ucyB7XG4gICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICBtYXJnaW46IGNhbGMoLTEgKiB2YXIoLS1sYWJlbC1wYWRkaW5nKSk7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZyk7XG4gIH1cblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgLy8gSW4gb3JkZXIgZm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gbGFiZWxzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGxheW91dCxcbiAgICAvLyB3ZSBuZWVkIHRvIHBvc2l0aW9uIGl0IGFic29sdXRlbHkgaW5zaWRlIGl0cyBjb250YWluZXIuXG4gICAgbGFiZWwge1xuICAgICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICBjb250ZW50OiAnXFwyMDBiJzsgLy8gemVyby13aWR0aCBzcGFjZTtcbiAgICB9XG4gIH1cbn1cblxuYS5kaXRvLWxhYmVsIHtcbiAgJjpob3ZlciB7XG4gICAgLmRpdG8tY2hldnJvbiB7XG4gICAgICBjb2xvcjogJGNvbG9yLWRhcmtlcjtcbiAgICB9XG4gIH1cblxuICAmOmZvY3VzOm5vdCg6YWN0aXZlLCAuZGl0by1hY3RpdmUpIHtcbiAgICAuZGl0by1jaGV2cm9uIHtcbiAgICAgIC13ZWJraXQtdGV4dC1zdHJva2U6ICRib3JkZXItd2lkdGggJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gICAgLy8gRGlzcGxheSBsYWJlbHMgaW4gY29tcGFjdCBzY2hlbWEgYXMgaW5saW5lLWJsb2NrcywgdG8gYWxsb3cgY29tcGFjdFxuICAgIC8vIGxheW91dHMgd2l0aCBgd2lkdGg6ICdhdXRvJ2AgZWxlbWVudHM6XG4gICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gY29udHJvbCB0aGlzIGJlaGF2aW9yLlxuICB9XG59XG5cbi5kaXRvLXNjaGVtYS1jb21wYWN0IHtcbiAgPiAuZGl0by1zY2hlbWEtY29udGVudCB7XG4gICAgPiAuZGl0by1wYW5lIHtcbiAgICAgID4gLmRpdG8tY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLFxuICBnZXRJdGVtSWQsXG4gIGdldEl0ZW1VaWQsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICAgIGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAgIChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IGluZGV4IDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRJdGVtTGFiZWwoc291cmNlU2NoZW1hLCBpdGVtLCB7XG4gICAgICBpbmRleCA9IG51bGwsXG4gICAgICBleHRlbmRlZCA9IGZhbHNlLFxuICAgICAgYXNPYmplY3QgPSBmYWxzZVxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgeyBpdGVtTGFiZWwgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKCFpdGVtIHx8ICFleHRlbmRlZCAmJiBpdGVtTGFiZWwgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhUGF0aFxuICAgICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoKSA9PlxuICAgICAgICAoZGF0YVBhdGggfHw9IHRoaXMuZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpKVxuXG4gICAgICBsZXQgZm9ybUxhYmVsXG4gICAgICBjb25zdCBnZXRGb3JtTGFiZWwgPSAoKSA9PlxuICAgICAgICAoZm9ybUxhYmVsIHx8PSB0aGlzLmdldExhYmVsKFxuICAgICAgICAgIGdldEl0ZW1Gb3JtU2NoZW1hKHNvdXJjZVNjaGVtYSwgaXRlbSwgdGhpcy5jb250ZXh0KVxuICAgICAgICApKVxuXG4gICAgICBsZXQgdGV4dFxuICAgICAgbGV0IHByZWZpeFxuICAgICAgbGV0IHN1ZmZpeFxuICAgICAgaWYgKGlzRnVuY3Rpb24oaXRlbUxhYmVsKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1MYWJlbC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICBpbmRleCxcblxuICAgICAgICAgICAgZ2V0IGRhdGFQYXRoKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RGF0YVBhdGgoKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1MYWJlbCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBpZiAoaXNPYmplY3QobGFiZWwpKSB7XG4gICAgICAgICAgOyh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiAhKGl0ZW1MYWJlbCBpbiBpdGVtKSkge1xuICAgICAgICAvLyBgaXRlbUxhYmVsYCBjYW4gYmUgYm90aCBhIGtleSwgb3Igc2ltcGx5IGEgbGFiZWwuXG4gICAgICAgIHRleHQgPSBpdGVtTGFiZWxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgLy8gSWYgbm8gbGFiZWwgd2FzIGZvdW5kIHNvIGZhciwgdHJ5IHRvIHByb2R1Y2Ugb25lIGZyb20gdGhlIGluZGV4LlxuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgdGV4dCA9XG4gICAgICAgICAgaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgID8gKHRleHQgPSBgJHtpbmRleCArIDF9YClcbiAgICAgICAgICAgIDogJydcbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0ID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9IDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnNsb3QobmFtZT1cImJlZm9yZVwiKVxuLmRpdG8tc2NoZW1hKFxuICB2LWJpbmQ9XCIkYXR0cnNcIlxuKVxuICAuZGl0by1zY2hlbWEtY29udGVudFxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtbWVudS1oZWFkZXInOiBtZW51SGVhZGVyIH1cIlxuICAgIClcbiAgICAgIERpdG9MYWJlbChcbiAgICAgICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgOmNvbGxhcHNlZD1cIiFvcGVuZWRcIlxuICAgICAgICBAZXhwYW5kPVwib25FeHBhbmRcIlxuICAgICAgKVxuICAgICAgICAvLy0gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiaW5saW5lZFwiXG4gICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICApXG4gICAgICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gICAgICBEaXRvVGFicyhcbiAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICA6c2VsZWN0ZWRUYWI9XCJzZWxlY3RlZFRhYlwiXG4gICAgICApXG4gICAgICBEaXRvQ2xpcGJvYXJkKFxuICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgIClcbiAgICAgIERpdG9QYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgICAgcmVmPVwidGFic1wiXG4gICAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgICA6dmlzaWJsZT1cInNlbGVjdGVkVGFiID09PSB0YWJcIlxuICAgICAgICA6dGFiPVwidGFiXCJcbiAgICAgICAgOnNjaGVtYT1cInRhYlNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgVHJhbnNpdGlvbkhlaWdodCg6ZW5hYmxlZD1cImlubGluZWRcIilcbiAgICAgIERpdG9QYW5lLmRpdG8tcGFuZS1tYWluKFxuICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgKVxuICB0ZW1wbGF0ZShcbiAgICB2LWlmPVwiaW5saW5lZFwiXG4gIClcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICApXG4gIHRlbXBsYXRlKFxuICAgIHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCJcbiAgKVxuICAgIERpdG9QYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxFbnRyaWVzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbnNsb3QobmFtZT1cImFmdGVyXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb24sXG4gIGlzUmVnRXhwLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldFBhbmVsRW50cmllcyxcbiAgc2V0RGVmYXVsdFZhbHVlcyxcbiAgcHJvY2Vzc0RhdGFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY2hlbWEnLCB7XG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVHJhbnNpdGlvbkhlaWdodCB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJyRzY2hlbWFQYXJlbnRDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBtZW51SGVhZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICByZXR1cm4ge1xuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIHByb3ZpZGUgbW9yZSBkYXRhIHRocm91Z2ggYHNjaGVtYS5kYXRhYCwgdnVlLXN0eWxlOlxuICAgICAgLi4uKFxuICAgICAgICBkYXRhICYmIGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgICA/IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICAgIDogZGF0YVxuICAgICAgKSxcbiAgICAgIGNvbXBvbmVudHNSZWdpc3RyeToge30sXG4gICAgICBwYW5lc1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVsc1JlZ2lzdHJ5OiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHNjaGVtYUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFyZW50IHNjaGVtYSBpcyB0aGlzIHNjaGVtYSBoYW5kbGVzIGl0cyBvd25cbiAgICAgIC8vIGRhdGEuIFRoaXMgcHJldmVudHMgZGVsZWdhdGluZyBldmVudHMgdG8gdGhlIHBhcmVudCwgYW5kIHJlZ2lzdGVyaW5nXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggdGhlIHBhcmVudCB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIHNldCBpc0RpcnR5IGZsYWdzLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IG51bGwgOiB0aGlzLnBhcmVudENvbXBvbmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFuZWxFbnRyaWVzKCkge1xuICAgICAgY29uc3QgcGFuZWxFbnRyaWVzID0gZ2V0UGFuZWxFbnRyaWVzKHRoaXMuc2NoZW1hLnBhbmVscywgJycpXG4gICAgICBmb3IgKGNvbnN0IHBhbmUgb2YgdGhpcy5wYW5lcykge1xuICAgICAgICBwYW5lbEVudHJpZXMucHVzaCguLi5wYW5lLnBhbmVsRW50cmllcylcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYW5lbEVudHJpZXNcbiAgICB9LFxuXG4gICAgdGFicygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEudGFicylcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICBjb25zdCBjdXJyZW50VGFiID0gdGhpcy4kcm91dGUuaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgICAgY29uc3QgdGFiID1cbiAgICAgICAgY3VycmVudFRhYiAmJiB0aGlzLnNob3VsZFJlbmRlcih0aGlzLnRhYnNbY3VycmVudFRhYl0pXG4gICAgICAgICAgPyBjdXJyZW50VGFiXG4gICAgICAgICAgOiB0aGlzLmRlZmF1bHRUYWI/Lm5hbWUgfHwgbnVsbFxuICAgICAgaWYgKHRhYiAhPT0gY3VycmVudFRhYikge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgd2F0Y2hlciFcbiAgICAgICAgLy8gQW55IHRhYiBjaGFuZ2UgbmVlZHMgdG8gYmUgcmVmbGVjdGVkIGluIHRoZSByb3V0ZXIgYWxzby5cbiAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBoYXNoOiBgIyR7dGFifWAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YWJcbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0VGFiIH0gPSB0YWJcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpXG4gICAgICAgICAgICAgID8gZGVmYXVsdFRhYih0aGlzLmNvbnRleHQpXG4gICAgICAgICAgICAgIDogZGVmYXVsdFRhYlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0XG4gICAgfSxcblxuICAgIGNsaXBib2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYT8uY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdzZXJ2ZXInLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGNsaXBib2FyZERhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAuLi50aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzLlxuICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgYXM6XG4gICAgLy8gcmV0dXJuIGdldEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudERhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkYXRlZClcbiAgICB9LFxuXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMubGFiZWwgfHwgdGhpcy5jb2xsYXBzaWJsZVxuICAgIH0sXG5cbiAgICBoYXNUYWJzKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlubGluZWQgJiYgISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaGFzTWFpblBhbmUoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gISFjb21wb25lbnRzICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgb3BlbmVkOiBnZXRTdG9yZUFjY2Vzc29yKCdvcGVuZWQnLCB7XG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sbGFwc2VkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gICAgLy8gRGVsZWdhdGUgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIHBhcmVudCBzY2hlbWE6XG4gICAgdGhpcy5kZWxlZ2F0ZSgnY2hhbmdlJywgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQpXG4gICAgdGhpcy5lbWl0RXZlbnQoJ2luaXRpYWxpemUnKSAvLyBOb3QgYCdjcmVhdGUnYCwgc2luY2UgdGhhdCdzIGZvciBkYXRhLlxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmVtaXRFdmVudCgnZGVzdHJveScpXG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKFxuICAgICAgICB0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzQnlOYW1lKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeU5hbWUobmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50KGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25FeHBhbmQoZXhwYW5kKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnZXhwYW5kJywge1xuICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBleHBvc2UgdGhpcyBvbiBEaXRvQ29udGV4dD9cbiAgICAgICAgY29udGV4dDogeyBleHBhbmQgfVxuICAgICAgfSlcbiAgICAgIC8vIFByZXZlbnQgY2xvc2luZyB0aGUgc2NoZW1hIHdpdGggaW52YWxpZCBkYXRhLCBzaW5jZSB0aGUgaW4tY29tcG9uZW50XG4gICAgICAvLyB2YWxpZGF0aW9uIHdpbGwgbm90IGJlIGV4ZWN1dGVkIG9uY2UgaXQncyBjbG9zZWQuXG5cbiAgICAgIC8vIFRPRE86IE1vdmUgdmFsaWRhdGlvbiBvdXQgb2YgY29tcG9uZW50cywgdG8gc2NoZW1hLCBqdXN0IGxpa2VcbiAgICAgIC8vIHByb2Nlc3NpbmcsIGFuZCB1c2UgYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIGZvciB0aGUgcmVzdWx0aW5nIGVycm9ycyxcbiAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoaXMgcmVxdWlyZW1lbnQsIHNpbmNlIHdlIGNhbiB2YWxpZGF0ZSBjbG9zZWQgZm9ybXMgYW5kXG4gICAgICAvLyBzY2hlbWFzIHRoZW4uXG4gICAgICBpZiAoIXRoaXMub3BlbmVkIHx8IGV4cGFuZCB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBleHBhbmRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJylcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5mb2N1cygpXG4gICAgICB0aGlzLm9wZW5lZCA9IHRydWVcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuZm9jdXMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGNvbnN0IHVubWF0Y2hlZCA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgZXJyc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JzKSkge1xuICAgICAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGEgZGF0YS1yb290LCBwcmVmaXggaXRzIG93biBkYXRhUGF0aCB0byBhbGwgZXJyb3JzLFxuICAgICAgICAvLyBzaW5jZSB0aGUgZGF0YSB0aGF0IGl0IHNlbmRzIGFuZCB2YWxpZGF0ZXMgd2lsbCBiZSB1bnByZWZpeGVkLlxuICAgICAgICBjb25zdCBmdWxsRGF0YVBhdGggPSB0aGlzLmhhc093bkRhdGFcbiAgICAgICAgICA/IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICAgIDogZGF0YVBhdGhcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5oYXNPd25EYXRhLCBmdWxsRGF0YVBhdGgpXG4gICAgICAgIC8vIENvbnZlcnQgZnJvbSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvbiwgdG8gb3VyIG93biBmb3JtXG4gICAgICAgIC8vIG9mIHJlbGF0aXZlIEpTT04gcG9pbnRlcnMgYXMgZGF0YS1wYXRoczpcbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZnVsbERhdGFQYXRoKVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgYXdhaXQgY29tcG9uZW50Lm5hdmlnYXRlVG9Db21wb25lbnQ/LihcbiAgICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICAgIHN1YkNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJycyA9IGVycm9yc1tjb21wb25lbnQuZGF0YVBhdGhdXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJycyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKVxuICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgZm9ybSB0byBkaXNwbGF5IGF0IGxlYXN0IHBhcnRzIGZvIHRoZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbGwgZXJyb3JzIGF0IG9uY2UsIHNvIHdlJ3JlIGRvbmUuIERvbid0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBgbm90aWZ5RXJyb3JzKClgIHlldCwgYXMgd2UgY2FuIG9ubHkgZGlzcGxheSBpdCBvbmNlXG4gICAgICAgICAgICAgICAgLy8gYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIHdhcyBjYWxsZWQgZnJvbSBgRGl0b0Zvcm0ubW91bnRlZCgpYFxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGlsbCBoZXJlLCBzbyBrZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXaGVuIHRoZSBlcnJvciBjYW4ndCBiZSBtYXRjaGVkLCBhZGQgaXQgdG8gYSBsaXN0IG9mIHVubWF0Y2hlZFxuICAgICAgICAgIC8vIGVycm9ycyB3aXRoIGRlY2VudCBtZXNzYWdlLCB0byByZXBvcnQgYXQgdGhlIGVuZC5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhYmVsaXplKHByb3BlcnR5KVxuICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZpZWxkXG4gICAgICAgICAgICAgID8gYFRoZSBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICAgICAgICAgOiBgVGhlICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goYCR7cHJlZml4fSAke2Vyci5tZXNzYWdlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnModW5tYXRjaGVkLmpvaW4oJ1xcbicpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBub3RpZnlFcnJvcnMobWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1ZhbGlkYXRpb24gRXJyb3JzJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZSB8fCAnUGxlYXNlIGNvcnJlY3QgdGhlIGhpZ2hsaWdodGVkIGVycm9ycy4nXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4ndCBzZXQgYHRoaXMuZGF0YSA9IC4uLmAgYmVjYXVzZSBpdCdzIGEgcHJvcGVydHksIGJ1dCB3ZSBjYW4gc2V0XG4gICAgICAvLyBhbGwga25vd24gcHJvcGVydGllcyBvbiBpdCB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5XG4gICAgICAvLyBgc2V0RGVmYXVsdFZhbHVlcygpYCwgYXMgdGhleSBhcmUgYWxsIHJlYWN0aXZlIGFscmVhZHkgZnJvbSB0aGUgc3RhcnRzOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIHNldERlZmF1bHRWYWx1ZXModGhpcy5zY2hlbWEsIHt9LCB0aGlzKSlcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgICB0aGlzLmRhdGFbbmFtZV0gPSBkYXRhW25hbWVdXG4gICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpKSB7XG4gICAgICAgICAgICBjb21wb25lbnQubWFya0RpcnR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZmlsdGVyRGF0YShkYXRhKSB7XG4gICAgICAvLyBGaWx0ZXJzIG91dCBhcnJheXMgYW5kIG9iamVjdHMgdGhhdCBhcmUgYmFjayBieSBkYXRhIHJlc291cmNlc1xuICAgICAgLy8gdGhlbXNlbHZlcywgYXMgdGhvc2UgYXJlIGFscmVhZHkgdGFraW5nIGNhcmUgb2YgdGhyb3VnaCB0aGVpciBvd24gQVBJXG4gICAgICAvLyByZXNvdXJjZSBlbmQtcG9pbnRzIGFuZCBzaG91bGRuJ3QgYmUgc2V0LlxuICAgICAgY29uc3QgY29weSA9IHt9XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSlcbiAgICAgICAgICBpZiAoY29tcG9uZW50cy5zb21lKGNvbXBvbmVudCA9PiBjb21wb25lbnQucHJvdmlkZXNEYXRhKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29weVtuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY29weVxuICAgIH0sXG5cbiAgICBwcm9jZXNzRGF0YSh7IHRhcmdldCA9ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5ID0gdHJ1ZSB9ID0ge30pIHtcbiAgICAgIHJldHVybiBwcm9jZXNzRGF0YShcbiAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIERpdG9Db250ZXh0IGhhbmRsaW5nIGluc2lkZSBgcHJvY2Vzc0RhdGFgIGFuZFxuICAgICAgICAgIC8vIGBwcm9jZXNzU2NoZW1hRGF0YSgpYDpcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgc2NoZW1hT25seSxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBgJHNjaGVtYVBhcmVudENvbXBvbmVudCgpYCBpcyBvbmx5IHNldCBpZiBvbmUgb2YgdGhlIGFuY2VzdG9ycyB1c2VzXG4gICAgICAvLyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICAgIHRoaXMuJHNjaGVtYVBhcmVudENvbXBvbmVudCgpPy5fcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5jb21wb25lbnRzUmVnaXN0cnksIGNvbXBvbmVudCwgYWRkKVxuICAgICAgLy8gT25seSByZWdpc3RlciB3aXRoIHRoZSBwYXJlbnQgaWYgc2NoZW1hIHNoYXJlcyBkYXRhIHdpdGggaXQuXG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lKHBhbmUsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVzUmVnaXN0cnksIHBhbmUsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZWwocGFuZWwsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVsc1JlZ2lzdHJ5LCBwYW5lbCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJFbnRyeShyZWdpc3RyeSwgZW50cnksIGFkZCkge1xuICAgICAgY29uc3QgdWlkID0gZW50cnkuJHVpZFxuICAgICAgaWYgKGFkZCkge1xuICAgICAgICByZWdpc3RyeVt1aWRdID0gZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSByZWdpc3RyeVt1aWRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIF9saXN0RW50cmllc0J5RGF0YVBhdGgocmVnaXN0cnkpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlZ2lzdHJ5KS5yZWR1Y2UoKGVudHJpZXNCeURhdGFQYXRoLCBlbnRyeSkgPT4ge1xuICAgICAgICAvLyBNdWx0aXBsZSBlbnRyaWVzIGNhbiBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgZGF0YS1wYXRoLCBlLmcuIHdoZW5cbiAgICAgICAgLy8gdGhlcmUgYXJlIHRhYnMuIExpbmsgZWFjaCBkYXRhLXBhdGggdG8gYW4gYXJyYXkgb2YgZW50cmllcy5cbiAgICAgICAgY29uc3QgeyBkYXRhUGF0aCB9ID0gZW50cnlcbiAgICAgICAgY29uc3QgZW50cmllcyA9IChlbnRyaWVzQnlEYXRhUGF0aFtkYXRhUGF0aF0gfHw9IFtdKVxuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFxuICAgICAgfSwge30pXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCkuc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICA/IHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgICAgIDogdGhpcy5fZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW25vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW2FwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2ZpbHRlckVudHJpZXMoZW50cmllcywgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaCA/IGVudHJpZXMuZmlsdGVyKG1hdGNoKSA6IGVudHJpZXNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY2hlbWEge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAvLyBUbyBkaXNwbGF5IHNjaGVtYSBuZXh0IHRvIHBhbmVsczpcbiAgZGlzcGxheTogZmxleDtcbiAgbWluLWhlaWdodDogMTAwJTtcblxuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICBmbGV4OiAxIDEgMTAwJTtcbiAgICAvLyBTbyB0aGF0IHNjaGVtYSBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG5cbiAgICA+ICo6b25seS1jaGlsZCB7XG4gICAgICBncmlkLXJvdy1lbmQ6IG5vbmU7XG4gICAgfVxuXG4gICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aDtcbiAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nO1xuICB9XG5cbiAgPiAuZGl0by1idXR0b25zLFxuICA+IC5kaXRvLXBhbmVscyB7XG4gICAgZmxleDogMSAxIDAlO1xuICB9XG5cbiAgPiAuZGl0by1idXR0b25zIHtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZztcbiAgfVxuXG4gID4gLmRpdG8tcGFuZWxzIHtcbiAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgJGNvbnRlbnQtcGFkZGluZyAwO1xuICB9XG5cbiAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgLmRpdG8tcGFuZS10YWIgKyAuZGl0by1wYW5lLW1haW4ge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZTtcbiAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW4gdG8gdGhlIHJ1bGVyXG4gICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmcgJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tc2NoZW1hLWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAuZGl0by10YWJzLFxuICAuZGl0by1jbGlwYm9hcmQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7XG4gIH1cblxuICAuZGl0by1jbGlwYm9hcmQge1xuICAgICY6b25seS1jaGlsZCB7XG4gICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICB9XG5cbiAgICAuZGl0by1idXR0b24ge1xuICAgICAgbWFyZ2luOiAwIDAgJHRhYi1tYXJnaW4gJHRhYi1tYXJnaW47XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLXNjaGVtYS1tZW51LWhlYWRlciB7XG4gICAgLy8gQnJpbmcgdGhlIHRhYnMgdXAgdG8gdGhlIG1lbnUuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGhlaWdodDogJG1lbnUtaGVpZ2h0O1xuICAgIHBhZGRpbmc6IDAgJG1lbnUtcGFkZGluZy1ob3I7XG4gICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aDtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICB6LWluZGV4OiAkbWVudS16LWluZGV4O1xuICAgIC8vIFR1cm4gb2ZmIHBvaW50ZXIgZXZlbnRzIHNvIHRoYXQgRGl0b1RyYWlsIGtlZXBzIHJlY2VpdmluZyBldmVudHMuLi5cbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAvLyAuLi5idXQgYWxsb3cgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdGFicyBhbmQgYnV0dG9ucyAoZS5nLiBjbGlwYm9hcmQpXG4gICAgLy8gbGF5ZXJlZCBvbiB0b3Agb2YgRGl0b1RyYWlsLlxuICAgIC5kaXRvLXRhYnMsXG4gICAgLmRpdG8tYnV0dG9ucyB7XG4gICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodDtcbiAgICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplO1xuICAgIH1cbiAgfVxuXG4gIGJ1dHRvbi5kaXRvLWxhYmVsIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICAvLyBDYXRjaCBhbGwgY2xpY2tzLCBldmVuIHdoZW4gaXQgd291bGQgYmUgcGFydGlhbGx5IGNvdmVyZWQgYnkgc2NoZW1hLlxuICAgIHotaW5kZXg6IDE7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuRGl0b1NjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmdlbmVyYXRlTGFiZWxzPVwiIWlzQ29tcGFjdFwiXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4pXG4gIC8vLSBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2NoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vLSBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNDb21wYWN0IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hSW5saW5lZCcsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gaXNDb21wYWN0KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBhY3QgJiYgISF0aGlzLmxhYmVsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NoZW1hLWlubGluZWQge1xuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyIHtcbiAgICAgIC8vIENoYW5nZSBzcGFjaW5nIHNvIC5kaXRvLWxhYmVsIGNvdmVycyB0aGUgZnVsbCAuZGl0by1zY2hlbWEtaGVhZGVyLlxuICAgICAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZztcblxuICAgICAgLmRpdG8tbGFiZWwge1xuICAgICAgICAvLyBBZGQgcmVtb3ZlZCAkZm9ybS1zcGFjaW5nIGFnYWluXG4gICAgICAgIC0tbGFiZWwtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfTtcblxuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICAgICAgLy8gQmVjYXVzZSB0YWJsZXMgaGF2ZSBhIGZ1bm55IHdheSBvZiBhbGxvd2luZyB0b28gbXVjaCB3aWR0aCBncm93dGg6XG4gICAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGg7XG4gICAgICAgIC8vIFByZXZlbnQgY29sbGFwc2luZyB0byBtaW4taGVpZ2h0IHdoZW4gYWxvbmUgaW5cbiAgICAgICAgLy8gLmRpdG8tc2NoZW1hLWNvbnRlbnQsIGR1ZSB0byBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICAgIG1pbi1oZWlnaHQ6IDJlbTtcbiAgICAgIH1cblxuICAgICAgJiArIC5kaXRvLXBhbmUge1xuICAgICAgICAvLyBOZWVkZWQgZm9yIHRyYW5zaXRpb24taGVpZ2h0IGluIERpdG9TY2hlbWE6XG4gICAgICAgIG1pbi1oZWlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWUvbm8tdGVtcGxhdGUtc2hhZG93IC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmUoXG4gIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICB2LXNob3c9XCJ2aXNpYmxlXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBEaXRvQ29udGFpbmVyKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgIClcbiAgICAuZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0QWxsUGFuZWxFbnRyaWVzLCBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZScsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy50YWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0YWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdmlzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgICAgICBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IG5lc3RlZCA/IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKSA6IHRoaXMuc3RvcmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcGFuZWxFbnRyaWVzKCkge1xuICAgICAgLy8gR2F0aGVyIGFsbCBwYW5lbCBzY2hlbWFzIGZyb20gYWxsIGNvbXBvbmVudCBzY2hlbWFzLCBieSBmaW5kaW5nIHRob3NlXG4gICAgICAvLyB0aGF0IHdhbnQgdG8gcHJvdmlkZSBhIHBhbmVsLiBTZWUgYGdldEFsbFBhbmVsRW50cmllcygpYCBmb3IgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFNjaGVtYXMuZmxhdE1hcChcbiAgICAgICAgKHsgc2NoZW1hLCBuZXN0ZWREYXRhUGF0aDogZGF0YVBhdGggfSkgPT5cbiAgICAgICAgICBnZXRBbGxQYW5lbEVudHJpZXMoXG4gICAgICAgICAgICB0aGlzLmFwaSxcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQsXG4gICAgICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaW5nbGUgJiYgdGhpcy5jb21wb25lbnRTY2hlbWFzLmxlbmd0aCA9PT0gMVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lKHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy50YWIpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBoYXNoOiBgIyR7dGhpcy50YWJ9YCB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGFkZGVkIGJ5IGAuZGl0by1jb250YWluZXJgIGluc2lkZSBgLmRpdG8tcGFuZWA6XG4gIG1hcmdpbjogKC0kZm9ybS1zcGFjaW5nKSAoLSRmb3JtLXNwYWNpbmctaGFsZik7XG4gIC8vIEFkZCByZW1vdmVkIGhvcml6b250YWwgbWFyZ2luIGFnYWluIHRvIG1heC13aWR0aDpcbiAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArIDIgKiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIC8vIFVzZSBgZmxleDogMCVgIGZvciBhbGwgYC5kaXRvLXBhbmVgIGV4Y2VwdCBgLmRpdG8tcGFuZS1tYWluYCxcbiAgLy8gc28gdGhhdCB0aGUgYC5kaXRvLWJ1dHRvbnMtbWFpbmAgY2FuIGJlIG1vdmVkIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b20uXG4gIGZsZXg6IDAlO1xuXG4gICYuZGl0by1wYW5lLW1haW4ge1xuICAgIGZsZXg6IDEwMCU7XG4gIH1cblxuICAuZGl0by1zY2hlbWEtaGVhZGVyOm5vdCguZGl0by1zY2hlbWEtbWVudS1oZWFkZXIpICsgJiB7XG4gICAgLy8gQ2xlYXIgdG9wLW1hcmdpbiBpZiB0aGUgY29tcG9uZW50cyBhcmUgcHJlY2VkZWQgYnkgYSBzY2hlbWEgaGVhZGVyLlxuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cblxuICAuZGl0by1jb250YWluZXItLW9taXQtcGFkZGluZyA+ICYge1xuICAgIC8vIENsZWFyIG1hcmdpbnMgc2V0IGFib3ZlIGFnYWluIGlmIHBhcmVudCBpcyBvbWl0dGluZyBwYWRkaW5nLlxuICAgIG1hcmdpbjogMDtcbiAgICBtYXgtd2lkdGg6IHVuc2V0O1xuICB9XG5cbiAgLmRpdG8tYnJlYWsge1xuICAgIGZsZXg6IDEwMCU7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFjdGlvbih2YWx1ZSkge1xuICBjb25zdCBtYXRjaCA9IChcbiAgICBpc1N0cmluZyh2YWx1ZSkgJiZcbiAgICB2YWx1ZS5tYXRjaCgvXlxccyooWystXT9cXGQrKVxccypcXC9cXHMqKFsrLV0/XFxkKylcXHMqJC8pXG4gIClcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgWywgZGl2aWRlbmQsIGRpdmlzb3JdID0gbWF0Y2hcbiAgICByZXR1cm4gcGFyc2VGbG9hdChkaXZpZGVuZCkgLyBwYXJzZUZsb2F0KGRpdmlzb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbilcbiAgRGl0b0xhYmVsKFxuICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgKVxuICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgOmlzPVwidHlwZUNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICApXG4gIERpdG9FcnJvcnMoOmVycm9ycz1cImVycm9yc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBpc051bWJlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQsIGFsaWduQm90dG9tLCBvbWl0UGFkZGluZyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHBhcnNlRnJhY3Rpb24gfSBmcm9tICcuLi91dGlscy9tYXRoLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Db250YWluZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdHlwZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KHRoaXMuc2NoZW1hLnR5cGUpXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGxhYmVsICE9PSBmYWxzZSAmJiAoXG4gICAgICAgICAgISFsYWJlbCB8fFxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVMYWJlbHMgJiYgdGhpcy50eXBlQ29tcG9uZW50Py5nZW5lcmF0ZUxhYmVsXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNMYWJlbCA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpIDogbnVsbFxuICAgIH0sXG5cbiAgICBsYWJlbERhdGFQYXRoKCkge1xuICAgICAgLy8gVW5uZXN0ZWQgdHlwZXMgZG9uJ3QgaGF2ZSBhIGRhdGFQYXRoIGZvciB0aGVtc2VsdmVzLCBkb24ndCB1c2UgaXQ6XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLmRhdGFQYXRoIDogbnVsbFxuICAgIH0sXG5cbiAgICBjb21wb25lbnRXaWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRXaWR0aFxuICAgICAgfSxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICAvLyBVc2UgMTAwJSA9PSAxLjAgYXMgZGVmYXVsdCB3aWR0aCB3aGVuIG5vdGhpbmcgaXMgc2V0OlxuICAgICAgICByZXR1cm4gd2lkdGggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gMS4wXG4gICAgICAgICAgOiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqWzw+XT9cXHMqKC4qKSQvKVsxXSAvLyBSZW1vdmUgd2lkdGggb3BlcmF0b3JcbiAgICAgICAgICAgIDogd2lkdGhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFdpZHRoT3BlcmF0b3I6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccyooWzw+XT8pLylbMV0gfHwgbnVsbFxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50VmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZUNvbXBvbmVudD8uZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudERpc2FibGVkOiBnZXRTY2hlbWFBY2Nlc3NvcignZGlzYWJsZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIGRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbnRhaW5lckNsYXNzKCkge1xuICAgICAgY29uc3QgeyBjbGFzczogY29udGFpbmVyQ2xhc3MgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1jb250YWluZXInXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYCR7cHJlZml4fS0tc2luZ2xlYF06IHRoaXMuc2luZ2xlLFxuICAgICAgICBbYCR7cHJlZml4fS0taGFzLWxhYmVsYF06IHRoaXMuaGFzTGFiZWwsXG4gICAgICAgIFtgJHtwcmVmaXh9LS1hbGlnbi1ib3R0b21gXTogYWxpZ25Cb3R0b20odGhpcy5zY2hlbWEpLFxuICAgICAgICBbYCR7cHJlZml4fS0tb21pdC1wYWRkaW5nYF06IG9taXRQYWRkaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGlzU3RyaW5nKGNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgPyB7IFtjb250YWluZXJDbGFzc106IHRydWUgfVxuICAgICAgICAgICAgOiBjb250YWluZXJDbGFzc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNvbXBvbmVudFdpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgY29uc3QgYmFzaXMgPSBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKVxuICAgICAgICA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aClcbiAgICAgICAgICA/IHBhcnNlRmxvYXQod2lkdGgpIC8vIHBlcmNlbnRhZ2VcbiAgICAgICAgICA6IC9bYS16XS8udGVzdCh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpICogMTAwIC8vIGZyYWN0aW9uXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYmFzaXMpID8gYCR7YmFzaXN9JWAgOiBiYXNpc1xuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZSgpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgY29uc3QgZ3JvdyA9IChcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgY29uc3Qgc2hyaW5rID0gdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZsZXg6IGAke2dyb3cgPyAxIDogMH0gJHtzaHJpbmsgPyAxIDogMH0gJHt0aGlzLmNvbXBvbmVudEJhc2lzfWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3MoKSB7XG4gICAgICBjb25zdCBiYXNpc0lzQXV0byA9IHRoaXMuY29tcG9uZW50QmFzaXMgPT09ICdhdXRvJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gVE9ETzogQkVNXG4gICAgICAgICdkaXRvLXNpbmdsZSc6IHRoaXMuc2luZ2xlLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IHRoaXMuY29tcG9uZW50RGlzYWJsZWQsXG4gICAgICAgICdkaXRvLXdpZHRoLWZpbGwnOiAhYmFzaXNJc0F1dG8gfHwgdGhpcy5jb21wb25lbnRXaWR0aCA9PT0gJ2ZpbGwnLFxuICAgICAgICAnZGl0by13aWR0aC1hdXRvJzogYmFzaXNJc0F1dG8sXG4gICAgICAgICdkaXRvLWhhcy1lcnJvcnMnOiAhIXRoaXMuZXJyb3JzXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkVycm9ycyhlcnJvcnMpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1mbG93OiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAvLyBOZWVkZWQgZm9yIGJldHRlciB2ZXJ0aWNhbCBhbGlnbm1lbnQ6XG4gIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICBtYXgtd2lkdGg6IDEwMCU7XG4gIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAvLyBwZXJjZW50YWdlcyBpbiBmbGV4LWJhc2lzIHRvIHdvcmsuXG4gIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gICY6ZW1wdHkge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAmLS1hbGlnbi1ib3R0b20ge1xuICAgIGp1c3RpZnktY29udGVudDogZW5kOyAvLyBUbyBhbGlnbiBjb21wb25lbnRzIHdpdGggYW5kIHdpdGhvdXQgbGFiZWxzLlxuICB9XG5cbiAgJi0tb21pdC1wYWRkaW5nIHtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgPiAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmIDA7XG4gICAgfVxuICB9XG5cbiAgJi0tc2luZ2xlIHtcbiAgICBoZWlnaHQ6IDEwMCU7IC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgYXQgdGhlIGJvdHRvbTtcbiAgfVxufVxuXG4vLyBOT1RFOiBUaGlzIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGAuZGl0by1jb250YWluZXJgIHNvIHRoYXQgb3RoZXJcbi8vIHR5cGUgY29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgYC5kaXRvLXdpZHRoLWZpbGxgIGNsYXNzIChmaWx0ZXIgcHJlY2VkZW5jZSkuXG4uZGl0by1jb21wb25lbnQge1xuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgJi5kaXRvLXJhZGlvLWJ1dHRvbiB7XG4gICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10YWJzXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgKVxuICAgIFJvdXRlckxpbmsuZGl0by1saW5rKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih0YWJTY2hlbWEpXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOnRvPVwieyBoYXNoOiBgIyR7a2V5fWAgfVwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IHNlbGVjdGVkVGFiID09PSBrZXkgfVwiXG4gICAgKSB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJzJywge1xuICBwcm9wczoge1xuICAgIHRhYnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2VsZWN0ZWRUYWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbiR0YWItY29sb3ItYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuJHRhYi1jb2xvci1pbmFjdGl2ZTogJGNvbG9yLWxpZ2h0O1xuJHRhYi1jb2xvci1hY3RpdmU6ICRjb2xvci1saWdodGVzdDtcbiR0YWItY29sb3ItaG92ZXI6ICRjb2xvci13aGl0ZTtcblxuLmRpdG8tdGFicyB7XG4gIC8vIFNlZTogaHR0cHM6Ly9jb2RlcGVuLmlvL3Rob2xleC9wZW4vaHZlQngvXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuXG4gIGEge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1pbmFjdGl2ZTtcbiAgICBwYWRkaW5nOiAkdGFiLXBhZGRpbmctdmVyICR0YWItcGFkZGluZy1ob3I7XG4gICAgbWFyZ2luLWxlZnQ6ICR0YWItbWFyZ2luO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1cztcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1ob3ZlcjtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItYmFja2dyb3VuZDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgOmlzPVwicGFuZWxUYWdcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgRGl0b1NjaGVtYS5kaXRvLXBhbmVsX19zY2hlbWEoXG4gICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gIClcbiAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgaDIuZGl0by1wYW5lbF9faGVhZGVyKDpjbGFzcz1cInsgJ2RpdG8tcGFuZWxfX2hlYWRlci0tc3RpY2t5Jzogc3RpY2t5IH1cIilcbiAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbChcbiAgICAgICAgICA6YnV0dG9ucz1cInBhbmVsQnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgRGl0b0J1dHRvbnMoXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZWwnLCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFuZWxUYWJDb21wb25lbnQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25EYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgcGFuZWxCdXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEucGFuZWxCdXR0b25zKVxuICAgIH0sXG5cbiAgICB0YXJnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudGFyZ2V0IHx8IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgaGFzT3duRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMub3duRGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25EYXRhIHx8IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYSgpIHtcbiAgICAgIGlmICh0aGlzLmhhc093bkRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgYGRhdGFgIGZyb20gdGhlIHNjaGVtYSwgc28gdGhhdCBEaXRvU2NoZW1hIGlzbid0IHVzaW5nIGl0IHRvXG4gICAgICAgIC8vIHByb2R1Y2UgaXRzIG93biBkYXRhLiBTZWUgJGZpbHRlcnMgcGFuZWwgZm9yIG1vcmUgZGV0YWlscyBvbiBkYXRhLlxuICAgICAgICBjb25zdCB7IGRhdGEsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbFRhZygpIHtcbiAgICAgIC8vIFBhbmVscyB0aGF0IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEgbmVlZCB0aGVpciBvd24gZm9ybS5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyAnZm9ybScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICBwYW5lbERhdGFQYXRoKCkge1xuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gZGF0YSwgdGhlbiBpdCBuZWVkcyB0byBwcmVmaXggYWxsXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggaXRzIGRhdGEtcGF0aCwgYnV0IGlmIGl0IHNoYXJlcyBkYXRhIHdpdGggdGhlIHNjaGVtYVxuICAgICAgLy8gY29tcG9uZW50LCB0aGVuIGl0IHNob3VsZCBzaGFyZSB0aGUgZGF0YS1wYXRoIG5hbWUgc3BhY2UgdG9vLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IHRoaXMuZGF0YVBhdGggOiB0aGlzLnNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSksXG5cbiAgICBzdGlja3k6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGlja3knLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBgc2NoZW1hLmRhdGFgIGhhbmRsaW5nIGluIERpdG9TY2hlbWEsXG4gICAgLy8gd2hlcmUgdGhlIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGFjdHVhbCBjb21wb25lbnQuXG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLm93bkRhdGEgPSBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgID8gZGF0YSh0aGlzLmNvbnRleHQpXG4gICAgICAgIDogZGF0YVxuICAgIH1cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSBwYW5lbHMgc28gdGhhdCBvdGhlciBjb21wb25lbnRzIGNhbiBmaW5kIHRoZW0gYnkgdGhlaXJcbiAgICAgIC8vIGRhdGEtcGF0aCwgZS5nLiBpbiBUeXBlTGlzdC5vbkZpbHRlckVycm9ycygpXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lbCh0aGlzLCBhZGQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZWwge1xuICBwYWRkaW5nLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZztcblxuICAmX19oZWFkZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgIGJhY2tncm91bmQ6ICRidXR0b24tY29sb3I7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgICYtLXN0aWNreSB7XG4gICAgICAkbWFyZ2luOiAkaW5wdXQtaGVpZ2h0LWZhY3RvciAqICRsaW5lLWhlaWdodCAqICRmb250LXNpemUtc21hbGwgK1xuICAgICAgICAkZm9ybS1zcGFjaW5nO1xuXG4gICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgdG9wOiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbjtcbiAgICAgIHotaW5kZXg6IDE7XG5cbiAgICAgICYgKyAqIHtcbiAgICAgICAgbWFyZ2luLXRvcDogLSRtYXJnaW47XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgaGVpZ2h0OiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgICB0b3A6IC0kY29udGVudC1wYWRkaW5nO1xuICAgICAgICBtYXJnaW46IC0kYm9yZGVyLXdpZHRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5kaXRvLWJ1dHRvbnMge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6ICRpbnB1dC1wYWRkaW5nLXZlcjtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIH1cbiAgfVxuXG4gICZfX3NjaGVtYSB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudCB7XG4gICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZztcblxuICAgICAgLmRpdG8tY29udGFpbmVyIHtcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgICAgfVxuXG4gICAgICAuZGl0by1vYmplY3Qge1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB9XG5cbiAgICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICAgIC0tYnV0dG9uLW1hcmdpbjogI3skZm9ybS1zcGFjaW5nfTtcblxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgMDtcblxuICAgICAgICAuZGl0by1jb250YWluZXIge1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgIGxhYmVsIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1wYW5lIHtcbiAgICAgIG1hcmdpbjogMCAoLSRmb3JtLXNwYWNpbmctaGFsZik7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gIClcbiAgICBEaXRvUGFuZWwoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmVscycsIHtcbiAgcHJvcHM6IHtcbiAgICBwYW5lbHM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gICAgICAvLyBBbGxvdyBzZXBhcmF0ZSB0YWJzIHRvIHVzZSBwYW5lbHMgb2YgdGhlIHNhbWUgbmFtZSwgYnlcbiAgICAgIC8vIHByZWZpeGluZyB0aGVpciBrZXkgd2l0aCB0aGUgdGFiIG5hbWUuXG4gICAgICByZXR1cm4gdGFiQ29tcG9uZW50ID8gYCR7dGFiQ29tcG9uZW50LnRhYn1fJHtkYXRhUGF0aH1gIDogZGF0YVBhdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lbHMge1xuICBtYXgtd2lkdGg6ICRjb250ZW50LXNpZGViYXItd2lkdGg7XG4gIG1pbi13aWR0aDogY2FsYygkY29udGVudC1zaWRlYmFyLXdpZHRoIC8gMik7XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgdXNlU2xvdHMsIENvbW1lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNWTm9kZUNvbnRlbnQodm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlICYmIGFzQXJyYXkodm5vZGUpLnNvbWUodm5vZGUgPT4gdm5vZGUudHlwZSAhPT0gQ29tbWVudClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Nsb3RDb250ZW50KHNsb3QsIHByb3BzID0ge30pIHtcbiAgc2xvdCA9IGlzU3RyaW5nKHNsb3QpID8gdXNlU2xvdHMoKVtzbG90XSA6IHNsb3RcbiAgcmV0dXJuIGhhc1ZOb2RlQ29udGVudChzbG90Py4ocHJvcHMpKVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8IGhhc1Nsb3RDb250ZW50KCRzbG90cy5kZWZhdWx0KVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICApXG4gICAgRGl0b0NvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICApXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwidm5vZGUgb2YgJHNsb3RzLmRlZmF1bHQ/LigpXCJcbiAgKVxuICAgIC8vLSBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsXG4gICAgLy8tIHNvIGl0IGNhbiBiZSB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc1ZOb2RlQ29udGVudCh2bm9kZSlcIlxuICAgIClcbiAgICAgIERpdG9Wbm9kZSg6dm5vZGU9XCJ2bm9kZVwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBoYXNTbG90Q29udGVudCwgaGFzVk5vZGVDb250ZW50IH0gZnJvbSAnLi4vdXRpbHMvdnVlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9CdXR0b25zJywge1xuICBwcm92aWRlOiB7XG4gICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgYnV0dG9ucyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5cy5cbiAgICAgIGNvbnN0IHsgZGF0YVBhdGgsIGJ1dHRvbnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgICAgID8gT2JqZWN0LnZhbHVlcyhidXR0b25zKS5yZWR1Y2UoKHNjaGVtYXMsIGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNTbG90Q29udGVudCxcbiAgICBoYXNWTm9kZUNvbnRlbnRcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWJ1dHRvbnMge1xuICA+IC5kaXRvLWNvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gU2V0IGBAY2xpY2suc3RvcGAgdG8gcHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsLlxuRGl0b0J1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIFJvdXRlckxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gIClcbiAgRGl0b0NyZWF0ZUJ1dHRvbihcbiAgICB2LWlmPVwiaXNDcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FZGl0QnV0dG9ucycsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNyZWF0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNyZWF0ZVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEuZm9ybSlcbiAgICB9LFxuXG4gICAgaXNEcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RyYWdnYWJsZScpXG4gICAgfSxcblxuICAgIGlzRWRpdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2VkaXRhYmxlJykgJiYgISF0aGlzLmVkaXRQYXRoXG4gICAgfSxcblxuICAgIGlzQ3JlYXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdjcmVhdGFibGUnKSAmJiAhIXRoaXMuY3JlYXRlUGF0aFxuICAgIH0sXG5cbiAgICBpc0RlbGV0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZGVsZXRhYmxlJylcbiAgICB9LFxuXG4gICAgY3JlYXRlQnV0dG9uVGV4dCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBjcmVhdGUgYnV0dG9uIHRocm91Z2ggY3JlYXRhYmxlIG9iamVjdDpcbiAgICAgICAgdGhpcy5zY2hlbWEuY3JlYXRhYmxlPy5sYWJlbCB8fCAoXG4gICAgICAgICAgLy8gQXV0by1nZW5lcmF0ZSBjcmVhdGUgYnV0dG9uIGxhYmVscyBmcm9tIGZyb20gbGFiZWxzIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcyB3aXRoIG9ubHkgb25lIGZvcm06XG4gICAgICAgICAgdGhpcy5mb3JtTGFiZWwgJiZcbiAgICAgICAgICBgJHtjYXBpdGFsaXplKHRoaXMudmVyYnMuY3JlYXRlKX0gJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICkgfHxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzT3B0aW9uKG5hbWUpIHtcbiAgICAgIC8vIFRoZSBvcHRpb25zIG9mIHRoZSBvdXRlciBjb21wb25lbnQgYXJlIHBhc3NlZCB0byB0aGUgYnV0dG9ucyBjb21wb25lbnRcbiAgICAgIC8vIHRocm91Z2ggcHJvcGVydGllcyBgdGhpc1tuYW1lXWAsIGJ1dCBjYW4gYmUgZGlzYWJsZWQgb24gYSBwZXItZm9ybVxuICAgICAgLy8gYmFzaXMgYnkgc2V0dGluZyBgc2NoZW1hW25hbWVdYCB0byBgZmFsc2VgLlxuICAgICAgcmV0dXJuICEhKHRoaXNbbmFtZV0gJiYgdGhpcy5zY2hlbWFbbmFtZV0gIT09IGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gIC8vIE92ZXJyaWRlIGN1cnNvciBmcm9tIGNvbGxhcHNpYmxlIGRpdG8tbGFiZWw6XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgZmxleDogbm9uZTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY3JlYXRlLWJ1dHRvblxuICB0ZW1wbGF0ZShcbiAgICB2LWlmPVwic2hvd1B1bGxkb3duXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93big6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIilcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiXG4gICAgICApXG4gICAgICAgIGEoXG4gICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihmb3JtKVwiXG4gICAgICAgICAgdi1zaG93PVwic2hvdWxkU2hvdyhmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiZ2V0Rm9ybUNsYXNzKGZvcm0sIHR5cGUpXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHR5cGUpXCJcbiAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1lbHNlXG4gICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICBAY2xpY2s9XCJjcmVhdGVJdGVtKGZvcm1zLmRlZmF1bHQpXCJcbiAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ3JlYXRlQnV0dG9uJywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdmVyYjogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGV4dDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgaXNJbmxpbmVkKCkge1xuICAgICAgcmV0dXJuIGlzSW5saW5lZCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgc2hvd1B1bGxkb3duKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZm9ybXMpLmxlbmd0aCA+IDEgfHwgIXRoaXMuZm9ybXMuZGVmYXVsdFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkUmVuZGVyKGZvcm0pICYmICF0aGlzLnNob3VsZERpc2FibGUoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGb3JtQ2xhc3MoZm9ybSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2BkaXRvLXR5cGUtJHt0eXBlfWBdOiB0cnVlLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IHRoaXMuc2hvdWxkRGlzYWJsZShmb3JtKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tY3JlYXRlLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1wdWxsZG93biB7XG4gICAgcmlnaHQ6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY2xpcGJvYXJkLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIHYtaWY9XCJjbGlwYm9hcmRcIlxuKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tY29weShcbiAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJDb3B5IERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25Db3B5XCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJQYXN0ZSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzT2JqZWN0LCBjbG9uZSwgZGVpbmRlbnQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0NsaXBib2FyZCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgY2xpcGJvYXJkOiB7IHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpeENsaXBib2FyZDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIGNvcHkuY2FsbChcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbG9uZShjbGlwYm9hcmREYXRhKVxuICAgIH0sXG5cbiAgICBwYXN0ZURhdGEoKSB7XG4gICAgICBjb25zdCB7IHBhc3RlIH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBwYXN0ZVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIHBhc3RlLmNhbGwoXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY29weTogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGZvY3VzOiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLiR3YXRjaCgnZGF0YScsIHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICh0bywgZnJvbSkgPT4ge1xuICAgICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKHRoaXMuZml4Q2xpcGJvYXJkICYmIGpzb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgbmVlZGVkIG9uIFNhZmFyaSB0byBwcmV2ZW50IGEgc3RyYW5nZSBcIlBhc3RlXCJcbiAgICAgICAgICAvLyBidXR0b24gZnJvbSBhcHBlYXJpbmcgd2hlbiB0aGUgY2xpcGJvYXJkIGlzIGFjY2Vzc2VkICh3aHk/ISkuXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICB0aGlzLmZpeENsaXBib2FyZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBjaGVja0NsaXBib2FyZCgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSAhIXRoaXMuZGF0YVxuICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhKGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkpIC8vIGRvbid0IHJlcG9ydFxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGFjdGl2YXRlIHRoZSBwYXN0ZSBidXR0b24sIGRlcGVuZGluZyBvbiBicm93c2VyczpcbiAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25QYXN0ZSgpIHtcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKHRydWUpIC8vIHJlcG9ydFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5wYXN0ZURhdGEoZGF0YSlcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZywgeyB1cGRhdGVSb290ID0gZmFsc2UsIHVwZGF0ZVZpZXcgPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICghdGhpcy5pc0xvYWRpbmcgXiAhaXNMb2FkaW5nKSB7XG4gICAgICAgIC8vIEJvb2xlYW4geG9yXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICAgICAgaWYgKHVwZGF0ZVJvb3QpIHtcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQucmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlVmlldykge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXRMb2FkaW5nKHRoaXMuaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcbmltcG9ydCB7IHNldERlZmF1bHRWYWx1ZXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiYgKFxuICAgICAgICAgICc8Yj5Ob3RlPC9iPjogdGhlIHBhcmVudCBzdGlsbCBuZWVkcyB0byBiZSBzYXZlZCAnICtcbiAgICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgdmVyYnMgd2l0aCB0aGVpciB0cmFuc2llbnQgdmVyc2lvbnM6XG4gICAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICAgIHNhdmU6ICdhcHBseScsXG4gICAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICAgIGRlbGV0ZWQ6ICdyZW1vdmVkJ1xuICAgICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhXG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHF1ZXJ5IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgIGlmICghY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgIGNvbnN0IHRpdGxlID0gaXNTdHJpbmcoZGF0YT8udHlwZSlcbiAgICAgICAgICAgID8gbGFiZWxpemUoZGF0YS50eXBlKVxuICAgICAgICAgICAgOiAnRXJyb3InXG4gICAgICAgICAgY29uc3QgdGV4dCA9IGRhdGE/Lm1lc3NhZ2UgPz8gZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7IHR5cGU6ICdlcnJvcicsIHRpdGxlLCB0ZXh0IH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgICB9KSxcbiAgICAgIG5vdGlmeUVycm9yID0gZXJyb3IgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGF0aChwYXRoKSB7XG4gIC8vIEZvciBwYXRocyBzdGFyaW5nIHdpdGggYC9gLCB3ZSBjYW4gdXNlIHRoZSBuYXRpdmUgYFVSTCgpYCBjbGFzcyB0byByZXNvbHZlXG4gIC8vIHRoZSBwYXRoLCB3aGljaCB3aWxsIGFsc28gaGFuZGxlIGAuLmAgYW5kIGAuYCBzZWdtZW50czpcbiAgcmV0dXJuIG5ldyBVUkwoYGZpbGU6JHtwYXRofWApLnBhdGhuYW1lXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8tIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLy0gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLy0gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLy0gYW5kIG5vdCBhIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICBSb3V0ZXJWaWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8tIFVzZSBhIDxkaXY+IGZvciBpbmxpbmVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG4gIGNvbXBvbmVudC5kaXRvLXNjcm9sbChcbiAgICB2LXNob3c9XCJpc0FjdGl2ZVwiXG4gICAgOmlzPVwiaXNOZXN0ZWRSb3V0ZSA/ICdkaXYnIDogJ2Zvcm0nXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIERpdG9TY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgICApXG4gICAgLy8tIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLy0gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWRcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIG1lcmdlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzLCBpc09iamVjdFNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvcGF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybScsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbiwgUmVzb3VyY2VNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlZERhdGE6IG51bGwsXG4gICAgICBjbG9uZWREYXRhOiB1bmRlZmluZWQsXG4gICAgICBzb3VyY2VLZXk6IG51bGwsXG4gICAgICBpc0Zvcm06IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIEFkZCBzdWJtaXQgLyBzdWJtaXR0ZWQgdG8gdGhlIHZlcmJzIHJldHVybmVkIGJ5IFJlc291cmNlTWl4aW5cbiAgICAgIC8vIE5PVEU6IFRoZXNlIGdldCBwYXNzZWQgb24gdG8gY2hpbGRyZW4gdGhyb3VnaDpcbiAgICAgIC8vIGBwcm92aWRlKCkgLi4uIHsgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzIH1gIGluIFJlc291cmNlTWl4aW5cbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy5nZXRWZXJicygpXG4gICAgICBjb25zdCB7IGlzQ3JlYXRpbmcsIHByb3ZpZGVzRGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmVyYnMsXG4gICAgICAgIHN1Ym1pdDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZSA6IHZlcmJzLnNhdmUsXG4gICAgICAgIHN1Ym1pdHRlZDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZWQgOiB2ZXJicy5zYXZlZCxcbiAgICAgICAgY2FuY2VsOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWwgOiB2ZXJicy5jbG9zZSxcbiAgICAgICAgY2FuY2VsbGVkOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWxsZWQgOiB2ZXJicy5jbG9zZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCwgcHJvdmlkZSBhbiBlbXB0eSBvYmplY3Qgd2l0aCBqdXN0IHRoZVxuICAgICAgICAgIC8vIHJpZ2h0IHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgICAgdGhpcy5kYXRhIHx8IHsgdHlwZTogdGhpcy50eXBlIH0sXG4gICAgICAgICAgdGhpcy5jb250ZXh0XG4gICAgICAgICkgfHwge31cbiAgICAgICkgLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmlzTXV0YXRpbmcgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNNdXRhdGluZyAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBpc011dGF0aW5nKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIHBlcnNpc3RlbmNlIHVwb24gc3VibWlzc2lvbi5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuICEhdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5wYXJhbSA/PyBudWxsXG4gICAgfSxcblxuICAgIG1ldGhvZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmcgPyAncG9zdCcgOiAncGF0Y2gnXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKClcbiAgICAgIHJldHVybiBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLml0ZW1JZCwgcmVzb3VyY2UpIHx8IHJlc291cmNlXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZSh0aGlzLmlzQ3JlYXRpbmcgPyB0aGlzLnZlcmJzLmNyZWF0ZSA6IHRoaXMudmVyYnMuZWRpdClcbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIC8vIFJldHVybiBkaWZmZXJlbnQgZGF0YSBcImNvbnRhaW5lcnNcIiBiYXNlZCBvbiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgICAgLy8gMS4gY3JlYXRlZERhdGEsIGlmIHdlJ3JlIGluIGEgZm9ybSBmb3IgYSBuZXdseSBjcmVhdGVkIG9iamVjdC5cbiAgICAgIC8vIDIuIGxvYWRlZERhdGEsIGlmIHRoZSBmb3JtIGl0c2VsZiBpcyB0aGUgcm9vdCBvZiB0aGUgZGF0YSAoZS5nLiB3aGVuXG4gICAgICAvLyAgICBkaXJlY3RseSBsb2FkaW5nIGFuIGVkaXRpbmcgcm9vdCkuXG4gICAgICAvLyAzLiBUaGUgZGF0YSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LCB3aGljaCBpdHNlbGYgbWF5IGJlIGVpdGhlciBhXG4gICAgICAvLyAgICB2aWV3IHRoYXQgbG9hZGVkIHRoZSBkYXRhLCBvciBhIGZvcm0gdGhhdCBlaXRoZXIgbG9hZGVkIHRoZSBkYXRhLCBvclxuICAgICAgLy8gICAgYWxzbyBpbmhlcml0ZWQgaXQgZnJvbSBpdHMgcGFyZW50LiBOb3RlIHRoYXQgd2UgdXNlIGEgY2xvbmUgb2YgaXQsXG4gICAgICAvLyAgICBzbywgZGF0YSBjaGFuZ2VzIGFyZW4ndCBhcHBsaWVkIHVudGlsIHNldFNvdXJjZURhdGEoKSBpcyBjYWxsZWQuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVkRGF0YSB8fCB0aGlzLmxvYWRlZERhdGEgfHwgdGhpcy5pbmhlcml0ZWREYXRhIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5kYXRhQ29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhKCkge1xuICAgICAgLy8gUG9zc2libGUgcGFyZW50cyBhcmUgRGl0b0Zvcm0gZm9yIGZvcm1zLCBvciBEaXRvVmlldyBmb3Igcm9vdCBsaXN0cy5cbiAgICAgIC8vIEJvdGggaGF2ZSBhIGRhdGEgcHJvcGVydHkgd2hpY2ggYWJzdHJhY3RzIGF3YXkgbG9hZGluZyBhbmQgaW5oZXJpdGluZ1xuICAgICAgLy8gb2YgZGF0YS5cbiAgICAgIC8vIEZvcm1zIHRoYXQgYXJlIGFib3V0IHRvIGJlIGRlc3Ryb3llZCBkdWUgdG8gbmF2aWdhdGlvbiBsb29zZSB0aGVpclxuICAgICAgLy8gcm91dGUtcmVjb3JkLCBidXQgbWlnaHQgc3RpbGwgdHJpZ2dlciB0aGlzIGdldHRlci4gRmlsdGVyIHRob3NlIG91dC5cbiAgICAgIGxldCBkYXRhID0gdGhpcy5yb3V0ZVJlY29yZCA/IHRoaXMucGFyZW50Um91dGVDb21wb25lbnQuZGF0YSA6IG51bGxcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZGF0YSBieSBzcGxpdHRpbmcgdGhlIGRhdGFQYXRoLCBpdGVyYXRlIHRocm91Z2ggdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkYXRhIGFuZCBsb29rIG5lc3QgY2hpbGQtZGF0YSB1cC5cbiAgICAgICAgY29uc3QgZGF0YVBhcnRzID0gcGFyc2VEYXRhUGF0aChcbiAgICAgICAgICB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50KVxuICAgICAgICApXG4gICAgICAgIC8vIENvbXBhcmUgZGF0YVBhcnRzIGFnYWluc3QgbWF0Y2hlZCByb3V0ZVBhdGggcGFydHMsIHRvIGlkZW50aWZ5IHRob3NlXG4gICAgICAgIC8vIHBhcnRzIHRoYXQgbmVlZCB0byBiZSB0cmVhdGVkIGxpa2UgaWRzIGFuZCBtYXBwZWQgdG8gaW5kaWNlcyBpbiBkYXRhLlxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnJvdXRlUmVjb3JkLnBhdGguc3BsaXQoJy8nKVxuICAgICAgICBjb25zdCByb3V0ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKHBhdGhQYXJ0cy5sZW5ndGggLSBkYXRhUGFydHMubGVuZ3RoKVxuICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuc291cmNlS2V5ID0ga2V5XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGluaGVyaXRlZERhdGEoKSB7XG4gICAgICAvLyBEYXRhIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgYW5kIGNsb25lZCB0byBwcm90ZWN0IGFnYWluc3QgcmVhY3RpdmVcbiAgICAgIC8vIGNoYW5nZXMgdW50aWwgY2hhbmdlcyBhcmUgYXBwbGllZCB0aHJvdWdoIHNldFNvdXJjZURhdGEoKSwgdW5sZXNzXG4gICAgICAvLyBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBkYXRhIGlzIG11dGF0ZWQgZGlyZWN0bHkuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhICYmXG4gICAgICAgIHRoaXMuc291cmNlS2V5ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldXG4gICAgICAgIGlmICghdGhpcy5pc011dGF0aW5nKSB7XG4gICAgICAgICAgLy8gVXNlIGEgdHJpY2sgdG8gc3RvcmUgY2xvbmVkIGluaGVyaXRlZCBkYXRhIGluIGNsb25lZERhdGEsIHRvIG1ha2VcbiAgICAgICAgICAvLyBpdCByZWFjdGl2ZSBhbmQgcHJldmVudCBpdCBmcm9tIGJlaW5nIGNsb25lZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNsb25lZERhdGFcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBpdGVtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgeyBleHRlbmRlZDogdHJ1ZSB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNvdXJjZURhdGE6ICdjbGVhckNsb25lZERhdGEnLFxuICAgIC8vIE5lZWRlZCBmb3IgdGhlICdjcmVhdGUnIHJlZGlyZWN0IGluIGBpbmhlcml0ZWREYXRhKClgIHRvIHdvcms6XG4gICAgY3JlYXRlOiAnc2V0dXBEYXRhJ1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9LFxuXG4gICAgZ2V0RGF0YVBhdGhGcm9tKHJvdXRlKSB7XG4gICAgICAvLyBHZXQgdGhlIGRhdGEgcGF0aCBieSBkZW5vcm1hbGl6ZVBhdGggdGhlIHJlbGF0aXZlIHJvdXRlIHBhdGhcbiAgICAgIHJldHVybiB0aGlzLmFwaS5kZW5vcm1hbGl6ZVBhdGgoXG4gICAgICAgIHRoaXMucGF0aFxuICAgICAgICAgIC8vIERpdG9WaWV3cyBoYXZlIG5lc3RlZCByb3V0ZXMsIHNvIGRvbid0IHJlbW92ZSB0aGVpciBwYXRoLlxuICAgICAgICAgIC5zbGljZSgocm91dGUuaXNWaWV3ID8gMCA6IHJvdXRlLnBhdGgubGVuZ3RoKSArIDEpXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldHVwRGF0YSgpXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhIHx8PSB0aGlzLmNyZWF0ZURhdGEodGhpcy5zY2hlbWEsIHRoaXMudHlwZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgaWYgKHRoaXMuc291cmNlRGF0YSAmJiB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IG1haW5TY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhW3RoaXMuc291cmNlS2V5XSA9IG1haW5TY2hlbWFDb21wb25lbnQuZmlsdGVyRGF0YShkYXRhKVxuICAgICAgICBtYWluU2NoZW1hQ29tcG9uZW50Lm9uQ2hhbmdlKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhZGRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSlcbiAgICAgICAgPyB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiAhIXRoaXMuc291cmNlRGF0YT8ucHVzaChkYXRhKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5jbGVhckRhdGEoKVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMuc2V0RGF0YShudWxsKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXREYXRhKClcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIC8vIHNldERhdGEoKSBpcyBjYWxsZWQgYWZ0ZXIgc3VibWl0IHdoZW4gZGF0YSBoYXMgY2hhbmdlZC5cbiAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIC8vIEZvciBjb21wb25lbnRzIHdpdGggdHJhbnNpZW50IGRhdGEsIG1vZGlmeSB0aGlzLnNvdXJjZURhdGEuXG4gICAgICAgIHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckNsb25lZERhdGEodG8sIGZyb20pIHtcbiAgICAgIC8vIE9ubHkgY2xlYXIgaWYgdGhlIHdhdGNoZWQgc291cmNlRGF0YSBpdHNlbGYgY2hhbmdlcyBpbiB0aGUgZm9ybS5cbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLmNsb25lZERhdGEgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKVxuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQucGF0aClcbiAgICB9LFxuXG4gICAgZ2V0U3VibWl0VmVyYihwcmVzZW50ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHByZXNlbnRcbiAgICAgICAgICA/ICdjcmVhdGUnXG4gICAgICAgICAgOiAnY3JlYXRlZCdcbiAgICAgICAgOiBwcmVzZW50XG4gICAgICAgICAgPyAnc3VibWl0J1xuICAgICAgICAgIDogJ3N1Ym1pdHRlZCdcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbiwgeyB2YWxpZGF0ZSA9IHRydWUsIGNsb3NlRm9ybSA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKHZhbGlkYXRlICYmICF0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdldFZlcmIgPSBwcmVzZW50ID0+IHRoaXMudmVyYnNbdGhpcy5nZXRTdWJtaXRWZXJiKHByZXNlbnQpXVxuXG4gICAgICAvLyBBbGxvdyBidXR0b25zIHRvIG92ZXJyaWRlIGJvdGggbWV0aG9kIGFuZCByZXNvdXJjZSBwYXRoIHRvIHN1Ym1pdCB0bzpcbiAgICAgIGNvbnN0IGJ1dHRvblJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXNvdXJjZSA9IGJ1dHRvblJlc291cmNlIHx8IHRoaXMucmVzb3VyY2VcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlc291cmNlPy5tZXRob2QgfHwgdGhpcy5tZXRob2RcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgbGV0IHN1Y2Nlc3NcbiAgICAgIGlmICghYnV0dG9uUmVzb3VyY2UgJiYgdGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2llbnQoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT5cbiAgICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgPyBgSXRlbSAke2NhcGl0YWxpemUodmVyYil9YFxuICAgICAgICAgICAgICAgIDogYENoYW5nZSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgICAgICAgOiBgQ2hhbmdlcyB0byAke3RoaXMuaXRlbUxhYmVsfSB3ZXJlICR7dmVyYn0uYCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBzZXREYXRhOiB0cnVlLFxuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+XG4gICAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGBTdWNjZXNzZnVsbHkgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0ke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgICAgaWYgKGNsb3NlRm9ybSB8fCBidXR0b24uY2xvc2VGb3JtKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGZvcm0gZWRpdGluZyB0aGUgbmV3bHkgY3JlYXRlZCBpdGVtOlxuICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHBhdGg6IHJlc29sdmVQYXRoKGAke3RoaXMucGF0aH0vLi4vJHtpZH1gKSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRUcmFuc2llbnQoYnV0dG9uLCBfcmVzb3VyY2UsIF9tZXRob2QsIGRhdGEsIHtcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzLFxuICAgICAgbm90aWZ5RXJyb3JcbiAgICB9KSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIGRlZmF1bHQgXCJzdWJtaXR0aW5nXCIgb2YgdHJhbnNpZW50LCBuZXN0ZWQgZGF0YTpcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyB0aGlzLmFkZFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gJ0NvdWxkIG5vdCBzdWJtaXQgdHJhbnNpZW50IGl0ZW0nXG4gICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Gb3JtIGZyb20gJy4vRGl0b0Zvcm0udnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Gb3JtTmVzdGVkJywge1xuICBleHRlbmRzOiBEaXRvRm9ybVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWZvcm0tbmVzdGVkIHtcbiAgJixcbiAgLmRpdG8tc2Nyb2xsIHtcbiAgICAvLyBObyBzY3JvbGxpbmcgaW5zaWRlIG5lc3RlZCBmb3JtcywgYW5kIHByZXZlbnQgb3BlbiAubXVsdGlzZWxlY3QgZnJvbVxuICAgIC8vIGJlaW5nIGNyb3BwZWQuXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZXJyb3JzKFxuICB2LWlmPVwiZXJyb3JzXCJcbilcbiAgdWxcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCJcbiAgICApXG4gICAgICB8IHt7IGVycm9yIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRXJyb3JzJywge1xuICBwcm9wczoge1xuICAgIGVycm9yczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1lcnJvcnMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG5cbiAgdWwge1xuICAgIG1hcmdpbi10b3A6IDFweDtcbiAgICBjb2xvcjogJGNvbG9yLWVycm9yO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNjb3Blc1xuICBSb3V0ZXJMaW5rKFxuICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgOmtleT1cImtleVwiXG4gICAgdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b21cbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NvcGVzJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY29wZXM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFNjb3BlTGluayhzY29wZSkge1xuICAgICAgY29uc3QgcXVlcnkgPSB7IC4uLnRoaXMucXVlcnksIHNjb3BlOiBzY29wZS5uYW1lIH1cbiAgICAgIGlmIChxdWVyeS5wYWdlKSB7XG4gICAgICAgIHF1ZXJ5LnBhZ2UgPSAwXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsocXVlcnkpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NvcGVzIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1idXR0b24ge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAvLyBBIGJpdCBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIGVsbGlwc2lzLCB0byBwcmV2ZW50IHJlcGxhY2luZyBzaG9ydCB3b3Jkc1xuICAgIC8vIHdpdGggZWxsaXBzaXMuXG4gICAgbWluLXdpZHRoOiAzZW07XG4gICAgZmxleDogMCAxIGF1dG87XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbTtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmctbGVmdDogMWVtO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMWVtO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTtcbiAgICB9XG5cbiAgICAmICsgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgIH0gLy8gRG9uJ3QgY292ZXIgdGhlIGZvY3VzZWQgYm9yZGVyIG9mIGJ1dHRvbnM6XG4gICAgJjpmb2N1cyB7XG4gICAgICB6LWluZGV4OiAxO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5QYWdpbmF0aW9uKFxuICB2LW1vZGVsOnBhZ2U9XCJwYWdlXCJcbiAgOnBhZ2VTaXplPVwibGltaXRcIlxuICA6dG90YWw9XCJ0b3RhbFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFnaW5hdGlvbicsIHtcbiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKCt0aGlzLnF1ZXJ5LnBhZ2UgfHwgMCkgKyAxXG4gICAgICB9LFxuXG4gICAgICBzZXQocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgICB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgICAgIHBhZ2U6IHBhZ2UgLSAxXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFNvcnRhYmxlT3B0aW9ucyhmb3JjZUZhbGxiYWNrID0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFuaW1hdGlvbjogMTUwLFxuICAgICAgICBoYW5kbGU6ICcuZGl0by1idXR0b24tZHJhZycsXG4gICAgICAgIGRyYWdDbGFzczogJ2RpdG8tc29ydGFibGUtYWN0aXZlJyxcbiAgICAgICAgY2hvc2VuQ2xhc3M6ICdkaXRvLXNvcnRhYmxlLWNob3NlbicsXG4gICAgICAgIGdob3N0Q2xhc3M6ICdkaXRvLXNvcnRhYmxlLWdob3N0JyxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogJ2RpdG8tc29ydGFibGUtZmFsbGJhY2snLFxuICAgICAgICBmb3JjZUZhbGxiYWNrLFxuICAgICAgICBvblN0YXJ0OiB0aGlzLm9uU3RhcnREcmFnLFxuICAgICAgICBvbkVuZDogdGhpcy5vbkVuZERyYWdcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkVuZERyYWcoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlXG4gICAgICBpZiAob2xkSW5kZXggIT09IG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3QsIHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgY29uc3QgeyBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgICAgLy8gUmVvcmRlciB0aGUgY2hhbmdlZCBlbnRyaWVzIGJ5IHRoZWlyIG9yZGVyIGtleSwgdGFraW5nIHBhZ2luYXRpb25cbiAgICAgICAgLy8gb2Zmc2V0cyBpbnRvIGFjY291bnQ6XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhZ2luYXRpb25SYW5nZT8uWzBdIHx8IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXVtvcmRlcktleV0gPSBpICsgb2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJlZS1pdGVtKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gIH1gXG4gIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4pXG4gIC5kaXRvLXRyZWUtaGVhZGVyKFxuICAgIHYtaWY9XCJsYWJlbFwiXG4gIClcbiAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgKVxuICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwoXG4gICAgICAgIHYtaHRtbD1cImxhYmVsXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtaW5mbyhcbiAgICAgICAgdi1pZj1cImRldGFpbHNcIlxuICAgICAgKSB7eyBkZXRhaWxzIH19XG4gICAgLmRpdG8tdHJlZS1sZWFmKFxuICAgICAgdi1lbHNlXG4gICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbChcbiAgICAgICAgdi1odG1sPVwibGFiZWxcIlxuICAgICAgKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKFxuICAgICAgdi1pZj1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgRGl0b0xhYmVsKFxuICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICApXG4gICAgICBEaXRvVGFibGVDZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgRGl0b0RyYWdnYWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgOm1vZGVsVmFsdWU9XCJ1cGRhdGVPcmRlcihjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0KVwiXG4gICAgOm9wdGlvbnM9XCJnZXRTb3J0YWJsZU9wdGlvbnModHJ1ZSlcIlxuICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgQHVwZGF0ZTptb2RlbFZhbHVlPVwidmFsdWUgPT4gKGNoaWxkcmVuTGlzdCA9IHZhbHVlKVwiXG4gIClcbiAgICBEaXRvVHJlZUl0ZW0oXG4gICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICA6a2V5PVwiZ2V0SXRlbVVpZChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhKVwiXG4gICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgOmRhdGE9XCJpdGVtLmRhdGFcIlxuICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgOmFjdGl2ZT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICA6bGV2ZWw9XCJsZXZlbCArIDFcIlxuICAgIClcbiAgICAvLy0gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgIC8vLSBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UcmVlSXRlbScsIHtcbiAgbWl4aW5zOiBbU29ydGFibGVNaXhpbl0sXG4gIGluamVjdDogWydjb250YWluZXInXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW0FycmF5LCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgb3BlbjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjdGl2ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxldmVsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbmVkOiB0aGlzLm9wZW4gfHwgdGhpcy5zY2hlbWEub3BlblxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIubWV0YVxuICAgIH0sXG5cbiAgICBzdG9yZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5zdG9yZVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5kaXNhYmxlZFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnByb3BlcnRpZXMpXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFNob3VsZCB0aGlzIGJlIG5hbWVkIGBzb3VyY2VTY2hlbWFgIGluc3RlYWQ/IFVzZSBTb3VyY2VNaXhpbj9cbiAgICBjaGlsZHJlblNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5jaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkxpc3QoKSB7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5jaGlsZHJlblNjaGVtYT8ubmFtZVxuICAgICAgcmV0dXJuIG5hbWUgJiYgdGhpcy5kYXRhW25hbWVdXG4gICAgfSxcblxuICAgIGNoaWxkcmVuRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZHJhZ2dhYmxlJywge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgc2NoZW1hOiB0aGlzLmNoaWxkcmVuU2NoZW1hXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG51bUNoaWxkcmVuKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1Qcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcz8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtRW50cmllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLm51bVByb3BlcnRpZXMgKyB0aGlzLm51bUNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuSXRlbXMoKSB7XG4gICAgICBjb25zdCB7IGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QgfSA9IHRoaXNcbiAgICAgIGlmIChjaGlsZHJlblNjaGVtYSAmJiBjaGlsZHJlbkxpc3QpIHtcbiAgICAgICAgY29uc3QgeyBlZGl0UGF0aCB9ID0gdGhpcy5jb250YWluZXJcbiAgICAgICAgY29uc3QgY2hpbGRyZW5PcGVuID0gIXRoaXMucGF0aCAmJiBjaGlsZHJlblNjaGVtYS5vcGVuXG4gICAgICAgIC8vIEJ1aWxkIGEgY2hpbGRyZW4gbGlzdCB3aXRoIGNoaWxkIG1ldGEgaW5mb3JtYXRpb24gZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JkZXIoXG4gICAgICAgICAgY2hpbGRyZW5TY2hlbWEsXG4gICAgICAgICAgY2hpbGRyZW5MaXN0Lm1hcCgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICAgIGNoaWxkcmVuU2NoZW1hLnBhdGggJiZcbiAgICAgICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2NoaWxkcmVuU2NoZW1hLnBhdGh9LyR7aW5kZXh9YFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3BlbiA9IChcbiAgICAgICAgICAgICAgY2hpbGRyZW5PcGVuIHx8XG4gICAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgICAgZWRpdFBhdGguc3RhcnRzV2l0aChwYXRoKSAmJiBwYXRoLmxlbmd0aCA8IGVkaXRQYXRoLmxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgYWN0aXZlID0gZWRpdFBhdGggPT09IHBhdGhcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICAgIGFjdGl2ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXVxuICAgIH0sXG5cbiAgICBkZXRhaWxzKCkge1xuICAgICAgY29uc3QgeyBudW1DaGlsZHJlbiB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbnVtQ2hpbGRyZW4gJiZcbiAgICAgICAgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgICAgbnVtQ2hpbGRyZW4gPT09IDEgPyAnaXRlbScgOiAnaXRlbXMnXG4gICAgICAgIH1gXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZHJhZ2dhYmxlIHx8IHRoaXMuZWRpdGFibGUgfHwgdGhpcy5kZWxldGFibGVcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU3VwcG9ydCBjcmVhdGFibGUhXG4gICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNyZWF0YWJsZSwgZWRpdGFibGUgYW5kIGRlbGV0YWJsZSBvdmVycmlkZXMgb24gdGhlXG4gICAgLy8gYXNzb2NpYXRlZCBmb3JtcywganVzdCBsaWtlIGluIGBUeXBlTGlzdGAgYW5kIGBUeXBlT2JqZWN0YCwgdGhyb3VnaFxuICAgIC8vIGBEaXRvRWRpdEJ1dHRvbnNgLiBJdCB3b3VsZCBiZSBiZXN0IHRvIHVzZSBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIHRvby5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgcHJvcGVydHkubmFtZSlcbiAgICB9LFxuXG4gICAgb25FZGl0KCkge1xuICAgICAgLy8gQWxsIHdlIGdvdCB0byBkbyBpcyBwdXNoIHRoZSByaWdodCBlZGl0IHBhdGggdG8gdGhlIHJvdXRlciwgdGhlIHJlc3RcbiAgICAgIC8vIGlzIGhhbmRsZWQgYnkgb3VyIHJvdXRlcywgYWxsb3dpbmcgcmVsb2FkcyBhcyB3ZWxsLlxuICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICBwYXRoOiBgJHt0aGlzLmNvbnRhaW5lci5wYXRofSR7dGhpcy5wYXRofWAsXG4gICAgICAgIC8vIFByZXNlcnZlIGN1cnJlbnQgcXVlcnlcbiAgICAgICAgcXVlcnk6IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkRlbGV0ZSgpIHtcbiAgICAgIC8vIFRPRE86IEltcGxlbWVudCFcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5vbkNoYW5nZSgpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdHJlZS1pdGVtIHtcbiAgLS1jaGV2cm9uLWluZGVudDogI3skY2hldnJvbi1pbmRlbnR9O1xuXG4gID4gLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgID4gLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgPiAuZGl0by10cmVlLWxlYWYge1xuICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAvLyBwYWRkaW5nIGRpcmVjdGx5IGluc3RlYWQgb2YgaGF2aW5nIGl0IGFjY3VtdWxhdGUgaW4gbmVzdGVkIENTUy5cbiAgICAgIC8vIFRoaXMgd2F5LCB3ZSBjYW4ga2VlcCB0aGUgLmRpdG8tYWN0aXZlIGFyZWEgY292ZXIgdGhlIGZ1bGwgd2lkdGg6XG4gICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKTtcbiAgICB9XG4gIH1cblxuICAuZGl0by10cmVlLWJyYW5jaCB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1icmFuY2gsXG4gIC5kaXRvLXRyZWUtbGVhZiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4OiBhdXRvO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW46IDFweCAwO1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1sYWJlbCxcbiAgLmRpdG8tdHJlZS1pbmZvIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1pbmZvIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbTtcbiAgICBjb2xvcjogcmdiYSgkY29sb3ItYmxhY2ssIDAuMik7XG4gIH1cblxuICAuZGl0by1idXR0b25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWFyZ2luOiAxcHggMCAxcHggMWVtO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXIge1xuICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgIH0gLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICB9XG5cbiAgJi5kaXRvLWRyYWdnaW5nIHtcbiAgICAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgPiAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgcGFkZGluZzogMCAkaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgICBtYXJnaW46IDAgKC0kaW5wdXQtcGFkZGluZy1ob3IpO1xuXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoIHtcbiAgICAgICAgPiAuZGl0by1jaGV2cm9uOjpiZWZvcmUge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tcHJvcGVydGllcyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudDtcblxuICAgID4gdHIge1xuICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICAgIH1cblxuICAgIC5kaXRvLWxhYmVsIHtcbiAgICAgIG1hcmdpbjogMDtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnOiAnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgdHJcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgIClcbiAgICAgIHRoKFxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICAgIClcbiAgICAgICAgUm91dGVyTGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICAgIGN1c3RvbVxuICAgICAgICApXG4gICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRTb3J0Q2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tb3JkZXItYXJyb3dzXG4gICAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgICAgc3BhbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgoXG4gICAgICB2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICAgIC8vLSBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNjc3NcbiAgICAgIHNwYW5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVGFibGVIZWFkJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2x1bW5zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBoYXNFZGl0QnV0dG9uczogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3J0KCkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAodGhpcy5xdWVyeS5vcmRlciB8fCAnJykuc3BsaXQoL1xccysvKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogb3JkZXJbMF0sXG4gICAgICAgIG9yZGVyOiBvcmRlclsxXVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY29sdW1uLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldFNvcnRDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWVcbiAgICAgICAgPyBgZGl0by1zZWxlY3RlZCBkaXRvLW9yZGVyLSR7dGhpcy5zb3J0Lm9yZGVyfWBcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFNvcnRMaW5rKGNvbHVtbikge1xuICAgICAgLy8gVG9nZ2xlIG9yZGVyIGlmIHRoZSBzYW1lIGNvbHVtbiBpcyBjbGlja2VkIGFnYWluLlxuICAgICAgY29uc3Qgb3JkZXIgPVxuICAgICAgICB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgJiYgdGhpcy5zb3J0Lm9yZGVyID09PSAnYXNjJ1xuICAgICAgICAgID8gJ2Rlc2MnXG4gICAgICAgICAgOiAnYXNjJ1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgb3JkZXI6IGAke2NvbHVtbi5uYW1lfSAke29yZGVyfWBcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGFibGUtaGVhZCB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIHRyIHtcbiAgICB0aCB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgICAuZGl0by1idXR0b24ge1xuICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmcsIHNlZSBiZWxvd1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAgICY6ZW1wdHk6OmFmdGVyIHtcbiAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRkKFxuICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4pXG4gIC8vLSBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjZWxsLmNvbXBvbmVudFwiXG4gICAgOmlzPVwiY2VsbC5jb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUNlbGwnLCB7XG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJDZWxsKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgcmVuZGVyIH0gPSB0aGlzLmNlbGxcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtuYW1lXVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwodmFsdWUpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBuZXh0VGljaywgZGVmaW5lQ29tcG9uZW50LCByZWYsIHJlYWN0aXZlLCBoIH0gZnJvbSAndnVlLWRlbWknO1xuaW1wb3J0IHsgdHJ5T25Nb3VudGVkLCB0cnlPblNjb3BlRGlzcG9zZSwgdW5yZWZFbGVtZW50LCBkZWZhdWx0RG9jdW1lbnQsIHRvVmFsdWUsIHVzZVZNb2RlbCB9IGZyb20gJ0B2dWV1c2UvY29yZSc7XG5pbXBvcnQgU29ydGFibGUgZnJvbSAnc29ydGFibGVqcyc7XG5cbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX29ialJlc3QgPSAoc291cmNlLCBleGNsdWRlKSA9PiB7XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKHNvdXJjZSwgcHJvcCkgJiYgZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMClcbiAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgaWYgKHNvdXJjZSAhPSBudWxsICYmIF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKHNvdXJjZSkpIHtcbiAgICAgIGlmIChleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwICYmIF9fcHJvcElzRW51bS5jYWxsKHNvdXJjZSwgcHJvcCkpXG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICB9XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuZnVuY3Rpb24gdXNlU29ydGFibGUoZWwsIGxpc3QsIG9wdGlvbnMgPSB7fSkge1xuICBsZXQgc29ydGFibGU7XG4gIGNvbnN0IF9hID0gb3B0aW9ucywgeyBkb2N1bWVudCA9IGRlZmF1bHREb2N1bWVudCB9ID0gX2EsIHJlc2V0T3B0aW9ucyA9IF9fb2JqUmVzdChfYSwgW1wiZG9jdW1lbnRcIl0pO1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBvblVwZGF0ZTogKGUpID0+IHtcbiAgICAgIG1vdmVBcnJheUVsZW1lbnQobGlzdCwgZS5vbGRJbmRleCwgZS5uZXdJbmRleCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBzdGFydCA9ICgpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSB0eXBlb2YgZWwgPT09IFwic3RyaW5nXCIgPyBkb2N1bWVudCA9PSBudWxsID8gdm9pZCAwIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCkgOiB1bnJlZkVsZW1lbnQoZWwpO1xuICAgIGlmICghdGFyZ2V0KVxuICAgICAgcmV0dXJuO1xuICAgIHNvcnRhYmxlID0gbmV3IFNvcnRhYmxlKHRhcmdldCwgX19zcHJlYWRWYWx1ZXMoX19zcHJlYWRWYWx1ZXMoe30sIGRlZmF1bHRPcHRpb25zKSwgcmVzZXRPcHRpb25zKSk7XG4gIH07XG4gIGNvbnN0IHN0b3AgPSAoKSA9PiBzb3J0YWJsZSA9PSBudWxsID8gdm9pZCAwIDogc29ydGFibGUuZGVzdHJveSgpO1xuICB0cnlPbk1vdW50ZWQoc3RhcnQpO1xuICB0cnlPblNjb3BlRGlzcG9zZShzdG9wKTtcbiAgcmV0dXJuIHsgc3RvcCwgc3RhcnQgfTtcbn1cbmZ1bmN0aW9uIG1vdmVBcnJheUVsZW1lbnQobGlzdCwgZnJvbSwgdG8pIHtcbiAgY29uc3QgYXJyYXkgPSB0b1ZhbHVlKGxpc3QpO1xuICBpZiAodG8gPj0gMCAmJiB0byA8IGFycmF5Lmxlbmd0aCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheS5zcGxpY2UoZnJvbSwgMSlbMF07XG4gICAgbmV4dFRpY2soKCkgPT4gYXJyYXkuc3BsaWNlKHRvLCAwLCBlbGVtZW50KSk7XG4gIH1cbn1cblxuY29uc3QgVXNlU29ydGFibGUgPSAvKiBAX19QVVJFX18gKi8gLyogI19fUFVSRV9fICovIGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IFwiVXNlU29ydGFibGVcIixcbiAgbW9kZWw6IHtcbiAgICAvLyBDb21wYXRpYmxlIHdpdGggdnVlMlxuICAgIHByb3A6IFwibW9kZWxWYWx1ZVwiLFxuICAgIGV2ZW50OiBcInVwZGF0ZTptb2RlbFZhbHVlXCJcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IFwiZGl2XCJcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBzbG90cyB9KSB7XG4gICAgY29uc3QgbGlzdCA9IHVzZVZNb2RlbChwcm9wcywgXCJtb2RlbFZhbHVlXCIpO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZigpO1xuICAgIGNvbnN0IGRhdGEgPSByZWFjdGl2ZSh1c2VTb3J0YWJsZSh0YXJnZXQsIGxpc3QsIHByb3BzLm9wdGlvbnMpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHNsb3RzLmRlZmF1bHQpXG4gICAgICAgIHJldHVybiBoKHByb3BzLnRhZywgeyByZWY6IHRhcmdldCB9LCBzbG90cy5kZWZhdWx0KGRhdGEpKTtcbiAgICB9O1xuICB9XG59KTtcblxuZXhwb3J0IHsgVXNlU29ydGFibGUgfTtcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5Vc2VTb3J0YWJsZShcbiAgdi1pZj1cImRyYWdnYWJsZVwiXG4gIDp0YWc9XCJ0YWdcIlxuICA6bW9kZWxWYWx1ZT1cIm1vZGVsVmFsdWVcIlxuICA6b3B0aW9ucz1cIm9wdGlvbnNcIlxuICBAdXBkYXRlOm1vZGVsVmFsdWU9XCIkZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCAkZXZlbnQpXCJcbilcbiAgc2xvdFxuY29tcG9uZW50KFxuICB2LWVsc2VcbiAgOmlzPVwidGFnXCJcbilcbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQnXG5pbXBvcnQgeyBVc2VTb3J0YWJsZSB9IGZyb20gJ0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRHJhZ2dhYmxlJywge1xuICBjb21wb25lbnRzOiB7IFVzZVNvcnRhYmxlIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkaXYnXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZHJhZ2dhYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBEaXRvVk5vZGUoeyB2bm9kZSB9KSB7XG4gIHJldHVybiB2bm9kZVxufVxuXG5EaXRvVk5vZGUucHJvcHMgPSB7XG4gIHZub2RlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1Zub2RlJywgRGl0b1ZOb2RlKVxuPC9zY3JpcHQ+XG4iLCIvLyBEaXRvVHlwZUNvbXBvbmVudCBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjb21wb25lbnQgZm9yIGFsbCBvdGhlciB0eXBlXG4vLyBjb21wb25lbnRzIGluc2lkZSB0aGUgdHlwZXMvIGZvbGRlci4gVGhlcmUncyBhbHNvIGEgc2VwYXJhdGUgY29uY3JldGVcbi8vIGBEaXRvVHlwZUNvbXBvbmVudC52dWVgIGNvbXBvbmVudCwgdXNlIHRvIHJlbmRlciBgeyB0eXBlOiAnY29tcG9uZW50JyB9YFxuaW1wb3J0IHsgYXNBcnJheSwgY2FtZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyByZWdpc3RlclR5cGVDb21wb25lbnQsIGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZXh0ZW5kczogRGl0b0NvbXBvbmVudCxcbiAgbWl4aW5zOiBbVHlwZU1peGluXSxcblxuICBuYXRpdmVGaWVsZDogZmFsc2UsXG4gIHRleHRGaWVsZDogZmFsc2UsXG4gIC8vIFNldCByZWFzb25hYmxlIGRlZmF1bHRzIGZvciBhbGwgb2YgdGhlc2UgdGhhdCBhcmUgdXNlZCBieSBtb3N0IHR5cGVcbiAgLy8gY29tcG9uZW50cy4gVGhlc2Ugb25seSBuZWVkIGRlZmluaW5nIGluIHN1Yi1jbGFzc2VzIHdoZW4gdGhleSBkaWZmZXIuXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGVmYXVsdE5lc3RlZDogdHJ1ZSxcbiAgZGVmYXVsdFZpc2libGU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IHRydWUsXG4gIGV4Y2x1ZGVWYWx1ZTogZmFsc2UsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogbnVsbCxcbiAgYWxpZ25Cb3R0b206IHRydWUsXG4gIG9taXRQYWRkaW5nOiBmYWxzZSxcblxuICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50LFxuXG4gIGdldDogZ2V0VHlwZUNvbXBvbmVudCxcblxuICByZWdpc3Rlcih0eXBlcywgZGVmaW5pdGlvbiA9IHt9KSB7XG4gICAgdHlwZXMgPSBhc0FycmF5KHR5cGVzKVxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KFxuICAgICAgYERpdG9UeXBlJHtjYW1lbGl6ZSh0eXBlc1swXSwgdHJ1ZSl9YCxcbiAgICAgIGRlZmluaXRpb25cbiAgICApXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5idXR0b24uZGl0by1idXR0b24oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDp0eXBlPVwidHlwZVwiXG4gIDp0aXRsZT1cInRpdGxlXCJcbiAgOmNsYXNzPVwiYnV0dG9uQ2xhc3NcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbikge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydidXR0b24nLCAnc3VibWl0J10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgICBleGNsdWRlVmFsdWU6IHRydWUsXG4gICAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gICAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgdmVyYigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyYnNbdGhpcy5uYW1lXVxuICAgICAgfSxcblxuICAgICAgYnV0dG9uQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcmIgPyBgZGl0by1idXR0b24tJHt0aGlzLnZlcmJ9YCA6IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHRleHQ6IGdldFNjaGVtYUFjY2Vzc29yKCd0ZXh0Jywge1xuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICAgIH0pLFxuXG4gICAgICB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dCB8fCBsYWJlbGl6ZSh0aGlzLnZlcmIpXG4gICAgICB9LFxuXG4gICAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAvLyBAb3ZlcnJpZGVcbiAgICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uQ2xpY2sgfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIHsgb25Gb2N1cywgb25CbHVyLCBvbkNsaWNrIH1cbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlQ29tcG9uZW50Py5zdWJtaXQodGhpcywgb3B0aW9ucylcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZW1pdEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICAgIH0pXG4gICAgICAgIC8vIEhhdmUgYnV0dG9ucyB0aGF0IGRlZmluZSByZXNvdXJjZXMgY2FsbCBgdGhpcy5zdWJtaXQoKWAgYnkgZGVmYXVsdDpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgICBoYXNSZXNvdXJjZSh0aGlzLnNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5pbnB1dC5kaXRvLWNoZWNrYm94KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB0eXBlPVwiY2hlY2tib3hcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2hlY2tib3gge1xuICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0Z1bmN0aW9uLFxuICBpc1Byb21pc2UsXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbTG9hZGluZ01peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgYXN5bmNEYXRhRW50cmllczoge31cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCBuYW1lLCB7XG4gICAgICByZXNvbHZlQ291bnRlciA9IDEsXG4gICAgICAuLi5sb2FkaW5nT3B0aW9uc1xuICAgIH0gPSB7fSkge1xuICAgICAgaWYgKCFpc09iamVjdChzY2hlbWEpKSB7XG4gICAgICAgIHNjaGVtYSA9IHsgZGF0YTogc2NoZW1hIH1cbiAgICAgIH1cbiAgICAgIGxldCB7IGRhdGEgPSB1bmRlZmluZWQsIGRhdGFQYXRoID0gbnVsbCB9ID0gc2NoZW1hXG4gICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYXN5bmMgZGF0YSBsb2FkaW5nIGFscmVhZHkgaW4gcHJvY2Vzcy5cbiAgICAgIGNvbnN0IGFzeW5jRW50cnkgPSAodGhpcy5hc3luY0RhdGFFbnRyaWVzW25hbWVdIHx8PSByZWFjdGl2ZSh7XG4gICAgICAgIGRlcGVuZGVuY3lGdW5jdGlvbjogbnVsbCxcbiAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDAsXG4gICAgICAgIHJlc29sdmVkRGF0YTogbnVsbCxcbiAgICAgICAgcmVzb2x2aW5nOiBmYWxzZVxuICAgICAgfSkpXG4gICAgICAvLyBJZiB0aGUgZGF0YSBjYWxsYmFjayBwcm92aWRlZCBhIGRlcGVuZGVuY3kgZnVuY3Rpb24gd2hlbiBpdCB3YXMgY2FsbGVkLFxuICAgICAgLy8gY2FsIGl0IGluIGV2ZXJ5IGNhbGwgb2YgYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8gZm9yY2UgVnVlIHRvIGtlZXAgdHJhY2tcbiAgICAgIC8vIG9mIHRoZSBhc3luYyBkZXBlbmRlbmNpZXMuXG4gICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbj8uKHRoaXMuY29udGV4dClcblxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPiAwKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSB2YWx1ZSBvbmNlXG4gICAgICAgIC8vIGByZXNvbHZlQ291bnRlcmAgcmVhY2hlcyB6ZXJvLiBDb3VudGluZyBpcyBuZWVkZWQgYmVjYXVzZSBkZXBlbmRpbmdcbiAgICAgICAgLy8gb24gdGhlIHVzZSBvZiBkYXRhIGFuZCByZWFjdGl2aXR5LCBtdWx0aXBsZSBjYWxscyB0byB0aGUgY29tcHV0ZWRcbiAgICAgICAgLy8gZ2V0dGVyIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZGF0YSBpcyBjaGFuZ2luZy4gQ2xlYXJpbmcgdGhlIHJlc29sdmVkXG4gICAgICAgIC8vIGRhdGEgd29ya3MgYmVjYXVzZSBWdWUgY2FjaGVzIHRoZSByZXN1bHQgb2YgY29tcHV0ZWQgZ2V0dGVycyBhbmQgb25seVxuICAgICAgICAvLyByZWV2YWx1YXRlcyBpZiBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VkLiBUaGlzIGlzIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IGEgY2FjaGVkIHZhbHVlIGhlcmUgZG9lc24ndCBibG9jayAvIG92ZXJyaWRlIHJlZXZhbHVhdGlvbjpcbiAgICAgICAgY29uc3QgeyByZXNvbHZlZERhdGEgfSA9IGFzeW5jRW50cnlcbiAgICAgICAgaWYgKC0tYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9PT0gMCkge1xuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZERhdGFcbiAgICAgIH1cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgdGhlIGRhdGEgZnVuY3Rpb24gdHdpY2U6XG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZpbmcpIHtcbiAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICAgIC8vIElmIHRoZSByZXN1bHQgb2YgdGhlIGRhdGEgZnVuY3Rpb24gaXMgYW5vdGhlciBmdW5jdGlvbiwgdGhlbiB0aGVcbiAgICAgICAgICAvLyBmaXJzdCBkYXRhIGZ1bmN0aW9uIGlzIHRoZXJlIHRvIHRyYWNrIGRlcGVuZGVuY2llcyBhbmQgdGhlIHJlYWxcbiAgICAgICAgICAvLyBkYXRhIGxvYWRpbmcgaGFwcGVucyBpbiB0aGUgZnVuY3Rpb24gdGhhdCBpdCByZXR1cm5lZC4gS2VlcCB0cmFja1xuICAgICAgICAgIC8vIGl0IGluIGBkZXBlbmRlbmN5RnVuY3Rpb25gIHNvIGl0IGNhbiBiZSBjYWxsZWQgb24gZWFjaCBjYWxsIG9mXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8ga2VlcCB0aGUgZGVwZW5kZW5jaWVzIGludGFjdCwgYW5kIGNhbGxcbiAgICAgICAgICAvLyB0aGUgZnVuY3Rpb24gdGhhdCBpdCByZXR1cm5lZCBvbmNlIHRvIGdldCB0aGUgYWN0dWFsIGRhdGE6XG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVzdWx0KSkge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24gPSBkYXRhXG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0KHRoaXMuY29udGV4dClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGRhdGEpKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRhdGEgaXMgYXN5bmNocm9ub3VzLCBpdCBjYW4ndCBiZSByZXR1cm5lZCBzdHJhaWdodCBhd2F5LlxuICAgICAgICAgIC8vIEJ1dCB3ZSBjYW4gY2hlYXQgdXNpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhbmQgYHJlc29sdmVkRGF0YWAsXG4gICAgICAgICAgLy8gd2hpY2ggaXMgZ29pbmcgdG8gcmVjZWl2ZSB0aGUgbG9hZGVkIGRhdGEgYXN5bmNocm9ub3VzbHksXG4gICAgICAgICAgLy8gdHJpZ2dlcmluZyBhIHJlY29tcHV0ZSBvZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCBjYWxsc1xuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgLlxuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gdHJ1ZVxuICAgICAgICAgIHRoaXMucmVzb2x2ZURhdGEoZGF0YSwgbG9hZGluZ09wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID0gcmVzb2x2ZUNvdW50ZXJcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gZGF0YVxuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gQ2xlYXIgZGF0YSB1bnRpbCBwcm9taXNlIGlzIHJlc29sdmVkIGFuZCBgcmVzb2x2ZWREYXRhYCBpcyBzZXRcbiAgICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGFQYXRoKSB7XG4gICAgICAgIGRhdGEgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5yb290RGF0YSxcbiAgICAgICAgICBub3JtYWxpemVEYXRhUGF0aChgJHt0aGlzLmRhdGFQYXRofS8ke2RhdGFQYXRofWApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVEYXRhKGxvYWQsIGxvYWRpbmdPcHRpb25zID0ge30pIHtcbiAgICAgIC8vIFVzZSBhIHRpbWVvdXQgdG8gYWxsb3cgYWxyZWFkeSByZXNvbHZlZCBwcm9taXNlcyB0byByZXR1cm4gZGF0YSB3aXRob3V0XG4gICAgICAvLyBzaG93aW5nIGEgbG9hZGluZyBpbmRpY2F0b3IuXG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKSwgMClcbiAgICAgIGxldCBkYXRhID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IChpc0Z1bmN0aW9uKGxvYWQpID8gbG9hZCgpIDogbG9hZClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBlcnJvcilcbiAgICAgIH1cbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuL0RhdGFNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBzZXRUZW1wb3JhcnlJZCwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemUsXG4gIGRlYm91bmNlQXN5bmNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNPcHRpb25zOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gdmFsdWUgPT5cbiAgICAgICAgICB0aGlzLnJlbGF0ZVxuICAgICAgICAgICAgPyB0aGlzLmhhc09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgICAgPyB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICAgICAgPyB0aGlzLnZhbHVlLm1hcChjb252ZXJ0VmFsdWUpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICA6IGNvbnZlcnRWYWx1ZSh0aGlzLnZhbHVlKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gV2hlbiByZWxhdGluZyBhbmQgYXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLi4uXG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiZcbiAgICAgICAgICB0aGlzLmhhc09wdGlvbnMgJiYgKFxuICAgICAgICAgICAgLy8gLi4uaWYgdGhlIHZhbHVlIGlzIGZvcmNlZCB0byBudWxsIGJlY2F1c2UgYSBkaXNhcHBlYXJlZCBvcHRpb24uLi5cbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsICYmIHRoaXMudmFsdWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIC8vIC4uLm9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlZmVyZW5jZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBvcHRpb25cbiAgICAgICAgICAgIC8vIHZhbHVlLCBzbyB0aGF0IGl0J2xsIGhvbGQgYWN0dWFsIGRhdGEsIG5vdCBqdXN0IGEgcmVmZXJlbmNlIGlkLlxuICAgICAgICAgICAgaXNSZWZlcmVuY2UodGhpcy52YWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjb252ZXJ0ID0gdmFsdWUgPT5cbiAgICAgICAgICB0aGlzLnJlbGF0ZVxuICAgICAgICAgICAgPyB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKVxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlLm1hcChjb252ZXJ0KVxuICAgICAgICAgIDogY29udmVydCh2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRPcHRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpXG4gICAgfSxcblxuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHRoaXMuc2NoZW1hLm9wdGlvbnMsICdvcHRpb25zJywge1xuICAgICAgICByZXNvbHZlQ291bnRlcjogMVxuICAgICAgfSkgPz8gW11cbiAgICAgIGlmICghaXNBcnJheShkYXRhKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb3B0aW9ucyBkYXRhLCBzaG91bGQgYmUgYXJyYXk6ICR7ZGF0YX1gKVxuICAgICAgfVxuICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgdGhpcy5oYXNPcHRpb25zID0gZGF0YS5sZW5ndGggPiAwXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzT3B0aW9ucyhkYXRhKVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgLy8gVGhpcyBpcyBvdmVycmlkZGVuIGluIGBUeXBlTXVsdGlzZWxlY3RgIHRvIHJldHVybiB0aGUgYHNlYXJjaGVkT3B0aW9uc2BcbiAgICAgIC8vIHdoZW4gYSBzZWFyY2ggZmlsdGVyIHdhcyBhcHBsaWVkLlxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICByZWxhdGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWxhdGUnLCB7XG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIGByZWxhdGVCeTogJ2lkJ2BcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIFdlIGNhbm5vdCB1c2Ugc2NoZW1hIGFjY2Vzc29yIGNhbGxiYWNrIG1hZ2ljIGZvciBgcmVsYXRlYCBhcyB3ZSBuZWVkXG4gICAgICAvLyB0aGlzIG91dHNpZGUgb2YgdGhlIGNvbXBvbmVudCdzIGxpZmUtc3Bhbiwgc2VlIGBwcm9jZXNzRGF0YSgpYCBiZWxvdy5cbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZ3JvdXBCeTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2dyb3VwQnknLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYG9wdGlvbnMubGFiZWxLZXlgIC8gYG9wdGlvbkxhYmVsS2V5YD9cbiAgICBvcHRpb25MYWJlbDogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMubGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAnbGFiZWwnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGxhYmVsIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ2xhYmVsJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgb3B0aW9ucy52YWx1ZUtleWAgLyBgb3B0aW9uVmFsdWVLZXlgP1xuICAgIG9wdGlvblZhbHVlOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy52YWx1ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQodmFsdWUpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICd2YWx1ZSc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdmFsdWUgfHxcbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJiAnaWQnIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ3ZhbHVlJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IENvbnNpZGVyIG1vdmluZyBzZWFyY2ggdG8gYG9wdGlvbnMuc2VhcmNoYD9cbiAgICBzZWFyY2hGaWx0ZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2gnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHNlYXJjaCkge1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgY29uc3QgeyBmaWx0ZXIsIGRlYm91bmNlIH0gPSBpc0Z1bmN0aW9uKHNlYXJjaClcbiAgICAgICAgICAgID8geyBmaWx0ZXI6IHNlYXJjaCB9XG4gICAgICAgICAgICA6IHNlYXJjaFxuICAgICAgICAgIHJldHVybiBkZWJvdW5jZSA/IGRlYm91bmNlQXN5bmMoZmlsdGVyLCBkZWJvdW5jZSkgOiBmaWx0ZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZ3JvdXBCeUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSA/ICdsYWJlbCcgOiBudWxsXG4gICAgfSxcblxuICAgIGdyb3VwQnlPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSA/ICdvcHRpb25zJyA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE9wdGlvbktleShrZXkpIHtcbiAgICAgIGNvbnN0IFtvcHRpb25dID0gdGhpcy5hY3RpdmVPcHRpb25zXG4gICAgICByZXR1cm4gaXNPYmplY3Qob3B0aW9uKSAmJiBrZXkgaW4gb3B0aW9uID8ga2V5IDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVsYXRlKSB7XG4gICAgICAgICAgLy8gSWYgaWRzIGFyZSBtaXNzaW5nIGFuZCB3ZSB3YW50IHRvIHJlbGF0ZSwgc2V0IHRlbXBvcmFyeSBpZHMuXG4gICAgICAgICAgLy8gTk9URTogV2UgbmVlZCB0byBtb2RpZnkgdGhlIGFjdHVhbCBkYXRhLCBtYWtpbmcgYSBjb3B5IHdvbid0IHdvcmtcbiAgICAgICAgICAvLyBhcyBpdCB3b24ndCBwcm9wYWdhdGUuXG4gICAgICAgICAgLy8gTk9URTogVGhpcyBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSBkYXRhIGlzIGZyb20gdGhlIGdyYXBoIHRoYXRcbiAgICAgICAgICAvLyB3ZSdyZSBjdXJyZW50bHkgZWRpdGluZy5cbiAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoISgnaWQnIGluIG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgc2V0VGVtcG9yYXJ5SWQob3B0aW9uLCAnaWQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cEJ5KSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBlZCA9IHt9XG4gICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMucmVkdWNlKFxuICAgICAgICAgICAgKHJlc3VsdHMsIG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBncm91cCA9IG9wdGlvblt0aGlzLmdyb3VwQnldXG4gICAgICAgICAgICAgIGxldCBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdXG4gICAgICAgICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdID0ge1xuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeUxhYmVsXTogZ3JvdXAsXG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5T3B0aW9uc106IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChlbnRyeSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbnRyeS5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH0sXG5cbiAgICBoYXNPcHRpb24ob3B0aW9uKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICB9LFxuXG4gICAgZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgIGNvbnN0IGZpbmRPcHRpb24gPSAob3B0aW9ucywgdmFsdWUsIGdyb3VwQnkpID0+IHtcbiAgICAgICAgLy8gU2VhcmNoIGZvciB0aGUgb3B0aW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBhbmQgcmV0dXJuIHRoZVxuICAgICAgICAvLyB3aG9sZSBvYmplY3QuXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXBCeSkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kT3B0aW9uKG9wdGlvbi5vcHRpb25zLCB2YWx1ZSwgbnVsbClcbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uVmFsdWVcbiAgICAgICAgPyBmaW5kT3B0aW9uKHRoaXMuYWN0aXZlT3B0aW9ucywgdmFsdWUsIHRoaXMuZ3JvdXBCeSlcbiAgICAgICAgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25WYWx1ZSlcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25WYWx1ZV1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvblZhbHVlKVxuICAgICAgICAgID8gb3B0aW9uVmFsdWUuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBvcHRpb25cbiAgICB9LFxuXG4gICAgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvbkxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uTGFiZWwpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uTGFiZWxdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25MYWJlbClcbiAgICAgICAgICA/IG9wdGlvbkxhYmVsLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogbGFiZWxpemUoYCR7b3B0aW9ufWApXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBpZiAoc2NoZW1hLnJlbGF0ZSkge1xuICAgICAgLy8gRm9yIGludGVybmFsbHkgcmVsYXRpbmcgZGF0YSAoYHNjaGVtYS5vcHRpb25zLmRhdGFQYXRoYCksIHdlIG5lZWQgdG9cbiAgICAgIC8vIHByb2Nlc3MgYm90aCB0aGUgb3B0aW9ucyAoZm9yICcjcmVmJykgYW5kIHRoZSB2YWx1ZSAoJyNpZCcpLlxuICAgICAgLy8gU2VlIGBEYXRhTWl4aW4uaGFuZGxlRGF0YVNjaGVtYSgpYDpcbiAgICAgIGNvbnN0IHBhdGggPSBzY2hlbWEub3B0aW9ucz8uZGF0YVBhdGhcbiAgICAgIGNvbnN0IHJlbGF0ZWREYXRhUGF0aCA9IHBhdGhcbiAgICAgICAgPyBub3JtYWxpemVEYXRhUGF0aChgJHtkYXRhUGF0aH0vJHtwYXRofWApXG4gICAgICAgIDogbnVsbFxuICAgICAgZ3JhcGguYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKVxuICAgICAgaWYgKHJlbGF0ZWREYXRhUGF0aCkge1xuICAgICAgICBncmFwaC5zZXRTb3VyY2VSZWxhdGVkKHJlbGF0ZWREYXRhUGF0aClcbiAgICAgIH1cbiAgICAgIC8vIENvbnZlcnQgcmVsYXRpbmcgb2JqZWN0cyB0byBhIHNoYWxsb3cgY29weSB3aXRoIG9ubHkgdGhlIGlkIGxlZnQuXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIHVzaW5nIGByZWxhdGVCeWA6XG4gICAgICBjb25zdCBwcm9jZXNzUmVsYXRlID0gdmFsdWUgPT4gKHZhbHVlID8geyBpZDogdmFsdWUuaWQgfSA6IHZhbHVlKVxuICAgICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgYm90aCBvYmplY3RzICYgYXJyYXlzLCBlLmcuICdjaGVja2JveGVzJzpcbiAgICAgIHZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc1JlbGF0ZSlcbiAgICAgICAgOiBwcm9jZXNzUmVsYXRlKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tY2hlY2tib3hlcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICApXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94ZXMnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIGRlZmF1bHRWYWx1ZTogW10sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gb3B0aW9uIHx8IFtdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2hlY2tib3hlcyB7XG4gIGxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xuICB9XG5cbiAgLmRpdG8tY2hlY2tib3gge1xuICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb2RlKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImNvZGVcIlxuICA6c3R5bGU9XCJzdHlsZVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBDb2RlRmxhc2sgZnJvbSAnY29kZWZsYXNrJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvZGUnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgYWxpZ25Cb3R0b206IGZhbHNlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgM1xuICAgIH0sXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiBgaGVpZ2h0OiBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgZmxhc2sgPSBuZXcgQ29kZUZsYXNrKHRoaXMuJHJlZnMuY29kZSwge1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMuc2NoZW1hLmxhbmd1YWdlIHx8ICdqYXZhc2NyaXB0JyxcbiAgICAgIHRhYlNpemU6IHRoaXMuc2NoZW1hLmluZGVudFNpemUgfHwgMixcbiAgICAgIGxpbmVOdW1iZXJzOiBmYWxzZVxuICAgIH0pXG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICBsZXQgaWdub3JlVXBkYXRlID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgdGhpcy5kb21Pbih0aGlzLiRyZWZzLmNvZGUucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSwge1xuICAgICAgZm9jdXM6IG9uRm9jdXMsXG4gICAgICBibHVyOiBvbkJsdXJcbiAgICB9KVxuXG4gICAgY29uc3Qgc2V0Q29kZSA9IGNvZGUgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IGZsYXNrLmNvZGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gdHJ1ZVxuICAgICAgICBmbGFzay51cGRhdGVDb2RlKGNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICBvbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxhc2sub25VcGRhdGUodmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVVwZGF0ZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2RlKHZhbHVlIHx8ICcnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRDb2RlKHRoaXMudmFsdWUgfHwgJycpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb2RlIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBGb3IgcHJvcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAuY29kZWZsYXNrIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIC8vIElnbm9yZSB0aGUgcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICB9XG5cbiAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gIC5jb2RlZmxhc2tfX3ByZSB7XG4gICAgLy8gVXNlIHNhbWUgcGFkZGluZyBhcyAuZGl0by1jb2RlXG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gIH1cblxuICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgLmNvZGVmbGFza19fY29kZSxcbiAgLmNvZGVmbGFza19fbGluZXMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ubztcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcbiAgfVxuXG4gIC5jb2RlZmxhc2tfX2xpbmVzIHtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tY29sb3IoXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIC5kaXRvLWlucHV0KDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiKVxuICAgICAgaW5wdXQoXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICApXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBTa2V0Y2hQaWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZUFscGhhPVwiIWFscGhhXCJcbiAgICAgIDpkaXNhYmxlRmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0Q29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aW55Y29sb3IgZnJvbSAndGlueWNvbG9yMidcbmltcG9ydCB7IFNrZXRjaCBhcyBTa2V0Y2hQaWNrZXIgfSBmcm9tICdAbGs3Ny92dWUzLWNvbG9yJ1xuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgVHJpZ2dlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gTk9URTogdnVlMy1jb2xvciBjYWxscyBpdCAnaGV4Jywgd2hpbGUgdGlueWNvbG9yIGNhbGxzIGl0ICdoZXg2J1xuICAgICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICAgIHJnYjogJ3JnYmEnXG4gICAgICAgICAgfVtmb3JtYXRdIHx8XG4gICAgICAgICAgZm9ybWF0XG4gICAgICAgIClcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVtrZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRpbnljb2xvcih2YWx1ZSkudG9TdHJpbmcoZm9ybWF0KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBoZXhWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcih0aGlzLnZhbHVlKVxuICAgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93QWxwaGFgP1xuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0c2A/XG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZm9jdXNlZChmb2N1c2VkKSB7XG4gICAgICBpZiAoIWZvY3VzZWQgJiYgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcihgIyR7dGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZX1gKVxuICAgICAgICBpZiAoY29sb3I/LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBjb2xvci50b1N0cmluZyh0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIC8vIFRPRE86IEVtaXQgJ2lucHV0JyBoZXJlIGluc3RlYWQsIGFuZCAnY2hhbmdlJyBpbiBibHVyLCBsaWtlIG90aGVycy5cbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbiRjb2xvci1zd2F0Y2gtd2lkdGg6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeS1zaXplO1xuJGNvbG9yLXN3YXRjaC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gJGJvcmRlci13aWR0aDtcblxuLmRpdG8tY29sb3Ige1xuICAuZGl0by1pbnB1dCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgaW5wdXQge1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbi1jbGVhciB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoO1xuICB9XG5cbiAgLmRpdG8tY29sb3ItcGlja2VyIHtcbiAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgfVxuXG4gIC5kaXRvLWNvbG9yLXByZXZpZXcge1xuICAgIGJhY2tncm91bmQ6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeTtcbiAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZTtcblxuICAgICYsXG4gICAgZGl2IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHdpZHRoOiAkY29sb3Itc3dhdGNoLXdpZHRoO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXM7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXM7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudChcbiAgOmlzPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gIHYtYmluZD1cIiRwcm9wc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuLy8gVGhpcyBpcyB0aGUgZ2VuZXJhbCBwdXJwb3NlICdjb21wb25lbnQnIHR5cGUsIHdoaWNoIGNhbiByZXNvbHZlIHRvIGFueSBjdXN0b21cbi8vIGNvbXBvbmVudCB0aHJvdWdoIGBzY2hlbWEuY29tcG9uZW50YCwgc2VlIGByZXNvbHZlU2NoZW1hQ29tcG9uZW50KClgLiBUaGlzXG4vLyBjYW4gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyByZXNvbHZlU2NoZW1hQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbXBvbmVudCcsIHtcbiAgLy8gT3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGBkZWZhdWx0VmFsdWU6IG51bGxgIHRvIG5vdCBzZXQgYW55IGRhdGEgZm9yIGN1c3RvbVxuICAvLyBjb21wb25lbnRzLCB1bmxlc3MgdGhleSBwcm92aWRlIGEgZGVmYXVsdCB2YWx1ZS5cbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGFsaWduQm90dG9tOiBmYWxzZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8tIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4uL21peGlucy9EYXRhTWl4aW4uanMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2NvbXB1dGVkJywgJ2RhdGEnLCAnaGlkZGVuJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gICAgZGVmYXVsdFZpc2libGU6IGZhbHNlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICAgIGlmIChzY2hlbWEuZGF0YSB8fCBzY2hlbWEuZGF0YVBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgJ3NjaGVtYScsIHtcbiAgICAgICAgICAgICAgLy8gTW9kaWZ5aW5nIGB0aGlzLmRhdGFgIGJlbG93IHRyaWdnZXJzIGFub3RoZXIgY2FsbCBvZiB0aGVcbiAgICAgICAgICAgICAgLy8gYHZhbHVlYCBnZXR0ZXIsIHNvIHVzZSBhIHZhbHVlIG9mIDIgZm9yIGByZXNvbHZlQ291bnRlcmAgdG9cbiAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSByZXNvbHZlZCBkYXRhIHR3aWNlLlxuICAgICAgICAgICAgICByZXNvbHZlQ291bnRlcjogMlxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMubmFtZV0gPSB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnZGF0ZScsICdkYXRldGltZScsICd0aW1lJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0sXG4gICAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGhlcmUgc28gd2UgZ2V0IHBsYWNlaG9sZGVyIGFkZGVkLiBDb21lIHVwIHdpdGggYVxuICAgIC8vIGJldHRlciB3YXkgdG8gc3VwcG9ydCBhdHRyaWJ1dGVzIHBlciBjb21wb25lbnQgKGEgbGlzdCBvZiBhY3R1YWxseVxuICAgIC8vIHN1cHBvcnRlZCBhdHRyaWJ1dGVzKVxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBkYXRlVmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBkYXRlRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZGF0ZUZvcm1hdCcsIHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGU6ICdkYXRlLXBpY2tlcicsXG4gICAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICAgIH1bdHlwZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBpc0RhdGUodmFsdWUpID8gdmFsdWUudG9JU09TdHJpbmcoKSA6IHZhbHVlXG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsXG4gIHByb2Nlc3NGb3JtcyxcbiAgZ2V0TmFtZWRTY2hlbWFzLFxuICBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLFxuICBnZXRGb3JtU2NoZW1hcyxcbiAgZ2V0Vmlld1NjaGVtYSxcbiAgaXNDb21wYWN0LFxuICBpc0lubGluZWQsXG4gIGlzT2JqZWN0U291cmNlLFxuICBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0FycmF5LFxuICBpc051bWJlcixcbiAgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtSZXNvdXJjZU1peGluLCBTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgZGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAgIHJldHVybiBpc0xpc3RTb3VyY2Uoc2NoZW1hKSA/IFtdIDogbnVsbFxuICB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JhcHBlZFByaW1pdGl2ZXM6IG51bGwsXG4gICAgICBpZ25vcmVSb3V0ZUNoYW5nZTogZmFsc2UsXG4gICAgICB1bndyYXBwaW5nUHJpbWl0aXZlczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBpc09iamVjdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIGlzTGlzdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc0xpc3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICBpc1JlYWR5KCkge1xuICAgICAgLy8gTGlzdHMgdGhhdCBoYXZlIG5vIGRhdGEgYW5kIG5vIGFzc29jaWF0ZWQgcmVzb3VyY2Ugc2hvdWxkIHN0aWxsIHJlbmRlcixcbiAgICAgIC8vIGFzIHRoZXkgbWF5IGJlIGdldHRpbmcgdGhlaXIgZGF0YSBlbHNld2hlcmUsIGUuZy4gYGNvbXB1dGUoKWAuXG4gICAgICByZXR1cm4gdGhpcy5oYXNEYXRhIHx8ICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0luVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld0NvbXBvbmVudFxuICAgIH0sXG5cbiAgICB3cmFwUHJpbWl0aXZlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS53cmFwUHJpbWl0aXZlc1xuICAgIH0sXG5cbiAgICBsaXN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMudmFsdWVcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IHRvIGxpc3QgYXJyYXkuXG4gICAgICAgICAgZGF0YSA9IGRhdGEgIT0gbnVsbCA/IFtkYXRhXSA6IFtdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBnZXRzIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgdW53cmFwcGluZyBpcyBub3QgaGFwcGVuaW5nXG4gICAgICAgICAgLy8gYXQgdGhlIHJvb3QgaW4gYHNldERhdGEoKWAsIGJ1dCBoZXJlIGluc3RlYWQuXG4gICAgICAgICAgZGF0YSA9IHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkgfHwgZGF0YVxuICAgICAgICB9XG4gICAgICAgIGRhdGEgfHw9IFtdXG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgaWYgKHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgdW53cmFwcGluZyBvbmNlIGBsaXN0RGF0YWAgaXMgcmVldmFsdWF0ZWQsIHNvIHNldFxuICAgICAgICAgICAgLy8gdGhpcyB0byBgZmFsc2VgIGFnYWluLiBTZWUgYHdyYXBwZWRQcmltaXRpdmVzYCB3YXRjaGVyIGFib3ZlLlxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhLm1hcCh2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiB2YWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRQcmltaXRpdmVzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyBkYXRhICYmIGRhdGEubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IGRhdGFbMF1cbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvYmplY3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBnbyB0aHJvdWdoIGBsaXN0RGF0YWAgaW50ZXJuYWxseSwgd2hpY2ggZG9lcyBhbGwgdGhlXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgb2YgYHdyYXBQcmltaXRpdmVzYCwgZXRjLlxuICAgICAgICByZXR1cm4gdGhpcy5saXN0RGF0YVswXSB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gZGF0YSA/IFtkYXRhXSA6IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIC8vIFRoZSBzb3VyY2VTY2hlbWEgb2YgYSBsaXN0IGlzIHRoZSBsaXN0J3Mgc2NoZW1hIGl0c2VsZi5cbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBUZWxsIHRoZSBgJHJvdXRlYCB3YXRjaGVyIHRvIGlnbm9yZSB0aGUgY2hhbmdlZCB0cmlnZ2VyZWQgaGVyZTpcbiAgICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcXVlcnksIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2ggfSlcbiAgICAgICAgICAvLyBDaGFuZ2UgdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMsIGJ1dCBkb24ndCB0cmlnZ2VyIGEgcm91dGVcbiAgICAgICAgICAvLyBjaGFuZ2UsIGFzIHRoYXQgd291bGQgY2F1c2UgdGhlIGxpc3QgdG8gcmVsb2FkLlxuICAgICAgICAgIC8vIHJlcGxhY2VSb3V0ZSh7IHF1ZXJ5IH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5IC8vIExldCBnZXRTdG9yZUFjY2Vzc29yKCkgZG8gdGhlIGFjdHVhbCBzZXR0aW5nXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB0b3RhbDogZ2V0U3RvcmVBY2Nlc3NvcigndG90YWwnKSxcblxuICAgIGNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLmNvbHVtbnMpXG4gICAgfSxcblxuICAgIHNjb3BlcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuc2NvcGVzKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0U2NvcGUoKSB7XG4gICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2NvcGVzKSkge1xuICAgICAgICAgIGlmIChzY29wZS5kZWZhdWx0U2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlyc3RcbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpKVxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBsaW5rZWQgdmlldyBzY2hlbWEgaWYgdGhpcyBzb3VyY2UgZWRpdHMgaXQgaXRzIGl0ZW1zIHRocm91Z2hcbiAgICAvLyBhIGxpbmtlZCB2aWV3LlxuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gZ2V0Vmlld1NjaGVtYSh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld1xuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVkICYmICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSkge1xuICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZnJvbS5wYXRoID09PSB0by5wYXRoICYmIGZyb20uaGFzaCA9PT0gdG8uaGFzaCkge1xuICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIC8vIFNraXAgdGhlIGluaXRpYWwgc2V0dGluZyBvZiB3cmFwcGVkUHJpbWl0aXZlcyBhcnJheVxuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgZnJvbSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIHRoZSB3cmFwcGVkUHJpbWl0aXZlcyBjaGFuZ2UsIG1hcCB0aGVpciB2YWx1ZXMgYmFjayB0b1xuICAgICAgICAgIC8vIHRoZSBhcnJheSBvZiBwcmltaXRpdmVzLCBpbiBhIHByaW1pdGl2ZSB3YXkgOilcbiAgICAgICAgICAvLyBCdXQgc2V0IGB1bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVgLCBzbyB0aGUgYGxpc3REYXRhYCBjb21wdXRlZFxuICAgICAgICAgIC8vIHByb3BlcnR5IGtub3dzIGFib3V0IGl0LCB3aGljaCBzZXRzIGl0IHRvIGBmYWxzZWAgYWdhaW4uXG4gICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdG8ubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy50b3RhbCA9IDBcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gV2hlbiBuZXcgZGF0YSBpcyBsb2FkZWQsIHdlIGNhbiBzdG9yZSBpdCByaWdodCBiYWNrIGluIHRoZSBkYXRhIG9mIHRoZVxuICAgICAgLy8gdmlldyBvciBmb3JtIHRoYXQgY3JlYXRlZCB0aGlzIGxpc3QgY29tcG9uZW50LlxuICAgICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBmb3IgbGlzdCBkYXRhOlxuICAgICAgLy8gLSBBcnJheTogYFsuLi5dYFxuICAgICAgLy8gLSBPYmplY3Q6IGB7IHJlc3VsdHM6IFsuLi5dLCB0b3RhbCB9YCwgc2VlIGB1bndyYXBMaXN0RGF0YSgpYFxuICAgICAgaWYgKFxuICAgICAgICAhZGF0YSB8fFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJiBpc0FycmF5KGRhdGEpIHx8XG4gICAgICAgIHRoaXMuaXNPYmplY3RTb3VyY2UgJiYgaXNPYmplY3QoZGF0YSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSBmb3JtYXQgZGlkbid0IG1hdGNoLCBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyBvYmplY3QsIGluIHdoaWNoIGNhc2UgYHRoaXMudmFsdWVgIHdhcyBhbHJlYWR5IHNldCBieVxuICAgICAgICAvLyBgdW53cmFwTGlzdERhdGEoKWAgYW5kIHdlJ3JlIGRvbmUgbm93LlxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSAmJiB0aGlzLmlzSW5WaWV3KSB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sbGVyIGlzIHNlbmRpbmcgZGF0YSBmb3IgYSBmdWxsIG11bHRpLWNvbXBvbmVudCB2aWV3LFxuICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIG5lc3RlZCBsaXN0IGRhdGEuXG4gICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVud3JhcExpc3REYXRhKGRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiZcbiAgICAgICAgaXNPYmplY3QoZGF0YSkgJiZcbiAgICAgICAgaXNOdW1iZXIoZGF0YS50b3RhbCkgJiZcbiAgICAgICAgaXNBcnJheShkYXRhLnJlc3VsdHMpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgQGRpdG9qcy9zZXJ2ZXIgc2VuZHMgZGF0YSBpbiB0aGUgZm9ybSBvZiBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIHJlc3VsdCwgYnV0IHJlbWVtYmVyIHRoZSB0b3RhbCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnRvdGFsXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhLnJlc3VsdHNcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9wZW5TY2hlbWFDb21wb25lbnQoLTEpKVxuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICByZXR1cm4gaXRlbVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtKGl0ZW0pIHtcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdERhdGEgJiYgbGlzdERhdGEuaW5kZXhPZihpdGVtKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGxpc3REYXRhLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxldGVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBjb25zdCBsYWJlbCA9IChcbiAgICAgICAgaXRlbSAmJlxuICAgICAgICB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgaXRlbSwge1xuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGV4dGVuZGVkOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICApXG5cbiAgICAgIGNvbnN0IG5vdGlmeSA9ICgpID0+XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiB0aGlzLmlzVHJhbnNpZW50ID8gJ2luZm8nIDogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgIGAke2xhYmVsfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmAsXG4gICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG5cbiAgICAgIGlmIChcbiAgICAgICAgaXRlbSAmJlxuICAgICAgICB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5kZWxldGV9ICR7bGFiZWx9P2BcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSlcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5tYXRjaChwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSB0aGVyZSwgc28ganVzdCBjYWxsIGBvbkNvbXBsZXRlKClgOlxuICAgICAgICAgICAgICBjYWxsT25Db21wbGV0ZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgY29tcG9uZW50J3MgcGF0aCwgdGhlbiBjYWxsIGBvbkNvbXBsZXRlKClgXzpcbiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyXG4gICAgICAgICAgICAgICAgLnB1c2goeyBwYXRoIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdClcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBLZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIC8vIGVuZCBvZiBgbWV0aG9kc2BcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0xpc3RzIHdpdGggbmVzdGVkIGZvcm1zIGNhbm5vdCBsb2FkIGRhdGEgZnJvbSB0aGVpciBvd24gcmVzb3VyY2VzJ1xuICAgICAgKVxuICAgIH1cbiAgICAvLyBVc2UgZGlmZmVyZW50bHkgbmFtZWQgdXJsIHBhcmFtZXRlcnMgb24gZWFjaCBuZXN0ZWQgbGV2ZWwgZm9yIGlkIGFzXG4gICAgLy8gb3RoZXJ3aXNlIHRoZXkgd291bGQgY2xhc2ggYW5kIG92ZXJyaWRlIGVhY2ggb3RoZXIgaW5zaWRlICRyb3V0ZS5wYXJhbXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgY29uc3QgcGFyYW0gPSBgaWQke2xldmVsICsgMX1gXG4gICAgY29uc3QgbWV0YSA9IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgICBjb25zdCBmb3JtTWV0YSA9IHtcbiAgICAgIC4uLm1ldGEsXG4gICAgICAvLyBXaGVuIGNoaWxkcmVuIGFyZSBmbGF0dGVuZWQgKGUuZy4gdHJlZS1saXN0cyksIGluY2x1ZGUgdGhlIGBmbGF0dGVuYFxuICAgICAgLy8gc2V0dGluZyBhbHNvLCBmb3IgZmxhdHRlbmluZyBiZWxvdy5cbiAgICAgIGZsYXR0ZW4sXG4gICAgICBuZXN0ZWQsXG4gICAgICBwYXJhbVxuICAgIH1cbiAgICBjb25zdCBjaGlsZFJvdXRlcyA9IGF3YWl0IHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3MoY2hpbGRSb3V0ZXMsIGxldmVsICsgMSlcbiAgICB9XG4gICAgLy8gSW5saW5lZCBmb3JtcyBkb24ndCBuZWVkIHRvIGFjdHVhbGx5IGFkZCByb3V0ZXMuXG4gICAgaWYgKGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAhaW5saW5lZCkge1xuICAgICAgY29uc3QgZ2V0UGF0aFdpdGhQYXJhbSA9IChwYXRoLCBwYXJhbSkgPT5cbiAgICAgICAgcGFyYW1cbiAgICAgICAgICA/IHBhdGhcbiAgICAgICAgICAgID8gYCR7cGF0aH0vOiR7cGFyYW19YFxuICAgICAgICAgICAgOiBgOiR7cGFyYW19YFxuICAgICAgICAgIDogcGF0aFxuXG4gICAgICAvLyBMaXN0cyBpbiBzaW5nbGUtY29tcG9uZW50LXZpZXdzIChsZXZlbCA9PT0gMCkgdXNlIHRoZWlyIHZpZXcncyBwYXRoLFxuICAgICAgLy8gd2hpbGUgYWxsIG90aGVycyBuZWVkIHRoZWlyIHBhdGggcHJlZml4ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGF0aDpcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBsZXZlbCA9PT0gMCA/ICcnIDogc2NoZW1hLnBhdGhcbiAgICAgIGNvbnN0IGZvcm1Sb3V0ZSA9IHtcbiAgICAgICAgLy8gT2JqZWN0IHNvdXJjZXMgZG9uJ3QgbmVlZCBpZCBwYXJhbXMgaW4gdGhlaXIgZm9ybSBwYXRocywgYXMgdGhleVxuICAgICAgICAvLyBkaXJlY3RseSBlZGl0IG9uZSBvYmplY3QuXG4gICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgaXNMaXN0U291cmNlKHNjaGVtYSkgJiYgcGFyYW0pLFxuICAgICAgICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50KFxuICAgICAgICAgIG5lc3RlZCA/ICdEaXRvRm9ybU5lc3RlZCcgOiAnRGl0b0Zvcm0nXG4gICAgICAgICksXG4gICAgICAgIG1ldGE6IGZvcm1NZXRhXG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3RTb3VyY2Uoc2NoZW1hKSkge1xuICAgICAgICAvLyBBbHNvIGFkZCBhIHBhcmFtIHJvdXRlLCBzaW1wbHkgdG8gaGFuZGxlICcvY3JlYXRlJyBsaW5rcyB0aGUgc2FtZVxuICAgICAgICAvLyB3YXkgdGhhdCBsaXN0cyBkbywgd2hlcmUgaXQgb3ZlcmxhcHMgd2l0aCA6aWQgZm9yIGl0ZW0gaWRzLlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgLi4uZm9ybVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgcGFyYW0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aCkge1xuICAgICAgICAvLyBKdXN0IHJlZGlyZWN0IGJhY2sgdG8gdGhlIHBhcmVudCB3aGVuIGEgbmVzdGVkIHNvdXJjZSByb3V0ZSBpcyBoaXQuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgICAgIHJlZGlyZWN0OiAnLicsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gUGFydGl0aW9uIGNoaWxkUm91dGVzIGludG8gdGhvc2UgdGhhdCBuZWVkIGZsYXR0ZW5pbmcgKGUuZy4gdHJlZS1saXN0cylcbiAgICAgIC8vIGFuZCB0aG9zZSB0aGF0IGRvbid0LCBhbmQgcHJvY2VzcyBlYWNoIGdyb3VwIHNlcGFyYXRlbHkgYWZ0ZXIuXG4gICAgICBjb25zdCBbZmxhdFJvdXRlcywgc3ViUm91dGVzXSA9IGNoaWxkUm91dGVzLnJlZHVjZShcbiAgICAgICAgKHJlcywgcm91dGUpID0+IHtcbiAgICAgICAgICByZXNbcm91dGUubWV0YS5mbGF0dGVuID8gMCA6IDFdLnB1c2gocm91dGUpXG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9LFxuICAgICAgICBbW10sIFtdXVxuICAgICAgKVxuICAgICAgaWYgKHN1YlJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9ybVJvdXRlLmNoaWxkcmVuID0gc3ViUm91dGVzXG4gICAgICB9XG4gICAgICByb3V0ZXMucHVzaChmb3JtUm91dGUpXG4gICAgICAvLyBBZGQgdGhlIHByZWZpeGVkIGZvcm1Sb3V0ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBmb3IgbmVzdGVkIGxpc3RzLlxuICAgICAgaWYgKGZsYXRSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRSb3V0ZSBvZiBmbGF0Um91dGVzKSB7XG4gICAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgICAgLi4uKGNoaWxkUm91dGUucmVkaXJlY3QgPyBjaGlsZFJvdXRlIDogZm9ybVJvdXRlKSxcbiAgICAgICAgICAgIHBhdGg6IGAke2Zvcm1Sb3V0ZS5wYXRofS8ke2NoaWxkUm91dGUucGF0aH1gLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAuLi5jaGlsZFJvdXRlLm1ldGEsXG4gICAgICAgICAgICAgIGZsYXR0ZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBncmFwaC5hZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMgfSBmcm9tICcuL3NjaGVtYSdcblxuZXhwb3J0IGNvbnN0IGZpbHRlckNvbXBvbmVudHMgPSB7XG4gICd0ZXh0JyhmaWx0ZXIpIHtcbiAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ2NvbnRhaW5zJyxcbiAgICAgICAgdmFsdWU6ICdjb250YWlucydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZXF1YWxzJyxcbiAgICAgICAgdmFsdWU6ICdlcXVhbHMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ3N0YXJ0cyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdzdGFydHMtd2l0aCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZW5kcyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdlbmRzLXdpdGgnXG4gICAgICB9XG4gICAgXVxuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yc1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgd2lkdGg6ICcyLzUnLFxuICAgICAgICAgICAgb3B0aW9uczogaXNBcnJheShmaWx0ZXIub3BlcmF0b3JzKVxuICAgICAgICAgICAgICA/IG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgb3B0aW9uID0+IGZpbHRlci5vcGVyYXRvcnMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBvcHRpb25zLFxuICAgICAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICB0ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgd2lkdGg6IGZpbHRlci5vcGVyYXRvcnMgPyAnMy81JyA6ICdmaWxsJyxcbiAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gICdkYXRlLXJhbmdlJygpIHtcbiAgICAvLyBVc2Ugc2hvcnRlciBkYXRlIGZvcm1hdCBpbiBkYXRlLXJhbmdlIGZpbHRlcnM6XG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHtcbiAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbToge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzEvMicsXG4gICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnMS8yJyxcbiAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGaWx0ZXJzUGFuZWwoYXBpLCBmaWx0ZXJzLCBkYXRhUGF0aCwgcHJveHkpIHtcbiAgY29uc3QgeyBzdGlja3ksIC4uLmZpbHRlclNjaGVtYXMgfSA9IGZpbHRlcnNcbiAgY29uc3QgcGFuZWwgPSB7XG4gICAgdHlwZTogJ3BhbmVsJyxcbiAgICBsYWJlbDogJ0ZpbHRlcnMnLFxuICAgIG5hbWU6ICckZmlsdGVycycsXG4gICAgdGFyZ2V0OiBkYXRhUGF0aCxcbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzdGlja3ksXG5cbiAgICAvLyBOT1RFOiBPbiBwYW5lbHMsIHRoZSBkYXRhKCkgY2FsbGJhY2sgZG9lcyBzb21ldGhpbmcgZWxzZSB0aGFuIG9uIG5vcm1hbFxuICAgIC8vIHNjaGVtYTogSXQgcHJvZHVjZXMgdGhlIGBkYXRhYCBwcm9wZXJ0eSB0byBiZSBwYXNzZWQgdG8gdGhlIHBhbmVsJ3NcbiAgICAvLyBzY2hlbWEsIG5vdCB0aGUgZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgcGFuZWwgY29tcG9uZW50IGRpcmVjdGx5LlxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzRGF0YShcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIHByb3h5LnF1ZXJ5XG4gICAgICApXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHM6IGNyZWF0ZUZpbHRlcnNDb21wb25lbnRzKGZpbHRlclNjaGVtYXMpLFxuICAgIGJ1dHRvbnM6IGNyZWF0ZUZpbHRlcnNCdXR0b25zKGZhbHNlKSxcbiAgICBwYW5lbEJ1dHRvbnM6IGNyZWF0ZUZpbHRlcnNCdXR0b25zKHRydWUpLFxuXG4gICAgZXZlbnRzOiB7XG4gICAgICBjaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGZpbHRlcnMoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRGaWx0ZXJzRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgfSxcblxuICAgICAgaGFzRmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVycy5sZW5ndGggPiAwXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFwcGx5RmlsdGVycygpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgJ2FwcGx5RmlsdGVycygpJyxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmZpbHRlcnNcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHByb3h5LnF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnByb3h5LnF1ZXJ5LFxuICAgICAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXJzLFxuICAgICAgICAgIC8vIENsZWFyIHBhZ2luYXRpb24gd2hlbiBhcHBseWluZyBvciBjbGVhcmluZyBmaWx0ZXJzOlxuICAgICAgICAgIHBhZ2U6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBjbGVhckZpbHRlcnMoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjbGVhckZpbHRlcnMoKScpXG4gICAgICAgIHRoaXMucmVzZXREYXRhKClcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBwYW5lbClcbiAgcmV0dXJuIHBhbmVsXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNCdXR0b25zKHNtYWxsKSB7XG4gIHJldHVybiB7XG4gICAgY2xlYXI6IHtcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgdGV4dDogc21hbGwgPyBudWxsIDogJ0NsZWFyJyxcbiAgICAgIGRpc2FibGVkOiAoeyBzY2hlbWFDb21wb25lbnQgfSkgPT4gIXNjaGVtYUNvbXBvbmVudC5oYXNGaWx0ZXJzLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAvLyBTaW5jZSBwYW5lbCBidXR0b25zIGFyZSBvdXRzaWRlIG9mIHRoZSBzY2hlbWEsIHdlIG5lZWQgdG8gdXNlIHRoZVxuICAgICAgICAgIC8vIHNjaGVtYSBjb21wb25lbnQgcmVjZWl2ZWQgZnJvbSB0aGUgaW5pdGlhbGl6ZSBldmVudCBiZWxvdzpcbiAgICAgICAgICBzY2hlbWFDb21wb25lbnQuY2xlYXJGaWx0ZXJzKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdWJtaXQ6IHtcbiAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgdGV4dDogc21hbGwgPyBudWxsIDogJ0ZpbHRlcicsXG4gICAgICB2aXNpYmxlOiAhc21hbGwsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpIHtcbiAgY29uc3QgY29tcHMgPSB7fVxuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBPYmplY3QudmFsdWVzKGdldE5hbWVkU2NoZW1hcyhmaWx0ZXJzKSB8fCB7fSkpIHtcbiAgICAvLyBTdXBwb3J0IGJvdGggY3VzdG9tIGZvcm1zIGFuZCBkZWZhdWx0IGZpbHRlciBjb21wb25lbnRzLCB0aHJvdWdoIHRoZVxuICAgIC8vIGBmaWx0ZXJDb21wb25lbnRzYCByZWdpc3RyeS4gRXZlbiBmb3IgZGVmYXVsdCBmaWx0ZXJzLCBzdGlsbCB1c2UgdGhlXG4gICAgLy8gcHJvcGVydGllcyBpbiBgZmlsdGVyYCBhcyB0aGUgYmFzZSBmb3IgYGZvcm1gLCBzbyB0aGluZ3MgbGlrZSBgbGFiZWxgXG4gICAgLy8gY2FuIGJlIGNoYW5nZWQgb24gdGhlIHJlc3VsdGluZyBmb3JtLlxuICAgIGNvbnN0IHsgZmlsdGVyOiB0eXBlLCB3aWR0aCwgLi4uZm9ybSB9ID0gZmlsdGVyXG4gICAgY29uc3QgY29tcG9uZW50cyA9IHR5cGVcbiAgICAgID8gZmlsdGVyQ29tcG9uZW50c1t0eXBlXT8uKGZpbHRlcilcbiAgICAgIDogZmlsdGVyLmNvbXBvbmVudHNcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9ybS50eXBlID0gJ2Zvcm0nXG4gICAgICBmb3JtLmNvbXBvbmVudHMgPSB7fVxuICAgICAgLy8gQ29udmVydCBsYWJlbHMgdG8gcGxhY2Vob2xkZXJzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNvbXBvbmVudC5sYWJlbCB8fCBsYWJlbGl6ZShjb21wb25lbnQubmFtZSB8fCBrZXkpXG4gICAgICAgICAgZm9ybS5jb21wb25lbnRzW2tleV0gPSB7XG4gICAgICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFiZWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbXBzW2ZpbHRlci5uYW1lXSA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm0ubGFiZWwsXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgICAgZm9ybSxcbiAgICAgICAgaW5saW5lZDogdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZpbHRlciAnJHtmaWx0ZXIubmFtZX0nOiBVbmtub3duIGZpbHRlciB0eXBlICcke3R5cGV9Jy5gXG4gICAgICApXG4gICAgfVxuICB9XG4gIHJldHVybiBjb21wc1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkge1xuICBjb25zdCBjb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50c1tuYW1lXVxuICByZXR1cm4gY29tcG9uZW50Py5mb3JtPy5jb21wb25lbnRzXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbHRlcnNEYXRhKHNjaGVtYSwgZGF0YSkge1xuICBjb25zb2xlLmxvZyhcbiAgICAnZm9ybWF0RmlsdGVyc0RhdGEoKScsXG4gICAge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZGF0YSksXG4gICAgICBzY2hlbWE6IEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSlcbiAgICB9XG4gIClcbiAgY29uc3QgZmlsdGVycyA9IFtdXG4gIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZW50cnkgPSBkYXRhW25hbWVdXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICAvLyBNYXAgY29tcG9uZW50cyBzZXF1ZW5jZSB0byBhcmd1bWVudHM6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmtleXMoZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpKS5tYXAoXG4gICAgICAgIGtleSA9PiBlbnRyeVtrZXldID8/IG51bGxcbiAgICAgIClcbiAgICAgIC8vIE9ubHkgYXBwbHkgZmlsdGVyIGlmIHRoZXJlIGFyZSBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZW4ndCBudWxsOlxuICAgICAgaWYgKGFyZ3Muc29tZSh2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKGAke25hbWV9OiR7YXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywnKX1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVyc1xufVxuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnNEYXRhKHNjaGVtYSwgcXVlcnkpIHtcbiAgY29uc3QgZmlsdGVycyA9IHt9XG4gIC8vIFNhbWUgYXMgQGRpdG9qcy9zZXJ2ZXIncyBRdWVyeVBhcmFtZXRlcnMuZmlsdGVyOiBUcmFuc2xhdGUgdGhlIHN0cmluZyBkYXRhXG4gIC8vIGZyb20gJHJvdXRlLnF1ZXJ5IGJhY2sgdG8gcGFyYW0gbGlzdHMgcGVyIGZpbHRlcjpcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgYXNBcnJheShxdWVyeS5maWx0ZXIpKSB7XG4gICAgICBjb25zdCBbLCBuYW1lLCBqc29uXSA9IGZpbHRlci5tYXRjaCgvXihcXHcrKTooLiopJC8pXG4gICAgICB0cnkge1xuICAgICAgICBmaWx0ZXJzW25hbWVdID0gYXNBcnJheShKU09OLnBhcnNlKGBbJHtqc29ufV1gKSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIH1cbiAgfVxuICBjb25zdCBmaWx0ZXJzRGF0YSA9IHt9XG4gIGZvciAoY29uc3QgbmFtZSBpbiBzY2hlbWEuY29tcG9uZW50cykge1xuICAgIGNvbnN0IGRhdGEgPSB7fVxuICAgIC8vIElmIHdlIGhhdmUgcmV0cmlldmVkIHBhcmFtcyBmcm9tIHRoZSBxdWVyeSwgZmV0Y2ggdGhlIGFzc29jaWF0ZWRcbiAgICAvLyBmb3JtIGNvbXBvbmVudHMgc28gd2UgY2FuIG1hcCB0aGUgdmFsdWVzIGJhY2sgdG8gb2JqZWN0IGtleXM6XG4gICAgY29uc3QgYXJncyA9IGZpbHRlcnNbbmFtZV1cbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKVxuICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgbGV0IGluZGV4ID0gMFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gYXJnc1tpbmRleCsrXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZpbHRlcnNEYXRhW25hbWVdID0gZGF0YVxuICB9XG4gIHJldHVybiBmaWx0ZXJzRGF0YVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWxpc3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1uYXZpZ2F0aW9uKFxuICAgIHYtaWY9XCJzY29wZXMgfHwgaGFzUGFnaW5hdGlvblwiXG4gIClcbiAgICBEaXRvU2NvcGVzKFxuICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICApXG4gICAgLy8tIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAvLy0gZGl2LCBmb3IgdGhlIGxheW91dCBub3QgdG8gYnJlYWsuLi5cbiAgICAuZGl0by1zcGFjZXIoXG4gICAgICB2LWVsc2UtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICApXG4gICAgRGl0b1BhZ2luYXRpb24oXG4gICAgICB2LWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICA6dG90YWw9XCJ0b3RhbCB8fCAwXCJcbiAgICApXG4gIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtYWx0ZXJuYXRlLWNvbG9ycyc6ICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgfWBcbiAgKVxuICAgIERpdG9UYWJsZUhlYWQoXG4gICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgOmhhc0VkaXRCdXR0b25zPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICBEaXRvRHJhZ2dhYmxlKFxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgOm1vZGVsVmFsdWU9XCJ1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3REYXRhLCBwYWdpbmF0aW9uUmFuZ2UpXCJcbiAgICAgIDpvcHRpb25zPVwiZ2V0U29ydGFibGVPcHRpb25zKGZhbHNlKVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cInZhbHVlID0+IChsaXN0RGF0YSA9IHZhbHVlKVwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIERpdG9UYWJsZUNlbGwoXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29tcG9uZW50KFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmlzPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4IH0pXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICB2LWlmPVwiaGFzQ2VsbEVkaXRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIERpdG9FZGl0QnV0dG9ucyhcbiAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyg6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIilcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgKVxuICAvLy0gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgRGl0b0VkaXRCdXR0b25zLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0Vmlld0VkaXRQYXRoLFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50LFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBjcmVhdGVGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsaXN0Jywge1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbiwgU29ydGFibGVNaXhpbl0sXG4gIGFsaWduQm90dG9tOiBmYWxzZSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgZ2V0UGFuZWxTY2hlbWEoYXBpLCBzY2hlbWEsIGRhdGFQYXRoLCBzY2hlbWFDb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAvLyBBdCB0aGUgdGltZSBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHBhbmVsIHNjaGVtYSwgdGhlIHNjaGVtYUNvbXBvbmVudCBpc1xuICAgICAgLy8gbm90IGZpbGxlZCB5ZXQsIHNvIHdlIGNhbid0IGdldCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAoZGF0YVBhdGgpIHJpZ2h0XG4gICAgICAvLyBhd2F5LiBVc2UgYSBwcm94eSBhbmQgYSBnZXR0ZXIgaW5zdGVhZCwgdG8gZ2V0IGFyb3VuZCB0aGlzOlxuICAgICAgY29uc3QgZ2V0TGlzdENvbXBvbmVudCA9ICgpID0+XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKFxuICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgIGNvbXBvbmVudCA9PiBjb21wb25lbnQudHlwZSA9PT0gJ2xpc3QnXG4gICAgICAgIClcblxuICAgICAgcmV0dXJuIGNyZWF0ZUZpbHRlcnNQYW5lbChhcGksIGZpbHRlcnMsIGRhdGFQYXRoLCB7XG4gICAgICAgIC8vIENyZWF0ZSBhIHNpbXBsZSBwcm94eSB0byBnZXQgLyBzZXQgdGhlIHF1ZXJ5LCBzZWUgZ2V0RmlsdGVyc1BhbmVsKClcbiAgICAgICAgZ2V0IHF1ZXJ5KCkge1xuICAgICAgICAgIHJldHVybiBnZXRMaXN0Q29tcG9uZW50KCk/LnF1ZXJ5XG4gICAgICAgIH0sXG4gICAgICAgIHNldCBxdWVyeShxdWVyeSkge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGdldExpc3RDb21wb25lbnQoKVxuICAgICAgICAgIGNvbnNvbGUubG9nKCdzZXQgcXVlcnknLCAhIWNvbXBvbmVudClcbiAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHVuZGVmaW5lZCB2YWx1ZXMgZm9yIGNvbXBhcmluZyB3aXRoIGVxdWFscygpXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBvYmogPT4gcGlja0J5KG9iaiwgdmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAnc2V0IHF1ZXJ5JyxcbiAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZmlsdGVyKHF1ZXJ5KSksXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGZpbHRlcihjb21wb25lbnQucXVlcnkpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKCFlcXVhbHMoZmlsdGVyKHF1ZXJ5KSwgZmlsdGVyKGNvbXBvbmVudC5xdWVyeSkpKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdsb2FkIGRhdGEnKVxuICAgICAgICAgICAgICBjb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICBjb21wb25lbnQubG9hZERhdGEoZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc1BhZ2luYXRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZSAmJiB0aGlzLnRvdGFsID4gdGhpcy5wYWdpbmF0ZVxuICAgIH0sXG5cbiAgICBoYXNMaXN0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmJ1dHRvblNjaGVtYXMgfHwgdGhpcy5jcmVhdGFibGUpXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGlzdERhdGEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgdGhpcy5lZGl0YWJsZSB8fFxuICAgICAgICAgIHRoaXMuZGVsZXRhYmxlIHx8XG4gICAgICAgICAgdGhpcy5kcmFnZ2FibGVcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDZWxsRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNJbmxpbmVkICYmIHRoaXMuaGFzRWRpdEJ1dHRvbnNcbiAgICB9LFxuXG4gICAgaGFzRXZlbkNvdW50KCkge1xuICAgICAgcmV0dXJuICEodGhpcy5saXN0RGF0YS5sZW5ndGggJSAyKVxuICAgIH0sXG5cbiAgICBudW1Db2x1bW5zKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29sdW1ucyA/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucykubGVuZ3RoIDogMSkgK1xuICAgICAgICAodGhpcy5oYXNDZWxsRWRpdEJ1dHRvbnMgPyAxIDogMClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERhdGFQYXRoKGluZGV4KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgfSxcblxuICAgIGdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpIHx8IHRoaXMucGF0aFxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgcmV0dXJuIGAke3BhdGh9LyR7aWR9YFxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q2VsbENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNlbGwtJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0Q29udGV4dChpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgZGF0YVBhdGg6IHRoaXMuZ2V0RGF0YVBhdGgoaW5kZXgpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZpbHRlckVycm9ycyhlcnJvcnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNEYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsICckZmlsdGVycycpXG4gICAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldFBhbmVsQnlEYXRhUGF0aChmaWx0ZXJzRGF0YVBhdGgpXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWwuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSxcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYS5jb2x1bW5zKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIHByb2Nlc3NcbiAgICAgIClcbiAgICBdKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbGlzdCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1uYXZpZ2F0aW9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBwYWRkaW5nLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZy1oYWxmO1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC5kaXRvLXNjb3BlcyxcbiAgICAuZGl0by1wYWdpbmF0aW9uIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiAwIDEgYXV0bztcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG4gIH1cblxuICAmLmRpdG8tc2luZ2xlIHtcbiAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5EaXRvTGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoXG4gIDpsYWJlbD1cInZhbHVlXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsYWJlbCcsIHtcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgYWxpZ25Cb3R0b206IGZhbHNlXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tbGFiZWwtY29tcG9uZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAgaGVpZ2h0OiAyZW07XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW1hcmt1cCg6aWQ9XCJkYXRhUGF0aFwiKVxuICAuZGl0by1tYXJrdXAtdG9vbGJhcig6ZWRpdG9yPVwiZWRpdG9yXCIpXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgICApXG4gICAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgICA6a2V5PVwibmFtZVwiXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgICAgKVxuICAgICAgICAgIEljb24oOm5hbWU9XCJpY29uXCIpXG4gIEVkaXRvckNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgIHJlZj1cImVkaXRvclwiXG4gICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBFZGl0b3IsIEVkaXRvckNvbnRlbnQsIE1hcmssIGdldE1hcmtBdHRyaWJ1dGVzIH0gZnJvbSAnQHRpcHRhcC92dWUtMydcbi8vIGltcG9ydCB7IHRvZ2dsZU1hcmsgfSBmcm9tICd0aXB0YXAtY29tbWFuZHMnXG4vLyBFc3NlbnRpYWxzOlxuaW1wb3J0IHsgRG9jdW1lbnQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1kb2N1bWVudCdcbmltcG9ydCB7IFRleHQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10ZXh0J1xuLy8gTWFya3M6XG5pbXBvcnQgeyBCb2xkIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYm9sZCdcbmltcG9ydCB7IENvZGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlJ1xuaW1wb3J0IHsgSXRhbGljIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taXRhbGljJ1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWxpbmsnXG5pbXBvcnQgeyBTdHJpa2UgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1zdHJpa2UnXG5pbXBvcnQgeyBVbmRlcmxpbmUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi11bmRlcmxpbmUnXG4vLyBOb2RlczpcbmltcG9ydCB7IEJsb2NrcXVvdGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ibG9ja3F1b3RlJ1xuaW1wb3J0IHsgQ29kZUJsb2NrIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZS1ibG9jaydcbmltcG9ydCB7IEhhcmRCcmVhayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhhcmQtYnJlYWsnXG5pbXBvcnQgeyBIZWFkaW5nIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGVhZGluZydcbmltcG9ydCB7IFBhcmFncmFwaCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXBhcmFncmFwaCdcbmltcG9ydCB7IEhvcml6b250YWxSdWxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taG9yaXpvbnRhbC1ydWxlJ1xuaW1wb3J0IHsgT3JkZXJlZExpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1vcmRlcmVkLWxpc3QnXG5pbXBvcnQgeyBCdWxsZXRMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYnVsbGV0LWxpc3QnXG5pbXBvcnQgeyBMaXN0SXRlbSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWxpc3QtaXRlbSdcbi8vIFRPRE86XG4vLyBpbXBvcnQgeyBJbWFnZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWltYWdlJ1xuLy8gaW1wb3J0IHsgTWVudGlvbiB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLW1lbnRpb24nXG4vLyBpbXBvcnQgeyBDb2RlQmxvY2tIaWdobGlnaHQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlLWJsb2NrLWhpZ2hsaWdodCdcbi8vIGltcG9ydCB7IFRhYmxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUnXG4vLyBpbXBvcnQgeyBUYWJsZUNlbGwgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1jZWxsJ1xuLy8gaW1wb3J0IHsgVGFibGVIZWFkZXIgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1oZWFkZXInXG4vLyBpbXBvcnQgeyBUYWJsZU5vZGVzIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtbm9kZXMnXG4vLyBpbXBvcnQgeyBUYWJsZVJvdyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLXJvdydcbi8vIGltcG9ydCB7IFRhc2tMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFzay1saXN0J1xuLy8gaW1wb3J0IHsgVGFza0l0ZW0gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YXNrLWl0ZW0nXG4vLyBUb29sczpcbmltcG9ydCB7IEhpc3RvcnkgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oaXN0b3J5J1xuXG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQge1xuICBpc0FycmF5LFxuICBpc09iamVjdCxcbiAgdW5kZXJzY29yZSxcbiAgaHlwaGVuYXRlLFxuICBkZWJvdW5jZSxcbiAgY2FtZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtYXJrdXAnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czoge1xuICAgIEVkaXRvckNvbnRlbnQsXG4gICAgSWNvblxuICB9LFxuXG4gIGFsaWduQm90dG9tOiBmYWxzZSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlZGl0b3I6IG51bGwsXG4gICAgICBoZWlnaHQ6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAxMFxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0IHx8IGBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1hcmtCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbWFya3MnLCB7XG4gICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgIGl0YWxpYzogdHJ1ZSxcbiAgICAgICAgdW5kZXJsaW5lOiB0cnVlLFxuICAgICAgICBzdHJpa2U6IHRydWUsXG4gICAgICAgIHNtYWxsOiB0cnVlLFxuICAgICAgICBjb2RlOiB0cnVlLFxuICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgb25DbGljazogZWRpdG9yID0+IHRoaXMub25DbGlja0xpbmsoZWRpdG9yKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBiYXNpY05vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIHBhcmFncmFwaDoge1xuICAgICAgICAgIC8vIERvIG5vdCBzaG93IHRoZSBwYXJhZ3JhcGggY29tbWFuZCBhcyBhY3RpdmUgaWYgYW55IG9mIHRoZSBibG9ja1xuICAgICAgICAgIC8vIGNvbW1hbmRzIGFyZSBhbHNvIGFjdGl2ZTpcbiAgICAgICAgICBpZ25vcmVBY3RpdmU6ICgpID0+XG4gICAgICAgICAgICB0aGlzLm90aGVyTm9kZUJ1dHRvbnMuc29tZShidXR0b24gPT4gYnV0dG9uLmlzQWN0aXZlKVxuICAgICAgICB9LFxuICAgICAgICBoZWFkaW5nOiB7XG4gICAgICAgICAgYXR0cmlidXRlOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG90aGVyTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgfSA9IHRoaXNcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgaW5wdXQ6ICEhZW5hYmxlUnVsZXMsXG4gICAgICAgICAgICAgIHBhc3RlOiAhIWVuYWJsZVJ1bGVzXG4gICAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGVkaXRvciA9PiB7XG4gICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgIHRoaXMudmFsdWUgPSBlZGl0b3IuZ2V0SFRNTCgpXG4gICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH0sIDEwMClcblxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGVkaXRvcilcbiAgICAgIHRoaXMub25JbnB1dCgpXG4gICAgfVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNldENvbnRlbnQodmFsdWUsIGZhbHNlLCB0aGlzLnBhcnNlT3B0aW9ucylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5lZGl0b3IgPSBuZXcgRWRpdG9yKHtcbiAgICAgIC4uLnRoaXMuZWRpdG9yT3B0aW9ucyxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkJsdXIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuZ2V0RXh0ZW5zaW9ucygpLFxuICAgICAgY29udGVudDogdGhpcy52YWx1ZSB8fCAnJ1xuICAgIH0pXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkRyYWdSZXNpemUoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGdldFBvaW50ID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9KSA9PiAoeyB4LCB5IH0pXG5cbiAgICAgIGxldCBwcmV2WSA9IGdldFBvaW50KGV2ZW50KS55XG4gICAgICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMuJHJlZnMuZWRpdG9yLiRlbCkuaGVpZ2h0KVxuXG4gICAgICBjb25zdCBtb3VzZW1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgeSB9ID0gZ2V0UG9pbnQoZXZlbnQpXG4gICAgICAgIGhlaWdodCArPSB5IC0gcHJldllcbiAgICAgICAgcHJldlkgPSB5XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gYCR7TWF0aC5tYXgoaGVpZ2h0LCAwKX1weGBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIG1vdXNlbW92ZSxcblxuICAgICAgICBtb3VzZXVwKGV2ZW50KSB7XG4gICAgICAgICAgbW91c2Vtb3ZlKGV2ZW50KVxuICAgICAgICAgIGhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHVwZGF0ZUVkaXRvck9wdGlvbnMoKSB7XG4gICAgICB0aGlzLmVkaXRvci5zZXRPcHRpb25zKHRoaXMuZWRpdG9yT3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGlja0xpbmsoZWRpdG9yKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgaHJlZjoge1xuICAgICAgICAgICAgdHlwZTogJ3VybCcsXG4gICAgICAgICAgICBsYWJlbDogJ0xpbmsnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgbGFiZWw6ICdUaXRsZSdcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGFwcGx5OiB7IHR5cGU6ICdzdWJtaXQnIH0sXG4gICAgICAgICAgcmVtb3ZlOiB7XG4gICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgY2xpY2soeyBkaWFsb2dDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudC5yZXNvbHZlKG51bGwpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IGdldE1hcmtBdHRyaWJ1dGVzKHRoaXMuZWRpdG9yLnN0YXRlLCAnbGluaycpXG4gICAgICB9KVxuICAgICAgaWYgKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgbGV0IHsgaHJlZiwgdGl0bGUgfSA9IGF0dHJpYnV0ZXNcbiAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICAvLyBTZWUgaWYgYGhyZWZgIGNhbiBiZSBwYXJzZWQgYXMgYSBVUkwsIGFuZCBpZiBub3QsXG4gICAgICAgICAgLy8gcHJlZml4IGl0IHdpdGggYSBkZWZhdWx0IHByb3RvY29sLlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3XG4gICAgICAgICAgICBuZXcgVVJMKGhyZWYpXG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBocmVmID0gYGh0dHBzOi8vJHtocmVmfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnNldExpbmsoeyBocmVmLCB0aXRsZSB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnVuc2V0TGluaygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEV4dGVuc2lvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtzID0ge30sXG4gICAgICAgIG5vZGVzID0ge30sXG4gICAgICAgIHRvb2xzID0ge31cbiAgICAgIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy8gRXNzZW50aWFsczpcbiAgICAgICAgRG9jdW1lbnQsXG4gICAgICAgIFRleHQsXG4gICAgICAgIFBhcmFncmFwaCwgLy8gYnV0dG9uIGNhbiBiZSBjb250cm9sbGVkLCBidXQgbm9kZSBuZWVkcyB0byBiZSBvbi5cblxuICAgICAgICAvLyBNYXJrczogYHNjaGVtYS5tYXJrc2BcbiAgICAgICAgbWFya3MuYm9sZCAmJiBCb2xkLFxuICAgICAgICBtYXJrcy5pdGFsaWMgJiYgSXRhbGljLFxuICAgICAgICBtYXJrcy51bmRlcmxpbmUgJiYgVW5kZXJsaW5lLFxuICAgICAgICBtYXJrcy5zdHJpa2UgJiYgU3RyaWtlLFxuICAgICAgICBtYXJrcy5zbWFsbCAmJiBTbWFsbCxcbiAgICAgICAgbWFya3MuY29kZSAmJiBDb2RlLFxuICAgICAgICBtYXJrcy5saW5rICYmIExpbmtXaXRoVGl0bGUsXG5cbiAgICAgICAgLy8gTm9kZXM6IGBzY2hlbWEubm9kZXNgXG4gICAgICAgIG5vZGVzLmJsb2NrcXVvdGUgJiYgQmxvY2txdW90ZSxcbiAgICAgICAgbm9kZXMuY29kZUJsb2NrICYmIENvZGVCbG9jayxcbiAgICAgICAgSGFyZEJyZWFrLCAvLyBUT0RPOiBTaG91bGQgdGhpcyBhbHdheXMgb24/XG4gICAgICAgIG5vZGVzLmhlYWRpbmcgJiYgSGVhZGluZy5jb25maWd1cmUoeyBsZXZlbHM6IG5vZGVzLmhlYWRpbmcgfSksXG4gICAgICAgIG5vZGVzLmhvcml6b250YWxSdWxlICYmIEhvcml6b250YWxSdWxlLFxuICAgICAgICAobm9kZXMub3JkZXJlZExpc3QgfHwgbm9kZXMuYnVsbGV0TGlzdCkgJiYgTGlzdEl0ZW0sXG4gICAgICAgIG5vZGVzLmJ1bGxldExpc3QgJiYgQnVsbGV0TGlzdCxcbiAgICAgICAgbm9kZXMub3JkZXJlZExpc3QgJiYgT3JkZXJlZExpc3QsXG4gICAgICAgIC8vIFRPRE86XG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIFRvZG9JdGVtLFxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBUb2RvTGlzdCxcblxuICAgICAgICAvLyBUb29sczogYHNjaGVtYS50b29sc2BcbiAgICAgICAgdG9vbHMuaGlzdG9yeSAmJiBIaXN0b3J5XG4gICAgICBdLmZpbHRlcihleHRlbnNpb24gPT4gISFleHRlbnNpb24pXG4gICAgfSxcblxuICAgIGdldEJ1dHRvbnMoc2V0dGluZ3NOYW1lLCBkZXNjcmlwdGlvbnMpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSBbXVxuXG4gICAgICBjb25zdCBhZGRCdXR0b24gPSAoeyBuYW1lLCBpY29uLCBhdHRyaWJ1dGVzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSkgPT4ge1xuICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaWNvbixcbiAgICAgICAgICBpc0FjdGl2ZTogKFxuICAgICAgICAgICAgdGhpcy5lZGl0b3IuaXNBY3RpdmUobmFtZSwgYXR0cmlidXRlcykgJiZcbiAgICAgICAgICAgIChpZ25vcmVBY3RpdmUgPT0gbnVsbCB8fCAhaWdub3JlQWN0aXZlKCkpXG4gICAgICAgICAgKSxcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgdG9nZ2xlJHtjYW1lbGl6ZShuYW1lLCB0cnVlKX1gXG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3IuY29tbWFuZHNba2V5XSkge1xuICAgICAgICAgICAgICBjb25zdCBjb21tYW5kID0gYXR0cmlidXRlcyA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmNoYWluKClba2V5XShhdHRyaWJ1dGVzKS5mb2N1cygpLnJ1bigpXG4gICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICA/IG9uQ2xpY2sodGhpcy5lZGl0b3IsIGF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgOiBjb21tYW5kKGF0dHJpYnV0ZXMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2NoZW1hW3NldHRpbmdzTmFtZV1cbiAgICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGRlc2NyaXB0aW9uXSBvZiBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpKSB7XG4gICAgICAgICAgY29uc3Qgc2V0dGluZ05hbWUgPSBbJ3VuZG8nLCAncmVkbyddLmluY2x1ZGVzKGtleSkgPyAnaGlzdG9yeScgOiBrZXlcbiAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nbc2V0dGluZ05hbWVdXG4gICAgICAgICAgY29uc3QgbmFtZSA9IHVuZGVyc2NvcmUoa2V5KVxuICAgICAgICAgIGNvbnN0IGljb24gPSBoeXBoZW5hdGUoa2V5KVxuICAgICAgICAgIGlmIChzZXR0aW5nKSB7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkZXNjcmlwdGlvbikpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBhdHRyaWJ1dGUsIHZhbHVlcywgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0gPSBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgW2F0dHJpYnV0ZV06IHZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVBY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwuc2Nyb2xsSW50b1ZpZXc/LigpXG4gICAgICB0aGlzLmVkaXRvci5mb2N1cygpXG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBTbWFsbCA9IE1hcmsuY3JlYXRlKHtcbiAgbmFtZTogJ3NtYWxsJyxcblxuICBwYXJzZUhUTUwoKSB7XG4gICAgcmV0dXJuIFt7IHRhZzogJ3NtYWxsJyB9XVxuICB9LFxuXG4gIHJlbmRlckhUTUwoKSB7XG4gICAgcmV0dXJuIFsnc21hbGwnLCAwXVxuICB9LFxuXG4gIGFkZENvbW1hbmRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZXRTbWFsbDpcbiAgICAgICAgYXR0cmlidXRlcyA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnNldE1hcmsodGhpcy5uYW1lLCBhdHRyaWJ1dGVzKVxuICAgICAgICB9LFxuICAgICAgdG9nZ2xlU21hbGw6XG4gICAgICAgIGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy50b2dnbGVNYXJrKHRoaXMubmFtZSwgYXR0cmlidXRlcylcbiAgICAgICAgfSxcbiAgICAgIHVuc2V0U21hbGw6XG4gICAgICAgICgpID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMudW5zZXRNYXJrKHRoaXMubmFtZSlcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuY29uc3QgTGlua1dpdGhUaXRsZSA9IExpbmsuZXh0ZW5kKHtcbiAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgc2NoZW1hOiB7XG4gICAgYXR0cnM6IHtcbiAgICAgIGhyZWY6IHtcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfSxcbiAgICAgIHRpdGxlOiB7XG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFyc2VIVE1MKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHRhZzogJ2EnLFxuICAgICAgICAgIGdldEF0dHJzOiBlbGVtZW50ID0+ICh7XG4gICAgICAgICAgICBocmVmOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpLFxuICAgICAgICAgICAgdGl0bGU6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICByZW5kZXJIVE1MKG5vZGUpIHtcbiAgICAgIHJldHVybiBbJ2EnLCBub2RlLmF0dHJzLCAwXVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW1hcmt1cCB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1yZXNpemUge1xuICAgIEBleHRlbmQgJWljb24tcmVzaXplO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogdW5zZXQ7XG4gICAgbGVmdDogdW5zZXQ7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIHdpZHRoOiAxZW07XG4gICAgaGVpZ2h0OiAxZW07XG4gIH1cblxuICAuUHJvc2VNaXJyb3Ige1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG5cbiAgLmRpdG8tbWFya3VwLWVkaXRvciB7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgIC8vIE1vdmUgcGFkZGluZyBcImluc2lkZVwiIGVkaXRvciB0byBjb3JyZWN0bHkgcG9zaXRpb24gc2Nyb2xsYmFyXG4gICAgbWFyZ2luLXJpZ2h0OiAtJGlucHV0LXBhZGRpbmctaG9yO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbnMtdG9vbGJhciB7XG4gICAgbWFyZ2luOiAkaW5wdXQtcGFkZGluZy12ZXIgMDtcbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIHAsXG4gIHVsLFxuICBvbCxcbiAgcHJlLFxuICBibG9ja3F1b3RlIHtcbiAgICBtYXJnaW46IDFyZW0gMDtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICBoMSxcbiAgaDIsXG4gIGgzIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIGgxIHtcbiAgICBmb250LXNpemU6IDEuNHJlbTtcbiAgfVxuXG4gIGgyIHtcbiAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgfVxuXG4gIHVsIHtcbiAgICBsaXN0LXN0eWxlOiBkaXNjO1xuICB9XG5cbiAgY29kZSB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vO1xuICB9XG5cbiAgcHJlIHtcbiAgICBwYWRkaW5nOiAwLjdyZW0gMXJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyO1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIGNvZGUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgcCBjb2RlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogMCAwLjNyZW07XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gIH1cblxuICBhIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgY29sb3I6IGJsdWU7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cblxuICB1bCxcbiAgb2wge1xuICAgIHBhZGRpbmctbGVmdDogMnJlbTtcbiAgfVxuXG4gIGxpIHtcbiAgICAmID4gcCxcbiAgICAmID4gb2wsXG4gICAgJiA+IHVsIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gIH1cblxuICBibG9ja3F1b3RlIHtcbiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICRjb2xvci1saWdodGVyO1xuICAgIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbXVsdGlzZWxlY3QoXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAnZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZSc6IG11bHRpcGxlXG4gIH1gXG4pXG4gIFZ1ZU11bHRpc2VsZWN0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgIDpjbGFzcz1cInsgJ211bHRpc2VsZWN0LS1zaG93LWhpZ2hsaWdodCc6IHNob3dIaWdobGlnaHQgfVwiXG4gICAgOnNob3dMYWJlbHM9XCJmYWxzZVwiXG4gICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgIHRhZ1BsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIlxuICAgIDpvcHRpb25zPVwicG9wdWxhdGUgJiYgYWN0aXZlT3B0aW9ucyB8fCBbXVwiXG4gICAgOmN1c3RvbUxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgIDp0cmFja0J5PVwib3B0aW9uVmFsdWVcIlxuICAgIDpncm91cExhYmVsPVwiZ3JvdXBCeUxhYmVsXCJcbiAgICA6Z3JvdXBWYWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgIDppbnRlcm5hbFNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpwcmVzZXJ2ZVNlYXJjaD1cIiEhc2VhcmNoRmlsdGVyXCJcbiAgICA6Y2xlYXJPblNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbG9zZU9uU2VsZWN0PVwiIXN0YXlPcGVuXCJcbiAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgQG9wZW49XCJvbk9wZW5cIlxuICAgIEBjbG9zZT1cIm9uQ2xvc2VcIlxuICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIEBjbGljaz1cImNsZWFyXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcbmltcG9ydCBWdWVNdWx0aXNlbGVjdCBmcm9tICd2dWUtbXVsdGlzZWxlY3QnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNCb29sZWFuIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtdWx0aXNlbGVjdCcsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcbiAgY29tcG9uZW50czogeyBWdWVNdWx0aXNlbGVjdCB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTW91bnRlZDogZmFsc2UsXG4gICAgICBzZWFyY2hlZE9wdGlvbnM6IG51bGwsXG4gICAgICBwb3B1bGF0ZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/ICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pXG4gICAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgLy8gSWYgYW4gb3B0aW9uIGNhbm5vdCBiZSBmb3VuZCwgd2UgbWF5IGJlIGluIHRhZ2dhYmxlIG1vZGUgYW5kXG4gICAgICAgICAgICAgICAgLy8gY2FuIGFkZCBpdC5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiAoXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB8fCB0aGlzLmFkZFRhZ09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBvcHRpb25zIHRoYXQgd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgICAgICAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSBkaXNwbGF5IGFuIGVycm9yIGluc3RlYWQ/XG4gICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRPcHRpb25cbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBvcHRpb25zIG9iamVjdCwgc2luY2UgdnVlLW11bHRpc2VsZWN0IGNhbid0IG1hcCB0aGF0XG4gICAgICAgIC8vIGl0c2VsZiB1bmZvcnR1bmF0ZWx5LiBgdHJhY2stYnlgIGlzIHVzZWQgZm9yIDprZXkgbWFwcGluZyBpdCBzZWVtcy5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKG9wdGlvbiB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZWRPcHRpb25zIHx8IHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzZWFyY2hhYmxlOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgdGFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCd0YWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc3RheU9wZW46IGdldFNjaGVtYUFjY2Vzc29yKCdzdGF5T3BlbicsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXIoKSB7XG4gICAgICBsZXQgeyBwbGFjZWhvbGRlciwgc2VhcmNoYWJsZSwgdGFnZ2FibGUgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAoaXNCb29sZWFuKHBsYWNlaG9sZGVyKSkge1xuICAgICAgICBwbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyID8gdW5kZWZpbmVkIDogbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBzZWFyY2hhYmxlICYmIHRhZ2dhYmxlXG4gICAgICAgICAgPyBgU2VhcmNoIG9yIGFkZCBhICR7dGhpcy5sYWJlbH1gXG4gICAgICAgICAgOiBzZWFyY2hhYmxlXG4gICAgICAgICAgICA/IGBTZWxlY3Qgb3Igc2VhcmNoICR7dGhpcy5sYWJlbH1gXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICA6IHBsYWNlaG9sZGVyXG4gICAgfSxcblxuICAgIHNob3dIaWdobGlnaHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc01vdW50ZWQgJiYgdGhpcy4kcmVmcy5lbGVtZW50LnBvaW50ZXJEaXJ0eVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuaXNNb3VudGVkID0gdHJ1ZVxuICAgIGlmICh0aGlzLmF1dG9mb2N1cykge1xuICAgICAgLy8gdnVlLW11bHRpc2VsZWN0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYXV0b2ZvY3VzIGF0dHJpYnV0ZS4gV2UgbmVlZCB0b1xuICAgICAgLy8gaGFuZGxlIGl0IGhlcmUuXG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFkZFRhZ09wdGlvbih0YWcpIHtcbiAgICAgIGlmICh0aGlzLnRhZ2dhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9XG4gICAgICAgICAgb3B0aW9uTGFiZWwgJiYgb3B0aW9uVmFsdWVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF06IHRhZyxcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgYSBzaW1wbGUgc2NoZW1hIG9wdGlvbiB0byBjb252ZXJ0IHRoZSB0YWcgdmFsdWVcbiAgICAgICAgICAgICAgICAvLyB0byBzb21ldGhpbmcgZWxzZSwgZS5nLiBgdG9UYWc6IHRhZyA9PiB1bmRlcnNjb3JlKHRhZylgXG4gICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXTogdGFnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdGFnXG4gICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuYWN0aXZhdGUoKVxuICAgIH0sXG5cbiAgICBvbk9wZW4oKSB7XG4gICAgICB0aGlzLnBvcHVsYXRlID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkNsb3NlKCkge1xuICAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgZmlyZSBibHVyIGV2ZW50cyB3aGlsZSB0aGUgbXVsdGlzZWxlY3QgaXMgb3BlbiAoc2VlXG4gICAgICAvLyBiZWxvdyksIHdlIG5lZWQgdG8gZG8gaXQgaGVyZSwgd2hlbiBpdCdzIGFjdHVhbGx5IGNsb3NlZC5cbiAgICAgIGlmICh0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICBpZiAoIXRoaXMuJHJlZnMuZWxlbWVudC5pc09wZW4pIHtcbiAgICAgICAgVHlwZU1peGluLm1ldGhvZHMub25CbHVyLmNhbGwodGhpcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25BZGRUYWcodGFnKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmFkZFRhZ09wdGlvbih0YWcpXG4gICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uU2VhcmNoQ2hhbmdlKHF1ZXJ5KSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hGaWx0ZXIpIHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgLy8gU2V0IGBzZWFyY2hlZE9wdGlvbnNgIHRvIGFuIGVtcHR5IGFycmF5LCBiZWZvcmUgaXQgd2lsbCBiZVxuICAgICAgICAgIC8vIHBvcHVsYXRlZCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBhY3R1YWwgcmVzdWx0cy5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IFtdXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBhd2FpdCB0aGlzLnJlc29sdmVEYXRhKFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5zZWFyY2hGaWx0ZXIobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgcXVlcnkgfSkpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENsZWFyIGBzZWFyY2hlZE9wdGlvbnNgIHdoZW4gdGhlIHF1ZXJ5IGlzIGNsZWFyZWQuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuQGltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0LmNzcyc7XG5cbiRzcGlubmVyLXdpZHRoOiAkc2VsZWN0LWFycm93LXdpZHRoO1xuJHRhZy1pY29uLXdpZHRoOiAxLjhlbTtcbiR0YWctbWFyZ2luOiAycHg7XG4kdGFnLXBhZGRpbmc6IDNweDtcbiR0YWctbGluZS1oZWlnaHQ6IDFlbTtcblxuLmRpdG8tbXVsdGlzZWxlY3Qge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJi5kaXRvLW11bHRpc2VsZWN0LXNpbmdsZSB7XG4gICAgLS1pbnB1dC13aWR0aDogMTAwJTtcbiAgfVxuXG4gICYuZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZSB7XG4gICAgLS1pbnB1dC13aWR0aDogYXV0bztcbiAgfVxuXG4gICYuZGl0by1oYXMtZXJyb3JzIHtcbiAgICAmX190YWdzIHtcbiAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbi1jbGVhciB7XG4gICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoO1xuICB9XG5cbiAgLm11bHRpc2VsZWN0IHtcbiAgICAkc2VsZjogbGFzdC1zZWxlY3RvcigmKTtcblxuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBtaW4taGVpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiAkY29sb3ItYmxhY2s7XG5cbiAgICAmLS1hY3RpdmUge1xuICAgICAgI3skc2VsZn1fX3BsYWNlaG9sZGVyIHtcbiAgICAgICAgLy8gRG9uJ3QgdXNlIGBkaXNwbGF5OiBub25lYCB0byBoaWRlIHBsYWNlLWhvbGRlciwgYXMgdGhlIGxheW91dCB3b3VsZFxuICAgICAgICAvLyBjb2xsYXBzZS5cbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X19zaW5nbGUsXG4gICAgICAjeyRzZWxmfV9faW5wdXQge1xuICAgICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIGBzdHlsZT1cIndpZHRoXCJgIGluIGFkZGl0aW9uIHRvIHVzaW5nIGNsYXNzZXNcbiAgICAgICAgLy8gc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgICAgd2lkdGg6IHZhcigtLWlucHV0LXdpZHRoKSAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfV9fdGFncyB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X19jb250ZW50LXdyYXBwZXIge1xuICAgICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgICAgbWFyZ2luOiAtMXB4IDAgMDtcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgICB9XG5cbiAgICAgICYjeyRzZWxmfS0tYWJvdmUge1xuICAgICAgICAjeyRzZWxmfV9fdGFncyB7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICN7JHNlbGZ9X19jb250ZW50LXdyYXBwZXIge1xuICAgICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlO1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgICAgICAgbWFyZ2luOiAwIDAgLTFweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGFncyB7XG4gICAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgICBwYWRkaW5nOiAwICRzcGlubmVyLXdpZHRoIDAgMDtcbiAgICAgIC8vIFNvIHRhZ3MgY2FuIGZsb2F0IG9uIG11bHRpcGxlIGxpbmVzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zOlxuICAgICAgcGFkZGluZy1ib3R0b206ICR0YWctbWFyZ2luO1xuICAgIH1cblxuICAgICZfX3RhZyB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIG1hcmdpbjogJHRhZy1tYXJnaW4gMCAwICR0YWctbWFyZ2luO1xuICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgICAgcGFkZGluZzogJHRhZy1wYWRkaW5nICR0YWctaWNvbi13aWR0aCAkdGFnLXBhZGRpbmcgMC44ZW07XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodDtcbiAgICAgIGhlaWdodDogY2FsYygkaW5wdXQtaGVpZ2h0IC0gMiAqICR0YWctcGFkZGluZyk7XG4gICAgfVxuXG4gICAgJl9fdGFncy13cmFwIHtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgfVxuXG4gICAgJl9fc2luZ2xlLFxuICAgICZfX3BsYWNlaG9sZGVyLFxuICAgICZfX2lucHV0IHtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIG1hcmdpbjogMCAwIDFweCAwO1xuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nICFpbXBvcnRhbnQ7XG4gICAgICAvLyBTbyBpbnB1dCBjYW4gZmxvYXQgbmV4dCB0byB0YWdzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zIHdpdGhcbiAgICAgIC8vICZfX3RhZ3M6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICB9XG5cbiAgICAmX19wbGFjZWhvbGRlcixcbiAgICAmX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICAmX19wbGFjZWhvbGRlciB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIEVuZm9yY2UgYWN0dWFsIGxpbmUtaGVpZ2h0IGZvciBwb3NpdGlvbmluZy5cbiAgICAgICAgY29udGVudDogJ1xcMjAwYic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fc2VsZWN0LFxuICAgICZfX3NwaW5uZXIge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIC8vICRib3JkZXItd2lkdGggdG8gcHJldmVudCBtYXNraW5nIGJvcmRlciB3aXRoICZfX3NwaW5uZXJcbiAgICAgIHRvcDogJGJvcmRlci13aWR0aDtcbiAgICAgIHJpZ2h0OiAkYm9yZGVyLXdpZHRoO1xuICAgICAgYm90dG9tOiAkYm9yZGVyLXdpZHRoO1xuICAgICAgaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgfVxuXG4gICAgJl9fc2VsZWN0IHtcbiAgICAgIHdpZHRoOiAwO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKCRzZWxlY3QtYXJyb3ctd2lkdGggLyAyKTtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgQGluY2x1ZGUgYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKTtcblxuICAgICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tO1xuICAgICAgICByaWdodDogY2FsYygtMSAqICRzZWxlY3QtYXJyb3ctc2l6ZSAvIDIpO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3NwaW5uZXIge1xuICAgICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoO1xuXG4gICAgICAmOjpiZWZvcmUsXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIENoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICBib3JkZXItd2lkdGg6IDNweDtcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19vcHRpb24ge1xuICAgICAgJG9wdGlvbjogbGFzdC1zZWxlY3RvcigmKTtcblxuICAgICAgbWluLWhlaWdodDogdW5zZXQ7XG4gICAgICBoZWlnaHQ6IHVuc2V0O1xuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHQ7XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAvLyBJbnN0cnVjdGlvbiB0ZXh0IGZvciBvcHRpb25zXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBzaG93IHRoZSBoaWdobGlnaHQgb25jZSB0aGUgcHVsbGRvd24gaGFzIHJlY2VpdmVkIG1vdXNlIG9yXG4gICAgICAvLyBrZXlib2FyZCBpbnRlcmFjdGlvbiwgaW4gd2hpY2ggY2FzZSBgJi0tc2hvdy1oaWdobGlnaHRgIHdpbGwgYmUgc2V0LFxuICAgICAgLy8gd2hpY2ggaXMgY29udHJvbGxlZCBieSBgcG9pbnRlckRpcnR5YCBpbiB2dWUtbXVsdGlzZWxlY3QuXG4gICAgICAvLyBVbnRpbCB0aGVuLCBjbGVhciB0aGUgaGlnaGxpZ2h0IHN0eWxlLCBidXQgb25seSBpZiBpdCBpc24ndCBhbHNvXG4gICAgICAvLyBkaXNhYmxlZCBvciBzZWxlY3RlZCwgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGtlZXAgdGhlIHN0eWxlLlxuICAgICAgQGF0LXJvb3QgI3skc2VsZn06bm90KCN7JHNlbGZ9LS1zaG93LWhpZ2hsaWdodClcbiAgICAgICAgICAjeyRvcHRpb259Om5vdCgjeyRvcHRpb259LS1kaXNhYmxlZCk6bm90KCN7JG9wdGlvbn0tLXNlbGVjdGVkKSB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgICYtLWhpZ2hsaWdodCB7XG4gICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIEBhdC1yb290ICN7JHNlbGZ9I3skc2VsZn0tLXNob3ctaGlnaGxpZ2h0ICN7bGFzdC1zZWxlY3RvcigmKX0ge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYtLXNlbGVjdGVkIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xuXG4gICAgICAgICYjeyRvcHRpb259LS1oaWdobGlnaHQge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLS1kaXNhYmxlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGFnIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgJl9fdGFnLWljb24ge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGg7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1jbGVhcjtcblxuICAgICAgICBmb250LXNpemU6IDAuOWVtO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXI6OmFmdGVyIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZ3MsXG4gICAgJl9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICE9PSBudWxsID8gdGhpcy52YWx1ZSA6ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9XG4gICAgICAgICAgdmFsdWUgIT09ICcnXG4gICAgICAgICAgICA/IHRoaXMuaXNJbnRlZ2VyXG4gICAgICAgICAgICAgID8gcGFyc2VJbnQodmFsdWUsIDEwKVxuICAgICAgICAgICAgICA6IHBhcnNlRmxvYXQodmFsdWUpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaXNJbnRlZ2VyKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHN0ZXBWYWx1ZSgpIHtcbiAgICAgIC8vIERvbid0IHNob3cgc3RlcHMgaWYgdGhlIGlucHV0IGlzIGFsc28gY2xlYXJhYmxlLCBzaW5jZSB0aGUgc3RlcCBidXR0b25zXG4gICAgICAvLyB3b3VsZCBjb2xsaWRlIHdpdGggdGhlIGNsZWFyIGJ1dHRvbi5cbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB0aGlzLnN0ZXAgPT0gbnVsbCAmJiAhdGhpcy5pc0ludGVnZXJcbiAgICAgICAgICA/ICdhbnknXG4gICAgICAgICAgOiB0aGlzLnN0ZXBcbiAgICB9LFxuXG4gICAgZGVjaW1hbHM6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWNpbWFscycsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgc3RlcDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0ZXAnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQoc3RlcCkge1xuICAgICAgICAvLyBGb3IgaW50ZWdlcnMsIHJvdW5kIHRoZSBzdGVwcyB0byB0aGUgbmV4dCBiaWdnZXIgaW50ZWdlciB2YWx1ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIHN0ZXAgIT0gbnVsbCA/IE1hdGguY2VpbChzdGVwKSA6IHN0ZXBcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1pbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ21pbicsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtaW4pIHtcbiAgICAgICAgbWluID1cbiAgICAgICAgICBtaW4gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlswXVxuICAgICAgICAgICAgOiBtaW5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1pbiAhPSBudWxsID8gTWF0aC5mbG9vcihtaW4pIDogbWluXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXgnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWF4KSB7XG4gICAgICAgIG1heCA9XG4gICAgICAgICAgbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMV1cbiAgICAgICAgICAgIDogbWF4XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtYXggIT0gbnVsbCA/IE1hdGguY2VpbChtYXgpIDogbWF4XG4gICAgICB9XG4gICAgfSksXG5cbiAgICByYW5nZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JhbmdlJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIGB0aGlzLm1pbmAsIGB0aGlzLm1heGAgYWxyZWFkeSBzdXBwb3J0IGBzY2hlbWEucmFuZ2VgLFxuICAgICAgICAvLyBzbyByZWRpcmVjdCB0aGVyZS5cbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gbWluICE9IG51bGwgJiYgbWF4ICE9IG51bGwgPyBbbWluLCBtYXhdIDogdW5kZWZpbmVkXG4gICAgICB9LFxuXG4gICAgICBzZXQocmFuZ2UpIHtcbiAgICAgICAgLy8gUHJvdmlkZSBhIHNldHRlciB0aGF0IGRlbGVnYXRlcyB0byBgW3RoaXMubWluLCB0aGlzLm1heF1gLFxuICAgICAgICAvLyBzaW5jZSB0aG9zZSBhbHJlYWR5IGhhbmRsZSBgc2NoZW1hLnJhbmdlYC5cbiAgICAgICAgaWYgKGlzQXJyYXkocmFuZ2UpKSB7XG4gICAgICAgICAgO1t0aGlzLm1pbiwgdGhpcy5tYXhdID0gcmFuZ2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7fVxuICAgICAgY29uc3QgeyByYW5nZSwgbWluLCBtYXgsIGRlY2ltYWxzLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmFuZ2UgPSByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1pbiAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWluID0gbWluXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWF4ID0gbWF4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkZWNpbWFscyAhPSBudWxsKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCkge1xuICAgICAgICBjb25zdCBkZWNpbWFscyA9IChgJHtzdGVwfWAuc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoXG4gICAgICAgIGlmIChkZWNpbWFscyA+IDApIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNJbnRlZ2VyKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5JbnB1dEZpZWxkLmRpdG8tbnVtYmVyKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIHR5cGU9XCJudW1iZXJcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOm1pbj1cIm1pblwiXG4gIDptYXg9XCJtYXhcIlxuICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4pXG4gIHRlbXBsYXRlKCNhZnRlcilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ251bWJlcicsICdpbnRlZ2VyJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gICAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlzSW50ZWdlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2ludGVnZXInXG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4vLyBPbmx5IHNob3cgc3BpbiBidXR0b25zIGlmIHRoZSBudW1iZXIgY29tcG9uZW50IGRlZmluZXMgYSBzdGVwIHNpemUuXG5pbnB1dFt0eXBlPSdudW1iZXInXTpub3QoW3N0ZXBdKSB7XG4gICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tb2JqZWN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbilcbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQoXG4gICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICApXG4gICAgLy8tIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgRGl0b1NjaGVtYUlubGluZWQoXG4gICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgIDpsYWJlbD1cIm9iamVjdExhYmVsXCJcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIClcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWVsc2UtaWY9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlXG4gICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgKVxuICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdvYmplY3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBhbGlnbkJvdHRvbTogZmFsc2UsXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb2JqZWN0TGFiZWwoKSB7XG4gICAgICAvLyBPbmx5IHNob3cgYSBsYWJlbCBpZiB0aGUgb2JqZWN0IGlzIGNvbGxhcHNpYmxlLlxuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGVcbiAgICAgICAgPyB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgdGhpcy5vYmplY3REYXRhLCB7IGFzT2JqZWN0OiB0cnVlIH0pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBkYXRhOiB0aGlzLm9iamVjdERhdGEgfSlcbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksXG4gICAgc2NoZW1hLFxuICAgIG5hbWUsXG4gICAgcm91dGVzLFxuICAgIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLFxuICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSksXG4gICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICBhcGksXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBmbGF0dGVuLFxuICAgICAgICBwcm9jZXNzXG4gICAgICApXG4gICAgXSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW9iamVjdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICAuZGl0by1vYmplY3QtY29udGVudCB7XG4gICAgZmxleDogMCAxIDEwMCU7XG4gIH1cblxuICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgIGZsZXg6IDEgMCAwJTtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncGFuZWwnLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBhbGlnbkJvdHRvbTogZmFsc2UsXG4gIG9taXRQYWRkaW5nOiB0cnVlLFxuXG4gIGdldFBhbmVsU2NoZW1hKGFwaSwgc2NoZW1hKSB7XG4gICAgLy8gRm9yIGEgVHlwZVBhbmVsLCB0aGUgY29tcG9uZW50IHNjaGVtYSBpcyBhbHNvIHRoZSBwYW5lbCBzY2hlbWEsIGJ1dFxuICAgIC8vIHJlbW92ZSB0aGUgYWRkZWQgbmFtZSwgc28gaXQgZG9lc24ndCBnZXQgYXBwZW5kZWQgdHdpY2UgdG8gZGF0YS1wYXRoLlxuICAgIGNvbnN0IHsgbmFtZSwgLi4ucGFuZWwgfSA9IHNjaGVtYVxuICAgIHJldHVybiBwYW5lbFxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncHJvZ3Jlc3MnLCB7XG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm9ncmVzc1ZhbHVlKCkge1xuICAgICAgbGV0IHsgdmFsdWUsIHJhbmdlLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgdmFsdWUgLT0gcmFuZ2VbMF1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHN0ZXApICogc3RlcFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICcnXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgcHJvZ3Jlc3NNYXgoKSB7XG4gICAgICBjb25zdCB7IHJhbmdlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gcmFuZ2UgPyByYW5nZVsxXSAtIHJhbmdlWzBdIDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICApXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncmFkaW8nLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1yYWRpby1idXR0b25zIHtcbiAgbGFiZWwge1xuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG4gIH1cblxuICAuZGl0by1yYWRpby1idXR0b24ge1xuICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zZWN0aW9uKDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCc6ICEhc2NoZW1hLmxhYmVsIH1cIilcbiAgRGl0b1BhbmUuZGl0by1zZWN0aW9uLXBhbmUoXG4gICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIml0ZW1cIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWN0aW9uJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gIXNjaGVtYS5uZXN0ZWQgJiYgISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcbiAgZGVmYXVsdE5lc3RlZDogZmFsc2UsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBhbGlnbkJvdHRvbTogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy52YWx1ZSA6IHRoaXMuZGF0YVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWFcbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gICAgLy8gUHJvY2VzcyBzZWN0aW9uIGNvbXBvbmVudHMgc28gdGhlaXIgZm9ybXMgZ2V0IHJlc29sdmVkIHRvby5cbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbClcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNlY3Rpb24ge1xuICAmLmRpdG8tc2VjdGlvbi1sYWJlbGxlZCB7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmc7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gTmVzdGluZyBpcyBuZWVkZWQgdG8gbWFrZSBhbiBhcnJvdyBhcHBlYXIgb3ZlciB0aGUgc2VsZWN0IGl0ZW06XG4uZGl0by1zZWxlY3RcbiAgc2VsZWN0KFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQGZvY3VzPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInBvcHVsYXRlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gICAgICApXG4gICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgIHYtaWY9XCJncm91cEJ5XCJcbiAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgIClcbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0KSB9fVxuICAgICAgICBvcHRpb24oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1lbHNlLWlmPVwic2VsZWN0ZWRPcHRpb25cIlxuICAgIClcbiAgICAgIG9wdGlvbig6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCIpIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlbGVjdCcsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBEaXNhYmxlIGxhenktcG9wdWxhdGlvbiBmb3Igbm93LlxuICAgICAgLy8gVE9ETzogU2V0IHRvIGBmYWxzZWAgT25jZSBsaW5ldG8gZTJlIHRlc3RzIGFkZHJlc3MgdGhlaXIgaXNzdWVzLlxuICAgICAgcG9wdWxhdGU6IHRydWVcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4vLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiRzZWxlY3QtYXJyb3ctcmlnaHQ6IGNhbGMoKCRzZWxlY3QtYXJyb3ctd2lkdGggLSAkc2VsZWN0LWFycm93LXNpemUpIC8gMik7XG5cbi5kaXRvLXNlbGVjdCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIHNlbGVjdCB7XG4gICAgcGFkZGluZy1yaWdodDogJHNlbGVjdC1hcnJvdy13aWR0aDtcbiAgfVxuICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgJi5kaXRvLXdpZHRoLWZpbGwge1xuICAgIHNlbGVjdCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIEBpbmNsdWRlIGFycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSk7XG5cbiAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tO1xuICAgIHJpZ2h0OiBjYWxjKCN7JHNlbGVjdC1hcnJvdy1yaWdodH0gKyAjeyRib3JkZXItd2lkdGh9KTtcbiAgfVxuXG4gICYuZGl0by1kaXNhYmxlZDo6YWZ0ZXIge1xuICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIElucHV0RmllbGQuZGl0by1udW1iZXIoXG4gICAgdi1pZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0YD9cbiAgICBpbnB1dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2xpZGVyIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1yYW5nZSB7XG4gICAgZmxleDogYXV0bztcbiAgICBoZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpKTtcbiAgfVxuXG4gIC5kaXRvLW51bWJlciB7XG4gICAgYm9yZGVyOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5Td2l0Y2hCdXR0b24uZGl0by1zd2l0Y2goXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBTd2l0Y2hCdXR0b24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5JbnB1dEZpZWxkLmRpdG8tdGV4dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmNvbnN0IG1hc2tlZFBhc3N3b3JkID0gJyoqKioqKioqKioqKioqKionXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbXG4gICAgJ3RleHQnLFxuICAgICdlbWFpbCcsXG4gICAgJ3VybCcsXG4gICAgJ2hvc3RuYW1lJyxcbiAgICAnZG9tYWluJyxcbiAgICAndGVsJyxcbiAgICAncGFzc3dvcmQnLFxuICAgICdjcmVkaXRjYXJkJ1xuICBdLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuICAgIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+IHNjaGVtYS50eXBlID09PSAncGFzc3dvcmQnLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlucHV0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjcmVkaXRjYXJkOiAndGV4dCcsXG4gICAgICAgICAgICBob3N0bmFtZTogJ3RleHQnLFxuICAgICAgICAgICAgZG9tYWluOiAndGV4dCdcbiAgICAgICAgICB9W3RoaXMudHlwZV0gfHxcbiAgICAgICAgICB0aGlzLnR5cGVcbiAgICAgICAgKVxuICAgICAgfSxcblxuICAgICAgaW5wdXRWYWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJyAmJlxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAhdGhpcy5mb2N1c2VkXG4gICAgICAgICAgKVxuICAgICAgICAgICAgPyBtYXNrZWRQYXNzd29yZFxuICAgICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgICAgZW1haWw6ICdlbWFpbCcsXG4gICAgICAgICAgdXJsOiAndXJsJyxcbiAgICAgICAgICBob3N0bmFtZTogJ2hvc3RuYW1lJyxcbiAgICAgICAgICBkb21haW46ICdkb21haW4nLFxuICAgICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQnLFxuICAgICAgICAgIGNyZWRpdGNhcmQ6ICdjcmVkaXRjYXJkJ1xuICAgICAgICB9W3RoaXMudHlwZV1cbiAgICAgICAgcmV0dXJuIHJ1bGUgPyB7IFtydWxlXTogdHJ1ZSB9IDoge31cbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDpyb3dzPVwibGluZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3RleHRhcmVhJywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuICBhbGlnbkJvdHRvbTogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10ZXh0YXJlYSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICByZXNpemU6IG5vbmU7XG4gIG1pbi1oZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpICsgI3syICogJGlucHV0LXBhZGRpbmctdmVyfSk7XG5cbiAgJi5kaXRvLXJlc2l6YWJsZSB7XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmVlLWxpc3RcbiAgRGl0b1Njb3BlcyhcbiAgICB2LWlmPVwic2NvcGVzXCJcbiAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gIClcbiAgLmRpdG8tdHJlZS1wYW5lbFxuICAgIERpdG9UcmVlSXRlbShcbiAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInRyZWVEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOm9wZW49XCJ0cnVlXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNFZGl0YWJsZUZvcm1zXCJcbiAgICApXG4gICAgICAvLy0gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICBSb3V0ZXJWaWV3XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7XG4gIGhhc0Zvcm1TY2hlbWEsXG4gIGdldEZvcm1TY2hlbWFzLFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ3RyZWUtbGlzdCcsICd0cmVlLW9iamVjdCddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gICAgYWxpZ25Cb3R0b206IGZhbHNlLFxuXG4gICAgcHJvdmlkZSgpIHtcbiAgICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gICAgfSxcblxuICAgIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgcGF0aCgpIHtcbiAgICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLnBhdGhgOlxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXRoXG4gICAgICB9LFxuXG4gICAgICBlZGl0UGF0aCgpIHtcbiAgICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLmVkaXRQYXRoYDpcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgICB9LFxuXG4gICAgICB0cmVlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB7IFt0aGlzLm5hbWVdOiB0aGlzLnZhbHVlIH1cbiAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVEYXRhUGF0aCgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBuYW1lYCBmcm9tIGBkYXRhUGF0aGAsIGFzIGl0IGlzIGFkZGVkXG4gICAgICAgIC8vIHRvIGB0cmVlRGF0YWAgYW5kIGB0cmVlU2NoZW1hYFxuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICAgIDogdGhpcy5kYXRhUGF0aFxuICAgICAgfSxcblxuICAgICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuc2NoZW1hXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHRoaXMuc2NoZW1hXG4gICAgICB9LFxuXG4gICAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgICBjb25zdCBoYXNFZGl0YWJsZUZvcm1zID0gc2NoZW1hID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZWRpdGFibGUnLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgICAgfSkgfHxcbiAgICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICAgIGhhc0VkaXRhYmxlRm9ybXMoc2NoZW1hLmNoaWxkcmVuKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzRWRpdGFibGVGb3Jtcyh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbCxcbiAgICAgIG5lc3RlZCA9IHRydWUsXG4gICAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgICBwcm9jZXNzID0gbnVsbFxuICAgICkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEucHJvcGVydGllcyksXG4gICAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgYXBpLFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgZmxhdHRlbixcbiAgICAgICAgICAvLyBQYXNzIHByb2Nlc3MoKSB0byBhZGQgbW9yZSByb3V0ZXMgdG8gY2hpbGRSb3V0ZXM6XG4gICAgICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICAgICAgY2hpbGRyZW4udHlwZSA9ICd0cmVlLWxpc3QnXG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNhbGwgYHByb2Nlc3NTY2hlbWEoKWAgZm9yIHRoZSBuZXN0ZWQgdHJlZSBsaXN0OlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgICAgIGFwaSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5uYW1lLFxuICAgICAgICAgICAgICAgIGNoaWxkUm91dGVzLFxuICAgICAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICAgICAgICB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdKVxuICAgIH0sXG5cbiAgICBnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3Npbmcoc2NoZW1hLCBjb250ZXh0KSB7XG4gICAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAgIC8vIHByZXNlbnQgaW4gZWFjaCBvZiB0aGUgZm9ybXMsIGFzIHJlcXVpcmVkIGJ5IGBwcm9jZXNzU2NoZW1hRGF0YSgpYFxuICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICA/IGZvcm0gPT4gKHtcbiAgICAgICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICAgIC4uLmZvcm0uY29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICBbY2hpbGRyZW4ubmFtZV06IGNoaWxkcmVuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmVlLWxpc3Qge1xuICBAZXh0ZW5kICVmaWVsZDtcblxuICAuZGl0by10cmVlLXBhbmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgID4gLmRpdG8tdHJlZS1pdGVtIHtcbiAgICAgIGZsZXg6IDEgMSAyNSU7XG4gICAgfVxuXG4gICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyIHtcbiAgICAgIGZsZXg6IDAgMSA3NSU7XG4gICAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDE7XG4gICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcik7XG4gICAgICBtYXJnaW4tbGVmdDogJGlucHV0LXBhZGRpbmctaG9yO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGZpbGVzaXplIH0gZnJvbSAnZmlsZXNpemUnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XG4gIHJldHVybiBmaWxlc2l6ZShzaXplLCB7IGJhc2U6IDEwIH0pXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdXBsb2FkXG4gIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gRGl0b1RhYmxlSGVhZFxuICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgdHJcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIE5hbWVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICB0aFxuICAgICAgICAgIHNwYW5cbiAgICBEaXRvRHJhZ2dhYmxlKFxuICAgICAgdi1tb2RlbD1cImZpbGVzXCJcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDpvcHRpb25zPVwiZ2V0U29ydGFibGVPcHRpb25zKGZhbHNlKVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgOmtleT1cImZpbGUua2V5XCJcbiAgICAgIClcbiAgICAgICAgdGQoXG4gICAgICAgICAgdi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICApXG4gICAgICAgIHRkIHt7IGZvcm1hdEZpbGVTaXplKGZpbGUuc2l6ZSkgfX1cbiAgICAgICAgdGRcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgKVxuICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICB0Zm9vdFxuICAgICAgdHJcbiAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgVnVlVXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgOmlucHV0SWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIDpwb3N0QWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCBwYXJzZUZpbGVTaXplIGZyb20gJ2ZpbGVzaXplLXBhcnNlcidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL3V0aWxzL3VuaXRzLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3VwbG9hZCcsIHtcbiAgbWl4aW5zOiBbU29ydGFibGVNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVnVlVXBsb2FkIH0sXG5cbiAgYWxpZ25Cb3R0b206IGZhbHNlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwbG9hZHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdXBsb2FkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMudXBsb2FkXG4gICAgfSxcblxuICAgIGZpbGVzKCkge1xuICAgICAgcmV0dXJuIGFzRmlsZXModGhpcy52YWx1ZSlcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIE5vIGNhbGxiYWNrIGFzIGl0J3MgdXNlZCBpbiBgcHJvY2Vzc1ZhbHVlKClgXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGV4dGVuc2lvbnM6IGdldFNjaGVtYUFjY2Vzc29yKCdleHRlbnNpb25zJywge1xuICAgICAgdHlwZTogW0FycmF5LCBTdHJpbmcsIFJlZ0V4cF1cbiAgICB9KSxcblxuICAgIGFjY2VwdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FjY2VwdCcsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KGFjY2VwdCkge1xuICAgICAgICByZXR1cm4gaXNBcnJheShhY2NlcHQpID8gYWNjZXB0LmpvaW4oJywnKSA6IGFjY2VwdFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4U2l6ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heFNpemUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZ2V0KG1heFNpemUpIHtcbiAgICAgICAgcmV0dXJuIG1heFNpemUgPyBwYXJzZUZpbGVTaXplKG1heFNpemUpIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiBkcmFnZ2FibGUgJiYgdGhpcy5maWxlcy5sZW5ndGggPiAxXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGlzVXBsb2FkUmVhZHkoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoICYmXG4gICAgICAgICEodGhpcy51cGxvYWQuYWN0aXZlIHx8IHRoaXMudXBsb2FkLnVwbG9hZGVkKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1VwbG9hZEFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmIHRoaXMudXBsb2FkLmFjdGl2ZVxuICAgIH0sXG5cbiAgICB1cGxvYWRQcm9ncmVzcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5yZWR1Y2UoKHRvdGFsLCBmaWxlKSA9PiB0b3RhbCArIGZpbGUucHJvZ3Jlc3MsIDApIC9cbiAgICAgICAgdGhpcy51cGxvYWRzLmxlbmd0aFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB1cGxvYWRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VVcmwoe1xuICAgICAgICB0eXBlOiAndXBsb2FkJyxcbiAgICAgICAgcGF0aDogdGhpcy5hcGkubm9ybWFsaXplUGF0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvcm1hdEZpbGVTaXplLFxuXG4gICAgcmVuZGVyRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyByZW5kZXIgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGZpbGUsXG4gICAgICAgICAgICAgIGRhdGE6IHRoaXMuZmlsZXMsXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKGZpbGUubmFtZSlcbiAgICB9LFxuXG4gICAgZGVsZXRlRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBmaWxlXG5cbiAgICAgIGlmIChcbiAgICAgICAgZmlsZSAmJlxuICAgICAgICB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5yZW1vdmV9ICR7bmFtZX0/YFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxlLnVwbG9hZCkge1xuICAgICAgICAgIHRoaXMudXBsb2FkLnJlbW92ZShmaWxlLnVwbG9hZClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgICB0ZXh0OiBgJHtuYW1lfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RmlsZUluZGV4KGZpbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlICYmIHRoaXMudmFsdWVcbiAgICAgICAgPyB0aGlzLnZhbHVlLmZpbmRJbmRleChpdCA9PiBpdC5pZCA9PT0gZmlsZS5pZClcbiAgICAgICAgOiAtMVxuICAgIH0sXG5cbiAgICBhZGRGaWxlKGZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IFtmaWxlXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gZmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXBsYWNlRmlsZShmaWxlLCBuZXdGaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RmlsZUluZGV4KGZpbGUpXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5ld0ZpbGUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVbaW5kZXhdID0gbmV3RmlsZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdGaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUZpbGUoZmlsZSkge1xuICAgICAgdGhpcy5yZXBsYWNlRmlsZShmaWxlLCBudWxsKVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbGUobmV3RmlsZSwgb2xkRmlsZSkge1xuICAgICAgaWYgKG5ld0ZpbGUgJiYgIW9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBpZCwgbmFtZSwgc2l6ZSB9ID0gbmV3RmlsZVxuICAgICAgICB0aGlzLmFkZEZpbGUoeyBpZCwgbmFtZSwgc2l6ZSwgdXBsb2FkOiBuZXdGaWxlIH0pXG4gICAgICB9XG4gICAgICBpZiAobmV3RmlsZSAmJiBvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IG5ld0ZpbGVcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgICBjb25zdCBmaWxlID0gbmV3RmlsZS5yZXNwb25zZVswXVxuICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnVwbG9hZCA9IG5ld0ZpbGVcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIHVwbG9hZCBmaWxlIG9iamVjdCB3aXRoIHRoZSBmaWxlIG9iamVjdCByZWNlaXZlZFxuICAgICAgICAgICAgLy8gZnJvbSB0aGUgdXBsb2FkIHJlc3BvbnNlLlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlRmlsZShuZXdGaWxlLCBmaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhYm9ydDogJ1VwbG9hZCBhYm9ydGVkJyxcbiAgICAgICAgICAgICAgZGVuaWVkOiAnVXBsb2FkIGRlbmllZCcsXG4gICAgICAgICAgICAgIGV4dGVuc2lvbjogYFVuc3VwcG9ydGVkIGZpbGUtdHlwZTogJHtuZXdGaWxlLm5hbWV9YCxcbiAgICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmsgZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICAgIHNlcnZlcjogJ1NlcnZlciBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgICAgc2l6ZTogYEZpbGUgaXMgdG9vIGxhcmdlOiAke2Zvcm1hdEZpbGVTaXplKG5ld0ZpbGUuc2l6ZSl9YCxcbiAgICAgICAgICAgICAgdGltZW91dDogJ1RpbWVvdXQgb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCdcbiAgICAgICAgICAgIH1bZXJyb3JdIHx8XG4gICAgICAgICAgICBgVW5rbm93biBGaWxlIFVwbG9hZCBFcnJvcjogJyR7ZXJyb3J9J2BcbiAgICAgICAgICApXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnRmlsZSBVcGxvYWQgRXJyb3InLFxuICAgICAgICAgICAgdGV4dFxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaW5wdXRGaWx0ZXIobmV3RmlsZSAvKiwgb2xkRmlsZSwgcHJldmVudCAqLykge1xuICAgICAgY29uc3QgeGhyID0gbmV3RmlsZT8ueGhyXG4gICAgICBpZiAodGhpcy5hcGkuY29ycz8uY3JlZGVudGlhbHMgJiYgeGhyICYmICF4aHIud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoKHsgdXBsb2FkLCAuLi5maWxlIH0pID0+ICghdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGwpKVxuICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUpXG4gICAgcmV0dXJuIHNjaGVtYS5tdWx0aXBsZSA/IGZpbGVzIDogZmlsZXNbMF0gfHwgbnVsbFxuICB9XG59KVxuXG5mdW5jdGlvbiBhc0ZpbGVzKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IGFzQXJyYXkodmFsdWUpIDogW11cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXVwbG9hZCB7XG4gIC5kaXRvLXRhYmxlIHtcbiAgICB0ciB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkIHtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgPiAqIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gIH1cblxuICAuZGl0by11cGxvYWQtZm9vdGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgIC5kaXRvLXByb2dyZXNzIHtcbiAgICAgIGZsZXg6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiY29uc3QgbG9nZ2VkRGVwcmVjYXRpb25zID0gbmV3IFNldCgpXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXByZWNhdGUobWVzc2FnZSkge1xuICAvLyBPbmx5IGxvZyBkZXByZWNhdGlvbiBtZXNzYWdlcyBvbmNlLlxuICBpZiAoIWxvZ2dlZERlcHJlY2F0aW9ucy5oYXMobWVzc2FnZSkpIHtcbiAgICBsb2dnZWREZXByZWNhdGlvbnMuYWRkKG1lc3NhZ2UpXG4gICAgY29uc29sZS53YXJuKG1lc3NhZ2UpXG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UXVlcnkocXVlcnkpIHtcbiAgY29uc3QgZW50cmllcyA9IHF1ZXJ5XG4gICAgPyBpc0FycmF5KHF1ZXJ5KVxuICAgICAgPyBxdWVyeVxuICAgICAgOiBPYmplY3QuZW50cmllcyhxdWVyeSlcbiAgICA6IFtdXG4gIHJldHVybiAoXG4gICAgbmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgIC8vIEV4cGFuZCBhcnJheSB2YWx1ZXMgaW50byBtdWx0aXBsZSBlbnRyaWVzIHVuZGVyIHRoZSBzYW1lIGtleSwgc29cbiAgICAgIC8vIGBmb3JtYXRRdWVyeSh7IGZvbzogWzEsIDJdLCBiYXI6IDMgfSlgID0+ICdmb289MSZmb289MiZiYXI9MycuXG4gICAgICBlbnRyaWVzLnJlZHVjZShcbiAgICAgICAgKGVudHJpZXMsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgdmFsIG9mIGFzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsXSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgIClcbiAgICApXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLy8gZGVjb2RlIGFsbCB0aGVzZSBlbmNvZGVkIGNoYXJhY3RlcnMgdG8gaGF2ZSB0aGUgc2FtZSBiZWhhdmlvciBhc1xuICAgICAgLy8gdnVlLXJvdXRlcidzIG93biBxdWVyeSBlbmNvZGluZy5cbiAgICAgIC5yZXBsYWNlQWxsKC8lKD86MjF8MjR8Mjh8Mjl8MkN8MkZ8M0F8M0J8M0R8M0Z8NDApL2csIGRlY29kZVVSSUNvbXBvbmVudClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVJvdXRlKHsgcGF0aCwgcXVlcnksIGhhc2ggfSkge1xuICAvLyBQcmVzZXJ2ZSBgaGlzdG9yeS5zdGF0ZWAsIHNlZTpcbiAgLy8gaHR0cHM6Ly9yb3V0ZXIudnVlanMub3JnL2d1aWRlL21pZ3JhdGlvbi8jdXNhZ2Utb2YtaGlzdG9yeS1zdGF0ZVxuICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShcbiAgICBoaXN0b3J5LnN0YXRlLFxuICAgIG51bGwsXG4gICAgYCR7XG4gICAgICBsb2NhdGlvbi5vcmlnaW5cbiAgICB9JHtcbiAgICAgIHBhdGggPz8gbG9jYXRpb24ucGF0aG5hbWVcbiAgICB9PyR7XG4gICAgICBxdWVyeSA/IGZvcm1hdFF1ZXJ5KHF1ZXJ5KSA6IGxvY2F0aW9uLnNlYXJjaC5zbGljZSgxKVxuICAgIH0ke1xuICAgICAgaGFzaCA/PyBsb2NhdGlvbi5oYXNoXG4gICAgfWBcbiAgKVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgW1xuICAnY3JlYXRlJywgJ2NyZWF0ZWQnLFxuICAnc2F2ZScsICdzYXZlZCcsXG4gICdzdWJtaXQnLCAnc3VibWl0dGVkJyxcbiAgJ2RlbGV0ZScsICdkZWxldGVkJyxcbiAgJ2VkaXQnLCAnZWRpdGVkJyxcbiAgJ2NsZWFyJywgJ2NsZWFyZWQnLFxuICAnY2xvc2UnLCAnY2xvc2VkJyxcbiAgJ2NhbmNlbCcsICdjYW5jZWxsZWQnLFxuICAnZHJhZycsICdkcmFnZ2VkJyxcbiAgJ2xvZ2luJywgJ2xvZ2dlZCBpbidcbl0ucmVkdWNlKCh2ZXJicywgdmVyYikgPT4ge1xuICB2ZXJic1t2ZXJiXSA9IHZlcmJcbiAgcmV0dXJuIHZlcmJzXG59LCB7fSlcbiIsImltcG9ydCB7IGNyZWF0ZUFwcCwgaCBhcyBjcmVhdGVFbGVtZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyLCBjcmVhdGVXZWJIaXN0b3J5IH0gZnJvbSAndnVlLXJvdXRlcidcbmltcG9ydCBWdWVOb3RpZmljYXRpb25zIGZyb20gJ0BreXZnL3Z1ZTMtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsXG4gIGlzQWJzb2x1dGVVcmwsXG4gIG1lcmdlLFxuICBoeXBoZW5hdGUsXG4gIGNhbWVsaXplLFxuICBkZWZhdWx0Rm9ybWF0c1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGRlcHJlY2F0ZSB9IGZyb20gJy4vdXRpbHMvZGVwcmVjYXRlLmpzJ1xuaW1wb3J0IHsgZm9ybWF0UXVlcnkgfSBmcm9tICcuL3V0aWxzL3JvdXRlLmpzJ1xuaW1wb3J0IHZlcmJzIGZyb20gJy4vdmVyYnMuanMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9BZG1pbiB7XG4gIGNvbnN0cnVjdG9yKGVsLCB7XG4gICAgLy8gYGRpdG9gIGNvbnRhaW5zIHRoZSBiYXNlIGFuZCBhcGkgc2V0dGluZ3MgcGFzc2VkIGZyb20gYEFkbWluQ29udHJvbGxlcmBcbiAgICBkaXRvID0ge30sXG4gICAgYXBpLFxuICAgIHZpZXdzID0ge30sXG4gICAgLi4ub3B0aW9uc1xuICB9ID0ge30pIHtcbiAgICB0aGlzLmVsID0gZWxcbiAgICAvLyBNZXJnZSBpbiBgYXBpYCBzZXR0aW5ncyBhcyBwYXNzZWQgZnJvbSBgY29uZmlnLmFkbWluYCBhbmQgdGhyb3VnaCB0aGVcbiAgICAvLyBgQWRtaW5Db250cm9sbGVyYCB3aXRoIGBhcGlgIHZhbHVlcyBmcm9tIGZyb20gJ2FkbWluL2luZGV4LmpzJ1xuICAgIC8vIE5PVEU6IGBBZG1pbkNvbnRyb2xsZXJgIHByb3ZpZGVzIGBkaXRvLmFwaS5iYXNlYFxuICAgIHRoaXMuYXBpID0gYXBpID0gbWVyZ2UoeyBiYXNlOiAnLycgfSwgZGl0by5hcGksIGFwaSlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cbiAgICAvLyBTZXR1cCBkZWZhdWx0IGFwaSBzZXR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG4gICAgYXBpLmZvcm1hdHMgPSBtZXJnZSh7fSwgZGVmYXVsdEZvcm1hdHMsIGFwaS5mb3JtYXRzKVxuICAgIGFwaS5yZXF1ZXN0IHx8PSBvcHRpb25zID0+IHJlcXVlc3QoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5nZXRBcGlVcmwgfHw9IG9wdGlvbnMgPT4gZ2V0QXBpVXJsKGFwaSwgb3B0aW9ucylcbiAgICBhcGkuaXNBcGlVcmwgfHw9IHVybCA9PiBpc0FwaVVybChhcGksIHVybClcbiAgICAvLyBTZXR0aW5nIGBhcGkubm9ybWFsaXplUGF0aHMgPSB0cnVlIChwbHVyYWwpIHNldHMgYm90aDpcbiAgICAvLyBgYXBpLm5vcm1hbGl6ZVBhdGggPSBoeXBoZW5hdGVgIGFuZCBgYXBpLmRlbm9ybWFsaXplUGF0aCA9IGNhbWVsaXplYFxuICAgIGFwaS5ub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBoeXBoZW5hdGUgOiB2YWwgPT4gdmFsXG4gICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gY2FtZWxpemUgOiB2YWwgPT4gdmFsXG5cbiAgICAvLyBBbGxvdyBkZWZpbml0aW9uIG9mIGRlZmF1bHRzIGZvciBhZG1pbiBjb21wb25lbnQgdHlwZXMsIG5lc3RlZCBwZXIgdHlwZTpcbiAgICAvLyBhcGkuZGVmYXVsdHMgPSB7XG4gICAgLy8gICAnbXVsdGlzZWxlY3QnOiB7XG4gICAgLy8gICAgIHNlbGVjdGFibGU6IHRydWVcbiAgICAvLyAgIH0sXG4gICAgLy8gICAnZmFrZS10eXBlJzogc2NoZW1hID0+IHtcbiAgICAvLyAgICAgLy8gUmV0dXJuIGRlZmF1bHRzLCBvciBkaXJlY3RseSBtb2RpZnkgdGhlIHNjaGVtYTpcbiAgICAvLyAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHtcbiAgICAvLyAgICAgICB0eXBlOiAncmVhbC10eXBlJyxcbiAgICAvLyAgICAgICBmb3JtYXQ6ICh7IHZhbHVlIH0pID0+IGBGb3JtYXR0ZWQgJHt2YWx1ZX1gLFxuICAgIC8vICAgICAgIHByb2Nlc3M6ICh7IHZhbHVlIH0pID0+IGBQcm9jZXNzZWQgJHt2YWx1ZX1gXG4gICAgLy8gICAgIH0pXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLmRlZmF1bHRzIHx8PSB7fVxuXG4gICAgLy8gQWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGF1dGggcmVzb3VyY2VzLCBsaWtlIHNvOlxuICAgIC8vIGFwaS51c2VycyA9IHtcbiAgICAvLyAgIHBhdGg6ICcvYWRtaW5zJyxcbiAgICAvLyAgIC8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdHM6XG4gICAgLy8gICBsb2dpbjoge1xuICAgIC8vICAgICBwYXRoOiAnbG9naW4nLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGxvZ291dDoge1xuICAgIC8vICAgICBwYXRoOiAnbG9nb3V0JyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzZXNzaW9uOiB7XG4gICAgLy8gICAgIHBhdGg6ICdzZXNzaW9uJyxcbiAgICAvLyAgICAgbWV0aG9kOiAnZ2V0J1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBjb25zdCB1c2VycyA9IGdldFJlc291cmNlKGFwaS51c2Vycywge1xuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nXG4gICAgfSkgfHwge31cbiAgICB1c2Vycy5sb2dpbiA9IGdldFJlc291cmNlKHVzZXJzLmxvZ2luIHx8ICdsb2dpbicsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMubG9nb3V0ID0gZ2V0UmVzb3VyY2UodXNlcnMubG9nb3V0IHx8ICdsb2dvdXQnLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLnNlc3Npb24gPSBnZXRSZXNvdXJjZSh1c2Vycy5zZXNzaW9uIHx8ICdzZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIGFwaS51c2VycyA9IHVzZXJzXG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIG9mIHJlc291cmNlIHBhdGggaGFuZGxlcnM6XG4gICAgLy8gYXBpLnJlc291cmNlcyA9IHtcbiAgICAvLyAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc291cmNlLnBhcmVudFxuICAgIC8vICAgICAgID8gYCR7cmVzb3VyY2UucGF0aH0/JHtyZXNvdXJjZS5wYXJlbnQucGF0aH1faWQ9JHtcbiAgICAvLyAgICAgICAgICByZXNvdXJjZS5wYXJlbnQuaWR9YFxuICAgIC8vICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgICBhbnkocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXNbcmVzb3VyY2U/LnR5cGVdIHx8IHRoaXMuZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVzb3VyY2UgJiYgaGFuZGxlci5jYWxsKHRoaXMsIHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5hbnkocmVzb3VyY2UucGFyZW50KVxuICAgICAgICByZXR1cm4gcGFyZW50UGF0aFxuICAgICAgICAgID8gYCR7cGFyZW50UGF0aH0vJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChyZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcihyZXNvdXJjZSkge1xuICAgICAgICAvLyBOT1RFOiBXZSBhc3N1bWUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIHJvb3QtbGV2ZWwgY29sbGVjdGlvbiByb3V0ZXMsXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBuZXN0aW5nIG9mIChzdWItKWNvbGxlY3Rpb24gcm91dGVzLlxuICAgICAgICByZXR1cm4gYCR7cmVzb3VyY2UucGF0aH0vJHtyZXNvdXJjZS5pZH1gXG4gICAgICB9LFxuXG4gICAgICB1cGxvYWQocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gRGl0byBTZXJ2ZXIgaGFuZGxlcyB1cGxvYWQgcm91dGVzIG9uIHRoZSBjb2xsZWN0aW9uIHJlc291cmNlOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2xsZWN0aW9uKHJlc291cmNlLnBhcmVudCl9L3VwbG9hZC8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgfSxcblxuICAgICAgLi4uYXBpLnJlc291cmNlc1xuICAgIH1cblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgLyBleHRlbmRpbmcgb2YgaGVhZGVyczpcbiAgICAvLyBhcGkuaGVhZGVycyA9IHtcbiAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAvLyB9XG4gICAgYXBpLmhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uYXBpLmhlYWRlcnNcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZWwpKSB7XG4gICAgICBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpXG4gICAgfVxuXG4gICAgY29uc3QgYXBwID0gKHRoaXMuYXBwID0gY3JlYXRlQXBwKHtcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgRGl0b1Jvb3QsXG4gICAgICAgIFZ1ZU5vdGlmaWNhdGlvbnMsXG4gICAgICAgIC8vIFRoaXMgbWF5IG9ubHkgYmUgbmVlZGVkIHRvIGF2b2lkIHRyZWUtc2hhY2tpbmcgb2YgdGhlc2UgY29tcG9uZW50cyxcbiAgICAgICAgLy8gc2luY2UgdGhleSBhY3R1YWxseSBoYW5kbGUgcmVnaXN0cnkgaW50ZXJuYWxseSBhbHJlYWR5LlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBvbmNlIHdlIGhhdmUgYSBiZXR0ZXIgc29sdXRpb24uXG4gICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICAgIC4uLnR5cGVzXG4gICAgICB9LFxuXG4gICAgICAvLyBNb3N0IGluamVjdHMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZSByZWFjdGl2ZW5lc3MgYWNyb3NzXG4gICAgICAvLyBwcm92aWRlL2luamVjdCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgICBwcm92aWRlOiB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgLy8gQSBkZWZhdWx0IGxpc3Qgb2YgdmVyYnMgYXJlIHByb3ZpZGVkIGJ5ICR2ZXJicygpIGFuZCBjYW4gYmVcbiAgICAgICAgLy8gb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkuXG4gICAgICAgICR2ZXJiczogKCkgPT4gdmVyYnMsXG4gICAgICAgIC8vIFByb3ZpZGUgZGVmYXVsdHMgc28gRGl0b01peGluIGNhbiBpbmplY3QgdGhlbSBmb3IgYWxsIGNvbXBvbmVudHM6XG4gICAgICAgIC8vICAgaW5qZWN0OiBbICAnJGlzUG9wdWxhdGVkJywgJyRzY2hlbWFDb21wb25lbnQnLCAnJHJvdXRlQ29tcG9uZW50JyBdXG4gICAgICAgICR2aWV3czogKCkgPT4ge30sXG4gICAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgJHBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGF0YUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHJlbmRlcjogKCkgPT5cbiAgICAgICAgY3JlYXRlRWxlbWVudChEaXRvUm9vdCwge1xuICAgICAgICAgIHJlZjogJ3Jvb3QnLFxuICAgICAgICAgIGNsYXNzOiBkaXRvLnNldHRpbmdzLnJvb3RDbGFzcyxcbiAgICAgICAgICB1bnJlc29sdmVkVmlld3M6IHZpZXdzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfSlcbiAgICB9KSlcblxuICAgIGFwcC51c2UoVnVlTm90aWZpY2F0aW9ucywge1xuICAgICAgbmFtZTogJ25vdGlmeScsXG4gICAgICBjb21wb25lbnROYW1lOiAnVnVlTm90aWZpY2F0aW9ucydcbiAgICB9KVxuXG4gICAgLy8gcm9vdC5jb21wb25lbnQoJ3Z1ZS1tb2RhbCcsIFZ1ZU1vZGFsKVxuXG4gICAgYXBwLnVzZShcbiAgICAgIGNyZWF0ZVJvdXRlcih7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBjYXRjaC1hbGwgcm91dGUsIHRvIGJlIHJlcGxhY2VkIGJ5IHRoZSBhY3R1YWwgcm91dGVzXG4gICAgICAgIC8vIG9uY2UgdGhlIHNjaGVtYXMgYXJlIGxvYWRlZCwgdG8gcHJldmVudCB2dWUtcm91dGVyIGZyb20gY29tcGxhaW5pbmcsXG4gICAgICAgIC8vIHNlZTogYHJlc29sdmVWaWV3cygpYCBpbiBgRGl0b1Jvb3RgIGZvciB0aGUgYWN0dWFsIHJvdXRlIHNldHVwLlxuICAgICAgICByb3V0ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnY2F0Y2gtYWxsJyxcbiAgICAgICAgICAgIHBhdGg6ICcvOl8oLiopJyxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBoaXN0b3J5OiBjcmVhdGVXZWJIaXN0b3J5KGRpdG8uYmFzZSksXG4gICAgICAgIGxpbmtBY3RpdmVDbGFzczogJycsXG4gICAgICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAnJ1xuICAgICAgfSlcbiAgICApXG5cbiAgICBlbC5jbGFzc0xpc3QuYWRkKCdkaXRvLWFwcCcpXG4gICAgYXBwLm1vdW50KGVsKVxuICB9XG5cbiAgcmVnaXN0ZXIodHlwZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcih0eXBlLCBvcHRpb25zKVxuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBzdXBlcihcbiAgICAgIGBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c30gKCR7XG4gICAgICAgIHJlc3BvbnNlLnN0YXR1c1RleHRcbiAgICAgIH0pYFxuICAgIClcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0KGFwaSwge1xuICB1cmwsXG4gIG1ldGhvZCA9ICdnZXQnLFxuICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBgcXVlcnlgIG9uIDIwMjItMTEtMDEsXG4gIC8vIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55IG1vcmUuXG4gIHBhcmFtcyA9IG51bGwsXG4gIHF1ZXJ5ID0gcGFyYW1zIHx8IG51bGwsXG4gIGhlYWRlcnMgPSBudWxsLFxuICBkYXRhID0gbnVsbFxufSkge1xuICBpZiAocGFyYW1zKSB7XG4gICAgZGVwcmVjYXRlKFxuICAgICAgYHJlcXVlc3QucGFyYW1zIGlzIGRlcHJlY2F0ZWQuIFVzZSBhY3Rpb24ubWV0aG9kIGFuZCBhY3Rpb24ucGF0aCBpbnN0ZWFkLmBcbiAgICApXG4gIH1cblxuICBjb25zdCBpc0FwaVVybCA9IGFwaS5pc0FwaVVybCh1cmwpXG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeSB9KSwge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgLi4uKGRhdGEgJiYgeyBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4oaXNBcGlVcmwgJiYgYXBpLmhlYWRlcnMpLFxuICAgICAgLi4uaGVhZGVyc1xuICAgIH0sXG4gICAgY3JlZGVudGlhbHM6XG4gICAgICBpc0FwaVVybCAmJiBhcGkuY29ycz8uY3JlZGVudGlhbHNcbiAgICAgICAgPyAnaW5jbHVkZSdcbiAgICAgICAgOiAnc2FtZS1vcmlnaW4nXG4gIH0pXG5cbiAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIHJlc3BvbnNlLmRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKHJlc3BvbnNlKVxuICB9XG4gIHJldHVybiByZXNwb25zZVxufVxuXG5mdW5jdGlvbiBpc0FwaVVybChhcGksIHVybCkge1xuICByZXR1cm4gIWlzQWJzb2x1dGVVcmwodXJsKSB8fCB1cmwuc3RhcnRzV2l0aChhcGkudXJsKVxufVxuXG5mdW5jdGlvbiBnZXRBcGlVcmwoYXBpLCB7IHVybCwgcXVlcnkgfSkge1xuICBpZiAoIWlzQWJzb2x1dGVVcmwodXJsKSkge1xuICAgIHVybCA9IGNvbWJpbmVVcmxzKGFwaS51cmwsIHVybClcbiAgfVxuICAvLyBTdXBwb3J0IG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMsIHRvIGJlIGFyZSBhZGRlZCB0byB0aGUgVVJMLlxuICBjb25zdCBzZWFyY2ggPSBmb3JtYXRRdWVyeShxdWVyeSlcbiAgcmV0dXJuIHNlYXJjaCA/IGAke3VybH0/JHtzZWFyY2h9YCA6IHVybFxufVxuXG5mdW5jdGlvbiBjb21iaW5lVXJscyhiYXNlVXJsLCByZWxhdGl2ZVVybCkge1xuICAvLyBVc2Ugc2FtZSBhcHByb2FjaCBhcyBheGlvcyBgY29tYmluZVVSTHMoKWAgdG8gam9pbiBiYXNlVXJsICYgcmVsYXRpdmVVcmw6XG4gIHJldHVybiBgJHtiYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpfS8ke3JlbGF0aXZlVXJsLnJlcGxhY2UoL15cXC8rLywgJycpfWBcbn1cbiJdLCJuYW1lcyI6WyJhcHBTdGF0ZSIsInJlYWN0aXZlIiwiYXBwZW5kRGF0YVBhdGgiLCJkYXRhUGF0aCIsInRva2VuIiwicGFyc2VQYXJlbnREYXRhUGF0aCIsInBhdGgiLCJwYXJzZURhdGFQYXRoIiwicGFyc2VJdGVtRGF0YVBhdGgiLCJuZXN0ZWQiLCJnZXRJdGVtRGF0YVBhdGgiLCJub3JtYWxpemVEYXRhUGF0aCIsInBhcnNlUGFyZW50SXRlbURhdGFQYXRoIiwiaXNJbnRlZ2VyIiwiZ2V0UGFyZW50SXRlbURhdGFQYXRoIiwiZ2V0SXRlbSIsInJvb3RJdGVtIiwiZ2V0VmFsdWVBdERhdGFQYXRoIiwiZ2V0UGFyZW50SXRlbSIsImdldExhc3REYXRhUGF0aFRva2VuIiwiZ2V0TGFzdERhdGFQYXRoTmFtZSIsImdldExhc3REYXRhUGF0aEluZGV4IiwiaW5kZXgiLCJ0ZW1wb3JhcnlJZCIsInNldFRlbXBvcmFyeUlkIiwiZGF0YSIsImlkS2V5IiwiaXNUZW1wb3JhcnlJZCIsImlkIiwiaXNSZWZlcmVuY2UiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbnRleHRzIiwiZ2V0IiwiY29udGV4dCIsImtleSIsImRlZmF1bHRWYWx1ZSIsIm9iamVjdCIsInRvUmF3IiwidmFsdWUiLCJpc0Z1bmN0aW9uIiwic2V0IiwiRGl0b0NvbnRleHQiLCJjb21wb25lbnQiLCJpdGVtIiwib3B0aW9ucyIsImxvY2F0aW9uIiwicmVzb3VyY2UiLCJFbWl0dGVyTWl4aW4iLCJldmVudCIsImNhbGxiYWNrIiwiaXNBcnJheSIsImV2IiwiaXNQbGFpbk9iamVjdCIsImxpc3RlbmVycyIsImNhbGxiYWNrcyIsIm9uIiwiYXJncyIsImVudHJ5IiwiX2EiLCJjYiIsInF1ZXVlIiwicmVzb2x2ZSIsIm5leHQiLCJyZXN1bHQiLCJyZXMiLCJlcnJvciIsInRhcmdldCIsInR5cGVDaGVja2VycyIsImlzQm9vbGVhbiIsImlzTnVtYmVyIiwiaXNTdHJpbmciLCJpc0RhdGUiLCJpc09iamVjdCIsImlzUmVnRXhwIiwidG9Cb29sZWFuIiwidG9OdW1iZXIiLCJ0b1N0cmluZyIsInRvRGF0ZSIsInRvQXJyYXkiLCJhc0FycmF5IiwidG9PYmplY3QiLCJ0b1JlZ0V4cCIsInR5cGVDb252ZXJ0ZXJzIiwiaXNNYXRjaGluZ1R5cGUiLCJ0eXBlcyIsInR5cGUiLCJjb252ZXJ0VHlwZSIsImNvbnZlcnRlciIsImhhc1Jlc291cmNlIiwic2NoZW1hIiwiZ2V0UmVzb3VyY2UiLCJkZWZhdWx0cyIsInBhcmVudCIsImRlZnMiLCJnZXRNZW1iZXJSZXNvdXJjZSIsInBpY2tCeSIsIkRpdG9NaXhpbiIsInVpZCIsIm5leHRVaWQiLCJsYWJlbGl6ZSIsImtleU9yRGF0YVBhdGgiLCJkZWYiLCJjb252ZXJ0ZWQiLCJuYW1lIiwidmVyYiIsInF1ZXJ5IiwidXJsIiwibWV0aG9kIiwiaW50ZXJuYWwiLCJjaGVja1VzZXIiLCJyZXNwb25zZSIsImVxdWFscyIsImNvbXBvbmVudHMiLCJidXR0b25zIiwic2V0dGluZ3MiLCJjYWNoZSIsImNhY2hlUGFyZW50IiwibG9hZENhY2hlIiwiY2FjaGVLZXkiLCJsb2NhbGUiLCJmb3JtYXQiLCJhIiwiYm9keSIsImFjY2Vzc29yIiwid2F0Y2giLCJldmVudHMiLCJoYW5kbGVycyIsImV4cHIiLCJhZGRFdmVudCIsImh5cGhlbmF0ZSIsImhhc0xpc3RlbmVycyIsInBhcmVudEhhc0xpc3RlbmVycyIsImdldENvbnRleHQiLCJwYXJhbXMiLCJjcmVkaXRjYXJkIiwiaXNDcmVkaXRDYXJkIiwiZGVjaW1hbHMiLCJtYXRjaCIsImVtYWlsIiwiaXNFbWFpbCIsImhvc3RuYW1lIiwiaXNIb3N0bmFtZSIsImRvbWFpbiIsImlzRG9tYWluIiwiaW50ZWdlciIsIm1heCIsIm1pbiIsInBhc3N3b3JkIiwicmFuZ2UiLCJyZXF1aXJlZCIsImlzVXJsIiwiVmFsaWRhdGlvbk1peGluIiwibm90aWZ5IiwiaXNWYWxpZCIsInJ1bGUiLCJzZXR0aW5nIiwidmFsaWRhdG9yIiwidmFsaWRhdGlvbnMiLCJ2YWxpZGF0ZSIsIm1lc3NhZ2UiLCJhZGRMYWJlbCIsImVycm9ycyIsImZvY3VzIiwiZ2V0U2NoZW1hQWNjZXNzb3IiLCJnZXRTdG9yZUFjY2Vzc29yIiwiVHlwZU1peGluIiwiY29tcHV0ZVZhbHVlIiwicGFyc2UiLCJzY2hlbWFDb21wb25lbnQiLCJsYWJlbCIsImNhbWVsaXplIiwibmF0aXZlRmllbGQiLCJ0ZXh0RmllbGQiLCJhdHRyaWJ1dGVzIiwiYWRkIiwib25Gb2N1cyIsIm9uQmx1ciIsIm9uSW5wdXQiLCJvbkNoYW5nZSIsImVsZW1lbnQiLCJfYiIsInVpZE1hcCIsImdldFVpZCIsIml0ZW1JZCIsIlNjaGVtYUdyYXBoIiwiX19wdWJsaWNGaWVsZCIsInN1YkdyYXBoIiwicGFydCIsInJlbGF0ZWREYXRhUGF0aCIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJyZWxhdGVkIiwicmVmZXJlbmNlIiwic291cmNlIiwicmVsYXRpb24iLCJ2YWx1ZXMiLCJyZW1vdmVJZCIsInJlZmVyZW5jZUlkIiwicmVmS2V5IiwicmV2VmFsdWUiLCJ0eXBlQ29tcG9uZW50cyIsInVua25vd25UeXBlUmVwb3J0ZWQiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMiLCJzY2hlbWFzIiwiaXNTaW5nbGVDb21wb25lbnRWaWV3IiwiaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMiLCJnZXRUYWJTY2hlbWFzIiwiZmluZFNjaGVtYUNvbXBvbmVudCIsInNvbWVTY2hlbWFDb21wb25lbnQiLCJpc1NjaGVtYSIsImlzRm9ybSIsImlzVmlldyIsImlzVGFiIiwiaXNQYW5lbCIsImdldFNjaGVtYUlkZW50aWZpZXIiLCJyZXNvbHZlU2NoZW1hIiwidW53cmFwTW9kdWxlIiwiaXNQcm9taXNlIiwiaXNNb2R1bGUiLCJrZXlzIiwicmVzb2x2ZVNjaGVtYXMiLCJ1bnJlc29sdmVkU2NoZW1hcyIsInJlc29sdmVJdGVtIiwibWFwQ29uY3VycmVudGx5IiwicmVzb2x2ZVNjaGVtYUNvbXBvbmVudCIsIm1hcmtSYXciLCJyZXNvbHZlU2NoZW1hQ29tcG9uZW50cyIsInByb2Nlc3NTY2hlbWFDb21wb25lbnRzIiwiYXBpIiwicm91dGVzIiwibGV2ZWwiLCJwcm9taXNlcyIsInByb2Nlc3MiLCJyZWxhdGl2ZUxldmVsIiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudCIsImdldFBhbmVsU2NoZW1hcyIsInByb2Nlc3NTY2hlbWFEZWZhdWx0cyIsInBhbmVsIiwiZ2V0VHlwZU9wdGlvbnMiLCJwcm9jZXNzVmlldyIsInByb2Nlc3NSb3V0ZVNjaGVtYSIsInByb2Nlc3NOZXN0ZWRTY2hlbWFzIiwiY2hpbGRyZW4iLCJtZXJnZSIsInByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyIsImZvcm1zIiwiZ2V0Rm9ybVNjaGVtYXMiLCJmb3JtIiwicHJvY2Vzc0Zvcm1zIiwicHJvY2Vzc0Zvcm0iLCJwcm9jZXNzVGFiIiwicHJvY2Vzc1BhbmVsIiwidGFicyIsInBhbmVscyIsInRhYiIsImhhc0Zvcm1TY2hlbWEiLCJoYXNNdWx0aXBsZUZvcm1TY2hlbWFzIiwiZ2V0Vmlld0Zvcm1TY2hlbWEiLCJ2aWV3Iiwidmlld1NjaGVtYSIsImdldFZpZXdTY2hlbWEiLCJnZXRWaWV3RWRpdFBhdGgiLCJtb2RpZnlGb3JtIiwiY29tcGFjdCIsImdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zIiwiZ2V0SXRlbUZvcm1TY2hlbWEiLCJpc0NvbXBhY3QiLCJpc0lubGluZWQiLCJpc05lc3RlZCIsIm9taXRQYWRkaW5nIiwiYWxpZ25Cb3R0b20iLCJnZXREZWZhdWx0VmFsdWUiLCJjbG9uZSIsImlnbm9yZU1pc3NpbmdWYWx1ZSIsInR5cGVPcHRpb25zIiwic2V0RGVmYXVsdFZhbHVlcyIsInByb2Nlc3NTY2hlbWFEYXRhIiwicm9vdERhdGEiLCJjb21wdXRlIiwiY2xvbmVJdGVtIiwiY29weSIsIm9yZGVyS2V5IiwicHJvY2Vzc0RhdGEiLCJzY2hlbWFPbmx5IiwicHJvY2Vzc2VkRGF0YSIsIndyYXBQcmltaXRpdmVzIiwiYiIsImlkMSIsImlkMiIsImV4Y2x1ZGUiLCJwcm9jZXNzVmFsdWUiLCJwcm9jZXNzQmVmb3JlIiwicHJvY2Vzc0FmdGVyIiwicHJvY2Vzc0NvbXBvbmVudHMiLCJnZXREYXRhUGF0aCIsImNvbXBvbmVudFNjaGVtYSIsImNvbXBvbmVudERhdGFQYXRoIiwicHJvY2Vzc0l0ZW0iLCJwcm9jZXNzZWRJdGVtIiwiZ2V0TmFtZWRTY2hlbWFzIiwiYXJyYXkiLCJ0b1NjaGVtYSIsImdldEJ1dHRvblNjaGVtYXMiLCJnZXRUeXBlIiwic2NoZW1hT3JUeXBlIiwiZ2V0U291cmNlVHlwZSIsImdldFBhbmVsRW50cnkiLCJ0YWJDb21wb25lbnQiLCJnZXRQYW5lbEVudHJpZXMiLCJwYW5lbFNjaGVtYXMiLCJwYW5lbEVudHJpZXMiLCJnZXRBbGxQYW5lbEVudHJpZXMiLCJwYW5lbFNjaGVtYSIsImlzT2JqZWN0U291cmNlIiwiaXNMaXN0U291cmNlIiwiZ2V0SXRlbUlkIiwiZ2V0SXRlbVVpZCIsInJlc29sdmVNZXJnZWRPcHRpb25zIiwibWl4aW5zIiwibWVyZ2VPcHRpb25zIiwidG8iLCJmcm9tIiwibWl4aW4iLCJkaXRvT3B0aW9uS2V5cyIsIkRpdG9Db21wb25lbnQiLCJkZWZpbml0aW9uIiwiRGl0b1VzZXIiLCJyb2xlcyIsInJvbGUiLCJTY2hlbWFQYXJlbnRNaXhpbiIsInNjaGVtYUNvbXBvbmVudHMiLCJWYWxpZGF0b3JNaXhpbiIsIml0IiwiUm91dGVNaXhpbiIsInJvdXRlQ29tcG9uZW50IiwibWF0Y2hlZCIsImkiLCJyZWNvcmQiLCJicmVhZGNydW1iIiwicm91dGVDb21wb25lbnRzIiwib2siLCJ0ZW1wbGF0ZVBhdGgiLCJyb290UGF0aCIsImdldENvbW1vblByZWZpeCIsImlzTG9hZGluZyIsImNvcHlEYXRlIiwiZGF0ZSIsInllYXIiLCJtb250aCIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCIsIl9zZmNfbWFpbiIsIndlZWtkYXlOYW1lcyIsIm1vbnRoTmFtZXMiLCJnZXRMb2NhbGVOYW1lcyIsIm1vZGUiLCJvdmVycmlkZXMiLCJzdGVwIiwiY3VycmVudFZhbHVlIiwic3RhdGUiLCJob3IiLCJ2ZXIiLCJlbnRlciIsImN1cnJlbnRNb2RlIiwic3RhcnRZZWFyIiwiZmlyc3REYXlXZWVrIiwibnVtRGF5cyIsInByZXZNb250aCIsInByZXZNb250aE51bURheXMiLCJ0b2RheSIsImlzRGF5IiwibmV4dE1vbnRoTmVlZCIsIm5leHRNb250aCIsImxvY2FsZU5hbWVzIiwibmFtZXMiLCJhZGRFdmVudHMiLCJnZXRLZXkiLCJnZXRLZXlOYXZpZ2F0aW9uIiwiY2xhc3NlcyIsInNob3ciLCJ0cmlnZ2VyIiwicG9wdXAiLCJlbCIsImJvdW5kcyIsInRyaWdnZXJMZWZ0IiwidHJpZ2dlclRvcCIsInRyaWdnZXJXaWR0aCIsInRyaWdnZXJIZWlnaHQiLCJwb3B1cFdpZHRoIiwicG9wdXBIZWlnaHQiLCJwYXJ0MSIsInBhcnQyIiwid2luV2lkdGgiLCJ3aW5IZWlnaHQiLCJsZWZ0IiwidG9wIiwidHJpZ2dlckJvdW5kcyIsInNpemUiLCJnZXRMZW5ndGgiLCJUcmlnZ2VyIiwiQ2FsZW5kYXIiLCJJbnB1dEZpZWxkIiwiZGVmYXVsdEZvcm1hdHMiLCJzY3JvbGxUbyIsImR1cmF0aW9uIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicGVyVGljayIsInNldFNlbGVjdGlvbiIsImZpZWxkIiwic3RhcnQiLCJlbmQiLCJmb3JjZSIsInNjcm9sbCIsInJlZiIsImxpbmVIZWlnaHQiLCJzZWxlY3RlZCIsImxlbmd0aCIsIkRhdGVQaWNrZXIiLCJUaW1lUGlja2VyIiwicGFnZSIsInBhZ2VTaXplIiwiY3VycmVudFBhZ2VTaXplIiwic2hvd1ByZXYiLCJzaG93TmV4dCIsInRvdGFsIiwiY3VycmVudFBhZ2UiLCJzaG93TGVuZ3RoIiwibnVtUGFnZXMiLCJwYWdlUmFuZ2UiLCJjaGVja2VkIiwiZGlzYWJsZWQiLCJ1bmNoZWNrZWQiLCJtb2RlbFZhbHVlIiwiVHJhbnNpdGlvbkhlaWdodCIsImVuYWJsZWQiLCJzbG90cyIsImNyZWF0ZUVsZW1lbnQiLCJUcmFuc2l0aW9uIiwicHJvcHMiLCJzZXRTdHlsZSIsInN0eWxlIiwiZm9yY2VSZXBhaW50Iiwid2lkdGgiLCJoZWlnaHQiLCJVc2VGb2N1c1RyYXAiLCJkZWZpbmVDb21wb25lbnQiLCJ0cmFwIiwiYWN0aXZhdGUiLCJkZWFjdGl2YXRlIiwidW5yZWZFbGVtZW50IiwiY3JlYXRlRm9jdXNUcmFwIiwib25TY29wZURpc3Bvc2UiLCJoIiwiZGlhbG9nRGF0YSIsIkRvbU1peGluIiwicmVtb3ZlIiwiaGFuZGxlciIsIkRpdG9EaWFsb2ciLCJlcnIiLCJ0aXRsZSIsInRleHQiLCJsb2ciLCJzdHJpcFRhZ3MiLCJub3RpZmljYXRpb25zIiwiZHVyYXRpb25GYWN0b3IiLCJyZWplY3QiLCJkaWFsb2dJZCIsImFkZGl0aW9uYWxDb21wb25lbnRzIiwicmVkaXJlY3RBZnRlckxvZ2luIiwibG9naW5EYXRhIiwidXNlciIsIkRpdG9WaWV3IiwiZnVsbFBhdGgiLCJhZGRSb3V0ZXMiLCJyb3V0ZXIiLCJyZW1vdmVycyIsInJvdXRlIiwicmVtb3ZlUm91dGUiLCJEaXRvU3Bpbm5lciIsImNvbG9yIiwiUHVsbGRvd25NaXhpbiIsInN0YXJ0VGltZSIsIm9wZW4iLCJjb250ZW50IiwiYXNPYmplY3QiLCJJdGVtTWl4aW4iLCJleHRlbmRlZCIsIml0ZW1MYWJlbCIsImZvcm1MYWJlbCIsImdldEZvcm1MYWJlbCIsInByZWZpeCIsInN1ZmZpeCIsImNvbHVtbnMiLCJoYWRMYWJlbCIsInBhbmUiLCJjdXJyZW50VGFiIiwiZmlyc3QiLCJkZWZhdWx0VGFiIiwiZGF0YVBhdGhPck5hbWUiLCJleHBhbmQiLCJjb21wb25lbnRzQnlEYXRhUGF0aCIsImRhdGFQYXRocyIsImNoZWNrIiwidW5tYXRjaGVkIiwiZXJycyIsImZ1bGxEYXRhUGF0aCIsImRhdGFQYXRoUGFydHMiLCJmb3VuZCIsInByb3BlcnR5Iiwic3ViQ29tcG9uZW50cyIsInJlZ2lzdHJ5IiwiZW50cmllc0J5RGF0YVBhdGgiLCJfaG9pc3RlZF8xIiwiX29wZW5CbG9jayIsIl9jcmVhdGVFbGVtZW50QmxvY2siLCJfRnJhZ21lbnQiLCJfcmVuZGVyTGlzdCIsIl9jdHgiLCJfaG9pc3RlZF8yIiwiX2NyZWF0ZUJsb2NrIiwiX2NvbXBvbmVudF9EaXRvQ29udGFpbmVyIiwibmVzdGVkRGF0YVBhdGgiLCJzdG9yZSIsIl9ob2lzdGVkXzMiLCJwYXJzZUZyYWN0aW9uIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwiY29udGFpbmVyQ2xhc3MiLCJiYXNpcyIsImdyb3ciLCJzaHJpbmsiLCJiYXNpc0lzQXV0byIsImhhc1ZOb2RlQ29udGVudCIsInZub2RlIiwiQ29tbWVudCIsImhhc1Nsb3RDb250ZW50Iiwic2xvdCIsInVzZVNsb3RzIiwiYnV0dG9uIiwiY2FwaXRhbGl6ZSIsImNsaXBib2FyZERhdGEiLCJwYXN0ZSIsInJlcG9ydCIsImpzb24iLCJfZCIsIl9jIiwiZGVpbmRlbnQiLCIkc2NoZW1hIiwiX2UiLCJMb2FkaW5nTWl4aW4iLCJ1cGRhdGVSb290IiwidXBkYXRlVmlldyIsIlJlc291cmNlTWl4aW4iLCJhbW91bnQiLCJ2ZXJicyIsImNsZWFyIiwibG9hZGluZ09wdGlvbnMiLCJyZXF1ZXN0Iiwic2V0RGF0YSIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJub3RpZnlTdWNjZXNzIiwibm90aWZ5RXJyb3IiLCJyZXNvbHZlUGF0aCIsImlzQ3JlYXRpbmciLCJwcm92aWRlc0RhdGEiLCJkYXRhUGFydHMiLCJwYXRoUGFydHMiLCJyb3V0ZVBhcnRzIiwibGFzdERhdGFQYXJ0IiwibCIsImRhdGFQYXJ0IiwibWFpblNjaGVtYUNvbXBvbmVudCIsInByZXNlbnQiLCJjbG9zZUZvcm0iLCJnZXRWZXJiIiwiYnV0dG9uUmVzb3VyY2UiLCJzdWNjZXNzIiwiX3Jlc291cmNlIiwiX21ldGhvZCIsIkRpdG9Gb3JtIiwic2NvcGUiLCJQYWdpbmF0aW9uIiwiU29ydGFibGVNaXhpbiIsImZvcmNlRmFsbGJhY2siLCJvbGRJbmRleCIsIm5ld0luZGV4IiwibGlzdCIsInBhZ2luYXRpb25SYW5nZSIsIm9mZnNldCIsIl9ub3JtYWxpemVTdHlsZSIsIl9jYWNoZSIsIl93aXRoTW9kaWZpZXJzIiwiJGV2ZW50IiwiX25vcm1hbGl6ZUNsYXNzIiwiX2NyZWF0ZUVsZW1lbnRWTm9kZSIsIl9ob2lzdGVkXzQiLCJfdG9EaXNwbGF5U3RyaW5nIiwiX2hvaXN0ZWRfNSIsIl9ob2lzdGVkXzciLCJfbWVyZ2VQcm9wcyIsIl93aXRoRGlyZWN0aXZlcyIsIl9ob2lzdGVkXzgiLCJfY29tcG9uZW50X0RpdG9MYWJlbCIsIl9jcmVhdGVWTm9kZSIsIl9jb21wb25lbnRfRGl0b1RhYmxlQ2VsbCIsIl9jb21wb25lbnRfRGl0b0RyYWdnYWJsZSIsIl9jb21wb25lbnRfRGl0b1RyZWVJdGVtIiwiY2hpbGRyZW5TY2hlbWEiLCJjaGlsZHJlbkxpc3QiLCJlZGl0UGF0aCIsImNoaWxkcmVuT3BlbiIsIm51bUNoaWxkcmVuIiwiY3JlYXRhYmxlIiwiZWRpdGFibGUiLCJvcmRlciIsImNvbHVtbiIsInJlbmRlciIsImVzY2FwZUh0bWwiLCJfX2RlZlByb3AiLCJfX2dldE93blByb3BTeW1ib2xzIiwiX19oYXNPd25Qcm9wIiwiX19wcm9wSXNFbnVtIiwiX19kZWZOb3JtYWxQcm9wIiwib2JqIiwiX19zcHJlYWRWYWx1ZXMiLCJwcm9wIiwiX19vYmpSZXN0IiwidXNlU29ydGFibGUiLCJzb3J0YWJsZSIsImRvY3VtZW50IiwiZGVmYXVsdERvY3VtZW50IiwicmVzZXRPcHRpb25zIiwiZGVmYXVsdE9wdGlvbnMiLCJlIiwibW92ZUFycmF5RWxlbWVudCIsIlNvcnRhYmxlIiwic3RvcCIsInRyeU9uTW91bnRlZCIsInRyeU9uU2NvcGVEaXNwb3NlIiwidG9WYWx1ZSIsIm5leHRUaWNrIiwiVXNlU29ydGFibGUiLCJ1c2VWTW9kZWwiLCJEaXRvVk5vZGUiLCJEaXRvVHlwZUNvbXBvbmVudCQxIiwiRGl0b1R5cGVDb21wb25lbnQiLCJvbkNsaWNrIiwiRGF0YU1peGluIiwicmVzb2x2ZUNvdW50ZXIiLCJhc3luY0VudHJ5IiwicmVzb2x2ZWREYXRhIiwibG9hZCIsInRpbWVyIiwiT3B0aW9uc01peGluIiwiY29udmVydFZhbHVlIiwiY29udmVydCIsInNlYXJjaCIsImZpbHRlciIsImRlYm91bmNlIiwiZGVib3VuY2VBc3luYyIsIm9wdGlvbiIsImdyb3VwZWQiLCJyZXN1bHRzIiwiZ3JvdXAiLCJmaW5kT3B0aW9uIiwiZ3JvdXBCeSIsIm9wdGlvblZhbHVlIiwib3B0aW9uTGFiZWwiLCJwcm9jZXNzUmVsYXRlIiwiZmxhc2siLCJDb2RlRmxhc2siLCJjaGFuZ2VkIiwiaWdub3JlV2F0Y2giLCJpZ25vcmVVcGRhdGUiLCJzZXRDb2RlIiwiY29kZSIsInNldFZhbHVlIiwiU2tldGNoUGlja2VyIiwidGlueWNvbG9yIiwiZm9jdXNlZCIsIkRhdGVUaW1lUGlja2VyIiwiU291cmNlTWl4aW4iLCJkZWZhdWx0U29ydCIsImRpcmVjdGlvbiIsImRyYWdnYWJsZSIsImNvbGxhcHNpYmxlIiwibGlzdERhdGEiLCJvbkNvbXBsZXRlIiwib3BlbmVkIiwiY2FsbE9uQ29tcGxldGUiLCJpbmxpbmVkIiwicGFyYW0iLCJtZXRhIiwiZm9ybU1ldGEiLCJjaGlsZFJvdXRlcyIsImdldFBhdGhXaXRoUGFyYW0iLCJzb3VyY2VQYXRoIiwiZm9ybVJvdXRlIiwiZmxhdFJvdXRlcyIsInN1YlJvdXRlcyIsImNoaWxkUm91dGUiLCJmaWx0ZXJDb21wb25lbnRzIiwiZGF0ZUZvcm1hdCIsImNyZWF0ZUZpbHRlcnNQYW5lbCIsImZpbHRlcnMiLCJwcm94eSIsInN0aWNreSIsImZpbHRlclNjaGVtYXMiLCJwYXJzZUZpbHRlcnNEYXRhIiwiY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMiLCJjcmVhdGVGaWx0ZXJzQnV0dG9ucyIsImZvcm1hdEZpbHRlcnNEYXRhIiwic21hbGwiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsIl9jb21wb25lbnRfRGl0b1RhYmxlSGVhZCIsIl9jb21wb25lbnRfRGl0b1NjaGVtYUlubGluZWQiLCJfcmVzb2x2ZUR5bmFtaWNDb21wb25lbnQiLCJfY29tcG9uZW50X0RpdG9FZGl0QnV0dG9ucyIsIl9ob2lzdGVkXzkiLCJnZXRMaXN0Q29tcG9uZW50IiwiZmlsdGVyc0RhdGFQYXRoIiwiRWRpdG9yQ29udGVudCIsIkljb24iLCJlZGl0b3IiLCJtYXJrQnV0dG9ucyIsImJhc2ljTm9kZUJ1dHRvbnMiLCJvdGhlck5vZGVCdXR0b25zIiwidG9vbEJ1dHRvbnMiLCJlbmFibGVSdWxlcyIsInNldFZhbHVlRGVib3VuY2VkIiwib25VcGRhdGUiLCJFZGl0b3IiLCJnZXRQb2ludCIsIngiLCJ5IiwicHJldlkiLCJtb3VzZW1vdmUiLCJkaWFsb2dDb21wb25lbnQiLCJnZXRNYXJrQXR0cmlidXRlcyIsImhyZWYiLCJtYXJrcyIsIm5vZGVzIiwidG9vbHMiLCJEb2N1bWVudCIsIlRleHQiLCJQYXJhZ3JhcGgiLCJCb2xkIiwiSXRhbGljIiwiVW5kZXJsaW5lIiwiU3RyaWtlIiwiU21hbGwiLCJDb2RlIiwiTGlua1dpdGhUaXRsZSIsIkJsb2NrcXVvdGUiLCJDb2RlQmxvY2siLCJIYXJkQnJlYWsiLCJIZWFkaW5nIiwiSG9yaXpvbnRhbFJ1bGUiLCJMaXN0SXRlbSIsIkJ1bGxldExpc3QiLCJPcmRlcmVkTGlzdCIsIkhpc3RvcnkiLCJleHRlbnNpb24iLCJzZXR0aW5nc05hbWUiLCJkZXNjcmlwdGlvbnMiLCJhZGRCdXR0b24iLCJpY29uIiwiaWdub3JlQWN0aXZlIiwiZGVzY3JpcHRpb24iLCJzZXR0aW5nTmFtZSIsInVuZGVyc2NvcmUiLCJhdHRyaWJ1dGUiLCJNYXJrIiwiY29tbWFuZHMiLCJMaW5rIiwibm9kZSIsIl9jb21wb25lbnRfVnVlTXVsdGlzZWxlY3QiLCJWdWVNdWx0aXNlbGVjdCIsInBsYWNlaG9sZGVyIiwic2VhcmNoYWJsZSIsInRhZ2dhYmxlIiwidGFnIiwiTnVtYmVyTWl4aW4iLCJTd2l0Y2hCdXR0b24iLCJtYXNrZWRQYXNzd29yZCIsImhhc0VkaXRhYmxlRm9ybXMiLCJmb3JtYXRGaWxlU2l6ZSIsImZpbGVzaXplIiwiVnVlVXBsb2FkIiwiYXNGaWxlcyIsImFjY2VwdCIsIm1heFNpemUiLCJwYXJzZUZpbGVTaXplIiwiZmlsZSIsIm5ld0ZpbGUiLCJvbGRGaWxlIiwieGhyIiwiZmlsZXMiLCJ1cGxvYWQiLCJsb2dnZWREZXByZWNhdGlvbnMiLCJkZXByZWNhdGUiLCJmb3JtYXRRdWVyeSIsInZhbCIsIkRpdG9BZG1pbiIsImRpdG8iLCJ2aWV3cyIsImdldEFwaVVybCIsImlzQXBpVXJsIiwidXNlcnMiLCJwYXJlbnRQYXRoIiwiYXBwIiwiY3JlYXRlQXBwIiwiRGl0b1Jvb3QiLCJWdWVOb3RpZmljYXRpb25zIiwiY3JlYXRlUm91dGVyIiwiY3JlYXRlV2ViSGlzdG9yeSIsIlJlcXVlc3RFcnJvciIsImhlYWRlcnMiLCJpc0Fic29sdXRlVXJsIiwiY29tYmluZVVybHMiLCJiYXNlVXJsIiwicmVsYXRpdmVVcmwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBQUEsS0FBZUMsR0FBUztBQUFBLEVBQ3RCLE9BQU87QUFBQSxFQUNQLGlCQUFpQixDQUFFO0FBQUEsRUFDbkIsTUFBTTtBQUFBLEVBQ04sV0FBVyxDQUFFO0FBQUE7QUFBQSxFQUNiLGFBQWE7QUFBQSxFQUNiLGVBQWU7QUFDakIsQ0FBQztBQ0ZNLFNBQVNDLEVBQWVDLEdBQVVDLEdBQU87QUFDOUMsU0FBT0QsSUFDSCxHQUFHQSxLQUFZQyxNQUNmQTtBQUNOO0FBRU8sU0FBU0MsR0FBb0JGLEdBQVU7QUFDNUMsUUFBTUcsSUFBT0MsR0FBY0osQ0FBUTtBQUNuQyxTQUFBRyxLQUFBLFFBQUFBLEVBQU0sT0FDQ0E7QUFDVDtBQU1PLFNBQVNFLEdBQWtCTCxHQUFVTSxJQUFTLElBQU87QUFDMUQsU0FBT0EsSUFBU0osR0FBb0JGLENBQVEsSUFBSUksR0FBY0osQ0FBUTtBQUN4RTtBQUVPLFNBQVNPLEdBQWdCUCxHQUFVTSxJQUFTLElBQU87QUFDeEQsU0FBT0UsR0FBa0JILEdBQWtCTCxHQUFVTSxDQUFNLENBQUM7QUFDOUQ7QUFFTyxTQUFTRyxHQUF3QlQsR0FBVU0sSUFBUyxJQUFPO0FBQ2hFLFFBQU1ILElBQU9FLEdBQWtCTCxHQUFVTSxDQUFNO0FBQy9DLE1BQUlILEdBQU07QUFHUixRQUFJRjtBQUNKO0FBQ0UsTUFBQUEsSUFBUUUsRUFBSyxJQUFL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