diff --git a/_dev/js/listing.js b/_dev/js/listing.js index a890230..fe8c83a 100644 --- a/_dev/js/listing.js +++ b/_dev/js/listing.js @@ -221,7 +221,7 @@ $(document).ready(() => { data.rendered_products_header, ); } - + $('#show-filters').on('click.offcanvas', () => { $('#product-list-top-filters').show(); }); diff --git a/_dev/js/theme.js b/_dev/js/theme.js index b7221a0..a4e5fc3 100644 --- a/_dev/js/theme.js +++ b/_dev/js/theme.js @@ -105,12 +105,18 @@ $(() => { }); $('#show-filters').on('click.offcanvas', () => { - $('#product-list-top-filters').show(); - + $('#overlay').show(); + $('#product-list-top-filters').show(); }); - + $('#hide-filters').on('click.offcanvas', () => { - $('#product-list-top-filters').hide(); + $('#product-list-top-filters').hide(); + $('#overlay').hide(); + }); + + $('#overlay').on('click', function() { + $('#product-list-top-filters').hide(); + $('#overlay').hide(); }); function ThAccordion() {} diff --git a/assets/js/theme.js b/assets/js/theme.js index 988c126..bfa357a 100644 --- a/assets/js/theme.js +++ b/assets/js/theme.js @@ -7292,10 +7292,16 @@ } }); $$1("#show-filters").on("click.offcanvas", () => { + $$1("#overlay").show(); $$1("#product-list-top-filters").show(); }); $$1("#hide-filters").on("click.offcanvas", () => { $$1("#product-list-top-filters").hide(); + $$1("#overlay").hide(); + }); + $$1("#overlay").on("click", function() { + $$1("#product-list-top-filters").hide(); + $$1("#overlay").hide(); }); function ThAccordion() { } @@ -7366,4 +7372,4 @@ }); }); })(jQuery, prestashop); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuanMiLCJzb3VyY2VzIjpbIi4uLy4uL19kZXYvbm9kZV9tb2R1bGVzL2pxdWVyeS1tb2RhbC9qcXVlcnkubW9kYWwuanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy90b29sdGlwc3Rlci9kaXN0L2pzL3Rvb2x0aXBzdGVyLmJ1bmRsZS5taW4uanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9ib290c3RyYXAtdG91Y2hzcGluL2Rpc3QvanF1ZXJ5LmJvb3RzdHJhcC10b3VjaHNwaW4uanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9qcXVlcnktdG91Y2hzd2lwZS9qcXVlcnkudG91Y2hTd2lwZS5taW4uanMiLCIuLi8uLi9fZGV2L2pzL3NlbGVjdG9ycy5qcyIsIi4uLy4uL19kZXYvanMvdGFicy5qcyIsIi4uLy4uL19kZXYvanMvZWFzeXpvb20uanMiLCIuLi8uLi9fZGV2L2pzL3Jlc3BvbnNpdmUuanMiLCIuLi8uLi9fZGV2L2pzL2NoZWNrb3V0LmpzIiwiLi4vLi4vX2Rldi9qcy9jdXN0b21lci5qcyIsIi4uLy4uL19kZXYvbm9kZV9tb2R1bGVzL3ZlbG9jaXR5LWFuaW1hdGUvdmVsb2NpdHkuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvdXBkYXRlLXNvdXJjZXMuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvcHJvZHVjdC1taW5pYXR1cmUuanMiLCIuLi8uLi9fZGV2L2pzL2xpc3RpbmcuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvcHJvZHVjdC1zZWxlY3QuanMiLCIuLi8uLi9fZGV2L2pzL3Byb2R1Y3QuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvZGVib3VuY2UuanMiLCIuLi8uLi9fZGV2L2pzL2NhcnQuanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwiLi4vLi4vX2Rldi9qcy9jb21wb25lbnRzL2Ryb3AtZG93bi5qcyIsIi4uLy4uL19kZXYvanMvY29tcG9uZW50cy9mb3JtLmpzIiwiLi4vLi4vX2Rldi9ub2RlX21vZHVsZXMvc3ByaW50Zi1qcy9zcmMvc3ByaW50Zi5qcyIsIi4uLy4uL19kZXYvanMvY29tcG9uZW50cy91c2VQYXNzd29yZFBvbGljeS5qcyIsIi4uLy4uL19kZXYvanMvY29tcG9uZW50cy90b3AtbWVudS5qcyIsIi4uLy4uL19kZXYvbm9kZV9tb2R1bGVzL2pxdWVyeS10b2FzdC1wbHVnaW4vZGlzdC9qcXVlcnkudG9hc3QubWluLmpzIiwiLi4vLi4vX2Rldi9qcy9jb21wb25lbnRzL2Jsb2NrLWNhcnQuanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9qcXVlcnktb2ZmY2FudmFzL2Rpc3QvanF1ZXJ5Lm9mZmNhbnZhcy5taW4uanMiLCIuLi8uLi9fZGV2L2pzL3RoZW1lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQSBzaW1wbGUgalF1ZXJ5IG1vZGFsIChodHRwOi8vZ2l0aHViLmNvbS9reWxlZm94L2pxdWVyeS1tb2RhbClcbiAgICBWZXJzaW9uIDAuOS4yXG4qL1xuXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgLy8gTWFraW5nIHlvdXIgalF1ZXJ5IHBsdWdpbiB3b3JrIGJldHRlciB3aXRoIG5wbSB0b29sc1xuICAvLyBodHRwOi8vYmxvZy5ucG1qcy5vcmcvcG9zdC8xMTI3MTIxNjk4MzAvbWFraW5nLXlvdXItanF1ZXJ5LXBsdWdpbi13b3JrLWJldHRlci13aXRoLW5wbVxuICBpZih0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuICAgIGZhY3RvcnkocmVxdWlyZShcImpxdWVyeVwiKSwgd2luZG93LCBkb2N1bWVudCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgZmFjdG9yeShqUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpO1xuICB9XG59KGZ1bmN0aW9uKCQsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCkge1xuXG4gIHZhciBtb2RhbHMgPSBbXSxcbiAgICAgIGdldEN1cnJlbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG1vZGFscy5sZW5ndGggPyBtb2RhbHNbbW9kYWxzLmxlbmd0aCAtIDFdIDogbnVsbDtcbiAgICAgIH0sXG4gICAgICBzZWxlY3RDdXJyZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChpPW1vZGFscy5sZW5ndGgtMTsgaT49MDsgaS0tKSB7XG4gICAgICAgICAgaWYgKG1vZGFsc1tpXS4kYmxvY2tlcikge1xuICAgICAgICAgICAgbW9kYWxzW2ldLiRibG9ja2VyLnRvZ2dsZUNsYXNzKCdjdXJyZW50Jywhc2VsZWN0ZWQpLnRvZ2dsZUNsYXNzKCdiZWhpbmQnLHNlbGVjdGVkKTtcbiAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgJC5tb2RhbCA9IGZ1bmN0aW9uKGVsLCBvcHRpb25zKSB7XG4gICAgdmFyIHJlbW92ZSwgdGFyZ2V0O1xuICAgIHRoaXMuJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sICQubW9kYWwuZGVmYXVsdHMsIG9wdGlvbnMpO1xuICAgIHRoaXMub3B0aW9ucy5kb0ZhZGUgPSAhaXNOYU4ocGFyc2VJbnQodGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiwgMTApKTtcbiAgICB0aGlzLiRibG9ja2VyID0gbnVsbDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlRXhpc3RpbmcpXG4gICAgICB3aGlsZSAoJC5tb2RhbC5pc0FjdGl2ZSgpKVxuICAgICAgICAkLm1vZGFsLmNsb3NlKCk7IC8vIENsb3NlIGFueSBvcGVuIG1vZGFscy5cbiAgICBtb2RhbHMucHVzaCh0aGlzKTtcbiAgICBpZiAoZWwuaXMoJ2EnKSkge1xuICAgICAgdGFyZ2V0ID0gZWwuYXR0cignaHJlZicpO1xuICAgICAgdGhpcy5hbmNob3IgPSBlbDtcbiAgICAgIC8vU2VsZWN0IGVsZW1lbnQgYnkgaWQgZnJvbSBocmVmXG4gICAgICBpZiAoL14jLy50ZXN0KHRhcmdldCkpIHtcbiAgICAgICAgdGhpcy4kZWxtID0gJCh0YXJnZXQpO1xuICAgICAgICBpZiAodGhpcy4kZWxtLmxlbmd0aCAhPT0gMSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHRoaXMuJGJvZHkuYXBwZW5kKHRoaXMuJGVsbSk7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgLy9BSkFYXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRlbG0gPSAkKCc8ZGl2PicpO1xuICAgICAgICB0aGlzLiRib2R5LmFwcGVuZCh0aGlzLiRlbG0pO1xuICAgICAgICByZW1vdmUgPSBmdW5jdGlvbihldmVudCwgbW9kYWwpIHsgbW9kYWwuZWxtLnJlbW92ZSgpOyB9O1xuICAgICAgICB0aGlzLnNob3dTcGlubmVyKCk7XG4gICAgICAgIGVsLnRyaWdnZXIoJC5tb2RhbC5BSkFYX1NFTkQpO1xuICAgICAgICAkLmdldCh0YXJnZXQpLmRvbmUoZnVuY3Rpb24oaHRtbCkge1xuICAgICAgICAgIGlmICghJC5tb2RhbC5pc0FjdGl2ZSgpKSByZXR1cm47XG4gICAgICAgICAgZWwudHJpZ2dlcigkLm1vZGFsLkFKQVhfU1VDQ0VTUyk7XG4gICAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXRDdXJyZW50KCk7XG4gICAgICAgICAgY3VycmVudC4kZWxtLmVtcHR5KCkuYXBwZW5kKGh0bWwpLm9uKCQubW9kYWwuQ0xPU0UsIHJlbW92ZSk7XG4gICAgICAgICAgY3VycmVudC5oaWRlU3Bpbm5lcigpO1xuICAgICAgICAgIGN1cnJlbnQub3BlbigpO1xuICAgICAgICAgIGVsLnRyaWdnZXIoJC5tb2RhbC5BSkFYX0NPTVBMRVRFKTtcbiAgICAgICAgfSkuZmFpbChmdW5jdGlvbigpIHtcbiAgICAgICAgICBlbC50cmlnZ2VyKCQubW9kYWwuQUpBWF9GQUlMKTtcbiAgICAgICAgICB2YXIgY3VycmVudCA9IGdldEN1cnJlbnQoKTtcbiAgICAgICAgICBjdXJyZW50LmhpZGVTcGlubmVyKCk7XG4gICAgICAgICAgbW9kYWxzLnBvcCgpOyAvLyByZW1vdmUgZXhwZWN0ZWQgbW9kYWwgZnJvbSB0aGUgbGlzdFxuICAgICAgICAgIGVsLnRyaWdnZXIoJC5tb2RhbC5BSkFYX0NPTVBMRVRFKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuJGVsbSA9IGVsO1xuICAgICAgdGhpcy5hbmNob3IgPSBlbDtcbiAgICAgIHRoaXMuJGJvZHkuYXBwZW5kKHRoaXMuJGVsbSk7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH07XG5cbiAgJC5tb2RhbC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6ICQubW9kYWwsXG5cbiAgICBvcGVuOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBtID0gdGhpcztcbiAgICAgIHRoaXMuYmxvY2soKTtcbiAgICAgIHRoaXMuYW5jaG9yLmJsdXIoKTtcbiAgICAgIGlmKHRoaXMub3B0aW9ucy5kb0ZhZGUpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBtLnNob3coKTtcbiAgICAgICAgfSwgdGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiAqIHRoaXMub3B0aW9ucy5mYWRlRGVsYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICB9XG4gICAgICAkKGRvY3VtZW50KS5vZmYoJ2tleWRvd24ubW9kYWwnKS5vbigna2V5ZG93bi5tb2RhbCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0Q3VycmVudCgpO1xuICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT09IDI3ICYmIGN1cnJlbnQub3B0aW9ucy5lc2NhcGVDbG9zZSkgY3VycmVudC5jbG9zZSgpO1xuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNsaWNrQ2xvc2UpXG4gICAgICAgIHRoaXMuJGJsb2NrZXIuY2xpY2soZnVuY3Rpb24oZSkge1xuICAgICAgICAgIGlmIChlLnRhcmdldCA9PT0gdGhpcylcbiAgICAgICAgICAgICQubW9kYWwuY2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgIG1vZGFscy5wb3AoKTtcbiAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICBpZiAoISQubW9kYWwuaXNBY3RpdmUoKSlcbiAgICAgICAgJChkb2N1bWVudCkub2ZmKCdrZXlkb3duLm1vZGFsJyk7XG4gICAgfSxcblxuICAgIGJsb2NrOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuJGVsbS50cmlnZ2VyKCQubW9kYWwuQkVGT1JFX0JMT0NLLCBbdGhpcy5fY3R4KCldKTtcbiAgICAgIHRoaXMuJGJvZHkuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpO1xuICAgICAgdGhpcy4kYmxvY2tlciA9ICQoJzxkaXYgY2xhc3M9XCInICsgdGhpcy5vcHRpb25zLmJsb2NrZXJDbGFzcyArICcgYmxvY2tlciBjdXJyZW50XCI+PC9kaXY+JykuYXBwZW5kVG8odGhpcy4kYm9keSk7XG4gICAgICBzZWxlY3RDdXJyZW50KCk7XG4gICAgICBpZih0aGlzLm9wdGlvbnMuZG9GYWRlKSB7XG4gICAgICAgIHRoaXMuJGJsb2NrZXIuY3NzKCdvcGFjaXR5JywwKS5hbmltYXRlKHtvcGFjaXR5OiAxfSwgdGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkJMT0NLLCBbdGhpcy5fY3R4KCldKTtcbiAgICB9LFxuXG4gICAgdW5ibG9jazogZnVuY3Rpb24obm93KSB7XG4gICAgICBpZiAoIW5vdyAmJiB0aGlzLm9wdGlvbnMuZG9GYWRlKVxuICAgICAgICB0aGlzLiRibG9ja2VyLmZhZGVPdXQodGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiwgdGhpcy51bmJsb2NrLmJpbmQodGhpcyx0cnVlKSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy4kYmxvY2tlci5jaGlsZHJlbigpLmFwcGVuZFRvKHRoaXMuJGJvZHkpO1xuICAgICAgICB0aGlzLiRibG9ja2VyLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLiRibG9ja2VyID0gbnVsbDtcbiAgICAgICAgc2VsZWN0Q3VycmVudCgpO1xuICAgICAgICBpZiAoISQubW9kYWwuaXNBY3RpdmUoKSlcbiAgICAgICAgICB0aGlzLiRib2R5LmNzcygnb3ZlcmZsb3cnLCcnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdzogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkJFRk9SRV9PUEVOLCBbdGhpcy5fY3R4KCldKTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0Nsb3NlKSB7XG4gICAgICAgIHRoaXMuY2xvc2VCdXR0b24gPSAkKCc8YSBocmVmPVwiI2Nsb3NlLW1vZGFsXCIgcmVsPVwibW9kYWw6Y2xvc2VcIiBjbGFzcz1cImNsb3NlLW1vZGFsICcgKyB0aGlzLm9wdGlvbnMuY2xvc2VDbGFzcyArICdcIj4nICsgdGhpcy5vcHRpb25zLmNsb3NlVGV4dCArICc8L2E+Jyk7XG4gICAgICAgIHRoaXMuJGVsbS5hcHBlbmQodGhpcy5jbG9zZUJ1dHRvbik7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbG0uYWRkQ2xhc3ModGhpcy5vcHRpb25zLm1vZGFsQ2xhc3MpLmFwcGVuZFRvKHRoaXMuJGJsb2NrZXIpO1xuICAgICAgaWYodGhpcy5vcHRpb25zLmRvRmFkZSkge1xuICAgICAgICB0aGlzLiRlbG0uY3NzKHtvcGFjaXR5OiAwLCBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ30pLmFuaW1hdGUoe29wYWNpdHk6IDF9LCB0aGlzLm9wdGlvbnMuZmFkZUR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGVsbS5jc3MoJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLk9QRU4sIFt0aGlzLl9jdHgoKV0pO1xuICAgIH0sXG5cbiAgICBoaWRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuJGVsbS50cmlnZ2VyKCQubW9kYWwuQkVGT1JFX0NMT1NFLCBbdGhpcy5fY3R4KCldKTtcbiAgICAgIGlmICh0aGlzLmNsb3NlQnV0dG9uKSB0aGlzLmNsb3NlQnV0dG9uLnJlbW92ZSgpO1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIGlmKHRoaXMub3B0aW9ucy5kb0ZhZGUpIHtcbiAgICAgICAgdGhpcy4kZWxtLmZhZGVPdXQodGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkFGVEVSX0NMT1NFLCBbX3RoaXMuX2N0eCgpXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZWxtLmhpZGUoMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkFGVEVSX0NMT1NFLCBbX3RoaXMuX2N0eCgpXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy4kZWxtLnRyaWdnZXIoJC5tb2RhbC5DTE9TRSwgW3RoaXMuX2N0eCgpXSk7XG4gICAgfSxcblxuICAgIHNob3dTcGlubmVyOiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLnNob3dTcGlubmVyKSByZXR1cm47XG4gICAgICB0aGlzLnNwaW5uZXIgPSB0aGlzLnNwaW5uZXIgfHwgJCgnPGRpdiBjbGFzcz1cIicgKyB0aGlzLm9wdGlvbnMubW9kYWxDbGFzcyArICctc3Bpbm5lclwiPjwvZGl2PicpXG4gICAgICAgIC5hcHBlbmQodGhpcy5vcHRpb25zLnNwaW5uZXJIdG1sKTtcbiAgICAgIHRoaXMuJGJvZHkuYXBwZW5kKHRoaXMuc3Bpbm5lcik7XG4gICAgICB0aGlzLnNwaW5uZXIuc2hvdygpO1xuICAgIH0sXG5cbiAgICBoaWRlU3Bpbm5lcjogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5zcGlubmVyKSB0aGlzLnNwaW5uZXIucmVtb3ZlKCk7XG4gICAgfSxcblxuICAgIC8vUmV0dXJuIGNvbnRleHQgZm9yIGN1c3RvbSBldmVudHNcbiAgICBfY3R4OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7IGVsbTogdGhpcy4kZWxtLCAkZWxtOiB0aGlzLiRlbG0sICRibG9ja2VyOiB0aGlzLiRibG9ja2VyLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsICRhbmNob3I6IHRoaXMuYW5jaG9yIH07XG4gICAgfVxuICB9O1xuXG4gICQubW9kYWwuY2xvc2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgIGlmICghJC5tb2RhbC5pc0FjdGl2ZSgpKSByZXR1cm47XG4gICAgaWYgKGV2ZW50KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHZhciBjdXJyZW50ID0gZ2V0Q3VycmVudCgpO1xuICAgIGN1cnJlbnQuY2xvc2UoKTtcbiAgICByZXR1cm4gY3VycmVudC4kZWxtO1xuICB9O1xuXG4gIC8vIFJldHVybnMgaWYgdGhlcmUgY3VycmVudGx5IGlzIGFuIGFjdGl2ZSBtb2RhbFxuICAkLm1vZGFsLmlzQWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBtb2RhbHMubGVuZ3RoID4gMDtcbiAgfTtcblxuICAkLm1vZGFsLmdldEN1cnJlbnQgPSBnZXRDdXJyZW50O1xuXG4gICQubW9kYWwuZGVmYXVsdHMgPSB7XG4gICAgY2xvc2VFeGlzdGluZzogdHJ1ZSxcbiAgICBlc2NhcGVDbG9zZTogdHJ1ZSxcbiAgICBjbGlja0Nsb3NlOiB0cnVlLFxuICAgIGNsb3NlVGV4dDogJ0Nsb3NlJyxcbiAgICBjbG9zZUNsYXNzOiAnJyxcbiAgICBtb2RhbENsYXNzOiBcIm1vZGFsXCIsXG4gICAgYmxvY2tlckNsYXNzOiBcImpxdWVyeS1tb2RhbFwiLFxuICAgIHNwaW5uZXJIdG1sOiAnPGRpdiBjbGFzcz1cInJlY3QxXCI+PC9kaXY+PGRpdiBjbGFzcz1cInJlY3QyXCI+PC9kaXY+PGRpdiBjbGFzcz1cInJlY3QzXCI+PC9kaXY+PGRpdiBjbGFzcz1cInJlY3Q0XCI+PC9kaXY+JyxcbiAgICBzaG93U3Bpbm5lcjogdHJ1ZSxcbiAgICBzaG93Q2xvc2U6IHRydWUsXG4gICAgZmFkZUR1cmF0aW9uOiBudWxsLCAgIC8vIE51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhlIGZhZGUgYW5pbWF0aW9uIHRha2VzLlxuICAgIGZhZGVEZWxheTogMS4wICAgICAgICAvLyBQb2ludCBkdXJpbmcgdGhlIG92ZXJsYXkncyBmYWRlLWluIHRoYXQgdGhlIG1vZGFsIGJlZ2lucyB0byBmYWRlIGluICguNSA9IDUwJSwgMS41ID0gMTUwJSwgZXRjLilcbiAgfTtcblxuICAvLyBFdmVudCBjb25zdGFudHNcbiAgJC5tb2RhbC5CRUZPUkVfQkxPQ0sgPSAnbW9kYWw6YmVmb3JlLWJsb2NrJztcbiAgJC5tb2RhbC5CTE9DSyA9ICdtb2RhbDpibG9jayc7XG4gICQubW9kYWwuQkVGT1JFX09QRU4gPSAnbW9kYWw6YmVmb3JlLW9wZW4nO1xuICAkLm1vZGFsLk9QRU4gPSAnbW9kYWw6b3Blbic7XG4gICQubW9kYWwuQkVGT1JFX0NMT1NFID0gJ21vZGFsOmJlZm9yZS1jbG9zZSc7XG4gICQubW9kYWwuQ0xPU0UgPSAnbW9kYWw6Y2xvc2UnO1xuICAkLm1vZGFsLkFGVEVSX0NMT1NFID0gJ21vZGFsOmFmdGVyLWNsb3NlJztcbiAgJC5tb2RhbC5BSkFYX1NFTkQgPSAnbW9kYWw6YWpheDpzZW5kJztcbiAgJC5tb2RhbC5BSkFYX1NVQ0NFU1MgPSAnbW9kYWw6YWpheDpzdWNjZXNzJztcbiAgJC5tb2RhbC5BSkFYX0ZBSUwgPSAnbW9kYWw6YWpheDpmYWlsJztcbiAgJC5tb2RhbC5BSkFYX0NPTVBMRVRFID0gJ21vZGFsOmFqYXg6Y29tcGxldGUnO1xuXG4gICQuZm4ubW9kYWwgPSBmdW5jdGlvbihvcHRpb25zKXtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIG5ldyAkLm1vZGFsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBBdXRvbWF0aWNhbGx5IGJpbmQgbGlua3Mgd2l0aCByZWw9XCJtb2RhbDpjbG9zZVwiIHRvLCB3ZWxsLCBjbG9zZSB0aGUgbW9kYWwuXG4gICQoZG9jdW1lbnQpLm9uKCdjbGljay5tb2RhbCcsICdhW3JlbH49XCJtb2RhbDpjbG9zZVwiXScsICQubW9kYWwuY2xvc2UpO1xuICAkKGRvY3VtZW50KS5vbignY2xpY2subW9kYWwnLCAnYVtyZWx+PVwibW9kYWw6b3BlblwiXScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAkKHRoaXMpLm1vZGFsKCk7XG4gIH0pO1xufSkpO1xuIiwiLyohIHRvb2x0aXBzdGVyIHY0LjIuOCAqLyFmdW5jdGlvbihhLGIpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wianF1ZXJ5XCJdLGZ1bmN0aW9uKGEpe3JldHVybiBiKGEpfSk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YihyZXF1aXJlKFwianF1ZXJ5XCIpKTpiKGpRdWVyeSl9KHRoaXMsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt0aGlzLiRjb250YWluZXIsdGhpcy5jb25zdHJhaW50cz1udWxsLHRoaXMuX18kdG9vbHRpcCx0aGlzLl9faW5pdChhKX1mdW5jdGlvbiBjKGIsYyl7dmFyIGQ9ITA7cmV0dXJuIGEuZWFjaChiLGZ1bmN0aW9uKGEsZSl7cmV0dXJuIHZvaWQgMD09PWNbYV18fGJbYV0hPT1jW2FdPyhkPSExLCExKTp2b2lkIDB9KSxkfWZ1bmN0aW9uIGQoYil7dmFyIGM9Yi5hdHRyKFwiaWRcIiksZD1jP2gud2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGMpOm51bGw7cmV0dXJuIGQ/ZD09PWJbMF06YS5jb250YWlucyhoLndpbmRvdy5kb2N1bWVudC5ib2R5LGJbMF0pfWZ1bmN0aW9uIGUoKXtpZighZylyZXR1cm4hMTt2YXIgYT1nLmRvY3VtZW50LmJvZHl8fGcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGI9YS5zdHlsZSxjPVwidHJhbnNpdGlvblwiLGQ9W1wiTW96XCIsXCJXZWJraXRcIixcIktodG1sXCIsXCJPXCIsXCJtc1wiXTtpZihcInN0cmluZ1wiPT10eXBlb2YgYltjXSlyZXR1cm4hMDtjPWMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zdWJzdHIoMSk7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspaWYoXCJzdHJpbmdcIj09dHlwZW9mIGJbZFtlXStjXSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgZj17YW5pbWF0aW9uOlwiZmFkZVwiLGFuaW1hdGlvbkR1cmF0aW9uOjM1MCxjb250ZW50Om51bGwsY29udGVudEFzSFRNTDohMSxjb250ZW50Q2xvbmluZzohMSxkZWJ1ZzohMCxkZWxheTozMDAsZGVsYXlUb3VjaDpbMzAwLDUwMF0sZnVuY3Rpb25Jbml0Om51bGwsZnVuY3Rpb25CZWZvcmU6bnVsbCxmdW5jdGlvblJlYWR5Om51bGwsZnVuY3Rpb25BZnRlcjpudWxsLGZ1bmN0aW9uRm9ybWF0Om51bGwsSUVtaW46NixpbnRlcmFjdGl2ZTohMSxtdWx0aXBsZTohMSxwYXJlbnQ6bnVsbCxwbHVnaW5zOltcInNpZGVUaXBcIl0scmVwb3NpdGlvbk9uU2Nyb2xsOiExLHJlc3RvcmF0aW9uOlwibm9uZVwiLHNlbGZEZXN0cnVjdGlvbjohMCx0aGVtZTpbXSx0aW1lcjowLHRyYWNrZXJJbnRlcnZhbDo1MDAsdHJhY2tPcmlnaW46ITEsdHJhY2tUb29sdGlwOiExLHRyaWdnZXI6XCJob3ZlclwiLHRyaWdnZXJDbG9zZTp7Y2xpY2s6ITEsbW91c2VsZWF2ZTohMSxvcmlnaW5DbGljazohMSxzY3JvbGw6ITEsdGFwOiExLHRvdWNobGVhdmU6ITF9LHRyaWdnZXJPcGVuOntjbGljazohMSxtb3VzZWVudGVyOiExLHRhcDohMSx0b3VjaHN0YXJ0OiExfSx1cGRhdGVBbmltYXRpb246XCJyb3RhdGVcIix6SW5kZXg6OTk5OTk5OX0sZz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpudWxsLGg9e2hhc1RvdWNoQ2FwYWJpbGl0eTohKCFnfHwhKFwib250b3VjaHN0YXJ0XCJpbiBnfHxnLkRvY3VtZW50VG91Y2gmJmcuZG9jdW1lbnQgaW5zdGFuY2VvZiBnLkRvY3VtZW50VG91Y2h8fGcubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzKSksaGFzVHJhbnNpdGlvbnM6ZSgpLElFOiExLHNlbVZlcjpcIjQuMi44XCIsd2luZG93Omd9LGk9ZnVuY3Rpb24oKXt0aGlzLl9fJGVtaXR0ZXJQcml2YXRlPWEoe30pLHRoaXMuX18kZW1pdHRlclB1YmxpYz1hKHt9KSx0aGlzLl9faW5zdGFuY2VzTGF0ZXN0QXJyPVtdLHRoaXMuX19wbHVnaW5zPXt9LHRoaXMuX2Vudj1ofTtpLnByb3RvdHlwZT17X19icmlkZ2U6ZnVuY3Rpb24oYixjLGQpe2lmKCFjW2RdKXt2YXIgZT1mdW5jdGlvbigpe307ZS5wcm90b3R5cGU9Yjt2YXIgZz1uZXcgZTtnLl9faW5pdCYmZy5fX2luaXQoYyksYS5lYWNoKGIsZnVuY3Rpb24oYSxiKXswIT1hLmluZGV4T2YoXCJfX1wiKSYmKGNbYV0/Zi5kZWJ1ZyYmY29uc29sZS5sb2coXCJUaGUgXCIrYStcIiBtZXRob2Qgb2YgdGhlIFwiK2QrXCIgcGx1Z2luIGNvbmZsaWN0cyB3aXRoIGFub3RoZXIgcGx1Z2luIG9yIG5hdGl2ZSBtZXRob2RzXCIpOihjW2FdPWZ1bmN0aW9uKCl7cmV0dXJuIGdbYV0uYXBwbHkoZyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSl9LGNbYV0uYnJpZGdlZD1nKSl9KSxjW2RdPWd9cmV0dXJuIHRoaXN9LF9fc2V0V2luZG93OmZ1bmN0aW9uKGEpe3JldHVybiBoLndpbmRvdz1hLHRoaXN9LF9nZXRSdWxlcjpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IGIoYSl9LF9vZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZS5vZmYuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX18kZW1pdHRlclByaXZhdGUub24uYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLm9uZS5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKSx0aGlzfSxfcGx1Z2luOmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGIpe3ZhciBkPWIsZT1udWxsO3JldHVybiBkLmluZGV4T2YoXCIuXCIpPjA/ZT1jLl9fcGx1Z2luc1tkXTphLmVhY2goYy5fX3BsdWdpbnMsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5uYW1lLnN1YnN0cmluZyhiLm5hbWUubGVuZ3RoLWQubGVuZ3RoLTEpPT1cIi5cIitkPyhlPWIsITEpOnZvaWQgMH0pLGV9aWYoYi5uYW1lLmluZGV4T2YoXCIuXCIpPDApdGhyb3cgbmV3IEVycm9yKFwiUGx1Z2lucyBtdXN0IGJlIG5hbWVzcGFjZWRcIik7cmV0dXJuIGMuX19wbHVnaW5zW2IubmFtZV09YixiLmNvcmUmJmMuX19icmlkZ2UoYi5jb3JlLGMsYi5uYW1lKSx0aGlzfSxfdHJpZ2dlcjpmdW5jdGlvbigpe3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhWzBdJiYoYVswXT17dHlwZTphWzBdfSksdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZS50cmlnZ2VyLmFwcGx5KHRoaXMuX18kZW1pdHRlclByaXZhdGUsYSksdGhpcy5fXyRlbWl0dGVyUHVibGljLnRyaWdnZXIuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHVibGljLGEpLHRoaXN9LGluc3RhbmNlczpmdW5jdGlvbihiKXt2YXIgYz1bXSxkPWJ8fFwiLnRvb2x0aXBzdGVyZWRcIjtyZXR1cm4gYShkKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKSxkPWIuZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpO2QmJmEuZWFjaChkLGZ1bmN0aW9uKGEsZCl7Yy5wdXNoKGIuZGF0YShkKSl9KX0pLGN9LGluc3RhbmNlc0xhdGVzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faW5zdGFuY2VzTGF0ZXN0QXJyfSxvZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fXyRlbWl0dGVyUHVibGljLm9mZi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX18kZW1pdHRlclB1YmxpYy5vbi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQdWJsaWMub25lLmFwcGx5KHRoaXMuX18kZW1pdHRlclB1YmxpYyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sb3JpZ2luczpmdW5jdGlvbihiKXt2YXIgYz1iP2IrXCIgXCI6XCJcIjtyZXR1cm4gYShjK1wiLnRvb2x0aXBzdGVyZWRcIikudG9BcnJheSgpfSxzZXREZWZhdWx0czpmdW5jdGlvbihiKXtyZXR1cm4gYS5leHRlbmQoZixiKSx0aGlzfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQdWJsaWMudHJpZ2dlckhhbmRsZXIuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHVibGljLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKSx0aGlzfX0sYS50b29sdGlwc3Rlcj1uZXcgaSxhLlRvb2x0aXBzdGVyPWZ1bmN0aW9uKGIsYyl7dGhpcy5fX2NhbGxiYWNrcz17Y2xvc2U6W10sb3BlbjpbXX0sdGhpcy5fX2Nsb3NpbmdUaW1lLHRoaXMuX19Db250ZW50LHRoaXMuX19jb250ZW50QmNyLHRoaXMuX19kZXN0cm95ZWQ9ITEsdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZT1hKHt9KSx0aGlzLl9fJGVtaXR0ZXJQdWJsaWM9YSh7fSksdGhpcy5fX2VuYWJsZWQ9ITAsdGhpcy5fX2dhcmJhZ2VDb2xsZWN0b3IsdGhpcy5fX0dlb21ldHJ5LHRoaXMuX19sYXN0UG9zaXRpb24sdGhpcy5fX25hbWVzcGFjZT1cInRvb2x0aXBzdGVyLVwiK01hdGgucm91bmQoMWU2Kk1hdGgucmFuZG9tKCkpLHRoaXMuX19vcHRpb25zLHRoaXMuX18kb3JpZ2luUGFyZW50cyx0aGlzLl9fcG9pbnRlcklzT3Zlck9yaWdpbj0hMSx0aGlzLl9fcHJldmlvdXNUaGVtZXM9W10sdGhpcy5fX3N0YXRlPVwiY2xvc2VkXCIsdGhpcy5fX3RpbWVvdXRzPXtjbG9zZTpbXSxvcGVuOm51bGx9LHRoaXMuX190b3VjaEV2ZW50cz1bXSx0aGlzLl9fdHJhY2tlcj1udWxsLHRoaXMuXyRvcmlnaW4sdGhpcy5fJHRvb2x0aXAsdGhpcy5fX2luaXQoYixjKX0sYS5Ub29sdGlwc3Rlci5wcm90b3R5cGU9e19faW5pdDpmdW5jdGlvbihiLGMpe3ZhciBkPXRoaXM7aWYoZC5fJG9yaWdpbj1hKGIpLGQuX19vcHRpb25zPWEuZXh0ZW5kKCEwLHt9LGYsYyksZC5fX29wdGlvbnNGb3JtYXQoKSwhaC5JRXx8aC5JRT49ZC5fX29wdGlvbnMuSUVtaW4pe3ZhciBlPW51bGw7aWYodm9pZCAwPT09ZC5fJG9yaWdpbi5kYXRhKFwidG9vbHRpcHN0ZXItaW5pdGlhbFRpdGxlXCIpJiYoZT1kLl8kb3JpZ2luLmF0dHIoXCJ0aXRsZVwiKSx2b2lkIDA9PT1lJiYoZT1udWxsKSxkLl8kb3JpZ2luLmRhdGEoXCJ0b29sdGlwc3Rlci1pbml0aWFsVGl0bGVcIixlKSksbnVsbCE9PWQuX19vcHRpb25zLmNvbnRlbnQpZC5fX2NvbnRlbnRTZXQoZC5fX29wdGlvbnMuY29udGVudCk7ZWxzZXt2YXIgZyxpPWQuXyRvcmlnaW4uYXR0cihcImRhdGEtdG9vbHRpcC1jb250ZW50XCIpO2kmJihnPWEoaSkpLGcmJmdbMF0/ZC5fX2NvbnRlbnRTZXQoZy5maXJzdCgpKTpkLl9fY29udGVudFNldChlKX1kLl8kb3JpZ2luLnJlbW92ZUF0dHIoXCJ0aXRsZVwiKS5hZGRDbGFzcyhcInRvb2x0aXBzdGVyZWRcIiksZC5fX3ByZXBhcmVPcmlnaW4oKSxkLl9fcHJlcGFyZUdDKCksYS5lYWNoKGQuX19vcHRpb25zLnBsdWdpbnMsZnVuY3Rpb24oYSxiKXtkLl9wbHVnKGIpfSksaC5oYXNUb3VjaENhcGFiaWxpdHkmJmEoaC53aW5kb3cuZG9jdW1lbnQuYm9keSkub24oXCJ0b3VjaG1vdmUuXCIrZC5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlblwiLGZ1bmN0aW9uKGEpe2QuX3RvdWNoUmVjb3JkRXZlbnQoYSl9KSxkLl9vbihcImNyZWF0ZWRcIixmdW5jdGlvbigpe2QuX19wcmVwYXJlVG9vbHRpcCgpfSkuX29uKFwicmVwb3NpdGlvbmVkXCIsZnVuY3Rpb24oYSl7ZC5fX2xhc3RQb3NpdGlvbj1hLnBvc2l0aW9ufSl9ZWxzZSBkLl9fb3B0aW9ucy5kaXNhYmxlZD0hMH0sX19jb250ZW50SW5zZXJ0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuXyR0b29sdGlwLmZpbmQoXCIudG9vbHRpcHN0ZXItY29udGVudFwiKSxjPWEuX19Db250ZW50LGQ9ZnVuY3Rpb24oYSl7Yz1hfTtyZXR1cm4gYS5fdHJpZ2dlcih7dHlwZTpcImZvcm1hdFwiLGNvbnRlbnQ6YS5fX0NvbnRlbnQsZm9ybWF0OmR9KSxhLl9fb3B0aW9ucy5mdW5jdGlvbkZvcm1hdCYmKGM9YS5fX29wdGlvbnMuZnVuY3Rpb25Gb3JtYXQuY2FsbChhLGEse29yaWdpbjphLl8kb3JpZ2luWzBdfSxhLl9fQ29udGVudCkpLFwic3RyaW5nXCIhPXR5cGVvZiBjfHxhLl9fb3B0aW9ucy5jb250ZW50QXNIVE1MP2IuZW1wdHkoKS5hcHBlbmQoYyk6Yi50ZXh0KGMpLGF9LF9fY29udGVudFNldDpmdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIGEmJnRoaXMuX19vcHRpb25zLmNvbnRlbnRDbG9uaW5nJiYoYj1iLmNsb25lKCEwKSksdGhpcy5fX0NvbnRlbnQ9Yix0aGlzLl90cmlnZ2VyKHt0eXBlOlwidXBkYXRlZFwiLGNvbnRlbnQ6Yn0pLHRoaXN9LF9fZGVzdHJveUVycm9yOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiVGhpcyB0b29sdGlwIGhhcyBiZWVuIGRlc3Ryb3llZCBhbmQgY2Fubm90IGV4ZWN1dGUgeW91ciBtZXRob2QgY2FsbC5cIil9LF9fZ2VvbWV0cnk6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLGM9Yi5fJG9yaWdpbixkPWIuXyRvcmlnaW4uaXMoXCJhcmVhXCIpO2lmKGQpe3ZhciBlPWIuXyRvcmlnaW4ucGFyZW50KCkuYXR0cihcIm5hbWVcIik7Yz1hKCdpbWdbdXNlbWFwPVwiIycrZSsnXCJdJyl9dmFyIGY9Y1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPWEoaC53aW5kb3cuZG9jdW1lbnQpLGk9YShoLndpbmRvdyksaj1jLGs9e2F2YWlsYWJsZTp7ZG9jdW1lbnQ6bnVsbCx3aW5kb3c6bnVsbH0sZG9jdW1lbnQ6e3NpemU6e2hlaWdodDpnLmhlaWdodCgpLHdpZHRoOmcud2lkdGgoKX19LHdpbmRvdzp7c2Nyb2xsOntsZWZ0Omgud2luZG93LnNjcm9sbFh8fGgud2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LHRvcDpoLndpbmRvdy5zY3JvbGxZfHxoLndpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfSxzaXplOntoZWlnaHQ6aS5oZWlnaHQoKSx3aWR0aDppLndpZHRoKCl9fSxvcmlnaW46e2ZpeGVkTGluZWFnZTohMSxvZmZzZXQ6e30sc2l6ZTp7aGVpZ2h0OmYuYm90dG9tLWYudG9wLHdpZHRoOmYucmlnaHQtZi5sZWZ0fSx1c2VtYXBJbWFnZTpkP2NbMF06bnVsbCx3aW5kb3dPZmZzZXQ6e2JvdHRvbTpmLmJvdHRvbSxsZWZ0OmYubGVmdCxyaWdodDpmLnJpZ2h0LHRvcDpmLnRvcH19fTtpZihkKXt2YXIgbD1iLl8kb3JpZ2luLmF0dHIoXCJzaGFwZVwiKSxtPWIuXyRvcmlnaW4uYXR0cihcImNvb3Jkc1wiKTtpZihtJiYobT1tLnNwbGl0KFwiLFwiKSxhLm1hcChtLGZ1bmN0aW9uKGEsYil7bVtiXT1wYXJzZUludChhKX0pKSxcImRlZmF1bHRcIiE9bClzd2l0Y2gobCl7Y2FzZVwiY2lyY2xlXCI6dmFyIG49bVswXSxvPW1bMV0scD1tWzJdLHE9by1wLHI9bi1wO2sub3JpZ2luLnNpemUuaGVpZ2h0PTIqcCxrLm9yaWdpbi5zaXplLndpZHRoPWsub3JpZ2luLnNpemUuaGVpZ2h0LGsub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0Kz1yLGsub3JpZ2luLndpbmRvd09mZnNldC50b3ArPXE7YnJlYWs7Y2FzZVwicmVjdFwiOnZhciBzPW1bMF0sdD1tWzFdLHU9bVsyXSx2PW1bM107ay5vcmlnaW4uc2l6ZS5oZWlnaHQ9di10LGsub3JpZ2luLnNpemUud2lkdGg9dS1zLGsub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0Kz1zLGsub3JpZ2luLndpbmRvd09mZnNldC50b3ArPXQ7YnJlYWs7Y2FzZVwicG9seVwiOmZvcih2YXIgdz0wLHg9MCx5PTAsej0wLEE9XCJldmVuXCIsQj0wO0I8bS5sZW5ndGg7QisrKXt2YXIgQz1tW0JdO1wiZXZlblwiPT1BPyhDPnkmJih5PUMsMD09PUImJih3PXkpKSx3PkMmJih3PUMpLEE9XCJvZGRcIik6KEM+eiYmKHo9QywxPT1CJiYoeD16KSkseD5DJiYoeD1DKSxBPVwiZXZlblwiKX1rLm9yaWdpbi5zaXplLmhlaWdodD16LXgsay5vcmlnaW4uc2l6ZS53aWR0aD15LXcsay5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQrPXcsay5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCs9eH19dmFyIEQ9ZnVuY3Rpb24oYSl7ay5vcmlnaW4uc2l6ZS5oZWlnaHQ9YS5oZWlnaHQsay5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQ9YS5sZWZ0LGsub3JpZ2luLndpbmRvd09mZnNldC50b3A9YS50b3Asay5vcmlnaW4uc2l6ZS53aWR0aD1hLndpZHRofTtmb3IoYi5fdHJpZ2dlcih7dHlwZTpcImdlb21ldHJ5XCIsZWRpdDpELGdlb21ldHJ5OntoZWlnaHQ6ay5vcmlnaW4uc2l6ZS5oZWlnaHQsbGVmdDprLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCx0b3A6ay5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCx3aWR0aDprLm9yaWdpbi5zaXplLndpZHRofX0pLGsub3JpZ2luLndpbmRvd09mZnNldC5yaWdodD1rLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCtrLm9yaWdpbi5zaXplLndpZHRoLGsub3JpZ2luLndpbmRvd09mZnNldC5ib3R0b209ay5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCtrLm9yaWdpbi5zaXplLmhlaWdodCxrLm9yaWdpbi5vZmZzZXQubGVmdD1rLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCtrLndpbmRvdy5zY3JvbGwubGVmdCxrLm9yaWdpbi5vZmZzZXQudG9wPWsub3JpZ2luLndpbmRvd09mZnNldC50b3Aray53aW5kb3cuc2Nyb2xsLnRvcCxrLm9yaWdpbi5vZmZzZXQuYm90dG9tPWsub3JpZ2luLm9mZnNldC50b3Aray5vcmlnaW4uc2l6ZS5oZWlnaHQsay5vcmlnaW4ub2Zmc2V0LnJpZ2h0PWsub3JpZ2luLm9mZnNldC5sZWZ0K2sub3JpZ2luLnNpemUud2lkdGgsay5hdmFpbGFibGUuZG9jdW1lbnQ9e2JvdHRvbTp7aGVpZ2h0OmsuZG9jdW1lbnQuc2l6ZS5oZWlnaHQtay5vcmlnaW4ub2Zmc2V0LmJvdHRvbSx3aWR0aDprLmRvY3VtZW50LnNpemUud2lkdGh9LGxlZnQ6e2hlaWdodDprLmRvY3VtZW50LnNpemUuaGVpZ2h0LHdpZHRoOmsub3JpZ2luLm9mZnNldC5sZWZ0fSxyaWdodDp7aGVpZ2h0OmsuZG9jdW1lbnQuc2l6ZS5oZWlnaHQsd2lkdGg6ay5kb2N1bWVudC5zaXplLndpZHRoLWsub3JpZ2luLm9mZnNldC5yaWdodH0sdG9wOntoZWlnaHQ6ay5vcmlnaW4ub2Zmc2V0LnRvcCx3aWR0aDprLmRvY3VtZW50LnNpemUud2lkdGh9fSxrLmF2YWlsYWJsZS53aW5kb3c9e2JvdHRvbTp7aGVpZ2h0Ok1hdGgubWF4KGsud2luZG93LnNpemUuaGVpZ2h0LU1hdGgubWF4KGsub3JpZ2luLndpbmRvd09mZnNldC5ib3R0b20sMCksMCksd2lkdGg6ay53aW5kb3cuc2l6ZS53aWR0aH0sbGVmdDp7aGVpZ2h0Omsud2luZG93LnNpemUuaGVpZ2h0LHdpZHRoOk1hdGgubWF4KGsub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0LDApfSxyaWdodDp7aGVpZ2h0Omsud2luZG93LnNpemUuaGVpZ2h0LHdpZHRoOk1hdGgubWF4KGsud2luZG93LnNpemUud2lkdGgtTWF0aC5tYXgoay5vcmlnaW4ud2luZG93T2Zmc2V0LnJpZ2h0LDApLDApfSx0b3A6e2hlaWdodDpNYXRoLm1heChrLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wLDApLHdpZHRoOmsud2luZG93LnNpemUud2lkdGh9fTtcImh0bWxcIiE9alswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7KXtpZihcImZpeGVkXCI9PWouY3NzKFwicG9zaXRpb25cIikpe2sub3JpZ2luLmZpeGVkTGluZWFnZT0hMDticmVha31qPWoucGFyZW50KCl9cmV0dXJuIGt9LF9fb3B0aW9uc0Zvcm1hdDpmdW5jdGlvbigpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbiYmKHRoaXMuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uPVt0aGlzLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbix0aGlzLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbl0pLFwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLl9fb3B0aW9ucy5kZWxheSYmKHRoaXMuX19vcHRpb25zLmRlbGF5PVt0aGlzLl9fb3B0aW9ucy5kZWxheSx0aGlzLl9fb3B0aW9ucy5kZWxheV0pLFwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLl9fb3B0aW9ucy5kZWxheVRvdWNoJiYodGhpcy5fX29wdGlvbnMuZGVsYXlUb3VjaD1bdGhpcy5fX29wdGlvbnMuZGVsYXlUb3VjaCx0aGlzLl9fb3B0aW9ucy5kZWxheVRvdWNoXSksXCJzdHJpbmdcIj09dHlwZW9mIHRoaXMuX19vcHRpb25zLnRoZW1lJiYodGhpcy5fX29wdGlvbnMudGhlbWU9W3RoaXMuX19vcHRpb25zLnRoZW1lXSksbnVsbD09PXRoaXMuX19vcHRpb25zLnBhcmVudD90aGlzLl9fb3B0aW9ucy5wYXJlbnQ9YShoLndpbmRvdy5kb2N1bWVudC5ib2R5KTpcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5fX29wdGlvbnMucGFyZW50JiYodGhpcy5fX29wdGlvbnMucGFyZW50PWEodGhpcy5fX29wdGlvbnMucGFyZW50KSksXCJob3ZlclwiPT10aGlzLl9fb3B0aW9ucy50cmlnZ2VyPyh0aGlzLl9fb3B0aW9ucy50cmlnZ2VyT3Blbj17bW91c2VlbnRlcjohMCx0b3VjaHN0YXJ0OiEwfSx0aGlzLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2U9e21vdXNlbGVhdmU6ITAsb3JpZ2luQ2xpY2s6ITAsdG91Y2hsZWF2ZTohMH0pOlwiY2xpY2tcIj09dGhpcy5fX29wdGlvbnMudHJpZ2dlciYmKHRoaXMuX19vcHRpb25zLnRyaWdnZXJPcGVuPXtjbGljazohMCx0YXA6ITB9LHRoaXMuX19vcHRpb25zLnRyaWdnZXJDbG9zZT17Y2xpY2s6ITAsdGFwOiEwfSksdGhpcy5fdHJpZ2dlcihcIm9wdGlvbnNcIiksdGhpc30sX19wcmVwYXJlR0M6ZnVuY3Rpb24oKXt2YXIgYj10aGlzO3JldHVybiBiLl9fb3B0aW9ucy5zZWxmRGVzdHJ1Y3Rpb24/Yi5fX2dhcmJhZ2VDb2xsZWN0b3I9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt2YXIgYz0obmV3IERhdGUpLmdldFRpbWUoKTtiLl9fdG91Y2hFdmVudHM9YS5ncmVwKGIuX190b3VjaEV2ZW50cyxmdW5jdGlvbihhLGIpe3JldHVybiBjLWEudGltZT42ZTR9KSxkKGIuXyRvcmlnaW4pfHxiLmNsb3NlKGZ1bmN0aW9uKCl7Yi5kZXN0cm95KCl9KX0sMmU0KTpjbGVhckludGVydmFsKGIuX19nYXJiYWdlQ29sbGVjdG9yKSxifSxfX3ByZXBhcmVPcmlnaW46ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2lmKGEuXyRvcmlnaW4ub2ZmKFwiLlwiK2EuX19uYW1lc3BhY2UrXCItdHJpZ2dlck9wZW5cIiksaC5oYXNUb3VjaENhcGFiaWxpdHkmJmEuXyRvcmlnaW4ub24oXCJ0b3VjaHN0YXJ0LlwiK2EuX19uYW1lc3BhY2UrXCItdHJpZ2dlck9wZW4gdG91Y2hlbmQuXCIrYS5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlbiB0b3VjaGNhbmNlbC5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIsZnVuY3Rpb24oYil7YS5fdG91Y2hSZWNvcmRFdmVudChiKX0pLGEuX19vcHRpb25zLnRyaWdnZXJPcGVuLmNsaWNrfHxhLl9fb3B0aW9ucy50cmlnZ2VyT3Blbi50YXAmJmguaGFzVG91Y2hDYXBhYmlsaXR5KXt2YXIgYj1cIlwiO2EuX19vcHRpb25zLnRyaWdnZXJPcGVuLmNsaWNrJiYoYis9XCJjbGljay5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuIFwiKSxhLl9fb3B0aW9ucy50cmlnZ2VyT3Blbi50YXAmJmguaGFzVG91Y2hDYXBhYmlsaXR5JiYoYis9XCJ0b3VjaGVuZC5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIpLGEuXyRvcmlnaW4ub24oYixmdW5jdGlvbihiKXthLl90b3VjaElzTWVhbmluZ2Z1bEV2ZW50KGIpJiZhLl9vcGVuKGIpfSl9aWYoYS5fX29wdGlvbnMudHJpZ2dlck9wZW4ubW91c2VlbnRlcnx8YS5fX29wdGlvbnMudHJpZ2dlck9wZW4udG91Y2hzdGFydCYmaC5oYXNUb3VjaENhcGFiaWxpdHkpe3ZhciBiPVwiXCI7YS5fX29wdGlvbnMudHJpZ2dlck9wZW4ubW91c2VlbnRlciYmKGIrPVwibW91c2VlbnRlci5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuIFwiKSxhLl9fb3B0aW9ucy50cmlnZ2VyT3Blbi50b3VjaHN0YXJ0JiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSYmKGIrPVwidG91Y2hzdGFydC5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIpLGEuXyRvcmlnaW4ub24oYixmdW5jdGlvbihiKXshYS5fdG91Y2hJc1RvdWNoRXZlbnQoYikmJmEuX3RvdWNoSXNFbXVsYXRlZEV2ZW50KGIpfHwoYS5fX3BvaW50ZXJJc092ZXJPcmlnaW49ITAsYS5fb3BlblNob3J0bHkoYikpfSl9aWYoYS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLm1vdXNlbGVhdmV8fGEuX19vcHRpb25zLnRyaWdnZXJDbG9zZS50b3VjaGxlYXZlJiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSl7dmFyIGI9XCJcIjthLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UubW91c2VsZWF2ZSYmKGIrPVwibW91c2VsZWF2ZS5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuIFwiKSxhLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudG91Y2hsZWF2ZSYmaC5oYXNUb3VjaENhcGFiaWxpdHkmJihiKz1cInRvdWNoZW5kLlwiK2EuX19uYW1lc3BhY2UrXCItdHJpZ2dlck9wZW4gdG91Y2hjYW5jZWwuXCIrYS5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlblwiKSxhLl8kb3JpZ2luLm9uKGIsZnVuY3Rpb24oYil7YS5fdG91Y2hJc01lYW5pbmdmdWxFdmVudChiKSYmKGEuX19wb2ludGVySXNPdmVyT3JpZ2luPSExKX0pfXJldHVybiBhfSxfX3ByZXBhcmVUb29sdGlwOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPWIuX19vcHRpb25zLmludGVyYWN0aXZlP1wiYXV0b1wiOlwiXCI7cmV0dXJuIGIuXyR0b29sdGlwLmF0dHIoXCJpZFwiLGIuX19uYW1lc3BhY2UpLmNzcyh7XCJwb2ludGVyLWV2ZW50c1wiOmMsekluZGV4OmIuX19vcHRpb25zLnpJbmRleH0pLGEuZWFjaChiLl9fcHJldmlvdXNUaGVtZXMsZnVuY3Rpb24oYSxjKXtiLl8kdG9vbHRpcC5yZW1vdmVDbGFzcyhjKX0pLGEuZWFjaChiLl9fb3B0aW9ucy50aGVtZSxmdW5jdGlvbihhLGMpe2IuXyR0b29sdGlwLmFkZENsYXNzKGMpfSksYi5fX3ByZXZpb3VzVGhlbWVzPWEubWVyZ2UoW10sYi5fX29wdGlvbnMudGhlbWUpLGJ9LF9fc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbihiKXt2YXIgYz10aGlzO2lmKGMuX19vcHRpb25zLnRyaWdnZXJDbG9zZS5zY3JvbGwpYy5fY2xvc2UoYik7ZWxzZSBpZihkKGMuXyRvcmlnaW4pJiZkKGMuXyR0b29sdGlwKSl7dmFyIGU9bnVsbDtpZihiLnRhcmdldD09PWgud2luZG93LmRvY3VtZW50KWMuX19HZW9tZXRyeS5vcmlnaW4uZml4ZWRMaW5lYWdlfHxjLl9fb3B0aW9ucy5yZXBvc2l0aW9uT25TY3JvbGwmJmMucmVwb3NpdGlvbihiKTtlbHNle2U9Yy5fX2dlb21ldHJ5KCk7dmFyIGY9ITE7aWYoXCJmaXhlZFwiIT1jLl8kb3JpZ2luLmNzcyhcInBvc2l0aW9uXCIpJiZjLl9fJG9yaWdpblBhcmVudHMuZWFjaChmdW5jdGlvbihiLGMpe3ZhciBkPWEoYyksZz1kLmNzcyhcIm92ZXJmbG93LXhcIiksaD1kLmNzcyhcIm92ZXJmbG93LXlcIik7aWYoXCJ2aXNpYmxlXCIhPWd8fFwidmlzaWJsZVwiIT1oKXt2YXIgaT1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKFwidmlzaWJsZVwiIT1nJiYoZS5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQ8aS5sZWZ0fHxlLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQ+aS5yaWdodCkpcmV0dXJuIGY9ITAsITE7aWYoXCJ2aXNpYmxlXCIhPWgmJihlLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wPGkudG9wfHxlLm9yaWdpbi53aW5kb3dPZmZzZXQuYm90dG9tPmkuYm90dG9tKSlyZXR1cm4gZj0hMCwhMX1yZXR1cm5cImZpeGVkXCI9PWQuY3NzKFwicG9zaXRpb25cIik/ITE6dm9pZCAwfSksZiljLl8kdG9vbHRpcC5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIik7ZWxzZSBpZihjLl8kdG9vbHRpcC5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJ2aXNpYmxlXCIpLGMuX19vcHRpb25zLnJlcG9zaXRpb25PblNjcm9sbCljLnJlcG9zaXRpb24oYik7ZWxzZXt2YXIgZz1lLm9yaWdpbi5vZmZzZXQubGVmdC1jLl9fR2VvbWV0cnkub3JpZ2luLm9mZnNldC5sZWZ0LGk9ZS5vcmlnaW4ub2Zmc2V0LnRvcC1jLl9fR2VvbWV0cnkub3JpZ2luLm9mZnNldC50b3A7Yy5fJHRvb2x0aXAuY3NzKHtsZWZ0OmMuX19sYXN0UG9zaXRpb24uY29vcmQubGVmdCtnLHRvcDpjLl9fbGFzdFBvc2l0aW9uLmNvb3JkLnRvcCtpfSl9fWMuX3RyaWdnZXIoe3R5cGU6XCJzY3JvbGxcIixldmVudDpiLGdlbzplfSl9cmV0dXJuIGN9LF9fc3RhdGVTZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX19zdGF0ZT1hLHRoaXMuX3RyaWdnZXIoe3R5cGU6XCJzdGF0ZVwiLHN0YXRlOmF9KSx0aGlzfSxfX3RpbWVvdXRzQ2xlYXI6ZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KHRoaXMuX190aW1lb3V0cy5vcGVuKSx0aGlzLl9fdGltZW91dHMub3Blbj1udWxsLGEuZWFjaCh0aGlzLl9fdGltZW91dHMuY2xvc2UsZnVuY3Rpb24oYSxiKXtjbGVhclRpbWVvdXQoYil9KSx0aGlzLl9fdGltZW91dHMuY2xvc2U9W10sdGhpc30sX190cmFja2VyU3RhcnQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5fJHRvb2x0aXAuZmluZChcIi50b29sdGlwc3Rlci1jb250ZW50XCIpO3JldHVybiBhLl9fb3B0aW9ucy50cmFja1Rvb2x0aXAmJihhLl9fY29udGVudEJjcj1iWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxhLl9fdHJhY2tlcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2lmKGQoYS5fJG9yaWdpbikmJmQoYS5fJHRvb2x0aXApKXtpZihhLl9fb3B0aW9ucy50cmFja09yaWdpbil7dmFyIGU9YS5fX2dlb21ldHJ5KCksZj0hMTtjKGUub3JpZ2luLnNpemUsYS5fX0dlb21ldHJ5Lm9yaWdpbi5zaXplKSYmKGEuX19HZW9tZXRyeS5vcmlnaW4uZml4ZWRMaW5lYWdlP2MoZS5vcmlnaW4ud2luZG93T2Zmc2V0LGEuX19HZW9tZXRyeS5vcmlnaW4ud2luZG93T2Zmc2V0KSYmKGY9ITApOmMoZS5vcmlnaW4ub2Zmc2V0LGEuX19HZW9tZXRyeS5vcmlnaW4ub2Zmc2V0KSYmKGY9ITApKSxmfHwoYS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLm1vdXNlbGVhdmU/YS5fY2xvc2UoKTphLnJlcG9zaXRpb24oKSl9aWYoYS5fX29wdGlvbnMudHJhY2tUb29sdGlwKXt2YXIgZz1iWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2cuaGVpZ2h0PT09YS5fX2NvbnRlbnRCY3IuaGVpZ2h0JiZnLndpZHRoPT09YS5fX2NvbnRlbnRCY3Iud2lkdGh8fChhLnJlcG9zaXRpb24oKSxhLl9fY29udGVudEJjcj1nKX19ZWxzZSBhLl9jbG9zZSgpfSxhLl9fb3B0aW9ucy50cmFja2VySW50ZXJ2YWwpLGF9LF9jbG9zZTpmdW5jdGlvbihiLGMsZCl7dmFyIGU9dGhpcyxmPSEwO2lmKGUuX3RyaWdnZXIoe3R5cGU6XCJjbG9zZVwiLGV2ZW50OmIsc3RvcDpmdW5jdGlvbigpe2Y9ITF9fSksZnx8ZCl7YyYmZS5fX2NhbGxiYWNrcy5jbG9zZS5wdXNoKGMpLGUuX19jYWxsYmFja3Mub3Blbj1bXSxlLl9fdGltZW91dHNDbGVhcigpO3ZhciBnPWZ1bmN0aW9uKCl7YS5lYWNoKGUuX19jYWxsYmFja3MuY2xvc2UsZnVuY3Rpb24oYSxjKXtjLmNhbGwoZSxlLHtldmVudDpiLG9yaWdpbjplLl8kb3JpZ2luWzBdfSl9KSxlLl9fY2FsbGJhY2tzLmNsb3NlPVtdfTtpZihcImNsb3NlZFwiIT1lLl9fc3RhdGUpe3ZhciBpPSEwLGo9bmV3IERhdGUsaz1qLmdldFRpbWUoKSxsPWsrZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV07aWYoXCJkaXNhcHBlYXJpbmdcIj09ZS5fX3N0YXRlJiZsPmUuX19jbG9zaW5nVGltZSYmZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV0+MCYmKGk9ITEpLGkpe2UuX19jbG9zaW5nVGltZT1sLFwiZGlzYXBwZWFyaW5nXCIhPWUuX19zdGF0ZSYmZS5fX3N0YXRlU2V0KFwiZGlzYXBwZWFyaW5nXCIpO3ZhciBtPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChlLl9fdHJhY2tlciksZS5fdHJpZ2dlcih7dHlwZTpcImNsb3NpbmdcIixldmVudDpifSksZS5fJHRvb2x0aXAub2ZmKFwiLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItZHlpbmdcIiksYShoLndpbmRvdykub2ZmKFwiLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIpLGUuX18kb3JpZ2luUGFyZW50cy5lYWNoKGZ1bmN0aW9uKGIsYyl7YShjKS5vZmYoXCJzY3JvbGwuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2VcIil9KSxlLl9fJG9yaWdpblBhcmVudHM9bnVsbCxhKGgud2luZG93LmRvY3VtZW50LmJvZHkpLm9mZihcIi5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiKSxlLl8kb3JpZ2luLm9mZihcIi5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiKSxlLl9vZmYoXCJkaXNtaXNzYWJsZVwiKSxlLl9fc3RhdGVTZXQoXCJjbG9zZWRcIiksZS5fdHJpZ2dlcih7dHlwZTpcImFmdGVyXCIsZXZlbnQ6Yn0pLGUuX19vcHRpb25zLmZ1bmN0aW9uQWZ0ZXImJmUuX19vcHRpb25zLmZ1bmN0aW9uQWZ0ZXIuY2FsbChlLGUse2V2ZW50OmIsb3JpZ2luOmUuXyRvcmlnaW5bMF19KSxnKCl9O2guaGFzVHJhbnNpdGlvbnM/KGUuXyR0b29sdGlwLmNzcyh7XCItbW96LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzFdK1wibXNcIixcIi1tcy1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXStcIm1zXCIsXCItby1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXStcIm1zXCIsXCItd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzFdK1wibXNcIixcImFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzFdK1wibXNcIixcInRyYW5zaXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXStcIm1zXCJ9KSxlLl8kdG9vbHRpcC5jbGVhclF1ZXVlKCkucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3Rlci1zaG93XCIpLmFkZENsYXNzKFwidG9vbHRpcHN0ZXItZHlpbmdcIiksZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV0+MCYmZS5fJHRvb2x0aXAuZGVsYXkoZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV0pLGUuXyR0b29sdGlwLnF1ZXVlKG0pKTplLl8kdG9vbHRpcC5zdG9wKCkuZmFkZU91dChlLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXSxtKX19ZWxzZSBnKCl9cmV0dXJuIGV9LF9vZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZS5vZmYuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX18kZW1pdHRlclByaXZhdGUub24uYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLm9uZS5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKSx0aGlzfSxfb3BlbjpmdW5jdGlvbihiLGMpe3ZhciBlPXRoaXM7aWYoIWUuX19kZXN0cm95aW5nJiZkKGUuXyRvcmlnaW4pJiZlLl9fZW5hYmxlZCl7dmFyIGY9ITA7aWYoXCJjbG9zZWRcIj09ZS5fX3N0YXRlJiYoZS5fdHJpZ2dlcih7dHlwZTpcImJlZm9yZVwiLGV2ZW50OmIsc3RvcDpmdW5jdGlvbigpe2Y9ITF9fSksZiYmZS5fX29wdGlvbnMuZnVuY3Rpb25CZWZvcmUmJihmPWUuX19vcHRpb25zLmZ1bmN0aW9uQmVmb3JlLmNhbGwoZSxlLHtldmVudDpiLG9yaWdpbjplLl8kb3JpZ2luWzBdfSkpKSxmIT09ITEmJm51bGwhPT1lLl9fQ29udGVudCl7YyYmZS5fX2NhbGxiYWNrcy5vcGVuLnB1c2goYyksZS5fX2NhbGxiYWNrcy5jbG9zZT1bXSxlLl9fdGltZW91dHNDbGVhcigpO3ZhciBnLGk9ZnVuY3Rpb24oKXtcInN0YWJsZVwiIT1lLl9fc3RhdGUmJmUuX19zdGF0ZVNldChcInN0YWJsZVwiKSxhLmVhY2goZS5fX2NhbGxiYWNrcy5vcGVuLGZ1bmN0aW9uKGEsYil7Yi5jYWxsKGUsZSx7b3JpZ2luOmUuXyRvcmlnaW5bMF0sdG9vbHRpcDplLl8kdG9vbHRpcFswXX0pfSksZS5fX2NhbGxiYWNrcy5vcGVuPVtdfTtpZihcImNsb3NlZFwiIT09ZS5fX3N0YXRlKWc9MCxcImRpc2FwcGVhcmluZ1wiPT09ZS5fX3N0YXRlPyhlLl9fc3RhdGVTZXQoXCJhcHBlYXJpbmdcIiksaC5oYXNUcmFuc2l0aW9ucz8oZS5fJHRvb2x0aXAuY2xlYXJRdWV1ZSgpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItZHlpbmdcIikuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci1zaG93XCIpLGUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdPjAmJmUuXyR0b29sdGlwLmRlbGF5KGUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdKSxlLl8kdG9vbHRpcC5xdWV1ZShpKSk6ZS5fJHRvb2x0aXAuc3RvcCgpLmZhZGVJbihpKSk6XCJzdGFibGVcIj09ZS5fX3N0YXRlJiZpKCk7ZWxzZXtpZihlLl9fc3RhdGVTZXQoXCJhcHBlYXJpbmdcIiksZz1lLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXSxlLl9fY29udGVudEluc2VydCgpLGUucmVwb3NpdGlvbihiLCEwKSxoLmhhc1RyYW5zaXRpb25zPyhlLl8kdG9vbHRpcC5hZGRDbGFzcyhcInRvb2x0aXBzdGVyLVwiK2UuX19vcHRpb25zLmFuaW1hdGlvbikuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci1pbml0aWFsXCIpLmNzcyh7XCItbW96LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdK1wibXNcIixcIi1tcy1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXStcIm1zXCIsXCItby1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXStcIm1zXCIsXCItd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdK1wibXNcIixcImFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdK1wibXNcIixcInRyYW5zaXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXStcIm1zXCJ9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XCJjbG9zZWRcIiE9ZS5fX3N0YXRlJiYoZS5fJHRvb2x0aXAuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci1zaG93XCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItaW5pdGlhbFwiKSxlLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXT4wJiZlLl8kdG9vbHRpcC5kZWxheShlLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXSksZS5fJHRvb2x0aXAucXVldWUoaSkpfSwwKSk6ZS5fJHRvb2x0aXAuY3NzKFwiZGlzcGxheVwiLFwibm9uZVwiKS5mYWRlSW4oZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMF0saSksZS5fX3RyYWNrZXJTdGFydCgpLGEoaC53aW5kb3cpLm9uKFwicmVzaXplLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIsZnVuY3Rpb24oYil7dmFyIGM9YShkb2N1bWVudC5hY3RpdmVFbGVtZW50KTsoYy5pcyhcImlucHV0XCIpfHxjLmlzKFwidGV4dGFyZWFcIikpJiZhLmNvbnRhaW5zKGUuXyR0b29sdGlwWzBdLGNbMF0pfHxlLnJlcG9zaXRpb24oYil9KS5vbihcInNjcm9sbC5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiLGZ1bmN0aW9uKGEpe2UuX19zY3JvbGxIYW5kbGVyKGEpfSksZS5fXyRvcmlnaW5QYXJlbnRzPWUuXyRvcmlnaW4ucGFyZW50cygpLGUuX18kb3JpZ2luUGFyZW50cy5lYWNoKGZ1bmN0aW9uKGIsYyl7YShjKS5vbihcInNjcm9sbC5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiLGZ1bmN0aW9uKGEpe2UuX19zY3JvbGxIYW5kbGVyKGEpfSl9KSxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UubW91c2VsZWF2ZXx8ZS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLnRvdWNobGVhdmUmJmguaGFzVG91Y2hDYXBhYmlsaXR5KXtlLl9vbihcImRpc21pc3NhYmxlXCIsZnVuY3Rpb24oYSl7YS5kaXNtaXNzYWJsZT9hLmRlbGF5PyhtPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9jbG9zZShhLmV2ZW50KX0sYS5kZWxheSksZS5fX3RpbWVvdXRzLmNsb3NlLnB1c2gobSkpOmUuX2Nsb3NlKGEpOmNsZWFyVGltZW91dChtKX0pO3ZhciBqPWUuXyRvcmlnaW4saz1cIlwiLGw9XCJcIixtPW51bGw7ZS5fX29wdGlvbnMuaW50ZXJhY3RpdmUmJihqPWouYWRkKGUuXyR0b29sdGlwKSksZS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLm1vdXNlbGVhdmUmJihrKz1cIm1vdXNlZW50ZXIuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2UgXCIsbCs9XCJtb3VzZWxlYXZlLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlIFwiKSxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudG91Y2hsZWF2ZSYmaC5oYXNUb3VjaENhcGFiaWxpdHkmJihrKz1cInRvdWNoc3RhcnQuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2VcIixsKz1cInRvdWNoZW5kLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlIHRvdWNoY2FuY2VsLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIpLGoub24obCxmdW5jdGlvbihhKXtpZihlLl90b3VjaElzVG91Y2hFdmVudChhKXx8IWUuX3RvdWNoSXNFbXVsYXRlZEV2ZW50KGEpKXt2YXIgYj1cIm1vdXNlbGVhdmVcIj09YS50eXBlP2UuX19vcHRpb25zLmRlbGF5OmUuX19vcHRpb25zLmRlbGF5VG91Y2g7ZS5fdHJpZ2dlcih7ZGVsYXk6YlsxXSxkaXNtaXNzYWJsZTohMCxldmVudDphLHR5cGU6XCJkaXNtaXNzYWJsZVwifSl9fSkub24oayxmdW5jdGlvbihhKXshZS5fdG91Y2hJc1RvdWNoRXZlbnQoYSkmJmUuX3RvdWNoSXNFbXVsYXRlZEV2ZW50KGEpfHxlLl90cmlnZ2VyKHtkaXNtaXNzYWJsZTohMSxldmVudDphLHR5cGU6XCJkaXNtaXNzYWJsZVwifSl9KX1lLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2Uub3JpZ2luQ2xpY2smJmUuXyRvcmlnaW4ub24oXCJjbGljay5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiLGZ1bmN0aW9uKGEpe2UuX3RvdWNoSXNUb3VjaEV2ZW50KGEpfHxlLl90b3VjaElzRW11bGF0ZWRFdmVudChhKXx8ZS5fY2xvc2UoYSl9KSwoZS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLmNsaWNrfHxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudGFwJiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihcImNsb3NlZFwiIT1lLl9fc3RhdGUpe3ZhciBiPVwiXCIsYz1hKGgud2luZG93LmRvY3VtZW50LmJvZHkpO2UuX19vcHRpb25zLnRyaWdnZXJDbG9zZS5jbGljayYmKGIrPVwiY2xpY2suXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2UgXCIpLGUuX19vcHRpb25zLnRyaWdnZXJDbG9zZS50YXAmJmguaGFzVG91Y2hDYXBhYmlsaXR5JiYoYis9XCJ0b3VjaGVuZC5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiKSxjLm9uKGIsZnVuY3Rpb24oYil7ZS5fdG91Y2hJc01lYW5pbmdmdWxFdmVudChiKSYmKGUuX3RvdWNoUmVjb3JkRXZlbnQoYiksZS5fX29wdGlvbnMuaW50ZXJhY3RpdmUmJmEuY29udGFpbnMoZS5fJHRvb2x0aXBbMF0sYi50YXJnZXQpfHxlLl9jbG9zZShiKSl9KSxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudGFwJiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSYmYy5vbihcInRvdWNoc3RhcnQuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2VcIixmdW5jdGlvbihhKXtlLl90b3VjaFJlY29yZEV2ZW50KGEpfSl9fSwwKSxlLl90cmlnZ2VyKFwicmVhZHlcIiksZS5fX29wdGlvbnMuZnVuY3Rpb25SZWFkeSYmZS5fX29wdGlvbnMuZnVuY3Rpb25SZWFkeS5jYWxsKGUsZSx7b3JpZ2luOmUuXyRvcmlnaW5bMF0sdG9vbHRpcDplLl8kdG9vbHRpcFswXX0pfWlmKGUuX19vcHRpb25zLnRpbWVyPjApe3ZhciBtPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9jbG9zZSgpfSxlLl9fb3B0aW9ucy50aW1lcitnKTtlLl9fdGltZW91dHMuY2xvc2UucHVzaChtKX19fXJldHVybiBlfSxfb3BlblNob3J0bHk6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPSEwO2lmKFwic3RhYmxlXCIhPWIuX19zdGF0ZSYmXCJhcHBlYXJpbmdcIiE9Yi5fX3N0YXRlJiYhYi5fX3RpbWVvdXRzLm9wZW4mJihiLl90cmlnZ2VyKHt0eXBlOlwic3RhcnRcIixldmVudDphLHN0b3A6ZnVuY3Rpb24oKXtjPSExfX0pLGMpKXt2YXIgZD0wPT1hLnR5cGUuaW5kZXhPZihcInRvdWNoXCIpP2IuX19vcHRpb25zLmRlbGF5VG91Y2g6Yi5fX29wdGlvbnMuZGVsYXk7ZFswXT9iLl9fdGltZW91dHMub3Blbj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5fX3RpbWVvdXRzLm9wZW49bnVsbCxiLl9fcG9pbnRlcklzT3Zlck9yaWdpbiYmYi5fdG91Y2hJc01lYW5pbmdmdWxFdmVudChhKT8oYi5fdHJpZ2dlcihcInN0YXJ0ZW5kXCIpLGIuX29wZW4oYSkpOmIuX3RyaWdnZXIoXCJzdGFydGNhbmNlbFwiKX0sZFswXSk6KGIuX3RyaWdnZXIoXCJzdGFydGVuZFwiKSxiLl9vcGVuKGEpKX1yZXR1cm4gYn0sX29wdGlvbnNFeHRyYWN0OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcyxlPWEuZXh0ZW5kKCEwLHt9LGMpLGY9ZC5fX29wdGlvbnNbYl07cmV0dXJuIGZ8fChmPXt9LGEuZWFjaChjLGZ1bmN0aW9uKGEsYil7dmFyIGM9ZC5fX29wdGlvbnNbYV07dm9pZCAwIT09YyYmKGZbYV09Yyl9KSksYS5lYWNoKGUsZnVuY3Rpb24oYixjKXt2b2lkIDAhPT1mW2JdJiYoXCJvYmplY3RcIiE9dHlwZW9mIGN8fGMgaW5zdGFuY2VvZiBBcnJheXx8bnVsbD09Y3x8XCJvYmplY3RcIiE9dHlwZW9mIGZbYl18fGZbYl1pbnN0YW5jZW9mIEFycmF5fHxudWxsPT1mW2JdP2VbYl09ZltiXTphLmV4dGVuZChlW2JdLGZbYl0pKX0pLGV9LF9wbHVnOmZ1bmN0aW9uKGIpe3ZhciBjPWEudG9vbHRpcHN0ZXIuX3BsdWdpbihiKTtpZighYyl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcIicrYisnXCIgcGx1Z2luIGlzIG5vdCBkZWZpbmVkJyk7cmV0dXJuIGMuaW5zdGFuY2UmJmEudG9vbHRpcHN0ZXIuX19icmlkZ2UoYy5pbnN0YW5jZSx0aGlzLGMubmFtZSksdGhpc30sX3RvdWNoSXNFbXVsYXRlZEV2ZW50OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0hMSxjPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGQ9dGhpcy5fX3RvdWNoRXZlbnRzLmxlbmd0aC0xO2Q+PTA7ZC0tKXt2YXIgZT10aGlzLl9fdG91Y2hFdmVudHNbZF07aWYoIShjLWUudGltZTw1MDApKWJyZWFrO2UudGFyZ2V0PT09YS50YXJnZXQmJihiPSEwKX1yZXR1cm4gYn0sX3RvdWNoSXNNZWFuaW5nZnVsRXZlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX3RvdWNoSXNUb3VjaEV2ZW50KGEpJiYhdGhpcy5fdG91Y2hTd2lwZWQoYS50YXJnZXQpfHwhdGhpcy5fdG91Y2hJc1RvdWNoRXZlbnQoYSkmJiF0aGlzLl90b3VjaElzRW11bGF0ZWRFdmVudChhKX0sX3RvdWNoSXNUb3VjaEV2ZW50OmZ1bmN0aW9uKGEpe3JldHVybiAwPT1hLnR5cGUuaW5kZXhPZihcInRvdWNoXCIpfSxfdG91Y2hSZWNvcmRFdmVudDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fdG91Y2hJc1RvdWNoRXZlbnQoYSkmJihhLnRpbWU9KG5ldyBEYXRlKS5nZXRUaW1lKCksdGhpcy5fX3RvdWNoRXZlbnRzLnB1c2goYSkpLHRoaXN9LF90b3VjaFN3aXBlZDpmdW5jdGlvbihhKXtmb3IodmFyIGI9ITEsYz10aGlzLl9fdG91Y2hFdmVudHMubGVuZ3RoLTE7Yz49MDtjLS0pe3ZhciBkPXRoaXMuX190b3VjaEV2ZW50c1tjXTtpZihcInRvdWNobW92ZVwiPT1kLnR5cGUpe2I9ITA7YnJlYWt9aWYoXCJ0b3VjaHN0YXJ0XCI9PWQudHlwZSYmYT09PWQudGFyZ2V0KWJyZWFrfXJldHVybiBifSxfdHJpZ2dlcjpmdW5jdGlvbigpe3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBiWzBdJiYoYlswXT17dHlwZTpiWzBdfSksYlswXS5pbnN0YW5jZT10aGlzLGJbMF0ub3JpZ2luPXRoaXMuXyRvcmlnaW4/dGhpcy5fJG9yaWdpblswXTpudWxsLGJbMF0udG9vbHRpcD10aGlzLl8kdG9vbHRpcD90aGlzLl8kdG9vbHRpcFswXTpudWxsLHRoaXMuX18kZW1pdHRlclByaXZhdGUudHJpZ2dlci5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLGIpLGEudG9vbHRpcHN0ZXIuX3RyaWdnZXIuYXBwbHkoYS50b29sdGlwc3RlcixiKSx0aGlzLl9fJGVtaXR0ZXJQdWJsaWMudHJpZ2dlci5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsYiksdGhpc30sX3VucGx1ZzpmdW5jdGlvbihiKXt2YXIgYz10aGlzO2lmKGNbYl0pe3ZhciBkPWEudG9vbHRpcHN0ZXIuX3BsdWdpbihiKTtkLmluc3RhbmNlJiZhLmVhY2goZC5pbnN0YW5jZSxmdW5jdGlvbihhLGQpe2NbYV0mJmNbYV0uYnJpZGdlZD09PWNbYl0mJmRlbGV0ZSBjW2FdfSksY1tiXS5fX2Rlc3Ryb3kmJmNbYl0uX19kZXN0cm95KCksZGVsZXRlIGNbYl19cmV0dXJuIGN9LGNsb3NlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9fZGVzdHJveWVkP3RoaXMuX19kZXN0cm95RXJyb3IoKTp0aGlzLl9jbG9zZShudWxsLGEpLHRoaXN9LGNvbnRlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZih2b2lkIDA9PT1hKXJldHVybiBiLl9fQ29udGVudDtpZihiLl9fZGVzdHJveWVkKWIuX19kZXN0cm95RXJyb3IoKTtlbHNlIGlmKGIuX19jb250ZW50U2V0KGEpLG51bGwhPT1iLl9fQ29udGVudCl7aWYoXCJjbG9zZWRcIiE9PWIuX19zdGF0ZSYmKGIuX19jb250ZW50SW5zZXJ0KCksYi5yZXBvc2l0aW9uKCksYi5fX29wdGlvbnMudXBkYXRlQW5pbWF0aW9uKSlpZihoLmhhc1RyYW5zaXRpb25zKXt2YXIgYz1iLl9fb3B0aW9ucy51cGRhdGVBbmltYXRpb247Yi5fJHRvb2x0aXAuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci11cGRhdGUtXCIrYyksc2V0VGltZW91dChmdW5jdGlvbigpe1wiY2xvc2VkXCIhPWIuX19zdGF0ZSYmYi5fJHRvb2x0aXAucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3Rlci11cGRhdGUtXCIrYyl9LDFlMyl9ZWxzZSBiLl8kdG9vbHRpcC5mYWRlVG8oMjAwLC41LGZ1bmN0aW9uKCl7XCJjbG9zZWRcIiE9Yi5fX3N0YXRlJiZiLl8kdG9vbHRpcC5mYWRlVG8oMjAwLDEpfSl9ZWxzZSBiLl9jbG9zZSgpO3JldHVybiBifSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcztpZihiLl9fZGVzdHJveWVkKWIuX19kZXN0cm95RXJyb3IoKTtlbHNle1wiY2xvc2VkXCIhPWIuX19zdGF0ZT9iLm9wdGlvbihcImFuaW1hdGlvbkR1cmF0aW9uXCIsMCkuX2Nsb3NlKG51bGwsbnVsbCwhMCk6Yi5fX3RpbWVvdXRzQ2xlYXIoKSxiLl90cmlnZ2VyKFwiZGVzdHJveVwiKSxiLl9fZGVzdHJveWVkPSEwLGIuXyRvcmlnaW4ucmVtb3ZlRGF0YShiLl9fbmFtZXNwYWNlKS5vZmYoXCIuXCIrYi5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlblwiKSxhKGgud2luZG93LmRvY3VtZW50LmJvZHkpLm9mZihcIi5cIitiLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIpO3ZhciBjPWIuXyRvcmlnaW4uZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpO2lmKGMpaWYoMT09PWMubGVuZ3RoKXt2YXIgZD1udWxsO1wicHJldmlvdXNcIj09Yi5fX29wdGlvbnMucmVzdG9yYXRpb24/ZD1iLl8kb3JpZ2luLmRhdGEoXCJ0b29sdGlwc3Rlci1pbml0aWFsVGl0bGVcIik6XCJjdXJyZW50XCI9PWIuX19vcHRpb25zLnJlc3RvcmF0aW9uJiYoZD1cInN0cmluZ1wiPT10eXBlb2YgYi5fX0NvbnRlbnQ/Yi5fX0NvbnRlbnQ6YShcIjxkaXY+PC9kaXY+XCIpLmFwcGVuZChiLl9fQ29udGVudCkuaHRtbCgpKSxkJiZiLl8kb3JpZ2luLmF0dHIoXCJ0aXRsZVwiLGQpLGIuXyRvcmlnaW4ucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3RlcmVkXCIpLGIuXyRvcmlnaW4ucmVtb3ZlRGF0YShcInRvb2x0aXBzdGVyLW5zXCIpLnJlbW92ZURhdGEoXCJ0b29sdGlwc3Rlci1pbml0aWFsVGl0bGVcIil9ZWxzZSBjPWEuZ3JlcChjLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGEhPT1iLl9fbmFtZXNwYWNlfSksYi5fJG9yaWdpbi5kYXRhKFwidG9vbHRpcHN0ZXItbnNcIixjKTtiLl90cmlnZ2VyKFwiZGVzdHJveWVkXCIpLGIuX29mZigpLGIub2ZmKCksYi5fX0NvbnRlbnQ9bnVsbCxiLl9fJGVtaXR0ZXJQcml2YXRlPW51bGwsYi5fXyRlbWl0dGVyUHVibGljPW51bGwsYi5fX29wdGlvbnMucGFyZW50PW51bGwsYi5fJG9yaWdpbj1udWxsLGIuXyR0b29sdGlwPW51bGwsYS50b29sdGlwc3Rlci5fX2luc3RhbmNlc0xhdGVzdEFycj1hLmdyZXAoYS50b29sdGlwc3Rlci5fX2luc3RhbmNlc0xhdGVzdEFycixmdW5jdGlvbihhLGMpe3JldHVybiBiIT09YX0pLGNsZWFySW50ZXJ2YWwoYi5fX2dhcmJhZ2VDb2xsZWN0b3IpfXJldHVybiBifSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kZXN0cm95ZWQ/KHRoaXMuX19kZXN0cm95RXJyb3IoKSx0aGlzKToodGhpcy5fY2xvc2UoKSx0aGlzLl9fZW5hYmxlZD0hMSx0aGlzKX0sZWxlbWVudE9yaWdpbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZGVzdHJveWVkP3ZvaWQgdGhpcy5fX2Rlc3Ryb3lFcnJvcigpOnRoaXMuXyRvcmlnaW5bMF19LGVsZW1lbnRUb29sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyR0b29sdGlwP3RoaXMuXyR0b29sdGlwWzBdOm51bGx9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZW5hYmxlZD0hMCx0aGlzfSxoaWRlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNsb3NlKGEpfSxpbnN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxvZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2Rlc3Ryb3llZHx8dGhpcy5fXyRlbWl0dGVyUHVibGljLm9mZi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kZXN0cm95ZWQ/dGhpcy5fX2Rlc3Ryb3lFcnJvcigpOnRoaXMuX18kZW1pdHRlclB1YmxpYy5vbi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZGVzdHJveWVkP3RoaXMuX19kZXN0cm95RXJyb3IoKTp0aGlzLl9fJGVtaXR0ZXJQdWJsaWMub25lLmFwcGx5KHRoaXMuX18kZW1pdHRlclB1YmxpYyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sb3BlbjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fX2Rlc3Ryb3llZD90aGlzLl9fZGVzdHJveUVycm9yKCk6dGhpcy5fb3BlbihudWxsLGEpLHRoaXN9LG9wdGlvbjpmdW5jdGlvbihiLGMpe3JldHVybiB2b2lkIDA9PT1jP3RoaXMuX19vcHRpb25zW2JdOih0aGlzLl9fZGVzdHJveWVkP3RoaXMuX19kZXN0cm95RXJyb3IoKToodGhpcy5fX29wdGlvbnNbYl09Yyx0aGlzLl9fb3B0aW9uc0Zvcm1hdCgpLGEuaW5BcnJheShiLFtcInRyaWdnZXJcIixcInRyaWdnZXJDbG9zZVwiLFwidHJpZ2dlck9wZW5cIl0pPj0wJiZ0aGlzLl9fcHJlcGFyZU9yaWdpbigpLFwic2VsZkRlc3RydWN0aW9uXCI9PT1iJiZ0aGlzLl9fcHJlcGFyZUdDKCkpLHRoaXMpfSxyZXBvc2l0aW9uOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztyZXR1cm4gYy5fX2Rlc3Ryb3llZD9jLl9fZGVzdHJveUVycm9yKCk6XCJjbG9zZWRcIiE9Yy5fX3N0YXRlJiZkKGMuXyRvcmlnaW4pJiYoYnx8ZChjLl8kdG9vbHRpcCkpJiYoYnx8Yy5fJHRvb2x0aXAuZGV0YWNoKCksYy5fX0dlb21ldHJ5PWMuX19nZW9tZXRyeSgpLGMuX3RyaWdnZXIoe3R5cGU6XCJyZXBvc2l0aW9uXCIsZXZlbnQ6YSxoZWxwZXI6e2dlbzpjLl9fR2VvbWV0cnl9fSkpLGN9LHNob3c6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub3BlbihhKX0sc3RhdHVzOmZ1bmN0aW9uKCl7cmV0dXJue2Rlc3Ryb3llZDp0aGlzLl9fZGVzdHJveWVkLGVuYWJsZWQ6dGhpcy5fX2VuYWJsZWQsb3BlbjpcImNsb3NlZFwiIT09dGhpcy5fX3N0YXRlLHN0YXRlOnRoaXMuX19zdGF0ZX19LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kZXN0cm95ZWQ/dGhpcy5fX2Rlc3Ryb3lFcnJvcigpOnRoaXMuX18kZW1pdHRlclB1YmxpYy50cmlnZ2VySGFuZGxlci5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9fSxhLmZuLnRvb2x0aXBzdGVyPWZ1bmN0aW9uKCl7dmFyIGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyksYz1cIllvdSBhcmUgdXNpbmcgYSBzaW5nbGUgSFRNTCBlbGVtZW50IGFzIGNvbnRlbnQgZm9yIHNldmVyYWwgdG9vbHRpcHMuIFlvdSBwcm9iYWJseSB3YW50IHRvIHNldCB0aGUgY29udGVudENsb25pbmcgb3B0aW9uIHRvIFRSVUUuXCI7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiWzBdKXt2YXIgZD1cIiMqJH4mXCI7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcykuZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpLGY9ZT9hKHRoaXMpLmRhdGEoZVswXSk6bnVsbDtpZighZil0aHJvdyBuZXcgRXJyb3IoXCJZb3UgY2FsbGVkIFRvb2x0aXBzdGVyJ3MgXFxcIlwiK2JbMF0rJ1wiIG1ldGhvZCBvbiBhbiB1bmluaXRpYWxpemVkIGVsZW1lbnQnKTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBmW2JbMF1dKXRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXRob2QgXCInK2JbMF0rJ1wiJyk7dGhpcy5sZW5ndGg+MSYmXCJjb250ZW50XCI9PWJbMF0mJihiWzFdaW5zdGFuY2VvZiBhfHxcIm9iamVjdFwiPT10eXBlb2YgYlsxXSYmbnVsbCE9YlsxXSYmYlsxXS50YWdOYW1lKSYmIWYuX19vcHRpb25zLmNvbnRlbnRDbG9uaW5nJiZmLl9fb3B0aW9ucy5kZWJ1ZyYmY29uc29sZS5sb2coYyk7dmFyIGc9ZltiWzBdXShiWzFdLGJbMl0pO3JldHVybiBnIT09Znx8XCJpbnN0YW5jZVwiPT09YlswXT8oZD1nLCExKTp2b2lkIDB9KSxcIiMqJH4mXCIhPT1kP2Q6dGhpc31hLnRvb2x0aXBzdGVyLl9faW5zdGFuY2VzTGF0ZXN0QXJyPVtdO3ZhciBlPWJbMF0mJnZvaWQgMCE9PWJbMF0ubXVsdGlwbGUsZz1lJiZiWzBdLm11bHRpcGxlfHwhZSYmZi5tdWx0aXBsZSxoPWJbMF0mJnZvaWQgMCE9PWJbMF0uY29udGVudCxpPWgmJmJbMF0uY29udGVudHx8IWgmJmYuY29udGVudCxqPWJbMF0mJnZvaWQgMCE9PWJbMF0uY29udGVudENsb25pbmcsaz1qJiZiWzBdLmNvbnRlbnRDbG9uaW5nfHwhaiYmZi5jb250ZW50Q2xvbmluZyxsPWJbMF0mJnZvaWQgMCE9PWJbMF0uZGVidWcsbT1sJiZiWzBdLmRlYnVnfHwhbCYmZi5kZWJ1ZztyZXR1cm4gdGhpcy5sZW5ndGg+MSYmKGkgaW5zdGFuY2VvZiBhfHxcIm9iamVjdFwiPT10eXBlb2YgaSYmbnVsbCE9aSYmaS50YWdOYW1lKSYmIWsmJm0mJmNvbnNvbGUubG9nKGMpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPSExLGQ9YSh0aGlzKSxlPWQuZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpLGY9bnVsbDtlP2c/Yz0hMDptJiYoY29uc29sZS5sb2coXCJUb29sdGlwc3Rlcjogb25lIG9yIG1vcmUgdG9vbHRpcHMgYXJlIGFscmVhZHkgYXR0YWNoZWQgdG8gdGhlIGVsZW1lbnQgYmVsb3cuIElnbm9yaW5nLlwiKSxjb25zb2xlLmxvZyh0aGlzKSk6Yz0hMCxjJiYoZj1uZXcgYS5Ub29sdGlwc3Rlcih0aGlzLGJbMF0pLGV8fChlPVtdKSxlLnB1c2goZi5fX25hbWVzcGFjZSksZC5kYXRhKFwidG9vbHRpcHN0ZXItbnNcIixlKSxkLmRhdGEoZi5fX25hbWVzcGFjZSxmKSxmLl9fb3B0aW9ucy5mdW5jdGlvbkluaXQmJmYuX19vcHRpb25zLmZ1bmN0aW9uSW5pdC5jYWxsKGYsZix7b3JpZ2luOnRoaXN9KSxmLl90cmlnZ2VyKFwiaW5pdFwiKSksYS50b29sdGlwc3Rlci5fX2luc3RhbmNlc0xhdGVzdEFyci5wdXNoKGYpfSksdGhpc30sYi5wcm90b3R5cGU9e19faW5pdDpmdW5jdGlvbihiKXt0aGlzLl9fJHRvb2x0aXA9Yix0aGlzLl9fJHRvb2x0aXAuY3NzKHtsZWZ0OjAsb3ZlcmZsb3c6XCJoaWRkZW5cIixwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOjB9KS5maW5kKFwiLnRvb2x0aXBzdGVyLWNvbnRlbnRcIikuY3NzKFwib3ZlcmZsb3dcIixcImF1dG9cIiksdGhpcy4kY29udGFpbmVyPWEoJzxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1ydWxlclwiPjwvZGl2PicpLmFwcGVuZCh0aGlzLl9fJHRvb2x0aXApLmFwcGVuZFRvKGgud2luZG93LmRvY3VtZW50LmJvZHkpfSxfX2ZvcmNlUmVkcmF3OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fXyR0b29sdGlwLnBhcmVudCgpO3RoaXMuX18kdG9vbHRpcC5kZXRhY2goKSx0aGlzLl9fJHRvb2x0aXAuYXBwZW5kVG8oYSl9LGNvbnN0cmFpbjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmNvbnN0cmFpbnRzPXt3aWR0aDphLGhlaWdodDpifSx0aGlzLl9fJHRvb2x0aXAuY3NzKHtkaXNwbGF5OlwiYmxvY2tcIixoZWlnaHQ6XCJcIixvdmVyZmxvdzpcImF1dG9cIix3aWR0aDphfSksdGhpc30sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX18kdG9vbHRpcC5kZXRhY2goKS5maW5kKFwiLnRvb2x0aXBzdGVyLWNvbnRlbnRcIikuY3NzKHtkaXNwbGF5OlwiXCIsb3ZlcmZsb3c6XCJcIn0pLHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKX0sZnJlZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN0cmFpbnRzPW51bGwsdGhpcy5fXyR0b29sdGlwLmNzcyh7ZGlzcGxheTpcIlwiLGhlaWdodDpcIlwiLG92ZXJmbG93OlwidmlzaWJsZVwiLHdpZHRoOlwiXCJ9KSx0aGlzfSxtZWFzdXJlOmZ1bmN0aW9uKCl7dGhpcy5fX2ZvcmNlUmVkcmF3KCk7dmFyIGE9dGhpcy5fXyR0b29sdGlwWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGI9e3NpemU6e2hlaWdodDphLmhlaWdodHx8YS5ib3R0b20tYS50b3Asd2lkdGg6YS53aWR0aHx8YS5yaWdodC1hLmxlZnR9fTtpZih0aGlzLmNvbnN0cmFpbnRzKXt2YXIgYz10aGlzLl9fJHRvb2x0aXAuZmluZChcIi50b29sdGlwc3Rlci1jb250ZW50XCIpLGQ9dGhpcy5fXyR0b29sdGlwLm91dGVySGVpZ2h0KCksZT1jWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9e2hlaWdodDpkPD10aGlzLmNvbnN0cmFpbnRzLmhlaWdodCx3aWR0aDphLndpZHRoPD10aGlzLmNvbnN0cmFpbnRzLndpZHRoJiZlLndpZHRoPj1jWzBdLnNjcm9sbFdpZHRoLTF9O2IuZml0cz1mLmhlaWdodCYmZi53aWR0aH1yZXR1cm4gaC5JRSYmaC5JRTw9MTEmJmIuc2l6ZS53aWR0aCE9PWgud2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCYmKGIuc2l6ZS53aWR0aD1NYXRoLmNlaWwoYi5zaXplLndpZHRoKSsxKSxifX07dmFyIGo9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOy0xIT1qLmluZGV4T2YoXCJtc2llXCIpP2guSUU9cGFyc2VJbnQoai5zcGxpdChcIm1zaWVcIilbMV0pOi0xIT09ai50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJ0cmlkZW50XCIpJiYtMSE9PWouaW5kZXhPZihcIiBydjoxMVwiKT9oLklFPTExOi0xIT1qLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImVkZ2UvXCIpJiYoaC5JRT1wYXJzZUludChqLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCJlZGdlL1wiKVsxXSkpO3ZhciBrPVwidG9vbHRpcHN0ZXIuc2lkZVRpcFwiO3JldHVybiBhLnRvb2x0aXBzdGVyLl9wbHVnaW4oe25hbWU6ayxpbnN0YW5jZTp7X19kZWZhdWx0czpmdW5jdGlvbigpe3JldHVybnthcnJvdzohMCxkaXN0YW5jZTo2LGZ1bmN0aW9uUG9zaXRpb246bnVsbCxtYXhXaWR0aDpudWxsLG1pbkludGVyc2VjdGlvbjoxNixtaW5XaWR0aDowLHBvc2l0aW9uOm51bGwsc2lkZTpcInRvcFwiLHZpZXdwb3J0QXdhcmU6ITB9fSxfX2luaXQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztiLl9faW5zdGFuY2U9YSxiLl9fbmFtZXNwYWNlPVwidG9vbHRpcHN0ZXItc2lkZVRpcC1cIitNYXRoLnJvdW5kKDFlNipNYXRoLnJhbmRvbSgpKSxiLl9fcHJldmlvdXNTdGF0ZT1cImNsb3NlZFwiLGIuX19vcHRpb25zLGIuX19vcHRpb25zRm9ybWF0KCksYi5fX2luc3RhbmNlLl9vbihcInN0YXRlLlwiK2IuX19uYW1lc3BhY2UsZnVuY3Rpb24oYSl7XCJjbG9zZWRcIj09YS5zdGF0ZT9iLl9fY2xvc2UoKTpcImFwcGVhcmluZ1wiPT1hLnN0YXRlJiZcImNsb3NlZFwiPT1iLl9fcHJldmlvdXNTdGF0ZSYmYi5fX2NyZWF0ZSgpLGIuX19wcmV2aW91c1N0YXRlPWEuc3RhdGV9KSxiLl9faW5zdGFuY2UuX29uKFwib3B0aW9ucy5cIitiLl9fbmFtZXNwYWNlLGZ1bmN0aW9uKCl7Yi5fX29wdGlvbnNGb3JtYXQoKX0pLGIuX19pbnN0YW5jZS5fb24oXCJyZXBvc2l0aW9uLlwiK2IuX19uYW1lc3BhY2UsZnVuY3Rpb24oYSl7Yi5fX3JlcG9zaXRpb24oYS5ldmVudCxhLmhlbHBlcil9KX0sX19jbG9zZTpmdW5jdGlvbigpe3RoaXMuX19pbnN0YW5jZS5jb250ZW50KClpbnN0YW5jZW9mIGEmJnRoaXMuX19pbnN0YW5jZS5jb250ZW50KCkuZGV0YWNoKCksdGhpcy5fX2luc3RhbmNlLl8kdG9vbHRpcC5yZW1vdmUoKSx0aGlzLl9faW5zdGFuY2UuXyR0b29sdGlwPW51bGx9LF9fY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGI9YSgnPGRpdiBjbGFzcz1cInRvb2x0aXBzdGVyLWJhc2UgdG9vbHRpcHN0ZXItc2lkZXRpcFwiPjxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1ib3hcIj48ZGl2IGNsYXNzPVwidG9vbHRpcHN0ZXItY29udGVudFwiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1hcnJvd1wiPjxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1hcnJvdy11bmNyb3BwZWRcIj48ZGl2IGNsYXNzPVwidG9vbHRpcHN0ZXItYXJyb3ctYm9yZGVyXCI+PC9kaXY+PGRpdiBjbGFzcz1cInRvb2x0aXBzdGVyLWFycm93LWJhY2tncm91bmRcIj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4nKTt0aGlzLl9fb3B0aW9ucy5hcnJvd3x8Yi5maW5kKFwiLnRvb2x0aXBzdGVyLWJveFwiKS5jc3MoXCJtYXJnaW5cIiwwKS5lbmQoKS5maW5kKFwiLnRvb2x0aXBzdGVyLWFycm93XCIpLmhpZGUoKSx0aGlzLl9fb3B0aW9ucy5taW5XaWR0aCYmYi5jc3MoXCJtaW4td2lkdGhcIix0aGlzLl9fb3B0aW9ucy5taW5XaWR0aCtcInB4XCIpLHRoaXMuX19vcHRpb25zLm1heFdpZHRoJiZiLmNzcyhcIm1heC13aWR0aFwiLHRoaXMuX19vcHRpb25zLm1heFdpZHRoK1wicHhcIiksXG50aGlzLl9faW5zdGFuY2UuXyR0b29sdGlwPWIsdGhpcy5fX2luc3RhbmNlLl90cmlnZ2VyKFwiY3JlYXRlZFwiKX0sX19kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX2luc3RhbmNlLl9vZmYoXCIuXCIrc2VsZi5fX25hbWVzcGFjZSl9LF9fb3B0aW9uc0Zvcm1hdDpmdW5jdGlvbigpe3ZhciBiPXRoaXM7aWYoYi5fX29wdGlvbnM9Yi5fX2luc3RhbmNlLl9vcHRpb25zRXh0cmFjdChrLGIuX19kZWZhdWx0cygpKSxiLl9fb3B0aW9ucy5wb3NpdGlvbiYmKGIuX19vcHRpb25zLnNpZGU9Yi5fX29wdGlvbnMucG9zaXRpb24pLFwib2JqZWN0XCIhPXR5cGVvZiBiLl9fb3B0aW9ucy5kaXN0YW5jZSYmKGIuX19vcHRpb25zLmRpc3RhbmNlPVtiLl9fb3B0aW9ucy5kaXN0YW5jZV0pLGIuX19vcHRpb25zLmRpc3RhbmNlLmxlbmd0aDw0JiYodm9pZCAwPT09Yi5fX29wdGlvbnMuZGlzdGFuY2VbMV0mJihiLl9fb3B0aW9ucy5kaXN0YW5jZVsxXT1iLl9fb3B0aW9ucy5kaXN0YW5jZVswXSksdm9pZCAwPT09Yi5fX29wdGlvbnMuZGlzdGFuY2VbMl0mJihiLl9fb3B0aW9ucy5kaXN0YW5jZVsyXT1iLl9fb3B0aW9ucy5kaXN0YW5jZVswXSksdm9pZCAwPT09Yi5fX29wdGlvbnMuZGlzdGFuY2VbM10mJihiLl9fb3B0aW9ucy5kaXN0YW5jZVszXT1iLl9fb3B0aW9ucy5kaXN0YW5jZVsxXSkpLGIuX19vcHRpb25zLmRpc3RhbmNlPXt0b3A6Yi5fX29wdGlvbnMuZGlzdGFuY2VbMF0scmlnaHQ6Yi5fX29wdGlvbnMuZGlzdGFuY2VbMV0sYm90dG9tOmIuX19vcHRpb25zLmRpc3RhbmNlWzJdLGxlZnQ6Yi5fX29wdGlvbnMuZGlzdGFuY2VbM119LFwic3RyaW5nXCI9PXR5cGVvZiBiLl9fb3B0aW9ucy5zaWRlKXt2YXIgYz17dG9wOlwiYm90dG9tXCIscmlnaHQ6XCJsZWZ0XCIsYm90dG9tOlwidG9wXCIsbGVmdDpcInJpZ2h0XCJ9O2IuX19vcHRpb25zLnNpZGU9W2IuX19vcHRpb25zLnNpZGUsY1tiLl9fb3B0aW9ucy5zaWRlXV0sXCJsZWZ0XCI9PWIuX19vcHRpb25zLnNpZGVbMF18fFwicmlnaHRcIj09Yi5fX29wdGlvbnMuc2lkZVswXT9iLl9fb3B0aW9ucy5zaWRlLnB1c2goXCJ0b3BcIixcImJvdHRvbVwiKTpiLl9fb3B0aW9ucy5zaWRlLnB1c2goXCJyaWdodFwiLFwibGVmdFwiKX02PT09YS50b29sdGlwc3Rlci5fZW52LklFJiZiLl9fb3B0aW9ucy5hcnJvdyE9PSEwJiYoYi5fX29wdGlvbnMuYXJyb3c9ITEpfSxfX3JlcG9zaXRpb246ZnVuY3Rpb24oYixjKXt2YXIgZCxlPXRoaXMsZj1lLl9fdGFyZ2V0RmluZChjKSxnPVtdO2UuX19pbnN0YW5jZS5fJHRvb2x0aXAuZGV0YWNoKCk7dmFyIGg9ZS5fX2luc3RhbmNlLl8kdG9vbHRpcC5jbG9uZSgpLGk9YS50b29sdGlwc3Rlci5fZ2V0UnVsZXIoaCksaj0hMSxrPWUuX19pbnN0YW5jZS5vcHRpb24oXCJhbmltYXRpb25cIik7c3dpdGNoKGsmJmgucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3Rlci1cIitrKSxhLmVhY2goW1wid2luZG93XCIsXCJkb2N1bWVudFwiXSxmdW5jdGlvbihkLGspe3ZhciBsPW51bGw7aWYoZS5fX2luc3RhbmNlLl90cmlnZ2VyKHtjb250YWluZXI6ayxoZWxwZXI6YyxzYXRpc2ZpZWQ6aix0YWtlVGVzdDpmdW5jdGlvbihhKXtsPWF9LHJlc3VsdHM6Zyx0eXBlOlwicG9zaXRpb25UZXN0XCJ9KSwxPT1sfHwwIT1sJiYwPT1qJiYoXCJ3aW5kb3dcIiE9a3x8ZS5fX29wdGlvbnMudmlld3BvcnRBd2FyZSkpZm9yKHZhciBkPTA7ZDxlLl9fb3B0aW9ucy5zaWRlLmxlbmd0aDtkKyspe3ZhciBtPXtob3Jpem9udGFsOjAsdmVydGljYWw6MH0sbj1lLl9fb3B0aW9ucy5zaWRlW2RdO1widG9wXCI9PW58fFwiYm90dG9tXCI9PW4/bS52ZXJ0aWNhbD1lLl9fb3B0aW9ucy5kaXN0YW5jZVtuXTptLmhvcml6b250YWw9ZS5fX29wdGlvbnMuZGlzdGFuY2Vbbl0sZS5fX3NpZGVDaGFuZ2UoaCxuKSxhLmVhY2goW1wibmF0dXJhbFwiLFwiY29uc3RyYWluZWRcIl0sZnVuY3Rpb24oYSxkKXtpZihsPW51bGwsZS5fX2luc3RhbmNlLl90cmlnZ2VyKHtjb250YWluZXI6ayxldmVudDpiLGhlbHBlcjpjLG1vZGU6ZCxyZXN1bHRzOmcsc2F0aXNmaWVkOmosc2lkZTpuLHRha2VUZXN0OmZ1bmN0aW9uKGEpe2w9YX0sdHlwZTpcInBvc2l0aW9uVGVzdFwifSksMT09bHx8MCE9bCYmMD09ail7dmFyIGg9e2NvbnRhaW5lcjprLGRpc3RhbmNlOm0sZml0czpudWxsLG1vZGU6ZCxvdXRlclNpemU6bnVsbCxzaWRlOm4sc2l6ZTpudWxsLHRhcmdldDpmW25dLHdob2xlOm51bGx9LG89XCJuYXR1cmFsXCI9PWQ/aS5mcmVlKCk6aS5jb25zdHJhaW4oYy5nZW8uYXZhaWxhYmxlW2tdW25dLndpZHRoLW0uaG9yaXpvbnRhbCxjLmdlby5hdmFpbGFibGVba11bbl0uaGVpZ2h0LW0udmVydGljYWwpLHA9by5tZWFzdXJlKCk7aWYoaC5zaXplPXAuc2l6ZSxoLm91dGVyU2l6ZT17aGVpZ2h0OnAuc2l6ZS5oZWlnaHQrbS52ZXJ0aWNhbCx3aWR0aDpwLnNpemUud2lkdGgrbS5ob3Jpem9udGFsfSxcIm5hdHVyYWxcIj09ZD9jLmdlby5hdmFpbGFibGVba11bbl0ud2lkdGg+PWgub3V0ZXJTaXplLndpZHRoJiZjLmdlby5hdmFpbGFibGVba11bbl0uaGVpZ2h0Pj1oLm91dGVyU2l6ZS5oZWlnaHQ/aC5maXRzPSEwOmguZml0cz0hMTpoLmZpdHM9cC5maXRzLFwid2luZG93XCI9PWsmJihoLmZpdHM/XCJ0b3BcIj09bnx8XCJib3R0b21cIj09bj9oLndob2xlPWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQ+PWUuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbiYmYy5nZW8ud2luZG93LnNpemUud2lkdGgtYy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0Pj1lLl9fb3B0aW9ucy5taW5JbnRlcnNlY3Rpb246aC53aG9sZT1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmJvdHRvbT49ZS5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uJiZjLmdlby53aW5kb3cuc2l6ZS5oZWlnaHQtYy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC50b3A+PWUuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbjpoLndob2xlPSExKSxnLnB1c2goaCksaC53aG9sZSlqPSEwO2Vsc2UgaWYoXCJuYXR1cmFsXCI9PWgubW9kZSYmKGguZml0c3x8aC5zaXplLndpZHRoPD1jLmdlby5hdmFpbGFibGVba11bbl0ud2lkdGgpKXJldHVybiExfX0pfX0pLGUuX19pbnN0YW5jZS5fdHJpZ2dlcih7ZWRpdDpmdW5jdGlvbihhKXtnPWF9LGV2ZW50OmIsaGVscGVyOmMscmVzdWx0czpnLHR5cGU6XCJwb3NpdGlvblRlc3RlZFwifSksZy5zb3J0KGZ1bmN0aW9uKGEsYil7aWYoYS53aG9sZSYmIWIud2hvbGUpcmV0dXJuLTE7aWYoIWEud2hvbGUmJmIud2hvbGUpcmV0dXJuIDE7aWYoYS53aG9sZSYmYi53aG9sZSl7dmFyIGM9ZS5fX29wdGlvbnMuc2lkZS5pbmRleE9mKGEuc2lkZSksZD1lLl9fb3B0aW9ucy5zaWRlLmluZGV4T2YoYi5zaWRlKTtyZXR1cm4gZD5jPy0xOmM+ZD8xOlwibmF0dXJhbFwiPT1hLm1vZGU/LTE6MX1pZihhLmZpdHMmJiFiLmZpdHMpcmV0dXJuLTE7aWYoIWEuZml0cyYmYi5maXRzKXJldHVybiAxO2lmKGEuZml0cyYmYi5maXRzKXt2YXIgYz1lLl9fb3B0aW9ucy5zaWRlLmluZGV4T2YoYS5zaWRlKSxkPWUuX19vcHRpb25zLnNpZGUuaW5kZXhPZihiLnNpZGUpO3JldHVybiBkPmM/LTE6Yz5kPzE6XCJuYXR1cmFsXCI9PWEubW9kZT8tMToxfXJldHVyblwiZG9jdW1lbnRcIj09YS5jb250YWluZXImJlwiYm90dG9tXCI9PWEuc2lkZSYmXCJuYXR1cmFsXCI9PWEubW9kZT8tMToxfSksZD1nWzBdLGQuY29vcmQ9e30sZC5zaWRlKXtjYXNlXCJsZWZ0XCI6Y2FzZVwicmlnaHRcIjpkLmNvb3JkLnRvcD1NYXRoLmZsb29yKGQudGFyZ2V0LWQuc2l6ZS5oZWlnaHQvMik7YnJlYWs7Y2FzZVwiYm90dG9tXCI6Y2FzZVwidG9wXCI6ZC5jb29yZC5sZWZ0PU1hdGguZmxvb3IoZC50YXJnZXQtZC5zaXplLndpZHRoLzIpfXN3aXRjaChkLnNpZGUpe2Nhc2VcImxlZnRcIjpkLmNvb3JkLmxlZnQ9Yy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0LWQub3V0ZXJTaXplLndpZHRoO2JyZWFrO2Nhc2VcInJpZ2h0XCI6ZC5jb29yZC5sZWZ0PWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQrZC5kaXN0YW5jZS5ob3Jpem9udGFsO2JyZWFrO2Nhc2VcInRvcFwiOmQuY29vcmQudG9wPWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wLWQub3V0ZXJTaXplLmhlaWdodDticmVhaztjYXNlXCJib3R0b21cIjpkLmNvb3JkLnRvcD1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmJvdHRvbStkLmRpc3RhbmNlLnZlcnRpY2FsfVwid2luZG93XCI9PWQuY29udGFpbmVyP1widG9wXCI9PWQuc2lkZXx8XCJib3R0b21cIj09ZC5zaWRlP2QuY29vcmQubGVmdDwwP2MuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQtdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uPj0wP2QuY29vcmQubGVmdD0wOmQuY29vcmQubGVmdD1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LnJpZ2h0LXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbi0xOmQuY29vcmQubGVmdD5jLmdlby53aW5kb3cuc2l6ZS53aWR0aC1kLnNpemUud2lkdGgmJihjLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQrdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uPD1jLmdlby53aW5kb3cuc2l6ZS53aWR0aD9kLmNvb3JkLmxlZnQ9Yy5nZW8ud2luZG93LnNpemUud2lkdGgtZC5zaXplLndpZHRoOmQuY29vcmQubGVmdD1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQrdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uKzEtZC5zaXplLndpZHRoKTpkLmNvb3JkLnRvcDwwP2MuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQuYm90dG9tLXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbj49MD9kLmNvb3JkLnRvcD0wOmQuY29vcmQudG9wPWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQuYm90dG9tLXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbi0xOmQuY29vcmQudG9wPmMuZ2VvLndpbmRvdy5zaXplLmhlaWdodC1kLnNpemUuaGVpZ2h0JiYoYy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC50b3ArdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uPD1jLmdlby53aW5kb3cuc2l6ZS5oZWlnaHQ/ZC5jb29yZC50b3A9Yy5nZW8ud2luZG93LnNpemUuaGVpZ2h0LWQuc2l6ZS5oZWlnaHQ6ZC5jb29yZC50b3A9Yy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC50b3ArdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uKzEtZC5zaXplLmhlaWdodCk6KGQuY29vcmQubGVmdD5jLmdlby53aW5kb3cuc2l6ZS53aWR0aC1kLnNpemUud2lkdGgmJihkLmNvb3JkLmxlZnQ9Yy5nZW8ud2luZG93LnNpemUud2lkdGgtZC5zaXplLndpZHRoKSxkLmNvb3JkLmxlZnQ8MCYmKGQuY29vcmQubGVmdD0wKSksZS5fX3NpZGVDaGFuZ2UoaCxkLnNpZGUpLGMudG9vbHRpcENsb25lPWhbMF0sYy50b29sdGlwUGFyZW50PWUuX19pbnN0YW5jZS5vcHRpb24oXCJwYXJlbnRcIikucGFyZW50WzBdLGMubW9kZT1kLm1vZGUsYy53aG9sZT1kLndob2xlLGMub3JpZ2luPWUuX19pbnN0YW5jZS5fJG9yaWdpblswXSxjLnRvb2x0aXA9ZS5fX2luc3RhbmNlLl8kdG9vbHRpcFswXSxkZWxldGUgZC5jb250YWluZXIsZGVsZXRlIGQuZml0cyxkZWxldGUgZC5tb2RlLGRlbGV0ZSBkLm91dGVyU2l6ZSxkZWxldGUgZC53aG9sZSxkLmRpc3RhbmNlPWQuZGlzdGFuY2UuaG9yaXpvbnRhbHx8ZC5kaXN0YW5jZS52ZXJ0aWNhbDt2YXIgbD1hLmV4dGVuZCghMCx7fSxkKTtpZihlLl9faW5zdGFuY2UuX3RyaWdnZXIoe2VkaXQ6ZnVuY3Rpb24oYSl7ZD1hfSxldmVudDpiLGhlbHBlcjpjLHBvc2l0aW9uOmwsdHlwZTpcInBvc2l0aW9uXCJ9KSxlLl9fb3B0aW9ucy5mdW5jdGlvblBvc2l0aW9uKXt2YXIgbT1lLl9fb3B0aW9ucy5mdW5jdGlvblBvc2l0aW9uLmNhbGwoZSxlLl9faW5zdGFuY2UsYyxsKTttJiYoZD1tKX1pLmRlc3Ryb3koKTt2YXIgbixvO1widG9wXCI9PWQuc2lkZXx8XCJib3R0b21cIj09ZC5zaWRlPyhuPXtwcm9wOlwibGVmdFwiLHZhbDpkLnRhcmdldC1kLmNvb3JkLmxlZnR9LG89ZC5zaXplLndpZHRoLXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbik6KG49e3Byb3A6XCJ0b3BcIix2YWw6ZC50YXJnZXQtZC5jb29yZC50b3B9LG89ZC5zaXplLmhlaWdodC10aGlzLl9fb3B0aW9ucy5taW5JbnRlcnNlY3Rpb24pLG4udmFsPHRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbj9uLnZhbD10aGlzLl9fb3B0aW9ucy5taW5JbnRlcnNlY3Rpb246bi52YWw+byYmKG4udmFsPW8pO3ZhciBwO3A9Yy5nZW8ub3JpZ2luLmZpeGVkTGluZWFnZT9jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0OntsZWZ0OmMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCtjLmdlby53aW5kb3cuc2Nyb2xsLmxlZnQsdG9wOmMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wK2MuZ2VvLndpbmRvdy5zY3JvbGwudG9wfSxkLmNvb3JkPXtsZWZ0OnAubGVmdCsoZC5jb29yZC5sZWZ0LWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCksdG9wOnAudG9wKyhkLmNvb3JkLnRvcC1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCl9LGUuX19zaWRlQ2hhbmdlKGUuX19pbnN0YW5jZS5fJHRvb2x0aXAsZC5zaWRlKSxjLmdlby5vcmlnaW4uZml4ZWRMaW5lYWdlP2UuX19pbnN0YW5jZS5fJHRvb2x0aXAuY3NzKFwicG9zaXRpb25cIixcImZpeGVkXCIpOmUuX19pbnN0YW5jZS5fJHRvb2x0aXAuY3NzKFwicG9zaXRpb25cIixcIlwiKSxlLl9faW5zdGFuY2UuXyR0b29sdGlwLmNzcyh7bGVmdDpkLmNvb3JkLmxlZnQsdG9wOmQuY29vcmQudG9wLGhlaWdodDpkLnNpemUuaGVpZ2h0LHdpZHRoOmQuc2l6ZS53aWR0aH0pLmZpbmQoXCIudG9vbHRpcHN0ZXItYXJyb3dcIikuY3NzKHtsZWZ0OlwiXCIsdG9wOlwiXCJ9KS5jc3Mobi5wcm9wLG4udmFsKSxlLl9faW5zdGFuY2UuXyR0b29sdGlwLmFwcGVuZFRvKGUuX19pbnN0YW5jZS5vcHRpb24oXCJwYXJlbnRcIikpLGUuX19pbnN0YW5jZS5fdHJpZ2dlcih7dHlwZTpcInJlcG9zaXRpb25lZFwiLGV2ZW50OmIscG9zaXRpb246ZH0pfSxfX3NpZGVDaGFuZ2U6ZnVuY3Rpb24oYSxiKXthLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItYm90dG9tXCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItbGVmdFwiKS5yZW1vdmVDbGFzcyhcInRvb2x0aXBzdGVyLXJpZ2h0XCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItdG9wXCIpLmFkZENsYXNzKFwidG9vbHRpcHN0ZXItXCIrYil9LF9fdGFyZ2V0RmluZDpmdW5jdGlvbihhKXt2YXIgYj17fSxjPXRoaXMuX19pbnN0YW5jZS5fJG9yaWdpblswXS5nZXRDbGllbnRSZWN0cygpO2lmKGMubGVuZ3RoPjEpe3ZhciBkPXRoaXMuX19pbnN0YW5jZS5fJG9yaWdpbi5jc3MoXCJvcGFjaXR5XCIpOzE9PWQmJih0aGlzLl9faW5zdGFuY2UuXyRvcmlnaW4uY3NzKFwib3BhY2l0eVwiLC45OSksYz10aGlzLl9faW5zdGFuY2UuXyRvcmlnaW5bMF0uZ2V0Q2xpZW50UmVjdHMoKSx0aGlzLl9faW5zdGFuY2UuXyRvcmlnaW4uY3NzKFwib3BhY2l0eVwiLDEpKX1pZihjLmxlbmd0aDwyKWIudG9wPU1hdGguZmxvb3IoYS5nZW8ub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0K2EuZ2VvLm9yaWdpbi5zaXplLndpZHRoLzIpLGIuYm90dG9tPWIudG9wLGIubGVmdD1NYXRoLmZsb29yKGEuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wK2EuZ2VvLm9yaWdpbi5zaXplLmhlaWdodC8yKSxiLnJpZ2h0PWIubGVmdDtlbHNle3ZhciBlPWNbMF07Yi50b3A9TWF0aC5mbG9vcihlLmxlZnQrKGUucmlnaHQtZS5sZWZ0KS8yKSxlPWMubGVuZ3RoPjI/Y1tNYXRoLmNlaWwoYy5sZW5ndGgvMiktMV06Y1swXSxiLnJpZ2h0PU1hdGguZmxvb3IoZS50b3ArKGUuYm90dG9tLWUudG9wKS8yKSxlPWNbYy5sZW5ndGgtMV0sYi5ib3R0b209TWF0aC5mbG9vcihlLmxlZnQrKGUucmlnaHQtZS5sZWZ0KS8yKSxlPWMubGVuZ3RoPjI/Y1tNYXRoLmNlaWwoKGMubGVuZ3RoKzEpLzIpLTFdOmNbYy5sZW5ndGgtMV0sYi5sZWZ0PU1hdGguZmxvb3IoZS50b3ArKGUuYm90dG9tLWUudG9wKS8yKX1yZXR1cm4gYn19fSksYX0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfSwgX3R5cGVvZihvYmopOyB9XG4vKlxyXG4gKiAgQm9vdHN0cmFwIFRvdWNoc3BpbiAtIHY0LjcuM1xyXG4gKiAgQSBtb2JpbGUgYW5kIHRvdWNoIGZyaWVuZGx5IGlucHV0IHNwaW5uZXIgY29tcG9uZW50IGZvciBCb290c3RyYXAgMyAmIDQuXHJcbiAqICBodHRwczovL3d3dy52aXJ0dW9zb2Z0LmV1L2NvZGUvYm9vdHN0cmFwLXRvdWNoc3Bpbi9cclxuICpcclxuICogIE1hZGUgYnkgSXN0dsOhbiBVamotTcOpc3rDoXJvc1xyXG4gKiAgVW5kZXIgTUlUIExpY2Vuc2VcclxuICovXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICgodHlwZW9mIG1vZHVsZSA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG1vZHVsZSkpID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJvb3QsIGpRdWVyeSkge1xuICAgICAgaWYgKGpRdWVyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpKHJvb3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmYWN0b3J5KGpRdWVyeSk7XG4gICAgICByZXR1cm4galF1ZXJ5O1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZmFjdG9yeShqUXVlcnkpO1xuICB9XG59KShmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIF9jdXJyZW50U3Bpbm5lcklkID0gMDtcbiAgJC5mbi5Ub3VjaFNwaW4gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBkZWZhdWx0cyA9IHtcbiAgICAgIG1pbjogMCxcbiAgICAgIC8vIElmIG51bGwsIHRoZXJlIGlzIG5vIG1pbmltdW0gZW5mb3JjZWRcbiAgICAgIG1heDogMTAwLFxuICAgICAgLy8gSWYgbnVsbCwgdGhlcmUgaXMgbm8gbWF4aW11bSBlbmZvcmNlZFxuICAgICAgaW5pdHZhbDogJycsXG4gICAgICByZXBsYWNlbWVudHZhbDogJycsXG4gICAgICBmaXJzdGNsaWNrdmFsdWVpZmVtcHR5OiBudWxsLFxuICAgICAgc3RlcDogMSxcbiAgICAgIGRlY2ltYWxzOiAwLFxuICAgICAgc3RlcGludGVydmFsOiAxMDAsXG4gICAgICBmb3JjZXN0ZXBkaXZpc2liaWxpdHk6ICdyb3VuZCcsXG4gICAgICAvLyBub25lIHwgZmxvb3IgfCByb3VuZCB8IGNlaWxcbiAgICAgIHN0ZXBpbnRlcnZhbGRlbGF5OiA1MDAsXG4gICAgICB2ZXJ0aWNhbGJ1dHRvbnM6IGZhbHNlLFxuICAgICAgdmVydGljYWx1cDogJyZwbHVzOycsXG4gICAgICB2ZXJ0aWNhbGRvd246ICcmbWludXM7JyxcbiAgICAgIHZlcnRpY2FsdXBjbGFzczogJycsXG4gICAgICB2ZXJ0aWNhbGRvd25jbGFzczogJycsXG4gICAgICBwcmVmaXg6ICcnLFxuICAgICAgcG9zdGZpeDogJycsXG4gICAgICBwcmVmaXhfZXh0cmFjbGFzczogJycsXG4gICAgICBwb3N0Zml4X2V4dHJhY2xhc3M6ICcnLFxuICAgICAgYm9vc3RlcjogdHJ1ZSxcbiAgICAgIGJvb3N0YXQ6IDEwLFxuICAgICAgbWF4Ym9vc3RlZHN0ZXA6IGZhbHNlLFxuICAgICAgbW91c2V3aGVlbDogdHJ1ZSxcbiAgICAgIGJ1dHRvbmRvd25fY2xhc3M6ICdidG4gYnRuLXByaW1hcnknLFxuICAgICAgYnV0dG9udXBfY2xhc3M6ICdidG4gYnRuLXByaW1hcnknLFxuICAgICAgYnV0dG9uZG93bl90eHQ6ICcmbWludXM7JyxcbiAgICAgIGJ1dHRvbnVwX3R4dDogJyZwbHVzOycsXG4gICAgICBjYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb246IGZ1bmN0aW9uIGNhbGxiYWNrX2JlZm9yZV9jYWxjdWxhdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tfYWZ0ZXJfY2FsY3VsYXRpb246IGZ1bmN0aW9uIGNhbGxiYWNrX2FmdGVyX2NhbGN1bGF0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBhdHRyaWJ1dGVNYXAgPSB7XG4gICAgICBtaW46ICdtaW4nLFxuICAgICAgbWF4OiAnbWF4JyxcbiAgICAgIGluaXR2YWw6ICdpbml0LXZhbCcsXG4gICAgICByZXBsYWNlbWVudHZhbDogJ3JlcGxhY2VtZW50LXZhbCcsXG4gICAgICBmaXJzdGNsaWNrdmFsdWVpZmVtcHR5OiAnZmlyc3QtY2xpY2stdmFsdWUtaWYtZW1wdHknLFxuICAgICAgc3RlcDogJ3N0ZXAnLFxuICAgICAgZGVjaW1hbHM6ICdkZWNpbWFscycsXG4gICAgICBzdGVwaW50ZXJ2YWw6ICdzdGVwLWludGVydmFsJyxcbiAgICAgIHZlcnRpY2FsYnV0dG9uczogJ3ZlcnRpY2FsLWJ1dHRvbnMnLFxuICAgICAgdmVydGljYWx1cGNsYXNzOiAndmVydGljYWwtdXAtY2xhc3MnLFxuICAgICAgdmVydGljYWxkb3duY2xhc3M6ICd2ZXJ0aWNhbC1kb3duLWNsYXNzJyxcbiAgICAgIGZvcmNlc3RlcGRpdmlzaWJpbGl0eTogJ2ZvcmNlLXN0ZXAtZGl2aXNpYmlsaXR5JyxcbiAgICAgIHN0ZXBpbnRlcnZhbGRlbGF5OiAnc3RlcC1pbnRlcnZhbC1kZWxheScsXG4gICAgICBwcmVmaXg6ICdwcmVmaXgnLFxuICAgICAgcG9zdGZpeDogJ3Bvc3RmaXgnLFxuICAgICAgcHJlZml4X2V4dHJhY2xhc3M6ICdwcmVmaXgtZXh0cmEtY2xhc3MnLFxuICAgICAgcG9zdGZpeF9leHRyYWNsYXNzOiAncG9zdGZpeC1leHRyYS1jbGFzcycsXG4gICAgICBib29zdGVyOiAnYm9vc3RlcicsXG4gICAgICBib29zdGF0OiAnYm9vc3RhdCcsXG4gICAgICBtYXhib29zdGVkc3RlcDogJ21heC1ib29zdGVkLXN0ZXAnLFxuICAgICAgbW91c2V3aGVlbDogJ21vdXNlLXdoZWVsJyxcbiAgICAgIGJ1dHRvbmRvd25fY2xhc3M6ICdidXR0b24tZG93bi1jbGFzcycsXG4gICAgICBidXR0b251cF9jbGFzczogJ2J1dHRvbi11cC1jbGFzcycsXG4gICAgICBidXR0b25kb3duX3R4dDogJ2J1dHRvbi1kb3duLXR4dCcsXG4gICAgICBidXR0b251cF90eHQ6ICdidXR0b24tdXAtdHh0J1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc2V0dGluZ3MsXG4gICAgICAgIG9yaWdpbmFsaW5wdXQgPSAkKHRoaXMpLFxuICAgICAgICBvcmlnaW5hbGlucHV0X2RhdGEgPSBvcmlnaW5hbGlucHV0LmRhdGEoKSxcbiAgICAgICAgX2RldGFjaGVkX3ByZWZpeCxcbiAgICAgICAgX2RldGFjaGVkX3Bvc3RmaXgsXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHZlcnRpY2FsYnV0dG9uc19odG1sLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZG93blNwaW5UaW1lcixcbiAgICAgICAgdXBTcGluVGltZXIsXG4gICAgICAgIGRvd25EZWxheVRpbWVvdXQsXG4gICAgICAgIHVwRGVsYXlUaW1lb3V0LFxuICAgICAgICBzcGluY291bnQgPSAwLFxuICAgICAgICBzcGlubmluZyA9IGZhbHNlO1xuICAgICAgaW5pdCgpO1xuICAgICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuZGF0YSgnYWxyZWFkeWluaXRpYWxpemVkJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgb3JpZ2luYWxpbnB1dC5kYXRhKCdhbHJlYWR5aW5pdGlhbGl6ZWQnLCB0cnVlKTtcbiAgICAgICAgX2N1cnJlbnRTcGlubmVySWQgKz0gMTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC5kYXRhKCdzcGlubmVyaWQnLCBfY3VycmVudFNwaW5uZXJJZCk7XG4gICAgICAgIGlmICghb3JpZ2luYWxpbnB1dC5pcygnaW5wdXQnKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdNdXN0IGJlIGFuIGlucHV0LicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBfaW5pdFNldHRpbmdzKCk7XG4gICAgICAgIF9zZXRJbml0dmFsKCk7XG4gICAgICAgIF9jaGVja1ZhbHVlKCk7XG4gICAgICAgIF9idWlsZEh0bWwoKTtcbiAgICAgICAgX2luaXRFbGVtZW50cygpO1xuICAgICAgICBfdXBkYXRlQnV0dG9uRGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgICBfaGlkZUVtcHR5UHJlZml4UG9zdGZpeCgpO1xuICAgICAgICBfc2V0dXBNdXRhdGlvbk9ic2VydmVycygpO1xuICAgICAgICBfYmluZEV2ZW50cygpO1xuICAgICAgICBfYmluZEV2ZW50c0ludGVyZmFjZSgpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3NldEluaXR2YWwoKSB7XG4gICAgICAgIGlmIChzZXR0aW5ncy5pbml0dmFsICE9PSAnJyAmJiBvcmlnaW5hbGlucHV0LnZhbCgpID09PSAnJykge1xuICAgICAgICAgIG9yaWdpbmFsaW5wdXQudmFsKHNldHRpbmdzLmluaXR2YWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjaGFuZ2VTZXR0aW5ncyhuZXdzZXR0aW5ncykge1xuICAgICAgICBfdXBkYXRlU2V0dGluZ3MobmV3c2V0dGluZ3MpO1xuICAgICAgICBfY2hlY2tWYWx1ZSgpO1xuICAgICAgICB2YXIgdmFsdWUgPSBlbGVtZW50cy5pbnB1dC52YWwoKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSAnJykge1xuICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChzZXR0aW5ncy5jYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb24oZWxlbWVudHMuaW5wdXQudmFsKCkpKTtcbiAgICAgICAgICBlbGVtZW50cy5pbnB1dC52YWwoc2V0dGluZ3MuY2FsbGJhY2tfYWZ0ZXJfY2FsY3VsYXRpb24ocGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2luaXRTZXR0aW5ncygpIHtcbiAgICAgICAgc2V0dGluZ3MgPSAkLmV4dGVuZCh7fSwgZGVmYXVsdHMsIG9yaWdpbmFsaW5wdXRfZGF0YSwgX3BhcnNlQXR0cmlidXRlcygpLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKHBhcnNlRmxvYXQoc2V0dGluZ3Muc3RlcCkgIT09IDEpIHtcbiAgICAgICAgICB2YXIgcmVtYWluZGVyO1xuXG4gICAgICAgICAgLy8gTW9kaWZ5IHNldHRpbmdzLm1heCB0byBiZSBkaXZpc2libGUgYnkgc3RlcFxuICAgICAgICAgIHJlbWFpbmRlciA9IHNldHRpbmdzLm1heCAlIHNldHRpbmdzLnN0ZXA7XG4gICAgICAgICAgaWYgKHJlbWFpbmRlciAhPT0gMCkge1xuICAgICAgICAgICAgc2V0dGluZ3MubWF4ID0gcGFyc2VGbG9hdChzZXR0aW5ncy5tYXgpIC0gcmVtYWluZGVyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERvIHRoZSBzYW1lIHdpdGggbWluLCBzaG91bGQgd29yayB3aXRoIG5lZ2F0aXZlIG51bWJlcnMgdG9vXG4gICAgICAgICAgcmVtYWluZGVyID0gc2V0dGluZ3MubWluICUgc2V0dGluZ3Muc3RlcDtcbiAgICAgICAgICBpZiAocmVtYWluZGVyICE9PSAwKSB7XG4gICAgICAgICAgICBzZXR0aW5ncy5taW4gPSBwYXJzZUZsb2F0KHNldHRpbmdzLm1pbikgKyAocGFyc2VGbG9hdChzZXR0aW5ncy5zdGVwKSAtIHJlbWFpbmRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfcGFyc2VBdHRyaWJ1dGVzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHt9O1xuXG4gICAgICAgIC8vIFNldHRpbmcgdXAgYmFzZWQgb24gZGF0YSBhdHRyaWJ1dGVzXG4gICAgICAgICQuZWFjaChhdHRyaWJ1dGVNYXAsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgdmFyIGF0dHJOYW1lID0gJ2J0cy0nICsgdmFsdWUgKyAnJztcbiAgICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5pcygnW2RhdGEtJyArIGF0dHJOYW1lICsgJ10nKSkge1xuICAgICAgICAgICAgZGF0YVtrZXldID0gb3JpZ2luYWxpbnB1dC5kYXRhKGF0dHJOYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNldHRpbmcgdXAgYmFzZWQgb24gaW5wdXQgYXR0cmlidXRlcyBpZiBzcGVjaWZpZWQgKGlucHV0IGF0dHJpYnV0ZXMgaGF2ZSBwcmVjZWRlbmNlKVxuICAgICAgICAkLmVhY2goWydtaW4nLCAnbWF4JywgJ3N0ZXAnXSwgZnVuY3Rpb24gKGksIGtleSkge1xuICAgICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCdbJyArIGtleSArICddJykpIHtcbiAgICAgICAgICAgIGlmIChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0JvdGggdGhlIFwiZGF0YS1idHMtJyArIGtleSArICdcIiBkYXRhIGF0dHJpYnV0ZSBhbmQgdGhlIFwiJyArIGtleSArICdcIiBpbmRpdmlkdWFsIGF0dHJpYnV0ZSB3ZXJlIHNwZWNpZmllZCwgdGhlIGluZGl2aWR1YWwgYXR0cmlidXRlIHdpbGwgdGFrZSBwcmVjZWRlbmNlIG9uOiAnLCBvcmlnaW5hbGlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGFba2V5XSA9IG9yaWdpbmFsaW5wdXQuYXR0cihrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2Rlc3Ryb3koKSB7XG4gICAgICAgIHZhciAkcGFyZW50ID0gb3JpZ2luYWxpbnB1dC5wYXJlbnQoKTtcbiAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC5vZmYoJy50b3VjaHNwaW4nKTtcbiAgICAgICAgaWYgKCRwYXJlbnQuaGFzQ2xhc3MoJ2Jvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWQnKSkge1xuICAgICAgICAgIG9yaWdpbmFsaW5wdXQuc2libGluZ3MoKS5yZW1vdmUoKTtcbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnVud3JhcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICQoJy5ib290c3RyYXAtdG91Y2hzcGluLWluamVjdGVkJywgJHBhcmVudCkucmVtb3ZlKCk7XG4gICAgICAgICAgJHBhcmVudC5yZW1vdmVDbGFzcygnYm9vdHN0cmFwLXRvdWNoc3BpbicpO1xuICAgICAgICB9XG4gICAgICAgIG9yaWdpbmFsaW5wdXQuZGF0YSgnYWxyZWFkeWluaXRpYWxpemVkJywgZmFsc2UpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3VwZGF0ZVNldHRpbmdzKG5ld3NldHRpbmdzKSB7XG4gICAgICAgIHNldHRpbmdzID0gJC5leHRlbmQoe30sIHNldHRpbmdzLCBuZXdzZXR0aW5ncyk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHBvc3RmaXggYW5kIHByZWZpeCB0ZXh0cyBpZiB0aG9zZSBzZXR0aW5ncyB3ZXJlIGNoYW5nZWQuXG4gICAgICAgIGlmIChuZXdzZXR0aW5ncy5wb3N0Zml4KSB7XG4gICAgICAgICAgdmFyICRwb3N0Zml4ID0gb3JpZ2luYWxpbnB1dC5wYXJlbnQoKS5maW5kKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wb3N0Zml4Jyk7XG4gICAgICAgICAgaWYgKCRwb3N0Zml4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgX2RldGFjaGVkX3Bvc3RmaXguaW5zZXJ0QWZ0ZXIob3JpZ2luYWxpbnB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9yaWdpbmFsaW5wdXQucGFyZW50KCkuZmluZCgnLmJvb3RzdHJhcC10b3VjaHNwaW4tcG9zdGZpeCAuaW5wdXQtZ3JvdXAtdGV4dCcpLnRleHQobmV3c2V0dGluZ3MucG9zdGZpeCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld3NldHRpbmdzLnByZWZpeCkge1xuICAgICAgICAgIHZhciAkcHJlZml4ID0gb3JpZ2luYWxpbnB1dC5wYXJlbnQoKS5maW5kKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXgnKTtcbiAgICAgICAgICBpZiAoJHByZWZpeC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIF9kZXRhY2hlZF9wcmVmaXguaW5zZXJ0QmVmb3JlKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnBhcmVudCgpLmZpbmQoJy5ib290c3RyYXAtdG91Y2hzcGluLXByZWZpeCAuaW5wdXQtZ3JvdXAtdGV4dCcpLnRleHQobmV3c2V0dGluZ3MucHJlZml4KTtcbiAgICAgICAgfVxuICAgICAgICBfaGlkZUVtcHR5UHJlZml4UG9zdGZpeCgpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2J1aWxkSHRtbCgpIHtcbiAgICAgICAgdmFyIGluaXR2YWwgPSBvcmlnaW5hbGlucHV0LnZhbCgpLFxuICAgICAgICAgIHBhcmVudGVsZW1lbnQgPSBvcmlnaW5hbGlucHV0LnBhcmVudCgpO1xuICAgICAgICBpZiAoaW5pdHZhbCAhPT0gJycpIHtcbiAgICAgICAgICAvLyBpbml0dmFsIG1heSBub3QgYmUgcGFyc2FibGUgYXMgYSBudW1iZXIgKGNhbGxiYWNrX2FmdGVyX2NhbGN1bGF0aW9uKCkgbWF5IGRlY29yYXRlIGl0IHNvIGl0IGNhbnQgYmUgcGFyc2VkKS4gIFVzZSB0aGUgY2FsbGJhY2tzIGlmIHByb3ZpZGVkLlxuICAgICAgICAgIGluaXR2YWwgPSBzZXR0aW5ncy5jYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb24oaW5pdHZhbCk7XG4gICAgICAgICAgaW5pdHZhbCA9IHNldHRpbmdzLmNhbGxiYWNrX2FmdGVyX2NhbGN1bGF0aW9uKHBhcnNlRmxvYXQoaW5pdHZhbCkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpO1xuICAgICAgICB9XG4gICAgICAgIG9yaWdpbmFsaW5wdXQuZGF0YSgnaW5pdHZhbHVlJywgaW5pdHZhbCkudmFsKGluaXR2YWwpO1xuICAgICAgICBvcmlnaW5hbGlucHV0LmFkZENsYXNzKCdmb3JtLWNvbnRyb2wnKTtcbiAgICAgICAgdmVydGljYWxidXR0b25zX2h0bWwgPSBcIlxcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gYm9vdHN0cmFwLXRvdWNoc3Bpbi12ZXJ0aWNhbC1idXR0b24td3JhcHBlclxcXCI+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0bi12ZXJ0aWNhbFxcXCI+XFxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVxcXCItMVxcXCIgY2xhc3M9XFxcIlwiLmNvbmNhdChzZXR0aW5ncy5idXR0b25kb3duX2NsYXNzLCBcIiBib290c3RyYXAtdG91Y2hzcGluLXVwIFwiKS5jb25jYXQoc2V0dGluZ3MudmVydGljYWx1cGNsYXNzLCBcIlxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnZlcnRpY2FsdXAsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVxcXCItMVxcXCIgY2xhc3M9XFxcIlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9udXBfY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tZG93biBcIikuY29uY2F0KHNldHRpbmdzLnZlcnRpY2FsZG93bmNsYXNzLCBcIlxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnZlcnRpY2FsZG93biwgXCI8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgXCIpO1xuICAgICAgICBpZiAocGFyZW50ZWxlbWVudC5oYXNDbGFzcygnaW5wdXQtZ3JvdXAnKSkge1xuICAgICAgICAgIF9hZHZhbmNlSW5wdXRHcm91cChwYXJlbnRlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfYnVpbGRJbnB1dEdyb3VwKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9hZHZhbmNlSW5wdXRHcm91cChwYXJlbnRlbGVtZW50KSB7XG4gICAgICAgIHBhcmVudGVsZW1lbnQuYWRkQ2xhc3MoJ2Jvb3RzdHJhcC10b3VjaHNwaW4nKTtcbiAgICAgICAgdmFyIHByZXYgPSBvcmlnaW5hbGlucHV0LnByZXYoKSxcbiAgICAgICAgICBuZXh0ID0gb3JpZ2luYWxpbnB1dC5uZXh0KCk7XG4gICAgICAgIHZhciBkb3duaHRtbCxcbiAgICAgICAgICB1cGh0bWwsXG4gICAgICAgICAgcHJlZml4aHRtbCA9IFwiXFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGlucHV0LWdyb3VwLXByZXBlbmQgYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXggaW5wdXQtZ3JvdXAtcHJlcGVuZCBib290c3RyYXAtdG91Y2hzcGluLWluamVjdGVkXFxcIj5cXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC10ZXh0XFxcIj5cIi5jb25jYXQoc2V0dGluZ3MucHJlZml4LCBcIjwvc3Bhbj5cXG4gICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgIFwiKSxcbiAgICAgICAgICBwb3N0Zml4aHRtbCA9IFwiXFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGlucHV0LWdyb3VwLWFwcGVuZCBib290c3RyYXAtdG91Y2hzcGluLXBvc3RmaXggaW5wdXQtZ3JvdXAtYXBwZW5kIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLXRleHRcXFwiPlwiLmNvbmNhdChzZXR0aW5ncy5wb3N0Zml4LCBcIjwvc3Bhbj5cXG4gICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgIFwiKTtcbiAgICAgICAgaWYgKHNldHRpbmdzLnZlcnRpY2FsYnV0dG9ucykge1xuICAgICAgICAgICQodmVydGljYWxidXR0b25zX2h0bWwpLmluc2VydEFmdGVyKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcmV2Lmhhc0NsYXNzKCdpbnB1dC1ncm91cC1idG4nKSB8fCBwcmV2Lmhhc0NsYXNzKCdpbnB1dC1ncm91cC1wcmVwZW5kJykpIHtcbiAgICAgICAgICAgIGRvd25odG1sID0gXCJcXG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XFxcIi0xXFxcIiBjbGFzcz1cXFwiXCIuY29uY2F0KHNldHRpbmdzLmJ1dHRvbmRvd25fY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tZG93biBib290c3RyYXAtdG91Y2hzcGluLWluamVjdGVkXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiPlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9uZG93bl90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgXCIpO1xuICAgICAgICAgICAgcHJldi5hcHBlbmQoZG93bmh0bWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3duaHRtbCA9IFwiXFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYnRuIGlucHV0LWdyb3VwLXByZXBlbmQgYm9vdHN0cmFwLXRvdWNoc3Bpbi1pbmplY3RlZFxcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XFxcIi0xXFxcIiBjbGFzcz1cXFwiXCIuY29uY2F0KHNldHRpbmdzLmJ1dHRvbmRvd25fY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tZG93blxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIj5cIikuY29uY2F0KHNldHRpbmdzLmJ1dHRvbmRvd25fdHh0LCBcIjwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgIFwiKTtcbiAgICAgICAgICAgICQoZG93bmh0bWwpLmluc2VydEJlZm9yZShvcmlnaW5hbGlucHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5leHQuaGFzQ2xhc3MoJ2lucHV0LWdyb3VwLWJ0bicpIHx8IG5leHQuaGFzQ2xhc3MoJ2lucHV0LWdyb3VwLWFwcGVuZCcpKSB7XG4gICAgICAgICAgICB1cGh0bWwgPSBcIlxcbiAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XFxcIi0xXFxcIiBjbGFzcz1cXFwiXCIuY29uY2F0KHNldHRpbmdzLmJ1dHRvbnVwX2NsYXNzLCBcIiBib290c3RyYXAtdG91Y2hzcGluLXVwIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5idXR0b251cF90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgIFwiKTtcbiAgICAgICAgICAgIG5leHQucHJlcGVuZCh1cGh0bWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cGh0bWwgPSBcIlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC1idG4gaW5wdXQtZ3JvdXAtYXBwZW5kIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cXFwiLTFcXFwiIGNsYXNzPVxcXCJcIi5jb25jYXQoc2V0dGluZ3MuYnV0dG9udXBfY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tdXBcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5idXR0b251cF90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICBcIik7XG4gICAgICAgICAgICAkKHVwaHRtbCkuaW5zZXJ0QWZ0ZXIob3JpZ2luYWxpbnB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICQocHJlZml4aHRtbCkuaW5zZXJ0QmVmb3JlKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICAkKHBvc3RmaXhodG1sKS5pbnNlcnRBZnRlcihvcmlnaW5hbGlucHV0KTtcbiAgICAgICAgY29udGFpbmVyID0gcGFyZW50ZWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9idWlsZElucHV0R3JvdXAoKSB7XG4gICAgICAgIHZhciBodG1sO1xuICAgICAgICB2YXIgaW5wdXRHcm91cFNpemUgPSAnJztcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuaGFzQ2xhc3MoJ2lucHV0LXNtJykgfHwgb3JpZ2luYWxpbnB1dC5oYXNDbGFzcygnZm9ybS1jb250cm9sLXNtJykpIHtcbiAgICAgICAgICBpbnB1dEdyb3VwU2l6ZSA9ICdpbnB1dC1ncm91cC1zbSc7XG4gICAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxpbnB1dC5oYXNDbGFzcygnaW5wdXQtbGcnKSB8fCBvcmlnaW5hbGlucHV0Lmhhc0NsYXNzKCdmb3JtLWNvbnRyb2wtbGcnKSkge1xuICAgICAgICAgIGlucHV0R3JvdXBTaXplID0gJ2lucHV0LWdyb3VwLWxnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0dGluZ3MudmVydGljYWxidXR0b25zKSB7XG4gICAgICAgICAgaHRtbCA9IFwiXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAgXCIuY29uY2F0KGlucHV0R3JvdXBTaXplLCBcIiBib290c3RyYXAtdG91Y2hzcGluIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGlucHV0LWdyb3VwLXByZXBlbmQgYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXhcXFwiPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtdGV4dFxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5wcmVmaXgsIFwiPC9zcGFuPlxcbiAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGJvb3RzdHJhcC10b3VjaHNwaW4tcG9zdGZpeCBpbnB1dC1ncm91cC1hcHBlbmRcXFwiPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtdGV4dFxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5wb3N0Zml4LCBcIjwvc3Bhbj5cXG4gICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgIFwiKS5jb25jYXQodmVydGljYWxidXR0b25zX2h0bWwsIFwiXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgIFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBodG1sID0gXCJcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cCBib290c3RyYXAtdG91Y2hzcGluIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1wcmVwZW5kXFxcIj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cXFwiLTFcXFwiIGNsYXNzPVxcXCJcIi5jb25jYXQoc2V0dGluZ3MuYnV0dG9uZG93bl9jbGFzcywgXCIgYm9vdHN0cmFwLXRvdWNoc3Bpbi1kb3duXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiPlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9uZG93bl90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXggaW5wdXQtZ3JvdXAtcHJlcGVuZFxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC10ZXh0XFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnByZWZpeCwgXCI8L3NwYW4+XFxuICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gYm9vdHN0cmFwLXRvdWNoc3Bpbi1wb3N0Zml4IGlucHV0LWdyb3VwLWFwcGVuZFxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC10ZXh0XFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnBvc3RmaXgsIFwiPC9zcGFuPlxcbiAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1hcHBlbmRcXFwiPlxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVxcXCItMVxcXCIgY2xhc3M9XFxcIlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9udXBfY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tdXBcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5idXR0b251cF90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgPC9kaXY+XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lciA9ICQoaHRtbCkuaW5zZXJ0QmVmb3JlKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXgnLCBjb250YWluZXIpLmFmdGVyKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5oYXNDbGFzcygnaW5wdXQtc20nKSB8fCBvcmlnaW5hbGlucHV0Lmhhc0NsYXNzKCdmb3JtLWNvbnRyb2wtc20nKSkge1xuICAgICAgICAgIGNvbnRhaW5lci5hZGRDbGFzcygnaW5wdXQtZ3JvdXAtc20nKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcmlnaW5hbGlucHV0Lmhhc0NsYXNzKCdpbnB1dC1sZycpIHx8IG9yaWdpbmFsaW5wdXQuaGFzQ2xhc3MoJ2Zvcm0tY29udHJvbC1sZycpKSB7XG4gICAgICAgICAgY29udGFpbmVyLmFkZENsYXNzKCdpbnB1dC1ncm91cC1sZycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfaW5pdEVsZW1lbnRzKCkge1xuICAgICAgICBlbGVtZW50cyA9IHtcbiAgICAgICAgICBkb3duOiAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1kb3duJywgY29udGFpbmVyKSxcbiAgICAgICAgICB1cDogJCgnLmJvb3RzdHJhcC10b3VjaHNwaW4tdXAnLCBjb250YWluZXIpLFxuICAgICAgICAgIGlucHV0OiAkKCdpbnB1dCcsIGNvbnRhaW5lciksXG4gICAgICAgICAgcHJlZml4OiAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXgnLCBjb250YWluZXIpLmFkZENsYXNzKHNldHRpbmdzLnByZWZpeF9leHRyYWNsYXNzKSxcbiAgICAgICAgICBwb3N0Zml4OiAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wb3N0Zml4JywgY29udGFpbmVyKS5hZGRDbGFzcyhzZXR0aW5ncy5wb3N0Zml4X2V4dHJhY2xhc3MpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfaGlkZUVtcHR5UHJlZml4UG9zdGZpeCgpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzLnByZWZpeCA9PT0gJycpIHtcbiAgICAgICAgICBfZGV0YWNoZWRfcHJlZml4ID0gZWxlbWVudHMucHJlZml4LmRldGFjaCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXR0aW5ncy5wb3N0Zml4ID09PSAnJykge1xuICAgICAgICAgIF9kZXRhY2hlZF9wb3N0Zml4ID0gZWxlbWVudHMucG9zdGZpeC5kZXRhY2goKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2JpbmRFdmVudHMoKSB7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ2tleWRvd24udG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgdmFyIGNvZGUgPSBldi5rZXlDb2RlIHx8IGV2LndoaWNoO1xuICAgICAgICAgIGlmIChjb2RlID09PSAzOCkge1xuICAgICAgICAgICAgaWYgKHNwaW5uaW5nICE9PSAndXAnKSB7XG4gICAgICAgICAgICAgIHVwT25jZSgpO1xuICAgICAgICAgICAgICBzdGFydFVwU3BpbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDQwKSB7XG4gICAgICAgICAgICBpZiAoc3Bpbm5pbmcgIT09ICdkb3duJykge1xuICAgICAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICAgICAgICBzdGFydERvd25TcGluKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gOSB8fCBjb2RlID09PSAxMykge1xuICAgICAgICAgICAgX2NoZWNrVmFsdWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCdrZXl1cC50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICB2YXIgY29kZSA9IGV2LmtleUNvZGUgfHwgZXYud2hpY2g7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDM4KSB7XG4gICAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gNDApIHtcbiAgICAgICAgICAgIHN0b3BTcGluKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBjaGFuZ2UgaXMgZmlyZWQgYmVmb3JlIGJsdXIsIHNvIHdlIG5lZWQgdG8gd29yayBhcm91bmQgdGhhdFxuICAgICAgICAkKGRvY3VtZW50KS5vbignbW91c2Vkb3duIHRvdWNoc3RhcnQnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoJChldmVudC50YXJnZXQpLmlzKG9yaWdpbmFsaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIF9jaGVja1ZhbHVlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCdibHVyLnRvdWNoc3BpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfY2hlY2tWYWx1ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMuZG93bi5vbigna2V5ZG93bicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIHZhciBjb2RlID0gZXYua2V5Q29kZSB8fCBldi53aGljaDtcbiAgICAgICAgICBpZiAoY29kZSA9PT0gMzIgfHwgY29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgIGlmIChzcGlubmluZyAhPT0gJ2Rvd24nKSB7XG4gICAgICAgICAgICAgIGRvd25PbmNlKCk7XG4gICAgICAgICAgICAgIHN0YXJ0RG93blNwaW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMuZG93bi5vbigna2V5dXAudG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgdmFyIGNvZGUgPSBldi5rZXlDb2RlIHx8IGV2LndoaWNoO1xuICAgICAgICAgIGlmIChjb2RlID09PSAzMiB8fCBjb2RlID09PSAxMykge1xuICAgICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50cy51cC5vbigna2V5ZG93bi50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICB2YXIgY29kZSA9IGV2LmtleUNvZGUgfHwgZXYud2hpY2g7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDMyIHx8IGNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICBpZiAoc3Bpbm5pbmcgIT09ICd1cCcpIHtcbiAgICAgICAgICAgICAgdXBPbmNlKCk7XG4gICAgICAgICAgICAgIHN0YXJ0VXBTcGluKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLnVwLm9uKCdrZXl1cC50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICB2YXIgY29kZSA9IGV2LmtleUNvZGUgfHwgZXYud2hpY2g7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDMyIHx8IGNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLmRvd24ub24oJ21vdXNlZG93bi50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICBlbGVtZW50cy5kb3duLm9mZigndG91Y2hzdGFydC50b3VjaHNwaW4nKTsgLy8gYW5kcm9pZCA0IHdvcmthcm91bmRcblxuICAgICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGRvd25PbmNlKCk7XG4gICAgICAgICAgc3RhcnREb3duU3BpbigpO1xuICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50cy5kb3duLm9uKCd0b3VjaHN0YXJ0LnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGVsZW1lbnRzLmRvd24ub2ZmKCdtb3VzZWRvd24udG91Y2hzcGluJyk7IC8vIGFuZHJvaWQgNCB3b3JrYXJvdW5kXG5cbiAgICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5pcygnOmRpc2FibGVkLFtyZWFkb25seV0nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICAgIHN0YXJ0RG93blNwaW4oKTtcbiAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMudXAub24oJ21vdXNlZG93bi50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICBlbGVtZW50cy51cC5vZmYoJ3RvdWNoc3RhcnQudG91Y2hzcGluJyk7IC8vIGFuZHJvaWQgNCB3b3JrYXJvdW5kXG5cbiAgICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5pcygnOmRpc2FibGVkLFtyZWFkb25seV0nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB1cE9uY2UoKTtcbiAgICAgICAgICBzdGFydFVwU3BpbigpO1xuICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50cy51cC5vbigndG91Y2hzdGFydC50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICBlbGVtZW50cy51cC5vZmYoJ21vdXNlZG93bi50b3VjaHNwaW4nKTsgLy8gYW5kcm9pZCA0IHdvcmthcm91bmRcblxuICAgICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHVwT25jZSgpO1xuICAgICAgICAgIHN0YXJ0VXBTcGluKCk7XG4gICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLnVwLm9uKCdtb3VzZXVwLnRvdWNoc3BpbiBtb3VzZW91dC50b3VjaHNwaW4gdG91Y2hsZWF2ZS50b3VjaHNwaW4gdG91Y2hlbmQudG91Y2hzcGluIHRvdWNoY2FuY2VsLnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGlmICghc3Bpbm5pbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLmRvd24ub24oJ21vdXNldXAudG91Y2hzcGluIG1vdXNlb3V0LnRvdWNoc3BpbiB0b3VjaGxlYXZlLnRvdWNoc3BpbiB0b3VjaGVuZC50b3VjaHNwaW4gdG91Y2hjYW5jZWwudG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgaWYgKCFzcGlubmluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMuZG93bi5vbignbW91c2Vtb3ZlLnRvdWNoc3BpbiB0b3VjaG1vdmUudG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgaWYgKCFzcGlubmluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMudXAub24oJ21vdXNlbW92ZS50b3VjaHNwaW4gdG91Y2htb3ZlLnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGlmICghc3Bpbm5pbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ21vdXNld2hlZWwudG91Y2hzcGluIERPTU1vdXNlU2Nyb2xsLnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGlmICghc2V0dGluZ3MubW91c2V3aGVlbCB8fCAhb3JpZ2luYWxpbnB1dC5pcygnOmZvY3VzJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGRlbHRhID0gZXYub3JpZ2luYWxFdmVudC53aGVlbERlbHRhIHx8IC1ldi5vcmlnaW5hbEV2ZW50LmRlbHRhWSB8fCAtZXYub3JpZ2luYWxFdmVudC5kZXRhaWw7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBpZiAoZGVsdGEgPCAwKSB7XG4gICAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cE9uY2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2JpbmRFdmVudHNJbnRlcmZhY2UoKSB7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ3RvdWNoc3Bpbi5kZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF9kZXN0cm95KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4udXBvbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0b3BTcGluKCk7XG4gICAgICAgICAgdXBPbmNlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4uZG93bm9uY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC5vbigndG91Y2hzcGluLnN0YXJ0dXBzcGluJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0YXJ0VXBTcGluKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4uc3RhcnRkb3duc3BpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzdGFydERvd25TcGluKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4uc3RvcHNwaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ3RvdWNoc3Bpbi51cGRhdGVzZXR0aW5ncycsIGZ1bmN0aW9uIChlLCBuZXdzZXR0aW5ncykge1xuICAgICAgICAgIGNoYW5nZVNldHRpbmdzKG5ld3NldHRpbmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfc2V0dXBNdXRhdGlvbk9ic2VydmVycygpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE11dGF0aW9uT2JzZXJ2ZXIgaXMgYXZhaWxhYmxlXG4gICAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuICAgICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSAnYXR0cmlidXRlcycgJiYgKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT09ICdkaXNhYmxlZCcgfHwgbXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICAgICAgICBfdXBkYXRlQnV0dG9uRGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKG9yaWdpbmFsaW5wdXRbMF0sIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2ZvcmNlc3RlcGRpdmlzaWJpbGl0eSh2YWx1ZSkge1xuICAgICAgICBzd2l0Y2ggKHNldHRpbmdzLmZvcmNlc3RlcGRpdmlzaWJpbGl0eSkge1xuICAgICAgICAgIGNhc2UgJ3JvdW5kJzpcbiAgICAgICAgICAgIHJldHVybiAoTWF0aC5yb3VuZCh2YWx1ZSAvIHNldHRpbmdzLnN0ZXApICogc2V0dGluZ3Muc3RlcCkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscyk7XG4gICAgICAgICAgY2FzZSAnZmxvb3InOlxuICAgICAgICAgICAgcmV0dXJuIChNYXRoLmZsb29yKHZhbHVlIC8gc2V0dGluZ3Muc3RlcCkgKiBzZXR0aW5ncy5zdGVwKS50b0ZpeGVkKHNldHRpbmdzLmRlY2ltYWxzKTtcbiAgICAgICAgICBjYXNlICdjZWlsJzpcbiAgICAgICAgICAgIHJldHVybiAoTWF0aC5jZWlsKHZhbHVlIC8gc2V0dGluZ3Muc3RlcCkgKiBzZXR0aW5ncy5zdGVwKS50b0ZpeGVkKHNldHRpbmdzLmRlY2ltYWxzKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoc2V0dGluZ3MuZGVjaW1hbHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfY2hlY2tWYWx1ZSgpIHtcbiAgICAgICAgdmFyIHZhbCwgcGFyc2VkdmFsLCByZXR1cm52YWw7XG4gICAgICAgIHZhbCA9IHNldHRpbmdzLmNhbGxiYWNrX2JlZm9yZV9jYWxjdWxhdGlvbihvcmlnaW5hbGlucHV0LnZhbCgpKTtcbiAgICAgICAgaWYgKHZhbCA9PT0gJycpIHtcbiAgICAgICAgICBpZiAoc2V0dGluZ3MucmVwbGFjZW1lbnR2YWwgIT09ICcnKSB7XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnZhbChzZXR0aW5ncy5yZXBsYWNlbWVudHZhbCk7XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldHRpbmdzLmRlY2ltYWxzID4gMCAmJiB2YWwgPT09ICcuJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZWR2YWwgPSBwYXJzZUZsb2F0KHZhbCk7XG4gICAgICAgIGlmIChpc05hTihwYXJzZWR2YWwpKSB7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLnJlcGxhY2VtZW50dmFsICE9PSAnJykge1xuICAgICAgICAgICAgcGFyc2VkdmFsID0gc2V0dGluZ3MucmVwbGFjZW1lbnR2YWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlZHZhbCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybnZhbCA9IHBhcnNlZHZhbDtcbiAgICAgICAgaWYgKHBhcnNlZHZhbC50b1N0cmluZygpICE9PSB2YWwpIHtcbiAgICAgICAgICByZXR1cm52YWwgPSBwYXJzZWR2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJudmFsID0gX2ZvcmNlc3RlcGRpdmlzaWJpbGl0eShwYXJzZWR2YWwpO1xuICAgICAgICBpZiAoc2V0dGluZ3MubWluICE9PSBudWxsICYmIHBhcnNlZHZhbCA8IHNldHRpbmdzLm1pbikge1xuICAgICAgICAgIHJldHVybnZhbCA9IHNldHRpbmdzLm1pbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0dGluZ3MubWF4ICE9PSBudWxsICYmIHBhcnNlZHZhbCA+IHNldHRpbmdzLm1heCkge1xuICAgICAgICAgIHJldHVybnZhbCA9IHNldHRpbmdzLm1heDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VGbG9hdChwYXJzZWR2YWwpLnRvU3RyaW5nKCkgIT09IHBhcnNlRmxvYXQocmV0dXJudmFsKS50b1N0cmluZygpKSB7XG4gICAgICAgICAgb3JpZ2luYWxpbnB1dC52YWwocmV0dXJudmFsKTtcbiAgICAgICAgfVxuICAgICAgICBvcmlnaW5hbGlucHV0LnZhbChzZXR0aW5ncy5jYWxsYmFja19hZnRlcl9jYWxjdWxhdGlvbihwYXJzZUZsb2F0KHJldHVybnZhbCkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9nZXRCb29zdGVkU3RlcCgpIHtcbiAgICAgICAgaWYgKCFzZXR0aW5ncy5ib29zdGVyKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRpbmdzLnN0ZXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGJvb3N0ZWQgPSBNYXRoLnBvdygyLCBNYXRoLmZsb29yKHNwaW5jb3VudCAvIHNldHRpbmdzLmJvb3N0YXQpKSAqIHNldHRpbmdzLnN0ZXA7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLm1heGJvb3N0ZWRzdGVwKSB7XG4gICAgICAgICAgICBpZiAoYm9vc3RlZCA+IHNldHRpbmdzLm1heGJvb3N0ZWRzdGVwKSB7XG4gICAgICAgICAgICAgIGJvb3N0ZWQgPSBzZXR0aW5ncy5tYXhib29zdGVkc3RlcDtcbiAgICAgICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gYm9vc3RlZCkgKiBib29zdGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoc2V0dGluZ3Muc3RlcCwgYm9vc3RlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHZhbHVlSWZJc05hTigpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXR0aW5ncy5maXJzdGNsaWNrdmFsdWVpZmVtcHR5ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJldHVybiBzZXR0aW5ncy5maXJzdGNsaWNrdmFsdWVpZmVtcHR5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoc2V0dGluZ3MubWluICsgc2V0dGluZ3MubWF4KSAvIDI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF91cGRhdGVCdXR0b25EaXNhYmxlZFN0YXRlKCkge1xuICAgICAgICB2YXIgaXNEaXNhYmxlZCA9IG9yaWdpbmFsaW5wdXQuaXMoJzpkaXNhYmxlZCxbcmVhZG9ubHldJyk7XG4gICAgICAgIGVsZW1lbnRzLnVwLnByb3AoJ2Rpc2FibGVkJywgaXNEaXNhYmxlZCk7XG4gICAgICAgIGVsZW1lbnRzLmRvd24ucHJvcCgnZGlzYWJsZWQnLCBpc0Rpc2FibGVkKTtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1cE9uY2UoKSB7XG4gICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIF9jaGVja1ZhbHVlKCk7XG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChzZXR0aW5ncy5jYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb24oZWxlbWVudHMuaW5wdXQudmFsKCkpKTtcbiAgICAgICAgdmFyIGluaXR2YWx1ZSA9IHZhbHVlO1xuICAgICAgICB2YXIgYm9vc3RlZHN0ZXA7XG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlSWZJc05hTigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvb3N0ZWRzdGVwID0gX2dldEJvb3N0ZWRTdGVwKCk7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSArIGJvb3N0ZWRzdGVwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXR0aW5ncy5tYXggIT09IG51bGwgJiYgdmFsdWUgPj0gc2V0dGluZ3MubWF4KSB7XG4gICAgICAgICAgdmFsdWUgPSBzZXR0aW5ncy5tYXg7XG4gICAgICAgICAgb3JpZ2luYWxpbnB1dC50cmlnZ2VyKCd0b3VjaHNwaW4ub24ubWF4Jyk7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50cy5pbnB1dC52YWwoc2V0dGluZ3MuY2FsbGJhY2tfYWZ0ZXJfY2FsY3VsYXRpb24ocGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpKTtcbiAgICAgICAgaWYgKGluaXR2YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBkb3duT25jZSgpIHtcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuaXMoJzpkaXNhYmxlZCxbcmVhZG9ubHldJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgX2NoZWNrVmFsdWUoKTtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHNldHRpbmdzLmNhbGxiYWNrX2JlZm9yZV9jYWxjdWxhdGlvbihlbGVtZW50cy5pbnB1dC52YWwoKSkpO1xuICAgICAgICB2YXIgaW5pdHZhbHVlID0gdmFsdWU7XG4gICAgICAgIHZhciBib29zdGVkc3RlcDtcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVJZklzTmFOKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9vc3RlZHN0ZXAgPSBfZ2V0Qm9vc3RlZFN0ZXAoKTtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC0gYm9vc3RlZHN0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldHRpbmdzLm1pbiAhPT0gbnVsbCAmJiB2YWx1ZSA8PSBzZXR0aW5ncy5taW4pIHtcbiAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzLm1pbjtcbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5taW4nKTtcbiAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzLmlucHV0LnZhbChzZXR0aW5ncy5jYWxsYmFja19hZnRlcl9jYWxjdWxhdGlvbihwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKHNldHRpbmdzLmRlY2ltYWxzKSkpO1xuICAgICAgICBpZiAoaW5pdHZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgIG9yaWdpbmFsaW5wdXQudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0RG93blNwaW4oKSB7XG4gICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0b3BTcGluKCk7XG4gICAgICAgIHNwaW5jb3VudCA9IDA7XG4gICAgICAgIHNwaW5uaW5nID0gJ2Rvd24nO1xuICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdGFydHNwaW4nKTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC50cmlnZ2VyKCd0b3VjaHNwaW4ub24uc3RhcnRkb3duc3BpbicpO1xuICAgICAgICBkb3duRGVsYXlUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZG93blNwaW5UaW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNwaW5jb3VudCsrO1xuICAgICAgICAgICAgZG93bk9uY2UoKTtcbiAgICAgICAgICB9LCBzZXR0aW5ncy5zdGVwaW50ZXJ2YWwpO1xuICAgICAgICB9LCBzZXR0aW5ncy5zdGVwaW50ZXJ2YWxkZWxheSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzdGFydFVwU3BpbigpIHtcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuaXMoJzpkaXNhYmxlZCxbcmVhZG9ubHldJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgc3BpbmNvdW50ID0gMDtcbiAgICAgICAgc3Bpbm5pbmcgPSAndXAnO1xuICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdGFydHNwaW4nKTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC50cmlnZ2VyKCd0b3VjaHNwaW4ub24uc3RhcnR1cHNwaW4nKTtcbiAgICAgICAgdXBEZWxheVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB1cFNwaW5UaW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNwaW5jb3VudCsrO1xuICAgICAgICAgICAgdXBPbmNlKCk7XG4gICAgICAgICAgfSwgc2V0dGluZ3Muc3RlcGludGVydmFsKTtcbiAgICAgICAgfSwgc2V0dGluZ3Muc3RlcGludGVydmFsZGVsYXkpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gc3RvcFNwaW4oKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChkb3duRGVsYXlUaW1lb3V0KTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHVwRGVsYXlUaW1lb3V0KTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChkb3duU3BpblRpbWVyKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh1cFNwaW5UaW1lcik7XG4gICAgICAgIHN3aXRjaCAoc3Bpbm5pbmcpIHtcbiAgICAgICAgICBjYXNlICd1cCc6XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdG9wdXBzcGluJyk7XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdG9wc3BpbicpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdG9wZG93bnNwaW4nKTtcbiAgICAgICAgICAgIG9yaWdpbmFsaW5wdXQudHJpZ2dlcigndG91Y2hzcGluLm9uLnN0b3BzcGluJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzcGluY291bnQgPSAwO1xuICAgICAgICBzcGlubmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qcXVlcnkuYm9vdHN0cmFwLXRvdWNoc3Bpbi5qcy5tYXBcbiIsIi8qIVxuICogQGZpbGVPdmVydmlldyBUb3VjaFN3aXBlIC0galF1ZXJ5IFBsdWdpblxuICogQHZlcnNpb24gMS42LjE4XG4gKlxuICogQGF1dGhvciBNYXR0IEJyeXNvbiBodHRwOi8vd3d3LmdpdGh1Yi5jb20vbWF0dGJyeXNvblxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWF0dGJyeXNvbi9Ub3VjaFN3aXBlLUpxdWVyeS1QbHVnaW5cbiAqIEBzZWUgaHR0cDovL2xhYnMucmFtcGludGVyYWN0aXZlLmNvLnVrL3RvdWNoU3dpcGUvXG4gKiBAc2VlIGh0dHA6Ly9wbHVnaW5zLmpxdWVyeS5jb20vcHJvamVjdC90b3VjaFN3aXBlXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTUgTWF0dCBCcnlzb25cbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLlxuICpcbiAqL1xuIWZ1bmN0aW9uKGZhY3Rvcnkpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lLmFtZC5qUXVlcnk/ZGVmaW5lKFtcImpxdWVyeVwiXSxmYWN0b3J5KTpmYWN0b3J5KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP3JlcXVpcmUoXCJqcXVlcnlcIik6alF1ZXJ5KX0oZnVuY3Rpb24oJCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaW5pdChvcHRpb25zKXtyZXR1cm4hb3B0aW9uc3x8dm9pZCAwIT09b3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGx8fHZvaWQgMD09PW9wdGlvbnMuc3dpcGUmJnZvaWQgMD09PW9wdGlvbnMuc3dpcGVTdGF0dXN8fChvcHRpb25zLmFsbG93UGFnZVNjcm9sbD1OT05FKSx2b2lkIDAhPT1vcHRpb25zLmNsaWNrJiZ2b2lkIDA9PT1vcHRpb25zLnRhcCYmKG9wdGlvbnMudGFwPW9wdGlvbnMuY2xpY2spLG9wdGlvbnN8fChvcHRpb25zPXt9KSxvcHRpb25zPSQuZXh0ZW5kKHt9LCQuZm4uc3dpcGUuZGVmYXVsdHMsb3B0aW9ucyksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyICR0aGlzPSQodGhpcykscGx1Z2luPSR0aGlzLmRhdGEoUExVR0lOX05TKTtwbHVnaW58fChwbHVnaW49bmV3IFRvdWNoU3dpcGUodGhpcyxvcHRpb25zKSwkdGhpcy5kYXRhKFBMVUdJTl9OUyxwbHVnaW4pKX0pfWZ1bmN0aW9uIFRvdWNoU3dpcGUoZWxlbWVudCxvcHRpb25zKXtmdW5jdGlvbiB0b3VjaFN0YXJ0KGpxRXZlbnQpe2lmKCEoZ2V0VG91Y2hJblByb2dyZXNzKCl8fCQoanFFdmVudC50YXJnZXQpLmNsb3Nlc3Qob3B0aW9ucy5leGNsdWRlZEVsZW1lbnRzLCRlbGVtZW50KS5sZW5ndGg+MCkpe3ZhciBldmVudD1qcUV2ZW50Lm9yaWdpbmFsRXZlbnQ/anFFdmVudC5vcmlnaW5hbEV2ZW50OmpxRXZlbnQ7aWYoIWV2ZW50LnBvaW50ZXJUeXBlfHxcIm1vdXNlXCIhPWV2ZW50LnBvaW50ZXJUeXBlfHwwIT1vcHRpb25zLmZhbGxiYWNrVG9Nb3VzZUV2ZW50cyl7dmFyIHJldCx0b3VjaGVzPWV2ZW50LnRvdWNoZXMsZXZ0PXRvdWNoZXM/dG91Y2hlc1swXTpldmVudDtyZXR1cm4gcGhhc2U9UEhBU0VfU1RBUlQsdG91Y2hlcz9maW5nZXJDb3VudD10b3VjaGVzLmxlbmd0aDpvcHRpb25zLnByZXZlbnREZWZhdWx0RXZlbnRzIT09ITEmJmpxRXZlbnQucHJldmVudERlZmF1bHQoKSxkaXN0YW5jZT0wLGRpcmVjdGlvbj1udWxsLGN1cnJlbnREaXJlY3Rpb249bnVsbCxwaW5jaERpcmVjdGlvbj1udWxsLGR1cmF0aW9uPTAsc3RhcnRUb3VjaGVzRGlzdGFuY2U9MCxlbmRUb3VjaGVzRGlzdGFuY2U9MCxwaW5jaFpvb209MSxwaW5jaERpc3RhbmNlPTAsbWF4aW11bXNNYXA9Y3JlYXRlTWF4aW11bXNEYXRhKCksY2FuY2VsTXVsdGlGaW5nZXJSZWxlYXNlKCksY3JlYXRlRmluZ2VyRGF0YSgwLGV2dCksIXRvdWNoZXN8fGZpbmdlckNvdW50PT09b3B0aW9ucy5maW5nZXJzfHxvcHRpb25zLmZpbmdlcnM9PT1BTExfRklOR0VSU3x8aGFzUGluY2hlcygpPyhzdGFydFRpbWU9Z2V0VGltZVN0YW1wKCksMj09ZmluZ2VyQ291bnQmJihjcmVhdGVGaW5nZXJEYXRhKDEsdG91Y2hlc1sxXSksc3RhcnRUb3VjaGVzRGlzdGFuY2U9ZW5kVG91Y2hlc0Rpc3RhbmNlPWNhbGN1bGF0ZVRvdWNoZXNEaXN0YW5jZShmaW5nZXJEYXRhWzBdLnN0YXJ0LGZpbmdlckRhdGFbMV0uc3RhcnQpKSwob3B0aW9ucy5zd2lwZVN0YXR1c3x8b3B0aW9ucy5waW5jaFN0YXR1cykmJihyZXQ9dHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpKSk6cmV0PSExLHJldD09PSExPyhwaGFzZT1QSEFTRV9DQU5DRUwsdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpLHJldCk6KG9wdGlvbnMuaG9sZCYmKGhvbGRUaW1lb3V0PXNldFRpbWVvdXQoJC5wcm94eShmdW5jdGlvbigpeyRlbGVtZW50LnRyaWdnZXIoXCJob2xkXCIsW2V2ZW50LnRhcmdldF0pLG9wdGlvbnMuaG9sZCYmKHJldD1vcHRpb25zLmhvbGQuY2FsbCgkZWxlbWVudCxldmVudCxldmVudC50YXJnZXQpKX0sdGhpcyksb3B0aW9ucy5sb25nVGFwVGhyZXNob2xkKSksc2V0VG91Y2hJblByb2dyZXNzKCEwKSxudWxsKX19fWZ1bmN0aW9uIHRvdWNoTW92ZShqcUV2ZW50KXt2YXIgZXZlbnQ9anFFdmVudC5vcmlnaW5hbEV2ZW50P2pxRXZlbnQub3JpZ2luYWxFdmVudDpqcUV2ZW50O2lmKHBoYXNlIT09UEhBU0VfRU5EJiZwaGFzZSE9PVBIQVNFX0NBTkNFTCYmIWluTXVsdGlGaW5nZXJSZWxlYXNlKCkpe3ZhciByZXQsdG91Y2hlcz1ldmVudC50b3VjaGVzLGV2dD10b3VjaGVzP3RvdWNoZXNbMF06ZXZlbnQsY3VycmVudEZpbmdlcj11cGRhdGVGaW5nZXJEYXRhKGV2dCk7aWYoZW5kVGltZT1nZXRUaW1lU3RhbXAoKSx0b3VjaGVzJiYoZmluZ2VyQ291bnQ9dG91Y2hlcy5sZW5ndGgpLG9wdGlvbnMuaG9sZCYmY2xlYXJUaW1lb3V0KGhvbGRUaW1lb3V0KSxwaGFzZT1QSEFTRV9NT1ZFLDI9PWZpbmdlckNvdW50JiYoMD09c3RhcnRUb3VjaGVzRGlzdGFuY2U/KGNyZWF0ZUZpbmdlckRhdGEoMSx0b3VjaGVzWzFdKSxzdGFydFRvdWNoZXNEaXN0YW5jZT1lbmRUb3VjaGVzRGlzdGFuY2U9Y2FsY3VsYXRlVG91Y2hlc0Rpc3RhbmNlKGZpbmdlckRhdGFbMF0uc3RhcnQsZmluZ2VyRGF0YVsxXS5zdGFydCkpOih1cGRhdGVGaW5nZXJEYXRhKHRvdWNoZXNbMV0pLGVuZFRvdWNoZXNEaXN0YW5jZT1jYWxjdWxhdGVUb3VjaGVzRGlzdGFuY2UoZmluZ2VyRGF0YVswXS5lbmQsZmluZ2VyRGF0YVsxXS5lbmQpLHBpbmNoRGlyZWN0aW9uPWNhbGN1bGF0ZVBpbmNoRGlyZWN0aW9uKGZpbmdlckRhdGFbMF0uZW5kLGZpbmdlckRhdGFbMV0uZW5kKSkscGluY2hab29tPWNhbGN1bGF0ZVBpbmNoWm9vbShzdGFydFRvdWNoZXNEaXN0YW5jZSxlbmRUb3VjaGVzRGlzdGFuY2UpLHBpbmNoRGlzdGFuY2U9TWF0aC5hYnMoc3RhcnRUb3VjaGVzRGlzdGFuY2UtZW5kVG91Y2hlc0Rpc3RhbmNlKSksZmluZ2VyQ291bnQ9PT1vcHRpb25zLmZpbmdlcnN8fG9wdGlvbnMuZmluZ2Vycz09PUFMTF9GSU5HRVJTfHwhdG91Y2hlc3x8aGFzUGluY2hlcygpKXtpZihkaXJlY3Rpb249Y2FsY3VsYXRlRGlyZWN0aW9uKGN1cnJlbnRGaW5nZXIuc3RhcnQsY3VycmVudEZpbmdlci5lbmQpLGN1cnJlbnREaXJlY3Rpb249Y2FsY3VsYXRlRGlyZWN0aW9uKGN1cnJlbnRGaW5nZXIubGFzdCxjdXJyZW50RmluZ2VyLmVuZCksdmFsaWRhdGVEZWZhdWx0RXZlbnQoanFFdmVudCxjdXJyZW50RGlyZWN0aW9uKSxkaXN0YW5jZT1jYWxjdWxhdGVEaXN0YW5jZShjdXJyZW50RmluZ2VyLnN0YXJ0LGN1cnJlbnRGaW5nZXIuZW5kKSxkdXJhdGlvbj1jYWxjdWxhdGVEdXJhdGlvbigpLHNldE1heERpc3RhbmNlKGRpcmVjdGlvbixkaXN0YW5jZSkscmV0PXRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKSwhb3B0aW9ucy50cmlnZ2VyT25Ub3VjaEVuZHx8b3B0aW9ucy50cmlnZ2VyT25Ub3VjaExlYXZlKXt2YXIgaW5Cb3VuZHM9ITA7aWYob3B0aW9ucy50cmlnZ2VyT25Ub3VjaExlYXZlKXt2YXIgYm91bmRzPWdldGJvdW5kcyh0aGlzKTtpbkJvdW5kcz1pc0luQm91bmRzKGN1cnJlbnRGaW5nZXIuZW5kLGJvdW5kcyl9IW9wdGlvbnMudHJpZ2dlck9uVG91Y2hFbmQmJmluQm91bmRzP3BoYXNlPWdldE5leHRQaGFzZShQSEFTRV9NT1ZFKTpvcHRpb25zLnRyaWdnZXJPblRvdWNoTGVhdmUmJiFpbkJvdW5kcyYmKHBoYXNlPWdldE5leHRQaGFzZShQSEFTRV9FTkQpKSxwaGFzZSE9UEhBU0VfQ0FOQ0VMJiZwaGFzZSE9UEhBU0VfRU5EfHx0cmlnZ2VySGFuZGxlcihldmVudCxwaGFzZSl9fWVsc2UgcGhhc2U9UEhBU0VfQ0FOQ0VMLHRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKTtyZXQ9PT0hMSYmKHBoYXNlPVBIQVNFX0NBTkNFTCx0cmlnZ2VySGFuZGxlcihldmVudCxwaGFzZSkpfX1mdW5jdGlvbiB0b3VjaEVuZChqcUV2ZW50KXt2YXIgZXZlbnQ9anFFdmVudC5vcmlnaW5hbEV2ZW50P2pxRXZlbnQub3JpZ2luYWxFdmVudDpqcUV2ZW50LHRvdWNoZXM9ZXZlbnQudG91Y2hlcztpZih0b3VjaGVzKXtpZih0b3VjaGVzLmxlbmd0aCYmIWluTXVsdGlGaW5nZXJSZWxlYXNlKCkpcmV0dXJuIHN0YXJ0TXVsdGlGaW5nZXJSZWxlYXNlKGV2ZW50KSwhMDtpZih0b3VjaGVzLmxlbmd0aCYmaW5NdWx0aUZpbmdlclJlbGVhc2UoKSlyZXR1cm4hMH1yZXR1cm4gaW5NdWx0aUZpbmdlclJlbGVhc2UoKSYmKGZpbmdlckNvdW50PWZpbmdlckNvdW50QXRSZWxlYXNlKSxlbmRUaW1lPWdldFRpbWVTdGFtcCgpLGR1cmF0aW9uPWNhbGN1bGF0ZUR1cmF0aW9uKCksZGlkU3dpcGVCYWNrVG9DYW5jZWwoKXx8IXZhbGlkYXRlU3dpcGVEaXN0YW5jZSgpPyhwaGFzZT1QSEFTRV9DQU5DRUwsdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpKTpvcHRpb25zLnRyaWdnZXJPblRvdWNoRW5kfHxvcHRpb25zLnRyaWdnZXJPblRvdWNoRW5kPT09ITEmJnBoYXNlPT09UEhBU0VfTU9WRT8ob3B0aW9ucy5wcmV2ZW50RGVmYXVsdEV2ZW50cyE9PSExJiZqcUV2ZW50LmNhbmNlbGFibGUhPT0hMSYmanFFdmVudC5wcmV2ZW50RGVmYXVsdCgpLHBoYXNlPVBIQVNFX0VORCx0cmlnZ2VySGFuZGxlcihldmVudCxwaGFzZSkpOiFvcHRpb25zLnRyaWdnZXJPblRvdWNoRW5kJiZoYXNUYXAoKT8ocGhhc2U9UEhBU0VfRU5ELHRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxUQVApKTpwaGFzZT09PVBIQVNFX01PVkUmJihwaGFzZT1QSEFTRV9DQU5DRUwsdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpKSxzZXRUb3VjaEluUHJvZ3Jlc3MoITEpLG51bGx9ZnVuY3Rpb24gdG91Y2hDYW5jZWwoKXtmaW5nZXJDb3VudD0wLGVuZFRpbWU9MCxzdGFydFRpbWU9MCxzdGFydFRvdWNoZXNEaXN0YW5jZT0wLGVuZFRvdWNoZXNEaXN0YW5jZT0wLHBpbmNoWm9vbT0xLGNhbmNlbE11bHRpRmluZ2VyUmVsZWFzZSgpLHNldFRvdWNoSW5Qcm9ncmVzcyghMSl9ZnVuY3Rpb24gdG91Y2hMZWF2ZShqcUV2ZW50KXt2YXIgZXZlbnQ9anFFdmVudC5vcmlnaW5hbEV2ZW50P2pxRXZlbnQub3JpZ2luYWxFdmVudDpqcUV2ZW50O29wdGlvbnMudHJpZ2dlck9uVG91Y2hMZWF2ZSYmKHBoYXNlPWdldE5leHRQaGFzZShQSEFTRV9FTkQpLHRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKSl9ZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXJzKCl7JGVsZW1lbnQub2ZmKFNUQVJUX0VWLHRvdWNoU3RhcnQpLCRlbGVtZW50Lm9mZihDQU5DRUxfRVYsdG91Y2hDYW5jZWwpLCRlbGVtZW50Lm9mZihNT1ZFX0VWLHRvdWNoTW92ZSksJGVsZW1lbnQub2ZmKEVORF9FVix0b3VjaEVuZCksTEVBVkVfRVYmJiRlbGVtZW50Lm9mZihMRUFWRV9FVix0b3VjaExlYXZlKSxzZXRUb3VjaEluUHJvZ3Jlc3MoITEpfWZ1bmN0aW9uIGdldE5leHRQaGFzZShjdXJyZW50UGhhc2Upe3ZhciBuZXh0UGhhc2U9Y3VycmVudFBoYXNlLHZhbGlkVGltZT12YWxpZGF0ZVN3aXBlVGltZSgpLHZhbGlkRGlzdGFuY2U9dmFsaWRhdGVTd2lwZURpc3RhbmNlKCksZGlkQ2FuY2VsPWRpZFN3aXBlQmFja1RvQ2FuY2VsKCk7cmV0dXJuIXZhbGlkVGltZXx8ZGlkQ2FuY2VsP25leHRQaGFzZT1QSEFTRV9DQU5DRUw6IXZhbGlkRGlzdGFuY2V8fGN1cnJlbnRQaGFzZSE9UEhBU0VfTU9WRXx8b3B0aW9ucy50cmlnZ2VyT25Ub3VjaEVuZCYmIW9wdGlvbnMudHJpZ2dlck9uVG91Y2hMZWF2ZT8hdmFsaWREaXN0YW5jZSYmY3VycmVudFBoYXNlPT1QSEFTRV9FTkQmJm9wdGlvbnMudHJpZ2dlck9uVG91Y2hMZWF2ZSYmKG5leHRQaGFzZT1QSEFTRV9DQU5DRUwpOm5leHRQaGFzZT1QSEFTRV9FTkQsbmV4dFBoYXNlfWZ1bmN0aW9uIHRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKXt2YXIgcmV0LHRvdWNoZXM9ZXZlbnQudG91Y2hlcztyZXR1cm4oZGlkU3dpcGUoKXx8aGFzU3dpcGVzKCkpJiYocmV0PXRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxTV0lQRSkpLChkaWRQaW5jaCgpfHxoYXNQaW5jaGVzKCkpJiZyZXQhPT0hMSYmKHJldD10cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsUElOQ0gpKSxkaWREb3VibGVUYXAoKSYmcmV0IT09ITE/cmV0PXRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxET1VCTEVfVEFQKTpkaWRMb25nVGFwKCkmJnJldCE9PSExP3JldD10cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsTE9OR19UQVApOmRpZFRhcCgpJiZyZXQhPT0hMSYmKHJldD10cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsVEFQKSkscGhhc2U9PT1QSEFTRV9DQU5DRUwmJnRvdWNoQ2FuY2VsKGV2ZW50KSxwaGFzZT09PVBIQVNFX0VORCYmKHRvdWNoZXM/dG91Y2hlcy5sZW5ndGh8fHRvdWNoQ2FuY2VsKGV2ZW50KTp0b3VjaENhbmNlbChldmVudCkpLHJldH1mdW5jdGlvbiB0cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsZ2VzdHVyZSl7dmFyIHJldDtpZihnZXN0dXJlPT1TV0lQRSl7aWYoJGVsZW1lbnQudHJpZ2dlcihcInN3aXBlU3RhdHVzXCIsW3BoYXNlLGRpcmVjdGlvbnx8bnVsbCxkaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb25dKSxvcHRpb25zLnN3aXBlU3RhdHVzJiYocmV0PW9wdGlvbnMuc3dpcGVTdGF0dXMuY2FsbCgkZWxlbWVudCxldmVudCxwaGFzZSxkaXJlY3Rpb258fG51bGwsZGlzdGFuY2V8fDAsZHVyYXRpb258fDAsZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uKSxyZXQ9PT0hMSkpcmV0dXJuITE7aWYocGhhc2U9PVBIQVNFX0VORCYmdmFsaWRhdGVTd2lwZSgpKXtpZihjbGVhclRpbWVvdXQoc2luZ2xlVGFwVGltZW91dCksY2xlYXJUaW1lb3V0KGhvbGRUaW1lb3V0KSwkZWxlbWVudC50cmlnZ2VyKFwic3dpcGVcIixbZGlyZWN0aW9uLGRpc3RhbmNlLGR1cmF0aW9uLGZpbmdlckNvdW50LGZpbmdlckRhdGEsY3VycmVudERpcmVjdGlvbl0pLG9wdGlvbnMuc3dpcGUmJihyZXQ9b3B0aW9ucy5zd2lwZS5jYWxsKCRlbGVtZW50LGV2ZW50LGRpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb24pLHJldD09PSExKSlyZXR1cm4hMTtzd2l0Y2goZGlyZWN0aW9uKXtjYXNlIExFRlQ6JGVsZW1lbnQudHJpZ2dlcihcInN3aXBlTGVmdFwiLFtkaXJlY3Rpb24sZGlzdGFuY2UsZHVyYXRpb24sZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uXSksb3B0aW9ucy5zd2lwZUxlZnQmJihyZXQ9b3B0aW9ucy5zd2lwZUxlZnQuY2FsbCgkZWxlbWVudCxldmVudCxkaXJlY3Rpb24sZGlzdGFuY2UsZHVyYXRpb24sZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uKSk7YnJlYWs7Y2FzZSBSSUdIVDokZWxlbWVudC50cmlnZ2VyKFwic3dpcGVSaWdodFwiLFtkaXJlY3Rpb24sZGlzdGFuY2UsZHVyYXRpb24sZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uXSksb3B0aW9ucy5zd2lwZVJpZ2h0JiYocmV0PW9wdGlvbnMuc3dpcGVSaWdodC5jYWxsKCRlbGVtZW50LGV2ZW50LGRpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb24pKTticmVhaztjYXNlIFVQOiRlbGVtZW50LnRyaWdnZXIoXCJzd2lwZVVwXCIsW2RpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb25dKSxvcHRpb25zLnN3aXBlVXAmJihyZXQ9b3B0aW9ucy5zd2lwZVVwLmNhbGwoJGVsZW1lbnQsZXZlbnQsZGlyZWN0aW9uLGRpc3RhbmNlLGR1cmF0aW9uLGZpbmdlckNvdW50LGZpbmdlckRhdGEsY3VycmVudERpcmVjdGlvbikpO2JyZWFrO2Nhc2UgRE9XTjokZWxlbWVudC50cmlnZ2VyKFwic3dpcGVEb3duXCIsW2RpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb25dKSxvcHRpb25zLnN3aXBlRG93biYmKHJldD1vcHRpb25zLnN3aXBlRG93bi5jYWxsKCRlbGVtZW50LGV2ZW50LGRpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb24pKX19fWlmKGdlc3R1cmU9PVBJTkNIKXtpZigkZWxlbWVudC50cmlnZ2VyKFwicGluY2hTdGF0dXNcIixbcGhhc2UscGluY2hEaXJlY3Rpb258fG51bGwscGluY2hEaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxwaW5jaFpvb20sZmluZ2VyRGF0YV0pLG9wdGlvbnMucGluY2hTdGF0dXMmJihyZXQ9b3B0aW9ucy5waW5jaFN0YXR1cy5jYWxsKCRlbGVtZW50LGV2ZW50LHBoYXNlLHBpbmNoRGlyZWN0aW9ufHxudWxsLHBpbmNoRGlzdGFuY2V8fDAsZHVyYXRpb258fDAsZmluZ2VyQ291bnQscGluY2hab29tLGZpbmdlckRhdGEpLHJldD09PSExKSlyZXR1cm4hMTtpZihwaGFzZT09UEhBU0VfRU5EJiZ2YWxpZGF0ZVBpbmNoKCkpc3dpdGNoKHBpbmNoRGlyZWN0aW9uKXtjYXNlIElOOiRlbGVtZW50LnRyaWdnZXIoXCJwaW5jaEluXCIsW3BpbmNoRGlyZWN0aW9ufHxudWxsLHBpbmNoRGlzdGFuY2V8fDAsZHVyYXRpb258fDAsZmluZ2VyQ291bnQscGluY2hab29tLGZpbmdlckRhdGFdKSxvcHRpb25zLnBpbmNoSW4mJihyZXQ9b3B0aW9ucy5waW5jaEluLmNhbGwoJGVsZW1lbnQsZXZlbnQscGluY2hEaXJlY3Rpb258fG51bGwscGluY2hEaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxwaW5jaFpvb20sZmluZ2VyRGF0YSkpO2JyZWFrO2Nhc2UgT1VUOiRlbGVtZW50LnRyaWdnZXIoXCJwaW5jaE91dFwiLFtwaW5jaERpcmVjdGlvbnx8bnVsbCxwaW5jaERpc3RhbmNlfHwwLGR1cmF0aW9ufHwwLGZpbmdlckNvdW50LHBpbmNoWm9vbSxmaW5nZXJEYXRhXSksb3B0aW9ucy5waW5jaE91dCYmKHJldD1vcHRpb25zLnBpbmNoT3V0LmNhbGwoJGVsZW1lbnQsZXZlbnQscGluY2hEaXJlY3Rpb258fG51bGwscGluY2hEaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxwaW5jaFpvb20sZmluZ2VyRGF0YSkpfX1yZXR1cm4gZ2VzdHVyZT09VEFQP3BoYXNlIT09UEhBU0VfQ0FOQ0VMJiZwaGFzZSE9PVBIQVNFX0VORHx8KGNsZWFyVGltZW91dChzaW5nbGVUYXBUaW1lb3V0KSxjbGVhclRpbWVvdXQoaG9sZFRpbWVvdXQpLGhhc0RvdWJsZVRhcCgpJiYhaW5Eb3VibGVUYXAoKT8oZG91YmxlVGFwU3RhcnRUaW1lPWdldFRpbWVTdGFtcCgpLHNpbmdsZVRhcFRpbWVvdXQ9c2V0VGltZW91dCgkLnByb3h5KGZ1bmN0aW9uKCl7ZG91YmxlVGFwU3RhcnRUaW1lPW51bGwsJGVsZW1lbnQudHJpZ2dlcihcInRhcFwiLFtldmVudC50YXJnZXRdKSxvcHRpb25zLnRhcCYmKHJldD1vcHRpb25zLnRhcC5jYWxsKCRlbGVtZW50LGV2ZW50LGV2ZW50LnRhcmdldCkpfSx0aGlzKSxvcHRpb25zLmRvdWJsZVRhcFRocmVzaG9sZCkpOihkb3VibGVUYXBTdGFydFRpbWU9bnVsbCwkZWxlbWVudC50cmlnZ2VyKFwidGFwXCIsW2V2ZW50LnRhcmdldF0pLG9wdGlvbnMudGFwJiYocmV0PW9wdGlvbnMudGFwLmNhbGwoJGVsZW1lbnQsZXZlbnQsZXZlbnQudGFyZ2V0KSkpKTpnZXN0dXJlPT1ET1VCTEVfVEFQP3BoYXNlIT09UEhBU0VfQ0FOQ0VMJiZwaGFzZSE9PVBIQVNFX0VORHx8KGNsZWFyVGltZW91dChzaW5nbGVUYXBUaW1lb3V0KSxjbGVhclRpbWVvdXQoaG9sZFRpbWVvdXQpLGRvdWJsZVRhcFN0YXJ0VGltZT1udWxsLCRlbGVtZW50LnRyaWdnZXIoXCJkb3VibGV0YXBcIixbZXZlbnQudGFyZ2V0XSksb3B0aW9ucy5kb3VibGVUYXAmJihyZXQ9b3B0aW9ucy5kb3VibGVUYXAuY2FsbCgkZWxlbWVudCxldmVudCxldmVudC50YXJnZXQpKSk6Z2VzdHVyZT09TE9OR19UQVAmJihwaGFzZSE9PVBIQVNFX0NBTkNFTCYmcGhhc2UhPT1QSEFTRV9FTkR8fChjbGVhclRpbWVvdXQoc2luZ2xlVGFwVGltZW91dCksZG91YmxlVGFwU3RhcnRUaW1lPW51bGwsJGVsZW1lbnQudHJpZ2dlcihcImxvbmd0YXBcIixbZXZlbnQudGFyZ2V0XSksb3B0aW9ucy5sb25nVGFwJiYocmV0PW9wdGlvbnMubG9uZ1RhcC5jYWxsKCRlbGVtZW50LGV2ZW50LGV2ZW50LnRhcmdldCkpKSkscmV0fWZ1bmN0aW9uIHZhbGlkYXRlU3dpcGVEaXN0YW5jZSgpe3ZhciB2YWxpZD0hMDtyZXR1cm4gbnVsbCE9PW9wdGlvbnMudGhyZXNob2xkJiYodmFsaWQ9ZGlzdGFuY2U+PW9wdGlvbnMudGhyZXNob2xkKSx2YWxpZH1mdW5jdGlvbiBkaWRTd2lwZUJhY2tUb0NhbmNlbCgpe3ZhciBjYW5jZWxsZWQ9ITE7cmV0dXJuIG51bGwhPT1vcHRpb25zLmNhbmNlbFRocmVzaG9sZCYmbnVsbCE9PWRpcmVjdGlvbiYmKGNhbmNlbGxlZD1nZXRNYXhEaXN0YW5jZShkaXJlY3Rpb24pLWRpc3RhbmNlPj1vcHRpb25zLmNhbmNlbFRocmVzaG9sZCksY2FuY2VsbGVkfWZ1bmN0aW9uIHZhbGlkYXRlUGluY2hEaXN0YW5jZSgpe3JldHVybiBudWxsIT09b3B0aW9ucy5waW5jaFRocmVzaG9sZD9waW5jaERpc3RhbmNlPj1vcHRpb25zLnBpbmNoVGhyZXNob2xkOiEwfWZ1bmN0aW9uIHZhbGlkYXRlU3dpcGVUaW1lKCl7dmFyIHJlc3VsdDtyZXR1cm4gcmVzdWx0PW9wdGlvbnMubWF4VGltZVRocmVzaG9sZD8hKGR1cmF0aW9uPj1vcHRpb25zLm1heFRpbWVUaHJlc2hvbGQpOiEwfWZ1bmN0aW9uIHZhbGlkYXRlRGVmYXVsdEV2ZW50KGpxRXZlbnQsZGlyZWN0aW9uKXtpZihvcHRpb25zLnByZXZlbnREZWZhdWx0RXZlbnRzIT09ITEpaWYob3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGw9PT1OT05FKWpxRXZlbnQucHJldmVudERlZmF1bHQoKTtlbHNle3ZhciBhdXRvPW9wdGlvbnMuYWxsb3dQYWdlU2Nyb2xsPT09QVVUTztzd2l0Y2goZGlyZWN0aW9uKXtjYXNlIExFRlQ6KG9wdGlvbnMuc3dpcGVMZWZ0JiZhdXRvfHwhYXV0byYmb3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGwhPUhPUklaT05UQUwpJiZqcUV2ZW50LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBSSUdIVDoob3B0aW9ucy5zd2lwZVJpZ2h0JiZhdXRvfHwhYXV0byYmb3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGwhPUhPUklaT05UQUwpJiZqcUV2ZW50LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBVUDoob3B0aW9ucy5zd2lwZVVwJiZhdXRvfHwhYXV0byYmb3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGwhPVZFUlRJQ0FMKSYmanFFdmVudC5wcmV2ZW50RGVmYXVsdCgpO2JyZWFrO2Nhc2UgRE9XTjoob3B0aW9ucy5zd2lwZURvd24mJmF1dG98fCFhdXRvJiZvcHRpb25zLmFsbG93UGFnZVNjcm9sbCE9VkVSVElDQUwpJiZqcUV2ZW50LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBOT05FOn19fWZ1bmN0aW9uIHZhbGlkYXRlUGluY2goKXt2YXIgaGFzQ29ycmVjdEZpbmdlckNvdW50PXZhbGlkYXRlRmluZ2VycygpLGhhc0VuZFBvaW50PXZhbGlkYXRlRW5kUG9pbnQoKSxoYXNDb3JyZWN0RGlzdGFuY2U9dmFsaWRhdGVQaW5jaERpc3RhbmNlKCk7cmV0dXJuIGhhc0NvcnJlY3RGaW5nZXJDb3VudCYmaGFzRW5kUG9pbnQmJmhhc0NvcnJlY3REaXN0YW5jZX1mdW5jdGlvbiBoYXNQaW5jaGVzKCl7cmV0dXJuISEob3B0aW9ucy5waW5jaFN0YXR1c3x8b3B0aW9ucy5waW5jaElufHxvcHRpb25zLnBpbmNoT3V0KX1mdW5jdGlvbiBkaWRQaW5jaCgpe3JldHVybiEoIXZhbGlkYXRlUGluY2goKXx8IWhhc1BpbmNoZXMoKSl9ZnVuY3Rpb24gdmFsaWRhdGVTd2lwZSgpe3ZhciBoYXNWYWxpZFRpbWU9dmFsaWRhdGVTd2lwZVRpbWUoKSxoYXNWYWxpZERpc3RhbmNlPXZhbGlkYXRlU3dpcGVEaXN0YW5jZSgpLGhhc0NvcnJlY3RGaW5nZXJDb3VudD12YWxpZGF0ZUZpbmdlcnMoKSxoYXNFbmRQb2ludD12YWxpZGF0ZUVuZFBvaW50KCksZGlkQ2FuY2VsPWRpZFN3aXBlQmFja1RvQ2FuY2VsKCksdmFsaWQ9IWRpZENhbmNlbCYmaGFzRW5kUG9pbnQmJmhhc0NvcnJlY3RGaW5nZXJDb3VudCYmaGFzVmFsaWREaXN0YW5jZSYmaGFzVmFsaWRUaW1lO3JldHVybiB2YWxpZH1mdW5jdGlvbiBoYXNTd2lwZXMoKXtyZXR1cm4hIShvcHRpb25zLnN3aXBlfHxvcHRpb25zLnN3aXBlU3RhdHVzfHxvcHRpb25zLnN3aXBlTGVmdHx8b3B0aW9ucy5zd2lwZVJpZ2h0fHxvcHRpb25zLnN3aXBlVXB8fG9wdGlvbnMuc3dpcGVEb3duKX1mdW5jdGlvbiBkaWRTd2lwZSgpe3JldHVybiEoIXZhbGlkYXRlU3dpcGUoKXx8IWhhc1N3aXBlcygpKX1mdW5jdGlvbiB2YWxpZGF0ZUZpbmdlcnMoKXtyZXR1cm4gZmluZ2VyQ291bnQ9PT1vcHRpb25zLmZpbmdlcnN8fG9wdGlvbnMuZmluZ2Vycz09PUFMTF9GSU5HRVJTfHwhU1VQUE9SVFNfVE9VQ0h9ZnVuY3Rpb24gdmFsaWRhdGVFbmRQb2ludCgpe3JldHVybiAwIT09ZmluZ2VyRGF0YVswXS5lbmQueH1mdW5jdGlvbiBoYXNUYXAoKXtyZXR1cm4hIW9wdGlvbnMudGFwfWZ1bmN0aW9uIGhhc0RvdWJsZVRhcCgpe3JldHVybiEhb3B0aW9ucy5kb3VibGVUYXB9ZnVuY3Rpb24gaGFzTG9uZ1RhcCgpe3JldHVybiEhb3B0aW9ucy5sb25nVGFwfWZ1bmN0aW9uIHZhbGlkYXRlRG91YmxlVGFwKCl7aWYobnVsbD09ZG91YmxlVGFwU3RhcnRUaW1lKXJldHVybiExO3ZhciBub3c9Z2V0VGltZVN0YW1wKCk7cmV0dXJuIGhhc0RvdWJsZVRhcCgpJiZub3ctZG91YmxlVGFwU3RhcnRUaW1lPD1vcHRpb25zLmRvdWJsZVRhcFRocmVzaG9sZH1mdW5jdGlvbiBpbkRvdWJsZVRhcCgpe3JldHVybiB2YWxpZGF0ZURvdWJsZVRhcCgpfWZ1bmN0aW9uIHZhbGlkYXRlVGFwKCl7cmV0dXJuKDE9PT1maW5nZXJDb3VudHx8IVNVUFBPUlRTX1RPVUNIKSYmKGlzTmFOKGRpc3RhbmNlKXx8ZGlzdGFuY2U8b3B0aW9ucy50aHJlc2hvbGQpfWZ1bmN0aW9uIHZhbGlkYXRlTG9uZ1RhcCgpe3JldHVybiBkdXJhdGlvbj5vcHRpb25zLmxvbmdUYXBUaHJlc2hvbGQmJkRPVUJMRV9UQVBfVEhSRVNIT0xEPmRpc3RhbmNlfWZ1bmN0aW9uIGRpZFRhcCgpe3JldHVybiEoIXZhbGlkYXRlVGFwKCl8fCFoYXNUYXAoKSl9ZnVuY3Rpb24gZGlkRG91YmxlVGFwKCl7cmV0dXJuISghdmFsaWRhdGVEb3VibGVUYXAoKXx8IWhhc0RvdWJsZVRhcCgpKX1mdW5jdGlvbiBkaWRMb25nVGFwKCl7cmV0dXJuISghdmFsaWRhdGVMb25nVGFwKCl8fCFoYXNMb25nVGFwKCkpfWZ1bmN0aW9uIHN0YXJ0TXVsdGlGaW5nZXJSZWxlYXNlKGV2ZW50KXtwcmV2aW91c1RvdWNoRW5kVGltZT1nZXRUaW1lU3RhbXAoKSxmaW5nZXJDb3VudEF0UmVsZWFzZT1ldmVudC50b3VjaGVzLmxlbmd0aCsxfWZ1bmN0aW9uIGNhbmNlbE11bHRpRmluZ2VyUmVsZWFzZSgpe3ByZXZpb3VzVG91Y2hFbmRUaW1lPTAsZmluZ2VyQ291bnRBdFJlbGVhc2U9MH1mdW5jdGlvbiBpbk11bHRpRmluZ2VyUmVsZWFzZSgpe3ZhciB3aXRoaW5UaHJlc2hvbGQ9ITE7aWYocHJldmlvdXNUb3VjaEVuZFRpbWUpe3ZhciBkaWZmPWdldFRpbWVTdGFtcCgpLXByZXZpb3VzVG91Y2hFbmRUaW1lO2RpZmY8PW9wdGlvbnMuZmluZ2VyUmVsZWFzZVRocmVzaG9sZCYmKHdpdGhpblRocmVzaG9sZD0hMCl9cmV0dXJuIHdpdGhpblRocmVzaG9sZH1mdW5jdGlvbiBnZXRUb3VjaEluUHJvZ3Jlc3MoKXtyZXR1cm4hKCRlbGVtZW50LmRhdGEoUExVR0lOX05TK1wiX2ludG91Y2hcIikhPT0hMCl9ZnVuY3Rpb24gc2V0VG91Y2hJblByb2dyZXNzKHZhbCl7JGVsZW1lbnQmJih2YWw9PT0hMD8oJGVsZW1lbnQub24oTU9WRV9FVix0b3VjaE1vdmUpLCRlbGVtZW50Lm9uKEVORF9FVix0b3VjaEVuZCksTEVBVkVfRVYmJiRlbGVtZW50Lm9uKExFQVZFX0VWLHRvdWNoTGVhdmUpKTooJGVsZW1lbnQub2ZmKE1PVkVfRVYsdG91Y2hNb3ZlLCExKSwkZWxlbWVudC5vZmYoRU5EX0VWLHRvdWNoRW5kLCExKSxMRUFWRV9FViYmJGVsZW1lbnQub2ZmKExFQVZFX0VWLHRvdWNoTGVhdmUsITEpKSwkZWxlbWVudC5kYXRhKFBMVUdJTl9OUytcIl9pbnRvdWNoXCIsdmFsPT09ITApKX1mdW5jdGlvbiBjcmVhdGVGaW5nZXJEYXRhKGlkLGV2dCl7dmFyIGY9e3N0YXJ0Ont4OjAseTowfSxsYXN0Ont4OjAseTowfSxlbmQ6e3g6MCx5OjB9fTtyZXR1cm4gZi5zdGFydC54PWYubGFzdC54PWYuZW5kLng9ZXZ0LnBhZ2VYfHxldnQuY2xpZW50WCxmLnN0YXJ0Lnk9Zi5sYXN0Lnk9Zi5lbmQueT1ldnQucGFnZVl8fGV2dC5jbGllbnRZLGZpbmdlckRhdGFbaWRdPWYsZn1mdW5jdGlvbiB1cGRhdGVGaW5nZXJEYXRhKGV2dCl7dmFyIGlkPXZvaWQgMCE9PWV2dC5pZGVudGlmaWVyP2V2dC5pZGVudGlmaWVyOjAsZj1nZXRGaW5nZXJEYXRhKGlkKTtyZXR1cm4gbnVsbD09PWYmJihmPWNyZWF0ZUZpbmdlckRhdGEoaWQsZXZ0KSksZi5sYXN0Lng9Zi5lbmQueCxmLmxhc3QueT1mLmVuZC55LGYuZW5kLng9ZXZ0LnBhZ2VYfHxldnQuY2xpZW50WCxmLmVuZC55PWV2dC5wYWdlWXx8ZXZ0LmNsaWVudFksZn1mdW5jdGlvbiBnZXRGaW5nZXJEYXRhKGlkKXtyZXR1cm4gZmluZ2VyRGF0YVtpZF18fG51bGx9ZnVuY3Rpb24gc2V0TWF4RGlzdGFuY2UoZGlyZWN0aW9uLGRpc3RhbmNlKXtkaXJlY3Rpb24hPU5PTkUmJihkaXN0YW5jZT1NYXRoLm1heChkaXN0YW5jZSxnZXRNYXhEaXN0YW5jZShkaXJlY3Rpb24pKSxtYXhpbXVtc01hcFtkaXJlY3Rpb25dLmRpc3RhbmNlPWRpc3RhbmNlKX1mdW5jdGlvbiBnZXRNYXhEaXN0YW5jZShkaXJlY3Rpb24pe3JldHVybiBtYXhpbXVtc01hcFtkaXJlY3Rpb25dP21heGltdW1zTWFwW2RpcmVjdGlvbl0uZGlzdGFuY2U6dm9pZCAwfWZ1bmN0aW9uIGNyZWF0ZU1heGltdW1zRGF0YSgpe3ZhciBtYXhEYXRhPXt9O3JldHVybiBtYXhEYXRhW0xFRlRdPWNyZWF0ZU1heGltdW1WTyhMRUZUKSxtYXhEYXRhW1JJR0hUXT1jcmVhdGVNYXhpbXVtVk8oUklHSFQpLG1heERhdGFbVVBdPWNyZWF0ZU1heGltdW1WTyhVUCksbWF4RGF0YVtET1dOXT1jcmVhdGVNYXhpbXVtVk8oRE9XTiksbWF4RGF0YX1mdW5jdGlvbiBjcmVhdGVNYXhpbXVtVk8oZGlyKXtyZXR1cm57ZGlyZWN0aW9uOmRpcixkaXN0YW5jZTowfX1mdW5jdGlvbiBjYWxjdWxhdGVEdXJhdGlvbigpe3JldHVybiBlbmRUaW1lLXN0YXJ0VGltZX1mdW5jdGlvbiBjYWxjdWxhdGVUb3VjaGVzRGlzdGFuY2Uoc3RhcnRQb2ludCxlbmRQb2ludCl7dmFyIGRpZmZYPU1hdGguYWJzKHN0YXJ0UG9pbnQueC1lbmRQb2ludC54KSxkaWZmWT1NYXRoLmFicyhzdGFydFBvaW50LnktZW5kUG9pbnQueSk7cmV0dXJuIE1hdGgucm91bmQoTWF0aC5zcXJ0KGRpZmZYKmRpZmZYK2RpZmZZKmRpZmZZKSl9ZnVuY3Rpb24gY2FsY3VsYXRlUGluY2hab29tKHN0YXJ0RGlzdGFuY2UsZW5kRGlzdGFuY2Upe3ZhciBwZXJjZW50PWVuZERpc3RhbmNlL3N0YXJ0RGlzdGFuY2UqMTtyZXR1cm4gcGVyY2VudC50b0ZpeGVkKDIpfWZ1bmN0aW9uIGNhbGN1bGF0ZVBpbmNoRGlyZWN0aW9uKCl7cmV0dXJuIDE+cGluY2hab29tP09VVDpJTn1mdW5jdGlvbiBjYWxjdWxhdGVEaXN0YW5jZShzdGFydFBvaW50LGVuZFBvaW50KXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnNxcnQoTWF0aC5wb3coZW5kUG9pbnQueC1zdGFydFBvaW50LngsMikrTWF0aC5wb3coZW5kUG9pbnQueS1zdGFydFBvaW50LnksMikpKX1mdW5jdGlvbiBjYWxjdWxhdGVBbmdsZShzdGFydFBvaW50LGVuZFBvaW50KXt2YXIgeD1zdGFydFBvaW50LngtZW5kUG9pbnQueCx5PWVuZFBvaW50Lnktc3RhcnRQb2ludC55LHI9TWF0aC5hdGFuMih5LHgpLGFuZ2xlPU1hdGgucm91bmQoMTgwKnIvTWF0aC5QSSk7cmV0dXJuIDA+YW5nbGUmJihhbmdsZT0zNjAtTWF0aC5hYnMoYW5nbGUpKSxhbmdsZX1mdW5jdGlvbiBjYWxjdWxhdGVEaXJlY3Rpb24oc3RhcnRQb2ludCxlbmRQb2ludCl7aWYoY29tcGFyZVBvaW50cyhzdGFydFBvaW50LGVuZFBvaW50KSlyZXR1cm4gTk9ORTt2YXIgYW5nbGU9Y2FsY3VsYXRlQW5nbGUoc3RhcnRQb2ludCxlbmRQb2ludCk7cmV0dXJuIDQ1Pj1hbmdsZSYmYW5nbGU+PTA/TEVGVDozNjA+PWFuZ2xlJiZhbmdsZT49MzE1P0xFRlQ6YW5nbGU+PTEzNSYmMjI1Pj1hbmdsZT9SSUdIVDphbmdsZT40NSYmMTM1PmFuZ2xlP0RPV046VVB9ZnVuY3Rpb24gZ2V0VGltZVN0YW1wKCl7dmFyIG5vdz1uZXcgRGF0ZTtyZXR1cm4gbm93LmdldFRpbWUoKX1mdW5jdGlvbiBnZXRib3VuZHMoZWwpe2VsPSQoZWwpO3ZhciBvZmZzZXQ9ZWwub2Zmc2V0KCksYm91bmRzPXtsZWZ0Om9mZnNldC5sZWZ0LHJpZ2h0Om9mZnNldC5sZWZ0K2VsLm91dGVyV2lkdGgoKSx0b3A6b2Zmc2V0LnRvcCxib3R0b206b2Zmc2V0LnRvcCtlbC5vdXRlckhlaWdodCgpfTtyZXR1cm4gYm91bmRzfWZ1bmN0aW9uIGlzSW5Cb3VuZHMocG9pbnQsYm91bmRzKXtyZXR1cm4gcG9pbnQueD5ib3VuZHMubGVmdCYmcG9pbnQueDxib3VuZHMucmlnaHQmJnBvaW50Lnk+Ym91bmRzLnRvcCYmcG9pbnQueTxib3VuZHMuYm90dG9tfWZ1bmN0aW9uIGNvbXBhcmVQb2ludHMocG9pbnRBLHBvaW50Qil7cmV0dXJuIHBvaW50QS54PT1wb2ludEIueCYmcG9pbnRBLnk9PXBvaW50Qi55fXZhciBvcHRpb25zPSQuZXh0ZW5kKHt9LG9wdGlvbnMpLHVzZVRvdWNoRXZlbnRzPVNVUFBPUlRTX1RPVUNIfHxTVVBQT1JUU19QT0lOVEVSfHwhb3B0aW9ucy5mYWxsYmFja1RvTW91c2VFdmVudHMsU1RBUlRfRVY9dXNlVG91Y2hFdmVudHM/U1VQUE9SVFNfUE9JTlRFUj9TVVBQT1JUU19QT0lOVEVSX0lFMTA/XCJNU1BvaW50ZXJEb3duXCI6XCJwb2ludGVyZG93blwiOlwidG91Y2hzdGFydFwiOlwibW91c2Vkb3duXCIsTU9WRV9FVj11c2VUb3VjaEV2ZW50cz9TVVBQT1JUU19QT0lOVEVSP1NVUFBPUlRTX1BPSU5URVJfSUUxMD9cIk1TUG9pbnRlck1vdmVcIjpcInBvaW50ZXJtb3ZlXCI6XCJ0b3VjaG1vdmVcIjpcIm1vdXNlbW92ZVwiLEVORF9FVj11c2VUb3VjaEV2ZW50cz9TVVBQT1JUU19QT0lOVEVSP1NVUFBPUlRTX1BPSU5URVJfSUUxMD9cIk1TUG9pbnRlclVwXCI6XCJwb2ludGVydXBcIjpcInRvdWNoZW5kXCI6XCJtb3VzZXVwXCIsTEVBVkVfRVY9dXNlVG91Y2hFdmVudHM/U1VQUE9SVFNfUE9JTlRFUj9cIm1vdXNlbGVhdmVcIjpudWxsOlwibW91c2VsZWF2ZVwiLENBTkNFTF9FVj1TVVBQT1JUU19QT0lOVEVSP1NVUFBPUlRTX1BPSU5URVJfSUUxMD9cIk1TUG9pbnRlckNhbmNlbFwiOlwicG9pbnRlcmNhbmNlbFwiOlwidG91Y2hjYW5jZWxcIixkaXN0YW5jZT0wLGRpcmVjdGlvbj1udWxsLGN1cnJlbnREaXJlY3Rpb249bnVsbCxkdXJhdGlvbj0wLHN0YXJ0VG91Y2hlc0Rpc3RhbmNlPTAsZW5kVG91Y2hlc0Rpc3RhbmNlPTAscGluY2hab29tPTEscGluY2hEaXN0YW5jZT0wLHBpbmNoRGlyZWN0aW9uPTAsbWF4aW11bXNNYXA9bnVsbCwkZWxlbWVudD0kKGVsZW1lbnQpLHBoYXNlPVwic3RhcnRcIixmaW5nZXJDb3VudD0wLGZpbmdlckRhdGE9e30sc3RhcnRUaW1lPTAsZW5kVGltZT0wLHByZXZpb3VzVG91Y2hFbmRUaW1lPTAsZmluZ2VyQ291bnRBdFJlbGVhc2U9MCxkb3VibGVUYXBTdGFydFRpbWU9MCxzaW5nbGVUYXBUaW1lb3V0PW51bGwsaG9sZFRpbWVvdXQ9bnVsbDt0cnl7JGVsZW1lbnQub24oU1RBUlRfRVYsdG91Y2hTdGFydCksJGVsZW1lbnQub24oQ0FOQ0VMX0VWLHRvdWNoQ2FuY2VsKX1jYXRjaChlKXskLmVycm9yKFwiZXZlbnRzIG5vdCBzdXBwb3J0ZWQgXCIrU1RBUlRfRVYrXCIsXCIrQ0FOQ0VMX0VWK1wiIG9uIGpRdWVyeS5zd2lwZVwiKX10aGlzLmVuYWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGUoKSwkZWxlbWVudC5vbihTVEFSVF9FVix0b3VjaFN0YXJ0KSwkZWxlbWVudC5vbihDQU5DRUxfRVYsdG91Y2hDYW5jZWwpLCRlbGVtZW50fSx0aGlzLmRpc2FibGU9ZnVuY3Rpb24oKXtyZXR1cm4gcmVtb3ZlTGlzdGVuZXJzKCksJGVsZW1lbnR9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe3JlbW92ZUxpc3RlbmVycygpLCRlbGVtZW50LmRhdGEoUExVR0lOX05TLG51bGwpLCRlbGVtZW50PW51bGx9LHRoaXMub3B0aW9uPWZ1bmN0aW9uKHByb3BlcnR5LHZhbHVlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgcHJvcGVydHkpb3B0aW9ucz0kLmV4dGVuZChvcHRpb25zLHByb3BlcnR5KTtlbHNlIGlmKHZvaWQgMCE9PW9wdGlvbnNbcHJvcGVydHldKXtpZih2b2lkIDA9PT12YWx1ZSlyZXR1cm4gb3B0aW9uc1twcm9wZXJ0eV07b3B0aW9uc1twcm9wZXJ0eV09dmFsdWV9ZWxzZXtpZighcHJvcGVydHkpcmV0dXJuIG9wdGlvbnM7JC5lcnJvcihcIk9wdGlvbiBcIitwcm9wZXJ0eStcIiBkb2VzIG5vdCBleGlzdCBvbiBqUXVlcnkuc3dpcGUub3B0aW9uc1wiKX1yZXR1cm4gbnVsbH19dmFyIFZFUlNJT049XCIxLjYuMThcIixMRUZUPVwibGVmdFwiLFJJR0hUPVwicmlnaHRcIixVUD1cInVwXCIsRE9XTj1cImRvd25cIixJTj1cImluXCIsT1VUPVwib3V0XCIsTk9ORT1cIm5vbmVcIixBVVRPPVwiYXV0b1wiLFNXSVBFPVwic3dpcGVcIixQSU5DSD1cInBpbmNoXCIsVEFQPVwidGFwXCIsRE9VQkxFX1RBUD1cImRvdWJsZXRhcFwiLExPTkdfVEFQPVwibG9uZ3RhcFwiLEhPUklaT05UQUw9XCJob3Jpem9udGFsXCIsVkVSVElDQUw9XCJ2ZXJ0aWNhbFwiLEFMTF9GSU5HRVJTPVwiYWxsXCIsRE9VQkxFX1RBUF9USFJFU0hPTEQ9MTAsUEhBU0VfU1RBUlQ9XCJzdGFydFwiLFBIQVNFX01PVkU9XCJtb3ZlXCIsUEhBU0VfRU5EPVwiZW5kXCIsUEhBU0VfQ0FOQ0VMPVwiY2FuY2VsXCIsU1VQUE9SVFNfVE9VQ0g9XCJvbnRvdWNoc3RhcnRcImluIHdpbmRvdyxTVVBQT1JUU19QT0lOVEVSX0lFMTA9d2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkJiYhd2luZG93LlBvaW50ZXJFdmVudCYmIVNVUFBPUlRTX1RPVUNILFNVUFBPUlRTX1BPSU5URVI9KHdpbmRvdy5Qb2ludGVyRXZlbnR8fHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZCkmJiFTVVBQT1JUU19UT1VDSCxQTFVHSU5fTlM9XCJUb3VjaFN3aXBlXCIsZGVmYXVsdHM9e2ZpbmdlcnM6MSx0aHJlc2hvbGQ6NzUsY2FuY2VsVGhyZXNob2xkOm51bGwscGluY2hUaHJlc2hvbGQ6MjAsbWF4VGltZVRocmVzaG9sZDpudWxsLGZpbmdlclJlbGVhc2VUaHJlc2hvbGQ6MjUwLGxvbmdUYXBUaHJlc2hvbGQ6NTAwLGRvdWJsZVRhcFRocmVzaG9sZDoyMDAsc3dpcGU6bnVsbCxzd2lwZUxlZnQ6bnVsbCxzd2lwZVJpZ2h0Om51bGwsc3dpcGVVcDpudWxsLHN3aXBlRG93bjpudWxsLHN3aXBlU3RhdHVzOm51bGwscGluY2hJbjpudWxsLHBpbmNoT3V0Om51bGwscGluY2hTdGF0dXM6bnVsbCxjbGljazpudWxsLHRhcDpudWxsLGRvdWJsZVRhcDpudWxsLGxvbmdUYXA6bnVsbCxob2xkOm51bGwsdHJpZ2dlck9uVG91Y2hFbmQ6ITAsdHJpZ2dlck9uVG91Y2hMZWF2ZTohMSxhbGxvd1BhZ2VTY3JvbGw6XCJhdXRvXCIsZmFsbGJhY2tUb01vdXNlRXZlbnRzOiEwLGV4Y2x1ZGVkRWxlbWVudHM6XCIubm9Td2lwZVwiLHByZXZlbnREZWZhdWx0RXZlbnRzOiEwfTskLmZuLnN3aXBlPWZ1bmN0aW9uKG1ldGhvZCl7dmFyICR0aGlzPSQodGhpcykscGx1Z2luPSR0aGlzLmRhdGEoUExVR0lOX05TKTtpZihwbHVnaW4mJlwic3RyaW5nXCI9PXR5cGVvZiBtZXRob2Qpe2lmKHBsdWdpblttZXRob2RdKXJldHVybiBwbHVnaW5bbWV0aG9kXS5hcHBseShwbHVnaW4sQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKTskLmVycm9yKFwiTWV0aG9kIFwiK21ldGhvZCtcIiBkb2VzIG5vdCBleGlzdCBvbiBqUXVlcnkuc3dpcGVcIil9ZWxzZSBpZihwbHVnaW4mJlwib2JqZWN0XCI9PXR5cGVvZiBtZXRob2QpcGx1Z2luLm9wdGlvbi5hcHBseShwbHVnaW4sYXJndW1lbnRzKTtlbHNlIGlmKCEocGx1Z2lufHxcIm9iamVjdFwiIT10eXBlb2YgbWV0aG9kJiZtZXRob2QpKXJldHVybiBpbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gJHRoaXN9LCQuZm4uc3dpcGUudmVyc2lvbj1WRVJTSU9OLCQuZm4uc3dpcGUuZGVmYXVsdHM9ZGVmYXVsdHMsJC5mbi5zd2lwZS5waGFzZXM9e1BIQVNFX1NUQVJUOlBIQVNFX1NUQVJULFBIQVNFX01PVkU6UEhBU0VfTU9WRSxQSEFTRV9FTkQ6UEhBU0VfRU5ELFBIQVNFX0NBTkNFTDpQSEFTRV9DQU5DRUx9LCQuZm4uc3dpcGUuZGlyZWN0aW9ucz17TEVGVDpMRUZULFJJR0hUOlJJR0hULFVQOlVQLERPV046RE9XTixJTjpJTixPVVQ6T1VUfSwkLmZuLnN3aXBlLnBhZ2VTY3JvbGw9e05PTkU6Tk9ORSxIT1JJWk9OVEFMOkhPUklaT05UQUwsVkVSVElDQUw6VkVSVElDQUwsQVVUTzpBVVRPfSwkLmZuLnN3aXBlLmZpbmdlcnM9e09ORToxLFRXTzoyLFRIUkVFOjMsRk9VUjo0LEZJVkU6NSxBTEw6QUxMX0ZJTkdFUlN9fSk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgcHJlc3Rhc2hvcCBmcm9tICdwcmVzdGFzaG9wJztcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmNvbnN0IHBhc3N3b3JkUG9saWN5ID0ge1xuICB0ZW1wbGF0ZTogJyNwYXNzd29yZC1mZWVkYmFjaycsXG4gIGhpbnQ6ICcuanMtaGludC1wYXNzd29yZCcsXG4gIGNvbnRhaW5lcjogJy5wYXNzd29yZC1zdHJlbmd0aC1mZWVkYmFjaycsXG4gIHN0cmVuZ3RoVGV4dDogJy5wYXNzd29yZC1zdHJlbmd0aC10ZXh0JyxcbiAgcmVxdWlyZW1lbnRTY29yZTogJy5wYXNzd29yZC1yZXF1aXJlbWVudHMtc2NvcmUnLFxuICByZXF1aXJlbWVudExlbmd0aDogJy5wYXNzd29yZC1yZXF1aXJlbWVudHMtbGVuZ3RoJyxcbiAgcmVxdWlyZW1lbnRTY29yZUljb246ICcucGFzc3dvcmQtcmVxdWlyZW1lbnRzLXNjb3JlIGknLFxuICByZXF1aXJlbWVudExlbmd0aEljb246ICcucGFzc3dvcmQtcmVxdWlyZW1lbnRzLWxlbmd0aCBpJyxcbiAgcHJvZ3Jlc3NCYXI6ICcucHJvZ3Jlc3MtYmFyJyxcbiAgaW5wdXRDb2x1bW46ICcuanMtaW5wdXQtY29sdW1uJyxcbn07XG5cbnByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMgPSB7XG4gIHByb2R1Y3Q6IHtcbiAgICB0YWJzOiAnLnRhYnMgLm5hdi1saW5rJyxcbiAgICBhY3RpdmVOYXZDbGFzczogJ2pzLXByb2R1Y3QtbmF2LWFjdGl2ZScsXG4gICAgYWN0aXZlVGFiQ2xhc3M6ICdqcy1wcm9kdWN0LXRhYi1hY3RpdmUnLFxuICAgIGFjdGl2ZVRhYnM6ICcudGFicyAubmF2LWxpbmsuYWN0aXZlLCAuanMtcHJvZHVjdC1uYXYtYWN0aXZlJyxcbiAgICBpbWFnZXNNb2RhbDogJy5qcy1wcm9kdWN0LWltYWdlcy1tb2RhbCcsXG4gICAgdGh1bWI6ICcuanMtdGh1bWInLFxuICAgIHRodW1iQ29udGFpbmVyOiAnLnRodW1iLWNvbnRhaW5lciwgLmpzLXRodW1iLWNvbnRhaW5lcicsXG4gICAgYXJyb3dzOiAnLmpzLWFycm93cycsXG4gICAgc2VsZWN0ZWQ6ICcuc2VsZWN0ZWQsIC5qcy10aHVtYi1zZWxlY3RlZCcsXG4gICAgbW9kYWxQcm9kdWN0Q292ZXI6ICcuanMtbW9kYWwtcHJvZHVjdC1jb3ZlcicsXG4gICAgY292ZXI6ICcuanMtcXYtcHJvZHVjdC1jb3ZlcicsXG4gICAgY3VzdG9taXphdGlvbk1vZGFsOiAnLmpzLWN1c3RvbWl6YXRpb24tbW9kYWwnLFxuICB9LFxuICBsaXN0aW5nOiB7XG4gICAgc2VhcmNoRmlsdGVyVG9nZ2xlcjogJyNzZWFyY2hfZmlsdGVyX3RvZ2dsZXIsIC5qcy1zZWFyY2gtdG9nZ2xlcicsXG4gICAgc2VhcmNoRmlsdGVyc1dyYXBwZXI6ICcjc2VhcmNoX2ZpbHRlcnNfd3JhcHBlcicsXG4gICAgc2VhcmNoRmlsdGVyQ29udHJvbHM6ICcjc2VhcmNoX2ZpbHRlcl9jb250cm9scycsXG4gICAgc2VhcmNoRmlsdGVyczogJyNzZWFyY2hfZmlsdGVycycsXG4gICAgYWN0aXZlU2VhcmNoRmlsdGVyczogJyNqcy1hY3RpdmUtc2VhcmNoLWZpbHRlcnMnLFxuICAgIGxpc3RUb3A6ICcjanMtcHJvZHVjdC1saXN0LXRvcCcsXG4gICAgcHJvZHVjdDogJy5qcy1wcm9kdWN0JyxcbiAgICBsaXN0OiAnI2pzLXByb2R1Y3QtbGlzdCcsXG4gICAgbGlzdEJvdHRvbTogJyNqcy1wcm9kdWN0LWxpc3QtYm90dG9tJyxcbiAgICBsaXN0SGVhZGVyOiAnI2pzLXByb2R1Y3QtbGlzdC1oZWFkZXInLFxuICAgIHNlYXJjaEZpbHRlcnNDbGVhckFsbDogJy5qcy1zZWFyY2gtZmlsdGVycy1jbGVhci1hbGwnLFxuICAgIHNlYXJjaExpbms6ICcuanMtc2VhcmNoLWxpbmsnLFxuICB9LFxuICBvcmRlcjoge1xuICAgIHJldHVybkZvcm06ICcjb3JkZXItcmV0dXJuLWZvcm0sIC5qcy1vcmRlci1yZXR1cm4tZm9ybScsXG4gIH0sXG4gIGFycm93RG93bjogJy5hcnJvdy1kb3duLCAuanMtYXJyb3ctZG93bicsXG4gIGFycm93VXA6ICcuYXJyb3ctdXAsIC5qcy1hcnJvdy11cCcsXG4gIGNsZWFyOiAnLmNsZWFyJyxcbiAgZmlsZUlucHV0OiAnLmpzLWZpbGUtaW5wdXQnLFxuICBjb250ZW50V3JhcHBlcjogJyNjb250ZW50LXdyYXBwZXIsIC5qcy1jb250ZW50LXdyYXBwZXInLFxuICBmb290ZXI6ICcjZm9vdGVyLCAuanMtZm9vdGVyJyxcbiAgbW9kYWxDb250ZW50OiAnLmpzLW1vZGFsLWNvbnRlbnQnLFxuICBtb2RhbDogJyNtb2RhbCwgLmpzLWNoZWNrb3V0LW1vZGFsJyxcbiAgdG91Y2hzcGluOiAnLmpzLXRvdWNoc3BpbicsXG4gIGNoZWNrb3V0OiB7XG4gICAgdGVybXNMaW5rOiAnLmpzLXRlcm1zIGEnLFxuICAgIGdpZnRDaGVja2JveDogJy5qcy1naWZ0LWNoZWNrYm94JyxcbiAgICBpbWFnZXNMaW5rOiAnLmNhcmQtYmxvY2sgLmNhcnQtc3VtbWFyeS1wcm9kdWN0cyBwIGEsIC5qcy1zaG93LWRldGFpbHMnLFxuICAgIGNhcnJpZXJFeHRyYUNvbnRlbnQ6ICcuY2Fycmllci1leHRyYS1jb250ZW50LCAuanMtY2Fycmllci1leHRyYS1jb250ZW50JyxcbiAgICBidG46ICcuY2hlY2tvdXQgYScsXG4gIH0sXG4gIGNhcnQ6IHtcbiAgICBwcm9kdWN0TGluZVF0eTogJy5qcy1jYXJ0LWxpbmUtcHJvZHVjdC1xdWFudGl0eScsXG4gICAgcXVpY2t2aWV3OiAnLnF1aWNrdmlldycsXG4gICAgdG91Y2hzcGluOiAnLmJvb3RzdHJhcC10b3VjaHNwaW4nLFxuICAgIHByb21vQ29kZTogJyNwcm9tby1jb2RlJyxcbiAgICBkaXNwbGF5UHJvbW86ICcuZGlzcGxheS1wcm9tbycsXG4gICAgcHJvbW9Db2RlQnV0dG9uOiAnLnByb21vLWNvZGUtYnV0dG9uJyxcbiAgICBkaXNjb3VudENvZGU6ICcuanMtZGlzY291bnQgLmNvZGUnLFxuICAgIGRpc2NvdW50TmFtZTogJ1tuYW1lPWRpc2NvdW50X25hbWVdJyxcbiAgICBhY3Rpb25zOiAnW2RhdGEtbGluay1hY3Rpb249XCJkZWxldGUtZnJvbS1jYXJ0XCJdLCBbZGF0YS1saW5rLWFjdGlvbj1cInJlbW92ZS12b3VjaGVyXCJdJyxcbiAgfSxcbiAgbm90aWZpY2F0aW9uczoge1xuICAgIGRhbmdlckFsZXJ0OiAnI25vdGlmaWNhdGlvbnMgYXJ0aWNsZS5hbGVydC1kYW5nZXInLFxuICAgIGNvbnRhaW5lcjogJyNub3RpZmljYXRpb25zIC5ub3RpZmljYXRpb25zLWNvbnRhaW5lcicsXG4gIH0sXG4gIHBhc3N3b3JkUG9saWN5LFxufTtcblxuJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICBwcmVzdGFzaG9wLmVtaXQoJ3RoZW1lU2VsZWN0b3JzSW5pdCcpO1xufSk7XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknXG5cbnZhciBzaW1wbGV0YWJzcGx1Z2lubmFtZSA9ICdzaW1wbGV0YWJzJ1xuZnVuY3Rpb24gU2ltcGxlVGFic1BsdWdpbihlbGVtZW50LCBvcHRpb25zKSB7XG4gIHRoaXMuJGVsID0gJChlbGVtZW50KVxuICB0aGlzLiR0YWJzID0gW11cbiAgdGhpcy5pbml0KClcbn1cblxuJC5leHRlbmQoU2ltcGxlVGFic1BsdWdpbi5wcm90b3R5cGUsIHtcbiAgaW5pdCgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICB0aGlzLiR0YWJzID0gW11cbiAgICB0aGlzLiRlbC5maW5kKCd1bCA+IGxpID4gYScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgJGEgPSAkKHRoaXMpXG4gICAgICB2YXIgaWQgPSAkYS5hdHRyKCdocmVmJylcbiAgICAgIGlmICggaWQuc3RhcnRzV2l0aCgnIycpICkge1xuICAgICAgICBpZCA9IGlkLnJlcGxhY2UoJyMnLCAnJylcbiAgICAgICAgdmFyIGV4aXN0cyA9IHNlbGYuJHRhYnMuZmluZChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnQgPT09IGlkXG4gICAgICAgIH0pXG4gICAgICAgIHZhciBjb250ZW50c2VsZWN0b3IgPSAnIycgKyBpZCArICcudGFicy1jb250ZW50J1xuICAgICAgICB2YXIgY29udGVudCA9IHNlbGYuJGVsLmZpbmQoY29udGVudHNlbGVjdG9yKVxuICAgICAgICBpZiAoIGV4aXN0cyApIHtcbiAgICAgICAgICBleGlzdHMudGFiID0gJGFcbiAgICAgICAgICBleGlzdHMuY29udGVudCA9IGNvbnRlbnRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxmLiR0YWJzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgdGFiOiAkYSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICBzZWxmLiR0YWJzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgaWYgKCFlbGVtZW50LnRhYi5oYXNDbGFzcygnYWN0aXZlJykpIHtcbiAgICAgICAgc2VsZi5oaWRlKGVsZW1lbnQuaWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLnNob3coZWxlbWVudC5pZClcbiAgICAgIH1cblxuICAgICAgZWxlbWVudC50YWIuY2xpY2soZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBzZWxmLnNob3coZWxlbWVudC5pZClcbiAgICAgIH0pXG4gICAgfSlcbiAgfSxcbiAgc2hvdyhpZCkge1xuICAgIHZhciBzZWxmID0gdGhpc1xuICAgIHRoaXMuJHRhYnMuZm9yRWFjaChmdW5jdGlvbiggZWxlbWVudCApIHtcbiAgICAgIHNlbGYuaGlkZShlbGVtZW50LmlkKVxuICAgICAgaWYgKCBlbGVtZW50LmlkID09PSBpZCApIHtcbiAgICAgICAgZWxlbWVudC50YWIuYWRkQ2xhc3MoJ2FjdGl2ZScpLmFkZENsYXNzKCdmb250LWJvbGQnKVxuICAgICAgICBlbGVtZW50LmNvbnRlbnQucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcbiAgaGlkZShpZCkge1xuICAgIHRoaXMuJHRhYnMuZm9yRWFjaChmdW5jdGlvbiggZWxlbWVudCApIHtcbiAgICAgIGlmICggZWxlbWVudC5pZCA9PT0gaWQgKSB7XG4gICAgICAgIGVsZW1lbnQudGFiLnJlbW92ZUNsYXNzKCdhY3RpdmUnKS5yZW1vdmVDbGFzcygnZm9udC1ib2xkJylcbiAgICAgICAgZWxlbWVudC5jb250ZW50LmFkZENsYXNzKCdoaWRkZW4nKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG59KVxuXG4kLmZuLnNpbXBsZXRhYnMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICBpZiAoICEkLmRhdGEodGhpcywgJ3BsdWdpbl8nICsgc2ltcGxldGFic3BsdWdpbm5hbWUpKSB7XG4gICAgICAkLmRhdGEodGhpcywgJ3BsdWdpbl8nICsgc2ltcGxldGFic3BsdWdpbm5hbWUsIG5ldyBTaW1wbGVUYWJzUGx1Z2luKHRoaXMsIG9wdGlvbnMpKVxuICAgIH1cbiAgfSlcbn1cblxuXG4iLCIoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbJ2pxdWVyeSddLCBmdW5jdGlvbigkKXtcbiAgICAgICAgICAgIGZhY3RvcnkoJCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSBpZih0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IChyb290LkVhc3lab29tID0gZmFjdG9yeShyZXF1aXJlKCdqcXVlcnknKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuRWFzeVpvb20gPSBmYWN0b3J5KHJvb3QualF1ZXJ5KTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uICgkKSB7XG5cbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgem9vbUltZ092ZXJsYXBYO1xuICAgIHZhciB6b29tSW1nT3ZlcmxhcFk7XG4gICAgdmFyIHJhdGlvWDtcbiAgICB2YXIgcmF0aW9ZO1xuICAgIHZhciBwb2ludGVyUG9zaXRpb25YO1xuICAgIHZhciBwb2ludGVyUG9zaXRpb25ZO1xuXG4gICAgdmFyIGRlZmF1bHRzID0ge1xuXG4gICAgICAgIC8vIFRoZSB0ZXh0IHRvIGRpc3BsYXkgd2l0aGluIHRoZSBub3RpY2UgYm94IHdoaWxlIGxvYWRpbmcgdGhlIHpvb20gaW1hZ2UuXG4gICAgICAgIGxvYWRpbmdOb3RpY2U6ICdMb2FkaW5nIGltYWdlJyxcblxuICAgICAgICAvLyBUaGUgdGV4dCB0byBkaXNwbGF5IHdpdGhpbiB0aGUgbm90aWNlIGJveCBpZiBhbiBlcnJvciBvY2N1cnMgd2hlbiBsb2FkaW5nIHRoZSB6b29tIGltYWdlLlxuICAgICAgICBlcnJvck5vdGljZTogJ1RoZSBpbWFnZSBjb3VsZCBub3QgYmUgbG9hZGVkJyxcblxuICAgICAgICAvLyBUaGUgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSB0byBkaXNwbGF5IHRoZSBlcnJvciBub3RpY2UuXG4gICAgICAgIGVycm9yRHVyYXRpb246IDI1MDAsXG5cbiAgICAgICAgLy8gQXR0cmlidXRlIHRvIHJldHJpZXZlIHRoZSB6b29tIGltYWdlIFVSTCBmcm9tLlxuICAgICAgICBsaW5rQXR0cmlidXRlOiAnaHJlZicsXG5cbiAgICAgICAgLy8gUHJldmVudCBjbGlja3Mgb24gdGhlIHpvb20gaW1hZ2UgbGluay5cbiAgICAgICAgcHJldmVudENsaWNrczogdHJ1ZSxcblxuICAgICAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIGJlZm9yZSB0aGUgZmx5b3V0IGlzIGRpc3BsYXllZC5cbiAgICAgICAgYmVmb3JlU2hvdzogJC5ub29wLFxuXG4gICAgICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYmVmb3JlIHRoZSBmbHlvdXQgaXMgcmVtb3ZlZC5cbiAgICAgICAgYmVmb3JlSGlkZTogJC5ub29wLFxuXG4gICAgICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZmx5b3V0IGlzIGRpc3BsYXllZC5cbiAgICAgICAgb25TaG93OiAkLm5vb3AsXG5cbiAgICAgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBmbHlvdXQgaXMgcmVtb3ZlZC5cbiAgICAgICAgb25IaWRlOiAkLm5vb3AsXG5cbiAgICAgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBjdXJzb3IgaXMgbW92ZWQgd2hpbGUgb3ZlciB0aGUgaW1hZ2UuXG4gICAgICAgIG9uTW92ZTogJC5ub29wXG5cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRWFzeVpvb21cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgKE9wdGlvbmFsKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIEVhc3lab29tKHRhcmdldCwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLiR0YXJnZXQgPSAkKHRhcmdldCk7XG4gICAgICAgIHRoaXMub3B0cyA9ICQuZXh0ZW5kKHt9LCBkZWZhdWx0cywgb3B0aW9ucywgdGhpcy4kdGFyZ2V0LmRhdGEoKSk7XG5cbiAgICAgICAgdGhpcy5pc09wZW4gPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9pbml0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJGxpbmsgICA9IHRoaXMuJHRhcmdldC5maW5kKCdhJyk7XG4gICAgICAgIHRoaXMuJGltYWdlICA9IHRoaXMuJHRhcmdldC5maW5kKCdpbWcnKTtcblxuICAgICAgICB0aGlzLiRmbHlvdXQgPSAkKCc8ZGl2IGNsYXNzPVwiZWFzeXpvb20tZmx5b3V0XCIgLz4nKTtcbiAgICAgICAgdGhpcy4kbm90aWNlID0gJCgnPGRpdiBjbGFzcz1cImVhc3l6b29tLW5vdGljZVwiIC8+Jyk7XG5cbiAgICAgICAgdGhpcy4kdGFyZ2V0Lm9uKHtcbiAgICAgICAgICAgICdtb3VzZW1vdmUuZWFzeXpvb20gdG91Y2htb3ZlLmVhc3l6b29tJzogJC5wcm94eSh0aGlzLl9vbk1vdmUsIHRoaXMpLFxuICAgICAgICAgICAgJ21vdXNlbGVhdmUuZWFzeXpvb20gdG91Y2hlbmQuZWFzeXpvb20nOiAkLnByb3h5KHRoaXMuX29uTGVhdmUsIHRoaXMpLFxuICAgICAgICAgICAgJ21vdXNlZW50ZXIuZWFzeXpvb20gdG91Y2hzdGFydC5lYXN5em9vbSc6ICQucHJveHkodGhpcy5fb25FbnRlciwgdGhpcylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vcHRzLnByZXZlbnRDbGlja3MgJiYgdGhpcy4kdGFyZ2V0Lm9uKCdjbGljay5lYXN5em9vbScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNob3dcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR8VG91Y2hFdmVudH0gZVxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gdGVzdE1vdXNlT3ZlciAoT3B0aW9uYWwpXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbihlLCB0ZXN0TW91c2VPdmVyKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICBpZiAodGhpcy5vcHRzLmJlZm9yZVNob3cuY2FsbCh0aGlzKSA9PT0gZmFsc2UpIHJldHVybjtcblxuICAgICAgICBpZiAoIXRoaXMuaXNSZWFkeSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRJbWFnZSh0aGlzLiRsaW5rLmF0dHIodGhpcy5vcHRzLmxpbmtBdHRyaWJ1dGUpLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5pc01vdXNlT3ZlciB8fCAhdGVzdE1vdXNlT3Zlcikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNob3coZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiR0YXJnZXQuYXBwZW5kKHRoaXMuJGZseW91dCk7XG5cbiAgICAgICAgdmFyIHRhcmdldFdpZHRoID0gdGhpcy4kdGFyZ2V0Lm91dGVyV2lkdGgoKTtcbiAgICAgICAgdmFyIHRhcmdldEhlaWdodCA9IHRoaXMuJHRhcmdldC5vdXRlckhlaWdodCgpO1xuXG4gICAgICAgIHZhciBmbHlvdXRJbm5lcldpZHRoID0gdGhpcy4kZmx5b3V0LndpZHRoKCk7XG4gICAgICAgIHZhciBmbHlvdXRJbm5lckhlaWdodCA9IHRoaXMuJGZseW91dC5oZWlnaHQoKTtcblxuICAgICAgICB2YXIgem9vbUltZ1dpZHRoID0gdGhpcy4kem9vbS53aWR0aCgpO1xuICAgICAgICB2YXIgem9vbUltZ0hlaWdodCA9IHRoaXMuJHpvb20uaGVpZ2h0KCk7XG5cbiAgICAgICAgem9vbUltZ092ZXJsYXBYID0gTWF0aC5jZWlsKHpvb21JbWdXaWR0aCAtIGZseW91dElubmVyV2lkdGgpO1xuICAgICAgICB6b29tSW1nT3ZlcmxhcFkgPSBNYXRoLmNlaWwoem9vbUltZ0hlaWdodCAtIGZseW91dElubmVySGVpZ2h0KTtcblxuXG4gICAgICAgIC8vIEZvciB3aGVuIHRoZSB6b29tIGltYWdlIGlzIHNtYWxsZXIgdGhhbiB0aGUgZmx5b3V0IGVsZW1lbnQuXG4gICAgICAgIGlmICh6b29tSW1nT3ZlcmxhcFggPCAwKSB6b29tSW1nT3ZlcmxhcFggPSAwO1xuICAgICAgICBpZiAoem9vbUltZ092ZXJsYXBZIDwgMCkgem9vbUltZ092ZXJsYXBZID0gMDtcblxuICAgICAgICByYXRpb1ggPSB6b29tSW1nT3ZlcmxhcFggLyB0YXJnZXRXaWR0aDtcbiAgICAgICAgcmF0aW9ZID0gem9vbUltZ092ZXJsYXBZIC8gdGFyZ2V0SGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLm9wdHMub25TaG93LmNhbGwodGhpcyk7XG5cbiAgICAgICAgZSAmJiB0aGlzLl9tb3ZlKGUpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBPbiBlbnRlclxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5fb25FbnRlciA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIHRvdWNoZXMgPSBlLm9yaWdpbmFsRXZlbnQudG91Y2hlcztcblxuICAgICAgICB0aGlzLmlzTW91c2VPdmVyID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIXRvdWNoZXMgfHwgdG91Y2hlcy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5zaG93KGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9uIG1vdmVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICAgKi9cbiAgICBFYXN5Wm9vbS5wcm90b3R5cGUuX29uTW92ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbikgcmV0dXJuO1xuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fbW92ZShlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT24gbGVhdmVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5fb25MZWF2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmlzTW91c2VPdmVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNPcGVuICYmIHRoaXMuaGlkZSgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBPbiBsb2FkXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIC8vIElFIG1heSBmaXJlIGEgbG9hZCBldmVudCBldmVuIG9uIGVycm9yIHNvIHRlc3QgdGhlIGltYWdlIGRpbWVuc2lvbnNcbiAgICAgICAgaWYgKCFlLmN1cnJlbnRUYXJnZXQud2lkdGgpIHJldHVybjtcblxuICAgICAgICB0aGlzLmlzUmVhZHkgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuJG5vdGljZS5kZXRhY2goKTtcbiAgICAgICAgdGhpcy4kZmx5b3V0Lmh0bWwodGhpcy4kem9vbSk7XG4gICAgICAgIHRoaXMuJHRhcmdldC5yZW1vdmVDbGFzcygnaXMtbG9hZGluZycpLmFkZENsYXNzKCdpcy1yZWFkeScpO1xuXG4gICAgICAgIGUuZGF0YS5jYWxsICYmIGUuZGF0YSgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBPbiBlcnJvclxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICB0aGlzLiRub3RpY2UudGV4dCh0aGlzLm9wdHMuZXJyb3JOb3RpY2UpO1xuICAgICAgICB0aGlzLiR0YXJnZXQucmVtb3ZlQ2xhc3MoJ2lzLWxvYWRpbmcnKS5hZGRDbGFzcygnaXMtZXJyb3InKTtcblxuICAgICAgICB0aGlzLmRldGFjaE5vdGljZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBzZWxmLiRub3RpY2UuZGV0YWNoKCk7XG4gICAgICAgICAgICBzZWxmLmRldGFjaE5vdGljZSA9IG51bGw7XG4gICAgICAgIH0sIHRoaXMub3B0cy5lcnJvckR1cmF0aW9uKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTG9hZCBpbWFnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhyZWZcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24oaHJlZiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHpvb20gPSBuZXcgSW1hZ2UoKTtcblxuICAgICAgICB0aGlzLiR0YXJnZXRcbiAgICAgICAgICAgIC5hZGRDbGFzcygnaXMtbG9hZGluZycpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuJG5vdGljZS50ZXh0KHRoaXMub3B0cy5sb2FkaW5nTm90aWNlKSk7XG5cbiAgICAgICAgdGhpcy4kem9vbSA9ICQoem9vbSlcbiAgICAgICAgICAgIC5vbignZXJyb3InLCAkLnByb3h5KHRoaXMuX29uRXJyb3IsIHRoaXMpKVxuICAgICAgICAgICAgLm9uKCdsb2FkJywgY2FsbGJhY2ssICQucHJveHkodGhpcy5fb25Mb2FkLCB0aGlzKSk7XG5cbiAgICAgICAgem9vbS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgIHpvb20uc3JjID0gaHJlZjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTW92ZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5fbW92ZSA9IGZ1bmN0aW9uKGUpIHtcblxuICAgICAgICBpZiAoZS50eXBlLmluZGV4T2YoJ3RvdWNoJykgPT09IDApIHtcbiAgICAgICAgICAgIHZhciB0b3VjaGxpc3QgPSBlLnRvdWNoZXMgfHwgZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXM7XG4gICAgICAgICAgICBwb2ludGVyUG9zaXRpb25YID0gdG91Y2hsaXN0WzBdLnBhZ2VYO1xuICAgICAgICAgICAgcG9pbnRlclBvc2l0aW9uWSA9IHRvdWNobGlzdFswXS5wYWdlWTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvaW50ZXJQb3NpdGlvblggPSBlLnBhZ2VYIHx8IHBvaW50ZXJQb3NpdGlvblg7XG4gICAgICAgICAgICBwb2ludGVyUG9zaXRpb25ZID0gZS5wYWdlWSB8fCBwb2ludGVyUG9zaXRpb25ZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRhcmdldE9mZnNldCAgPSB0aGlzLiR0YXJnZXQub2Zmc2V0KCk7XG4gICAgICAgIHZhciByZWxhdGl2ZVBvc2l0aW9uWCA9IHBvaW50ZXJQb3NpdGlvblggLSB0YXJnZXRPZmZzZXQubGVmdDtcbiAgICAgICAgdmFyIHJlbGF0aXZlUG9zaXRpb25ZID0gcG9pbnRlclBvc2l0aW9uWSAtIHRhcmdldE9mZnNldC50b3A7XG4gICAgICAgIHZhciBtb3ZlWCA9IE1hdGguY2VpbChyZWxhdGl2ZVBvc2l0aW9uWCAqIHJhdGlvWCk7XG4gICAgICAgIHZhciBtb3ZlWSA9IE1hdGguY2VpbChyZWxhdGl2ZVBvc2l0aW9uWSAqIHJhdGlvWSk7XG5cbiAgICAgICAgLy8gQ2xvc2UgaWYgb3V0c2lkZVxuICAgICAgICBpZiAobW92ZVggPCAwIHx8IG1vdmVZIDwgMCB8fCBtb3ZlWCA+IHpvb21JbWdPdmVybGFwWCB8fCBtb3ZlWSA+IHpvb21JbWdPdmVybGFwWSkge1xuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdG9wID0gbW92ZVkgKiAtMTtcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gbW92ZVggKiAtMTtcblxuICAgICAgICAgICAgaWYgKCd0cmFuc2Zvcm0nIGluIGRvY3VtZW50LmJvZHkuc3R5bGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiR6b29tLmNzcyh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgnICsgbGVmdCArICdweCwgJyArIHRvcCArICdweCknIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiR6b29tLmNzcyh7IHRvcDogdG9wLCBsZWZ0OiBsZWZ0IH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9wdHMub25Nb3ZlLmNhbGwodGhpcywgdG9wLCBsZWZ0KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBIaWRlXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbikgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmJlZm9yZUhpZGUuY2FsbCh0aGlzKSA9PT0gZmFsc2UpIHJldHVybjtcblxuICAgICAgICB0aGlzLiRmbHlvdXQuZGV0YWNoKCk7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5vcHRzLm9uSGlkZS5jYWxsKHRoaXMpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTd2FwXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHN0YW5kYXJkU3JjXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHpvb21IcmVmXG4gICAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IHNyY3NldCAoT3B0aW9uYWwpXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLnN3YXAgPSBmdW5jdGlvbihzdGFuZGFyZFNyYywgem9vbUhyZWYsIHNyY3NldCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgdGhpcy5pc1JlYWR5ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5kZXRhY2hOb3RpY2UgJiYgY2xlYXJUaW1lb3V0KHRoaXMuZGV0YWNoTm90aWNlKTtcblxuICAgICAgICB0aGlzLiRub3RpY2UucGFyZW50KCkubGVuZ3RoICYmIHRoaXMuJG5vdGljZS5kZXRhY2goKTtcblxuICAgICAgICB0aGlzLiR0YXJnZXQucmVtb3ZlQ2xhc3MoJ2lzLWxvYWRpbmcgaXMtcmVhZHkgaXMtZXJyb3InKTtcblxuICAgICAgICB0aGlzLiRpbWFnZS5hdHRyKHtcbiAgICAgICAgICAgIHNyYzogc3RhbmRhcmRTcmMsXG4gICAgICAgICAgICBzcmNzZXQ6ICQuaXNBcnJheShzcmNzZXQpID8gc3Jjc2V0LmpvaW4oKSA6IHNyY3NldFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiRsaW5rLmF0dHIodGhpcy5vcHRzLmxpbmtBdHRyaWJ1dGUsIHpvb21IcmVmKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGVhcmRvd25cbiAgICAgKi9cbiAgICBFYXN5Wm9vbS5wcm90b3R5cGUudGVhcmRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG5cbiAgICAgICAgdGhpcy4kdGFyZ2V0XG4gICAgICAgICAgICAub2ZmKCcuZWFzeXpvb20nKVxuICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdpcy1sb2FkaW5nIGlzLXJlYWR5IGlzLWVycm9yJyk7XG5cbiAgICAgICAgdGhpcy5kZXRhY2hOb3RpY2UgJiYgY2xlYXJUaW1lb3V0KHRoaXMuZGV0YWNoTm90aWNlKTtcblxuICAgICAgICBkZWxldGUgdGhpcy4kbGluaztcbiAgICAgICAgZGVsZXRlIHRoaXMuJHpvb207XG4gICAgICAgIGRlbGV0ZSB0aGlzLiRpbWFnZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuJG5vdGljZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuJGZseW91dDtcblxuICAgICAgICBkZWxldGUgdGhpcy5pc09wZW47XG4gICAgICAgIGRlbGV0ZSB0aGlzLmlzUmVhZHk7XG4gICAgfTtcblxuICAgIC8vIGpRdWVyeSBwbHVnaW4gd3JhcHBlclxuICAgICQuZm4uZWFzeVpvb20gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgYXBpID0gJC5kYXRhKHRoaXMsICdlYXN5Wm9vbScpO1xuXG4gICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgICQuZGF0YSh0aGlzLCAnZWFzeVpvb20nLCBuZXcgRWFzeVpvb20odGhpcywgb3B0aW9ucykpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhcGkuaXNPcGVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhcGkuX2luaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBFYXN5Wm9vbTtcbn0pKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBwcmVzdGFzaG9wIGZyb20gJ3ByZXN0YXNob3AnO1xuXG5wcmVzdGFzaG9wLnJlc3BvbnNpdmUgPSBwcmVzdGFzaG9wLnJlc3BvbnNpdmUgfHwge307XG5cbnByZXN0YXNob3AucmVzcG9uc2l2ZS5jdXJyZW50X3dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG5wcmVzdGFzaG9wLnJlc3BvbnNpdmUubWluX3dpZHRoID0gNzY4O1xucHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1vYmlsZSA9IHByZXN0YXNob3AucmVzcG9uc2l2ZS5jdXJyZW50X3dpZHRoIDwgcHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1pbl93aWR0aDtcblxuZnVuY3Rpb24gc3dhcENoaWxkcmVuKG9iajEsIG9iajIpIHtcbiAgY29uc3QgdGVtcCA9IG9iajIuY2hpbGRyZW4oKS5kZXRhY2goKTtcbiAgb2JqMi5lbXB0eSgpLmFwcGVuZChvYmoxLmNoaWxkcmVuKCkuZGV0YWNoKCkpO1xuICBvYmoxLmFwcGVuZCh0ZW1wKTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlTW9iaWxlU3R5bGVzKCkge1xuICBpZiAocHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1vYmlsZSkge1xuICAgICQoXCIqW2lkXj0nX2Rlc2t0b3BfJ11cIikuZWFjaCgoaWR4LCBlbCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gJChgIyR7ZWwuaWQucmVwbGFjZSgnX2Rlc2t0b3BfJywgJ19tb2JpbGVfJyl9YCk7XG5cbiAgICAgIGlmICh0YXJnZXQubGVuZ3RoKSB7XG4gICAgICAgIHN3YXBDaGlsZHJlbigkKGVsKSwgdGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAkKFwiKltpZF49J19tb2JpbGVfJ11cIikuZWFjaCgoaWR4LCBlbCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gJChgIyR7ZWwuaWQucmVwbGFjZSgnX21vYmlsZV8nLCAnX2Rlc2t0b3BfJyl9YCk7XG5cbiAgICAgIGlmICh0YXJnZXQubGVuZ3RoKSB7XG4gICAgICAgIHN3YXBDaGlsZHJlbigkKGVsKSwgdGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBwcmVzdGFzaG9wLmVtaXQoJ3Jlc3BvbnNpdmUgdXBkYXRlJywge1xuICAgIG1vYmlsZTogcHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1vYmlsZSxcbiAgfSk7XG59XG5cbiQod2luZG93KS5vbigncmVzaXplJywgKCkgPT4ge1xuICBjb25zdCBjdyA9IHByZXN0YXNob3AucmVzcG9uc2l2ZS5jdXJyZW50X3dpZHRoO1xuICBjb25zdCBtdyA9IHByZXN0YXNob3AucmVzcG9uc2l2ZS5taW5fd2lkdGg7XG4gIGNvbnN0IHcgPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgY29uc3QgdG9nZ2xlID0gKGN3ID49IG13ICYmIHcgPCBtdykgfHwgKGN3IDwgbXcgJiYgdyA+PSBtdyk7XG5cbiAgcHJlc3Rhc2hvcC5yZXNwb25zaXZlLmN1cnJlbnRfd2lkdGggPSB3O1xuICBwcmVzdGFzaG9wLnJlc3BvbnNpdmUubW9iaWxlID0gcHJlc3Rhc2hvcC5yZXNwb25zaXZlLmN1cnJlbnRfd2lkdGggPCBwcmVzdGFzaG9wLnJlc3BvbnNpdmUubWluX3dpZHRoO1xuICBpZiAodG9nZ2xlKSB7XG4gICAgdG9nZ2xlTW9iaWxlU3R5bGVzKCk7XG4gIH1cbn0pO1xuXG4kKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gIGlmIChwcmVzdGFzaG9wLnJlc3BvbnNpdmUubW9iaWxlKSB7XG4gICAgdG9nZ2xlTW9iaWxlU3R5bGVzKCk7XG4gIH1cbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHByZXN0YXNob3AgZnJvbSAncHJlc3Rhc2hvcCc7XG5cbmZ1bmN0aW9uIHNldFVwQ2hlY2tvdXQoKSB7XG4gICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jaGVja291dC50ZXJtc0xpbmspLm9uKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IHVybCA9ICQoZXZlbnQudGFyZ2V0KS5hdHRyKCdocmVmJyk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICAvLyBUT0RPOiBIYW5kbGUgcmVxdWVzdCBpZiBubyBwcmV0dHkgVVJMXG4gICAgICB1cmwgKz0gJz9jb250ZW50X29ubHk9MSc7XG4gICAgICAkLmdldCh1cmwsIChjb250ZW50KSA9PiB7XG4gICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5tb2RhbClcbiAgICAgICAgICAuZmluZChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLm1vZGFsQ29udGVudClcbiAgICAgICAgICAuaHRtbCgkKGNvbnRlbnQpLmZpbmQoJy5wYWdlLWNtcycpLmNvbnRlbnRzKCkpO1xuICAgICAgfSkuZmFpbCgocmVzcCkgPT4ge1xuICAgICAgICBwcmVzdGFzaG9wLmVtaXQoJ2hhbmRsZUVycm9yJywge2V2ZW50VHlwZTogJ2NsaWNrVGVybXMnLCByZXNwfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubW9kYWwpLm1vZGFsKCdzaG93Jyk7XG4gIH0pO1xuXG4gICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jaGVja291dC5naWZ0Q2hlY2tib3gpLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAkKCcjZ2lmdCcpLnNsaWRlVG9nZ2xlKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB0b2dnbGVJbWFnZSgpIHtcbiAgLy8gQXJyb3cgc2hvdy9oaWRlIGRldGFpbHMgQ2hlY2tvdXQgcGFnZVxuICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2hlY2tvdXQuaW1hZ2VzTGluaykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGljb24gPSAkKHRoaXMpLmZpbmQoJ2kubWF0ZXJpYWwtaWNvbnMnKTtcblxuICAgIGlmIChpY29uLnRleHQoKSA9PT0gJ2V4cGFuZF9tb3JlJykge1xuICAgICAgaWNvbi50ZXh0KCdleHBhbmRfbGVzcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpY29uLnRleHQoJ2V4cGFuZF9tb3JlJyk7XG4gICAgfVxuICB9KTtcbn1cblxuJChmdW5jdGlvbigpIHtcbiAgaWYgKCQoJ2JvZHkjY2hlY2tvdXQnKS5sZW5ndGggPT09IDEpIHtcbiAgICBzZXRVcENoZWNrb3V0KCk7XG4gICAgdG9nZ2xlSW1hZ2UoKTtcbiAgfVxuXG4gICQoJy50YWJzJykuc2ltcGxldGFicygpXG5cbiAgcHJlc3Rhc2hvcC5vbigndXBkYXRlZERlbGl2ZXJ5Rm9ybScsIChwYXJhbXMpID0+IHtcbiAgICBpZiAodHlwZW9mIHBhcmFtcy5kZWxpdmVyeU9wdGlvbiA9PT0gJ3VuZGVmaW5lZCcgfHwgcGFyYW1zLmRlbGl2ZXJ5T3B0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBIaWRlIGFsbCBjYXJyaWVyIGV4dHJhIGNvbnRlbnQgLi4uXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNoZWNrb3V0LmNhcnJpZXJFeHRyYUNvbnRlbnQpLmhpZGUoKTtcbiAgICAvLyBhbmQgc2hvdyB0aGUgb25lIHJlbGF0ZWQgdG8gdGhlIHNlbGVjdGVkIGNhcnJpZXJcbiAgICBwYXJhbXMuZGVsaXZlcnlPcHRpb24ubmV4dChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNoZWNrb3V0LmNhcnJpZXJFeHRyYUNvbnRlbnQpLnNsaWRlRG93bigpO1xuICB9KTtcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHByZXN0YXNob3AgZnJvbSAncHJlc3Rhc2hvcCc7XG5cbmZ1bmN0aW9uIGluaXRSbWFJdGVtU2VsZWN0b3IoKSB7XG4gICQoYCR7cHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5vcmRlci5yZXR1cm5Gb3JtfSB0YWJsZSB0aGVhZCBpbnB1dFt0eXBlPWNoZWNrYm94XWApLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjaGVja2VkID0gJCh0aGlzKS5wcm9wKCdjaGVja2VkJyk7XG4gICAgJChgJHtwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLm9yZGVyLnJldHVybkZvcm19IHRhYmxlIHRib2R5IGlucHV0W3R5cGU9Y2hlY2tib3hdYCkuZWFjaCgoXywgY2hlY2tib3gpID0+IHtcbiAgICAgICQoY2hlY2tib3gpLnByb3AoJ2NoZWNrZWQnLCBjaGVja2VkKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldHVwQ3VzdG9tZXJTY3JpcHRzKCkge1xuICBpZiAoJCgnYm9keSNvcmRlci1kZXRhaWwnKSkge1xuICAgIGluaXRSbWFJdGVtU2VsZWN0b3IoKTtcbiAgfVxufVxuXG4kKGRvY3VtZW50KS5yZWFkeShzZXR1cEN1c3RvbWVyU2NyaXB0cyk7XG4iLCIvKiEgVmVsb2NpdHlKUy5vcmcgKDEuNS4yKS4gKEMpIDIwMTQgSnVsaWFuIFNoYXBpcm8uIE1JVCBAbGljZW5zZTogZW4ud2lraXBlZGlhLm9yZy93aWtpL01JVF9MaWNlbnNlICovXHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gVmVsb2NpdHkgalF1ZXJ5IFNoaW1cclxuICoqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG4vKiEgVmVsb2NpdHlKUy5vcmcgalF1ZXJ5IFNoaW0gKDEuMC4xKS4gKEMpIDIwMTQgVGhlIGpRdWVyeSBGb3VuZGF0aW9uLiBNSVQgQGxpY2Vuc2U6IGVuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZS4gKi9cclxuXHJcbi8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgalF1ZXJ5IGZ1bmN0aW9ucyB0aGF0IFZlbG9jaXR5IHJlbGllcyBvbiwgdGhlcmVieSByZW1vdmluZyBWZWxvY2l0eSdzIGRlcGVuZGVuY3kgb24gYSBmdWxsIGNvcHkgb2YgalF1ZXJ5LCBhbmQgYWxsb3dpbmcgaXQgdG8gd29yayBpbiBhbnkgZW52aXJvbm1lbnQuICovXHJcbi8qIFRoZXNlIHNoaW1tZWQgZnVuY3Rpb25zIGFyZSBvbmx5IHVzZWQgaWYgalF1ZXJ5IGlzbid0IHByZXNlbnQuIElmIGJvdGggdGhpcyBzaGltIGFuZCBqUXVlcnkgYXJlIGxvYWRlZCwgVmVsb2NpdHkgZGVmYXVsdHMgdG8galF1ZXJ5IHByb3Blci4gKi9cclxuLyogQnJvd3NlciBzdXBwb3J0OiBVc2luZyB0aGlzIHNoaW0gaW5zdGVhZCBvZiBqUXVlcnkgcHJvcGVyIHJlbW92ZXMgc3VwcG9ydCBmb3IgSUU4LiAqL1xyXG5cclxuKGZ1bmN0aW9uKHdpbmRvdykge1xyXG5cdFwidXNlIHN0cmljdFwiO1xyXG5cdC8qKioqKioqKioqKioqKipcclxuXHQgU2V0dXBcclxuXHQgKioqKioqKioqKioqKioqL1xyXG5cclxuXHQvKiBJZiBqUXVlcnkgaXMgYWxyZWFkeSBsb2FkZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gbG9hZGluZyB0aGlzIHNoaW0uICovXHJcblx0aWYgKHdpbmRvdy5qUXVlcnkpIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdC8qIGpRdWVyeSBiYXNlLiAqL1xyXG5cdHZhciAkID0gZnVuY3Rpb24oc2VsZWN0b3IsIGNvbnRleHQpIHtcclxuXHRcdHJldHVybiBuZXcgJC5mbi5pbml0KHNlbGVjdG9yLCBjb250ZXh0KTtcclxuXHR9O1xyXG5cclxuXHQvKioqKioqKioqKioqKioqKioqKipcclxuXHQgUHJpdmF0ZSBNZXRob2RzXHJcblx0ICoqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHQvKiBqUXVlcnkgKi9cclxuXHQkLmlzV2luZG93ID0gZnVuY3Rpb24ob2JqKSB7XHJcblx0XHQvKiBqc2hpbnQgZXFlcWVxOiBmYWxzZSAqL1xyXG5cdFx0cmV0dXJuIG9iaiAmJiBvYmogPT09IG9iai53aW5kb3c7XHJcblx0fTtcclxuXHJcblx0LyogalF1ZXJ5ICovXHJcblx0JC50eXBlID0gZnVuY3Rpb24ob2JqKSB7XHJcblx0XHRpZiAoIW9iaikge1xyXG5cdFx0XHRyZXR1cm4gb2JqICsgXCJcIjtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgP1xyXG5cdFx0XHRcdGNsYXNzMnR5cGVbdG9TdHJpbmcuY2FsbChvYmopXSB8fCBcIm9iamVjdFwiIDpcclxuXHRcdFx0XHR0eXBlb2Ygb2JqO1xyXG5cdH07XHJcblxyXG5cdC8qIGpRdWVyeSAqL1xyXG5cdCQuaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XHJcblx0XHRyZXR1cm4gJC50eXBlKG9iaikgPT09IFwiYXJyYXlcIjtcclxuXHR9O1xyXG5cclxuXHQvKiBqUXVlcnkgKi9cclxuXHRmdW5jdGlvbiBpc0FycmF5bGlrZShvYmopIHtcclxuXHRcdHZhciBsZW5ndGggPSBvYmoubGVuZ3RoLFxyXG5cdFx0XHRcdHR5cGUgPSAkLnR5cGUob2JqKTtcclxuXHJcblx0XHRpZiAodHlwZSA9PT0gXCJmdW5jdGlvblwiIHx8ICQuaXNXaW5kb3cob2JqKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKG9iai5ub2RlVHlwZSA9PT0gMSAmJiBsZW5ndGgpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHR5cGUgPT09IFwiYXJyYXlcIiB8fCBsZW5ndGggPT09IDAgfHwgdHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmIChsZW5ndGggLSAxKSBpbiBvYmo7XHJcblx0fVxyXG5cclxuXHQvKioqKioqKioqKioqKioqXHJcblx0ICQgTWV0aG9kc1xyXG5cdCAqKioqKioqKioqKioqKiovXHJcblxyXG5cdC8qIGpRdWVyeTogU3VwcG9ydCByZW1vdmVkIGZvciBJRTw5LiAqL1xyXG5cdCQuaXNQbGFpbk9iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xyXG5cdFx0dmFyIGtleTtcclxuXHJcblx0XHRpZiAoIW9iaiB8fCAkLnR5cGUob2JqKSAhPT0gXCJvYmplY3RcIiB8fCBvYmoubm9kZVR5cGUgfHwgJC5pc1dpbmRvdyhvYmopKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAob2JqLmNvbnN0cnVjdG9yICYmXHJcblx0XHRcdFx0XHQhaGFzT3duLmNhbGwob2JqLCBcImNvbnN0cnVjdG9yXCIpICYmXHJcblx0XHRcdFx0XHQhaGFzT3duLmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgXCJpc1Byb3RvdHlwZU9mXCIpKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGtleSBpbiBvYmopIHtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwgaGFzT3duLmNhbGwob2JqLCBrZXkpO1xyXG5cdH07XHJcblxyXG5cdC8qIGpRdWVyeSAqL1xyXG5cdCQuZWFjaCA9IGZ1bmN0aW9uKG9iaiwgY2FsbGJhY2ssIGFyZ3MpIHtcclxuXHRcdHZhciB2YWx1ZSxcclxuXHRcdFx0XHRpID0gMCxcclxuXHRcdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoLFxyXG5cdFx0XHRcdGlzQXJyYXkgPSBpc0FycmF5bGlrZShvYmopO1xyXG5cclxuXHRcdGlmIChhcmdzKSB7XHJcblx0XHRcdGlmIChpc0FycmF5KSB7XHJcblx0XHRcdFx0Zm9yICg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjay5hcHBseShvYmpbaV0sIGFyZ3MpO1xyXG5cclxuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvciAoaSBpbiBvYmopIHtcclxuXHRcdFx0XHRcdGlmICghb2JqLmhhc093blByb3BlcnR5KGkpKSB7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjay5hcHBseShvYmpbaV0sIGFyZ3MpO1xyXG5cclxuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKGlzQXJyYXkpIHtcclxuXHRcdFx0XHRmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrLmNhbGwob2JqW2ldLCBpLCBvYmpbaV0pO1xyXG5cclxuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvciAoaSBpbiBvYmopIHtcclxuXHRcdFx0XHRcdGlmICghb2JqLmhhc093blByb3BlcnR5KGkpKSB7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjay5jYWxsKG9ialtpXSwgaSwgb2JqW2ldKTtcclxuXHJcblx0XHRcdFx0XHRpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBvYmo7XHJcblx0fTtcclxuXHJcblx0LyogQ3VzdG9tICovXHJcblx0JC5kYXRhID0gZnVuY3Rpb24obm9kZSwga2V5LCB2YWx1ZSkge1xyXG5cdFx0LyogJC5nZXREYXRhKCkgKi9cclxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHZhciBnZXRJZCA9IG5vZGVbJC5leHBhbmRvXSxcclxuXHRcdFx0XHRcdHN0b3JlID0gZ2V0SWQgJiYgY2FjaGVbZ2V0SWRdO1xyXG5cclxuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0cmV0dXJuIHN0b3JlO1xyXG5cdFx0XHR9IGVsc2UgaWYgKHN0b3JlKSB7XHJcblx0XHRcdFx0aWYgKGtleSBpbiBzdG9yZSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHN0b3JlW2tleV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8qICQuc2V0RGF0YSgpICovXHJcblx0XHR9IGVsc2UgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHZhciBzZXRJZCA9IG5vZGVbJC5leHBhbmRvXSB8fCAobm9kZVskLmV4cGFuZG9dID0gKyskLnV1aWQpO1xyXG5cclxuXHRcdFx0Y2FjaGVbc2V0SWRdID0gY2FjaGVbc2V0SWRdIHx8IHt9O1xyXG5cdFx0XHRjYWNoZVtzZXRJZF1ba2V5XSA9IHZhbHVlO1xyXG5cclxuXHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qIEN1c3RvbSAqL1xyXG5cdCQucmVtb3ZlRGF0YSA9IGZ1bmN0aW9uKG5vZGUsIGtleXMpIHtcclxuXHRcdHZhciBpZCA9IG5vZGVbJC5leHBhbmRvXSxcclxuXHRcdFx0XHRzdG9yZSA9IGlkICYmIGNhY2hlW2lkXTtcclxuXHJcblx0XHRpZiAoc3RvcmUpIHtcclxuXHRcdFx0Ly8gQ2xlYW51cCB0aGUgZW50aXJlIHN0b3JlIGlmIG5vIGtleXMgYXJlIHByb3ZpZGVkLlxyXG5cdFx0XHRpZiAoIWtleXMpIHtcclxuXHRcdFx0XHRkZWxldGUgY2FjaGVbaWRdO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdCQuZWFjaChrZXlzLCBmdW5jdGlvbihfLCBrZXkpIHtcclxuXHRcdFx0XHRcdGRlbGV0ZSBzdG9yZVtrZXldO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyogalF1ZXJ5ICovXHJcblx0JC5leHRlbmQgPSBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBzcmMsIGNvcHlJc0FycmF5LCBjb3B5LCBuYW1lLCBvcHRpb25zLCBjbG9uZSxcclxuXHRcdFx0XHR0YXJnZXQgPSBhcmd1bWVudHNbMF0gfHwge30sXHJcblx0XHRcdFx0aSA9IDEsXHJcblx0XHRcdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcclxuXHRcdFx0XHRkZWVwID0gZmFsc2U7XHJcblxyXG5cdFx0aWYgKHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiKSB7XHJcblx0XHRcdGRlZXAgPSB0YXJnZXQ7XHJcblxyXG5cdFx0XHR0YXJnZXQgPSBhcmd1bWVudHNbaV0gfHwge307XHJcblx0XHRcdGkrKztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAkLnR5cGUodGFyZ2V0KSAhPT0gXCJmdW5jdGlvblwiKSB7XHJcblx0XHRcdHRhcmdldCA9IHt9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpID09PSBsZW5ndGgpIHtcclxuXHRcdFx0dGFyZ2V0ID0gdGhpcztcclxuXHRcdFx0aS0tO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYgKChvcHRpb25zID0gYXJndW1lbnRzW2ldKSkge1xyXG5cdFx0XHRcdGZvciAobmFtZSBpbiBvcHRpb25zKSB7XHJcblx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRzcmMgPSB0YXJnZXRbbmFtZV07XHJcblx0XHRcdFx0XHRjb3B5ID0gb3B0aW9uc1tuYW1lXTtcclxuXHJcblx0XHRcdFx0XHRpZiAodGFyZ2V0ID09PSBjb3B5KSB7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChkZWVwICYmIGNvcHkgJiYgKCQuaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJyYXkgPSAkLmlzQXJyYXkoY29weSkpKSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoY29weUlzQXJyYXkpIHtcclxuXHRcdFx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmICQuaXNBcnJheShzcmMpID8gc3JjIDogW107XHJcblxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmICQuaXNQbGFpbk9iamVjdChzcmMpID8gc3JjIDoge307XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHRhcmdldFtuYW1lXSA9ICQuZXh0ZW5kKGRlZXAsIGNsb25lLCBjb3B5KTtcclxuXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGNvcHkgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHR0YXJnZXRbbmFtZV0gPSBjb3B5O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0YXJnZXQ7XHJcblx0fTtcclxuXHJcblx0LyogalF1ZXJ5IDEuNC4zICovXHJcblx0JC5xdWV1ZSA9IGZ1bmN0aW9uKGVsZW0sIHR5cGUsIGRhdGEpIHtcclxuXHRcdGZ1bmN0aW9uICRtYWtlQXJyYXkoYXJyLCByZXN1bHRzKSB7XHJcblx0XHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xyXG5cclxuXHRcdFx0aWYgKGFycikge1xyXG5cdFx0XHRcdGlmIChpc0FycmF5bGlrZShPYmplY3QoYXJyKSkpIHtcclxuXHRcdFx0XHRcdC8qICQubWVyZ2UgKi9cclxuXHRcdFx0XHRcdChmdW5jdGlvbihmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRcdFx0XHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcclxuXHRcdFx0XHRcdFx0XHRcdGogPSAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcclxuXHJcblx0XHRcdFx0XHRcdHdoaWxlIChqIDwgbGVuKSB7XHJcblx0XHRcdFx0XHRcdFx0Zmlyc3RbaSsrXSA9IHNlY29uZFtqKytdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAobGVuICE9PSBsZW4pIHtcclxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoc2Vjb25kW2pdICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZpcnN0W2krK10gPSBzZWNvbmRbaisrXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGZpcnN0Lmxlbmd0aCA9IGk7XHJcblxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmlyc3Q7XHJcblx0XHRcdFx0XHR9KShyZXQsIHR5cGVvZiBhcnIgPT09IFwic3RyaW5nXCIgPyBbYXJyXSA6IGFycik7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFtdLnB1c2guY2FsbChyZXQsIGFycik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gcmV0O1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghZWxlbSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dHlwZSA9ICh0eXBlIHx8IFwiZnhcIikgKyBcInF1ZXVlXCI7XHJcblxyXG5cdFx0dmFyIHEgPSAkLmRhdGEoZWxlbSwgdHlwZSk7XHJcblxyXG5cdFx0aWYgKCFkYXRhKSB7XHJcblx0XHRcdHJldHVybiBxIHx8IFtdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghcSB8fCAkLmlzQXJyYXkoZGF0YSkpIHtcclxuXHRcdFx0cSA9ICQuZGF0YShlbGVtLCB0eXBlLCAkbWFrZUFycmF5KGRhdGEpKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHEucHVzaChkYXRhKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcTtcclxuXHR9O1xyXG5cclxuXHQvKiBqUXVlcnkgMS40LjMgKi9cclxuXHQkLmRlcXVldWUgPSBmdW5jdGlvbihlbGVtcywgdHlwZSkge1xyXG5cdFx0LyogQ3VzdG9tOiBFbWJlZCBlbGVtZW50IGl0ZXJhdGlvbi4gKi9cclxuXHRcdCQuZWFjaChlbGVtcy5ub2RlVHlwZSA/IFtlbGVtc10gOiBlbGVtcywgZnVuY3Rpb24oaSwgZWxlbSkge1xyXG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XHJcblxyXG5cdFx0XHR2YXIgcXVldWUgPSAkLnF1ZXVlKGVsZW0sIHR5cGUpLFxyXG5cdFx0XHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpO1xyXG5cclxuXHRcdFx0aWYgKGZuID09PSBcImlucHJvZ3Jlc3NcIikge1xyXG5cdFx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGZuKSB7XHJcblx0XHRcdFx0aWYgKHR5cGUgPT09IFwiZnhcIikge1xyXG5cdFx0XHRcdFx0cXVldWUudW5zaGlmdChcImlucHJvZ3Jlc3NcIik7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmbi5jYWxsKGVsZW0sIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0JC5kZXF1ZXVlKGVsZW0sIHR5cGUpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9O1xyXG5cclxuXHQvKioqKioqKioqKioqKioqKioqXHJcblx0ICQuZm4gTWV0aG9kc1xyXG5cdCAqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdC8qIGpRdWVyeSAqL1xyXG5cdCQuZm4gPSAkLnByb3RvdHlwZSA9IHtcclxuXHRcdGluaXQ6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XHJcblx0XHRcdC8qIEp1c3QgcmV0dXJuIHRoZSBlbGVtZW50IHdyYXBwZWQgaW5zaWRlIGFuIGFycmF5OyBkb24ndCBwcm9jZWVkIHdpdGggdGhlIGFjdHVhbCBqUXVlcnkgbm9kZSB3cmFwcGluZyBwcm9jZXNzLiAqL1xyXG5cdFx0XHRpZiAoc2VsZWN0b3Iubm9kZVR5cGUpIHtcclxuXHRcdFx0XHR0aGlzWzBdID0gc2VsZWN0b3I7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIk5vdCBhIERPTSBub2RlLlwiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdG9mZnNldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdC8qIGpRdWVyeSBhbHRlcmVkIGNvZGU6IERyb3BwZWQgZGlzY29ubmVjdGVkIERPTSBub2RlIGNoZWNraW5nLiAqL1xyXG5cdFx0XHR2YXIgYm94ID0gdGhpc1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPyB0aGlzWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIDoge3RvcDogMCwgbGVmdDogMH07XHJcblxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHRvcDogYm94LnRvcCArICh3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuc2Nyb2xsVG9wIHx8IDApIC0gKGRvY3VtZW50LmNsaWVudFRvcCB8fCAwKSxcclxuXHRcdFx0XHRsZWZ0OiBib3gubGVmdCArICh3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jdW1lbnQuc2Nyb2xsTGVmdCB8fCAwKSAtIChkb2N1bWVudC5jbGllbnRMZWZ0IHx8IDApXHJcblx0XHRcdH07XHJcblx0XHR9LFxyXG5cdFx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHQvKiBqUXVlcnkgKi9cclxuXHRcdFx0ZnVuY3Rpb24gb2Zmc2V0UGFyZW50Rm4oZWxlbSkge1xyXG5cdFx0XHRcdHZhciBvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudDtcclxuXHJcblx0XHRcdFx0d2hpbGUgKG9mZnNldFBhcmVudCAmJiAob2Zmc2V0UGFyZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwiaHRtbFwiICYmIG9mZnNldFBhcmVudC5zdHlsZSAmJiBvZmZzZXRQYXJlbnQuc3R5bGUucG9zaXRpb24udG9Mb3dlckNhc2UoKSA9PT0gXCJzdGF0aWNcIikpIHtcclxuXHRcdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBaZXB0byAqL1xyXG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbMF0sXHJcblx0XHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnRGbihlbGVtKSxcclxuXHRcdFx0XHRcdG9mZnNldCA9IHRoaXMub2Zmc2V0KCksXHJcblx0XHRcdFx0XHRwYXJlbnRPZmZzZXQgPSAvXig/OmJvZHl8aHRtbCkkL2kudGVzdChvZmZzZXRQYXJlbnQubm9kZU5hbWUpID8ge3RvcDogMCwgbGVmdDogMH0gOiAkKG9mZnNldFBhcmVudCkub2Zmc2V0KCk7XHJcblxyXG5cdFx0XHRvZmZzZXQudG9wIC09IHBhcnNlRmxvYXQoZWxlbS5zdHlsZS5tYXJnaW5Ub3ApIHx8IDA7XHJcblx0XHRcdG9mZnNldC5sZWZ0IC09IHBhcnNlRmxvYXQoZWxlbS5zdHlsZS5tYXJnaW5MZWZ0KSB8fCAwO1xyXG5cclxuXHRcdFx0aWYgKG9mZnNldFBhcmVudC5zdHlsZSkge1xyXG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0gcGFyc2VGbG9hdChvZmZzZXRQYXJlbnQuc3R5bGUuYm9yZGVyVG9wV2lkdGgpIHx8IDA7XHJcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0gcGFyc2VGbG9hdChvZmZzZXRQYXJlbnQuc3R5bGUuYm9yZGVyTGVmdFdpZHRoKSB8fCAwO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AsXHJcblx0XHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdFxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKioqKioqKioqKioqKioqKioqKioqXHJcblx0IFByaXZhdGUgVmFyaWFibGVzXHJcblx0ICoqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdC8qIEZvciAkLmRhdGEoKSAqL1xyXG5cdHZhciBjYWNoZSA9IHt9O1xyXG5cdCQuZXhwYW5kbyA9IFwidmVsb2NpdHlcIiArIChuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XHJcblx0JC51dWlkID0gMDtcclxuXHJcblx0LyogRm9yICQucXVldWUoKSAqL1xyXG5cdHZhciBjbGFzczJ0eXBlID0ge30sXHJcblx0XHRcdGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHksXHJcblx0XHRcdHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcclxuXHJcblx0dmFyIHR5cGVzID0gXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yXCIuc3BsaXQoXCIgXCIpO1xyXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNsYXNzMnR5cGVbXCJbb2JqZWN0IFwiICsgdHlwZXNbaV0gKyBcIl1cIl0gPSB0eXBlc1tpXS50b0xvd2VyQ2FzZSgpO1xyXG5cdH1cclxuXHJcblx0LyogTWFrZXMgJChub2RlKSBwb3NzaWJsZSwgd2l0aG91dCBoYXZpbmcgdG8gY2FsbCBpbml0LiAqL1xyXG5cdCQuZm4uaW5pdC5wcm90b3R5cGUgPSAkLmZuO1xyXG5cclxuXHQvKiBHbG9iYWxpemUgVmVsb2NpdHkgb250byB0aGUgd2luZG93LCBhbmQgYXNzaWduIGl0cyBVdGlsaXRpZXMgcHJvcGVydHkuICovXHJcblx0d2luZG93LlZlbG9jaXR5ID0ge1V0aWxpdGllczogJH07XHJcbn0pKHdpbmRvdyk7XHJcblxyXG4vKioqKioqKioqKioqKioqKioqXHJcbiBWZWxvY2l0eS5qc1xyXG4gKioqKioqKioqKioqKioqKioqL1xyXG5cclxuKGZ1bmN0aW9uKGZhY3RvcnkpIHtcclxuXHRcInVzZSBzdHJpY3RcIjtcclxuXHQvKiBDb21tb25KUyBtb2R1bGUuICovXHJcblx0aWYgKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiKSB7XHJcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcclxuXHRcdC8qIEFNRCBtb2R1bGUuICovXHJcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xyXG5cdFx0ZGVmaW5lKGZhY3RvcnkpO1xyXG5cdFx0LyogQnJvd3NlciBnbG9iYWxzLiAqL1xyXG5cdH0gZWxzZSB7XHJcblx0XHRmYWN0b3J5KCk7XHJcblx0fVxyXG59KGZ1bmN0aW9uKCkge1xyXG5cdFwidXNlIHN0cmljdFwiO1xyXG5cdHJldHVybiBmdW5jdGlvbihnbG9iYWwsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCkge1xyXG5cclxuXHRcdC8qKioqKioqKioqKioqKipcclxuXHRcdCBTdW1tYXJ5XHJcblx0XHQgKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdC8qXHJcblx0XHQgLSBDU1M6IENTUyBzdGFjayB0aGF0IHdvcmtzIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgcmVzdCBvZiBWZWxvY2l0eS5cclxuXHRcdCAtIGFuaW1hdGUoKTogQ29yZSBhbmltYXRpb24gbWV0aG9kIHRoYXQgaXRlcmF0ZXMgb3ZlciB0aGUgdGFyZ2V0ZWQgZWxlbWVudHMgYW5kIHF1ZXVlcyB0aGUgaW5jb21pbmcgY2FsbCBvbnRvIGVhY2ggZWxlbWVudCBpbmRpdmlkdWFsbHkuXHJcblx0XHQgLSBQcmUtUXVldWVpbmc6IFByZXBhcmUgdGhlIGVsZW1lbnQgZm9yIGFuaW1hdGlvbiBieSBpbnN0YW50aWF0aW5nIGl0cyBkYXRhIGNhY2hlIGFuZCBwcm9jZXNzaW5nIHRoZSBjYWxsJ3Mgb3B0aW9ucy5cclxuXHRcdCAtIFF1ZXVlaW5nOiBUaGUgbG9naWMgdGhhdCBydW5zIG9uY2UgdGhlIGNhbGwgaGFzIHJlYWNoZWQgaXRzIHBvaW50IG9mIGV4ZWN1dGlvbiBpbiB0aGUgZWxlbWVudCdzICQucXVldWUoKSBzdGFjay5cclxuXHRcdCBNb3N0IGxvZ2ljIGlzIHBsYWNlZCBoZXJlIHRvIGF2b2lkIHJpc2tpbmcgaXQgYmVjb21pbmcgc3RhbGUgKGlmIHRoZSBlbGVtZW50J3MgcHJvcGVydGllcyBoYXZlIGNoYW5nZWQpLlxyXG5cdFx0IC0gUHVzaGluZzogQ29uc29saWRhdGlvbiBvZiB0aGUgdHdlZW4gZGF0YSBmb2xsb3dlZCBieSBpdHMgcHVzaCBvbnRvIHRoZSBnbG9iYWwgaW4tcHJvZ3Jlc3MgY2FsbHMgY29udGFpbmVyLlxyXG5cdFx0IC0gdGljaygpOiBUaGUgc2luZ2xlIHJlcXVlc3RBbmltYXRpb25GcmFtZSBsb29wIHJlc3BvbnNpYmxlIGZvciB0d2VlbmluZyBhbGwgaW4tcHJvZ3Jlc3MgY2FsbHMuXHJcblx0XHQgLSBjb21wbGV0ZUNhbGwoKTogSGFuZGxlcyB0aGUgY2xlYW51cCBwcm9jZXNzIGZvciBlYWNoIFZlbG9jaXR5IGNhbGwuXHJcblx0XHQgKi9cclxuXHJcblx0XHQvKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHQgSGVscGVyIEZ1bmN0aW9uc1xyXG5cdFx0ICoqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHQvKiBJRSBkZXRlY3Rpb24uIEdpc3Q6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2p1bGlhbnNoYXBpcm8vOTA5ODYwOSAqL1xyXG5cdFx0dmFyIElFID0gKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRpZiAoZG9jdW1lbnQuZG9jdW1lbnRNb2RlKSB7XHJcblx0XHRcdFx0cmV0dXJuIGRvY3VtZW50LmRvY3VtZW50TW9kZTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRmb3IgKHZhciBpID0gNzsgaSA+IDQ7IGktLSkge1xyXG5cdFx0XHRcdFx0dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblxyXG5cdFx0XHRcdFx0ZGl2LmlubmVySFRNTCA9IFwiPCEtLVtpZiBJRSBcIiArIGkgKyBcIl0+PHNwYW4+PC9zcGFuPjwhW2VuZGlmXS0tPlwiO1xyXG5cclxuXHRcdFx0XHRcdGlmIChkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzcGFuXCIpLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRkaXYgPSBudWxsO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fSkoKTtcclxuXHJcblx0XHQvKiByQUYgc2hpbS4gR2lzdDogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vanVsaWFuc2hhcGlyby85NDk3NTEzICovXHJcblx0XHR2YXIgckFGU2hpbSA9IChmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIHRpbWVMYXN0ID0gMDtcclxuXHJcblx0XHRcdHJldHVybiB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuXHRcdFx0XHR2YXIgdGltZUN1cnJlbnQgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpLFxyXG5cdFx0XHRcdFx0XHR0aW1lRGVsdGE7XHJcblxyXG5cdFx0XHRcdC8qIER5bmFtaWNhbGx5IHNldCBkZWxheSBvbiBhIHBlci10aWNrIGJhc2lzIHRvIG1hdGNoIDYwZnBzLiAqL1xyXG5cdFx0XHRcdC8qIFRlY2huaXF1ZSBieSBFcmlrIE1vbGxlci4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3BhdWxpcmlzaC8xNTc5NjcxICovXHJcblx0XHRcdFx0dGltZURlbHRhID0gTWF0aC5tYXgoMCwgMTYgLSAodGltZUN1cnJlbnQgLSB0aW1lTGFzdCkpO1xyXG5cdFx0XHRcdHRpbWVMYXN0ID0gdGltZUN1cnJlbnQgKyB0aW1lRGVsdGE7XHJcblxyXG5cdFx0XHRcdHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0Y2FsbGJhY2sodGltZUN1cnJlbnQgKyB0aW1lRGVsdGEpO1xyXG5cdFx0XHRcdH0sIHRpbWVEZWx0YSk7XHJcblx0XHRcdH07XHJcblx0XHR9KSgpO1xyXG5cclxuXHRcdHZhciBwZXJmb3JtYW5jZSA9IChmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIHBlcmYgPSB3aW5kb3cucGVyZm9ybWFuY2UgfHwge307XHJcblxyXG5cdFx0XHRpZiAodHlwZW9mIHBlcmYubm93ICE9PSBcImZ1bmN0aW9uXCIpIHtcclxuXHRcdFx0XHR2YXIgbm93T2Zmc2V0ID0gcGVyZi50aW1pbmcgJiYgcGVyZi50aW1pbmcubmF2aWdhdGlvblN0YXJ0ID8gcGVyZi50aW1pbmcubmF2aWdhdGlvblN0YXJ0IDogKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcclxuXHJcblx0XHRcdFx0cGVyZi5ub3cgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHJldHVybiAobmV3IERhdGUoKSkuZ2V0VGltZSgpIC0gbm93T2Zmc2V0O1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHBlcmY7XHJcblx0XHR9KSgpO1xyXG5cclxuXHRcdC8qIEFycmF5IGNvbXBhY3RpbmcuIENvcHlyaWdodCBMby1EYXNoLiBNSVQgTGljZW5zZTogaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi9tYXN0ZXIvTElDRU5TRS50eHQgKi9cclxuXHRcdGZ1bmN0aW9uIGNvbXBhY3RTcGFyc2VBcnJheShhcnJheSkge1xyXG5cdFx0XHR2YXIgaW5kZXggPSAtMSxcclxuXHRcdFx0XHRcdGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMCxcclxuXHRcdFx0XHRcdHJlc3VsdCA9IFtdO1xyXG5cclxuXHRcdFx0d2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcclxuXHRcdFx0XHR2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XHJcblxyXG5cdFx0XHRcdGlmICh2YWx1ZSkge1xyXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2godmFsdWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNoaW0gZm9yIFwiZml4aW5nXCIgSUUncyBsYWNrIG9mIHN1cHBvcnQgKElFIDwgOSkgZm9yIGFwcGx5aW5nIHNsaWNlXHJcblx0XHQgKiBvbiBob3N0IG9iamVjdHMgbGlrZSBOYW1lZE5vZGVNYXAsIE5vZGVMaXN0LCBhbmQgSFRNTENvbGxlY3Rpb25cclxuXHRcdCAqICh0ZWNobmljYWxseSwgc2luY2UgaG9zdCBvYmplY3RzIGhhdmUgYmVlbiBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQsXHJcblx0XHQgKiBhdCBsZWFzdCBiZWZvcmUgRVMyMDE1LCBJRSBoYXNuJ3QgbmVlZGVkIHRvIHdvcmsgdGhpcyB3YXkpLlxyXG5cdFx0ICogQWxzbyB3b3JrcyBvbiBzdHJpbmdzLCBmaXhlcyBJRSA8IDkgdG8gYWxsb3cgYW4gZXhwbGljaXQgdW5kZWZpbmVkXHJcblx0XHQgKiBmb3IgdGhlIDJuZCBhcmd1bWVudCAoYXMgaW4gRmlyZWZveCksIGFuZCBwcmV2ZW50cyBlcnJvcnMgd2hlblxyXG5cdFx0ICogY2FsbGVkIG9uIG90aGVyIERPTSBvYmplY3RzLlxyXG5cdFx0ICovXHJcblx0XHR2YXIgX3NsaWNlID0gKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XHJcblxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdC8vIENhbid0IGJlIHVzZWQgd2l0aCBET00gZWxlbWVudHMgaW4gSUUgPCA5XHJcblx0XHRcdFx0c2xpY2UuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO1xyXG5cdFx0XHRcdHJldHVybiBzbGljZTtcclxuXHRcdFx0fSBjYXRjaCAoZSkgeyAvLyBGYWlscyBpbiBJRSA8IDlcclxuXHJcblx0XHRcdFx0Ly8gVGhpcyB3aWxsIHdvcmsgZm9yIGdlbnVpbmUgYXJyYXlzLCBhcnJheS1saWtlIG9iamVjdHMsIFxyXG5cdFx0XHRcdC8vIE5hbWVkTm9kZU1hcCAoYXR0cmlidXRlcywgZW50aXRpZXMsIG5vdGF0aW9ucyksXHJcblx0XHRcdFx0Ly8gTm9kZUxpc3QgKGUuZy4sIGdldEVsZW1lbnRzQnlUYWdOYW1lKSwgSFRNTENvbGxlY3Rpb24gKGUuZy4sIGNoaWxkTm9kZXMpLFxyXG5cdFx0XHRcdC8vIGFuZCB3aWxsIG5vdCBmYWlsIG9uIG90aGVyIERPTSBvYmplY3RzIChhcyBkbyBET00gZWxlbWVudHMgaW4gSUUgPCA5KVxyXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbihiZWdpbiwgZW5kKSB7XHJcblx0XHRcdFx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGg7XHJcblxyXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBiZWdpbiAhPT0gXCJudW1iZXJcIikge1xyXG5cdFx0XHRcdFx0XHRiZWdpbiA9IDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBJRSA8IDkgZ2V0cyB1bmhhcHB5IHdpdGggYW4gdW5kZWZpbmVkIGVuZCBhcmd1bWVudFxyXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBlbmQgIT09IFwibnVtYmVyXCIpIHtcclxuXHRcdFx0XHRcdFx0ZW5kID0gbGVuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly8gRm9yIG5hdGl2ZSBBcnJheSBvYmplY3RzLCB3ZSB1c2UgdGhlIG5hdGl2ZSBzbGljZSBmdW5jdGlvblxyXG5cdFx0XHRcdFx0aWYgKHRoaXMuc2xpY2UpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBGb3IgYXJyYXkgbGlrZSBvYmplY3Qgd2UgaGFuZGxlIGl0IG91cnNlbHZlcy5cclxuXHRcdFx0XHRcdHZhciBpLFxyXG5cdFx0XHRcdFx0XHRcdGNsb25lZCA9IFtdLFxyXG5cdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBuZWdhdGl2ZSB2YWx1ZSBmb3IgXCJiZWdpblwiXHJcblx0XHRcdFx0XHRcdFx0c3RhcnQgPSAoYmVnaW4gPj0gMCkgPyBiZWdpbiA6IE1hdGgubWF4KDAsIGxlbiArIGJlZ2luKSxcclxuXHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgbmVnYXRpdmUgdmFsdWUgZm9yIFwiZW5kXCJcclxuXHRcdFx0XHRcdFx0XHR1cFRvID0gZW5kIDwgMCA/IGxlbiArIGVuZCA6IE1hdGgubWluKGVuZCwgbGVuKSxcclxuXHRcdFx0XHRcdFx0XHQvLyBBY3R1YWwgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgc2xpY2VcclxuXHRcdFx0XHRcdFx0XHRzaXplID0gdXBUbyAtIHN0YXJ0O1xyXG5cclxuXHRcdFx0XHRcdGlmIChzaXplID4gMCkge1xyXG5cdFx0XHRcdFx0XHRjbG9uZWQgPSBuZXcgQXJyYXkoc2l6ZSk7XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmNoYXJBdCkge1xyXG5cdFx0XHRcdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNsb25lZFtpXSA9IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNsb25lZFtpXSA9IHRoaXNbc3RhcnQgKyBpXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiBjbG9uZWQ7XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fSkoKTtcclxuXHJcblx0XHQvKiAuaW5kZXhPZiBkb2Vzbid0IGV4aXN0IGluIElFPDkgKi9cclxuXHRcdHZhciBfaW5BcnJheSA9IChmdW5jdGlvbigpIHtcclxuXHRcdFx0aWYgKEFycmF5LnByb3RvdHlwZS5pbmNsdWRlcykge1xyXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbihhcnIsIHZhbCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGFyci5pbmNsdWRlcyh2YWwpO1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGFyciwgdmFsKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gYXJyLmluZGV4T2YodmFsKSA+PSAwO1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGFyciwgdmFsKSB7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGlmIChhcnJbaV0gPT09IHZhbCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9O1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZnVuY3Rpb24gc2FuaXRpemVFbGVtZW50cyhlbGVtZW50cykge1xyXG5cdFx0XHQvKiBVbndyYXAgalF1ZXJ5L1plcHRvIG9iamVjdHMuICovXHJcblx0XHRcdGlmIChUeXBlLmlzV3JhcHBlZChlbGVtZW50cykpIHtcclxuXHRcdFx0XHRlbGVtZW50cyA9IF9zbGljZS5jYWxsKGVsZW1lbnRzKTtcclxuXHRcdFx0XHQvKiBXcmFwIGEgc2luZ2xlIGVsZW1lbnQgaW4gYW4gYXJyYXkgc28gdGhhdCAkLmVhY2goKSBjYW4gaXRlcmF0ZSB3aXRoIHRoZSBlbGVtZW50IGluc3RlYWQgb2YgaXRzIG5vZGUncyBjaGlsZHJlbi4gKi9cclxuXHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzTm9kZShlbGVtZW50cykpIHtcclxuXHRcdFx0XHRlbGVtZW50cyA9IFtlbGVtZW50c107XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBlbGVtZW50cztcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgVHlwZSA9IHtcclxuXHRcdFx0aXNOdW1iZXI6IGZ1bmN0aW9uKHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0cmV0dXJuICh0eXBlb2YgdmFyaWFibGUgPT09IFwibnVtYmVyXCIpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRpc1N0cmluZzogZnVuY3Rpb24odmFyaWFibGUpIHtcclxuXHRcdFx0XHRyZXR1cm4gKHR5cGVvZiB2YXJpYWJsZSA9PT0gXCJzdHJpbmdcIik7XHJcblx0XHRcdH0sXHJcblx0XHRcdGlzQXJyYXk6IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24odmFyaWFibGUpIHtcclxuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhcmlhYmxlKSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRpc0Z1bmN0aW9uOiBmdW5jdGlvbih2YXJpYWJsZSkge1xyXG5cdFx0XHRcdHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFyaWFibGUpID09PSBcIltvYmplY3QgRnVuY3Rpb25dXCI7XHJcblx0XHRcdH0sXHJcblx0XHRcdGlzTm9kZTogZnVuY3Rpb24odmFyaWFibGUpIHtcclxuXHRcdFx0XHRyZXR1cm4gdmFyaWFibGUgJiYgdmFyaWFibGUubm9kZVR5cGU7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8qIERldGVybWluZSBpZiB2YXJpYWJsZSBpcyBhbiBhcnJheS1saWtlIHdyYXBwZWQgalF1ZXJ5LCBaZXB0byBvciBzaW1pbGFyIGVsZW1lbnQsIG9yIGV2ZW4gYSBOb2RlTGlzdCBldGMuICovXHJcblx0XHRcdC8qIE5PVEU6IEhUTUxGb3JtRWxlbWVudHMgYWxzbyBoYXZlIGEgbGVuZ3RoLiAqL1xyXG5cdFx0XHRpc1dyYXBwZWQ6IGZ1bmN0aW9uKHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0cmV0dXJuIHZhcmlhYmxlXHJcblx0XHRcdFx0XHRcdCYmIHZhcmlhYmxlICE9PSB3aW5kb3dcclxuXHRcdFx0XHRcdFx0JiYgVHlwZS5pc051bWJlcih2YXJpYWJsZS5sZW5ndGgpXHJcblx0XHRcdFx0XHRcdCYmICFUeXBlLmlzU3RyaW5nKHZhcmlhYmxlKVxyXG5cdFx0XHRcdFx0XHQmJiAhVHlwZS5pc0Z1bmN0aW9uKHZhcmlhYmxlKVxyXG5cdFx0XHRcdFx0XHQmJiAhVHlwZS5pc05vZGUodmFyaWFibGUpXHJcblx0XHRcdFx0XHRcdCYmICh2YXJpYWJsZS5sZW5ndGggPT09IDAgfHwgVHlwZS5pc05vZGUodmFyaWFibGVbMF0pKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0aXNTVkc6IGZ1bmN0aW9uKHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0cmV0dXJuIHdpbmRvdy5TVkdFbGVtZW50ICYmICh2YXJpYWJsZSBpbnN0YW5jZW9mIHdpbmRvdy5TVkdFbGVtZW50KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24odmFyaWFibGUpIHtcclxuXHRcdFx0XHRmb3IgKHZhciBuYW1lIGluIHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0XHRpZiAodmFyaWFibGUuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqKioqXHJcblx0XHQgRGVwZW5kZW5jaWVzXHJcblx0XHQgKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0dmFyICQsXHJcblx0XHRcdFx0aXNKUXVlcnkgPSBmYWxzZTtcclxuXHJcblx0XHRpZiAoZ2xvYmFsLmZuICYmIGdsb2JhbC5mbi5qcXVlcnkpIHtcclxuXHRcdFx0JCA9IGdsb2JhbDtcclxuXHRcdFx0aXNKUXVlcnkgPSB0cnVlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0JCA9IHdpbmRvdy5WZWxvY2l0eS5VdGlsaXRpZXM7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKElFIDw9IDggJiYgIWlzSlF1ZXJ5KSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlZlbG9jaXR5OiBJRTggYW5kIGJlbG93IHJlcXVpcmUgalF1ZXJ5IHRvIGJlIGxvYWRlZCBiZWZvcmUgVmVsb2NpdHkuXCIpO1xyXG5cdFx0fSBlbHNlIGlmIChJRSA8PSA3KSB7XHJcblx0XHRcdC8qIFJldmVydCB0byBqUXVlcnkncyAkLmFuaW1hdGUoKSwgYW5kIGxvc2UgVmVsb2NpdHkncyBleHRyYSBmZWF0dXJlcy4gKi9cclxuXHRcdFx0alF1ZXJ5LmZuLnZlbG9jaXR5ID0galF1ZXJ5LmZuLmFuaW1hdGU7XHJcblxyXG5cdFx0XHQvKiBOb3cgdGhhdCAkLmZuLnZlbG9jaXR5IGlzIGFsaWFzZWQsIGFib3J0IHRoaXMgVmVsb2NpdHkgZGVjbGFyYXRpb24uICovXHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvKioqKioqKioqKioqKioqKipcclxuXHRcdCBDb25zdGFudHNcclxuXHRcdCAqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHR2YXIgRFVSQVRJT05fREVGQVVMVCA9IDQwMCxcclxuXHRcdFx0XHRFQVNJTkdfREVGQVVMVCA9IFwic3dpbmdcIjtcclxuXHJcblx0XHQvKioqKioqKioqKioqKlxyXG5cdFx0IFN0YXRlXHJcblx0XHQgKioqKioqKioqKioqKi9cclxuXHJcblx0XHR2YXIgVmVsb2NpdHkgPSB7XHJcblx0XHRcdC8qIENvbnRhaW5lciBmb3IgcGFnZS13aWRlIFZlbG9jaXR5IHN0YXRlIGRhdGEuICovXHJcblx0XHRcdFN0YXRlOiB7XHJcblx0XHRcdFx0LyogRGV0ZWN0IG1vYmlsZSBkZXZpY2VzIHRvIGRldGVybWluZSBpZiBtb2JpbGVIQSBzaG91bGQgYmUgdHVybmVkIG9uLiAqL1xyXG5cdFx0XHRcdGlzTW9iaWxlOiAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpLFxyXG5cdFx0XHRcdC8qIFRoZSBtb2JpbGVIQSBvcHRpb24ncyBiZWhhdmlvciBjaGFuZ2VzIG9uIG9sZGVyIEFuZHJvaWQgZGV2aWNlcyAoR2luZ2VyYnJlYWQsIHZlcnNpb25zIDIuMy4zLTIuMy43KS4gKi9cclxuXHRcdFx0XHRpc0FuZHJvaWQ6IC9BbmRyb2lkL2kudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCksXHJcblx0XHRcdFx0aXNHaW5nZXJicmVhZDogL0FuZHJvaWQgMlxcLjNcXC5bMy03XS9pLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpLFxyXG5cdFx0XHRcdGlzQ2hyb21lOiB3aW5kb3cuY2hyb21lLFxyXG5cdFx0XHRcdGlzRmlyZWZveDogL0ZpcmVmb3gvaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSxcclxuXHRcdFx0XHQvKiBDcmVhdGUgYSBjYWNoZWQgZWxlbWVudCBmb3IgcmUtdXNlIHdoZW4gY2hlY2tpbmcgZm9yIENTUyBwcm9wZXJ0eSBwcmVmaXhlcy4gKi9cclxuXHRcdFx0XHRwcmVmaXhFbGVtZW50OiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxyXG5cdFx0XHRcdC8qIENhY2hlIGV2ZXJ5IHByZWZpeCBtYXRjaCB0byBhdm9pZCByZXBlYXRpbmcgbG9va3Vwcy4gKi9cclxuXHRcdFx0XHRwcmVmaXhNYXRjaGVzOiB7fSxcclxuXHRcdFx0XHQvKiBDYWNoZSB0aGUgYW5jaG9yIHVzZWQgZm9yIGFuaW1hdGluZyB3aW5kb3cgc2Nyb2xsaW5nLiAqL1xyXG5cdFx0XHRcdHNjcm9sbEFuY2hvcjogbnVsbCxcclxuXHRcdFx0XHQvKiBDYWNoZSB0aGUgYnJvd3Nlci1zcGVjaWZpYyBwcm9wZXJ0eSBuYW1lcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNjcm9sbCBhbmNob3IuICovXHJcblx0XHRcdFx0c2Nyb2xsUHJvcGVydHlMZWZ0OiBudWxsLFxyXG5cdFx0XHRcdHNjcm9sbFByb3BlcnR5VG9wOiBudWxsLFxyXG5cdFx0XHRcdC8qIEtlZXAgdHJhY2sgb2Ygd2hldGhlciBvdXIgUkFGIHRpY2sgaXMgcnVubmluZy4gKi9cclxuXHRcdFx0XHRpc1RpY2tpbmc6IGZhbHNlLFxyXG5cdFx0XHRcdC8qIENvbnRhaW5lciBmb3IgZXZlcnkgaW4tcHJvZ3Jlc3MgY2FsbCB0byBWZWxvY2l0eS4gKi9cclxuXHRcdFx0XHRjYWxsczogW10sXHJcblx0XHRcdFx0ZGVsYXllZEVsZW1lbnRzOiB7XHJcblx0XHRcdFx0XHRjb3VudDogMFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0LyogVmVsb2NpdHkncyBjdXN0b20gQ1NTIHN0YWNrLiBNYWRlIGdsb2JhbCBmb3IgdW5pdCB0ZXN0aW5nLiAqL1xyXG5cdFx0XHRDU1M6IHsvKiBEZWZpbmVkIGJlbG93LiAqL30sXHJcblx0XHRcdC8qIEEgc2hpbSBvZiB0aGUgalF1ZXJ5IHV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYnkgVmVsb2NpdHkgLS0gcHJvdmlkZWQgYnkgVmVsb2NpdHkncyBvcHRpb25hbCBqUXVlcnkgc2hpbS4gKi9cclxuXHRcdFx0VXRpbGl0aWVzOiAkLFxyXG5cdFx0XHQvKiBDb250YWluZXIgZm9yIHRoZSB1c2VyJ3MgY3VzdG9tIGFuaW1hdGlvbiByZWRpcmVjdHMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBuYW1lIGluIHBsYWNlIG9mIHRoZSBwcm9wZXJ0aWVzIG1hcCBhcmd1bWVudC4gKi9cclxuXHRcdFx0UmVkaXJlY3RzOiB7LyogTWFudWFsbHkgcmVnaXN0ZXJlZCBieSB0aGUgdXNlci4gKi99LFxyXG5cdFx0XHRFYXNpbmdzOiB7LyogRGVmaW5lZCBiZWxvdy4gKi99LFxyXG5cdFx0XHQvKiBBdHRlbXB0IHRvIHVzZSBFUzYgUHJvbWlzZXMgYnkgZGVmYXVsdC4gVXNlcnMgY2FuIG92ZXJyaWRlIHRoaXMgd2l0aCBhIHRoaXJkLXBhcnR5IHByb21pc2VzIGxpYnJhcnkuICovXHJcblx0XHRcdFByb21pc2U6IHdpbmRvdy5Qcm9taXNlLFxyXG5cdFx0XHQvKiBWZWxvY2l0eSBvcHRpb24gZGVmYXVsdHMsIHdoaWNoIGNhbiBiZSBvdmVycmlkZW4gYnkgdGhlIHVzZXIuICovXHJcblx0XHRcdGRlZmF1bHRzOiB7XHJcblx0XHRcdFx0cXVldWU6IFwiXCIsXHJcblx0XHRcdFx0ZHVyYXRpb246IERVUkFUSU9OX0RFRkFVTFQsXHJcblx0XHRcdFx0ZWFzaW5nOiBFQVNJTkdfREVGQVVMVCxcclxuXHRcdFx0XHRiZWdpbjogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdGNvbXBsZXRlOiB1bmRlZmluZWQsXHJcblx0XHRcdFx0cHJvZ3Jlc3M6IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRkaXNwbGF5OiB1bmRlZmluZWQsXHJcblx0XHRcdFx0dmlzaWJpbGl0eTogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdGxvb3A6IGZhbHNlLFxyXG5cdFx0XHRcdGRlbGF5OiBmYWxzZSxcclxuXHRcdFx0XHRtb2JpbGVIQTogdHJ1ZSxcclxuXHRcdFx0XHQvKiBBZHZhbmNlZDogU2V0IHRvIGZhbHNlIHRvIHByZXZlbnQgcHJvcGVydHkgdmFsdWVzIGZyb20gYmVpbmcgY2FjaGVkIGJldHdlZW4gY29uc2VjdXRpdmUgVmVsb2NpdHktaW5pdGlhdGVkIGNoYWluIGNhbGxzLiAqL1xyXG5cdFx0XHRcdF9jYWNoZVZhbHVlczogdHJ1ZSxcclxuXHRcdFx0XHQvKiBBZHZhbmNlZDogU2V0IHRvIGZhbHNlIGlmIHRoZSBwcm9taXNlIHNob3VsZCBhbHdheXMgcmVzb2x2ZSBvbiBlbXB0eSBlbGVtZW50IGxpc3RzLiAqL1xyXG5cdFx0XHRcdHByb21pc2VSZWplY3RFbXB0eTogdHJ1ZVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKiBBIGRlc2lnbiBnb2FsIG9mIFZlbG9jaXR5IGlzIHRvIGNhY2hlIGRhdGEgd2hlcmV2ZXIgcG9zc2libGUgaW4gb3JkZXIgdG8gYXZvaWQgRE9NIHJlcXVlcnlpbmcuIEFjY29yZGluZ2x5LCBlYWNoIGVsZW1lbnQgaGFzIGEgZGF0YSBjYWNoZS4gKi9cclxuXHRcdFx0aW5pdDogZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cdFx0XHRcdCQuZGF0YShlbGVtZW50LCBcInZlbG9jaXR5XCIsIHtcclxuXHRcdFx0XHRcdC8qIFN0b3JlIHdoZXRoZXIgdGhpcyBpcyBhbiBTVkcgZWxlbWVudCwgc2luY2UgaXRzIHByb3BlcnRpZXMgYXJlIHJldHJpZXZlZCBhbmQgdXBkYXRlZCBkaWZmZXJlbnRseSB0aGFuIHN0YW5kYXJkIEhUTUwgZWxlbWVudHMuICovXHJcblx0XHRcdFx0XHRpc1NWRzogVHlwZS5pc1NWRyhlbGVtZW50KSxcclxuXHRcdFx0XHRcdC8qIEtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGUgZWxlbWVudCBpcyBjdXJyZW50bHkgYmVpbmcgYW5pbWF0ZWQgYnkgVmVsb2NpdHkuXHJcblx0XHRcdFx0XHQgVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IHByb3BlcnR5IHZhbHVlcyBhcmUgbm90IHRyYW5zZmVycmVkIGJldHdlZW4gbm9uLWNvbnNlY3V0aXZlIChzdGFsZSkgY2FsbHMuICovXHJcblx0XHRcdFx0XHRpc0FuaW1hdGluZzogZmFsc2UsXHJcblx0XHRcdFx0XHQvKiBBIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCdzIGxpdmUgY29tcHV0ZWRTdHlsZSBvYmplY3QuIExlYXJuIG1vcmUgaGVyZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvQVBJL3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlICovXHJcblx0XHRcdFx0XHRjb21wdXRlZFN0eWxlOiBudWxsLFxyXG5cdFx0XHRcdFx0LyogVHdlZW4gZGF0YSBpcyBjYWNoZWQgZm9yIGVhY2ggYW5pbWF0aW9uIG9uIHRoZSBlbGVtZW50IHNvIHRoYXQgZGF0YSBjYW4gYmUgcGFzc2VkIGFjcm9zcyBjYWxscyAtLVxyXG5cdFx0XHRcdFx0IGluIHBhcnRpY3VsYXIsIGVuZCB2YWx1ZXMgYXJlIHVzZWQgYXMgc3Vic2VxdWVudCBzdGFydCB2YWx1ZXMgaW4gY29uc2VjdXRpdmUgVmVsb2NpdHkgY2FsbHMuICovXHJcblx0XHRcdFx0XHR0d2VlbnNDb250YWluZXI6IG51bGwsXHJcblx0XHRcdFx0XHQvKiBUaGUgZnVsbCByb290IHByb3BlcnR5IHZhbHVlcyBvZiBlYWNoIENTUyBob29rIGJlaW5nIGFuaW1hdGVkIG9uIHRoaXMgZWxlbWVudCBhcmUgY2FjaGVkIHNvIHRoYXQ6XHJcblx0XHRcdFx0XHQgMSkgQ29uY3VycmVudGx5LWFuaW1hdGluZyBob29rcyBzaGFyaW5nIHRoZSBzYW1lIHJvb3QgY2FuIGhhdmUgdGhlaXIgcm9vdCB2YWx1ZXMnIG1lcmdlZCBpbnRvIG9uZSB3aGlsZSB0d2VlbmluZy5cclxuXHRcdFx0XHRcdCAyKSBQb3N0LWhvb2staW5qZWN0aW9uIHJvb3QgdmFsdWVzIGNhbiBiZSB0cmFuc2ZlcnJlZCBvdmVyIHRvIGNvbnNlY3V0aXZlbHkgY2hhaW5lZCBWZWxvY2l0eSBjYWxscyBhcyBzdGFydGluZyByb290IHZhbHVlcy4gKi9cclxuXHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGU6IHt9LFxyXG5cdFx0XHRcdFx0LyogQSBjYWNoZSBmb3IgdHJhbnNmb3JtIHVwZGF0ZXMsIHdoaWNoIG11c3QgYmUgbWFudWFsbHkgZmx1c2hlZCB2aWEgQ1NTLmZsdXNoVHJhbnNmb3JtQ2FjaGUoKS4gKi9cclxuXHRcdFx0XHRcdHRyYW5zZm9ybUNhY2hlOiB7fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKiBBIHBhcmFsbGVsIHRvIGpRdWVyeSdzICQuY3NzKCksIHVzZWQgZm9yIGdldHRpbmcvc2V0dGluZyBWZWxvY2l0eSdzIGhvb2tlZCBDU1MgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0aG9vazogbnVsbCwgLyogRGVmaW5lZCBiZWxvdy4gKi9cclxuXHRcdFx0LyogVmVsb2NpdHktd2lkZSBhbmltYXRpb24gdGltZSByZW1hcHBpbmcgZm9yIHRlc3RpbmcgcHVycG9zZXMuICovXHJcblx0XHRcdG1vY2s6IGZhbHNlLFxyXG5cdFx0XHR2ZXJzaW9uOiB7bWFqb3I6IDEsIG1pbm9yOiA1LCBwYXRjaDogMn0sXHJcblx0XHRcdC8qIFNldCB0byAxIG9yIDIgKG1vc3QgdmVyYm9zZSkgdG8gb3V0cHV0IGRlYnVnIGluZm8gdG8gY29uc29sZS4gKi9cclxuXHRcdFx0ZGVidWc6IGZhbHNlLFxyXG5cdFx0XHQvKiBVc2UgckFGIGhpZ2ggcmVzb2x1dGlvbiB0aW1lc3RhbXAgd2hlbiBhdmFpbGFibGUgKi9cclxuXHRcdFx0dGltZXN0YW1wOiB0cnVlLFxyXG5cdFx0XHQvKiBQYXVzZSBhbGwgYW5pbWF0aW9ucyAqL1xyXG5cdFx0XHRwYXVzZUFsbDogZnVuY3Rpb24ocXVldWVOYW1lKSB7XHJcblx0XHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcclxuXHJcblx0XHRcdFx0JC5lYWNoKFZlbG9jaXR5LlN0YXRlLmNhbGxzLCBmdW5jdGlvbihpLCBhY3RpdmVDYWxsKSB7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGFjdGl2ZUNhbGwpIHtcclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHdlIGhhdmUgYSBxdWV1ZU5hbWUgYW5kIHRoaXMgY2FsbCBpcyBub3Qgb24gdGhhdCBxdWV1ZSwgc2tpcCAqL1xyXG5cdFx0XHRcdFx0XHRpZiAocXVldWVOYW1lICE9PSB1bmRlZmluZWQgJiYgKChhY3RpdmVDYWxsWzJdLnF1ZXVlICE9PSBxdWV1ZU5hbWUpIHx8IChhY3RpdmVDYWxsWzJdLnF1ZXVlID09PSBmYWxzZSkpKSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIFNldCBjYWxsIHRvIHBhdXNlZCAqL1xyXG5cdFx0XHRcdFx0XHRhY3RpdmVDYWxsWzVdID0ge1xyXG5cdFx0XHRcdFx0XHRcdHJlc3VtZTogZmFsc2VcclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0LyogUGF1c2UgdGltZXJzIG9uIGFueSBjdXJyZW50bHkgZGVsYXllZCBjYWxscyAqL1xyXG5cdFx0XHRcdCQuZWFjaChWZWxvY2l0eS5TdGF0ZS5kZWxheWVkRWxlbWVudHMsIGZ1bmN0aW9uKGssIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdGlmICghZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRwYXVzZURlbGF5T25FbGVtZW50KGVsZW1lbnQsIGN1cnJlbnRUaW1lKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0LyogUmVzdW1lIGFsbCBhbmltYXRpb25zICovXHJcblx0XHRcdHJlc3VtZUFsbDogZnVuY3Rpb24ocXVldWVOYW1lKSB7XHJcblx0XHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcclxuXHJcblx0XHRcdFx0JC5lYWNoKFZlbG9jaXR5LlN0YXRlLmNhbGxzLCBmdW5jdGlvbihpLCBhY3RpdmVDYWxsKSB7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGFjdGl2ZUNhbGwpIHtcclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHdlIGhhdmUgYSBxdWV1ZU5hbWUgYW5kIHRoaXMgY2FsbCBpcyBub3Qgb24gdGhhdCBxdWV1ZSwgc2tpcCAqL1xyXG5cdFx0XHRcdFx0XHRpZiAocXVldWVOYW1lICE9PSB1bmRlZmluZWQgJiYgKChhY3RpdmVDYWxsWzJdLnF1ZXVlICE9PSBxdWV1ZU5hbWUpIHx8IChhY3RpdmVDYWxsWzJdLnF1ZXVlID09PSBmYWxzZSkpKSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIFNldCBjYWxsIHRvIHJlc3VtZWQgaWYgaXQgd2FzIHBhdXNlZCAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoYWN0aXZlQ2FsbFs1XSkge1xyXG5cdFx0XHRcdFx0XHRcdGFjdGl2ZUNhbGxbNV0ucmVzdW1lID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdC8qIFJlc3VtZSB0aW1lcnMgb24gYW55IGN1cnJlbnRseSBkZWxheWVkIGNhbGxzICovXHJcblx0XHRcdFx0JC5lYWNoKFZlbG9jaXR5LlN0YXRlLmRlbGF5ZWRFbGVtZW50cywgZnVuY3Rpb24oaywgZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0aWYgKCFlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJlc3VtZURlbGF5T25FbGVtZW50KGVsZW1lbnQsIGN1cnJlbnRUaW1lKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHJcblx0XHQvKiBSZXRyaWV2ZSB0aGUgYXBwcm9wcmlhdGUgc2Nyb2xsIGFuY2hvciBhbmQgcHJvcGVydHkgbmFtZSBmb3IgdGhlIGJyb3dzZXI6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cuc2Nyb2xsWSAqL1xyXG5cdFx0aWYgKHdpbmRvdy5wYWdlWU9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFZlbG9jaXR5LlN0YXRlLnNjcm9sbEFuY2hvciA9IHdpbmRvdztcclxuXHRcdFx0VmVsb2NpdHkuU3RhdGUuc2Nyb2xsUHJvcGVydHlMZWZ0ID0gXCJwYWdlWE9mZnNldFwiO1xyXG5cdFx0XHRWZWxvY2l0eS5TdGF0ZS5zY3JvbGxQcm9wZXJ0eVRvcCA9IFwicGFnZVlPZmZzZXRcIjtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdFZlbG9jaXR5LlN0YXRlLnNjcm9sbEFuY2hvciA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUgfHwgZG9jdW1lbnQuYm9keTtcclxuXHRcdFx0VmVsb2NpdHkuU3RhdGUuc2Nyb2xsUHJvcGVydHlMZWZ0ID0gXCJzY3JvbGxMZWZ0XCI7XHJcblx0XHRcdFZlbG9jaXR5LlN0YXRlLnNjcm9sbFByb3BlcnR5VG9wID0gXCJzY3JvbGxUb3BcIjtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTaG9ydGhhbmQgYWxpYXMgZm9yIGpRdWVyeSdzICQuZGF0YSgpIHV0aWxpdHkuICovXHJcblx0XHRmdW5jdGlvbiBEYXRhKGVsZW1lbnQpIHtcclxuXHRcdFx0LyogSGFyZGNvZGUgYSByZWZlcmVuY2UgdG8gdGhlIHBsdWdpbiBuYW1lLiAqL1xyXG5cdFx0XHR2YXIgcmVzcG9uc2UgPSAkLmRhdGEoZWxlbWVudCwgXCJ2ZWxvY2l0eVwiKTtcclxuXHJcblx0XHRcdC8qIGpRdWVyeSA8PTEuNC4yIHJldHVybnMgbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZCB3aGVuIG5vIG1hdGNoIGlzIGZvdW5kLiBXZSBub3JtYWxpemUgdGhpcyBiZWhhdmlvci4gKi9cclxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlID09PSBudWxsID8gdW5kZWZpbmVkIDogcmVzcG9uc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqXHJcblx0XHQgRGVsYXkgVGltZXJcclxuXHRcdCAqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRmdW5jdGlvbiBwYXVzZURlbGF5T25FbGVtZW50KGVsZW1lbnQsIGN1cnJlbnRUaW1lKSB7XHJcblx0XHRcdC8qIENoZWNrIGZvciBhbnkgZGVsYXkgdGltZXJzLCBhbmQgcGF1c2UgdGhlIHNldCB0aW1lb3V0cyAod2hpbGUgcHJlc2VydmluZyB0aW1lIGRhdGEpXHJcblx0XHRcdCB0byBiZSByZXN1bWVkIHdoZW4gdGhlIFwicmVzdW1lXCIgY29tbWFuZCBpcyBpc3N1ZWQgKi9cclxuXHRcdFx0dmFyIGRhdGEgPSBEYXRhKGVsZW1lbnQpO1xyXG5cdFx0XHRpZiAoZGF0YSAmJiBkYXRhLmRlbGF5VGltZXIgJiYgIWRhdGEuZGVsYXlQYXVzZWQpIHtcclxuXHRcdFx0XHRkYXRhLmRlbGF5UmVtYWluaW5nID0gZGF0YS5kZWxheSAtIGN1cnJlbnRUaW1lICsgZGF0YS5kZWxheUJlZ2luO1xyXG5cdFx0XHRcdGRhdGEuZGVsYXlQYXVzZWQgPSB0cnVlO1xyXG5cdFx0XHRcdGNsZWFyVGltZW91dChkYXRhLmRlbGF5VGltZXIuc2V0VGltZW91dCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiByZXN1bWVEZWxheU9uRWxlbWVudChlbGVtZW50LCBjdXJyZW50VGltZSkge1xyXG5cdFx0XHQvKiBDaGVjayBmb3IgYW55IHBhdXNlZCB0aW1lcnMgYW5kIHJlc3VtZSAqL1xyXG5cdFx0XHR2YXIgZGF0YSA9IERhdGEoZWxlbWVudCk7XHJcblx0XHRcdGlmIChkYXRhICYmIGRhdGEuZGVsYXlUaW1lciAmJiBkYXRhLmRlbGF5UGF1c2VkKSB7XHJcblx0XHRcdFx0LyogSWYgdGhlIGVsZW1lbnQgd2FzIG1pZC1kZWxheSwgcmUgaW5pdGlhdGUgdGhlIHRpbWVvdXQgd2l0aCB0aGUgcmVtYWluaW5nIGRlbGF5ICovXHJcblx0XHRcdFx0ZGF0YS5kZWxheVBhdXNlZCA9IGZhbHNlO1xyXG5cdFx0XHRcdGRhdGEuZGVsYXlUaW1lci5zZXRUaW1lb3V0ID0gc2V0VGltZW91dChkYXRhLmRlbGF5VGltZXIubmV4dCwgZGF0YS5kZWxheVJlbWFpbmluZyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblxyXG5cclxuXHRcdC8qKioqKioqKioqKioqKlxyXG5cdFx0IEVhc2luZ1xyXG5cdFx0ICoqKioqKioqKioqKioqL1xyXG5cclxuXHRcdC8qIFN0ZXAgZWFzaW5nIGdlbmVyYXRvci4gKi9cclxuXHRcdGZ1bmN0aW9uIGdlbmVyYXRlU3RlcChzdGVwcykge1xyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24ocCkge1xyXG5cdFx0XHRcdHJldHVybiBNYXRoLnJvdW5kKHAgKiBzdGVwcykgKiAoMSAvIHN0ZXBzKTtcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBCZXppZXIgY3VydmUgZnVuY3Rpb24gZ2VuZXJhdG9yLiBDb3B5cmlnaHQgR2FldGFuIFJlbmF1ZGVhdS4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi9cclxuXHRcdGZ1bmN0aW9uIGdlbmVyYXRlQmV6aWVyKG1YMSwgbVkxLCBtWDIsIG1ZMikge1xyXG5cdFx0XHR2YXIgTkVXVE9OX0lURVJBVElPTlMgPSA0LFxyXG5cdFx0XHRcdFx0TkVXVE9OX01JTl9TTE9QRSA9IDAuMDAxLFxyXG5cdFx0XHRcdFx0U1VCRElWSVNJT05fUFJFQ0lTSU9OID0gMC4wMDAwMDAxLFxyXG5cdFx0XHRcdFx0U1VCRElWSVNJT05fTUFYX0lURVJBVElPTlMgPSAxMCxcclxuXHRcdFx0XHRcdGtTcGxpbmVUYWJsZVNpemUgPSAxMSxcclxuXHRcdFx0XHRcdGtTYW1wbGVTdGVwU2l6ZSA9IDEuMCAvIChrU3BsaW5lVGFibGVTaXplIC0gMS4wKSxcclxuXHRcdFx0XHRcdGZsb2F0MzJBcnJheVN1cHBvcnRlZCA9IFwiRmxvYXQzMkFycmF5XCIgaW4gd2luZG93O1xyXG5cclxuXHRcdFx0LyogTXVzdCBjb250YWluIGZvdXIgYXJndW1lbnRzLiAqL1xyXG5cdFx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gNCkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogQXJndW1lbnRzIG11c3QgYmUgbnVtYmVycy4gKi9cclxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCA0OyArK2kpIHtcclxuXHRcdFx0XHRpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSAhPT0gXCJudW1iZXJcIiB8fCBpc05hTihhcmd1bWVudHNbaV0pIHx8ICFpc0Zpbml0ZShhcmd1bWVudHNbaV0pKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBYIHZhbHVlcyBtdXN0IGJlIGluIHRoZSBbMCwgMV0gcmFuZ2UuICovXHJcblx0XHRcdG1YMSA9IE1hdGgubWluKG1YMSwgMSk7XHJcblx0XHRcdG1YMiA9IE1hdGgubWluKG1YMiwgMSk7XHJcblx0XHRcdG1YMSA9IE1hdGgubWF4KG1YMSwgMCk7XHJcblx0XHRcdG1YMiA9IE1hdGgubWF4KG1YMiwgMCk7XHJcblxyXG5cdFx0XHR2YXIgbVNhbXBsZVZhbHVlcyA9IGZsb2F0MzJBcnJheVN1cHBvcnRlZCA/IG5ldyBGbG9hdDMyQXJyYXkoa1NwbGluZVRhYmxlU2l6ZSkgOiBuZXcgQXJyYXkoa1NwbGluZVRhYmxlU2l6ZSk7XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBBKGFBMSwgYUEyKSB7XHJcblx0XHRcdFx0cmV0dXJuIDEuMCAtIDMuMCAqIGFBMiArIDMuMCAqIGFBMTtcclxuXHRcdFx0fVxyXG5cdFx0XHRmdW5jdGlvbiBCKGFBMSwgYUEyKSB7XHJcblx0XHRcdFx0cmV0dXJuIDMuMCAqIGFBMiAtIDYuMCAqIGFBMTtcclxuXHRcdFx0fVxyXG5cdFx0XHRmdW5jdGlvbiBDKGFBMSkge1xyXG5cdFx0XHRcdHJldHVybiAzLjAgKiBhQTE7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIGNhbGNCZXppZXIoYVQsIGFBMSwgYUEyKSB7XHJcblx0XHRcdFx0cmV0dXJuICgoQShhQTEsIGFBMikgKiBhVCArIEIoYUExLCBhQTIpKSAqIGFUICsgQyhhQTEpKSAqIGFUO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBnZXRTbG9wZShhVCwgYUExLCBhQTIpIHtcclxuXHRcdFx0XHRyZXR1cm4gMy4wICogQShhQTEsIGFBMikgKiBhVCAqIGFUICsgMi4wICogQihhQTEsIGFBMikgKiBhVCArIEMoYUExKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZnVuY3Rpb24gbmV3dG9uUmFwaHNvbkl0ZXJhdGUoYVgsIGFHdWVzc1QpIHtcclxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IE5FV1RPTl9JVEVSQVRJT05TOyArK2kpIHtcclxuXHRcdFx0XHRcdHZhciBjdXJyZW50U2xvcGUgPSBnZXRTbG9wZShhR3Vlc3NULCBtWDEsIG1YMik7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRTbG9wZSA9PT0gMC4wKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBhR3Vlc3NUO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHZhciBjdXJyZW50WCA9IGNhbGNCZXppZXIoYUd1ZXNzVCwgbVgxLCBtWDIpIC0gYVg7XHJcblx0XHRcdFx0XHRhR3Vlc3NUIC09IGN1cnJlbnRYIC8gY3VycmVudFNsb3BlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIGFHdWVzc1Q7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIGNhbGNTYW1wbGVWYWx1ZXMoKSB7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsaW5lVGFibGVTaXplOyArK2kpIHtcclxuXHRcdFx0XHRcdG1TYW1wbGVWYWx1ZXNbaV0gPSBjYWxjQmV6aWVyKGkgKiBrU2FtcGxlU3RlcFNpemUsIG1YMSwgbVgyKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIGJpbmFyeVN1YmRpdmlkZShhWCwgYUEsIGFCKSB7XHJcblx0XHRcdFx0dmFyIGN1cnJlbnRYLCBjdXJyZW50VCwgaSA9IDA7XHJcblxyXG5cdFx0XHRcdGRvIHtcclxuXHRcdFx0XHRcdGN1cnJlbnRUID0gYUEgKyAoYUIgLSBhQSkgLyAyLjA7XHJcblx0XHRcdFx0XHRjdXJyZW50WCA9IGNhbGNCZXppZXIoY3VycmVudFQsIG1YMSwgbVgyKSAtIGFYO1xyXG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRYID4gMC4wKSB7XHJcblx0XHRcdFx0XHRcdGFCID0gY3VycmVudFQ7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRhQSA9IGN1cnJlbnRUO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gd2hpbGUgKE1hdGguYWJzKGN1cnJlbnRYKSA+IFNVQkRJVklTSU9OX1BSRUNJU0lPTiAmJiArK2kgPCBTVUJESVZJU0lPTl9NQVhfSVRFUkFUSU9OUyk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBjdXJyZW50VDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZnVuY3Rpb24gZ2V0VEZvclgoYVgpIHtcclxuXHRcdFx0XHR2YXIgaW50ZXJ2YWxTdGFydCA9IDAuMCxcclxuXHRcdFx0XHRcdFx0Y3VycmVudFNhbXBsZSA9IDEsXHJcblx0XHRcdFx0XHRcdGxhc3RTYW1wbGUgPSBrU3BsaW5lVGFibGVTaXplIC0gMTtcclxuXHJcblx0XHRcdFx0Zm9yICg7IGN1cnJlbnRTYW1wbGUgIT09IGxhc3RTYW1wbGUgJiYgbVNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlXSA8PSBhWDsgKytjdXJyZW50U2FtcGxlKSB7XHJcblx0XHRcdFx0XHRpbnRlcnZhbFN0YXJ0ICs9IGtTYW1wbGVTdGVwU2l6ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC0tY3VycmVudFNhbXBsZTtcclxuXHJcblx0XHRcdFx0dmFyIGRpc3QgPSAoYVggLSBtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdKSAvIChtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGUgKyAxXSAtIG1TYW1wbGVWYWx1ZXNbY3VycmVudFNhbXBsZV0pLFxyXG5cdFx0XHRcdFx0XHRndWVzc0ZvclQgPSBpbnRlcnZhbFN0YXJ0ICsgZGlzdCAqIGtTYW1wbGVTdGVwU2l6ZSxcclxuXHRcdFx0XHRcdFx0aW5pdGlhbFNsb3BlID0gZ2V0U2xvcGUoZ3Vlc3NGb3JULCBtWDEsIG1YMik7XHJcblxyXG5cdFx0XHRcdGlmIChpbml0aWFsU2xvcGUgPj0gTkVXVE9OX01JTl9TTE9QRSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG5ld3RvblJhcGhzb25JdGVyYXRlKGFYLCBndWVzc0ZvclQpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoaW5pdGlhbFNsb3BlID09PSAwLjApIHtcclxuXHRcdFx0XHRcdHJldHVybiBndWVzc0ZvclQ7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHJldHVybiBiaW5hcnlTdWJkaXZpZGUoYVgsIGludGVydmFsU3RhcnQsIGludGVydmFsU3RhcnQgKyBrU2FtcGxlU3RlcFNpemUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIF9wcmVjb21wdXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdFx0ZnVuY3Rpb24gcHJlY29tcHV0ZSgpIHtcclxuXHRcdFx0XHRfcHJlY29tcHV0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdGlmIChtWDEgIT09IG1ZMSB8fCBtWDIgIT09IG1ZMikge1xyXG5cdFx0XHRcdFx0Y2FsY1NhbXBsZVZhbHVlcygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIGYgPSBmdW5jdGlvbihhWCkge1xyXG5cdFx0XHRcdGlmICghX3ByZWNvbXB1dGVkKSB7XHJcblx0XHRcdFx0XHRwcmVjb21wdXRlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChtWDEgPT09IG1ZMSAmJiBtWDIgPT09IG1ZMikge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGFYO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYVggPT09IDApIHtcclxuXHRcdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYVggPT09IDEpIHtcclxuXHRcdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIGNhbGNCZXppZXIoZ2V0VEZvclgoYVgpLCBtWTEsIG1ZMik7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRmLmdldENvbnRyb2xQb2ludHMgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gW3t4OiBtWDEsIHk6IG1ZMX0sIHt4OiBtWDIsIHk6IG1ZMn1dO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0dmFyIHN0ciA9IFwiZ2VuZXJhdGVCZXppZXIoXCIgKyBbbVgxLCBtWTEsIG1YMiwgbVkyXSArIFwiKVwiO1xyXG5cdFx0XHRmLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIHN0cjtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdHJldHVybiBmO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFJ1bmdlLUt1dHRhIHNwcmluZyBwaHlzaWNzIGZ1bmN0aW9uIGdlbmVyYXRvci4gQWRhcHRlZCBmcm9tIEZyYW1lci5qcywgY29weXJpZ2h0IEtvZW4gQm9rLiBNSVQgTGljZW5zZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSAqL1xyXG5cdFx0LyogR2l2ZW4gYSB0ZW5zaW9uLCBmcmljdGlvbiwgYW5kIGR1cmF0aW9uLCBhIHNpbXVsYXRpb24gYXQgNjBGUFMgd2lsbCBmaXJzdCBydW4gd2l0aG91dCBhIGRlZmluZWQgZHVyYXRpb24gaW4gb3JkZXIgdG8gY2FsY3VsYXRlIHRoZSBmdWxsIHBhdGguIEEgc2Vjb25kIHBhc3NcclxuXHRcdCB0aGVuIGFkanVzdHMgdGhlIHRpbWUgZGVsdGEgLS0gdXNpbmcgdGhlIHJlbGF0aW9uIGJldHdlZW4gYWN0dWFsIHRpbWUgYW5kIGR1cmF0aW9uIC0tIHRvIGNhbGN1bGF0ZSB0aGUgcGF0aCBmb3IgdGhlIGR1cmF0aW9uLWNvbnN0cmFpbmVkIGFuaW1hdGlvbi4gKi9cclxuXHRcdHZhciBnZW5lcmF0ZVNwcmluZ1JLNCA9IChmdW5jdGlvbigpIHtcclxuXHRcdFx0ZnVuY3Rpb24gc3ByaW5nQWNjZWxlcmF0aW9uRm9yU3RhdGUoc3RhdGUpIHtcclxuXHRcdFx0XHRyZXR1cm4gKC1zdGF0ZS50ZW5zaW9uICogc3RhdGUueCkgLSAoc3RhdGUuZnJpY3Rpb24gKiBzdGF0ZS52KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZnVuY3Rpb24gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKGluaXRpYWxTdGF0ZSwgZHQsIGRlcml2YXRpdmUpIHtcclxuXHRcdFx0XHR2YXIgc3RhdGUgPSB7XHJcblx0XHRcdFx0XHR4OiBpbml0aWFsU3RhdGUueCArIGRlcml2YXRpdmUuZHggKiBkdCxcclxuXHRcdFx0XHRcdHY6IGluaXRpYWxTdGF0ZS52ICsgZGVyaXZhdGl2ZS5kdiAqIGR0LFxyXG5cdFx0XHRcdFx0dGVuc2lvbjogaW5pdGlhbFN0YXRlLnRlbnNpb24sXHJcblx0XHRcdFx0XHRmcmljdGlvbjogaW5pdGlhbFN0YXRlLmZyaWN0aW9uXHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHtkeDogc3RhdGUudiwgZHY6IHNwcmluZ0FjY2VsZXJhdGlvbkZvclN0YXRlKHN0YXRlKX07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIHNwcmluZ0ludGVncmF0ZVN0YXRlKHN0YXRlLCBkdCkge1xyXG5cdFx0XHRcdHZhciBhID0ge1xyXG5cdFx0XHRcdFx0ZHg6IHN0YXRlLnYsXHJcblx0XHRcdFx0XHRkdjogc3ByaW5nQWNjZWxlcmF0aW9uRm9yU3RhdGUoc3RhdGUpXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0YiA9IHNwcmluZ0V2YWx1YXRlU3RhdGVXaXRoRGVyaXZhdGl2ZShzdGF0ZSwgZHQgKiAwLjUsIGEpLFxyXG5cdFx0XHRcdFx0XHRjID0gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKHN0YXRlLCBkdCAqIDAuNSwgYiksXHJcblx0XHRcdFx0XHRcdGQgPSBzcHJpbmdFdmFsdWF0ZVN0YXRlV2l0aERlcml2YXRpdmUoc3RhdGUsIGR0LCBjKSxcclxuXHRcdFx0XHRcdFx0ZHhkdCA9IDEuMCAvIDYuMCAqIChhLmR4ICsgMi4wICogKGIuZHggKyBjLmR4KSArIGQuZHgpLFxyXG5cdFx0XHRcdFx0XHRkdmR0ID0gMS4wIC8gNi4wICogKGEuZHYgKyAyLjAgKiAoYi5kdiArIGMuZHYpICsgZC5kdik7XHJcblxyXG5cdFx0XHRcdHN0YXRlLnggPSBzdGF0ZS54ICsgZHhkdCAqIGR0O1xyXG5cdFx0XHRcdHN0YXRlLnYgPSBzdGF0ZS52ICsgZHZkdCAqIGR0O1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gc3RhdGU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBmdW5jdGlvbiBzcHJpbmdSSzRGYWN0b3J5KHRlbnNpb24sIGZyaWN0aW9uLCBkdXJhdGlvbikge1xyXG5cclxuXHRcdFx0XHR2YXIgaW5pdFN0YXRlID0ge1xyXG5cdFx0XHRcdFx0eDogLTEsXHJcblx0XHRcdFx0XHR2OiAwLFxyXG5cdFx0XHRcdFx0dGVuc2lvbjogbnVsbCxcclxuXHRcdFx0XHRcdGZyaWN0aW9uOiBudWxsXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0cGF0aCA9IFswXSxcclxuXHRcdFx0XHRcdFx0dGltZV9sYXBzZWQgPSAwLFxyXG5cdFx0XHRcdFx0XHR0b2xlcmFuY2UgPSAxIC8gMTAwMDAsXHJcblx0XHRcdFx0XHRcdERUID0gMTYgLyAxMDAwLFxyXG5cdFx0XHRcdFx0XHRoYXZlX2R1cmF0aW9uLCBkdCwgbGFzdF9zdGF0ZTtcclxuXHJcblx0XHRcdFx0dGVuc2lvbiA9IHBhcnNlRmxvYXQodGVuc2lvbikgfHwgNTAwO1xyXG5cdFx0XHRcdGZyaWN0aW9uID0gcGFyc2VGbG9hdChmcmljdGlvbikgfHwgMjA7XHJcblx0XHRcdFx0ZHVyYXRpb24gPSBkdXJhdGlvbiB8fCBudWxsO1xyXG5cclxuXHRcdFx0XHRpbml0U3RhdGUudGVuc2lvbiA9IHRlbnNpb247XHJcblx0XHRcdFx0aW5pdFN0YXRlLmZyaWN0aW9uID0gZnJpY3Rpb247XHJcblxyXG5cdFx0XHRcdGhhdmVfZHVyYXRpb24gPSBkdXJhdGlvbiAhPT0gbnVsbDtcclxuXHJcblx0XHRcdFx0LyogQ2FsY3VsYXRlIHRoZSBhY3R1YWwgdGltZSBpdCB0YWtlcyBmb3IgdGhpcyBhbmltYXRpb24gdG8gY29tcGxldGUgd2l0aCB0aGUgcHJvdmlkZWQgY29uZGl0aW9ucy4gKi9cclxuXHRcdFx0XHRpZiAoaGF2ZV9kdXJhdGlvbikge1xyXG5cdFx0XHRcdFx0LyogUnVuIHRoZSBzaW11bGF0aW9uIHdpdGhvdXQgYSBkdXJhdGlvbi4gKi9cclxuXHRcdFx0XHRcdHRpbWVfbGFwc2VkID0gc3ByaW5nUks0RmFjdG9yeSh0ZW5zaW9uLCBmcmljdGlvbik7XHJcblx0XHRcdFx0XHQvKiBDb21wdXRlIHRoZSBhZGp1c3RlZCB0aW1lIGRlbHRhLiAqL1xyXG5cdFx0XHRcdFx0ZHQgPSB0aW1lX2xhcHNlZCAvIGR1cmF0aW9uICogRFQ7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGR0ID0gRFQ7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR3aGlsZSAodHJ1ZSkge1xyXG5cdFx0XHRcdFx0LyogTmV4dC9zdGVwIGZ1bmN0aW9uIC4qL1xyXG5cdFx0XHRcdFx0bGFzdF9zdGF0ZSA9IHNwcmluZ0ludGVncmF0ZVN0YXRlKGxhc3Rfc3RhdGUgfHwgaW5pdFN0YXRlLCBkdCk7XHJcblx0XHRcdFx0XHQvKiBTdG9yZSB0aGUgcG9zaXRpb24uICovXHJcblx0XHRcdFx0XHRwYXRoLnB1c2goMSArIGxhc3Rfc3RhdGUueCk7XHJcblx0XHRcdFx0XHR0aW1lX2xhcHNlZCArPSAxNjtcclxuXHRcdFx0XHRcdC8qIElmIHRoZSBjaGFuZ2UgdGhyZXNob2xkIGlzIHJlYWNoZWQsIGJyZWFrLiAqL1xyXG5cdFx0XHRcdFx0aWYgKCEoTWF0aC5hYnMobGFzdF9zdGF0ZS54KSA+IHRvbGVyYW5jZSAmJiBNYXRoLmFicyhsYXN0X3N0YXRlLnYpID4gdG9sZXJhbmNlKSkge1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIElmIGR1cmF0aW9uIGlzIG5vdCBkZWZpbmVkLCByZXR1cm4gdGhlIGFjdHVhbCB0aW1lIHJlcXVpcmVkIGZvciBjb21wbGV0aW5nIHRoaXMgYW5pbWF0aW9uLiBPdGhlcndpc2UsIHJldHVybiBhIGNsb3N1cmUgdGhhdCBob2xkcyB0aGVcclxuXHRcdFx0XHQgY29tcHV0ZWQgcGF0aCBhbmQgcmV0dXJucyBhIHNuYXBzaG90IG9mIHRoZSBwb3NpdGlvbiBhY2NvcmRpbmcgdG8gYSBnaXZlbiBwZXJjZW50Q29tcGxldGUuICovXHJcblx0XHRcdFx0cmV0dXJuICFoYXZlX2R1cmF0aW9uID8gdGltZV9sYXBzZWQgOiBmdW5jdGlvbihwZXJjZW50Q29tcGxldGUpIHtcclxuXHRcdFx0XHRcdHJldHVybiBwYXRoWyAocGVyY2VudENvbXBsZXRlICogKHBhdGgubGVuZ3RoIC0gMSkpIHwgMCBdO1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH07XHJcblx0XHR9KCkpO1xyXG5cclxuXHRcdC8qIGpRdWVyeSBlYXNpbmdzLiAqL1xyXG5cdFx0VmVsb2NpdHkuRWFzaW5ncyA9IHtcclxuXHRcdFx0bGluZWFyOiBmdW5jdGlvbihwKSB7XHJcblx0XHRcdFx0cmV0dXJuIHA7XHJcblx0XHRcdH0sXHJcblx0XHRcdHN3aW5nOiBmdW5jdGlvbihwKSB7XHJcblx0XHRcdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKHAgKiBNYXRoLlBJKSAvIDI7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8qIEJvbnVzIFwic3ByaW5nXCIgZWFzaW5nLCB3aGljaCBpcyBhIGxlc3MgZXhhZ2dlcmF0ZWQgdmVyc2lvbiBvZiBlYXNlSW5PdXRFbGFzdGljLiAqL1xyXG5cdFx0XHRzcHJpbmc6IGZ1bmN0aW9uKHApIHtcclxuXHRcdFx0XHRyZXR1cm4gMSAtIChNYXRoLmNvcyhwICogNC41ICogTWF0aC5QSSkgKiBNYXRoLmV4cCgtcCAqIDYpKTtcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHJcblx0XHQvKiBDU1MzIGFuZCBSb2JlcnQgUGVubmVyIGVhc2luZ3MuICovXHJcblx0XHQkLmVhY2goXHJcblx0XHRcdFx0W1xyXG5cdFx0XHRcdFx0W1wiZWFzZVwiLCBbMC4yNSwgMC4xLCAwLjI1LCAxLjBdXSxcclxuXHRcdFx0XHRcdFtcImVhc2UtaW5cIiwgWzAuNDIsIDAuMCwgMS4wMCwgMS4wXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlLW91dFwiLCBbMC4wMCwgMC4wLCAwLjU4LCAxLjBdXSxcclxuXHRcdFx0XHRcdFtcImVhc2UtaW4tb3V0XCIsIFswLjQyLCAwLjAsIDAuNTgsIDEuMF1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluU2luZVwiLCBbMC40NywgMCwgMC43NDUsIDAuNzE1XV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlT3V0U2luZVwiLCBbMC4zOSwgMC41NzUsIDAuNTY1LCAxXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlSW5PdXRTaW5lXCIsIFswLjQ0NSwgMC4wNSwgMC41NSwgMC45NV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluUXVhZFwiLCBbMC41NSwgMC4wODUsIDAuNjgsIDAuNTNdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VPdXRRdWFkXCIsIFswLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0XV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlSW5PdXRRdWFkXCIsIFswLjQ1NSwgMC4wMywgMC41MTUsIDAuOTU1XV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlSW5DdWJpY1wiLCBbMC41NSwgMC4wNTUsIDAuNjc1LCAwLjE5XV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlT3V0Q3ViaWNcIiwgWzAuMjE1LCAwLjYxLCAwLjM1NSwgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluT3V0Q3ViaWNcIiwgWzAuNjQ1LCAwLjA0NSwgMC4zNTUsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJblF1YXJ0XCIsIFswLjg5NSwgMC4wMywgMC42ODUsIDAuMjJdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VPdXRRdWFydFwiLCBbMC4xNjUsIDAuODQsIDAuNDQsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJbk91dFF1YXJ0XCIsIFswLjc3LCAwLCAwLjE3NSwgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluUXVpbnRcIiwgWzAuNzU1LCAwLjA1LCAwLjg1NSwgMC4wNl1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZU91dFF1aW50XCIsIFswLjIzLCAxLCAwLjMyLCAxXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlSW5PdXRRdWludFwiLCBbMC44NiwgMCwgMC4wNywgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluRXhwb1wiLCBbMC45NSwgMC4wNSwgMC43OTUsIDAuMDM1XV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlT3V0RXhwb1wiLCBbMC4xOSwgMSwgMC4yMiwgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluT3V0RXhwb1wiLCBbMSwgMCwgMCwgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluQ2lyY1wiLCBbMC42LCAwLjA0LCAwLjk4LCAwLjMzNV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZU91dENpcmNcIiwgWzAuMDc1LCAwLjgyLCAwLjE2NSwgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluT3V0Q2lyY1wiLCBbMC43ODUsIDAuMTM1LCAwLjE1LCAwLjg2XV1cclxuXHRcdFx0XHRdLCBmdW5jdGlvbihpLCBlYXNpbmdBcnJheSkge1xyXG5cdFx0XHRWZWxvY2l0eS5FYXNpbmdzW2Vhc2luZ0FycmF5WzBdXSA9IGdlbmVyYXRlQmV6aWVyLmFwcGx5KG51bGwsIGVhc2luZ0FycmF5WzFdKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIERldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgZWFzaW5nIHR5cGUgZ2l2ZW4gYW4gZWFzaW5nIGlucHV0LiAqL1xyXG5cdFx0ZnVuY3Rpb24gZ2V0RWFzaW5nKHZhbHVlLCBkdXJhdGlvbikge1xyXG5cdFx0XHR2YXIgZWFzaW5nID0gdmFsdWU7XHJcblxyXG5cdFx0XHQvKiBUaGUgZWFzaW5nIG9wdGlvbiBjYW4gZWl0aGVyIGJlIGEgc3RyaW5nIHRoYXQgcmVmZXJlbmNlcyBhIHByZS1yZWdpc3RlcmVkIGVhc2luZyxcclxuXHRcdFx0IG9yIGl0IGNhbiBiZSBhIHR3by0vZm91ci1pdGVtIGFycmF5IG9mIGludGVnZXJzIHRvIGJlIGNvbnZlcnRlZCBpbnRvIGEgYmV6aWVyL3NwcmluZyBmdW5jdGlvbi4gKi9cclxuXHRcdFx0aWYgKFR5cGUuaXNTdHJpbmcodmFsdWUpKSB7XHJcblx0XHRcdFx0LyogRW5zdXJlIHRoYXQgdGhlIGVhc2luZyBoYXMgYmVlbiBhc3NpZ25lZCB0byBqUXVlcnkncyBWZWxvY2l0eS5FYXNpbmdzIG9iamVjdC4gKi9cclxuXHRcdFx0XHRpZiAoIVZlbG9jaXR5LkVhc2luZ3NbdmFsdWVdKSB7XHJcblx0XHRcdFx0XHRlYXNpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSBpZiAoVHlwZS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDEpIHtcclxuXHRcdFx0XHRlYXNpbmcgPSBnZW5lcmF0ZVN0ZXAuYXBwbHkobnVsbCwgdmFsdWUpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKFR5cGUuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAyKSB7XHJcblx0XHRcdFx0Lyogc3ByaW5nUks0IG11c3QgYmUgcGFzc2VkIHRoZSBhbmltYXRpb24ncyBkdXJhdGlvbi4gKi9cclxuXHRcdFx0XHQvKiBOb3RlOiBJZiB0aGUgc3ByaW5nUks0IGFycmF5IGNvbnRhaW5zIG5vbi1udW1iZXJzLCBnZW5lcmF0ZVNwcmluZ1JLNCgpIHJldHVybnMgYW4gZWFzaW5nXHJcblx0XHRcdFx0IGZ1bmN0aW9uIGdlbmVyYXRlZCB3aXRoIGRlZmF1bHQgdGVuc2lvbiBhbmQgZnJpY3Rpb24gdmFsdWVzLiAqL1xyXG5cdFx0XHRcdGVhc2luZyA9IGdlbmVyYXRlU3ByaW5nUks0LmFwcGx5KG51bGwsIHZhbHVlLmNvbmNhdChbZHVyYXRpb25dKSk7XHJcblx0XHRcdH0gZWxzZSBpZiAoVHlwZS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDQpIHtcclxuXHRcdFx0XHQvKiBOb3RlOiBJZiB0aGUgYmV6aWVyIGFycmF5IGNvbnRhaW5zIG5vbi1udW1iZXJzLCBnZW5lcmF0ZUJlemllcigpIHJldHVybnMgZmFsc2UuICovXHJcblx0XHRcdFx0ZWFzaW5nID0gZ2VuZXJhdGVCZXppZXIuYXBwbHkobnVsbCwgdmFsdWUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGVhc2luZyA9IGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBSZXZlcnQgdG8gdGhlIFZlbG9jaXR5LXdpZGUgZGVmYXVsdCBlYXNpbmcgdHlwZSwgb3IgZmFsbCBiYWNrIHRvIFwic3dpbmdcIiAod2hpY2ggaXMgYWxzbyBqUXVlcnkncyBkZWZhdWx0KVxyXG5cdFx0XHQgaWYgdGhlIFZlbG9jaXR5LXdpZGUgZGVmYXVsdCBoYXMgYmVlbiBpbmNvcnJlY3RseSBtb2RpZmllZC4gKi9cclxuXHRcdFx0aWYgKGVhc2luZyA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRpZiAoVmVsb2NpdHkuRWFzaW5nc1tWZWxvY2l0eS5kZWZhdWx0cy5lYXNpbmddKSB7XHJcblx0XHRcdFx0XHRlYXNpbmcgPSBWZWxvY2l0eS5kZWZhdWx0cy5lYXNpbmc7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGVhc2luZyA9IEVBU0lOR19ERUZBVUxUO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGVhc2luZztcclxuXHRcdH1cclxuXHJcblx0XHQvKioqKioqKioqKioqKioqKipcclxuXHRcdCBDU1MgU3RhY2tcclxuXHRcdCAqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHQvKiBUaGUgQ1NTIG9iamVjdCBpcyBhIGhpZ2hseSBjb25kZW5zZWQgYW5kIHBlcmZvcm1hbnQgQ1NTIHN0YWNrIHRoYXQgZnVsbHkgcmVwbGFjZXMgalF1ZXJ5J3MuXHJcblx0XHQgSXQgaGFuZGxlcyB0aGUgdmFsaWRhdGlvbiwgZ2V0dGluZywgYW5kIHNldHRpbmcgb2YgYm90aCBzdGFuZGFyZCBDU1MgcHJvcGVydGllcyBhbmQgQ1NTIHByb3BlcnR5IGhvb2tzLiAqL1xyXG5cdFx0LyogTm90ZTogQSBcIkNTU1wiIHNob3J0aGFuZCBpcyBhbGlhc2VkIHNvIHRoYXQgb3VyIGNvZGUgaXMgZWFzaWVyIHRvIHJlYWQuICovXHJcblx0XHR2YXIgQ1NTID0gVmVsb2NpdHkuQ1NTID0ge1xyXG5cdFx0XHQvKioqKioqKioqKioqKlxyXG5cdFx0XHQgUmVnRXhcclxuXHRcdFx0ICoqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRSZWdFeDoge1xyXG5cdFx0XHRcdGlzSGV4OiAvXiMoW0EtZlxcZF17M30pezEsMn0kL2ksXHJcblx0XHRcdFx0LyogVW53cmFwIGEgcHJvcGVydHkgdmFsdWUncyBzdXJyb3VuZGluZyB0ZXh0LCBlLmcuIFwicmdiYSg0LCAzLCAyLCAxKVwiID09PiBcIjQsIDMsIDIsIDFcIiBhbmQgXCJyZWN0KDRweCAzcHggMnB4IDFweClcIiA9PT4gXCI0cHggM3B4IDJweCAxcHhcIi4gKi9cclxuXHRcdFx0XHR2YWx1ZVVud3JhcDogL15bQS16XStcXCgoLiopXFwpJC9pLFxyXG5cdFx0XHRcdHdyYXBwZWRWYWx1ZUFscmVhZHlFeHRyYWN0ZWQ6IC9bMC05Ll0rIFswLTkuXSsgWzAtOS5dKyggWzAtOS5dKyk/LyxcclxuXHRcdFx0XHQvKiBTcGxpdCBhIG11bHRpLXZhbHVlIHByb3BlcnR5IGludG8gYW4gYXJyYXkgb2Ygc3VidmFsdWVzLCBlLmcuIFwicmdiYSg0LCAzLCAyLCAxKSA0cHggM3B4IDJweCAxcHhcIiA9PT4gWyBcInJnYmEoNCwgMywgMiwgMSlcIiwgXCI0cHhcIiwgXCIzcHhcIiwgXCIycHhcIiwgXCIxcHhcIiBdLiAqL1xyXG5cdFx0XHRcdHZhbHVlU3BsaXQ6IC8oW0Etel0rXFwoLitcXCkpfCgoW0EtejAtOSMtLl0rPykoPz1cXHN8JCkpL2lnXHJcblx0XHRcdH0sXHJcblx0XHRcdC8qKioqKioqKioqKipcclxuXHRcdFx0IExpc3RzXHJcblx0XHRcdCAqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRMaXN0czoge1xyXG5cdFx0XHRcdGNvbG9yczogW1wiZmlsbFwiLCBcInN0cm9rZVwiLCBcInN0b3BDb2xvclwiLCBcImNvbG9yXCIsIFwiYmFja2dyb3VuZENvbG9yXCIsIFwiYm9yZGVyQ29sb3JcIiwgXCJib3JkZXJUb3BDb2xvclwiLCBcImJvcmRlclJpZ2h0Q29sb3JcIiwgXCJib3JkZXJCb3R0b21Db2xvclwiLCBcImJvcmRlckxlZnRDb2xvclwiLCBcIm91dGxpbmVDb2xvclwiXSxcclxuXHRcdFx0XHR0cmFuc2Zvcm1zQmFzZTogW1widHJhbnNsYXRlWFwiLCBcInRyYW5zbGF0ZVlcIiwgXCJzY2FsZVwiLCBcInNjYWxlWFwiLCBcInNjYWxlWVwiLCBcInNrZXdYXCIsIFwic2tld1lcIiwgXCJyb3RhdGVaXCJdLFxyXG5cdFx0XHRcdHRyYW5zZm9ybXMzRDogW1widHJhbnNmb3JtUGVyc3BlY3RpdmVcIiwgXCJ0cmFuc2xhdGVaXCIsIFwic2NhbGVaXCIsIFwicm90YXRlWFwiLCBcInJvdGF0ZVlcIl0sXHJcblx0XHRcdFx0dW5pdHM6IFtcclxuXHRcdFx0XHRcdFwiJVwiLCAvLyByZWxhdGl2ZVxyXG5cdFx0XHRcdFx0XCJlbVwiLCBcImV4XCIsIFwiY2hcIiwgXCJyZW1cIiwgLy8gZm9udCByZWxhdGl2ZVxyXG5cdFx0XHRcdFx0XCJ2d1wiLCBcInZoXCIsIFwidm1pblwiLCBcInZtYXhcIiwgLy8gdmlld3BvcnQgcmVsYXRpdmVcclxuXHRcdFx0XHRcdFwiY21cIiwgXCJtbVwiLCBcIlFcIiwgXCJpblwiLCBcInBjXCIsIFwicHRcIiwgXCJweFwiLCAvLyBhYnNvbHV0ZSBsZW5ndGhzXHJcblx0XHRcdFx0XHRcImRlZ1wiLCBcImdyYWRcIiwgXCJyYWRcIiwgXCJ0dXJuXCIsIC8vIGFuZ2xlc1xyXG5cdFx0XHRcdFx0XCJzXCIsIFwibXNcIiAvLyB0aW1lXHJcblx0XHRcdFx0XSxcclxuXHRcdFx0XHRjb2xvck5hbWVzOiB7XHJcblx0XHRcdFx0XHRcImFsaWNlYmx1ZVwiOiBcIjI0MCwyNDgsMjU1XCIsXHJcblx0XHRcdFx0XHRcImFudGlxdWV3aGl0ZVwiOiBcIjI1MCwyMzUsMjE1XCIsXHJcblx0XHRcdFx0XHRcImFxdWFtYXJpbmVcIjogXCIxMjcsMjU1LDIxMlwiLFxyXG5cdFx0XHRcdFx0XCJhcXVhXCI6IFwiMCwyNTUsMjU1XCIsXHJcblx0XHRcdFx0XHRcImF6dXJlXCI6IFwiMjQwLDI1NSwyNTVcIixcclxuXHRcdFx0XHRcdFwiYmVpZ2VcIjogXCIyNDUsMjQ1LDIyMFwiLFxyXG5cdFx0XHRcdFx0XCJiaXNxdWVcIjogXCIyNTUsMjI4LDE5NlwiLFxyXG5cdFx0XHRcdFx0XCJibGFja1wiOiBcIjAsMCwwXCIsXHJcblx0XHRcdFx0XHRcImJsYW5jaGVkYWxtb25kXCI6IFwiMjU1LDIzNSwyMDVcIixcclxuXHRcdFx0XHRcdFwiYmx1ZXZpb2xldFwiOiBcIjEzOCw0MywyMjZcIixcclxuXHRcdFx0XHRcdFwiYmx1ZVwiOiBcIjAsMCwyNTVcIixcclxuXHRcdFx0XHRcdFwiYnJvd25cIjogXCIxNjUsNDIsNDJcIixcclxuXHRcdFx0XHRcdFwiYnVybHl3b29kXCI6IFwiMjIyLDE4NCwxMzVcIixcclxuXHRcdFx0XHRcdFwiY2FkZXRibHVlXCI6IFwiOTUsMTU4LDE2MFwiLFxyXG5cdFx0XHRcdFx0XCJjaGFydHJldXNlXCI6IFwiMTI3LDI1NSwwXCIsXHJcblx0XHRcdFx0XHRcImNob2NvbGF0ZVwiOiBcIjIxMCwxMDUsMzBcIixcclxuXHRcdFx0XHRcdFwiY29yYWxcIjogXCIyNTUsMTI3LDgwXCIsXHJcblx0XHRcdFx0XHRcImNvcm5mbG93ZXJibHVlXCI6IFwiMTAwLDE0OSwyMzdcIixcclxuXHRcdFx0XHRcdFwiY29ybnNpbGtcIjogXCIyNTUsMjQ4LDIyMFwiLFxyXG5cdFx0XHRcdFx0XCJjcmltc29uXCI6IFwiMjIwLDIwLDYwXCIsXHJcblx0XHRcdFx0XHRcImN5YW5cIjogXCIwLDI1NSwyNTVcIixcclxuXHRcdFx0XHRcdFwiZGFya2JsdWVcIjogXCIwLDAsMTM5XCIsXHJcblx0XHRcdFx0XHRcImRhcmtjeWFuXCI6IFwiMCwxMzksMTM5XCIsXHJcblx0XHRcdFx0XHRcImRhcmtnb2xkZW5yb2RcIjogXCIxODQsMTM0LDExXCIsXHJcblx0XHRcdFx0XHRcImRhcmtncmF5XCI6IFwiMTY5LDE2OSwxNjlcIixcclxuXHRcdFx0XHRcdFwiZGFya2dyZXlcIjogXCIxNjksMTY5LDE2OVwiLFxyXG5cdFx0XHRcdFx0XCJkYXJrZ3JlZW5cIjogXCIwLDEwMCwwXCIsXHJcblx0XHRcdFx0XHRcImRhcmtraGFraVwiOiBcIjE4OSwxODMsMTA3XCIsXHJcblx0XHRcdFx0XHRcImRhcmttYWdlbnRhXCI6IFwiMTM5LDAsMTM5XCIsXHJcblx0XHRcdFx0XHRcImRhcmtvbGl2ZWdyZWVuXCI6IFwiODUsMTA3LDQ3XCIsXHJcblx0XHRcdFx0XHRcImRhcmtvcmFuZ2VcIjogXCIyNTUsMTQwLDBcIixcclxuXHRcdFx0XHRcdFwiZGFya29yY2hpZFwiOiBcIjE1Myw1MCwyMDRcIixcclxuXHRcdFx0XHRcdFwiZGFya3JlZFwiOiBcIjEzOSwwLDBcIixcclxuXHRcdFx0XHRcdFwiZGFya3NhbG1vblwiOiBcIjIzMywxNTAsMTIyXCIsXHJcblx0XHRcdFx0XHRcImRhcmtzZWFncmVlblwiOiBcIjE0MywxODgsMTQzXCIsXHJcblx0XHRcdFx0XHRcImRhcmtzbGF0ZWJsdWVcIjogXCI3Miw2MSwxMzlcIixcclxuXHRcdFx0XHRcdFwiZGFya3NsYXRlZ3JheVwiOiBcIjQ3LDc5LDc5XCIsXHJcblx0XHRcdFx0XHRcImRhcmt0dXJxdW9pc2VcIjogXCIwLDIwNiwyMDlcIixcclxuXHRcdFx0XHRcdFwiZGFya3Zpb2xldFwiOiBcIjE0OCwwLDIxMVwiLFxyXG5cdFx0XHRcdFx0XCJkZWVwcGlua1wiOiBcIjI1NSwyMCwxNDdcIixcclxuXHRcdFx0XHRcdFwiZGVlcHNreWJsdWVcIjogXCIwLDE5MSwyNTVcIixcclxuXHRcdFx0XHRcdFwiZGltZ3JheVwiOiBcIjEwNSwxMDUsMTA1XCIsXHJcblx0XHRcdFx0XHRcImRpbWdyZXlcIjogXCIxMDUsMTA1LDEwNVwiLFxyXG5cdFx0XHRcdFx0XCJkb2RnZXJibHVlXCI6IFwiMzAsMTQ0LDI1NVwiLFxyXG5cdFx0XHRcdFx0XCJmaXJlYnJpY2tcIjogXCIxNzgsMzQsMzRcIixcclxuXHRcdFx0XHRcdFwiZmxvcmFsd2hpdGVcIjogXCIyNTUsMjUwLDI0MFwiLFxyXG5cdFx0XHRcdFx0XCJmb3Jlc3RncmVlblwiOiBcIjM0LDEzOSwzNFwiLFxyXG5cdFx0XHRcdFx0XCJmdWNoc2lhXCI6IFwiMjU1LDAsMjU1XCIsXHJcblx0XHRcdFx0XHRcImdhaW5zYm9yb1wiOiBcIjIyMCwyMjAsMjIwXCIsXHJcblx0XHRcdFx0XHRcImdob3N0d2hpdGVcIjogXCIyNDgsMjQ4LDI1NVwiLFxyXG5cdFx0XHRcdFx0XCJnb2xkXCI6IFwiMjU1LDIxNSwwXCIsXHJcblx0XHRcdFx0XHRcImdvbGRlbnJvZFwiOiBcIjIxOCwxNjUsMzJcIixcclxuXHRcdFx0XHRcdFwiZ3JheVwiOiBcIjEyOCwxMjgsMTI4XCIsXHJcblx0XHRcdFx0XHRcImdyZXlcIjogXCIxMjgsMTI4LDEyOFwiLFxyXG5cdFx0XHRcdFx0XCJncmVlbnllbGxvd1wiOiBcIjE3MywyNTUsNDdcIixcclxuXHRcdFx0XHRcdFwiZ3JlZW5cIjogXCIwLDEyOCwwXCIsXHJcblx0XHRcdFx0XHRcImhvbmV5ZGV3XCI6IFwiMjQwLDI1NSwyNDBcIixcclxuXHRcdFx0XHRcdFwiaG90cGlua1wiOiBcIjI1NSwxMDUsMTgwXCIsXHJcblx0XHRcdFx0XHRcImluZGlhbnJlZFwiOiBcIjIwNSw5Miw5MlwiLFxyXG5cdFx0XHRcdFx0XCJpbmRpZ29cIjogXCI3NSwwLDEzMFwiLFxyXG5cdFx0XHRcdFx0XCJpdm9yeVwiOiBcIjI1NSwyNTUsMjQwXCIsXHJcblx0XHRcdFx0XHRcImtoYWtpXCI6IFwiMjQwLDIzMCwxNDBcIixcclxuXHRcdFx0XHRcdFwibGF2ZW5kZXJibHVzaFwiOiBcIjI1NSwyNDAsMjQ1XCIsXHJcblx0XHRcdFx0XHRcImxhdmVuZGVyXCI6IFwiMjMwLDIzMCwyNTBcIixcclxuXHRcdFx0XHRcdFwibGF3bmdyZWVuXCI6IFwiMTI0LDI1MiwwXCIsXHJcblx0XHRcdFx0XHRcImxlbW9uY2hpZmZvblwiOiBcIjI1NSwyNTAsMjA1XCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0Ymx1ZVwiOiBcIjE3MywyMTYsMjMwXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0Y29yYWxcIjogXCIyNDAsMTI4LDEyOFwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodGN5YW5cIjogXCIyMjQsMjU1LDI1NVwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodGdvbGRlbnJvZHllbGxvd1wiOiBcIjI1MCwyNTAsMjEwXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0Z3JheVwiOiBcIjIxMSwyMTEsMjExXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0Z3JleVwiOiBcIjIxMSwyMTEsMjExXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0Z3JlZW5cIjogXCIxNDQsMjM4LDE0NFwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodHBpbmtcIjogXCIyNTUsMTgyLDE5M1wiLFxyXG5cdFx0XHRcdFx0XCJsaWdodHNhbG1vblwiOiBcIjI1NSwxNjAsMTIyXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0c2VhZ3JlZW5cIjogXCIzMiwxNzgsMTcwXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0c2t5Ymx1ZVwiOiBcIjEzNSwyMDYsMjUwXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0c2xhdGVncmF5XCI6IFwiMTE5LDEzNiwxNTNcIixcclxuXHRcdFx0XHRcdFwibGlnaHRzdGVlbGJsdWVcIjogXCIxNzYsMTk2LDIyMlwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodHllbGxvd1wiOiBcIjI1NSwyNTUsMjI0XCIsXHJcblx0XHRcdFx0XHRcImxpbWVncmVlblwiOiBcIjUwLDIwNSw1MFwiLFxyXG5cdFx0XHRcdFx0XCJsaW1lXCI6IFwiMCwyNTUsMFwiLFxyXG5cdFx0XHRcdFx0XCJsaW5lblwiOiBcIjI1MCwyNDAsMjMwXCIsXHJcblx0XHRcdFx0XHRcIm1hZ2VudGFcIjogXCIyNTUsMCwyNTVcIixcclxuXHRcdFx0XHRcdFwibWFyb29uXCI6IFwiMTI4LDAsMFwiLFxyXG5cdFx0XHRcdFx0XCJtZWRpdW1hcXVhbWFyaW5lXCI6IFwiMTAyLDIwNSwxNzBcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtYmx1ZVwiOiBcIjAsMCwyMDVcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtb3JjaGlkXCI6IFwiMTg2LDg1LDIxMVwiLFxyXG5cdFx0XHRcdFx0XCJtZWRpdW1wdXJwbGVcIjogXCIxNDcsMTEyLDIxOVwiLFxyXG5cdFx0XHRcdFx0XCJtZWRpdW1zZWFncmVlblwiOiBcIjYwLDE3OSwxMTNcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtc2xhdGVibHVlXCI6IFwiMTIzLDEwNCwyMzhcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtc3ByaW5nZ3JlZW5cIjogXCIwLDI1MCwxNTRcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtdHVycXVvaXNlXCI6IFwiNzIsMjA5LDIwNFwiLFxyXG5cdFx0XHRcdFx0XCJtZWRpdW12aW9sZXRyZWRcIjogXCIxOTksMjEsMTMzXCIsXHJcblx0XHRcdFx0XHRcIm1pZG5pZ2h0Ymx1ZVwiOiBcIjI1LDI1LDExMlwiLFxyXG5cdFx0XHRcdFx0XCJtaW50Y3JlYW1cIjogXCIyNDUsMjU1LDI1MFwiLFxyXG5cdFx0XHRcdFx0XCJtaXN0eXJvc2VcIjogXCIyNTUsMjI4LDIyNVwiLFxyXG5cdFx0XHRcdFx0XCJtb2NjYXNpblwiOiBcIjI1NSwyMjgsMTgxXCIsXHJcblx0XHRcdFx0XHRcIm5hdmFqb3doaXRlXCI6IFwiMjU1LDIyMiwxNzNcIixcclxuXHRcdFx0XHRcdFwibmF2eVwiOiBcIjAsMCwxMjhcIixcclxuXHRcdFx0XHRcdFwib2xkbGFjZVwiOiBcIjI1MywyNDUsMjMwXCIsXHJcblx0XHRcdFx0XHRcIm9saXZlZHJhYlwiOiBcIjEwNywxNDIsMzVcIixcclxuXHRcdFx0XHRcdFwib2xpdmVcIjogXCIxMjgsMTI4LDBcIixcclxuXHRcdFx0XHRcdFwib3JhbmdlcmVkXCI6IFwiMjU1LDY5LDBcIixcclxuXHRcdFx0XHRcdFwib3JhbmdlXCI6IFwiMjU1LDE2NSwwXCIsXHJcblx0XHRcdFx0XHRcIm9yY2hpZFwiOiBcIjIxOCwxMTIsMjE0XCIsXHJcblx0XHRcdFx0XHRcInBhbGVnb2xkZW5yb2RcIjogXCIyMzgsMjMyLDE3MFwiLFxyXG5cdFx0XHRcdFx0XCJwYWxlZ3JlZW5cIjogXCIxNTIsMjUxLDE1MlwiLFxyXG5cdFx0XHRcdFx0XCJwYWxldHVycXVvaXNlXCI6IFwiMTc1LDIzOCwyMzhcIixcclxuXHRcdFx0XHRcdFwicGFsZXZpb2xldHJlZFwiOiBcIjIxOSwxMTIsMTQ3XCIsXHJcblx0XHRcdFx0XHRcInBhcGF5YXdoaXBcIjogXCIyNTUsMjM5LDIxM1wiLFxyXG5cdFx0XHRcdFx0XCJwZWFjaHB1ZmZcIjogXCIyNTUsMjE4LDE4NVwiLFxyXG5cdFx0XHRcdFx0XCJwZXJ1XCI6IFwiMjA1LDEzMyw2M1wiLFxyXG5cdFx0XHRcdFx0XCJwaW5rXCI6IFwiMjU1LDE5MiwyMDNcIixcclxuXHRcdFx0XHRcdFwicGx1bVwiOiBcIjIyMSwxNjAsMjIxXCIsXHJcblx0XHRcdFx0XHRcInBvd2RlcmJsdWVcIjogXCIxNzYsMjI0LDIzMFwiLFxyXG5cdFx0XHRcdFx0XCJwdXJwbGVcIjogXCIxMjgsMCwxMjhcIixcclxuXHRcdFx0XHRcdFwicmVkXCI6IFwiMjU1LDAsMFwiLFxyXG5cdFx0XHRcdFx0XCJyb3N5YnJvd25cIjogXCIxODgsMTQzLDE0M1wiLFxyXG5cdFx0XHRcdFx0XCJyb3lhbGJsdWVcIjogXCI2NSwxMDUsMjI1XCIsXHJcblx0XHRcdFx0XHRcInNhZGRsZWJyb3duXCI6IFwiMTM5LDY5LDE5XCIsXHJcblx0XHRcdFx0XHRcInNhbG1vblwiOiBcIjI1MCwxMjgsMTE0XCIsXHJcblx0XHRcdFx0XHRcInNhbmR5YnJvd25cIjogXCIyNDQsMTY0LDk2XCIsXHJcblx0XHRcdFx0XHRcInNlYWdyZWVuXCI6IFwiNDYsMTM5LDg3XCIsXHJcblx0XHRcdFx0XHRcInNlYXNoZWxsXCI6IFwiMjU1LDI0NSwyMzhcIixcclxuXHRcdFx0XHRcdFwic2llbm5hXCI6IFwiMTYwLDgyLDQ1XCIsXHJcblx0XHRcdFx0XHRcInNpbHZlclwiOiBcIjE5MiwxOTIsMTkyXCIsXHJcblx0XHRcdFx0XHRcInNreWJsdWVcIjogXCIxMzUsMjA2LDIzNVwiLFxyXG5cdFx0XHRcdFx0XCJzbGF0ZWJsdWVcIjogXCIxMDYsOTAsMjA1XCIsXHJcblx0XHRcdFx0XHRcInNsYXRlZ3JheVwiOiBcIjExMiwxMjgsMTQ0XCIsXHJcblx0XHRcdFx0XHRcInNub3dcIjogXCIyNTUsMjUwLDI1MFwiLFxyXG5cdFx0XHRcdFx0XCJzcHJpbmdncmVlblwiOiBcIjAsMjU1LDEyN1wiLFxyXG5cdFx0XHRcdFx0XCJzdGVlbGJsdWVcIjogXCI3MCwxMzAsMTgwXCIsXHJcblx0XHRcdFx0XHRcInRhblwiOiBcIjIxMCwxODAsMTQwXCIsXHJcblx0XHRcdFx0XHRcInRlYWxcIjogXCIwLDEyOCwxMjhcIixcclxuXHRcdFx0XHRcdFwidGhpc3RsZVwiOiBcIjIxNiwxOTEsMjE2XCIsXHJcblx0XHRcdFx0XHRcInRvbWF0b1wiOiBcIjI1NSw5OSw3MVwiLFxyXG5cdFx0XHRcdFx0XCJ0dXJxdW9pc2VcIjogXCI2NCwyMjQsMjA4XCIsXHJcblx0XHRcdFx0XHRcInZpb2xldFwiOiBcIjIzOCwxMzAsMjM4XCIsXHJcblx0XHRcdFx0XHRcIndoZWF0XCI6IFwiMjQ1LDIyMiwxNzlcIixcclxuXHRcdFx0XHRcdFwid2hpdGVzbW9rZVwiOiBcIjI0NSwyNDUsMjQ1XCIsXHJcblx0XHRcdFx0XHRcIndoaXRlXCI6IFwiMjU1LDI1NSwyNTVcIixcclxuXHRcdFx0XHRcdFwieWVsbG93Z3JlZW5cIjogXCIxNTQsMjA1LDUwXCIsXHJcblx0XHRcdFx0XHRcInllbGxvd1wiOiBcIjI1NSwyNTUsMFwiXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKioqKioqKioqKioqXHJcblx0XHRcdCBIb29rc1xyXG5cdFx0XHQgKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogSG9va3MgYWxsb3cgYSBzdWJwcm9wZXJ0eSAoZS5nLiBcImJveFNoYWRvd0JsdXJcIikgb2YgYSBjb21wb3VuZC12YWx1ZSBDU1MgcHJvcGVydHlcclxuXHRcdFx0IChlLmcuIFwiYm94U2hhZG93OiBYIFkgQmx1ciBTcHJlYWQgQ29sb3JcIikgdG8gYmUgYW5pbWF0ZWQgYXMgaWYgaXQgd2VyZSBhIGRpc2NyZXRlIHByb3BlcnR5LiAqL1xyXG5cdFx0XHQvKiBOb3RlOiBCZXlvbmQgZW5hYmxpbmcgZmluZS1ncmFpbmVkIHByb3BlcnR5IGFuaW1hdGlvbiwgaG9va2luZyBpcyBuZWNlc3Nhcnkgc2luY2UgVmVsb2NpdHkgb25seVxyXG5cdFx0XHQgdHdlZW5zIHByb3BlcnRpZXMgd2l0aCBzaW5nbGUgbnVtZXJpYyB2YWx1ZXM7IHVubGlrZSBDU1MgdHJhbnNpdGlvbnMsIFZlbG9jaXR5IGRvZXMgbm90IGludGVycG9sYXRlIGNvbXBvdW5kLXZhbHVlcy4gKi9cclxuXHRcdFx0SG9va3M6IHtcclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgUmVnaXN0cmF0aW9uXHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBUZW1wbGF0ZXMgYXJlIGEgY29uY2lzZSB3YXkgb2YgaW5kaWNhdGluZyB3aGljaCBzdWJwcm9wZXJ0aWVzIG11c3QgYmUgaW5kaXZpZHVhbGx5IHJlZ2lzdGVyZWQgZm9yIGVhY2ggY29tcG91bmQtdmFsdWUgQ1NTIHByb3BlcnR5LiAqL1xyXG5cdFx0XHRcdC8qIEVhY2ggdGVtcGxhdGUgY29uc2lzdHMgb2YgdGhlIGNvbXBvdW5kLXZhbHVlJ3MgYmFzZSBuYW1lLCBpdHMgY29uc3RpdHVlbnQgc3VicHJvcGVydHkgbmFtZXMsIGFuZCB0aG9zZSBzdWJwcm9wZXJ0aWVzJyBkZWZhdWx0IHZhbHVlcy4gKi9cclxuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcclxuXHRcdFx0XHRcdFwidGV4dFNoYWRvd1wiOiBbXCJDb2xvciBYIFkgQmx1clwiLCBcImJsYWNrIDBweCAwcHggMHB4XCJdLFxyXG5cdFx0XHRcdFx0XCJib3hTaGFkb3dcIjogW1wiQ29sb3IgWCBZIEJsdXIgU3ByZWFkXCIsIFwiYmxhY2sgMHB4IDBweCAwcHggMHB4XCJdLFxyXG5cdFx0XHRcdFx0XCJjbGlwXCI6IFtcIlRvcCBSaWdodCBCb3R0b20gTGVmdFwiLCBcIjBweCAwcHggMHB4IDBweFwiXSxcclxuXHRcdFx0XHRcdFwiYmFja2dyb3VuZFBvc2l0aW9uXCI6IFtcIlggWVwiLCBcIjAlIDAlXCJdLFxyXG5cdFx0XHRcdFx0XCJ0cmFuc2Zvcm1PcmlnaW5cIjogW1wiWCBZIFpcIiwgXCI1MCUgNTAlIDBweFwiXSxcclxuXHRcdFx0XHRcdFwicGVyc3BlY3RpdmVPcmlnaW5cIjogW1wiWCBZXCIsIFwiNTAlIDUwJVwiXVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyogQSBcInJlZ2lzdGVyZWRcIiBob29rIGlzIG9uZSB0aGF0IGhhcyBiZWVuIGNvbnZlcnRlZCBmcm9tIGl0cyB0ZW1wbGF0ZSBmb3JtIGludG8gYSBsaXZlLFxyXG5cdFx0XHRcdCB0d2VlbmFibGUgcHJvcGVydHkuIEl0IGNvbnRhaW5zIGRhdGEgdG8gYXNzb2NpYXRlIGl0IHdpdGggaXRzIHJvb3QgcHJvcGVydHkuICovXHJcblx0XHRcdFx0cmVnaXN0ZXJlZDoge1xyXG5cdFx0XHRcdFx0LyogTm90ZTogQSByZWdpc3RlcmVkIGhvb2sgbG9va3MgbGlrZSB0aGlzID09PiB0ZXh0U2hhZG93Qmx1cjogWyBcInRleHRTaGFkb3dcIiwgMyBdLFxyXG5cdFx0XHRcdFx0IHdoaWNoIGNvbnNpc3RzIG9mIHRoZSBzdWJwcm9wZXJ0eSdzIG5hbWUsIHRoZSBhc3NvY2lhdGVkIHJvb3QgcHJvcGVydHkncyBuYW1lLFxyXG5cdFx0XHRcdFx0IGFuZCB0aGUgc3VicHJvcGVydHkncyBwb3NpdGlvbiBpbiB0aGUgcm9vdCdzIHZhbHVlLiAqL1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyogQ29udmVydCB0aGUgdGVtcGxhdGVzIGludG8gaW5kaXZpZHVhbCBob29rcyB0aGVuIGFwcGVuZCB0aGVtIHRvIHRoZSByZWdpc3RlcmVkIG9iamVjdCBhYm92ZS4gKi9cclxuXHRcdFx0XHRyZWdpc3RlcjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHQvKiBDb2xvciBob29rcyByZWdpc3RyYXRpb246IENvbG9ycyBhcmUgZGVmYXVsdGVkIHRvIHdoaXRlIC0tIGFzIG9wcG9zZWQgdG8gYmxhY2sgLS0gc2luY2UgY29sb3JzIHRoYXQgYXJlXHJcblx0XHRcdFx0XHQgY3VycmVudGx5IHNldCB0byBcInRyYW5zcGFyZW50XCIgZGVmYXVsdCB0byB0aGVpciByZXNwZWN0aXZlIHRlbXBsYXRlIGJlbG93IHdoZW4gY29sb3ItYW5pbWF0ZWQsXHJcblx0XHRcdFx0XHQgYW5kIHdoaXRlIGlzIHR5cGljYWxseSBhIGNsb3NlciBtYXRjaCB0byB0cmFuc3BhcmVudCB0aGFuIGJsYWNrIGlzLiBBbiBleGNlcHRpb24gaXMgbWFkZSBmb3IgdGV4dCAoXCJjb2xvclwiKSxcclxuXHRcdFx0XHRcdCB3aGljaCBpcyBhbG1vc3QgYWx3YXlzIHNldCBjbG9zZXIgdG8gYmxhY2sgdGhhbiB3aGl0ZS4gKi9cclxuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgQ1NTLkxpc3RzLmNvbG9ycy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHR2YXIgcmdiQ29tcG9uZW50cyA9IChDU1MuTGlzdHMuY29sb3JzW2ldID09PSBcImNvbG9yXCIpID8gXCIwIDAgMCAxXCIgOiBcIjI1NSAyNTUgMjU1IDFcIjtcclxuXHRcdFx0XHRcdFx0Q1NTLkhvb2tzLnRlbXBsYXRlc1tDU1MuTGlzdHMuY29sb3JzW2ldXSA9IFtcIlJlZCBHcmVlbiBCbHVlIEFscGhhXCIsIHJnYkNvbXBvbmVudHNdO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHZhciByb290UHJvcGVydHksXHJcblx0XHRcdFx0XHRcdFx0aG9va1RlbXBsYXRlLFxyXG5cdFx0XHRcdFx0XHRcdGhvb2tOYW1lcztcclxuXHJcblx0XHRcdFx0XHQvKiBJbiBJRSwgY29sb3IgdmFsdWVzIGluc2lkZSBjb21wb3VuZC12YWx1ZSBwcm9wZXJ0aWVzIGFyZSBwb3NpdGlvbmVkIGF0IHRoZSBlbmQgdGhlIHZhbHVlIGluc3RlYWQgb2YgYXQgdGhlIGJlZ2lubmluZy5cclxuXHRcdFx0XHRcdCBUaHVzLCB3ZSByZS1hcnJhbmdlIHRoZSB0ZW1wbGF0ZXMgYWNjb3JkaW5nbHkuICovXHJcblx0XHRcdFx0XHRpZiAoSUUpIHtcclxuXHRcdFx0XHRcdFx0Zm9yIChyb290UHJvcGVydHkgaW4gQ1NTLkhvb2tzLnRlbXBsYXRlcykge1xyXG5cdFx0XHRcdFx0XHRcdGlmICghQ1NTLkhvb2tzLnRlbXBsYXRlcy5oYXNPd25Qcm9wZXJ0eShyb290UHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aG9va1RlbXBsYXRlID0gQ1NTLkhvb2tzLnRlbXBsYXRlc1tyb290UHJvcGVydHldO1xyXG5cdFx0XHRcdFx0XHRcdGhvb2tOYW1lcyA9IGhvb2tUZW1wbGF0ZVswXS5zcGxpdChcIiBcIik7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHZhciBkZWZhdWx0VmFsdWVzID0gaG9va1RlbXBsYXRlWzFdLm1hdGNoKENTUy5SZWdFeC52YWx1ZVNwbGl0KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKGhvb2tOYW1lc1swXSA9PT0gXCJDb2xvclwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBSZXBvc2l0aW9uIGJvdGggdGhlIGhvb2sncyBuYW1lIGFuZCBpdHMgZGVmYXVsdCB2YWx1ZSB0byB0aGUgZW5kIG9mIHRoZWlyIHJlc3BlY3RpdmUgc3RyaW5ncy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGhvb2tOYW1lcy5wdXNoKGhvb2tOYW1lcy5zaGlmdCgpKTtcclxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZXMucHVzaChkZWZhdWx0VmFsdWVzLnNoaWZ0KCkpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFJlcGxhY2UgdGhlIGV4aXN0aW5nIHRlbXBsYXRlIGZvciB0aGUgaG9vaydzIHJvb3QgcHJvcGVydHkuICovXHJcblx0XHRcdFx0XHRcdFx0XHRDU1MuSG9va3MudGVtcGxhdGVzW3Jvb3RQcm9wZXJ0eV0gPSBbaG9va05hbWVzLmpvaW4oXCIgXCIpLCBkZWZhdWx0VmFsdWVzLmpvaW4oXCIgXCIpXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBIb29rIHJlZ2lzdHJhdGlvbi4gKi9cclxuXHRcdFx0XHRcdGZvciAocm9vdFByb3BlcnR5IGluIENTUy5Ib29rcy50ZW1wbGF0ZXMpIHtcclxuXHRcdFx0XHRcdFx0aWYgKCFDU1MuSG9va3MudGVtcGxhdGVzLmhhc093blByb3BlcnR5KHJvb3RQcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRob29rVGVtcGxhdGUgPSBDU1MuSG9va3MudGVtcGxhdGVzW3Jvb3RQcm9wZXJ0eV07XHJcblx0XHRcdFx0XHRcdGhvb2tOYW1lcyA9IGhvb2tUZW1wbGF0ZVswXS5zcGxpdChcIiBcIik7XHJcblxyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBqIGluIGhvb2tOYW1lcykge1xyXG5cdFx0XHRcdFx0XHRcdGlmICghaG9va05hbWVzLmhhc093blByb3BlcnR5KGopKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dmFyIGZ1bGxIb29rTmFtZSA9IHJvb3RQcm9wZXJ0eSArIGhvb2tOYW1lc1tqXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0aG9va1Bvc2l0aW9uID0gajtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogRm9yIGVhY2ggaG9vaywgcmVnaXN0ZXIgaXRzIGZ1bGwgbmFtZSAoZS5nLiB0ZXh0U2hhZG93Qmx1cikgd2l0aCBpdHMgcm9vdCBwcm9wZXJ0eSAoZS5nLiB0ZXh0U2hhZG93KVxyXG5cdFx0XHRcdFx0XHRcdCBhbmQgdGhlIGhvb2sncyBwb3NpdGlvbiBpbiBpdHMgdGVtcGxhdGUncyBkZWZhdWx0IHZhbHVlIHN0cmluZy4gKi9cclxuXHRcdFx0XHRcdFx0XHRDU1MuSG9va3MucmVnaXN0ZXJlZFtmdWxsSG9va05hbWVdID0gW3Jvb3RQcm9wZXJ0eSwgaG9va1Bvc2l0aW9uXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IEluamVjdGlvbiBhbmQgRXh0cmFjdGlvblxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0LyogTG9vayB1cCB0aGUgcm9vdCBwcm9wZXJ0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGhvb2sgKGUuZy4gcmV0dXJuIFwidGV4dFNoYWRvd1wiIGZvciBcInRleHRTaGFkb3dCbHVyXCIpLiAqL1xyXG5cdFx0XHRcdC8qIFNpbmNlIGEgaG9vayBjYW5ub3QgYmUgc2V0IGRpcmVjdGx5ICh0aGUgYnJvd3NlciB3b24ndCByZWNvZ25pemUgaXQpLCBzdHlsZSB1cGRhdGluZyBmb3IgaG9va3MgaXMgcm91dGVkIHRocm91Z2ggdGhlIGhvb2sncyByb290IHByb3BlcnR5LiAqL1xyXG5cdFx0XHRcdGdldFJvb3Q6IGZ1bmN0aW9uKHByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHR2YXIgaG9va0RhdGEgPSBDU1MuSG9va3MucmVnaXN0ZXJlZFtwcm9wZXJ0eV07XHJcblxyXG5cdFx0XHRcdFx0aWYgKGhvb2tEYXRhKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBob29rRGF0YVswXTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZXJlIHdhcyBubyBob29rIG1hdGNoLCByZXR1cm4gdGhlIHByb3BlcnR5IG5hbWUgdW50b3VjaGVkLiAqL1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcHJvcGVydHk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRnZXRVbml0OiBmdW5jdGlvbihzdHIsIHN0YXJ0KSB7XHJcblx0XHRcdFx0XHR2YXIgdW5pdCA9IChzdHIuc3Vic3RyKHN0YXJ0IHx8IDAsIDUpLm1hdGNoKC9eW2EteiVdKy8pIHx8IFtdKVswXSB8fCBcIlwiO1xyXG5cclxuXHRcdFx0XHRcdGlmICh1bml0ICYmIF9pbkFycmF5KENTUy5MaXN0cy51bml0cywgdW5pdCkpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHVuaXQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGZpeENvbG9yczogZnVuY3Rpb24oc3RyKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gc3RyLnJlcGxhY2UoLyhyZ2JhP1xcKFxccyopPyhcXGJbYS16XStcXGIpL2csIGZ1bmN0aW9uKCQwLCAkMSwgJDIpIHtcclxuXHRcdFx0XHRcdFx0aWYgKENTUy5MaXN0cy5jb2xvck5hbWVzLmhhc093blByb3BlcnR5KCQyKSkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiAoJDEgPyAkMSA6IFwicmdiYShcIikgKyBDU1MuTGlzdHMuY29sb3JOYW1lc1skMl0gKyAoJDEgPyBcIlwiIDogXCIsMSlcIik7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuICQxICsgJDI7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qIENvbnZlcnQgYW55IHJvb3RQcm9wZXJ0eVZhbHVlLCBudWxsIG9yIG90aGVyd2lzZSwgaW50byBhIHNwYWNlLWRlbGltaXRlZCBsaXN0IG9mIGhvb2sgdmFsdWVzIHNvIHRoYXRcclxuXHRcdFx0XHQgdGhlIHRhcmdldGVkIGhvb2sgY2FuIGJlIGluamVjdGVkIG9yIGV4dHJhY3RlZCBhdCBpdHMgc3RhbmRhcmQgcG9zaXRpb24uICovXHJcblx0XHRcdFx0Y2xlYW5Sb290UHJvcGVydHlWYWx1ZTogZnVuY3Rpb24ocm9vdFByb3BlcnR5LCByb290UHJvcGVydHlWYWx1ZSkge1xyXG5cdFx0XHRcdFx0LyogSWYgdGhlIHJvb3RQcm9wZXJ0eVZhbHVlIGlzIHdyYXBwZWQgd2l0aCBcInJnYigpXCIsIFwiY2xpcCgpXCIsIGV0Yy4sIHJlbW92ZSB0aGUgd3JhcHBpbmcgdG8gbm9ybWFsaXplIHRoZSB2YWx1ZSBiZWZvcmUgbWFuaXB1bGF0aW9uLiAqL1xyXG5cdFx0XHRcdFx0aWYgKENTUy5SZWdFeC52YWx1ZVVud3JhcC50ZXN0KHJvb3RQcm9wZXJ0eVZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZSA9IHJvb3RQcm9wZXJ0eVZhbHVlLm1hdGNoKENTUy5SZWdFeC52YWx1ZVVud3JhcClbMV07XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgcm9vdFByb3BlcnR5VmFsdWUgaXMgYSBDU1MgbnVsbC12YWx1ZSAoZnJvbSB3aGljaCB0aGVyZSdzIGluaGVyZW50bHkgbm8gaG9vayB2YWx1ZSB0byBleHRyYWN0KSxcclxuXHRcdFx0XHRcdCBkZWZhdWx0IHRvIHRoZSByb290J3MgZGVmYXVsdCB2YWx1ZSBhcyBkZWZpbmVkIGluIENTUy5Ib29rcy50ZW1wbGF0ZXMuICovXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBDU1MgbnVsbC12YWx1ZXMgaW5jbHVkZSBcIm5vbmVcIiwgXCJhdXRvXCIsIGFuZCBcInRyYW5zcGFyZW50XCIuIFRoZXkgbXVzdCBiZSBjb252ZXJ0ZWQgaW50byB0aGVpclxyXG5cdFx0XHRcdFx0IHplcm8tdmFsdWVzIChlLmcuIHRleHRTaGFkb3c6IFwibm9uZVwiID09PiB0ZXh0U2hhZG93OiBcIjBweCAwcHggMHB4IGJsYWNrXCIpIGZvciBob29rIG1hbmlwdWxhdGlvbiB0byBwcm9jZWVkLiAqL1xyXG5cdFx0XHRcdFx0aWYgKENTUy5WYWx1ZXMuaXNDU1NOdWxsVmFsdWUocm9vdFByb3BlcnR5VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gQ1NTLkhvb2tzLnRlbXBsYXRlc1tyb290UHJvcGVydHldWzFdO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHJldHVybiByb290UHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qIEV4dHJhY3RlZCB0aGUgaG9vaydzIHZhbHVlIGZyb20gaXRzIHJvb3QgcHJvcGVydHkncyB2YWx1ZS4gVGhpcyBpcyB1c2VkIHRvIGdldCB0aGUgc3RhcnRpbmcgdmFsdWUgb2YgYW4gYW5pbWF0aW5nIGhvb2suICovXHJcblx0XHRcdFx0ZXh0cmFjdFZhbHVlOiBmdW5jdGlvbihmdWxsSG9va05hbWUsIHJvb3RQcm9wZXJ0eVZhbHVlKSB7XHJcblx0XHRcdFx0XHR2YXIgaG9va0RhdGEgPSBDU1MuSG9va3MucmVnaXN0ZXJlZFtmdWxsSG9va05hbWVdO1xyXG5cclxuXHRcdFx0XHRcdGlmIChob29rRGF0YSkge1xyXG5cdFx0XHRcdFx0XHR2YXIgaG9va1Jvb3QgPSBob29rRGF0YVswXSxcclxuXHRcdFx0XHRcdFx0XHRcdGhvb2tQb3NpdGlvbiA9IGhvb2tEYXRhWzFdO1xyXG5cclxuXHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWUgPSBDU1MuSG9va3MuY2xlYW5Sb290UHJvcGVydHlWYWx1ZShob29rUm9vdCwgcm9vdFByb3BlcnR5VmFsdWUpO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogU3BsaXQgcm9vdFByb3BlcnR5VmFsdWUgaW50byBpdHMgY29uc3RpdHVlbnQgaG9vayB2YWx1ZXMgdGhlbiBncmFiIHRoZSBkZXNpcmVkIGhvb2sgYXQgaXRzIHN0YW5kYXJkIHBvc2l0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcm9vdFByb3BlcnR5VmFsdWUudG9TdHJpbmcoKS5tYXRjaChDU1MuUmVnRXgudmFsdWVTcGxpdClbaG9va1Bvc2l0aW9uXTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBwcm92aWRlZCBmdWxsSG9va05hbWUgaXNuJ3QgYSByZWdpc3RlcmVkIGhvb2ssIHJldHVybiB0aGUgcm9vdFByb3BlcnR5VmFsdWUgdGhhdCB3YXMgcGFzc2VkIGluLiAqL1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcm9vdFByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKiBJbmplY3QgdGhlIGhvb2sncyB2YWx1ZSBpbnRvIGl0cyByb290IHByb3BlcnR5J3MgdmFsdWUuIFRoaXMgaXMgdXNlZCB0byBwaWVjZSBiYWNrIHRvZ2V0aGVyIHRoZSByb290IHByb3BlcnR5XHJcblx0XHRcdFx0IG9uY2UgVmVsb2NpdHkgaGFzIHVwZGF0ZWQgb25lIG9mIGl0cyBpbmRpdmlkdWFsbHkgaG9va2VkIHZhbHVlcyB0aHJvdWdoIHR3ZWVuaW5nLiAqL1xyXG5cdFx0XHRcdGluamVjdFZhbHVlOiBmdW5jdGlvbihmdWxsSG9va05hbWUsIGhvb2tWYWx1ZSwgcm9vdFByb3BlcnR5VmFsdWUpIHtcclxuXHRcdFx0XHRcdHZhciBob29rRGF0YSA9IENTUy5Ib29rcy5yZWdpc3RlcmVkW2Z1bGxIb29rTmFtZV07XHJcblxyXG5cdFx0XHRcdFx0aWYgKGhvb2tEYXRhKSB7XHJcblx0XHRcdFx0XHRcdHZhciBob29rUm9vdCA9IGhvb2tEYXRhWzBdLFxyXG5cdFx0XHRcdFx0XHRcdFx0aG9va1Bvc2l0aW9uID0gaG9va0RhdGFbMV0sXHJcblx0XHRcdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZVBhcnRzLFxyXG5cdFx0XHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWVVcGRhdGVkO1xyXG5cclxuXHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWUgPSBDU1MuSG9va3MuY2xlYW5Sb290UHJvcGVydHlWYWx1ZShob29rUm9vdCwgcm9vdFByb3BlcnR5VmFsdWUpO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogU3BsaXQgcm9vdFByb3BlcnR5VmFsdWUgaW50byBpdHMgaW5kaXZpZHVhbCBob29rIHZhbHVlcywgcmVwbGFjZSB0aGUgdGFyZ2V0ZWQgdmFsdWUgd2l0aCBob29rVmFsdWUsXHJcblx0XHRcdFx0XHRcdCB0aGVuIHJlY29uc3RydWN0IHRoZSByb290UHJvcGVydHlWYWx1ZSBzdHJpbmcuICovXHJcblx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlUGFydHMgPSByb290UHJvcGVydHlWYWx1ZS50b1N0cmluZygpLm1hdGNoKENTUy5SZWdFeC52YWx1ZVNwbGl0KTtcclxuXHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWVQYXJ0c1tob29rUG9zaXRpb25dID0gaG9va1ZhbHVlO1xyXG5cdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZVVwZGF0ZWQgPSByb290UHJvcGVydHlWYWx1ZVBhcnRzLmpvaW4oXCIgXCIpO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHJvb3RQcm9wZXJ0eVZhbHVlVXBkYXRlZDtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBwcm92aWRlZCBmdWxsSG9va05hbWUgaXNuJ3QgYSByZWdpc3RlcmVkIGhvb2ssIHJldHVybiB0aGUgcm9vdFByb3BlcnR5VmFsdWUgdGhhdCB3YXMgcGFzc2VkIGluLiAqL1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcm9vdFByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgTm9ybWFsaXphdGlvbnNcclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHQvKiBOb3JtYWxpemF0aW9ucyBzdGFuZGFyZGl6ZSBDU1MgcHJvcGVydHkgbWFuaXB1bGF0aW9uIGJ5IHBvbGx5ZmlsbGluZyBicm93c2VyLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyAoZS5nLiBvcGFjaXR5KVxyXG5cdFx0XHQgYW5kIHJlZm9ybWF0dGluZyBzcGVjaWFsIHByb3BlcnRpZXMgKGUuZy4gY2xpcCwgcmdiYSkgdG8gbG9vayBsaWtlIHN0YW5kYXJkIG9uZXMuICovXHJcblx0XHRcdE5vcm1hbGl6YXRpb25zOiB7XHJcblx0XHRcdFx0LyogTm9ybWFsaXphdGlvbnMgYXJlIHBhc3NlZCBhIG5vcm1hbGl6YXRpb24gdGFyZ2V0IChlaXRoZXIgdGhlIHByb3BlcnR5J3MgbmFtZSwgaXRzIGV4dHJhY3RlZCB2YWx1ZSwgb3IgaXRzIGluamVjdGVkIHZhbHVlKSxcclxuXHRcdFx0XHQgdGhlIHRhcmdldGVkIGVsZW1lbnQgKHdoaWNoIG1heSBuZWVkIHRvIGJlIHF1ZXJpZWQpLCBhbmQgdGhlIHRhcmdldGVkIHByb3BlcnR5IHZhbHVlLiAqL1xyXG5cdFx0XHRcdHJlZ2lzdGVyZWQ6IHtcclxuXHRcdFx0XHRcdGNsaXA6IGZ1bmN0aW9uKHR5cGUsIGVsZW1lbnQsIHByb3BlcnR5VmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIm5hbWVcIjpcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBcImNsaXBcIjtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIENsaXAgbmVlZHMgdG8gYmUgdW53cmFwcGVkIGFuZCBzdHJpcHBlZCBvZiBpdHMgY29tbWFzIGR1cmluZyBleHRyYWN0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJleHRyYWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0cmFjdGVkO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIElmIFZlbG9jaXR5IGFsc28gZXh0cmFjdGVkIHRoaXMgdmFsdWUsIHNraXAgZXh0cmFjdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChDU1MuUmVnRXgud3JhcHBlZFZhbHVlQWxyZWFkeUV4dHJhY3RlZC50ZXN0KHByb3BlcnR5VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGV4dHJhY3RlZCA9IHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBSZW1vdmUgdGhlIFwicmVjdCgpXCIgd3JhcHBlci4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0ZXh0cmFjdGVkID0gcHJvcGVydHlWYWx1ZS50b1N0cmluZygpLm1hdGNoKENTUy5SZWdFeC52YWx1ZVVud3JhcCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBTdHJpcCBvZmYgY29tbWFzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRleHRyYWN0ZWQgPSBleHRyYWN0ZWQgPyBleHRyYWN0ZWRbMV0ucmVwbGFjZSgvLChcXHMrKT8vZywgXCIgXCIpIDogcHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZXh0cmFjdGVkO1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogQ2xpcCBuZWVkcyB0byBiZSByZS13cmFwcGVkIGR1cmluZyBpbmplY3Rpb24uICovXHJcblx0XHRcdFx0XHRcdFx0Y2FzZSBcImluamVjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwicmVjdChcIiArIHByb3BlcnR5VmFsdWUgKyBcIilcIjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGJsdXI6IGZ1bmN0aW9uKHR5cGUsIGVsZW1lbnQsIHByb3BlcnR5VmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIm5hbWVcIjpcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBWZWxvY2l0eS5TdGF0ZS5pc0ZpcmVmb3ggPyBcImZpbHRlclwiIDogXCItd2Via2l0LWZpbHRlclwiO1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJleHRyYWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0cmFjdGVkID0gcGFyc2VGbG9hdChwcm9wZXJ0eVZhbHVlKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJZiBleHRyYWN0ZWQgaXMgTmFOLCBtZWFuaW5nIHRoZSB2YWx1ZSBpc24ndCBhbHJlYWR5IGV4dHJhY3RlZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmICghKGV4dHJhY3RlZCB8fCBleHRyYWN0ZWQgPT09IDApKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBibHVyQ29tcG9uZW50ID0gcHJvcGVydHlWYWx1ZS50b1N0cmluZygpLm1hdGNoKC9ibHVyXFwoKFswLTldK1tBLXpdKylcXCkvaSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgZmlsdGVyIHN0cmluZyBoYWQgYSBibHVyIGNvbXBvbmVudCwgcmV0dXJuIGp1c3QgdGhlIGJsdXIgdmFsdWUgYW5kIHVuaXQgdHlwZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGJsdXJDb21wb25lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRleHRyYWN0ZWQgPSBibHVyQ29tcG9uZW50WzFdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIHRoZSBjb21wb25lbnQgZG9lc24ndCBleGlzdCwgZGVmYXVsdCBibHVyIHRvIDAuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXh0cmFjdGVkID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBleHRyYWN0ZWQ7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBCbHVyIG5lZWRzIHRvIGJlIHJlLXdyYXBwZWQgZHVyaW5nIGluamVjdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRjYXNlIFwiaW5qZWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBGb3IgdGhlIGJsdXIgZWZmZWN0IHRvIGJlIGZ1bGx5IGRlLWFwcGxpZWQsIGl0IG5lZWRzIHRvIGJlIHNldCB0byBcIm5vbmVcIiBpbnN0ZWFkIG9mIDAuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXBhcnNlRmxvYXQocHJvcGVydHlWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwibm9uZVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwiYmx1cihcIiArIHByb3BlcnR5VmFsdWUgKyBcIilcIjtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdC8qIDw9SUU4IGRvIG5vdCBzdXBwb3J0IHRoZSBzdGFuZGFyZCBvcGFjaXR5IHByb3BlcnR5LiBUaGV5IHVzZSBmaWx0ZXI6YWxwaGEob3BhY2l0eT1JTlQpIGluc3RlYWQuICovXHJcblx0XHRcdFx0XHRvcGFjaXR5OiBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBwcm9wZXJ0eVZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdGlmIChJRSA8PSA4KSB7XHJcblx0XHRcdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwibmFtZVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJmaWx0ZXJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJleHRyYWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIDw9SUU4IHJldHVybiBhIFwiZmlsdGVyXCIgdmFsdWUgb2YgXCJhbHBoYShvcGFjaXR5PVxcZHsxLDN9KVwiLlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgRXh0cmFjdCB0aGUgdmFsdWUgYW5kIGNvbnZlcnQgaXQgdG8gYSBkZWNpbWFsIHZhbHVlIHRvIG1hdGNoIHRoZSBzdGFuZGFyZCBDU1Mgb3BhY2l0eSBwcm9wZXJ0eSdzIGZvcm1hdHRpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBleHRyYWN0ZWQgPSBwcm9wZXJ0eVZhbHVlLnRvU3RyaW5nKCkubWF0Y2goL2FscGhhXFwob3BhY2l0eT0oLiopXFwpL2kpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGV4dHJhY3RlZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIENvbnZlcnQgdG8gZGVjaW1hbCB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gZXh0cmFjdGVkWzFdIC8gMTAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFdoZW4gZXh0cmFjdGluZyBvcGFjaXR5LCBkZWZhdWx0IHRvIDEgc2luY2UgYSBudWxsIHZhbHVlIG1lYW5zIG9wYWNpdHkgaGFzbid0IGJlZW4gc2V0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJpbmplY3RcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogT3BhY2lmaWVkIGVsZW1lbnRzIGFyZSByZXF1aXJlZCB0byBoYXZlIHRoZWlyIHpvb20gcHJvcGVydHkgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBTZXR0aW5nIHRoZSBmaWx0ZXIgcHJvcGVydHkgb24gZWxlbWVudHMgd2l0aCBjZXJ0YWluIGZvbnQgcHJvcGVydHkgY29tYmluYXRpb25zIGNhbiByZXN1bHQgaW4gYVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgaGlnaGx5IHVuYXBwZWFsaW5nIHVsdHJhLWJvbGRpbmcgZWZmZWN0LiBUaGVyZSdzIG5vIHdheSB0byByZW1lZHkgdGhpcyB0aHJvdWdob3V0IGEgdHdlZW4sIGJ1dCBkcm9wcGluZyB0aGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0IHZhbHVlIGFsdG9nZXRoZXIgKHdoZW4gb3BhY2l0eSBoaXRzIDEpIGF0IGxlYXN0cyBlbnN1cmVzIHRoYXQgdGhlIGdsaXRjaCBpcyBnb25lIHBvc3QtdHdlZW5pbmcuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChwYXJzZUZsb2F0KHByb3BlcnR5VmFsdWUpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBBcyBwZXIgdGhlIGZpbHRlciBwcm9wZXJ0eSdzIHNwZWMsIGNvbnZlcnQgdGhlIGRlY2ltYWwgdmFsdWUgdG8gYSB3aG9sZSBudW1iZXIgYW5kIHdyYXAgdGhlIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcImFscGhhKG9wYWNpdHk9XCIgKyBwYXJzZUludChwYXJzZUZsb2F0KHByb3BlcnR5VmFsdWUpICogMTAwLCAxMCkgKyBcIilcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHQvKiBXaXRoIGFsbCBvdGhlciBicm93c2Vycywgbm9ybWFsaXphdGlvbiBpcyBub3QgcmVxdWlyZWQ7IHJldHVybiB0aGUgc2FtZSB2YWx1ZXMgdGhhdCB3ZXJlIHBhc3NlZCBpbi4gKi9cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJuYW1lXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcIm9wYWNpdHlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJleHRyYWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcImluamVjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBCYXRjaGVkIFJlZ2lzdHJhdGlvbnNcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIE5vdGU6IEJhdGNoZWQgbm9ybWFsaXphdGlvbnMgZXh0ZW5kIHRoZSBDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZCBvYmplY3QuICovXHJcblx0XHRcdFx0cmVnaXN0ZXI6IGZ1bmN0aW9uKCkge1xyXG5cclxuXHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0IFRyYW5zZm9ybXNcclxuXHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHQvKiBUcmFuc2Zvcm1zIGFyZSB0aGUgc3VicHJvcGVydGllcyBjb250YWluZWQgYnkgdGhlIENTUyBcInRyYW5zZm9ybVwiIHByb3BlcnR5LiBUcmFuc2Zvcm1zIG11c3QgdW5kZXJnbyBub3JtYWxpemF0aW9uXHJcblx0XHRcdFx0XHQgc28gdGhhdCB0aGV5IGNhbiBiZSByZWZlcmVuY2VkIGluIGEgcHJvcGVydGllcyBtYXAgYnkgdGhlaXIgaW5kaXZpZHVhbCBuYW1lcy4gKi9cclxuXHRcdFx0XHRcdC8qIE5vdGU6IFdoZW4gdHJhbnNmb3JtcyBhcmUgXCJzZXRcIiwgdGhleSBhcmUgYWN0dWFsbHkgYXNzaWduZWQgdG8gYSBwZXItZWxlbWVudCB0cmFuc2Zvcm1DYWNoZS4gV2hlbiBhbGwgdHJhbnNmb3JtXHJcblx0XHRcdFx0XHQgc2V0dGluZyBpcyBjb21wbGV0ZSBjb21wbGV0ZSwgQ1NTLmZsdXNoVHJhbnNmb3JtQ2FjaGUoKSBtdXN0IGJlIG1hbnVhbGx5IGNhbGxlZCB0byBmbHVzaCB0aGUgdmFsdWVzIHRvIHRoZSBET00uXHJcblx0XHRcdFx0XHQgVHJhbnNmb3JtIHNldHRpbmcgaXMgYmF0Y2hlZCBpbiB0aGlzIHdheSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlOiB0aGUgdHJhbnNmb3JtIHN0eWxlIG9ubHkgbmVlZHMgdG8gYmUgdXBkYXRlZFxyXG5cdFx0XHRcdFx0IG9uY2Ugd2hlbiBtdWx0aXBsZSB0cmFuc2Zvcm0gc3VicHJvcGVydGllcyBhcmUgYmVpbmcgYW5pbWF0ZWQgc2ltdWx0YW5lb3VzbHkuICovXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBJRTkgYW5kIEFuZHJvaWQgR2luZ2VyYnJlYWQgaGF2ZSBzdXBwb3J0IGZvciAyRCAtLSBidXQgbm90IDNEIC0tIHRyYW5zZm9ybXMuIFNpbmNlIGFuaW1hdGluZyB1bnN1cHBvcnRlZFxyXG5cdFx0XHRcdFx0IHRyYW5zZm9ybSBwcm9wZXJ0aWVzIHJlc3VsdHMgaW4gdGhlIGJyb3dzZXIgaWdub3JpbmcgdGhlICplbnRpcmUqIHRyYW5zZm9ybSBzdHJpbmcsIHdlIHByZXZlbnQgdGhlc2UgM0QgdmFsdWVzXHJcblx0XHRcdFx0XHQgZnJvbSBiZWluZyBub3JtYWxpemVkIGZvciB0aGVzZSBicm93c2VycyBzbyB0aGF0IHR3ZWVuaW5nIHNraXBzIHRoZXNlIHByb3BlcnRpZXMgYWx0b2dldGhlclxyXG5cdFx0XHRcdFx0IChzaW5jZSBpdCB3aWxsIGlnbm9yZSB0aGVtIGFzIGJlaW5nIHVuc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLikgKi9cclxuXHRcdFx0XHRcdGlmICgoIUlFIHx8IElFID4gOSkgJiYgIVZlbG9jaXR5LlN0YXRlLmlzR2luZ2VyYnJlYWQpIHtcclxuXHRcdFx0XHRcdFx0LyogTm90ZTogU2luY2UgdGhlIHN0YW5kYWxvbmUgQ1NTIFwicGVyc3BlY3RpdmVcIiBwcm9wZXJ0eSBhbmQgdGhlIENTUyB0cmFuc2Zvcm0gXCJwZXJzcGVjdGl2ZVwiIHN1YnByb3BlcnR5XHJcblx0XHRcdFx0XHRcdCBzaGFyZSB0aGUgc2FtZSBuYW1lLCB0aGUgbGF0dGVyIGlzIGdpdmVuIGEgdW5pcXVlIHRva2VuIHdpdGhpbiBWZWxvY2l0eTogXCJ0cmFuc2Zvcm1QZXJzcGVjdGl2ZVwiLiAqL1xyXG5cdFx0XHRcdFx0XHRDU1MuTGlzdHMudHJhbnNmb3Jtc0Jhc2UgPSBDU1MuTGlzdHMudHJhbnNmb3Jtc0Jhc2UuY29uY2F0KENTUy5MaXN0cy50cmFuc2Zvcm1zM0QpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgQ1NTLkxpc3RzLnRyYW5zZm9ybXNCYXNlLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdC8qIFdyYXAgdGhlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBub3JtYWxpemF0aW9uIGZ1bmN0aW9uIGluIGEgbmV3IHNjb3BlIHNvIHRoYXQgdHJhbnNmb3JtTmFtZSdzIHZhbHVlIGlzXHJcblx0XHRcdFx0XHRcdCBwYWlyZWQgd2l0aCBpdHMgcmVzcGVjdGl2ZSBmdW5jdGlvbi4gKE90aGVyd2lzZSwgYWxsIGZ1bmN0aW9ucyB3b3VsZCB0YWtlIHRoZSBmaW5hbCBmb3IgbG9vcCdzIHRyYW5zZm9ybU5hbWUuKSAqL1xyXG5cdFx0XHRcdFx0XHQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHRyYW5zZm9ybU5hbWUgPSBDU1MuTGlzdHMudHJhbnNmb3Jtc0Jhc2VbaV07XHJcblxyXG5cdFx0XHRcdFx0XHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3RyYW5zZm9ybU5hbWVdID0gZnVuY3Rpb24odHlwZSwgZWxlbWVudCwgcHJvcGVydHlWYWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIFRoZSBub3JtYWxpemVkIHByb3BlcnR5IG5hbWUgaXMgdGhlIHBhcmVudCBcInRyYW5zZm9ybVwiIHByb3BlcnR5IC0tIHRoZSBwcm9wZXJ0eSB0aGF0IGlzIGFjdHVhbGx5IHNldCBpbiBDU1MuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJuYW1lXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwidHJhbnNmb3JtXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogVHJhbnNmb3JtIHZhbHVlcyBhcmUgY2FjaGVkIG9udG8gYSBwZXItZWxlbWVudCB0cmFuc2Zvcm1DYWNoZSBvYmplY3QuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJleHRyYWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgdGhpcyB0cmFuc2Zvcm0gaGFzIHlldCB0byBiZSBhc3NpZ25lZCBhIHZhbHVlLCByZXR1cm4gaXRzIG51bGwgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKERhdGEoZWxlbWVudCkgPT09IHVuZGVmaW5lZCB8fCBEYXRhKGVsZW1lbnQpLnRyYW5zZm9ybUNhY2hlW3RyYW5zZm9ybU5hbWVdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFNjYWxlIENTUy5MaXN0cy50cmFuc2Zvcm1zQmFzZSBkZWZhdWx0IHRvIDEgd2hlcmVhcyBhbGwgb3RoZXIgdHJhbnNmb3JtIHByb3BlcnRpZXMgZGVmYXVsdCB0byAwLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIC9ec2NhbGUvaS50ZXN0KHRyYW5zZm9ybU5hbWUpID8gMSA6IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBXaGVuIHRyYW5zZm9ybSB2YWx1ZXMgYXJlIHNldCwgdGhleSBhcmUgd3JhcHBlZCBpbiBwYXJlbnRoZXNlcyBhcyBwZXIgdGhlIENTUyBzcGVjLlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0IFRodXMsIHdoZW4gZXh0cmFjdGluZyB0aGVpciB2YWx1ZXMgKGZvciB0d2VlbiBjYWxjdWxhdGlvbnMpLCB3ZSBzdHJpcCBvZmYgdGhlIHBhcmVudGhlc2VzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gRGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZVt0cmFuc2Zvcm1OYW1lXS5yZXBsYWNlKC9bKCldL2csIFwiXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiaW5qZWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGludmFsaWQgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgYW4gaW5kaXZpZHVhbCB0cmFuc2Zvcm0gcHJvcGVydHkgY29udGFpbnMgYW4gdW5zdXBwb3J0ZWQgdW5pdCB0eXBlLCB0aGUgYnJvd3NlciBpZ25vcmVzIHRoZSAqZW50aXJlKiB0cmFuc2Zvcm0gcHJvcGVydHkuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IFRodXMsIHByb3RlY3QgdXNlcnMgZnJvbSB0aGVtc2VsdmVzIGJ5IHNraXBwaW5nIHNldHRpbmcgZm9yIHRyYW5zZm9ybSB2YWx1ZXMgc3VwcGxpZWQgd2l0aCBpbnZhbGlkIHVuaXQgdHlwZXMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogU3dpdGNoIG9uIHRoZSBiYXNlIHRyYW5zZm9ybSB0eXBlOyBpZ25vcmUgdGhlIGF4aXMgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgbGV0dGVyIGZyb20gdGhlIHRyYW5zZm9ybSdzIG5hbWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3dpdGNoICh0cmFuc2Zvcm1OYW1lLnN1YnN0cigwLCB0cmFuc2Zvcm1OYW1lLmxlbmd0aCAtIDEpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBXaGl0ZWxpc3QgdW5pdCB0eXBlcyBmb3IgZWFjaCB0cmFuc2Zvcm0uICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwidHJhbnNsYXRlXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGludmFsaWQgPSAhLyglfHB4fGVtfHJlbXx2d3x2aHxcXGQpJC9pLnRlc3QocHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBTaW5jZSBhbiBheGlzLWZyZWUgXCJzY2FsZVwiIHByb3BlcnR5IGlzIHN1cHBvcnRlZCBhcyB3ZWxsLCBhIGxpdHRsZSBoYWNrIGlzIHVzZWQgaGVyZSB0byBkZXRlY3QgaXQgYnkgY2hvcHBpbmcgb2ZmIGl0cyBsYXN0IGxldHRlci4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJzY2FsXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwic2NhbGVcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogQ2hyb21lIG9uIEFuZHJvaWQgaGFzIGEgYnVnIGluIHdoaWNoIHNjYWxlZCBlbGVtZW50cyBibHVyIGlmIHRoZWlyIGluaXRpYWwgc2NhbGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IHZhbHVlIGlzIGJlbG93IDEgKHdoaWNoIGNhbiBoYXBwZW4gd2l0aCBmb3JjZWZlZWRpbmcpLiBUaHVzLCB3ZSBkZXRlY3QgYSB5ZXQtdW5zZXQgc2NhbGUgcHJvcGVydHlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IGFuZCBlbnN1cmUgdGhhdCBpdHMgZmlyc3QgdmFsdWUgaXMgYWx3YXlzIDEuIE1vcmUgaW5mbzogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDQxNzg5MC9jc3MzLWFuaW1hdGlvbnMtd2l0aC10cmFuc2Zvcm0tY2F1c2VzLWJsdXJyZWQtZWxlbWVudHMtb24td2Via2l0LzEwNDE3OTYyIzEwNDE3OTYyICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5TdGF0ZS5pc0FuZHJvaWQgJiYgRGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZVt0cmFuc2Zvcm1OYW1lXSA9PT0gdW5kZWZpbmVkICYmIHByb3BlcnR5VmFsdWUgPCAxKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IDE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGludmFsaWQgPSAhLyhcXGQpJC9pLnRlc3QocHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInNrZXdcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW52YWxpZCA9ICEvKGRlZ3xcXGQpJC9pLnRlc3QocHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInJvdGF0ZVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbnZhbGlkID0gIS8oZGVnfFxcZCkkL2kudGVzdChwcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIWludmFsaWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIEFzIHBlciB0aGUgQ1NTIHNwZWMsIHdyYXAgdGhlIHZhbHVlIGluIHBhcmVudGhlc2VzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0RGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZVt0cmFuc2Zvcm1OYW1lXSA9IFwiKFwiICsgcHJvcGVydHlWYWx1ZSArIFwiKVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogQWx0aG91Z2ggdGhlIHZhbHVlIGlzIHNldCBvbiB0aGUgdHJhbnNmb3JtQ2FjaGUgb2JqZWN0LCByZXR1cm4gdGhlIG5ld2x5LXVwZGF0ZWQgdmFsdWUgZm9yIHRoZSBjYWxsaW5nIGNvZGUgdG8gcHJvY2VzcyBhcyBub3JtYWwuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV07XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0fSkoKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0IENvbG9yc1xyXG5cdFx0XHRcdFx0ICoqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0LyogU2luY2UgVmVsb2NpdHkgb25seSBhbmltYXRlcyBhIHNpbmdsZSBudW1lcmljIHZhbHVlIHBlciBwcm9wZXJ0eSwgY29sb3IgYW5pbWF0aW9uIGlzIGFjaGlldmVkIGJ5IGhvb2tpbmcgdGhlIGluZGl2aWR1YWwgUkdCQSBjb21wb25lbnRzIG9mIENTUyBjb2xvciBwcm9wZXJ0aWVzLlxyXG5cdFx0XHRcdFx0IEFjY29yZGluZ2x5LCBjb2xvciB2YWx1ZXMgbXVzdCBiZSBub3JtYWxpemVkIChlLmcuIFwiI2ZmMDAwMFwiLCBcInJlZFwiLCBhbmQgXCJyZ2IoMjU1LCAwLCAwKVwiID09PiBcIjI1NSAwIDAgMVwiKSBzbyB0aGF0IHRoZWlyIGNvbXBvbmVudHMgY2FuIGJlIGluamVjdGVkL2V4dHJhY3RlZCBieSBDU1MuSG9va3MgbG9naWMuICovXHJcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IENTUy5MaXN0cy5jb2xvcnMubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0LyogV3JhcCB0aGUgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIG5vcm1hbGl6YXRpb24gZnVuY3Rpb24gaW4gYSBuZXcgc2NvcGUgc28gdGhhdCBjb2xvck5hbWUncyB2YWx1ZSBpcyBwYWlyZWQgd2l0aCBpdHMgcmVzcGVjdGl2ZSBmdW5jdGlvbi5cclxuXHRcdFx0XHRcdFx0IChPdGhlcndpc2UsIGFsbCBmdW5jdGlvbnMgd291bGQgdGFrZSB0aGUgZmluYWwgZm9yIGxvb3AncyBjb2xvck5hbWUuKSAqL1xyXG5cdFx0XHRcdFx0XHQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGNvbG9yTmFtZSA9IENTUy5MaXN0cy5jb2xvcnNbal07XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIE5vdGU6IEluIElFPD04LCB3aGljaCBzdXBwb3J0IHJnYiBidXQgbm90IHJnYmEsIGNvbG9yIHByb3BlcnRpZXMgYXJlIHJldmVydGVkIHRvIHJnYiBieSBzdHJpcHBpbmcgb2ZmIHRoZSBhbHBoYSBjb21wb25lbnQuICovXHJcblx0XHRcdFx0XHRcdFx0Q1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbY29sb3JOYW1lXSA9IGZ1bmN0aW9uKHR5cGUsIGVsZW1lbnQsIHByb3BlcnR5VmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwibmFtZVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBjb2xvck5hbWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogQ29udmVydCBhbGwgY29sb3IgdmFsdWVzIGludG8gdGhlIHJnYiBmb3JtYXQuIChPbGQgSUUgY2FuIHJldHVybiBoZXggdmFsdWVzIGFuZCBjb2xvciBuYW1lcyBpbnN0ZWFkIG9mIHJnYi9yZ2JhLikgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcImV4dHJhY3RcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0cmFjdGVkO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgY29sb3IgaXMgYWxyZWFkeSBpbiBpdHMgaG9va2FibGUgZm9ybSAoZS5nLiBcIjI1NSAyNTUgMjU1IDFcIikgZHVlIHRvIGhhdmluZyBiZWVuIHByZXZpb3VzbHkgZXh0cmFjdGVkLCBza2lwIGV4dHJhY3Rpb24uICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKENTUy5SZWdFeC53cmFwcGVkVmFsdWVBbHJlYWR5RXh0cmFjdGVkLnRlc3QocHJvcGVydHlWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV4dHJhY3RlZCA9IHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjb252ZXJ0ZWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sb3JOYW1lcyA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJsYWNrOiBcInJnYigwLCAwLCAwKVwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ymx1ZTogXCJyZ2IoMCwgMCwgMjU1KVwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z3JheTogXCJyZ2IoMTI4LCAxMjgsIDEyOClcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdyZWVuOiBcInJnYigwLCAxMjgsIDApXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZWQ6IFwicmdiKDI1NSwgMCwgMClcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdoaXRlOiBcInJnYigyNTUsIDI1NSwgMjU1KVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBDb252ZXJ0IGNvbG9yIG5hbWVzIHRvIHJnYi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgvXltBLXpdKyQvaS50ZXN0KHByb3BlcnR5VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjb2xvck5hbWVzW3Byb3BlcnR5VmFsdWVdICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWQgPSBjb2xvck5hbWVzW3Byb3BlcnR5VmFsdWVdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIGFuIHVubWF0Y2hlZCBjb2xvciBuYW1lIGlzIHByb3ZpZGVkLCBkZWZhdWx0IHRvIGJsYWNrLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlZCA9IGNvbG9yTmFtZXMuYmxhY2s7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogQ29udmVydCBoZXggdmFsdWVzIHRvIHJnYi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoQ1NTLlJlZ0V4LmlzSGV4LnRlc3QocHJvcGVydHlWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVkID0gXCJyZ2IoXCIgKyBDU1MuVmFsdWVzLmhleFRvUmdiKHByb3BlcnR5VmFsdWUpLmpvaW4oXCIgXCIpICsgXCIpXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIHRoZSBwcm92aWRlZCBjb2xvciBkb2Vzbid0IG1hdGNoIGFueSBvZiB0aGUgYWNjZXB0ZWQgY29sb3IgZm9ybWF0cywgZGVmYXVsdCB0byBibGFjay4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgvXnJnYmE/XFwoL2kudGVzdChwcm9wZXJ0eVZhbHVlKSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVkID0gY29sb3JOYW1lcy5ibGFjaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBSZW1vdmUgdGhlIHN1cnJvdW5kaW5nIFwicmdiL3JnYmEoKVwiIHN0cmluZyB0aGVuIHJlcGxhY2UgY29tbWFzIHdpdGggc3BhY2VzIGFuZCBzdHJpcFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0IHJlcGVhdGVkIHNwYWNlcyAoaW4gY2FzZSB0aGUgdmFsdWUgaW5jbHVkZWQgc3BhY2VzIHRvIGJlZ2luIHdpdGgpLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXh0cmFjdGVkID0gKGNvbnZlcnRlZCB8fCBwcm9wZXJ0eVZhbHVlKS50b1N0cmluZygpLm1hdGNoKENTUy5SZWdFeC52YWx1ZVVud3JhcClbMV0ucmVwbGFjZSgvLChcXHMrKT8vZywgXCIgXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogU28gbG9uZyBhcyB0aGlzIGlzbid0IDw9SUU4LCBhZGQgYSBmb3VydGggKGFscGhhKSBjb21wb25lbnQgaWYgaXQncyBtaXNzaW5nIGFuZCBkZWZhdWx0IGl0IHRvIDEgKHZpc2libGUpLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgoIUlFIHx8IElFID4gOCkgJiYgZXh0cmFjdGVkLnNwbGl0KFwiIFwiKS5sZW5ndGggPT09IDMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV4dHJhY3RlZCArPSBcIiAxXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZXh0cmFjdGVkO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiaW5qZWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgd2UgaGF2ZSBhIHBhdHRlcm4gdGhlbiBpdCBtaWdodCBhbHJlYWR5IGhhdmUgdGhlIHJpZ2h0IHZhbHVlcyAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgvXnJnYi8udGVzdChwcm9wZXJ0eVZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiB0aGlzIGlzIElFPD04IGFuZCBhbiBhbHBoYSBjb21wb25lbnQgZXhpc3RzLCBzdHJpcCBpdCBvZmYuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKElFIDw9IDgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eVZhbHVlLnNwbGl0KFwiIFwiKS5sZW5ndGggPT09IDQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5VmFsdWUuc3BsaXQoL1xccysvKS5zbGljZSgwLCAzKS5qb2luKFwiIFwiKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIE90aGVyd2lzZSwgYWRkIGEgZm91cnRoIChhbHBoYSkgY29tcG9uZW50IGlmIGl0J3MgbWlzc2luZyBhbmQgZGVmYXVsdCBpdCB0byAxICh2aXNpYmxlKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5VmFsdWUuc3BsaXQoXCIgXCIpLmxlbmd0aCA9PT0gMykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSArPSBcIiAxXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBSZS1pbnNlcnQgdGhlIGJyb3dzZXItYXBwcm9wcmlhdGUgd3JhcHBlcihcInJnYi9yZ2JhKClcIiksIGluc2VydCBjb21tYXMsIGFuZCBzdHJpcCBvZmYgZGVjaW1hbCB1bml0c1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBvbiBhbGwgdmFsdWVzIGJ1dCB0aGUgZm91cnRoIChSLCBHLCBhbmQgQiBvbmx5IGFjY2VwdCB3aG9sZSBudW1iZXJzKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKElFIDw9IDggPyBcInJnYlwiIDogXCJyZ2JhXCIpICsgXCIoXCIgKyBwcm9wZXJ0eVZhbHVlLnJlcGxhY2UoL1xccysvZywgXCIsXCIpLnJlcGxhY2UoL1xcLihcXGQpKyg/PSwpL2csIFwiXCIpICsgXCIpXCI7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0fSkoKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBEaW1lbnNpb25zXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKiovXHJcblx0XHRcdFx0XHRmdW5jdGlvbiBhdWdtZW50RGltZW5zaW9uKG5hbWUsIGVsZW1lbnQsIHdhbnRJbm5lcikge1xyXG5cdFx0XHRcdFx0XHR2YXIgaXNCb3JkZXJCb3ggPSBDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImJveFNpemluZ1wiKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09IFwiYm9yZGVyLWJveFwiO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKGlzQm9yZGVyQm94ID09PSAod2FudElubmVyIHx8IGZhbHNlKSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIGluIGJveC1zaXppbmcgbW9kZSwgdGhlIENTUyB3aWR0aCAvIGhlaWdodCBhY2Nlc3NvcnMgYWxyZWFkeSBnaXZlIHRoZSBvdXRlcldpZHRoIC8gb3V0ZXJIZWlnaHQuICovXHJcblx0XHRcdFx0XHRcdFx0dmFyIGksXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRhdWdtZW50ID0gMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2lkZXMgPSBuYW1lID09PSBcIndpZHRoXCIgPyBbXCJMZWZ0XCIsIFwiUmlnaHRcIl0gOiBbXCJUb3BcIiwgXCJCb3R0b21cIl0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkcyA9IFtcInBhZGRpbmdcIiArIHNpZGVzWzBdLCBcInBhZGRpbmdcIiArIHNpZGVzWzFdLCBcImJvcmRlclwiICsgc2lkZXNbMF0gKyBcIldpZHRoXCIsIFwiYm9yZGVyXCIgKyBzaWRlc1sxXSArIFwiV2lkdGhcIl07XHJcblxyXG5cdFx0XHRcdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gcGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBmaWVsZHNbaV0pKTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICghaXNOYU4odmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGF1Z21lbnQgKz0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB3YW50SW5uZXIgPyAtYXVnbWVudCA6IGF1Z21lbnQ7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRmdW5jdGlvbiBnZXREaW1lbnNpb24obmFtZSwgd2FudElubmVyKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBwcm9wZXJ0eVZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwibmFtZVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbmFtZTtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJleHRyYWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBwYXJzZUZsb2F0KHByb3BlcnR5VmFsdWUpICsgYXVnbWVudERpbWVuc2lvbihuYW1lLCBlbGVtZW50LCB3YW50SW5uZXIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcImluamVjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKHBhcnNlRmxvYXQocHJvcGVydHlWYWx1ZSkgLSBhdWdtZW50RGltZW5zaW9uKG5hbWUsIGVsZW1lbnQsIHdhbnRJbm5lcikpICsgXCJweFwiO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkLmlubmVyV2lkdGggPSBnZXREaW1lbnNpb24oXCJ3aWR0aFwiLCB0cnVlKTtcclxuXHRcdFx0XHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkLmlubmVySGVpZ2h0ID0gZ2V0RGltZW5zaW9uKFwiaGVpZ2h0XCIsIHRydWUpO1xyXG5cdFx0XHRcdFx0Q1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWQub3V0ZXJXaWR0aCA9IGdldERpbWVuc2lvbihcIndpZHRoXCIpO1xyXG5cdFx0XHRcdFx0Q1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWQub3V0ZXJIZWlnaHQgPSBnZXREaW1lbnNpb24oXCJoZWlnaHRcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdCBDU1MgUHJvcGVydHkgTmFtZXNcclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdE5hbWVzOiB7XHJcblx0XHRcdFx0LyogQ2FtZWxjYXNlIGEgcHJvcGVydHkgbmFtZSBpbnRvIGl0cyBKYXZhU2NyaXB0IG5vdGF0aW9uIChlLmcuIFwiYmFja2dyb3VuZC1jb2xvclwiID09PiBcImJhY2tncm91bmRDb2xvclwiKS5cclxuXHRcdFx0XHQgQ2FtZWxjYXNpbmcgaXMgdXNlZCB0byBub3JtYWxpemUgcHJvcGVydHkgbmFtZXMgYmV0d2VlbiBhbmQgYWNyb3NzIGNhbGxzLiAqL1xyXG5cdFx0XHRcdGNhbWVsQ2FzZTogZnVuY3Rpb24ocHJvcGVydHkpIHtcclxuXHRcdFx0XHRcdHJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKC8tKFxcdykvZywgZnVuY3Rpb24obWF0Y2gsIHN1Yk1hdGNoKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBzdWJNYXRjaC50b1VwcGVyQ2FzZSgpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKiBGb3IgU1ZHIGVsZW1lbnRzLCBzb21lIHByb3BlcnRpZXMgKG5hbWVseSwgZGltZW5zaW9uYWwgb25lcykgYXJlIEdFVC9TRVQgdmlhIHRoZSBlbGVtZW50J3MgSFRNTCBhdHRyaWJ1dGVzIChpbnN0ZWFkIG9mIHZpYSBDU1Mgc3R5bGVzKS4gKi9cclxuXHRcdFx0XHRTVkdBdHRyaWJ1dGU6IGZ1bmN0aW9uKHByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHR2YXIgU1ZHQXR0cmlidXRlcyA9IFwid2lkdGh8aGVpZ2h0fHh8eXxjeHxjeXxyfHJ4fHJ5fHgxfHgyfHkxfHkyXCI7XHJcblxyXG5cdFx0XHRcdFx0LyogQ2VydGFpbiBicm93c2VycyByZXF1aXJlIGFuIFNWRyB0cmFuc2Zvcm0gdG8gYmUgYXBwbGllZCBhcyBhbiBhdHRyaWJ1dGUuIChPdGhlcndpc2UsIGFwcGxpY2F0aW9uIHZpYSBDU1MgaXMgcHJlZmVyYWJsZSBkdWUgdG8gM0Qgc3VwcG9ydC4pICovXHJcblx0XHRcdFx0XHRpZiAoSUUgfHwgKFZlbG9jaXR5LlN0YXRlLmlzQW5kcm9pZCAmJiAhVmVsb2NpdHkuU3RhdGUuaXNDaHJvbWUpKSB7XHJcblx0XHRcdFx0XHRcdFNWR0F0dHJpYnV0ZXMgKz0gXCJ8dHJhbnNmb3JtXCI7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBSZWdFeHAoXCJeKFwiICsgU1ZHQXR0cmlidXRlcyArIFwiKSRcIiwgXCJpXCIpLnRlc3QocHJvcGVydHkpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBwcm9wZXJ0eSBzaG91bGQgYmUgc2V0IHdpdGggYSB2ZW5kb3IgcHJlZml4LiAqL1xyXG5cdFx0XHRcdC8qIElmIGEgcHJlZml4ZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgZXhpc3RzLCByZXR1cm4gaXQuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSBuYW1lLlxyXG5cdFx0XHRcdCBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGF0IGFsbCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIsIHJldHVybiBhIGZhbHNlIGZsYWcuICovXHJcblx0XHRcdFx0cHJlZml4Q2hlY2s6IGZ1bmN0aW9uKHByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHQvKiBJZiB0aGlzIHByb3BlcnR5IGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZCwgcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUuICovXHJcblx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuU3RhdGUucHJlZml4TWF0Y2hlc1twcm9wZXJ0eV0pIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIFtWZWxvY2l0eS5TdGF0ZS5wcmVmaXhNYXRjaGVzW3Byb3BlcnR5XSwgdHJ1ZV07XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR2YXIgdmVuZG9ycyA9IFtcIlwiLCBcIldlYmtpdFwiLCBcIk1velwiLCBcIm1zXCIsIFwiT1wiXTtcclxuXHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwLCB2ZW5kb3JzTGVuZ3RoID0gdmVuZG9ycy5sZW5ndGg7IGkgPCB2ZW5kb3JzTGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgcHJvcGVydHlQcmVmaXhlZDtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKGkgPT09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5UHJlZml4ZWQgPSBwcm9wZXJ0eTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogQ2FwaXRhbGl6ZSB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBwcm9wZXJ0eSB0byBjb25mb3JtIHRvIEphdmFTY3JpcHQgdmVuZG9yIHByZWZpeCBub3RhdGlvbiAoZS5nLiB3ZWJraXRGaWx0ZXIpLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlQcmVmaXhlZCA9IHZlbmRvcnNbaV0gKyBwcm9wZXJ0eS5yZXBsYWNlKC9eXFx3LywgZnVuY3Rpb24obWF0Y2gpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG1hdGNoLnRvVXBwZXJDYXNlKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIENoZWNrIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIHRoaXMgcHJvcGVydHkgYXMgcHJlZml4ZWQuICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKFR5cGUuaXNTdHJpbmcoVmVsb2NpdHkuU3RhdGUucHJlZml4RWxlbWVudC5zdHlsZVtwcm9wZXJ0eVByZWZpeGVkXSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIENhY2hlIHRoZSBtYXRjaC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFZlbG9jaXR5LlN0YXRlLnByZWZpeE1hdGNoZXNbcHJvcGVydHldID0gcHJvcGVydHlQcmVmaXhlZDtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gW3Byb3BlcnR5UHJlZml4ZWQsIHRydWVdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogSWYgdGhlIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHRoaXMgcHJvcGVydHkgaW4gYW55IGZvcm0sIGluY2x1ZGUgYSBmYWxzZSBmbGFnIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gZGVjaWRlIGhvdyB0byBwcm9jZWVkLiAqL1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gW3Byb3BlcnR5LCBmYWxzZV07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdCBDU1MgUHJvcGVydHkgVmFsdWVzXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRWYWx1ZXM6IHtcclxuXHRcdFx0XHQvKiBIZXggdG8gUkdCIGNvbnZlcnNpb24uIENvcHlyaWdodCBUaW0gRG93bjogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NjIzODM4L3JnYi10by1oZXgtYW5kLWhleC10by1yZ2IgKi9cclxuXHRcdFx0XHRoZXhUb1JnYjogZnVuY3Rpb24oaGV4KSB7XHJcblx0XHRcdFx0XHR2YXIgc2hvcnRmb3JtUmVnZXggPSAvXiM/KFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pJC9pLFxyXG5cdFx0XHRcdFx0XHRcdGxvbmdmb3JtUmVnZXggPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLFxyXG5cdFx0XHRcdFx0XHRcdHJnYlBhcnRzO1xyXG5cclxuXHRcdFx0XHRcdGhleCA9IGhleC5yZXBsYWNlKHNob3J0Zm9ybVJlZ2V4LCBmdW5jdGlvbihtLCByLCBnLCBiKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiByICsgciArIGcgKyBnICsgYiArIGI7XHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRyZ2JQYXJ0cyA9IGxvbmdmb3JtUmVnZXguZXhlYyhoZXgpO1xyXG5cclxuXHRcdFx0XHRcdHJldHVybiByZ2JQYXJ0cyA/IFtwYXJzZUludChyZ2JQYXJ0c1sxXSwgMTYpLCBwYXJzZUludChyZ2JQYXJ0c1syXSwgMTYpLCBwYXJzZUludChyZ2JQYXJ0c1szXSwgMTYpXSA6IFswLCAwLCAwXTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGlzQ1NTTnVsbFZhbHVlOiBmdW5jdGlvbih2YWx1ZSkge1xyXG5cdFx0XHRcdFx0LyogVGhlIGJyb3dzZXIgZGVmYXVsdHMgQ1NTIHZhbHVlcyB0aGF0IGhhdmUgbm90IGJlZW4gc2V0IHRvIGVpdGhlciAwIG9yIG9uZSBvZiBzZXZlcmFsIHBvc3NpYmxlIG51bGwtdmFsdWUgc3RyaW5ncy5cclxuXHRcdFx0XHRcdCBUaHVzLCB3ZSBjaGVjayBmb3IgYm90aCBmYWxzaW5lc3MgYW5kIHRoZXNlIHNwZWNpYWwgc3RyaW5ncy4gKi9cclxuXHRcdFx0XHRcdC8qIE51bGwtdmFsdWUgY2hlY2tpbmcgaXMgcGVyZm9ybWVkIHRvIGRlZmF1bHQgdGhlIHNwZWNpYWwgc3RyaW5ncyB0byAwIChmb3IgdGhlIHNha2Ugb2YgdHdlZW5pbmcpIG9yIHRoZWlyIGhvb2tcclxuXHRcdFx0XHRcdCB0ZW1wbGF0ZXMgYXMgZGVmaW5lZCBhcyBDU1MuSG9va3MgKGZvciB0aGUgc2FrZSBvZiBob29rIGluamVjdGlvbi9leHRyYWN0aW9uKS4gKi9cclxuXHRcdFx0XHRcdC8qIE5vdGU6IENocm9tZSByZXR1cm5zIFwicmdiYSgwLCAwLCAwLCAwKVwiIGZvciBhbiB1bmRlZmluZWQgY29sb3Igd2hlcmVhcyBJRSByZXR1cm5zIFwidHJhbnNwYXJlbnRcIi4gKi9cclxuXHRcdFx0XHRcdHJldHVybiAoIXZhbHVlIHx8IC9eKG5vbmV8YXV0b3x0cmFuc3BhcmVudHwocmdiYVxcKDAsID8wLCA/MCwgPzBcXCkpKSQvaS50ZXN0KHZhbHVlKSk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKiBSZXRyaWV2ZSBhIHByb3BlcnR5J3MgZGVmYXVsdCB1bml0IHR5cGUuIFVzZWQgZm9yIGFzc2lnbmluZyBhIHVuaXQgdHlwZSB3aGVuIG9uZSBpcyBub3Qgc3VwcGxpZWQgYnkgdGhlIHVzZXIuICovXHJcblx0XHRcdFx0Z2V0VW5pdFR5cGU6IGZ1bmN0aW9uKHByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHRpZiAoL14ocm90YXRlfHNrZXcpL2kudGVzdChwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIFwiZGVnXCI7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKC8oXihzY2FsZXxzY2FsZVh8c2NhbGVZfHNjYWxlWnxhbHBoYXxmbGV4R3Jvd3xmbGV4SGVpZ2h0fHpJbmRleHxmb250V2VpZ2h0KSQpfCgob3BhY2l0eXxyZWR8Z3JlZW58Ymx1ZXxhbHBoYSkkKS9pLnRlc3QocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdC8qIFRoZSBhYm92ZSBwcm9wZXJ0aWVzIGFyZSB1bml0bGVzcy4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvKiBEZWZhdWx0IHRvIHB4IGZvciBhbGwgb3RoZXIgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIFwicHhcIjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qIEhUTUwgZWxlbWVudHMgZGVmYXVsdCB0byBhbiBhc3NvY2lhdGVkIGRpc3BsYXkgdHlwZSB3aGVuIHRoZXkncmUgbm90IHNldCB0byBkaXNwbGF5Om5vbmUuICovXHJcblx0XHRcdFx0LyogTm90ZTogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciBjb3JyZWN0bHkgc2V0dGluZyB0aGUgbm9uLVwibm9uZVwiIGRpc3BsYXkgdmFsdWUgaW4gY2VydGFpbiBWZWxvY2l0eSByZWRpcmVjdHMsIHN1Y2ggYXMgZmFkZUluL091dC4gKi9cclxuXHRcdFx0XHRnZXREaXNwbGF5VHlwZTogZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0dmFyIHRhZ05hbWUgPSBlbGVtZW50ICYmIGVsZW1lbnQudGFnTmFtZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKC9eKGJ8YmlnfGl8c21hbGx8dHR8YWJicnxhY3JvbnltfGNpdGV8Y29kZXxkZm58ZW18a2JkfHN0cm9uZ3xzYW1wfHZhcnxhfGJkb3xicnxpbWd8bWFwfG9iamVjdHxxfHNjcmlwdHxzcGFufHN1YnxzdXB8YnV0dG9ufGlucHV0fGxhYmVsfHNlbGVjdHx0ZXh0YXJlYSkkL2kudGVzdCh0YWdOYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJpbmxpbmVcIjtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoL14obGkpJC9pLnRlc3QodGFnTmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIFwibGlzdC1pdGVtXCI7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKC9eKHRyKSQvaS50ZXN0KHRhZ05hbWUpKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBcInRhYmxlLXJvd1wiO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICgvXih0YWJsZSkkL2kudGVzdCh0YWdOYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJ0YWJsZVwiO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICgvXih0Ym9keSkkL2kudGVzdCh0YWdOYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJ0YWJsZS1yb3ctZ3JvdXBcIjtcclxuXHRcdFx0XHRcdFx0LyogRGVmYXVsdCB0byBcImJsb2NrXCIgd2hlbiBubyBtYXRjaCBpcyBmb3VuZC4gKi9cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBcImJsb2NrXCI7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKiBUaGUgY2xhc3MgYWRkL3JlbW92ZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gdGVtcG9yYXJpbHkgYXBwbHkgYSBcInZlbG9jaXR5LWFuaW1hdGluZ1wiIGNsYXNzIHRvIGVsZW1lbnRzIHdoaWxlIHRoZXkncmUgYW5pbWF0aW5nLiAqL1xyXG5cdFx0XHRcdGFkZENsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHtcclxuXHRcdFx0XHRcdGlmIChlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFR5cGUuaXNTdHJpbmcoZWxlbWVudC5jbGFzc05hbWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gRWxlbWVudC5jbGFzc05hbWUgaXMgYXJvdW5kIDE1JSBmYXN0ZXIgdGhlbiBzZXQvZ2V0QXR0cmlidXRlXHJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5jbGFzc05hbWUgKz0gKGVsZW1lbnQuY2xhc3NOYW1lLmxlbmd0aCA/IFwiIFwiIDogXCJcIikgKyBjbGFzc05hbWU7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gV29yayBhcm91bmQgZm9yIElFIHN0cmljdCBtb2RlIGFuaW1hdGluZyBTVkcgLSBhbmQgYW55dGhpbmcgZWxzZSB0aGF0IGRvZXNuJ3QgYmVoYXZlIGNvcnJlY3RseSAtIHRoZSBzYW1lIHdheSBqUXVlcnkgZG9lcyBpdFxyXG5cdFx0XHRcdFx0XHRcdHZhciBjdXJyZW50Q2xhc3MgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShJRSA8PSA3ID8gXCJjbGFzc05hbWVcIiA6IFwiY2xhc3NcIikgfHwgXCJcIjtcclxuXHJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBjdXJyZW50Q2xhc3MgKyAoY3VycmVudENsYXNzID8gXCIgXCIgOiBcIlwiKSArIGNsYXNzTmFtZSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHJlbW92ZUNsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHtcclxuXHRcdFx0XHRcdGlmIChlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFR5cGUuaXNTdHJpbmcoZWxlbWVudC5jbGFzc05hbWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gRWxlbWVudC5jbGFzc05hbWUgaXMgYXJvdW5kIDE1JSBmYXN0ZXIgdGhlbiBzZXQvZ2V0QXR0cmlidXRlXHJcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogTmVlZCBzb21lIGpzcGVyZiB0ZXN0cyBvbiBwZXJmb3JtYW5jZSAtIGNhbiB3ZSBnZXQgcmlkIG9mIHRoZSByZWdleCBhbmQgbWF5YmUgdXNlIHNwbGl0IC8gYXJyYXkgbWFuaXB1bGF0aW9uP1xyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUudG9TdHJpbmcoKS5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIGNsYXNzTmFtZS5zcGxpdChcIiBcIikuam9pbihcInxcIikgKyBcIihcXFxcc3wkKVwiLCBcImdpXCIpLCBcIiBcIik7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gV29yayBhcm91bmQgZm9yIElFIHN0cmljdCBtb2RlIGFuaW1hdGluZyBTVkcgLSBhbmQgYW55dGhpbmcgZWxzZSB0aGF0IGRvZXNuJ3QgYmVoYXZlIGNvcnJlY3RseSAtIHRoZSBzYW1lIHdheSBqUXVlcnkgZG9lcyBpdFxyXG5cdFx0XHRcdFx0XHRcdHZhciBjdXJyZW50Q2xhc3MgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShJRSA8PSA3ID8gXCJjbGFzc05hbWVcIiA6IFwiY2xhc3NcIikgfHwgXCJcIjtcclxuXHJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBjdXJyZW50Q2xhc3MucmVwbGFjZShuZXcgUmVnRXhwKFwiKF58XFxzKVwiICsgY2xhc3NOYW1lLnNwbGl0KFwiIFwiKS5qb2luKFwifFwiKSArIFwiKFxcc3wkKVwiLCBcImdpXCIpLCBcIiBcIikpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgU3R5bGUgR2V0dGluZyAmIFNldHRpbmdcclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHQvKiBUaGUgc2luZ3VsYXIgZ2V0UHJvcGVydHlWYWx1ZSwgd2hpY2ggcm91dGVzIHRoZSBsb2dpYyBmb3IgYWxsIG5vcm1hbGl6YXRpb25zLCBob29rcywgYW5kIHN0YW5kYXJkIENTUyBwcm9wZXJ0aWVzLiAqL1xyXG5cdFx0XHRnZXRQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgcm9vdFByb3BlcnR5VmFsdWUsIGZvcmNlU3R5bGVMb29rdXApIHtcclxuXHRcdFx0XHQvKiBHZXQgYW4gZWxlbWVudCdzIGNvbXB1dGVkIHByb3BlcnR5IHZhbHVlLiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IFJldHJpZXZpbmcgdGhlIHZhbHVlIG9mIGEgQ1NTIHByb3BlcnR5IGNhbm5vdCBzaW1wbHkgYmUgcGVyZm9ybWVkIGJ5IGNoZWNraW5nIGFuIGVsZW1lbnQnc1xyXG5cdFx0XHRcdCBzdHlsZSBhdHRyaWJ1dGUgKHdoaWNoIG9ubHkgcmVmbGVjdHMgdXNlci1kZWZpbmVkIHZhbHVlcykuIEluc3RlYWQsIHRoZSBicm93c2VyIG11c3QgYmUgcXVlcmllZCBmb3IgYSBwcm9wZXJ0eSdzXHJcblx0XHRcdFx0ICpjb21wdXRlZCogdmFsdWUuIFlvdSBjYW4gcmVhZCBtb3JlIGFib3V0IGdldENvbXB1dGVkU3R5bGUgaGVyZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvQVBJL3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlICovXHJcblx0XHRcdFx0ZnVuY3Rpb24gY29tcHV0ZVByb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHkpIHtcclxuXHRcdFx0XHRcdC8qIFdoZW4gYm94LXNpemluZyBpc24ndCBzZXQgdG8gYm9yZGVyLWJveCwgaGVpZ2h0IGFuZCB3aWR0aCBzdHlsZSB2YWx1ZXMgYXJlIGluY29ycmVjdGx5IGNvbXB1dGVkIHdoZW4gYW5cclxuXHRcdFx0XHRcdCBlbGVtZW50J3Mgc2Nyb2xsYmFycyBhcmUgdmlzaWJsZSAod2hpY2ggZXhwYW5kcyB0aGUgZWxlbWVudCdzIGRpbWVuc2lvbnMpLiBUaHVzLCB3ZSBkZWZlciB0byB0aGUgbW9yZSBhY2N1cmF0ZVxyXG5cdFx0XHRcdFx0IG9mZnNldEhlaWdodC9XaWR0aCBwcm9wZXJ0eSwgd2hpY2ggaW5jbHVkZXMgdGhlIHRvdGFsIGRpbWVuc2lvbnMgZm9yIGludGVyaW9yLCBib3JkZXIsIHBhZGRpbmcsIGFuZCBzY3JvbGxiYXIuXHJcblx0XHRcdFx0XHQgV2Ugc3VidHJhY3QgYm9yZGVyIGFuZCBwYWRkaW5nIHRvIGdldCB0aGUgc3VtIG9mIGludGVyaW9yICsgc2Nyb2xsYmFyLiAqL1xyXG5cdFx0XHRcdFx0dmFyIGNvbXB1dGVkVmFsdWUgPSAwO1xyXG5cclxuXHRcdFx0XHRcdC8qIElFPD04IGRvZXNuJ3Qgc3VwcG9ydCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSwgdGh1cyB3ZSBkZWZlciB0byBqUXVlcnksIHdoaWNoIGhhcyBhbiBleHRlbnNpdmUgYXJyYXlcclxuXHRcdFx0XHRcdCBvZiBoYWNrcyB0byBhY2N1cmF0ZWx5IHJldHJpZXZlIElFOCBwcm9wZXJ0eSB2YWx1ZXMuIFJlLWltcGxlbWVudGluZyB0aGF0IGxvZ2ljIGhlcmUgaXMgbm90IHdvcnRoIGJsb2F0aW5nIHRoZVxyXG5cdFx0XHRcdFx0IGNvZGViYXNlIGZvciBhIGR5aW5nIGJyb3dzZXIuIFRoZSBwZXJmb3JtYW5jZSByZXBlcmN1c3Npb25zIG9mIHVzaW5nIGpRdWVyeSBoZXJlIGFyZSBtaW5pbWFsIHNpbmNlXHJcblx0XHRcdFx0XHQgVmVsb2NpdHkgaXMgb3B0aW1pemVkIHRvIHJhcmVseSAoYW5kIHNvbWV0aW1lcyBuZXZlcikgcXVlcnkgdGhlIERPTS4gRnVydGhlciwgdGhlICQuY3NzKCkgY29kZXBhdGggaXNuJ3QgdGhhdCBzbG93LiAqL1xyXG5cdFx0XHRcdFx0aWYgKElFIDw9IDgpIHtcclxuXHRcdFx0XHRcdFx0Y29tcHV0ZWRWYWx1ZSA9ICQuY3NzKGVsZW1lbnQsIHByb3BlcnR5KTsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdC8qIEFsbCBvdGhlciBicm93c2VycyBzdXBwb3J0IGdldENvbXB1dGVkU3R5bGUuIFRoZSByZXR1cm5lZCBsaXZlIG9iamVjdCByZWZlcmVuY2UgaXMgY2FjaGVkIG9udG8gaXRzXHJcblx0XHRcdFx0XHRcdCBhc3NvY2lhdGVkIGVsZW1lbnQgc28gdGhhdCBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlZmV0Y2hlZCB1cG9uIGV2ZXJ5IEdFVC4gKi9cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdC8qIEJyb3dzZXJzIGRvIG5vdCByZXR1cm4gaGVpZ2h0IGFuZCB3aWR0aCB2YWx1ZXMgZm9yIGVsZW1lbnRzIHRoYXQgYXJlIHNldCB0byBkaXNwbGF5Olwibm9uZVwiLiBUaHVzLCB3ZSB0ZW1wb3JhcmlseVxyXG5cdFx0XHRcdFx0XHQgdG9nZ2xlIGRpc3BsYXkgdG8gdGhlIGVsZW1lbnQgdHlwZSdzIGRlZmF1bHQgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdHZhciB0b2dnbGVEaXNwbGF5ID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoL14od2lkdGh8aGVpZ2h0KSQvLnRlc3QocHJvcGVydHkpICYmIENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiZGlzcGxheVwiKSA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdHRvZ2dsZURpc3BsYXkgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdENTUy5zZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiZGlzcGxheVwiLCBDU1MuVmFsdWVzLmdldERpc3BsYXlUeXBlKGVsZW1lbnQpKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dmFyIHJldmVydERpc3BsYXkgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAodG9nZ2xlRGlzcGxheSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Q1NTLnNldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIWZvcmNlU3R5bGVMb29rdXApIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPT09IFwiaGVpZ2h0XCIgJiYgQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJib3hTaXppbmdcIikudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpICE9PSBcImJvcmRlci1ib3hcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGNvbnRlbnRCb3hIZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodCAtIChwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiYm9yZGVyVG9wV2lkdGhcIikpIHx8IDApIC0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJib3JkZXJCb3R0b21XaWR0aFwiKSkgfHwgMCkgLSAocGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcInBhZGRpbmdUb3BcIikpIHx8IDApIC0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJwYWRkaW5nQm90dG9tXCIpKSB8fCAwKTtcclxuXHRcdFx0XHRcdFx0XHRcdHJldmVydERpc3BsYXkoKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gY29udGVudEJveEhlaWdodDtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5ID09PSBcIndpZHRoXCIgJiYgQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJib3hTaXppbmdcIikudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpICE9PSBcImJvcmRlci1ib3hcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGNvbnRlbnRCb3hXaWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGggLSAocGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImJvcmRlckxlZnRXaWR0aFwiKSkgfHwgMCkgLSAocGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImJvcmRlclJpZ2h0V2lkdGhcIikpIHx8IDApIC0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJwYWRkaW5nTGVmdFwiKSkgfHwgMCkgLSAocGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcInBhZGRpbmdSaWdodFwiKSkgfHwgMCk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXZlcnREaXNwbGF5KCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRlbnRCb3hXaWR0aDtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHZhciBjb21wdXRlZFN0eWxlO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogRm9yIGVsZW1lbnRzIHRoYXQgVmVsb2NpdHkgaGFzbid0IGJlZW4gY2FsbGVkIG9uIGRpcmVjdGx5IChlLmcuIHdoZW4gVmVsb2NpdHkgcXVlcmllcyB0aGUgRE9NIG9uIGJlaGFsZlxyXG5cdFx0XHRcdFx0XHQgb2YgYSBwYXJlbnQgb2YgYW4gZWxlbWVudCBpdHMgYW5pbWF0aW5nKSwgcGVyZm9ybSBhIGRpcmVjdCBnZXRDb21wdXRlZFN0eWxlIGxvb2t1cCBzaW5jZSB0aGUgb2JqZWN0IGlzbid0IGNhY2hlZC4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKERhdGEoZWxlbWVudCkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIGNvbXB1dGVkU3R5bGUgb2JqZWN0IGhhcyB5ZXQgdG8gYmUgY2FjaGVkLCBkbyBzbyBub3cuICovXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIURhdGEoZWxlbWVudCkuY29tcHV0ZWRTdHlsZSkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbXB1dGVkU3R5bGUgPSBEYXRhKGVsZW1lbnQpLmNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0LyogSWYgY29tcHV0ZWRTdHlsZSBpcyBjYWNoZWQsIHVzZSBpdC4gKi9cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRjb21wdXRlZFN0eWxlID0gRGF0YShlbGVtZW50KS5jb21wdXRlZFN0eWxlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJRSBhbmQgRmlyZWZveCBkbyBub3QgcmV0dXJuIGEgdmFsdWUgZm9yIHRoZSBnZW5lcmljIGJvcmRlckNvbG9yIC0tIHRoZXkgb25seSByZXR1cm4gaW5kaXZpZHVhbCB2YWx1ZXMgZm9yIGVhY2ggYm9yZGVyIHNpZGUncyBjb2xvci5cclxuXHRcdFx0XHRcdFx0IEFsc28sIGluIGFsbCBicm93c2Vycywgd2hlbiBib3JkZXIgY29sb3JzIGFyZW4ndCBhbGwgdGhlIHNhbWUsIGEgY29tcG91bmQgdmFsdWUgaXMgcmV0dXJuZWQgdGhhdCBWZWxvY2l0eSBpc24ndCBzZXR1cCB0byBwYXJzZS5cclxuXHRcdFx0XHRcdFx0IFNvLCBhcyBhIHBvbHlmaWxsIGZvciBxdWVyeWluZyBpbmRpdmlkdWFsIGJvcmRlciBzaWRlIGNvbG9ycywgd2UganVzdCByZXR1cm4gdGhlIHRvcCBib3JkZXIncyBjb2xvciBhbmQgYW5pbWF0ZSBhbGwgYm9yZGVycyBmcm9tIHRoYXQgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eSA9PT0gXCJib3JkZXJDb2xvclwiKSB7XHJcblx0XHRcdFx0XHRcdFx0cHJvcGVydHkgPSBcImJvcmRlclRvcENvbG9yXCI7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIElFOSBoYXMgYSBidWcgaW4gd2hpY2ggdGhlIFwiZmlsdGVyXCIgcHJvcGVydHkgbXVzdCBiZSBhY2Nlc3NlZCBmcm9tIGNvbXB1dGVkU3R5bGUgdXNpbmcgdGhlIGdldFByb3BlcnR5VmFsdWUgbWV0aG9kXHJcblx0XHRcdFx0XHRcdCBpbnN0ZWFkIG9mIGEgZGlyZWN0IHByb3BlcnR5IGxvb2t1cC4gVGhlIGdldFByb3BlcnR5VmFsdWUgbWV0aG9kIGlzIHNsb3dlciB0aGFuIGEgZGlyZWN0IGxvb2t1cCwgd2hpY2ggaXMgd2h5IHdlIGF2b2lkIGl0IGJ5IGRlZmF1bHQuICovXHJcblx0XHRcdFx0XHRcdGlmIChJRSA9PT0gOSAmJiBwcm9wZXJ0eSA9PT0gXCJmaWx0ZXJcIikge1xyXG5cdFx0XHRcdFx0XHRcdGNvbXB1dGVkVmFsdWUgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpOyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRjb21wdXRlZFZhbHVlID0gY29tcHV0ZWRTdHlsZVtwcm9wZXJ0eV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIEZhbGwgYmFjayB0byB0aGUgcHJvcGVydHkncyBzdHlsZSB2YWx1ZSAoaWYgZGVmaW5lZCkgd2hlbiBjb21wdXRlZFZhbHVlIHJldHVybnMgbm90aGluZyxcclxuXHRcdFx0XHRcdFx0IHdoaWNoIGNhbiBoYXBwZW4gd2hlbiB0aGUgZWxlbWVudCBoYXNuJ3QgYmVlbiBwYWludGVkLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoY29tcHV0ZWRWYWx1ZSA9PT0gXCJcIiB8fCBjb21wdXRlZFZhbHVlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tcHV0ZWRWYWx1ZSA9IGVsZW1lbnQuc3R5bGVbcHJvcGVydHldO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRyZXZlcnREaXNwbGF5KCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogRm9yIHRvcCwgcmlnaHQsIGJvdHRvbSwgYW5kIGxlZnQgKFRSQkwpIHZhbHVlcyB0aGF0IGFyZSBzZXQgdG8gXCJhdXRvXCIgb24gZWxlbWVudHMgb2YgXCJmaXhlZFwiIG9yIFwiYWJzb2x1dGVcIiBwb3NpdGlvbixcclxuXHRcdFx0XHRcdCBkZWZlciB0byBqUXVlcnkgZm9yIGNvbnZlcnRpbmcgXCJhdXRvXCIgdG8gYSBudW1lcmljIHZhbHVlLiAoRm9yIGVsZW1lbnRzIHdpdGggYSBcInN0YXRpY1wiIG9yIFwicmVsYXRpdmVcIiBwb3NpdGlvbiwgXCJhdXRvXCIgaGFzIHRoZSBzYW1lXHJcblx0XHRcdFx0XHQgZWZmZWN0IGFzIGJlaW5nIHNldCB0byAwLCBzbyBubyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeS4pICovXHJcblx0XHRcdFx0XHQvKiBBbiBleGFtcGxlIG9mIHdoeSBudW1lcmljIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5OiBXaGVuIGFuIGVsZW1lbnQgd2l0aCBcInBvc2l0aW9uOmFic29sdXRlXCIgaGFzIGFuIHVudG91Y2hlZCBcImxlZnRcIlxyXG5cdFx0XHRcdFx0IHByb3BlcnR5LCB3aGljaCByZXZlcnRzIHRvIFwiYXV0b1wiLCBsZWZ0J3MgdmFsdWUgaXMgMCByZWxhdGl2ZSB0byBpdHMgcGFyZW50IGVsZW1lbnQsIGJ1dCBpcyBvZnRlbiBub24temVybyByZWxhdGl2ZVxyXG5cdFx0XHRcdFx0IHRvIGl0cyAqY29udGFpbmluZyogKG5vdCBwYXJlbnQpIGVsZW1lbnQsIHdoaWNoIGlzIHRoZSBuZWFyZXN0IFwicG9zaXRpb246cmVsYXRpdmVcIiBhbmNlc3RvciBvciB0aGUgdmlld3BvcnQgKGFuZCBhbHdheXMgdGhlIHZpZXdwb3J0IGluIHRoZSBjYXNlIG9mIFwicG9zaXRpb246Zml4ZWRcIikuICovXHJcblx0XHRcdFx0XHRpZiAoY29tcHV0ZWRWYWx1ZSA9PT0gXCJhdXRvXCIgJiYgL14odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KSQvaS50ZXN0KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHR2YXIgcG9zaXRpb24gPSBjb21wdXRlUHJvcGVydHlWYWx1ZShlbGVtZW50LCBcInBvc2l0aW9uXCIpOyAvKiBHRVQgKi9cclxuXHJcblx0XHRcdFx0XHRcdC8qIEZvciBhYnNvbHV0ZSBwb3NpdGlvbmluZywgalF1ZXJ5J3MgJC5wb3NpdGlvbigpIG9ubHkgcmV0dXJucyB2YWx1ZXMgZm9yIHRvcCBhbmQgbGVmdDtcclxuXHRcdFx0XHRcdFx0IHJpZ2h0IGFuZCBib3R0b20gd2lsbCBoYXZlIHRoZWlyIFwiYXV0b1wiIHZhbHVlIHJldmVydGVkIHRvIDAuICovXHJcblx0XHRcdFx0XHRcdC8qIE5vdGU6IEEgalF1ZXJ5IG9iamVjdCBtdXN0IGJlIGNyZWF0ZWQgaGVyZSBzaW5jZSBqUXVlcnkgZG9lc24ndCBoYXZlIGEgbG93LWxldmVsIGFsaWFzIGZvciAkLnBvc2l0aW9uKCkuXHJcblx0XHRcdFx0XHRcdCBOb3QgYSBiaWcgZGVhbCBzaW5jZSB3ZSdyZSBjdXJyZW50bHkgaW4gYSBHRVQgYmF0Y2ggYW55d2F5LiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAocG9zaXRpb24gPT09IFwiZml4ZWRcIiB8fCAocG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiAmJiAvdG9wfGxlZnQvaS50ZXN0KHByb3BlcnR5KSkpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBqUXVlcnkgc3RyaXBzIHRoZSBwaXhlbCB1bml0IGZyb20gaXRzIHJldHVybmVkIHZhbHVlczsgd2UgcmUtYWRkIGl0IGhlcmUgdG8gY29uZm9ybSB3aXRoIGNvbXB1dGVQcm9wZXJ0eVZhbHVlJ3MgYmVoYXZpb3IuICovXHJcblx0XHRcdFx0XHRcdFx0Y29tcHV0ZWRWYWx1ZSA9ICQoZWxlbWVudCkucG9zaXRpb24oKVtwcm9wZXJ0eV0gKyBcInB4XCI7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIGNvbXB1dGVkVmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR2YXIgcHJvcGVydHlWYWx1ZTtcclxuXHJcblx0XHRcdFx0LyogSWYgdGhpcyBpcyBhIGhvb2tlZCBwcm9wZXJ0eSAoZS5nLiBcImNsaXBMZWZ0XCIgaW5zdGVhZCBvZiB0aGUgcm9vdCBwcm9wZXJ0eSBvZiBcImNsaXBcIiksXHJcblx0XHRcdFx0IGV4dHJhY3QgdGhlIGhvb2sncyB2YWx1ZSBmcm9tIGEgbm9ybWFsaXplZCByb290UHJvcGVydHlWYWx1ZSB1c2luZyBDU1MuSG9va3MuZXh0cmFjdFZhbHVlKCkuICovXHJcblx0XHRcdFx0aWYgKENTUy5Ib29rcy5yZWdpc3RlcmVkW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0dmFyIGhvb2sgPSBwcm9wZXJ0eSxcclxuXHRcdFx0XHRcdFx0XHRob29rUm9vdCA9IENTUy5Ib29rcy5nZXRSb290KGhvb2spO1xyXG5cclxuXHRcdFx0XHRcdC8qIElmIGEgY2FjaGVkIHJvb3RQcm9wZXJ0eVZhbHVlIHdhc24ndCBwYXNzZWQgaW4gKHdoaWNoIFZlbG9jaXR5IGFsd2F5cyBhdHRlbXB0cyB0byBkbyBpbiBvcmRlciB0byBhdm9pZCByZXF1ZXJ5aW5nIHRoZSBET00pLFxyXG5cdFx0XHRcdFx0IHF1ZXJ5IHRoZSBET00gZm9yIHRoZSByb290IHByb3BlcnR5J3MgdmFsdWUuICovXHJcblx0XHRcdFx0XHRpZiAocm9vdFByb3BlcnR5VmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHQvKiBTaW5jZSB0aGUgYnJvd3NlciBpcyBub3cgYmVpbmcgZGlyZWN0bHkgcXVlcmllZCwgdXNlIHRoZSBvZmZpY2lhbCBwb3N0LXByZWZpeGluZyBwcm9wZXJ0eSBuYW1lIGZvciB0aGlzIGxvb2t1cC4gKi9cclxuXHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWUgPSBDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBDU1MuTmFtZXMucHJlZml4Q2hlY2soaG9va1Jvb3QpWzBdKTsgLyogR0VUICovXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgdGhpcyByb290IGhhcyBhIG5vcm1hbGl6YXRpb24gcmVnaXN0ZXJlZCwgcGVmb3JtIHRoZSBhc3NvY2lhdGVkIG5vcm1hbGl6YXRpb24gZXh0cmFjdGlvbi4gKi9cclxuXHRcdFx0XHRcdGlmIChDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFtob29rUm9vdF0pIHtcclxuXHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWUgPSBDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFtob29rUm9vdF0oXCJleHRyYWN0XCIsIGVsZW1lbnQsIHJvb3RQcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBFeHRyYWN0IHRoZSBob29rJ3MgdmFsdWUuICovXHJcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gQ1NTLkhvb2tzLmV4dHJhY3RWYWx1ZShob29rLCByb290UHJvcGVydHlWYWx1ZSk7XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgdGhpcyBpcyBhIG5vcm1hbGl6ZWQgcHJvcGVydHkgKGUuZy4gXCJvcGFjaXR5XCIgYmVjb21lcyBcImZpbHRlclwiIGluIDw9SUU4KSBvciBcInRyYW5zbGF0ZVhcIiBiZWNvbWVzIFwidHJhbnNmb3JtXCIpLFxyXG5cdFx0XHRcdFx0IG5vcm1hbGl6ZSB0aGUgcHJvcGVydHkncyBuYW1lIGFuZCB2YWx1ZSwgYW5kIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIHRyYW5zZm9ybXMuICovXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBOb3JtYWxpemluZyBhIHByb3BlcnR5IGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSBmcm9tIGhvb2tpbmcgYSBwcm9wZXJ0eSBzaW5jZSBob29rLWV4dHJhY3RlZCB2YWx1ZXMgYXJlIHN0cmljdGx5XHJcblx0XHRcdFx0XHQgbnVtZXJpY2FsIGFuZCB0aGVyZWZvcmUgZG8gbm90IHJlcXVpcmUgbm9ybWFsaXphdGlvbiBleHRyYWN0aW9uLiAqL1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHR2YXIgbm9ybWFsaXplZFByb3BlcnR5TmFtZSxcclxuXHRcdFx0XHRcdFx0XHRub3JtYWxpemVkUHJvcGVydHlWYWx1ZTtcclxuXHJcblx0XHRcdFx0XHRub3JtYWxpemVkUHJvcGVydHlOYW1lID0gQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbcHJvcGVydHldKFwibmFtZVwiLCBlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0XHQvKiBUcmFuc2Zvcm0gdmFsdWVzIGFyZSBjYWxjdWxhdGVkIHZpYSBub3JtYWxpemF0aW9uIGV4dHJhY3Rpb24gKHNlZSBiZWxvdyksIHdoaWNoIGNoZWNrcyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgdHJhbnNmb3JtQ2FjaGUuXHJcblx0XHRcdFx0XHQgQXQgbm8gcG9pbnQgZG8gdHJhbnNmb3JtIEdFVHMgZXZlciBhY3R1YWxseSBxdWVyeSB0aGUgRE9NOyBpbml0aWFsIHN0eWxlc2hlZXQgdmFsdWVzIGFyZSBuZXZlciBwcm9jZXNzZWQuXHJcblx0XHRcdFx0XHQgVGhpcyBpcyBiZWNhdXNlIHBhcnNpbmcgM0QgdHJhbnNmb3JtIG1hdHJpY2VzIGlzIG5vdCBhbHdheXMgYWNjdXJhdGUgYW5kIHdvdWxkIGJsb2F0IG91ciBjb2RlYmFzZTtcclxuXHRcdFx0XHRcdCB0aHVzLCBub3JtYWxpemF0aW9uIGV4dHJhY3Rpb24gZGVmYXVsdHMgaW5pdGlhbCB0cmFuc2Zvcm0gdmFsdWVzIHRvIHRoZWlyIHplcm8tdmFsdWVzIChlLmcuIDEgZm9yIHNjYWxlWCBhbmQgMCBmb3IgdHJhbnNsYXRlWCkuICovXHJcblx0XHRcdFx0XHRpZiAobm9ybWFsaXplZFByb3BlcnR5TmFtZSAhPT0gXCJ0cmFuc2Zvcm1cIikge1xyXG5cdFx0XHRcdFx0XHRub3JtYWxpemVkUHJvcGVydHlWYWx1ZSA9IGNvbXB1dGVQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIENTUy5OYW1lcy5wcmVmaXhDaGVjayhub3JtYWxpemVkUHJvcGVydHlOYW1lKVswXSk7IC8qIEdFVCAqL1xyXG5cclxuXHRcdFx0XHRcdFx0LyogSWYgdGhlIHZhbHVlIGlzIGEgQ1NTIG51bGwtdmFsdWUgYW5kIHRoaXMgcHJvcGVydHkgaGFzIGEgaG9vayB0ZW1wbGF0ZSwgdXNlIHRoYXQgemVyby12YWx1ZSB0ZW1wbGF0ZSBzbyB0aGF0IGhvb2tzIGNhbiBiZSBleHRyYWN0ZWQgZnJvbSBpdC4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKENTUy5WYWx1ZXMuaXNDU1NOdWxsVmFsdWUobm9ybWFsaXplZFByb3BlcnR5VmFsdWUpICYmIENTUy5Ib29rcy50ZW1wbGF0ZXNbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHRcdFx0bm9ybWFsaXplZFByb3BlcnR5VmFsdWUgPSBDU1MuSG9va3MudGVtcGxhdGVzW3Byb3BlcnR5XVsxXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFtwcm9wZXJ0eV0oXCJleHRyYWN0XCIsIGVsZW1lbnQsIG5vcm1hbGl6ZWRQcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIElmIGEgKG51bWVyaWMpIHZhbHVlIHdhc24ndCBwcm9kdWNlZCB2aWEgaG9vayBleHRyYWN0aW9uIG9yIG5vcm1hbGl6YXRpb24sIHF1ZXJ5IHRoZSBET00uICovXHJcblx0XHRcdFx0aWYgKCEvXltcXGQtXS8udGVzdChwcm9wZXJ0eVZhbHVlKSkge1xyXG5cdFx0XHRcdFx0LyogRm9yIFNWRyBlbGVtZW50cywgZGltZW5zaW9uYWwgcHJvcGVydGllcyAod2hpY2ggU1ZHQXR0cmlidXRlKCkgZGV0ZWN0cykgYXJlIHR3ZWVuZWQgdmlhXHJcblx0XHRcdFx0XHQgdGhlaXIgSFRNTCBhdHRyaWJ1dGUgdmFsdWVzIGluc3RlYWQgb2YgdGhlaXIgQ1NTIHN0eWxlIHZhbHVlcy4gKi9cclxuXHRcdFx0XHRcdHZhciBkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLmlzU1ZHICYmIENTUy5OYW1lcy5TVkdBdHRyaWJ1dGUocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdC8qIFNpbmNlIHRoZSBoZWlnaHQvd2lkdGggYXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIHNldCBtYW51YWxseSwgdGhleSBkb24ndCByZWZsZWN0IGNvbXB1dGVkIHZhbHVlcy5cclxuXHRcdFx0XHRcdFx0IFRodXMsIHdlIHVzZSB1c2UgZ2V0QkJveCgpIHRvIGVuc3VyZSB3ZSBhbHdheXMgZ2V0IHZhbHVlcyBmb3IgZWxlbWVudHMgd2l0aCB1bmRlZmluZWQgaGVpZ2h0L3dpZHRoIGF0dHJpYnV0ZXMuICovXHJcblx0XHRcdFx0XHRcdGlmICgvXihoZWlnaHR8d2lkdGgpJC9pLnRlc3QocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogRmlyZWZveCB0aHJvd3MgYW4gZXJyb3IgaWYgLmdldEJCb3goKSBpcyBjYWxsZWQgb24gYW4gU1ZHIHRoYXQgaXNuJ3QgYXR0YWNoZWQgdG8gdGhlIERPTS4gKi9cclxuXHRcdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IGVsZW1lbnQuZ2V0QkJveCgpW3Byb3BlcnR5XTtcclxuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IDA7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdC8qIE90aGVyd2lzZSwgYWNjZXNzIHRoZSBhdHRyaWJ1dGUgdmFsdWUgZGlyZWN0bHkuICovXHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKHByb3BlcnR5KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IGNvbXB1dGVQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIENTUy5OYW1lcy5wcmVmaXhDaGVjayhwcm9wZXJ0eSlbMF0pOyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIFNpbmNlIHByb3BlcnR5IGxvb2t1cHMgYXJlIGZvciBhbmltYXRpb24gcHVycG9zZXMgKHdoaWNoIGVudGFpbHMgY29tcHV0aW5nIHRoZSBudW1lcmljIGRlbHRhIGJldHdlZW4gc3RhcnQgYW5kIGVuZCB2YWx1ZXMpLFxyXG5cdFx0XHRcdCBjb252ZXJ0IENTUyBudWxsLXZhbHVlcyB0byBhbiBpbnRlZ2VyIG9mIHZhbHVlIDAuICovXHJcblx0XHRcdFx0aWYgKENTUy5WYWx1ZXMuaXNDU1NOdWxsVmFsdWUocHJvcGVydHlWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSAwO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKFZlbG9jaXR5LmRlYnVnID49IDIpIHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKFwiR2V0IFwiICsgcHJvcGVydHkgKyBcIjogXCIgKyBwcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKiBUaGUgc2luZ3VsYXIgc2V0UHJvcGVydHlWYWx1ZSwgd2hpY2ggcm91dGVzIHRoZSBsb2dpYyBmb3IgYWxsIG5vcm1hbGl6YXRpb25zLCBob29rcywgYW5kIHN0YW5kYXJkIENTUyBwcm9wZXJ0aWVzLiAqL1xyXG5cdFx0XHRzZXRQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgcHJvcGVydHlWYWx1ZSwgcm9vdFByb3BlcnR5VmFsdWUsIHNjcm9sbERhdGEpIHtcclxuXHRcdFx0XHR2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHk7XHJcblxyXG5cdFx0XHRcdC8qIEluIG9yZGVyIHRvIGJlIHN1YmplY3RlZCB0byBjYWxsIG9wdGlvbnMgYW5kIGVsZW1lbnQgcXVldWVpbmcsIHNjcm9sbCBhbmltYXRpb24gaXMgcm91dGVkIHRocm91Z2ggVmVsb2NpdHkgYXMgaWYgaXQgd2VyZSBhIHN0YW5kYXJkIENTUyBwcm9wZXJ0eS4gKi9cclxuXHRcdFx0XHRpZiAocHJvcGVydHkgPT09IFwic2Nyb2xsXCIpIHtcclxuXHRcdFx0XHRcdC8qIElmIGEgY29udGFpbmVyIG9wdGlvbiBpcyBwcmVzZW50LCBzY3JvbGwgdGhlIGNvbnRhaW5lciBpbnN0ZWFkIG9mIHRoZSBicm93c2VyIHdpbmRvdy4gKi9cclxuXHRcdFx0XHRcdGlmIChzY3JvbGxEYXRhLmNvbnRhaW5lcikge1xyXG5cdFx0XHRcdFx0XHRzY3JvbGxEYXRhLmNvbnRhaW5lcltcInNjcm9sbFwiICsgc2Nyb2xsRGF0YS5kaXJlY3Rpb25dID0gcHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0XHRcdFx0LyogT3RoZXJ3aXNlLCBWZWxvY2l0eSBkZWZhdWx0cyB0byBzY3JvbGxpbmcgdGhlIGJyb3dzZXIgd2luZG93LiAqL1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0aWYgKHNjcm9sbERhdGEuZGlyZWN0aW9uID09PSBcIkxlZnRcIikge1xyXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zY3JvbGxUbyhwcm9wZXJ0eVZhbHVlLCBzY3JvbGxEYXRhLmFsdGVybmF0ZVZhbHVlKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2Nyb2xsVG8oc2Nyb2xsRGF0YS5hbHRlcm5hdGVWYWx1ZSwgcHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0LyogVHJhbnNmb3JtcyAodHJhbnNsYXRlWCwgcm90YXRlWiwgZXRjLikgYXJlIGFwcGxpZWQgdG8gYSBwZXItZWxlbWVudCB0cmFuc2Zvcm1DYWNoZSBvYmplY3QsIHdoaWNoIGlzIG1hbnVhbGx5IGZsdXNoZWQgdmlhIGZsdXNoVHJhbnNmb3JtQ2FjaGUoKS5cclxuXHRcdFx0XHRcdCBUaHVzLCBmb3Igbm93LCB3ZSBtZXJlbHkgY2FjaGUgdHJhbnNmb3JtcyBiZWluZyBTRVQuICovXHJcblx0XHRcdFx0XHRpZiAoQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbcHJvcGVydHldICYmIENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XShcIm5hbWVcIiwgZWxlbWVudCkgPT09IFwidHJhbnNmb3JtXCIpIHtcclxuXHRcdFx0XHRcdFx0LyogUGVyZm9ybSBhIG5vcm1hbGl6YXRpb24gaW5qZWN0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHQvKiBOb3RlOiBUaGUgbm9ybWFsaXphdGlvbiBsb2dpYyBoYW5kbGVzIHRoZSB0cmFuc2Zvcm1DYWNoZSB1cGRhdGluZy4gKi9cclxuXHRcdFx0XHRcdFx0Q1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbcHJvcGVydHldKFwiaW5qZWN0XCIsIGVsZW1lbnQsIHByb3BlcnR5VmFsdWUpO1xyXG5cclxuXHRcdFx0XHRcdFx0cHJvcGVydHlOYW1lID0gXCJ0cmFuc2Zvcm1cIjtcclxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGVbcHJvcGVydHldO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0LyogSW5qZWN0IGhvb2tzLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoQ1NTLkhvb2tzLnJlZ2lzdGVyZWRbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGhvb2tOYW1lID0gcHJvcGVydHksXHJcblx0XHRcdFx0XHRcdFx0XHRcdGhvb2tSb290ID0gQ1NTLkhvb2tzLmdldFJvb3QocHJvcGVydHkpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiBhIGNhY2hlZCByb290UHJvcGVydHlWYWx1ZSB3YXMgbm90IHByb3ZpZGVkLCBxdWVyeSB0aGUgRE9NIGZvciB0aGUgaG9va1Jvb3QncyBjdXJyZW50IHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gcm9vdFByb3BlcnR5VmFsdWUgfHwgQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgaG9va1Jvb3QpOyAvKiBHRVQgKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IENTUy5Ib29rcy5pbmplY3RWYWx1ZShob29rTmFtZSwgcHJvcGVydHlWYWx1ZSwgcm9vdFByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5ID0gaG9va1Jvb3Q7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIE5vcm1hbGl6ZSBuYW1lcyBhbmQgdmFsdWVzLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XShcImluamVjdFwiLCBlbGVtZW50LCBwcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eSA9IENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XShcIm5hbWVcIiwgZWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIEFzc2lnbiB0aGUgYXBwcm9wcmlhdGUgdmVuZG9yIHByZWZpeCBiZWZvcmUgcGVyZm9ybWluZyBhbiBvZmZpY2lhbCBzdHlsZSB1cGRhdGUuICovXHJcblx0XHRcdFx0XHRcdHByb3BlcnR5TmFtZSA9IENTUy5OYW1lcy5wcmVmaXhDaGVjayhwcm9wZXJ0eSlbMF07XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBBIHRyeS9jYXRjaCBpcyB1c2VkIGZvciBJRTw9OCwgd2hpY2ggdGhyb3dzIGFuIGVycm9yIHdoZW4gXCJpbnZhbGlkXCIgQ1NTIHZhbHVlcyBhcmUgc2V0LCBlLmcuIGEgbmVnYXRpdmUgd2lkdGguXHJcblx0XHRcdFx0XHRcdCBUcnkvY2F0Y2ggaXMgYXZvaWRlZCBmb3Igb3RoZXIgYnJvd3NlcnMgc2luY2UgaXQgaW5jdXJzIGEgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuICovXHJcblx0XHRcdFx0XHRcdGlmIChJRSA8PSA4KSB7XHJcblx0XHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGVbcHJvcGVydHlOYW1lXSA9IHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1Zykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIkJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBbXCIgKyBwcm9wZXJ0eVZhbHVlICsgXCJdIGZvciBbXCIgKyBwcm9wZXJ0eU5hbWUgKyBcIl1cIik7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdC8qIFNWRyBlbGVtZW50cyBoYXZlIHRoZWlyIGRpbWVuc2lvbmFsIHByb3BlcnRpZXMgKHdpZHRoLCBoZWlnaHQsIHgsIHksIGN4LCBldGMuKSBhcHBsaWVkIGRpcmVjdGx5IGFzIGF0dHJpYnV0ZXMgaW5zdGVhZCBvZiBhcyBzdHlsZXMuICovXHJcblx0XHRcdFx0XHRcdFx0LyogTm90ZTogSUU4IGRvZXMgbm90IHN1cHBvcnQgU1ZHIGVsZW1lbnRzLCBzbyBpdCdzIG9rYXkgdGhhdCB3ZSBza2lwIGl0IGZvciBTVkcgYW5pbWF0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5pc1NWRyAmJiBDU1MuTmFtZXMuU1ZHQXR0cmlidXRlKHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogRm9yIFNWRyBhdHRyaWJ1dGVzLCB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgbmFtZXMgYXJlIG5ldmVyIHVzZWQuICovXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBOb3QgYWxsIENTUyBwcm9wZXJ0aWVzIGNhbiBiZSBhbmltYXRlZCB2aWEgYXR0cmlidXRlcywgYnV0IHRoZSBicm93c2VyIHdvbid0IHRocm93IGFuIGVycm9yIGZvciB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUocHJvcGVydHksIHByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKFZlbG9jaXR5LmRlYnVnID49IDIpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIlNldCBcIiArIHByb3BlcnR5ICsgXCIgKFwiICsgcHJvcGVydHlOYW1lICsgXCIpOiBcIiArIHByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBSZXR1cm4gdGhlIG5vcm1hbGl6ZWQgcHJvcGVydHkgbmFtZSBhbmQgdmFsdWUgaW4gY2FzZSB0aGUgY2FsbGVyIHdhbnRzIHRvIGtub3cgaG93IHRoZXNlIHZhbHVlcyB3ZXJlIG1vZGlmaWVkIGJlZm9yZSBiZWluZyBhcHBsaWVkIHRvIHRoZSBET00uICovXHJcblx0XHRcdFx0cmV0dXJuIFtwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWVdO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKiBUbyBpbmNyZWFzZSBwZXJmb3JtYW5jZSBieSBiYXRjaGluZyB0cmFuc2Zvcm0gdXBkYXRlcyBpbnRvIGEgc2luZ2xlIFNFVCwgdHJhbnNmb3JtcyBhcmUgbm90IGRpcmVjdGx5IGFwcGxpZWQgdG8gYW4gZWxlbWVudCB1bnRpbCBmbHVzaFRyYW5zZm9ybUNhY2hlKCkgaXMgY2FsbGVkLiAqL1xyXG5cdFx0XHQvKiBOb3RlOiBWZWxvY2l0eSBhcHBsaWVzIHRyYW5zZm9ybSBwcm9wZXJ0aWVzIGluIHRoZSBzYW1lIG9yZGVyIHRoYXQgdGhleSBhcmUgY2hyb25vZ2ljYWxseSBpbnRyb2R1Y2VkIHRvIHRoZSBlbGVtZW50J3MgQ1NTIHN0eWxlcy4gKi9cclxuXHRcdFx0Zmx1c2hUcmFuc2Zvcm1DYWNoZTogZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cdFx0XHRcdHZhciB0cmFuc2Zvcm1TdHJpbmcgPSBcIlwiLFxyXG5cdFx0XHRcdFx0XHRkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0LyogQ2VydGFpbiBicm93c2VycyByZXF1aXJlIHRoYXQgU1ZHIHRyYW5zZm9ybXMgYmUgYXBwbGllZCBhcyBhbiBhdHRyaWJ1dGUuIEhvd2V2ZXIsIHRoZSBTVkcgdHJhbnNmb3JtIGF0dHJpYnV0ZSB0YWtlcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgQ1NTJ3MgdHJhbnNmb3JtIHN0cmluZ1xyXG5cdFx0XHRcdCAodW5pdHMgYXJlIGRyb3BwZWQgYW5kLCBleGNlcHQgZm9yIHNrZXdYL1ksIHN1YnByb3BlcnRpZXMgYXJlIG1lcmdlZCBpbnRvIHRoZWlyIG1hc3RlciBwcm9wZXJ0eSAtLSBlLmcuIHNjYWxlWCBhbmQgc2NhbGVZIGFyZSBtZXJnZWQgaW50byBzY2FsZShYIFkpLiAqL1xyXG5cdFx0XHRcdGlmICgoSUUgfHwgKFZlbG9jaXR5LlN0YXRlLmlzQW5kcm9pZCAmJiAhVmVsb2NpdHkuU3RhdGUuaXNDaHJvbWUpKSAmJiBkYXRhICYmIGRhdGEuaXNTVkcpIHtcclxuXHRcdFx0XHRcdC8qIFNpbmNlIHRyYW5zZm9ybSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGVpciBwYXJlbnRoZXNlcy13cmFwcGVkIGZvcm0sIHdlIHVzZSBhIGhlbHBlciBmdW5jdGlvbiB0byBzdHJpcCBvdXQgdGhlaXIgbnVtZXJpYyB2YWx1ZXMuXHJcblx0XHRcdFx0XHQgRnVydGhlciwgU1ZHIHRyYW5zZm9ybSBwcm9wZXJ0aWVzIG9ubHkgdGFrZSB1bml0bGVzcyAocmVwcmVzZW50aW5nIHBpeGVscykgdmFsdWVzLCBzbyBpdCdzIG9rYXkgdGhhdCBwYXJzZUZsb2F0KCkgc3RyaXBzIHRoZSB1bml0IHN1ZmZpeGVkIHRvIHRoZSBmbG9hdCB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdHZhciBnZXRUcmFuc2Zvcm1GbG9hdCA9IGZ1bmN0aW9uKHRyYW5zZm9ybVByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHRyYW5zZm9ybVByb3BlcnR5KSk7XHJcblx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdC8qIENyZWF0ZSBhbiBvYmplY3QgdG8gb3JnYW5pemUgYWxsIHRoZSB0cmFuc2Zvcm1zIHRoYXQgd2UnbGwgYXBwbHkgdG8gdGhlIFNWRyBlbGVtZW50LiBUbyBrZWVwIHRoZSBsb2dpYyBzaW1wbGUsXHJcblx0XHRcdFx0XHQgd2UgcHJvY2VzcyAqYWxsKiB0cmFuc2Zvcm0gcHJvcGVydGllcyAtLSBldmVuIHRob3NlIHRoYXQgbWF5IG5vdCBiZSBleHBsaWNpdGx5IGFwcGxpZWQgKHNpbmNlIHRoZXkgZGVmYXVsdCB0byB0aGVpciB6ZXJvLXZhbHVlcyBhbnl3YXkpLiAqL1xyXG5cdFx0XHRcdFx0dmFyIFNWR1RyYW5zZm9ybXMgPSB7XHJcblx0XHRcdFx0XHRcdHRyYW5zbGF0ZTogW2dldFRyYW5zZm9ybUZsb2F0KFwidHJhbnNsYXRlWFwiKSwgZ2V0VHJhbnNmb3JtRmxvYXQoXCJ0cmFuc2xhdGVZXCIpXSxcclxuXHRcdFx0XHRcdFx0c2tld1g6IFtnZXRUcmFuc2Zvcm1GbG9hdChcInNrZXdYXCIpXSwgc2tld1k6IFtnZXRUcmFuc2Zvcm1GbG9hdChcInNrZXdZXCIpXSxcclxuXHRcdFx0XHRcdFx0LyogSWYgdGhlIHNjYWxlIHByb3BlcnR5IGlzIHNldCAobm9uLTEpLCB1c2UgdGhhdCB2YWx1ZSBmb3IgdGhlIHNjYWxlWCBhbmQgc2NhbGVZIHZhbHVlc1xyXG5cdFx0XHRcdFx0XHQgKHRoaXMgYmVoYXZpb3IgbWltaWNzIHRoZSByZXN1bHQgb2YgYW5pbWF0aW5nIGFsbCB0aGVzZSBwcm9wZXJ0aWVzIGF0IG9uY2Ugb24gSFRNTCBlbGVtZW50cykuICovXHJcblx0XHRcdFx0XHRcdHNjYWxlOiBnZXRUcmFuc2Zvcm1GbG9hdChcInNjYWxlXCIpICE9PSAxID8gW2dldFRyYW5zZm9ybUZsb2F0KFwic2NhbGVcIiksIGdldFRyYW5zZm9ybUZsb2F0KFwic2NhbGVcIildIDogW2dldFRyYW5zZm9ybUZsb2F0KFwic2NhbGVYXCIpLCBnZXRUcmFuc2Zvcm1GbG9hdChcInNjYWxlWVwiKV0sXHJcblx0XHRcdFx0XHRcdC8qIE5vdGU6IFNWRydzIHJvdGF0ZSB0cmFuc2Zvcm0gdGFrZXMgdGhyZWUgdmFsdWVzOiByb3RhdGlvbiBkZWdyZWVzIGZvbGxvd2VkIGJ5IHRoZSBYIGFuZCBZIHZhbHVlc1xyXG5cdFx0XHRcdFx0XHQgZGVmaW5pbmcgdGhlIHJvdGF0aW9uJ3Mgb3JpZ2luIHBvaW50LiBXZSBpZ25vcmUgdGhlIG9yaWdpbiB2YWx1ZXMgKGRlZmF1bHQgdGhlbSB0byAwKS4gKi9cclxuXHRcdFx0XHRcdFx0cm90YXRlOiBbZ2V0VHJhbnNmb3JtRmxvYXQoXCJyb3RhdGVaXCIpLCAwLCAwXVxyXG5cdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggdGhlIHRyYW5zZm9ybSBwcm9wZXJ0aWVzIGluIHRoZSB1c2VyLWRlZmluZWQgcHJvcGVydHkgbWFwIG9yZGVyLlxyXG5cdFx0XHRcdFx0IChUaGlzIG1pbWljcyB0aGUgYmVoYXZpb3Igb2Ygbm9uLVNWRyB0cmFuc2Zvcm0gYW5pbWF0aW9uLikgKi9cclxuXHRcdFx0XHRcdCQuZWFjaChEYXRhKGVsZW1lbnQpLnRyYW5zZm9ybUNhY2hlLCBmdW5jdGlvbih0cmFuc2Zvcm1OYW1lKSB7XHJcblx0XHRcdFx0XHRcdC8qIEV4Y2VwdCBmb3Igd2l0aCBza2V3WC9ZLCByZXZlcnQgdGhlIGF4aXMtc3BlY2lmaWMgdHJhbnNmb3JtIHN1YnByb3BlcnRpZXMgdG8gdGhlaXIgYXhpcy1mcmVlIG1hc3RlclxyXG5cdFx0XHRcdFx0XHQgcHJvcGVydGllcyBzbyB0aGF0IHRoZXkgbWF0Y2ggdXAgd2l0aCBTVkcncyBhY2NlcHRlZCB0cmFuc2Zvcm0gcHJvcGVydGllcy4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKC9edHJhbnNsYXRlL2kudGVzdCh0cmFuc2Zvcm1OYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRcdHRyYW5zZm9ybU5hbWUgPSBcInRyYW5zbGF0ZVwiO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKC9ec2NhbGUvaS50ZXN0KHRyYW5zZm9ybU5hbWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0dHJhbnNmb3JtTmFtZSA9IFwic2NhbGVcIjtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICgvXnJvdGF0ZS9pLnRlc3QodHJhbnNmb3JtTmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1OYW1lID0gXCJyb3RhdGVcIjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogQ2hlY2sgdGhhdCB3ZSBoYXZlbid0IHlldCBkZWxldGVkIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZSBTVkdUcmFuc2Zvcm1zIGNvbnRhaW5lci4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKFNWR1RyYW5zZm9ybXNbdHJhbnNmb3JtTmFtZV0pIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBBcHBlbmQgdGhlIHRyYW5zZm9ybSBwcm9wZXJ0eSBpbiB0aGUgU1ZHLXN1cHBvcnRlZCB0cmFuc2Zvcm0gZm9ybWF0LiBBcyBwZXIgdGhlIHNwZWMsIHN1cnJvdW5kIHRoZSBzcGFjZS1kZWxpbWl0ZWQgdmFsdWVzIGluIHBhcmVudGhlc2VzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHRyYW5zZm9ybVN0cmluZyArPSB0cmFuc2Zvcm1OYW1lICsgXCIoXCIgKyBTVkdUcmFuc2Zvcm1zW3RyYW5zZm9ybU5hbWVdLmpvaW4oXCIgXCIpICsgXCIpXCIgKyBcIiBcIjtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogQWZ0ZXIgcHJvY2Vzc2luZyBhbiBTVkcgdHJhbnNmb3JtIHByb3BlcnR5LCBkZWxldGUgaXQgZnJvbSB0aGUgU1ZHVHJhbnNmb3JtcyBjb250YWluZXIgc28gd2UgZG9uJ3RcclxuXHRcdFx0XHRcdFx0XHQgcmUtaW5zZXJ0IHRoZSBzYW1lIG1hc3RlciBwcm9wZXJ0eSBpZiB3ZSBlbmNvdW50ZXIgYW5vdGhlciBvbmUgb2YgaXRzIGF4aXMtc3BlY2lmaWMgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRkZWxldGUgU1ZHVHJhbnNmb3Jtc1t0cmFuc2Zvcm1OYW1lXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHZhciB0cmFuc2Zvcm1WYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRwZXJzcGVjdGl2ZTtcclxuXHJcblx0XHRcdFx0XHQvKiBUcmFuc2Zvcm0gcHJvcGVydGllcyBhcmUgc3RvcmVkIGFzIG1lbWJlcnMgb2YgdGhlIHRyYW5zZm9ybUNhY2hlIG9iamVjdC4gQ29uY2F0ZW5hdGUgYWxsIHRoZSBtZW1iZXJzIGludG8gYSBzdHJpbmcuICovXHJcblx0XHRcdFx0XHQkLmVhY2goRGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZSwgZnVuY3Rpb24odHJhbnNmb3JtTmFtZSkge1xyXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm1WYWx1ZSA9IERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV07XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBUcmFuc2Zvcm0ncyBwZXJzcGVjdGl2ZSBzdWJwcm9wZXJ0eSBtdXN0IGJlIHNldCBmaXJzdCBpbiBvcmRlciB0byB0YWtlIGVmZmVjdC4gU3RvcmUgaXQgdGVtcG9yYXJpbHkuICovXHJcblx0XHRcdFx0XHRcdGlmICh0cmFuc2Zvcm1OYW1lID09PSBcInRyYW5zZm9ybVBlcnNwZWN0aXZlXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRwZXJzcGVjdGl2ZSA9IHRyYW5zZm9ybVZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJRTkgb25seSBzdXBwb3J0cyBvbmUgcm90YXRpb24gdHlwZSwgcm90YXRlWiwgd2hpY2ggaXQgcmVmZXJzIHRvIGFzIFwicm90YXRlXCIuICovXHJcblx0XHRcdFx0XHRcdGlmIChJRSA9PT0gOSAmJiB0cmFuc2Zvcm1OYW1lID09PSBcInJvdGF0ZVpcIikge1xyXG5cdFx0XHRcdFx0XHRcdHRyYW5zZm9ybU5hbWUgPSBcInJvdGF0ZVwiO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm1TdHJpbmcgKz0gdHJhbnNmb3JtTmFtZSArIHRyYW5zZm9ybVZhbHVlICsgXCIgXCI7XHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHQvKiBJZiBwcmVzZW50LCBzZXQgdGhlIHBlcnNwZWN0aXZlIHN1YnByb3BlcnR5IGZpcnN0LiAqL1xyXG5cdFx0XHRcdFx0aWYgKHBlcnNwZWN0aXZlKSB7XHJcblx0XHRcdFx0XHRcdHRyYW5zZm9ybVN0cmluZyA9IFwicGVyc3BlY3RpdmVcIiArIHBlcnNwZWN0aXZlICsgXCIgXCIgKyB0cmFuc2Zvcm1TdHJpbmc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcInRyYW5zZm9ybVwiLCB0cmFuc2Zvcm1TdHJpbmcpO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cclxuXHRcdC8qIFJlZ2lzdGVyIGhvb2tzIGFuZCBub3JtYWxpemF0aW9ucy4gKi9cclxuXHRcdENTUy5Ib29rcy5yZWdpc3RlcigpO1xyXG5cdFx0Q1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyKCk7XHJcblxyXG5cdFx0LyogQWxsb3cgaG9vayBzZXR0aW5nIGluIHRoZSBzYW1lIGZhc2hpb24gYXMgalF1ZXJ5J3MgJC5jc3MoKS4gKi9cclxuXHRcdFZlbG9jaXR5Lmhvb2sgPSBmdW5jdGlvbihlbGVtZW50cywgYXJnMiwgYXJnMykge1xyXG5cdFx0XHR2YXIgdmFsdWU7XHJcblxyXG5cdFx0XHRlbGVtZW50cyA9IHNhbml0aXplRWxlbWVudHMoZWxlbWVudHMpO1xyXG5cclxuXHRcdFx0JC5lYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihpLCBlbGVtZW50KSB7XHJcblx0XHRcdFx0LyogSW5pdGlhbGl6ZSBWZWxvY2l0eSdzIHBlci1lbGVtZW50IGRhdGEgY2FjaGUgaWYgdGhpcyBlbGVtZW50IGhhc24ndCBwcmV2aW91c2x5IGJlZW4gYW5pbWF0ZWQuICovXHJcblx0XHRcdFx0aWYgKERhdGEoZWxlbWVudCkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0VmVsb2NpdHkuaW5pdChlbGVtZW50KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIEdldCBwcm9wZXJ0eSB2YWx1ZS4gSWYgYW4gZWxlbWVudCBzZXQgd2FzIHBhc3NlZCBpbiwgb25seSByZXR1cm4gdGhlIHZhbHVlIGZvciB0aGUgZmlyc3QgZWxlbWVudC4gKi9cclxuXHRcdFx0XHRpZiAoYXJnMyA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIGFyZzIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0LyogU2V0IHByb3BlcnR5IHZhbHVlLiAqL1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQvKiBzUFYgcmV0dXJucyBhbiBhcnJheSBvZiB0aGUgbm9ybWFsaXplZCBwcm9wZXJ0eU5hbWUvcHJvcGVydHlWYWx1ZSBwYWlyIHVzZWQgdG8gdXBkYXRlIHRoZSBET00uICovXHJcblx0XHRcdFx0XHR2YXIgYWRqdXN0ZWRTZXQgPSBDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBhcmcyLCBhcmczKTtcclxuXHJcblx0XHRcdFx0XHQvKiBUcmFuc2Zvcm0gcHJvcGVydGllcyBkb24ndCBhdXRvbWF0aWNhbGx5IHNldC4gVGhleSBoYXZlIHRvIGJlIGZsdXNoZWQgdG8gdGhlIERPTS4gKi9cclxuXHRcdFx0XHRcdGlmIChhZGp1c3RlZFNldFswXSA9PT0gXCJ0cmFuc2Zvcm1cIikge1xyXG5cdFx0XHRcdFx0XHRWZWxvY2l0eS5DU1MuZmx1c2hUcmFuc2Zvcm1DYWNoZShlbGVtZW50KTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR2YWx1ZSA9IGFkanVzdGVkU2V0O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8qKioqKioqKioqKioqKioqKlxyXG5cdFx0IEFuaW1hdGlvblxyXG5cdFx0ICoqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdHZhciBhbmltYXRlID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBvcHRzO1xyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQ2FsbCBDaGFpblxyXG5cdFx0XHQgKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogTG9naWMgZm9yIGRldGVybWluaW5nIHdoYXQgdG8gcmV0dXJuIHRvIHRoZSBjYWxsIHN0YWNrIHdoZW4gZXhpdGluZyBvdXQgb2YgVmVsb2NpdHkuICovXHJcblx0XHRcdGZ1bmN0aW9uIGdldENoYWluKCkge1xyXG5cdFx0XHRcdC8qIElmIHdlIGFyZSB1c2luZyB0aGUgdXRpbGl0eSBmdW5jdGlvbiwgYXR0ZW1wdCB0byByZXR1cm4gdGhpcyBjYWxsJ3MgcHJvbWlzZS4gSWYgbm8gcHJvbWlzZSBsaWJyYXJ5IHdhcyBkZXRlY3RlZCxcclxuXHRcdFx0XHQgZGVmYXVsdCB0byBudWxsIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSB0YXJnZXRlZCBlbGVtZW50cyBzbyB0aGF0IHV0aWxpdHkgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUgaXMgc3RhbmRhcmRpemVkLiAqL1xyXG5cdFx0XHRcdGlmIChpc1V0aWxpdHkpIHtcclxuXHRcdFx0XHRcdHJldHVybiBwcm9taXNlRGF0YS5wcm9taXNlIHx8IG51bGw7XHJcblx0XHRcdFx0XHQvKiBPdGhlcndpc2UsIGlmIHdlJ3JlIHVzaW5nICQuZm4sIHJldHVybiB0aGUgalF1ZXJ5LS9aZXB0by13cmFwcGVkIGVsZW1lbnQgc2V0LiAqL1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudHNXcmFwcGVkO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IEFyZ3VtZW50cyBBc3NpZ25tZW50XHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogVG8gYWxsb3cgZm9yIGV4cHJlc3NpdmUgQ29mZmVlU2NyaXB0IGNvZGUsIFZlbG9jaXR5IHN1cHBvcnRzIGFuIGFsdGVybmF0aXZlIHN5bnRheCBpbiB3aGljaCBcImVsZW1lbnRzXCIgKG9yIFwiZVwiKSwgXCJwcm9wZXJ0aWVzXCIgKG9yIFwicFwiKSwgYW5kIFwib3B0aW9uc1wiIChvciBcIm9cIilcclxuXHRcdFx0IG9iamVjdHMgYXJlIGRlZmluZWQgb24gYSBjb250YWluZXIgb2JqZWN0IHRoYXQncyBwYXNzZWQgaW4gYXMgVmVsb2NpdHkncyBzb2xlIGFyZ3VtZW50LiAqL1xyXG5cdFx0XHQvKiBOb3RlOiBTb21lIGJyb3dzZXJzIGF1dG9tYXRpY2FsbHkgcG9wdWxhdGUgYXJndW1lbnRzIHdpdGggYSBcInByb3BlcnRpZXNcIiBvYmplY3QuIFdlIGRldGVjdCBpdCBieSBjaGVja2luZyBmb3IgaXRzIGRlZmF1bHQgXCJuYW1lc1wiIHByb3BlcnR5LiAqL1xyXG5cdFx0XHR2YXIgc3ludGFjdGljU3VnYXIgPSAoYXJndW1lbnRzWzBdICYmIChhcmd1bWVudHNbMF0ucCB8fCAoKCQuaXNQbGFpbk9iamVjdChhcmd1bWVudHNbMF0ucHJvcGVydGllcykgJiYgIWFyZ3VtZW50c1swXS5wcm9wZXJ0aWVzLm5hbWVzKSB8fCBUeXBlLmlzU3RyaW5nKGFyZ3VtZW50c1swXS5wcm9wZXJ0aWVzKSkpKSxcclxuXHRcdFx0XHRcdC8qIFdoZXRoZXIgVmVsb2NpdHkgd2FzIGNhbGxlZCB2aWEgdGhlIHV0aWxpdHkgZnVuY3Rpb24gKGFzIG9wcG9zZWQgdG8gb24gYSBqUXVlcnkvWmVwdG8gb2JqZWN0KS4gKi9cclxuXHRcdFx0XHRcdGlzVXRpbGl0eSxcclxuXHRcdFx0XHRcdC8qIFdoZW4gVmVsb2NpdHkgaXMgY2FsbGVkIHZpYSB0aGUgdXRpbGl0eSBmdW5jdGlvbiAoJC5WZWxvY2l0eSgpL1ZlbG9jaXR5KCkpLCBlbGVtZW50cyBhcmUgZXhwbGljaXRseVxyXG5cdFx0XHRcdFx0IHBhc3NlZCBpbiBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyLiBUaHVzLCBhcmd1bWVudCBwb3NpdGlvbmluZyB2YXJpZXMuIFdlIG5vcm1hbGl6ZSB0aGVtIGhlcmUuICovXHJcblx0XHRcdFx0XHRlbGVtZW50c1dyYXBwZWQsXHJcblx0XHRcdFx0XHRhcmd1bWVudEluZGV4O1xyXG5cclxuXHRcdFx0dmFyIGVsZW1lbnRzLFxyXG5cdFx0XHRcdFx0cHJvcGVydGllc01hcCxcclxuXHRcdFx0XHRcdG9wdGlvbnM7XHJcblxyXG5cdFx0XHQvKiBEZXRlY3QgalF1ZXJ5L1plcHRvIGVsZW1lbnRzIGJlaW5nIGFuaW1hdGVkIHZpYSB0aGUgJC5mbiBtZXRob2QuICovXHJcblx0XHRcdGlmIChUeXBlLmlzV3JhcHBlZCh0aGlzKSkge1xyXG5cdFx0XHRcdGlzVXRpbGl0eSA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRhcmd1bWVudEluZGV4ID0gMDtcclxuXHRcdFx0XHRlbGVtZW50cyA9IHRoaXM7XHJcblx0XHRcdFx0ZWxlbWVudHNXcmFwcGVkID0gdGhpcztcclxuXHRcdFx0XHQvKiBPdGhlcndpc2UsIHJhdyBlbGVtZW50cyBhcmUgYmVpbmcgYW5pbWF0ZWQgdmlhIHRoZSB1dGlsaXR5IGZ1bmN0aW9uLiAqL1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlzVXRpbGl0eSA9IHRydWU7XHJcblxyXG5cdFx0XHRcdGFyZ3VtZW50SW5kZXggPSAxO1xyXG5cdFx0XHRcdGVsZW1lbnRzID0gc3ludGFjdGljU3VnYXIgPyAoYXJndW1lbnRzWzBdLmVsZW1lbnRzIHx8IGFyZ3VtZW50c1swXS5lKSA6IGFyZ3VtZW50c1swXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKlxyXG5cdFx0XHQgUHJvbWlzZXNcclxuXHRcdFx0ICoqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdHZhciBwcm9taXNlRGF0YSA9IHtcclxuXHRcdFx0XHRwcm9taXNlOiBudWxsLFxyXG5cdFx0XHRcdHJlc29sdmVyOiBudWxsLFxyXG5cdFx0XHRcdHJlamVjdGVyOiBudWxsXHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvKiBJZiB0aGlzIGNhbGwgd2FzIG1hZGUgdmlhIHRoZSB1dGlsaXR5IGZ1bmN0aW9uICh3aGljaCBpcyB0aGUgZGVmYXVsdCBtZXRob2Qgb2YgaW52b2NhdGlvbiB3aGVuIGpRdWVyeS9aZXB0byBhcmUgbm90IGJlaW5nIHVzZWQpLCBhbmQgaWZcclxuXHRcdFx0IHByb21pc2Ugc3VwcG9ydCB3YXMgZGV0ZWN0ZWQsIGNyZWF0ZSBhIHByb21pc2Ugb2JqZWN0IGZvciB0aGlzIGNhbGwgYW5kIHN0b3JlIHJlZmVyZW5jZXMgdG8gaXRzIHJlc29sdmVyIGFuZCByZWplY3RlciBtZXRob2RzLiBUaGUgcmVzb2x2ZVxyXG5cdFx0XHQgbWV0aG9kIGlzIHVzZWQgd2hlbiBhIGNhbGwgY29tcGxldGVzIG5hdHVyYWxseSBvciBpcyBwcmVtYXR1cmVseSBzdG9wcGVkIGJ5IHRoZSB1c2VyLiBJbiBib3RoIGNhc2VzLCBjb21wbGV0ZUNhbGwoKSBoYW5kbGVzIHRoZSBhc3NvY2lhdGVkXHJcblx0XHRcdCBjYWxsIGNsZWFudXAgYW5kIHByb21pc2UgcmVzb2x2aW5nIGxvZ2ljLiBUaGUgcmVqZWN0IG1ldGhvZCBpcyB1c2VkIHdoZW4gYW4gaW52YWxpZCBzZXQgb2YgYXJndW1lbnRzIGlzIHBhc3NlZCBpbnRvIGEgVmVsb2NpdHkgY2FsbC4gKi9cclxuXHRcdFx0LyogTm90ZTogVmVsb2NpdHkgZW1wbG95cyBhIGNhbGwtYmFzZWQgcXVldWVpbmcgYXJjaGl0ZWN0dXJlLCB3aGljaCBtZWFucyB0aGF0IHN0b3BwaW5nIGFuIGFuaW1hdGluZyBlbGVtZW50IGFjdHVhbGx5IHN0b3BzIHRoZSBmdWxsIGNhbGwgdGhhdFxyXG5cdFx0XHQgdHJpZ2dlcmVkIGl0IC0tIG5vdCB0aGF0IG9uZSBlbGVtZW50IGV4Y2x1c2l2ZWx5LiBTaW1pbGFybHksIHRoZXJlIGlzIG9uZSBwcm9taXNlIHBlciBjYWxsLCBhbmQgYWxsIGVsZW1lbnRzIHRhcmdldGVkIGJ5IGEgVmVsb2NpdHkgY2FsbCBhcmVcclxuXHRcdFx0IGdyb3VwZWQgdG9nZXRoZXIgZm9yIHRoZSBwdXJwb3NlcyBvZiByZXNvbHZpbmcgYW5kIHJlamVjdGluZyBhIHByb21pc2UuICovXHJcblx0XHRcdGlmIChpc1V0aWxpdHkgJiYgVmVsb2NpdHkuUHJvbWlzZSkge1xyXG5cdFx0XHRcdHByb21pc2VEYXRhLnByb21pc2UgPSBuZXcgVmVsb2NpdHkuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuXHRcdFx0XHRcdHByb21pc2VEYXRhLnJlc29sdmVyID0gcmVzb2x2ZTtcclxuXHRcdFx0XHRcdHByb21pc2VEYXRhLnJlamVjdGVyID0gcmVqZWN0O1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoc3ludGFjdGljU3VnYXIpIHtcclxuXHRcdFx0XHRwcm9wZXJ0aWVzTWFwID0gYXJndW1lbnRzWzBdLnByb3BlcnRpZXMgfHwgYXJndW1lbnRzWzBdLnA7XHJcblx0XHRcdFx0b3B0aW9ucyA9IGFyZ3VtZW50c1swXS5vcHRpb25zIHx8IGFyZ3VtZW50c1swXS5vO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHByb3BlcnRpZXNNYXAgPSBhcmd1bWVudHNbYXJndW1lbnRJbmRleF07XHJcblx0XHRcdFx0b3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudEluZGV4ICsgMV07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGVsZW1lbnRzID0gc2FuaXRpemVFbGVtZW50cyhlbGVtZW50cyk7XHJcblxyXG5cdFx0XHRpZiAoIWVsZW1lbnRzKSB7XHJcblx0XHRcdFx0aWYgKHByb21pc2VEYXRhLnByb21pc2UpIHtcclxuXHRcdFx0XHRcdGlmICghcHJvcGVydGllc01hcCB8fCAhb3B0aW9ucyB8fCBvcHRpb25zLnByb21pc2VSZWplY3RFbXB0eSAhPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0cHJvbWlzZURhdGEucmVqZWN0ZXIoKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHByb21pc2VEYXRhLnJlc29sdmVyKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogVGhlIGxlbmd0aCBvZiB0aGUgZWxlbWVudCBzZXQgKGluIHRoZSBmb3JtIG9mIGEgbm9kZUxpc3Qgb3IgYW4gYXJyYXkgb2YgZWxlbWVudHMpIGlzIGRlZmF1bHRlZCB0byAxIGluIGNhc2UgYVxyXG5cdFx0XHQgc2luZ2xlIHJhdyBET00gZWxlbWVudCBpcyBwYXNzZWQgaW4gKHdoaWNoIGRvZXNuJ3QgY29udGFpbiBhIGxlbmd0aCBwcm9wZXJ0eSkuICovXHJcblx0XHRcdHZhciBlbGVtZW50c0xlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aCxcclxuXHRcdFx0XHRcdGVsZW1lbnRzSW5kZXggPSAwO1xyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQXJndW1lbnQgT3ZlcmxvYWRpbmdcclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIFN1cHBvcnQgaXMgaW5jbHVkZWQgZm9yIGpRdWVyeSdzIGFyZ3VtZW50IG92ZXJsb2FkaW5nOiAkLmFuaW1hdGUocHJvcGVydHlNYXAgWywgZHVyYXRpb25dIFssIGVhc2luZ10gWywgY29tcGxldGVdKS5cclxuXHRcdFx0IE92ZXJsb2FkaW5nIGlzIGRldGVjdGVkIGJ5IGNoZWNraW5nIGZvciB0aGUgYWJzZW5jZSBvZiBhbiBvYmplY3QgYmVpbmcgcGFzc2VkIGludG8gb3B0aW9ucy4gKi9cclxuXHRcdFx0LyogTm90ZTogVGhlIHN0b3AvZmluaXNoL3BhdXNlL3Jlc3VtZSBhY3Rpb25zIGRvIG5vdCBhY2NlcHQgYW5pbWF0aW9uIG9wdGlvbnMsIGFuZCBhcmUgdGhlcmVmb3JlIGV4Y2x1ZGVkIGZyb20gdGhpcyBjaGVjay4gKi9cclxuXHRcdFx0aWYgKCEvXihzdG9wfGZpbmlzaHxmaW5pc2hBbGx8cGF1c2V8cmVzdW1lKSQvaS50ZXN0KHByb3BlcnRpZXNNYXApICYmICEkLmlzUGxhaW5PYmplY3Qob3B0aW9ucykpIHtcclxuXHRcdFx0XHQvKiBUaGUgdXRpbGl0eSBmdW5jdGlvbiBzaGlmdHMgYWxsIGFyZ3VtZW50cyBvbmUgcG9zaXRpb24gdG8gdGhlIHJpZ2h0LCBzbyB3ZSBhZGp1c3QgZm9yIHRoYXQgb2Zmc2V0LiAqL1xyXG5cdFx0XHRcdHZhciBzdGFydGluZ0FyZ3VtZW50UG9zaXRpb24gPSBhcmd1bWVudEluZGV4ICsgMTtcclxuXHJcblx0XHRcdFx0b3B0aW9ucyA9IHt9O1xyXG5cclxuXHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggYWxsIG9wdGlvbnMgYXJndW1lbnRzICovXHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IHN0YXJ0aW5nQXJndW1lbnRQb3NpdGlvbjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0LyogVHJlYXQgYSBudW1iZXIgYXMgYSBkdXJhdGlvbi4gUGFyc2UgaXQgb3V0LiAqL1xyXG5cdFx0XHRcdFx0LyogTm90ZTogVGhlIGZvbGxvd2luZyBSZWdFeCB3aWxsIHJldHVybiB0cnVlIGlmIHBhc3NlZCBhbiBhcnJheSB3aXRoIGEgbnVtYmVyIGFzIGl0cyBmaXJzdCBpdGVtLlxyXG5cdFx0XHRcdFx0IFRodXMsIGFycmF5cyBhcmUgc2tpcHBlZCBmcm9tIHRoaXMgY2hlY2suICovXHJcblx0XHRcdFx0XHRpZiAoIVR5cGUuaXNBcnJheShhcmd1bWVudHNbaV0pICYmICgvXihmYXN0fG5vcm1hbHxzbG93KSQvaS50ZXN0KGFyZ3VtZW50c1tpXSkgfHwgL15cXGQvLnRlc3QoYXJndW1lbnRzW2ldKSkpIHtcclxuXHRcdFx0XHRcdFx0b3B0aW9ucy5kdXJhdGlvbiA9IGFyZ3VtZW50c1tpXTtcclxuXHRcdFx0XHRcdFx0LyogVHJlYXQgc3RyaW5ncyBhbmQgYXJyYXlzIGFzIGVhc2luZ3MuICovXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKFR5cGUuaXNTdHJpbmcoYXJndW1lbnRzW2ldKSB8fCBUeXBlLmlzQXJyYXkoYXJndW1lbnRzW2ldKSkge1xyXG5cdFx0XHRcdFx0XHRvcHRpb25zLmVhc2luZyA9IGFyZ3VtZW50c1tpXTtcclxuXHRcdFx0XHRcdFx0LyogVHJlYXQgYSBmdW5jdGlvbiBhcyBhIGNvbXBsZXRlIGNhbGxiYWNrLiAqL1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzRnVuY3Rpb24oYXJndW1lbnRzW2ldKSkge1xyXG5cdFx0XHRcdFx0XHRvcHRpb25zLmNvbXBsZXRlID0gYXJndW1lbnRzW2ldO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQWN0aW9uIERldGVjdGlvblxyXG5cdFx0XHQgKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogVmVsb2NpdHkncyBiZWhhdmlvciBpcyBjYXRlZ29yaXplZCBpbnRvIFwiYWN0aW9uc1wiOiBFbGVtZW50cyBjYW4gZWl0aGVyIGJlIHNwZWNpYWxseSBzY3JvbGxlZCBpbnRvIHZpZXcsXHJcblx0XHRcdCBvciB0aGV5IGNhbiBiZSBzdGFydGVkLCBzdG9wcGVkLCBwYXVzZWQsIHJlc3VtZWQsIG9yIHJldmVyc2VkIC4gSWYgYSBsaXRlcmFsIG9yIHJlZmVyZW5jZWQgcHJvcGVydGllcyBtYXAgaXMgcGFzc2VkIGluIGFzIFZlbG9jaXR5J3NcclxuXHRcdFx0IGZpcnN0IGFyZ3VtZW50LCB0aGUgYXNzb2NpYXRlZCBhY3Rpb24gaXMgXCJzdGFydFwiLiBBbHRlcm5hdGl2ZWx5LCBcInNjcm9sbFwiLCBcInJldmVyc2VcIiwgXCJwYXVzZVwiLCBcInJlc3VtZVwiIG9yIFwic3RvcFwiIGNhbiBiZSBwYXNzZWQgaW4gXHJcblx0XHRcdCBpbnN0ZWFkIG9mIGEgcHJvcGVydGllcyBtYXAuICovXHJcblx0XHRcdHZhciBhY3Rpb247XHJcblxyXG5cdFx0XHRzd2l0Y2ggKHByb3BlcnRpZXNNYXApIHtcclxuXHRcdFx0XHRjYXNlIFwic2Nyb2xsXCI6XHJcblx0XHRcdFx0XHRhY3Rpb24gPSBcInNjcm9sbFwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdGNhc2UgXCJyZXZlcnNlXCI6XHJcblx0XHRcdFx0XHRhY3Rpb24gPSBcInJldmVyc2VcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRjYXNlIFwicGF1c2VcIjpcclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0IEFjdGlvbjogUGF1c2VcclxuXHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdHZhciBjdXJyZW50VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcblxyXG5cdFx0XHRcdFx0LyogSGFuZGxlIGRlbGF5IHRpbWVycyAqL1xyXG5cdFx0XHRcdFx0JC5lYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihpLCBlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdHBhdXNlRGVsYXlPbkVsZW1lbnQoZWxlbWVudCwgY3VycmVudFRpbWUpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0LyogUGF1c2UgYW5kIFJlc3VtZSBhcmUgY2FsbC13aWRlIChub3Qgb24gYSBwZXIgZWxlbWVudCBiYXNpcykuIFRodXMsIGNhbGxpbmcgcGF1c2Ugb3IgcmVzdW1lIG9uIGEgXHJcblx0XHRcdFx0XHQgc2luZ2xlIGVsZW1lbnQgd2lsbCBjYXVzZSBhbnkgY2FsbHMgdGhhdCBjb250YWludCB0d2VlbnMgZm9yIHRoYXQgZWxlbWVudCB0byBiZSBwYXVzZWQvcmVzdW1lZFxyXG5cdFx0XHRcdFx0IGFzIHdlbGwuICovXHJcblxyXG5cdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIGFsbCBjYWxscyBhbmQgcGF1c2UgYW55IHRoYXQgY29udGFpbiBhbnkgb2Ygb3VyIGVsZW1lbnRzICovXHJcblx0XHRcdFx0XHQkLmVhY2goVmVsb2NpdHkuU3RhdGUuY2FsbHMsIGZ1bmN0aW9uKGksIGFjdGl2ZUNhbGwpIHtcclxuXHJcblx0XHRcdFx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHQvKiBJbmFjdGl2ZSBjYWxscyBhcmUgc2V0IHRvIGZhbHNlIGJ5IHRoZSBsb2dpYyBpbnNpZGUgY29tcGxldGVDYWxsKCkuIFNraXAgdGhlbS4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKGFjdGl2ZUNhbGwpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGFjdGl2ZSBjYWxsJ3MgdGFyZ2V0ZWQgZWxlbWVudHMuICovXHJcblx0XHRcdFx0XHRcdFx0JC5lYWNoKGFjdGl2ZUNhbGxbMV0sIGZ1bmN0aW9uKGssIGFjdGl2ZUVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBxdWV1ZU5hbWUgPSAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSA/IFwiXCIgOiBvcHRpb25zO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChxdWV1ZU5hbWUgIT09IHRydWUgJiYgKGFjdGl2ZUNhbGxbMl0ucXVldWUgIT09IHF1ZXVlTmFtZSkgJiYgIShvcHRpb25zID09PSB1bmRlZmluZWQgJiYgYWN0aXZlQ2FsbFsyXS5xdWV1ZSA9PT0gZmFsc2UpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgY2FsbHMgdGFyZ2V0ZWQgYnkgdGhlIHN0b3AgY29tbWFuZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdCQuZWFjaChlbGVtZW50cywgZnVuY3Rpb24obCwgZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBDaGVjayB0aGF0IHRoaXMgY2FsbCB3YXMgYXBwbGllZCB0byB0aGUgdGFyZ2V0IGVsZW1lbnQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50ID09PSBhY3RpdmVFbGVtZW50KSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFNldCBjYWxsIHRvIHBhdXNlZCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGl2ZUNhbGxbNV0gPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bWU6IGZhbHNlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogT25jZSB3ZSBtYXRjaCBhbiBlbGVtZW50LCB3ZSBjYW4gYm91bmNlIG91dCB0byB0aGUgbmV4dCBjYWxsIGVudGlyZWx5ICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogUHJvY2VlZCB0byBjaGVjayBuZXh0IGNhbGwgaWYgd2UgaGF2ZSBhbHJlYWR5IG1hdGNoZWQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChmb3VuZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHQvKiBTaW5jZSBwYXVzZSBjcmVhdGVzIG5vIG5ldyB0d2VlbnMsIGV4aXQgb3V0IG9mIFZlbG9jaXR5LiAqL1xyXG5cdFx0XHRcdFx0cmV0dXJuIGdldENoYWluKCk7XHJcblxyXG5cdFx0XHRcdGNhc2UgXCJyZXN1bWVcIjpcclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0IEFjdGlvbjogUmVzdW1lXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHQvKiBIYW5kbGUgZGVsYXkgdGltZXJzICovXHJcblx0XHRcdFx0XHQkLmVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGksIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0cmVzdW1lRGVsYXlPbkVsZW1lbnQoZWxlbWVudCwgY3VycmVudFRpbWUpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0LyogUGF1c2UgYW5kIFJlc3VtZSBhcmUgY2FsbC13aWRlIChub3Qgb24gYSBwZXIgZWxlbW50IGJhc2lzKS4gVGh1cywgY2FsbGluZyBwYXVzZSBvciByZXN1bWUgb24gYSBcclxuXHRcdFx0XHRcdCBzaW5nbGUgZWxlbWVudCB3aWxsIGNhdXNlIGFueSBjYWxscyB0aGF0IGNvbnRhaW50IHR3ZWVucyBmb3IgdGhhdCBlbGVtZW50IHRvIGJlIHBhdXNlZC9yZXN1bWVkXHJcblx0XHRcdFx0XHQgYXMgd2VsbC4gKi9cclxuXHJcblx0XHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggYWxsIGNhbGxzIGFuZCBwYXVzZSBhbnkgdGhhdCBjb250YWluIGFueSBvZiBvdXIgZWxlbWVudHMgKi9cclxuXHRcdFx0XHRcdCQuZWFjaChWZWxvY2l0eS5TdGF0ZS5jYWxscywgZnVuY3Rpb24oaSwgYWN0aXZlQ2FsbCkge1xyXG5cdFx0XHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0LyogSW5hY3RpdmUgY2FsbHMgYXJlIHNldCB0byBmYWxzZSBieSB0aGUgbG9naWMgaW5zaWRlIGNvbXBsZXRlQ2FsbCgpLiBTa2lwIHRoZW0uICovXHJcblx0XHRcdFx0XHRcdGlmIChhY3RpdmVDYWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBhY3RpdmUgY2FsbCdzIHRhcmdldGVkIGVsZW1lbnRzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdCQuZWFjaChhY3RpdmVDYWxsWzFdLCBmdW5jdGlvbihrLCBhY3RpdmVFbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcXVldWVOYW1lID0gKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgPyBcIlwiIDogb3B0aW9ucztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocXVldWVOYW1lICE9PSB0cnVlICYmIChhY3RpdmVDYWxsWzJdLnF1ZXVlICE9PSBxdWV1ZU5hbWUpICYmICEob3B0aW9ucyA9PT0gdW5kZWZpbmVkICYmIGFjdGl2ZUNhbGxbMl0ucXVldWUgPT09IGZhbHNlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBTa2lwIGFueSBjYWxscyB0aGF0IGhhdmUgbmV2ZXIgYmVlbiBwYXVzZWQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmICghYWN0aXZlQ2FsbFs1XSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGNhbGxzIHRhcmdldGVkIGJ5IHRoZSBzdG9wIGNvbW1hbmQuICovXHJcblx0XHRcdFx0XHRcdFx0XHQkLmVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGwsIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogQ2hlY2sgdGhhdCB0aGlzIGNhbGwgd2FzIGFwcGxpZWQgdG8gdGhlIHRhcmdldCBlbGVtZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbWVudCA9PT0gYWN0aXZlRWxlbWVudCkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBGbGFnIGEgcGF1c2Ugb2JqZWN0IHRvIGJlIHJlc3VtZWQsIHdoaWNoIHdpbGwgb2NjdXIgZHVyaW5nIHRoZSBuZXh0IHRpY2suIEluXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IGFkZGl0aW9uLCB0aGUgcGF1c2Ugb2JqZWN0IHdpbGwgYXQgdGhhdCB0aW1lIGJlIGRlbGV0ZWQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhY3RpdmVDYWxsWzVdLnJlc3VtZSA9IHRydWU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIE9uY2Ugd2UgbWF0Y2ggYW4gZWxlbWVudCwgd2UgY2FuIGJvdW5jZSBvdXQgdG8gdGhlIG5leHQgY2FsbCBlbnRpcmVseSAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFByb2NlZWQgdG8gY2hlY2sgbmV4dCBjYWxsIGlmIHdlIGhhdmUgYWxyZWFkeSBtYXRjaGVkICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoZm91bmQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0LyogU2luY2UgcmVzdW1lIGNyZWF0ZXMgbm8gbmV3IHR3ZWVucywgZXhpdCBvdXQgb2YgVmVsb2NpdHkuICovXHJcblx0XHRcdFx0XHRyZXR1cm4gZ2V0Q2hhaW4oKTtcclxuXHJcblx0XHRcdFx0Y2FzZSBcImZpbmlzaFwiOlxyXG5cdFx0XHRcdGNhc2UgXCJmaW5pc2hBbGxcIjpcclxuXHRcdFx0XHRjYXNlIFwic3RvcFwiOlxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBBY3Rpb246IFN0b3BcclxuXHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdC8qIENsZWFyIHRoZSBjdXJyZW50bHktYWN0aXZlIGRlbGF5IG9uIGVhY2ggdGFyZ2V0ZWQgZWxlbWVudC4gKi9cclxuXHRcdFx0XHRcdCQuZWFjaChlbGVtZW50cywgZnVuY3Rpb24oaSwgZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoRGF0YShlbGVtZW50KSAmJiBEYXRhKGVsZW1lbnQpLmRlbGF5VGltZXIpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBTdG9wIHRoZSB0aW1lciBmcm9tIHRyaWdnZXJpbmcgaXRzIGNhY2hlZCBuZXh0KCkgZnVuY3Rpb24uICovXHJcblx0XHRcdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KERhdGEoZWxlbWVudCkuZGVsYXlUaW1lci5zZXRUaW1lb3V0KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogTWFudWFsbHkgY2FsbCB0aGUgbmV4dCgpIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIHN1YnNlcXVlbnQgcXVldWUgaXRlbXMgY2FuIHByb2dyZXNzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChEYXRhKGVsZW1lbnQpLmRlbGF5VGltZXIubmV4dCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0RGF0YShlbGVtZW50KS5kZWxheVRpbWVyLm5leHQoKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBEYXRhKGVsZW1lbnQpLmRlbGF5VGltZXI7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHdlIHdhbnQgdG8gZmluaXNoIGV2ZXJ5dGhpbmcgaW4gdGhlIHF1ZXVlLCB3ZSBoYXZlIHRvIGl0ZXJhdGUgdGhyb3VnaCBpdFxyXG5cdFx0XHRcdFx0XHQgYW5kIGNhbGwgZWFjaCBmdW5jdGlvbi4gVGhpcyB3aWxsIG1ha2UgdGhlbSBhY3RpdmUgY2FsbHMgYmVsb3csIHdoaWNoIHdpbGxcclxuXHRcdFx0XHRcdFx0IGNhdXNlIHRoZW0gdG8gYmUgYXBwbGllZCB2aWEgdGhlIGR1cmF0aW9uIHNldHRpbmcuICovXHJcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0aWVzTWFwID09PSBcImZpbmlzaEFsbFwiICYmIChvcHRpb25zID09PSB0cnVlIHx8IFR5cGUuaXNTdHJpbmcob3B0aW9ucykpKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBpdGVtcyBpbiB0aGUgZWxlbWVudCdzIHF1ZXVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdCQuZWFjaCgkLnF1ZXVlKGVsZW1lbnQsIFR5cGUuaXNTdHJpbmcob3B0aW9ucykgPyBvcHRpb25zIDogXCJcIiksIGZ1bmN0aW9uKF8sIGl0ZW0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIFRoZSBxdWV1ZSBhcnJheSBjYW4gY29udGFpbiBhbiBcImlucHJvZ3Jlc3NcIiBzdHJpbmcsIHdoaWNoIHdlIHNraXAuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoVHlwZS5pc0Z1bmN0aW9uKGl0ZW0pKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW0oKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogQ2xlYXJpbmcgdGhlICQucXVldWUoKSBhcnJheSBpcyBhY2hpZXZlZCBieSByZXNldHRpbmcgaXQgdG8gW10uICovXHJcblx0XHRcdFx0XHRcdFx0JC5xdWV1ZShlbGVtZW50LCBUeXBlLmlzU3RyaW5nKG9wdGlvbnMpID8gb3B0aW9ucyA6IFwiXCIsIFtdKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0dmFyIGNhbGxzVG9TdG9wID0gW107XHJcblxyXG5cdFx0XHRcdFx0LyogV2hlbiB0aGUgc3RvcCBhY3Rpb24gaXMgdHJpZ2dlcmVkLCB0aGUgZWxlbWVudHMnIGN1cnJlbnRseSBhY3RpdmUgY2FsbCBpcyBpbW1lZGlhdGVseSBzdG9wcGVkLiBUaGUgYWN0aXZlIGNhbGwgbWlnaHQgaGF2ZVxyXG5cdFx0XHRcdFx0IGJlZW4gYXBwbGllZCB0byBtdWx0aXBsZSBlbGVtZW50cywgaW4gd2hpY2ggY2FzZSBhbGwgb2YgdGhlIGNhbGwncyBlbGVtZW50cyB3aWxsIGJlIHN0b3BwZWQuIFdoZW4gYW4gZWxlbWVudFxyXG5cdFx0XHRcdFx0IGlzIHN0b3BwZWQsIHRoZSBuZXh0IGl0ZW0gaW4gaXRzIGFuaW1hdGlvbiBxdWV1ZSBpcyBpbW1lZGlhdGVseSB0cmlnZ2VyZWQuICovXHJcblx0XHRcdFx0XHQvKiBBbiBhZGRpdGlvbmFsIGFyZ3VtZW50IG1heSBiZSBwYXNzZWQgaW4gdG8gY2xlYXIgYW4gZWxlbWVudCdzIHJlbWFpbmluZyBxdWV1ZWQgY2FsbHMuIEVpdGhlciB0cnVlICh3aGljaCBkZWZhdWx0cyB0byB0aGUgXCJmeFwiIHF1ZXVlKVxyXG5cdFx0XHRcdFx0IG9yIGEgY3VzdG9tIHF1ZXVlIHN0cmluZyBjYW4gYmUgcGFzc2VkIGluLiAqL1xyXG5cdFx0XHRcdFx0LyogTm90ZTogVGhlIHN0b3AgY29tbWFuZCBydW5zIHByaW9yIHRvIFZlbG9jaXR5J3MgUXVldWVpbmcgcGhhc2Ugc2luY2UgaXRzIGJlaGF2aW9yIGlzIGludGVuZGVkIHRvIHRha2UgZWZmZWN0ICppbW1lZGlhdGVseSosXHJcblx0XHRcdFx0XHQgcmVnYXJkbGVzcyBvZiB0aGUgZWxlbWVudCdzIGN1cnJlbnQgcXVldWUgc3RhdGUuICovXHJcblxyXG5cdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIGV2ZXJ5IGFjdGl2ZSBjYWxsLiAqL1xyXG5cdFx0XHRcdFx0JC5lYWNoKFZlbG9jaXR5LlN0YXRlLmNhbGxzLCBmdW5jdGlvbihpLCBhY3RpdmVDYWxsKSB7XHJcblx0XHRcdFx0XHRcdC8qIEluYWN0aXZlIGNhbGxzIGFyZSBzZXQgdG8gZmFsc2UgYnkgdGhlIGxvZ2ljIGluc2lkZSBjb21wbGV0ZUNhbGwoKS4gU2tpcCB0aGVtLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoYWN0aXZlQ2FsbCkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgYWN0aXZlIGNhbGwncyB0YXJnZXRlZCBlbGVtZW50cy4gKi9cclxuXHRcdFx0XHRcdFx0XHQkLmVhY2goYWN0aXZlQ2FsbFsxXSwgZnVuY3Rpb24oaywgYWN0aXZlRWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogSWYgdHJ1ZSB3YXMgcGFzc2VkIGluIGFzIGEgc2Vjb25kYXJ5IGFyZ3VtZW50LCBjbGVhciBhYnNvbHV0ZWx5IGFsbCBjYWxscyBvbiB0aGlzIGVsZW1lbnQuIE90aGVyd2lzZSwgb25seVxyXG5cdFx0XHRcdFx0XHRcdFx0IGNsZWFyIGNhbGxzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVsZXZhbnQgcXVldWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBDYWxsIHN0b3BwaW5nIGxvZ2ljIHdvcmtzIGFzIGZvbGxvd3M6XHJcblx0XHRcdFx0XHRcdFx0XHQgLSBvcHRpb25zID09PSB0cnVlIC0tPiBzdG9wIGN1cnJlbnQgZGVmYXVsdCBxdWV1ZSBjYWxscyAoYW5kIHF1ZXVlOmZhbHNlIGNhbGxzKSwgaW5jbHVkaW5nIHJlbWFpbmluZyBxdWV1ZWQgb25lcy5cclxuXHRcdFx0XHRcdFx0XHRcdCAtIG9wdGlvbnMgPT09IHVuZGVmaW5lZCAtLT4gc3RvcCBjdXJyZW50IHF1ZXVlOlwiXCIgY2FsbCBhbmQgYWxsIHF1ZXVlOmZhbHNlIGNhbGxzLlxyXG5cdFx0XHRcdFx0XHRcdFx0IC0gb3B0aW9ucyA9PT0gZmFsc2UgLS0+IHN0b3Agb25seSBxdWV1ZTpmYWxzZSBjYWxscy5cclxuXHRcdFx0XHRcdFx0XHRcdCAtIG9wdGlvbnMgPT09IFwiY3VzdG9tXCIgLS0+IHN0b3AgY3VycmVudCBxdWV1ZTpcImN1c3RvbVwiIGNhbGwsIGluY2x1ZGluZyByZW1haW5pbmcgcXVldWVkIG9uZXMgKHRoZXJlIGlzIG5vIGZ1bmN0aW9uYWxpdHkgdG8gb25seSBjbGVhciB0aGUgY3VycmVudGx5LXJ1bm5pbmcgcXVldWU6XCJjdXN0b21cIiBjYWxsKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHZhciBxdWV1ZU5hbWUgPSAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSA/IFwiXCIgOiBvcHRpb25zO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChxdWV1ZU5hbWUgIT09IHRydWUgJiYgKGFjdGl2ZUNhbGxbMl0ucXVldWUgIT09IHF1ZXVlTmFtZSkgJiYgIShvcHRpb25zID09PSB1bmRlZmluZWQgJiYgYWN0aXZlQ2FsbFsyXS5xdWV1ZSA9PT0gZmFsc2UpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgY2FsbHMgdGFyZ2V0ZWQgYnkgdGhlIHN0b3AgY29tbWFuZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdCQuZWFjaChlbGVtZW50cywgZnVuY3Rpb24obCwgZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBDaGVjayB0aGF0IHRoaXMgY2FsbCB3YXMgYXBwbGllZCB0byB0aGUgdGFyZ2V0IGVsZW1lbnQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50ID09PSBhY3RpdmVFbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogT3B0aW9uYWxseSBjbGVhciB0aGUgcmVtYWluaW5nIHF1ZXVlZCBjYWxscy4gSWYgd2UncmUgZG9pbmcgXCJmaW5pc2hBbGxcIiB0aGlzIHdvbid0IGZpbmQgYW55dGhpbmcsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IGR1ZSB0byB0aGUgcXVldWUtY2xlYXJpbmcgYWJvdmUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMgPT09IHRydWUgfHwgVHlwZS5pc1N0cmluZyhvcHRpb25zKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBpdGVtcyBpbiB0aGUgZWxlbWVudCdzIHF1ZXVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JC5lYWNoKCQucXVldWUoZWxlbWVudCwgVHlwZS5pc1N0cmluZyhvcHRpb25zKSA/IG9wdGlvbnMgOiBcIlwiKSwgZnVuY3Rpb24oXywgaXRlbSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBUaGUgcXVldWUgYXJyYXkgY2FuIGNvbnRhaW4gYW4gXCJpbnByb2dyZXNzXCIgc3RyaW5nLCB3aGljaCB3ZSBza2lwLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoVHlwZS5pc0Z1bmN0aW9uKGl0ZW0pKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogUGFzcyB0aGUgaXRlbSdzIGNhbGxiYWNrIGEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgd2Ugd2FudCB0byBhYm9ydCBmcm9tIHRoZSBxdWV1ZSBjYWxsLlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAoU3BlY2lmaWNhbGx5LCB0aGUgcXVldWUgd2lsbCByZXNvbHZlIHRoZSBjYWxsJ3MgYXNzb2NpYXRlZCBwcm9taXNlIHRoZW4gYWJvcnQuKSAgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtKG51bGwsIHRydWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBDbGVhcmluZyB0aGUgJC5xdWV1ZSgpIGFycmF5IGlzIGFjaGlldmVkIGJ5IHJlc2V0dGluZyBpdCB0byBbXS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCQucXVldWUoZWxlbWVudCwgVHlwZS5pc1N0cmluZyhvcHRpb25zKSA/IG9wdGlvbnMgOiBcIlwiLCBbXSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydGllc01hcCA9PT0gXCJzdG9wXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFNpbmNlIFwicmV2ZXJzZVwiIHVzZXMgY2FjaGVkIHN0YXJ0IHZhbHVlcyAodGhlIHByZXZpb3VzIGNhbGwncyBlbmRWYWx1ZXMpLCB0aGVzZSB2YWx1ZXMgbXVzdCBiZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0IGNoYW5nZWQgdG8gcmVmbGVjdCB0aGUgZmluYWwgdmFsdWUgdGhhdCB0aGUgZWxlbWVudHMgd2VyZSBhY3R1YWxseSB0d2VlbmVkIHRvLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogSWYgb25seSBxdWV1ZTpmYWxzZS9xdWV1ZTpcImN1c3RvbVwiIGFuaW1hdGlvbnMgYXJlIGN1cnJlbnRseSBydW5uaW5nIG9uIGFuIGVsZW1lbnQsIGl0IHdvbid0IGhhdmUgYSB0d2VlbnNDb250YWluZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBvYmplY3QuIEFsc28sIHF1ZXVlOmZhbHNlL3F1ZXVlOlwiY3VzdG9tXCIgYW5pbWF0aW9ucyBjYW4ndCBiZSByZXZlcnNlZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChkYXRhICYmIGRhdGEudHdlZW5zQ29udGFpbmVyICYmIChxdWV1ZU5hbWUgPT09IHRydWUgfHwgcXVldWVOYW1lID09PSBcIlwiKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkLmVhY2goZGF0YS50d2VlbnNDb250YWluZXIsIGZ1bmN0aW9uKG0sIGFjdGl2ZVR3ZWVuKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aXZlVHdlZW4uZW5kVmFsdWUgPSBhY3RpdmVUd2Vlbi5jdXJyZW50VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhbGxzVG9TdG9wLnB1c2goaSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0aWVzTWFwID09PSBcImZpbmlzaFwiIHx8IHByb3BlcnRpZXNNYXAgPT09IFwiZmluaXNoQWxsXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFRvIGdldCBhY3RpdmUgdHdlZW5zIHRvIGZpbmlzaCBpbW1lZGlhdGVseSwgd2UgZm9yY2VmdWxseSBzaG9ydGVuIHRoZWlyIGR1cmF0aW9ucyB0byAxbXMgc28gdGhhdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0IHRoZXkgZmluaXNoIHVwb24gdGhlIG5leHQgckFmIHRpY2sgdGhlbiBwcm9jZWVkIHdpdGggbm9ybWFsIGNhbGwgY29tcGxldGlvbiBsb2dpYy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGl2ZUNhbGxbMl0uZHVyYXRpb24gPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdC8qIFByZW1hdHVyZWx5IGNhbGwgY29tcGxldGVDYWxsKCkgb24gZWFjaCBtYXRjaGVkIGFjdGl2ZSBjYWxsLiBQYXNzIGFuIGFkZGl0aW9uYWwgZmxhZyBmb3IgXCJzdG9wXCIgdG8gaW5kaWNhdGVcclxuXHRcdFx0XHRcdCB0aGF0IHRoZSBjb21wbGV0ZSBjYWxsYmFjayBhbmQgZGlzcGxheTpub25lIHNldHRpbmcgc2hvdWxkIGJlIHNraXBwZWQgc2luY2Ugd2UncmUgY29tcGxldGluZyBwcmVtYXR1cmVseS4gKi9cclxuXHRcdFx0XHRcdGlmIChwcm9wZXJ0aWVzTWFwID09PSBcInN0b3BcIikge1xyXG5cdFx0XHRcdFx0XHQkLmVhY2goY2FsbHNUb1N0b3AsIGZ1bmN0aW9uKGksIGopIHtcclxuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZUNhbGwoaiwgdHJ1ZSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHByb21pc2VEYXRhLnByb21pc2UpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBJbW1lZGlhdGVseSByZXNvbHZlIHRoZSBwcm9taXNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN0b3AgY2FsbCBzaW5jZSBzdG9wIHJ1bnMgc3luY2hyb25vdXNseS4gKi9cclxuXHRcdFx0XHRcdFx0XHRwcm9taXNlRGF0YS5yZXNvbHZlcihlbGVtZW50cyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBTaW5jZSB3ZSdyZSBzdG9wcGluZywgYW5kIG5vdCBwcm9jZWVkaW5nIHdpdGggcXVldWVpbmcsIGV4aXQgb3V0IG9mIFZlbG9jaXR5LiAqL1xyXG5cdFx0XHRcdFx0cmV0dXJuIGdldENoYWluKCk7XHJcblxyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHQvKiBUcmVhdCBhIG5vbi1lbXB0eSBwbGFpbiBvYmplY3QgYXMgYSBsaXRlcmFsIHByb3BlcnRpZXMgbWFwLiAqL1xyXG5cdFx0XHRcdFx0aWYgKCQuaXNQbGFpbk9iamVjdChwcm9wZXJ0aWVzTWFwKSAmJiAhVHlwZS5pc0VtcHR5T2JqZWN0KHByb3BlcnRpZXNNYXApKSB7XHJcblx0XHRcdFx0XHRcdGFjdGlvbiA9IFwic3RhcnRcIjtcclxuXHJcblx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdCBSZWRpcmVjdHNcclxuXHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBDaGVjayBpZiBhIHN0cmluZyBtYXRjaGVzIGEgcmVnaXN0ZXJlZCByZWRpcmVjdCAoc2VlIFJlZGlyZWN0cyBhYm92ZSkuICovXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKFR5cGUuaXNTdHJpbmcocHJvcGVydGllc01hcCkgJiYgVmVsb2NpdHkuUmVkaXJlY3RzW3Byb3BlcnRpZXNNYXBdKSB7XHJcblx0XHRcdFx0XHRcdG9wdHMgPSAkLmV4dGVuZCh7fSwgb3B0aW9ucyk7XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgZHVyYXRpb25PcmlnaW5hbCA9IG9wdHMuZHVyYXRpb24sXHJcblx0XHRcdFx0XHRcdFx0XHRkZWxheU9yaWdpbmFsID0gb3B0cy5kZWxheSB8fCAwO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogSWYgdGhlIGJhY2t3YXJkcyBvcHRpb24gd2FzIHBhc3NlZCBpbiwgcmV2ZXJzZSB0aGUgZWxlbWVudCBzZXQgc28gdGhhdCBlbGVtZW50cyBhbmltYXRlIGZyb20gdGhlIGxhc3QgdG8gdGhlIGZpcnN0LiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAob3B0cy5iYWNrd2FyZHMgPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50cyA9ICQuZXh0ZW5kKHRydWUsIFtdLCBlbGVtZW50cykucmV2ZXJzZSgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJbmRpdmlkdWFsbHkgdHJpZ2dlciB0aGUgcmVkaXJlY3QgZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgc2V0IHRvIHByZXZlbnQgdXNlcnMgZnJvbSBoYXZpbmcgdG8gaGFuZGxlIGl0ZXJhdGlvbiBsb2dpYyBpbiB0aGVpciByZWRpcmVjdC4gKi9cclxuXHRcdFx0XHRcdFx0JC5lYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50SW5kZXgsIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgc3RhZ2dlciBvcHRpb24gd2FzIHBhc3NlZCBpbiwgc3VjY2Vzc2l2ZWx5IGRlbGF5IGVhY2ggZWxlbWVudCBieSB0aGUgc3RhZ2dlciB2YWx1ZSAoaW4gbXMpLiBSZXRhaW4gdGhlIG9yaWdpbmFsIGRlbGF5IHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChwYXJzZUZsb2F0KG9wdHMuc3RhZ2dlcikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG9wdHMuZGVsYXkgPSBkZWxheU9yaWdpbmFsICsgKHBhcnNlRmxvYXQob3B0cy5zdGFnZ2VyKSAqIGVsZW1lbnRJbmRleCk7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzRnVuY3Rpb24ob3B0cy5zdGFnZ2VyKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0b3B0cy5kZWxheSA9IGRlbGF5T3JpZ2luYWwgKyBvcHRzLnN0YWdnZXIuY2FsbChlbGVtZW50LCBlbGVtZW50SW5kZXgsIGVsZW1lbnRzTGVuZ3RoKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIElmIHRoZSBkcmFnIG9wdGlvbiB3YXMgcGFzc2VkIGluLCBzdWNjZXNzaXZlbHkgaW5jcmVhc2UvZGVjcmVhc2UgKGRlcGVuZGluZyBvbiB0aGUgcHJlc2Vuc2Ugb2Ygb3B0cy5iYWNrd2FyZHMpXHJcblx0XHRcdFx0XHRcdFx0IHRoZSBkdXJhdGlvbiBvZiBlYWNoIGVsZW1lbnQncyBhbmltYXRpb24sIHVzaW5nIGZsb29ycyB0byBwcmV2ZW50IHByb2R1Y2luZyB2ZXJ5IHNob3J0IGR1cmF0aW9ucy4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAob3B0cy5kcmFnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBEZWZhdWx0IHRoZSBkdXJhdGlvbiBvZiBVSSBwYWNrIGVmZmVjdHMgKGNhbGxvdXRzIGFuZCB0cmFuc2l0aW9ucykgdG8gMTAwMG1zIGluc3RlYWQgb2YgdGhlIHVzdWFsIGRlZmF1bHQgZHVyYXRpb24gb2YgNDAwbXMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRvcHRzLmR1cmF0aW9uID0gcGFyc2VGbG9hdChkdXJhdGlvbk9yaWdpbmFsKSB8fCAoL14oY2FsbG91dHx0cmFuc2l0aW9uKS8udGVzdChwcm9wZXJ0aWVzTWFwKSA/IDEwMDAgOiBEVVJBVElPTl9ERUZBVUxUKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBGb3IgZWFjaCBlbGVtZW50LCB0YWtlIHRoZSBncmVhdGVyIGR1cmF0aW9uIG9mOiBBKSBhbmltYXRpb24gY29tcGxldGlvbiBwZXJjZW50YWdlIHJlbGF0aXZlIHRvIHRoZSBvcmlnaW5hbCBkdXJhdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdCBCKSA3NSUgb2YgdGhlIG9yaWdpbmFsIGR1cmF0aW9uLCBvciBDKSBhIDIwMG1zIGZhbGxiYWNrIChpbiBjYXNlIGR1cmF0aW9uIGlzIGFscmVhZHkgc2V0IHRvIGEgbG93IHZhbHVlKS5cclxuXHRcdFx0XHRcdFx0XHRcdCBUaGUgZW5kIHJlc3VsdCBpcyBhIGJhc2VsaW5lIG9mIDc1JSBvZiB0aGUgcmVkaXJlY3QncyBkdXJhdGlvbiB0aGF0IGluY3JlYXNlcy9kZWNyZWFzZXMgYXMgdGhlIGVuZCBvZiB0aGUgZWxlbWVudCBzZXQgaXMgYXBwcm9hY2hlZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdG9wdHMuZHVyYXRpb24gPSBNYXRoLm1heChvcHRzLmR1cmF0aW9uICogKG9wdHMuYmFja3dhcmRzID8gMSAtIGVsZW1lbnRJbmRleCAvIGVsZW1lbnRzTGVuZ3RoIDogKGVsZW1lbnRJbmRleCArIDEpIC8gZWxlbWVudHNMZW5ndGgpLCBvcHRzLmR1cmF0aW9uICogMC43NSwgMjAwKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIFBhc3MgaW4gdGhlIGNhbGwncyBvcHRzIG9iamVjdCBzbyB0aGF0IHRoZSByZWRpcmVjdCBjYW4gb3B0aW9uYWxseSBleHRlbmQgaXQuIEl0IGRlZmF1bHRzIHRvIGFuIGVtcHR5IG9iamVjdCBpbnN0ZWFkIG9mIG51bGwgdG9cclxuXHRcdFx0XHRcdFx0XHQgcmVkdWNlIHRoZSBvcHRzIGNoZWNraW5nIGxvZ2ljIHJlcXVpcmVkIGluc2lkZSB0aGUgcmVkaXJlY3QuICovXHJcblx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuUmVkaXJlY3RzW3Byb3BlcnRpZXNNYXBdLmNhbGwoZWxlbWVudCwgZWxlbWVudCwgb3B0cyB8fCB7fSwgZWxlbWVudEluZGV4LCBlbGVtZW50c0xlbmd0aCwgZWxlbWVudHMsIHByb21pc2VEYXRhLnByb21pc2UgPyBwcm9taXNlRGF0YSA6IHVuZGVmaW5lZCk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogU2luY2UgdGhlIGFuaW1hdGlvbiBsb2dpYyByZXNpZGVzIHdpdGhpbiB0aGUgcmVkaXJlY3QncyBvd24gY29kZSwgYWJvcnQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIGNhbGwuXHJcblx0XHRcdFx0XHRcdCAoVGhlIHBlcmZvcm1hbmNlIG92ZXJoZWFkIHVwIHRvIHRoaXMgcG9pbnQgaXMgdmlydHVhbGx5IG5vbi1leGlzdGFudC4pICovXHJcblx0XHRcdFx0XHRcdC8qIE5vdGU6IFRoZSBqUXVlcnkgY2FsbCBjaGFpbiBpcyBrZXB0IGludGFjdCBieSByZXR1cm5pbmcgdGhlIGNvbXBsZXRlIGVsZW1lbnQgc2V0LiAqL1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZ2V0Q2hhaW4oKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHZhciBhYm9ydEVycm9yID0gXCJWZWxvY2l0eTogRmlyc3QgYXJndW1lbnQgKFwiICsgcHJvcGVydGllc01hcCArIFwiKSB3YXMgbm90IGEgcHJvcGVydHkgbWFwLCBhIGtub3duIGFjdGlvbiwgb3IgYSByZWdpc3RlcmVkIHJlZGlyZWN0LiBBYm9ydGluZy5cIjtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChwcm9taXNlRGF0YS5wcm9taXNlKSB7XHJcblx0XHRcdFx0XHRcdFx0cHJvbWlzZURhdGEucmVqZWN0ZXIobmV3IEVycm9yKGFib3J0RXJyb3IpKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICh3aW5kb3cuY29uc29sZSkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGFib3J0RXJyb3IpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZ2V0Q2hhaW4oKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdCBDYWxsLVdpZGUgVmFyaWFibGVzXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIEEgY29udGFpbmVyIGZvciBDU1MgdW5pdCBjb252ZXJzaW9uIHJhdGlvcyAoZS5nLiAlLCByZW0sIGFuZCBlbSA9PT4gcHgpIHRoYXQgaXMgdXNlZCB0byBjYWNoZSByYXRpb3MgYWNyb3NzIGFsbCBlbGVtZW50c1xyXG5cdFx0XHQgYmVpbmcgYW5pbWF0ZWQgaW4gYSBzaW5nbGUgVmVsb2NpdHkgY2FsbC4gQ2FsY3VsYXRpbmcgdW5pdCByYXRpb3MgbmVjZXNzaXRhdGVzIERPTSBxdWVyeWluZyBhbmQgdXBkYXRpbmcsIGFuZCBpcyB0aGVyZWZvcmVcclxuXHRcdFx0IGF2b2lkZWQgKHZpYSBjYWNoaW5nKSB3aGVyZXZlciBwb3NzaWJsZS4gVGhpcyBjb250YWluZXIgaXMgY2FsbC13aWRlIGluc3RlYWQgb2YgcGFnZS13aWRlIHRvIGF2b2lkIHRoZSByaXNrIG9mIHVzaW5nIHN0YWxlXHJcblx0XHRcdCBjb252ZXJzaW9uIG1ldHJpY3MgYWNyb3NzIFZlbG9jaXR5IGFuaW1hdGlvbnMgdGhhdCBhcmUgbm90IGltbWVkaWF0ZWx5IGNvbnNlY3V0aXZlbHkgY2hhaW5lZC4gKi9cclxuXHRcdFx0dmFyIGNhbGxVbml0Q29udmVyc2lvbkRhdGEgPSB7XHJcblx0XHRcdFx0bGFzdFBhcmVudDogbnVsbCxcclxuXHRcdFx0XHRsYXN0UG9zaXRpb246IG51bGwsXHJcblx0XHRcdFx0bGFzdEZvbnRTaXplOiBudWxsLFxyXG5cdFx0XHRcdGxhc3RQZXJjZW50VG9QeFdpZHRoOiBudWxsLFxyXG5cdFx0XHRcdGxhc3RQZXJjZW50VG9QeEhlaWdodDogbnVsbCxcclxuXHRcdFx0XHRsYXN0RW1Ub1B4OiBudWxsLFxyXG5cdFx0XHRcdHJlbVRvUHg6IG51bGwsXHJcblx0XHRcdFx0dndUb1B4OiBudWxsLFxyXG5cdFx0XHRcdHZoVG9QeDogbnVsbFxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0LyogQSBjb250YWluZXIgZm9yIGFsbCB0aGUgZW5zdWluZyB0d2VlbiBkYXRhIGFuZCBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWxsLiBUaGlzIGNvbnRhaW5lciBnZXRzIHB1c2hlZCB0byB0aGUgcGFnZS13aWRlXHJcblx0XHRcdCBWZWxvY2l0eS5TdGF0ZS5jYWxscyBhcnJheSB0aGF0IGlzIHByb2Nlc3NlZCBkdXJpbmcgYW5pbWF0aW9uIHRpY2tpbmcuICovXHJcblx0XHRcdHZhciBjYWxsID0gW107XHJcblxyXG5cdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdCBFbGVtZW50IFByb2Nlc3NpbmdcclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIEVsZW1lbnQgcHJvY2Vzc2luZyBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0cyAtLSBkYXRhIHByb2Nlc3NpbmcgdGhhdCBjYW5ub3QgZ28gc3RhbGUgYW5kIGRhdGEgcHJvY2Vzc2luZyB0aGF0ICpjYW4qIGdvIHN0YWxlIChpLmUuIHRoaXJkLXBhcnR5IHN0eWxlIG1vZGlmaWNhdGlvbnMpOlxyXG5cdFx0XHQgMSkgUHJlLVF1ZXVlaW5nOiBFbGVtZW50LXdpZGUgdmFyaWFibGVzLCBpbmNsdWRpbmcgdGhlIGVsZW1lbnQncyBkYXRhIHN0b3JhZ2UsIGFyZSBpbnN0YW50aWF0ZWQuIENhbGwgb3B0aW9ucyBhcmUgcHJlcGFyZWQuIElmIHRyaWdnZXJlZCwgdGhlIFN0b3AgYWN0aW9uIGlzIGV4ZWN1dGVkLlxyXG5cdFx0XHQgMikgUXVldWVpbmc6IFRoZSBsb2dpYyB0aGF0IHJ1bnMgb25jZSB0aGlzIGNhbGwgaGFzIHJlYWNoZWQgaXRzIHBvaW50IG9mIGV4ZWN1dGlvbiBpbiB0aGUgZWxlbWVudCdzICQucXVldWUoKSBzdGFjay4gTW9zdCBsb2dpYyBpcyBwbGFjZWQgaGVyZSB0byBhdm9pZCByaXNraW5nIGl0IGJlY29taW5nIHN0YWxlLlxyXG5cdFx0XHQgMykgUHVzaGluZzogQ29uc29saWRhdGlvbiBvZiB0aGUgdHdlZW4gZGF0YSBmb2xsb3dlZCBieSBpdHMgcHVzaCBvbnRvIHRoZSBnbG9iYWwgaW4tcHJvZ3Jlc3MgY2FsbHMgY29udGFpbmVyLlxyXG5cdFx0XHQgYGVsZW1lbnRBcnJheUluZGV4YCBhbGxvd3MgcGFzc2luZyBpbmRleCBvZiB0aGUgZWxlbWVudCBpbiB0aGUgb3JpZ2luYWwgYXJyYXkgdG8gdmFsdWUgZnVuY3Rpb25zLlxyXG5cdFx0XHQgSWYgYGVsZW1lbnRzSW5kZXhgIHdlcmUgdXNlZCBpbnN0ZWFkIHRoZSBpbmRleCB3b3VsZCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBlbGVtZW50cycgcGVyLWVsZW1lbnQgcXVldWUuXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRmdW5jdGlvbiBwcm9jZXNzRWxlbWVudChlbGVtZW50LCBlbGVtZW50QXJyYXlJbmRleCkge1xyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBQYXJ0IEk6IFByZS1RdWV1ZWluZ1xyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IEVsZW1lbnQtV2lkZSBWYXJpYWJsZXNcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHR2YXIgLyogVGhlIHJ1bnRpbWUgb3B0cyBvYmplY3QgaXMgdGhlIGV4dGVuc2lvbiBvZiB0aGUgY3VycmVudCBjYWxsJ3Mgb3B0aW9ucyBhbmQgVmVsb2NpdHkncyBwYWdlLXdpZGUgb3B0aW9uIGRlZmF1bHRzLiAqL1xyXG5cdFx0XHRcdFx0XHRvcHRzID0gJC5leHRlbmQoe30sIFZlbG9jaXR5LmRlZmF1bHRzLCBvcHRpb25zKSxcclxuXHRcdFx0XHRcdFx0LyogQSBjb250YWluZXIgZm9yIHRoZSBwcm9jZXNzZWQgZGF0YSBhc3NvY2lhdGVkIHdpdGggZWFjaCBwcm9wZXJ0eSBpbiB0aGUgcHJvcGVydHlNYXAuXHJcblx0XHRcdFx0XHRcdCAoRWFjaCBwcm9wZXJ0eSBpbiB0aGUgbWFwIHByb2R1Y2VzIGl0cyBvd24gXCJ0d2VlblwiLikgKi9cclxuXHRcdFx0XHRcdFx0dHdlZW5zQ29udGFpbmVyID0ge30sXHJcblx0XHRcdFx0XHRcdGVsZW1lbnRVbml0Q29udmVyc2lvbkRhdGE7XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgRWxlbWVudCBJbml0XHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0aWYgKERhdGEoZWxlbWVudCkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0VmVsb2NpdHkuaW5pdChlbGVtZW50KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBEZWxheVxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIFNpbmNlIHF1ZXVlOmZhbHNlIGRvZXNuJ3QgcmVzcGVjdCB0aGUgaXRlbSdzIGV4aXN0aW5nIHF1ZXVlLCB3ZSBhdm9pZCBpbmplY3RpbmcgaXRzIGRlbGF5IGhlcmUgKGl0J3Mgc2V0IGxhdGVyIG9uKS4gKi9cclxuXHRcdFx0XHQvKiBOb3RlOiBWZWxvY2l0eSByb2xscyBpdHMgb3duIGRlbGF5IGZ1bmN0aW9uIHNpbmNlIGpRdWVyeSBkb2Vzbid0IGhhdmUgYSB1dGlsaXR5IGFsaWFzIGZvciAkLmZuLmRlbGF5KClcclxuXHRcdFx0XHQgKGFuZCB0aHVzIHJlcXVpcmVzIGpRdWVyeSBlbGVtZW50IGNyZWF0aW9uLCB3aGljaCB3ZSBhdm9pZCBzaW5jZSBpdHMgb3ZlcmhlYWQgaW5jbHVkZXMgRE9NIHF1ZXJ5aW5nKS4gKi9cclxuXHRcdFx0XHRpZiAocGFyc2VGbG9hdChvcHRzLmRlbGF5KSAmJiBvcHRzLnF1ZXVlICE9PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0JC5xdWV1ZShlbGVtZW50LCBvcHRzLnF1ZXVlLCBmdW5jdGlvbihuZXh0LCBjbGVhclF1ZXVlKSB7XHJcblx0XHRcdFx0XHRcdGlmIChjbGVhclF1ZXVlID09PSB0cnVlKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogRG8gbm90IGNvbnRpbnVlIHdpdGggYW5pbWF0aW9uIHF1ZXVlaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBUaGlzIGlzIGEgZmxhZyB1c2VkIHRvIGluZGljYXRlIHRvIHRoZSB1cGNvbWluZyBjb21wbGV0ZUNhbGwoKSBmdW5jdGlvbiB0aGF0IHRoaXMgcXVldWUgZW50cnkgd2FzIGluaXRpYXRlZCBieSBWZWxvY2l0eS4gU2VlIGNvbXBsZXRlQ2FsbCgpIGZvciBmdXJ0aGVyIGRldGFpbHMuICovXHJcblx0XHRcdFx0XHRcdFZlbG9jaXR5LnZlbG9jaXR5UXVldWVFbnRyeUZsYWcgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogVGhlIGVuc3VpbmcgcXVldWUgaXRlbSAod2hpY2ggaXMgYXNzaWduZWQgdG8gdGhlIFwibmV4dFwiIGFyZ3VtZW50IHRoYXQgJC5xdWV1ZSgpIGF1dG9tYXRpY2FsbHkgcGFzc2VzIGluKSB3aWxsIGJlIHRyaWdnZXJlZCBhZnRlciBhIHNldFRpbWVvdXQgZGVsYXkuXHJcblx0XHRcdFx0XHRcdCBUaGUgc2V0VGltZW91dCBpcyBzdG9yZWQgc28gdGhhdCBpdCBjYW4gYmUgc3ViamVjdGVkIHRvIGNsZWFyVGltZW91dCgpIGlmIHRoaXMgYW5pbWF0aW9uIGlzIHByZW1hdHVyZWx5IHN0b3BwZWQgdmlhIFZlbG9jaXR5J3MgXCJzdG9wXCIgY29tbWFuZCwgYW5kXHJcblx0XHRcdFx0XHRcdCBkZWxheUJlZ2luL2RlbGF5VGltZSBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBjYW4gXCJwYXVzZVwiIGFuZCBcInJlc3VtZVwiIGEgdHdlZW4gdGhhdCBpcyBzdGlsbCBtaWQtZGVsYXkuICovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBUZW1wb3JhcmlseSBzdG9yZSBkZWxheWVkIGVsZW1lbnRzIHRvIGZhY2lsaXRlIGFjY2VzcyBmb3IgZ2xvYmFsIHBhdXNlL3Jlc3VtZSAqL1xyXG5cdFx0XHRcdFx0XHR2YXIgY2FsbEluZGV4ID0gVmVsb2NpdHkuU3RhdGUuZGVsYXllZEVsZW1lbnRzLmNvdW50Kys7XHJcblx0XHRcdFx0XHRcdFZlbG9jaXR5LlN0YXRlLmRlbGF5ZWRFbGVtZW50c1tjYWxsSW5kZXhdID0gZWxlbWVudDtcclxuXHJcblx0XHRcdFx0XHRcdHZhciBkZWxheUNvbXBsZXRlID0gKGZ1bmN0aW9uKGluZGV4KSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogQ2xlYXIgdGhlIHRlbXBvcmFyeSBlbGVtZW50ICovXHJcblx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5kZWxheWVkRWxlbWVudHNbaW5kZXhdID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogRmluYWxseSwgaXNzdWUgdGhlIGNhbGwgKi9cclxuXHRcdFx0XHRcdFx0XHRcdG5leHQoKTtcclxuXHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHR9KShjYWxsSW5kZXgpO1xyXG5cclxuXHJcblx0XHRcdFx0XHRcdERhdGEoZWxlbWVudCkuZGVsYXlCZWdpbiA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcblx0XHRcdFx0XHRcdERhdGEoZWxlbWVudCkuZGVsYXkgPSBwYXJzZUZsb2F0KG9wdHMuZGVsYXkpO1xyXG5cdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLmRlbGF5VGltZXIgPSB7XHJcblx0XHRcdFx0XHRcdFx0c2V0VGltZW91dDogc2V0VGltZW91dChuZXh0LCBwYXJzZUZsb2F0KG9wdHMuZGVsYXkpKSxcclxuXHRcdFx0XHRcdFx0XHRuZXh0OiBkZWxheUNvbXBsZXRlXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBEdXJhdGlvblxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIFN1cHBvcnQgZm9yIGpRdWVyeSdzIG5hbWVkIGR1cmF0aW9ucy4gKi9cclxuXHRcdFx0XHRzd2l0Y2ggKG9wdHMuZHVyYXRpb24udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcblx0XHRcdFx0XHRjYXNlIFwiZmFzdFwiOlxyXG5cdFx0XHRcdFx0XHRvcHRzLmR1cmF0aW9uID0gMjAwO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRjYXNlIFwibm9ybWFsXCI6XHJcblx0XHRcdFx0XHRcdG9wdHMuZHVyYXRpb24gPSBEVVJBVElPTl9ERUZBVUxUO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRjYXNlIFwic2xvd1wiOlxyXG5cdFx0XHRcdFx0XHRvcHRzLmR1cmF0aW9uID0gNjAwO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0XHQvKiBSZW1vdmUgdGhlIHBvdGVudGlhbCBcIm1zXCIgc3VmZml4IGFuZCBkZWZhdWx0IHRvIDEgaWYgdGhlIHVzZXIgaXMgYXR0ZW1wdGluZyB0byBzZXQgYSBkdXJhdGlvbiBvZiAwIChpbiBvcmRlciB0byBwcm9kdWNlIGFuIGltbWVkaWF0ZSBzdHlsZSBjaGFuZ2UpLiAqL1xyXG5cdFx0XHRcdFx0XHRvcHRzLmR1cmF0aW9uID0gcGFyc2VGbG9hdChvcHRzLmR1cmF0aW9uKSB8fCAxO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBHbG9iYWwgT3B0aW9uOiBNb2NrXHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0aWYgKFZlbG9jaXR5Lm1vY2sgIT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHQvKiBJbiBtb2NrIG1vZGUsIGFsbCBhbmltYXRpb25zIGFyZSBmb3JjZWQgdG8gMW1zIHNvIHRoYXQgdGhleSBvY2N1ciBpbW1lZGlhdGVseSB1cG9uIHRoZSBuZXh0IHJBRiB0aWNrLlxyXG5cdFx0XHRcdFx0IEFsdGVybmF0aXZlbHksIGEgbXVsdGlwbGllciBjYW4gYmUgcGFzc2VkIGluIHRvIHRpbWUgcmVtYXAgYWxsIGRlbGF5cyBhbmQgZHVyYXRpb25zLiAqL1xyXG5cdFx0XHRcdFx0aWYgKFZlbG9jaXR5Lm1vY2sgPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdFx0b3B0cy5kdXJhdGlvbiA9IG9wdHMuZGVsYXkgPSAxO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0b3B0cy5kdXJhdGlvbiAqPSBwYXJzZUZsb2F0KFZlbG9jaXR5Lm1vY2spIHx8IDE7XHJcblx0XHRcdFx0XHRcdG9wdHMuZGVsYXkgKj0gcGFyc2VGbG9hdChWZWxvY2l0eS5tb2NrKSB8fCAxO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBFYXNpbmdcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0b3B0cy5lYXNpbmcgPSBnZXRFYXNpbmcob3B0cy5lYXNpbmcsIG9wdHMuZHVyYXRpb24pO1xyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBPcHRpb246IENhbGxiYWNrc1xyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBDYWxsYmFja3MgbXVzdCBmdW5jdGlvbnMuIE90aGVyd2lzZSwgZGVmYXVsdCB0byBudWxsLiAqL1xyXG5cdFx0XHRcdGlmIChvcHRzLmJlZ2luICYmICFUeXBlLmlzRnVuY3Rpb24ob3B0cy5iZWdpbikpIHtcclxuXHRcdFx0XHRcdG9wdHMuYmVnaW4gPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKG9wdHMucHJvZ3Jlc3MgJiYgIVR5cGUuaXNGdW5jdGlvbihvcHRzLnByb2dyZXNzKSkge1xyXG5cdFx0XHRcdFx0b3B0cy5wcm9ncmVzcyA9IG51bGw7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAob3B0cy5jb21wbGV0ZSAmJiAhVHlwZS5pc0Z1bmN0aW9uKG9wdHMuY29tcGxldGUpKSB7XHJcblx0XHRcdFx0XHRvcHRzLmNvbXBsZXRlID0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBEaXNwbGF5ICYgVmlzaWJpbGl0eVxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIFJlZmVyIHRvIFZlbG9jaXR5J3MgZG9jdW1lbnRhdGlvbiAoVmVsb2NpdHlKUy5vcmcvI2Rpc3BsYXlBbmRWaXNpYmlsaXR5KSBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZGlzcGxheSBhbmQgdmlzaWJpbGl0eSBvcHRpb25zJyBiZWhhdmlvci4gKi9cclxuXHRcdFx0XHQvKiBOb3RlOiBXZSBzdHJpY3RseSBjaGVjayBmb3IgdW5kZWZpbmVkIGluc3RlYWQgb2YgZmFsc2luZXNzIGJlY2F1c2UgZGlzcGxheSBhY2NlcHRzIGFuIGVtcHR5IHN0cmluZyB2YWx1ZS4gKi9cclxuXHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ICE9PSB1bmRlZmluZWQgJiYgb3B0cy5kaXNwbGF5ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRvcHRzLmRpc3BsYXkgPSBvcHRzLmRpc3BsYXkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHRcdFx0XHRcdC8qIFVzZXJzIGNhbiBwYXNzIGluIGEgc3BlY2lhbCBcImF1dG9cIiB2YWx1ZSB0byBpbnN0cnVjdCBWZWxvY2l0eSB0byBzZXQgdGhlIGVsZW1lbnQgdG8gaXRzIGRlZmF1bHQgZGlzcGxheSB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdGlmIChvcHRzLmRpc3BsYXkgPT09IFwiYXV0b1wiKSB7XHJcblx0XHRcdFx0XHRcdG9wdHMuZGlzcGxheSA9IFZlbG9jaXR5LkNTUy5WYWx1ZXMuZ2V0RGlzcGxheVR5cGUoZWxlbWVudCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAob3B0cy52aXNpYmlsaXR5ICE9PSB1bmRlZmluZWQgJiYgb3B0cy52aXNpYmlsaXR5ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRvcHRzLnZpc2liaWxpdHkgPSBvcHRzLnZpc2liaWxpdHkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBtb2JpbGVIQVxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBXaGVuIHNldCB0byB0cnVlLCBhbmQgaWYgdGhpcyBpcyBhIG1vYmlsZSBkZXZpY2UsIG1vYmlsZUhBIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gKHZpYSBhIG51bGwgdHJhbnNmb3JtIGhhY2spXHJcblx0XHRcdFx0IG9uIGFuaW1hdGluZyBlbGVtZW50cy4gSEEgaXMgcmVtb3ZlZCBmcm9tIHRoZSBlbGVtZW50IGF0IHRoZSBjb21wbGV0aW9uIG9mIGl0cyBhbmltYXRpb24uICovXHJcblx0XHRcdFx0LyogTm90ZTogQW5kcm9pZCBHaW5nZXJicmVhZCBkb2Vzbid0IHN1cHBvcnQgSEEuIElmIGEgbnVsbCB0cmFuc2Zvcm0gaGFjayAobW9iaWxlSEEpIGlzIGluIGZhY3Qgc2V0LCBpdCB3aWxsIHByZXZlbnQgb3RoZXIgdHJhbmZvcm0gc3VicHJvcGVydGllcyBmcm9tIHRha2luZyBlZmZlY3QuICovXHJcblx0XHRcdFx0LyogTm90ZTogWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhlIHVzZSBvZiBtb2JpbGVIQSBpbiBWZWxvY2l0eSdzIGRvY3VtZW50YXRpb246IFZlbG9jaXR5SlMub3JnLyNtb2JpbGVIQS4gKi9cclxuXHRcdFx0XHRvcHRzLm1vYmlsZUhBID0gKG9wdHMubW9iaWxlSEEgJiYgVmVsb2NpdHkuU3RhdGUuaXNNb2JpbGUgJiYgIVZlbG9jaXR5LlN0YXRlLmlzR2luZ2VyYnJlYWQpO1xyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgUGFydCBJSTogUXVldWVpbmdcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIFdoZW4gYSBzZXQgb2YgZWxlbWVudHMgaXMgdGFyZ2V0ZWQgYnkgYSBWZWxvY2l0eSBjYWxsLCB0aGUgc2V0IGlzIGJyb2tlbiB1cCBhbmQgZWFjaCBlbGVtZW50IGhhcyB0aGUgY3VycmVudCBWZWxvY2l0eSBjYWxsIGluZGl2aWR1YWxseSBxdWV1ZWQgb250byBpdC5cclxuXHRcdFx0XHQgSW4gdGhpcyB3YXksIGVhY2ggZWxlbWVudCdzIGV4aXN0aW5nIHF1ZXVlIGlzIHJlc3BlY3RlZDsgc29tZSBlbGVtZW50cyBtYXkgYWxyZWFkeSBiZSBhbmltYXRpbmcgYW5kIGFjY29yZGluZ2x5IHNob3VsZCBub3QgaGF2ZSB0aGlzIGN1cnJlbnQgVmVsb2NpdHkgY2FsbCB0cmlnZ2VyZWQgaW1tZWRpYXRlbHkuICovXHJcblx0XHRcdFx0LyogSW4gZWFjaCBxdWV1ZSwgdHdlZW4gZGF0YSBpcyBwcm9jZXNzZWQgZm9yIGVhY2ggYW5pbWF0aW5nIHByb3BlcnR5IHRoZW4gcHVzaGVkIG9udG8gdGhlIGNhbGwtd2lkZSBjYWxscyBhcnJheS4gV2hlbiB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBzZXQgaGFzIGhhZCBpdHMgdHdlZW5zIHByb2Nlc3NlZCxcclxuXHRcdFx0XHQgdGhlIGNhbGwgYXJyYXkgaXMgcHVzaGVkIHRvIFZlbG9jaXR5LlN0YXRlLmNhbGxzIGZvciBsaXZlIHByb2Nlc3NpbmcgYnkgdGhlIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0aWNrLiAqL1xyXG5cdFx0XHRcdGZ1bmN0aW9uIGJ1aWxkUXVldWUobmV4dCkge1xyXG5cdFx0XHRcdFx0dmFyIGRhdGEsIGxhc3RUd2VlbnNDb250YWluZXI7XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBPcHRpb246IEJlZ2luXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHQvKiBUaGUgYmVnaW4gY2FsbGJhY2sgaXMgZmlyZWQgb25jZSBwZXIgY2FsbCAtLSBub3Qgb25jZSBwZXIgZWxlbWVuZXQgLS0gYW5kIGlzIHBhc3NlZCB0aGUgZnVsbCByYXcgRE9NIGVsZW1lbnQgc2V0IGFzIGJvdGggaXRzIGNvbnRleHQgYW5kIGl0cyBmaXJzdCBhcmd1bWVudC4gKi9cclxuXHRcdFx0XHRcdGlmIChvcHRzLmJlZ2luICYmIGVsZW1lbnRzSW5kZXggPT09IDApIHtcclxuXHRcdFx0XHRcdFx0LyogV2UgdGhyb3cgY2FsbGJhY2tzIGluIGEgc2V0VGltZW91dCBzbyB0aGF0IHRocm93biBlcnJvcnMgZG9uJ3QgaGFsdCB0aGUgZXhlY3V0aW9uIG9mIFZlbG9jaXR5IGl0c2VsZi4gKi9cclxuXHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRvcHRzLmJlZ2luLmNhbGwoZWxlbWVudHMsIGVsZW1lbnRzKTtcclxuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhyb3cgZXJyb3I7XHJcblx0XHRcdFx0XHRcdFx0fSwgMSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBUd2VlbiBEYXRhIENvbnN0cnVjdGlvbiAoZm9yIFNjcm9sbClcclxuXHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBJbiBvcmRlciB0byBiZSBzdWJqZWN0ZWQgdG8gY2hhaW5pbmcgYW5kIGFuaW1hdGlvbiBvcHRpb25zLCBzY3JvbGwncyB0d2VlbmluZyBpcyByb3V0ZWQgdGhyb3VnaCBWZWxvY2l0eSBhcyBpZiBpdCB3ZXJlIGEgc3RhbmRhcmQgQ1NTIHByb3BlcnR5IGFuaW1hdGlvbi4gKi9cclxuXHRcdFx0XHRcdGlmIChhY3Rpb24gPT09IFwic2Nyb2xsXCIpIHtcclxuXHRcdFx0XHRcdFx0LyogVGhlIHNjcm9sbCBhY3Rpb24gdW5pcXVlbHkgdGFrZXMgYW4gb3B0aW9uYWwgXCJvZmZzZXRcIiBvcHRpb24gLS0gc3BlY2lmaWVkIGluIHBpeGVscyAtLSB0aGF0IG9mZnNldHMgdGhlIHRhcmdldGVkIHNjcm9sbCBwb3NpdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0dmFyIHNjcm9sbERpcmVjdGlvbiA9ICgvXngkL2kudGVzdChvcHRzLmF4aXMpID8gXCJMZWZ0XCIgOiBcIlRvcFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdHNjcm9sbE9mZnNldCA9IHBhcnNlRmxvYXQob3B0cy5vZmZzZXQpIHx8IDAsXHJcblx0XHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkN1cnJlbnQsXHJcblx0XHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkN1cnJlbnRBbHRlcm5hdGUsXHJcblx0XHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkVuZDtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFNjcm9sbCBhbHNvIHVuaXF1ZWx5IHRha2VzIGFuIG9wdGlvbmFsIFwiY29udGFpbmVyXCIgb3B0aW9uLCB3aGljaCBpbmRpY2F0ZXMgdGhlIHBhcmVudCBlbGVtZW50IHRoYXQgc2hvdWxkIGJlIHNjcm9sbGVkIC0tXHJcblx0XHRcdFx0XHRcdCBhcyBvcHBvc2VkIHRvIHRoZSBicm93c2VyIHdpbmRvdyBpdHNlbGYuIFRoaXMgaXMgdXNlZnVsIGZvciBzY3JvbGxpbmcgdG93YXJkIGFuIGVsZW1lbnQgdGhhdCdzIGluc2lkZSBhbiBvdmVyZmxvd2luZyBwYXJlbnQgZWxlbWVudC4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKG9wdHMuY29udGFpbmVyKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogRW5zdXJlIHRoYXQgZWl0aGVyIGEgalF1ZXJ5IG9iamVjdCBvciBhIHJhdyBET00gZWxlbWVudCB3YXMgcGFzc2VkIGluLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChUeXBlLmlzV3JhcHBlZChvcHRzLmNvbnRhaW5lcikgfHwgVHlwZS5pc05vZGUob3B0cy5jb250YWluZXIpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBFeHRyYWN0IHRoZSByYXcgRE9NIGVsZW1lbnQgZnJvbSB0aGUgalF1ZXJ5IHdyYXBwZXIuICovXHJcblx0XHRcdFx0XHRcdFx0XHRvcHRzLmNvbnRhaW5lciA9IG9wdHMuY29udGFpbmVyWzBdIHx8IG9wdHMuY29udGFpbmVyO1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogVW5saWtlIG90aGVyIHByb3BlcnRpZXMgaW4gVmVsb2NpdHksIHRoZSBicm93c2VyJ3Mgc2Nyb2xsIHBvc2l0aW9uIGlzIG5ldmVyIGNhY2hlZCBzaW5jZSBpdCBzbyBmcmVxdWVudGx5IGNoYW5nZXNcclxuXHRcdFx0XHRcdFx0XHRcdCAoZHVlIHRvIHRoZSB1c2VyJ3MgbmF0dXJhbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBwYWdlKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHNjcm9sbFBvc2l0aW9uQ3VycmVudCA9IG9wdHMuY29udGFpbmVyW1wic2Nyb2xsXCIgKyBzY3JvbGxEaXJlY3Rpb25dOyAvKiBHRVQgKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiAkLnBvc2l0aW9uKCkgdmFsdWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyJ3MgY3VycmVudGx5IHZpZXdhYmxlIGFyZWEgKHdpdGhvdXQgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY29udGFpbmVyJ3MgdHJ1ZSBkaW1lbnNpb25zXHJcblx0XHRcdFx0XHRcdFx0XHQgLS0gc2F5LCBmb3IgZXhhbXBsZSwgaWYgdGhlIGNvbnRhaW5lciB3YXMgbm90IG92ZXJmbG93aW5nKS4gVGh1cywgdGhlIHNjcm9sbCBlbmQgdmFsdWUgaXMgdGhlIHN1bSBvZiB0aGUgY2hpbGQgZWxlbWVudCdzIHBvc2l0aW9uICphbmQqXHJcblx0XHRcdFx0XHRcdFx0XHQgdGhlIHNjcm9sbCBjb250YWluZXIncyBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHNjcm9sbFBvc2l0aW9uRW5kID0gKHNjcm9sbFBvc2l0aW9uQ3VycmVudCArICQoZWxlbWVudCkucG9zaXRpb24oKVtzY3JvbGxEaXJlY3Rpb24udG9Mb3dlckNhc2UoKV0pICsgc2Nyb2xsT2Zmc2V0OyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdC8qIElmIGEgdmFsdWUgb3RoZXIgdGhhbiBhIGpRdWVyeSBvYmplY3Qgb3IgYSByYXcgRE9NIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiwgZGVmYXVsdCB0byBudWxsIHNvIHRoYXQgdGhpcyBvcHRpb24gaXMgaWdub3JlZC4gKi9cclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0b3B0cy5jb250YWluZXIgPSBudWxsO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgd2luZG93IGl0c2VsZiBpcyBiZWluZyBzY3JvbGxlZCAtLSBub3QgYSBjb250YWluaW5nIGVsZW1lbnQgLS0gcGVyZm9ybSBhIGxpdmUgc2Nyb2xsIHBvc2l0aW9uIGxvb2t1cCB1c2luZ1xyXG5cdFx0XHRcdFx0XHRcdCB0aGUgYXBwcm9wcmlhdGUgY2FjaGVkIHByb3BlcnR5IG5hbWVzICh3aGljaCBkaWZmZXIgYmFzZWQgb24gYnJvd3NlciB0eXBlKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkN1cnJlbnQgPSBWZWxvY2l0eS5TdGF0ZS5zY3JvbGxBbmNob3JbVmVsb2NpdHkuU3RhdGVbXCJzY3JvbGxQcm9wZXJ0eVwiICsgc2Nyb2xsRGlyZWN0aW9uXV07IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIFdoZW4gc2Nyb2xsaW5nIHRoZSBicm93c2VyIHdpbmRvdywgY2FjaGUgdGhlIGFsdGVybmF0ZSBheGlzJ3MgY3VycmVudCB2YWx1ZSBzaW5jZSB3aW5kb3cuc2Nyb2xsVG8oKSBkb2Vzbid0IGxldCB1cyBjaGFuZ2Ugb25seSBvbmUgdmFsdWUgYXQgYSB0aW1lLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHNjcm9sbFBvc2l0aW9uQ3VycmVudEFsdGVybmF0ZSA9IFZlbG9jaXR5LlN0YXRlLnNjcm9sbEFuY2hvcltWZWxvY2l0eS5TdGF0ZVtcInNjcm9sbFByb3BlcnR5XCIgKyAoc2Nyb2xsRGlyZWN0aW9uID09PSBcIkxlZnRcIiA/IFwiVG9wXCIgOiBcIkxlZnRcIildXTsgLyogR0VUICovXHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIFVubGlrZSAkLnBvc2l0aW9uKCksICQub2Zmc2V0KCkgdmFsdWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgYnJvd3NlciB3aW5kb3cncyB0cnVlIGRpbWVuc2lvbnMgLS0gbm90IG1lcmVseSBpdHMgY3VycmVudGx5IHZpZXdhYmxlIGFyZWEgLS1cclxuXHRcdFx0XHRcdFx0XHQgYW5kIHRoZXJlZm9yZSBlbmQgdmFsdWVzIGRvIG5vdCBuZWVkIHRvIGJlIGNvbXBvdW5kZWQgb250byBjdXJyZW50IHZhbHVlcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkVuZCA9ICQoZWxlbWVudCkub2Zmc2V0KClbc2Nyb2xsRGlyZWN0aW9uLnRvTG93ZXJDYXNlKCldICsgc2Nyb2xsT2Zmc2V0OyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogU2luY2UgdGhlcmUncyBvbmx5IG9uZSBmb3JtYXQgdGhhdCBzY3JvbGwncyBhc3NvY2lhdGVkIHR3ZWVuc0NvbnRhaW5lciBjYW4gdGFrZSwgd2UgY3JlYXRlIGl0IG1hbnVhbGx5LiAqL1xyXG5cdFx0XHRcdFx0XHR0d2VlbnNDb250YWluZXIgPSB7XHJcblx0XHRcdFx0XHRcdFx0c2Nyb2xsOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZTogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlOiBzY3JvbGxQb3NpdGlvbkN1cnJlbnQsXHJcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWU6IHNjcm9sbFBvc2l0aW9uQ3VycmVudCxcclxuXHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlOiBzY3JvbGxQb3NpdGlvbkVuZCxcclxuXHRcdFx0XHRcdFx0XHRcdHVuaXRUeXBlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZWFzaW5nOiBvcHRzLmVhc2luZyxcclxuXHRcdFx0XHRcdFx0XHRcdHNjcm9sbERhdGE6IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGFpbmVyOiBvcHRzLmNvbnRhaW5lcixcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBzY3JvbGxEaXJlY3Rpb24sXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFsdGVybmF0ZVZhbHVlOiBzY3JvbGxQb3NpdGlvbkN1cnJlbnRBbHRlcm5hdGVcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQ6IGVsZW1lbnRcclxuXHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1Zykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKFwidHdlZW5zQ29udGFpbmVyIChzY3JvbGwpOiBcIiwgdHdlZW5zQ29udGFpbmVyLnNjcm9sbCwgZWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0IFR3ZWVuIERhdGEgQ29uc3RydWN0aW9uIChmb3IgUmV2ZXJzZSlcclxuXHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdC8qIFJldmVyc2UgYWN0cyBsaWtlIGEgXCJzdGFydFwiIGFjdGlvbiBpbiB0aGF0IGEgcHJvcGVydHkgbWFwIGlzIGFuaW1hdGVkIHRvd2FyZC4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpc1xyXG5cdFx0XHRcdFx0XHQgdGhhdCB0aGUgcHJvcGVydHkgbWFwIHVzZWQgZm9yIHJldmVyc2UgaXMgdGhlIGludmVyc2Ugb2YgdGhlIG1hcCB1c2VkIGluIHRoZSBwcmV2aW91cyBjYWxsLiBUaHVzLCB3ZSBtYW5pcHVsYXRlXHJcblx0XHRcdFx0XHRcdCB0aGUgcHJldmlvdXMgY2FsbCB0byBjb25zdHJ1Y3Qgb3VyIG5ldyBtYXA6IHVzZSB0aGUgcHJldmlvdXMgbWFwJ3MgZW5kIHZhbHVlcyBhcyBvdXIgbmV3IG1hcCdzIHN0YXJ0IHZhbHVlcy4gQ29weSBvdmVyIGFsbCBvdGhlciBkYXRhLiAqL1xyXG5cdFx0XHRcdFx0XHQvKiBOb3RlOiBSZXZlcnNlIGNhbiBiZSBkaXJlY3RseSBjYWxsZWQgdmlhIHRoZSBcInJldmVyc2VcIiBwYXJhbWV0ZXIsIG9yIGl0IGNhbiBiZSBpbmRpcmVjdGx5IHRyaWdnZXJlZCB2aWEgdGhlIGxvb3Agb3B0aW9uLiAoTG9vcHMgYXJlIGNvbXBvc2VkIG9mIG11bHRpcGxlIHJldmVyc2VzLikgKi9cclxuXHRcdFx0XHRcdFx0LyogTm90ZTogUmV2ZXJzZSBjYWxscyBkbyBub3QgbmVlZCB0byBiZSBjb25zZWN1dGl2ZWx5IGNoYWluZWQgb250byBhIGN1cnJlbnRseS1hbmltYXRpbmcgZWxlbWVudCBpbiBvcmRlciB0byBvcGVyYXRlIG9uIGNhY2hlZCB2YWx1ZXM7XHJcblx0XHRcdFx0XHRcdCB0aGVyZSBpcyBubyBoYXJtIHRvIHJldmVyc2UgYmVpbmcgY2FsbGVkIG9uIGEgcG90ZW50aWFsbHkgc3RhbGUgZGF0YSBjYWNoZSBzaW5jZSByZXZlcnNlJ3MgYmVoYXZpb3IgaXMgc2ltcGx5IGRlZmluZWRcclxuXHRcdFx0XHRcdFx0IGFzIHJldmVydGluZyB0byB0aGUgZWxlbWVudCdzIHZhbHVlcyBhcyB0aGV5IHdlcmUgcHJpb3IgdG8gdGhlIHByZXZpb3VzICpWZWxvY2l0eSogY2FsbC4gKi9cclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcInJldmVyc2VcIikge1xyXG5cdFx0XHRcdFx0XHRkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIEFib3J0IGlmIHRoZXJlIGlzIG5vIHByaW9yIGFuaW1hdGlvbiBkYXRhIHRvIHJldmVyc2UgdG8uICovXHJcblx0XHRcdFx0XHRcdGlmICghZGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCFkYXRhLnR3ZWVuc0NvbnRhaW5lcikge1xyXG5cdFx0XHRcdFx0XHRcdC8qIERlcXVldWUgdGhlIGVsZW1lbnQgc28gdGhhdCB0aGlzIHF1ZXVlIGVudHJ5IHJlbGVhc2VzIGl0c2VsZiBpbW1lZGlhdGVseSwgYWxsb3dpbmcgc3Vic2VxdWVudCBxdWV1ZSBlbnRyaWVzIHRvIHJ1bi4gKi9cclxuXHRcdFx0XHRcdFx0XHQkLmRlcXVldWUoZWxlbWVudCwgb3B0cy5xdWV1ZSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0IE9wdGlvbnMgUGFyc2luZ1xyXG5cdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIElmIHRoZSBlbGVtZW50IHdhcyBoaWRkZW4gdmlhIHRoZSBkaXNwbGF5IG9wdGlvbiBpbiB0aGUgcHJldmlvdXMgY2FsbCxcclxuXHRcdFx0XHRcdFx0XHQgcmV2ZXJ0IGRpc3BsYXkgdG8gXCJhdXRvXCIgcHJpb3IgdG8gcmV2ZXJzYWwgc28gdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGFnYWluLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChkYXRhLm9wdHMuZGlzcGxheSA9PT0gXCJub25lXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGRhdGEub3B0cy5kaXNwbGF5ID0gXCJhdXRvXCI7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5vcHRzLnZpc2liaWxpdHkgPT09IFwiaGlkZGVuXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGRhdGEub3B0cy52aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgbG9vcCBvcHRpb24gd2FzIHNldCBpbiB0aGUgcHJldmlvdXMgY2FsbCwgZGlzYWJsZSBpdCBzbyB0aGF0IFwicmV2ZXJzZVwiIGNhbGxzIGFyZW4ndCByZWN1cnNpdmVseSBnZW5lcmF0ZWQuXHJcblx0XHRcdFx0XHRcdFx0IEZ1cnRoZXIsIHJlbW92ZSB0aGUgcHJldmlvdXMgY2FsbCdzIGNhbGxiYWNrIG9wdGlvbnM7IHR5cGljYWxseSwgdXNlcnMgZG8gbm90IHdhbnQgdGhlc2UgdG8gYmUgcmVmaXJlZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRkYXRhLm9wdHMubG9vcCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdGRhdGEub3B0cy5iZWdpbiA9IG51bGw7XHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5vcHRzLmNvbXBsZXRlID0gbnVsbDtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogU2luY2Ugd2UncmUgZXh0ZW5kaW5nIGFuIG9wdHMgb2JqZWN0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBleHRlbmRlZCB3aXRoIHRoZSBkZWZhdWx0cyBvcHRpb25zIG9iamVjdCxcclxuXHRcdFx0XHRcdFx0XHQgd2UgcmVtb3ZlIG5vbi1leHBsaWNpdGx5LWRlZmluZWQgcHJvcGVydGllcyB0aGF0IGFyZSBhdXRvLWFzc2lnbmVkIHZhbHVlcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuZWFzaW5nKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb3B0cy5lYXNpbmc7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuZHVyYXRpb24pIHtcclxuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvcHRzLmR1cmF0aW9uO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogVGhlIG9wdHMgb2JqZWN0IHVzZWQgZm9yIHJldmVyc2FsIGlzIGFuIGV4dGVuc2lvbiBvZiB0aGUgb3B0aW9ucyBvYmplY3Qgb3B0aW9uYWxseSBwYXNzZWQgaW50byB0aGlzXHJcblx0XHRcdFx0XHRcdFx0IHJldmVyc2UgY2FsbCBwbHVzIHRoZSBvcHRpb25zIHVzZWQgaW4gdGhlIHByZXZpb3VzIFZlbG9jaXR5IGNhbGwuICovXHJcblx0XHRcdFx0XHRcdFx0b3B0cyA9ICQuZXh0ZW5kKHt9LCBkYXRhLm9wdHMsIG9wdHMpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCBUd2VlbnMgQ29udGFpbmVyIFJlY29uc3RydWN0aW9uXHJcblx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIENyZWF0ZSBhIGRlZXB5IGNvcHkgKGluZGljYXRlZCB2aWEgdGhlIHRydWUgZmxhZykgb2YgdGhlIHByZXZpb3VzIGNhbGwncyB0d2VlbnNDb250YWluZXIuICovXHJcblx0XHRcdFx0XHRcdFx0bGFzdFR3ZWVuc0NvbnRhaW5lciA9ICQuZXh0ZW5kKHRydWUsIHt9LCBkYXRhID8gZGF0YS50d2VlbnNDb250YWluZXIgOiBudWxsKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogTWFuaXB1bGF0ZSB0aGUgcHJldmlvdXMgdHdlZW5zQ29udGFpbmVyIGJ5IHJlcGxhY2luZyBpdHMgZW5kIHZhbHVlcyBhbmQgY3VycmVudFZhbHVlcyB3aXRoIGl0cyBzdGFydCB2YWx1ZXMuICovXHJcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbGFzdFR3ZWVuIGluIGxhc3RUd2VlbnNDb250YWluZXIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIEluIGFkZGl0aW9uIHRvIHR3ZWVuIGRhdGEsIHR3ZWVuc0NvbnRhaW5lcnMgY29udGFpbiBhbiBlbGVtZW50IHByb3BlcnR5IHRoYXQgd2UgaWdub3JlIGhlcmUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAobGFzdFR3ZWVuc0NvbnRhaW5lci5oYXNPd25Qcm9wZXJ0eShsYXN0VHdlZW4pICYmIGxhc3RUd2VlbiAhPT0gXCJlbGVtZW50XCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxhc3RTdGFydFZhbHVlID0gbGFzdFR3ZWVuc0NvbnRhaW5lcltsYXN0VHdlZW5dLnN0YXJ0VmFsdWU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsYXN0VHdlZW5zQ29udGFpbmVyW2xhc3RUd2Vlbl0uc3RhcnRWYWx1ZSA9IGxhc3RUd2VlbnNDb250YWluZXJbbGFzdFR3ZWVuXS5jdXJyZW50VmFsdWUgPSBsYXN0VHdlZW5zQ29udGFpbmVyW2xhc3RUd2Vlbl0uZW5kVmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxhc3RUd2VlbnNDb250YWluZXJbbGFzdFR3ZWVuXS5lbmRWYWx1ZSA9IGxhc3RTdGFydFZhbHVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogRWFzaW5nIGlzIHRoZSBvbmx5IG9wdGlvbiB0aGF0IGVtYmVkcyBpbnRvIHRoZSBpbmRpdmlkdWFsIHR3ZWVuIGRhdGEgKHNpbmNlIGl0IGNhbiBiZSBkZWZpbmVkIG9uIGEgcGVyLXByb3BlcnR5IGJhc2lzKS5cclxuXHRcdFx0XHRcdFx0XHRcdFx0IEFjY29yZGluZ2x5LCBldmVyeSBwcm9wZXJ0eSdzIGVhc2luZyB2YWx1ZSBtdXN0IGJlIHVwZGF0ZWQgd2hlbiBhbiBvcHRpb25zIG9iamVjdCBpcyBwYXNzZWQgaW4gd2l0aCBhIHJldmVyc2UgY2FsbC5cclxuXHRcdFx0XHRcdFx0XHRcdFx0IFRoZSBzaWRlIGVmZmVjdCBvZiB0aGlzIGV4dGVuc2liaWxpdHkgaXMgdGhhdCBhbGwgcGVyLXByb3BlcnR5IGVhc2luZyB2YWx1ZXMgYXJlIGZvcmNlZnVsbHkgcmVzZXQgdG8gdGhlIG5ldyB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFUeXBlLmlzRW1wdHlPYmplY3Qob3B0aW9ucykpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsYXN0VHdlZW5zQ29udGFpbmVyW2xhc3RUd2Vlbl0uZWFzaW5nID0gb3B0cy5lYXNpbmc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1Zykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKFwicmV2ZXJzZSB0d2VlbnNDb250YWluZXIgKFwiICsgbGFzdFR3ZWVuICsgXCIpOiBcIiArIEpTT04uc3RyaW5naWZ5KGxhc3RUd2VlbnNDb250YWluZXJbbGFzdFR3ZWVuXSksIGVsZW1lbnQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHR0d2VlbnNDb250YWluZXIgPSBsYXN0VHdlZW5zQ29udGFpbmVyO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0IFR3ZWVuIERhdGEgQ29uc3RydWN0aW9uIChmb3IgU3RhcnQpXHJcblx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJzdGFydFwiKSB7XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHQgVmFsdWUgVHJhbnNmZXJyaW5nXHJcblx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0LyogSWYgdGhpcyBxdWV1ZSBlbnRyeSBmb2xsb3dzIGEgcHJldmlvdXMgVmVsb2NpdHktaW5pdGlhdGVkIHF1ZXVlIGVudHJ5ICphbmQqIGlmIHRoaXMgZW50cnkgd2FzIGNyZWF0ZWRcclxuXHRcdFx0XHRcdFx0IHdoaWxlIHRoZSBlbGVtZW50IHdhcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBhbmltYXRlZCBieSBWZWxvY2l0eSwgdGhlbiB0aGlzIGN1cnJlbnQgY2FsbCBpcyBzYWZlIHRvIHVzZVxyXG5cdFx0XHRcdFx0XHQgdGhlIGVuZCB2YWx1ZXMgZnJvbSB0aGUgcHJpb3IgY2FsbCBhcyBpdHMgc3RhcnQgdmFsdWVzLiBWZWxvY2l0eSBhdHRlbXB0cyB0byBwZXJmb3JtIHRoaXMgdmFsdWUgdHJhbnNmZXJcclxuXHRcdFx0XHRcdFx0IHByb2Nlc3Mgd2hlbmV2ZXIgcG9zc2libGUgaW4gb3JkZXIgdG8gYXZvaWQgcmVxdWVyeWluZyB0aGUgRE9NLiAqL1xyXG5cdFx0XHRcdFx0XHQvKiBJZiB2YWx1ZXMgYXJlbid0IHRyYW5zZmVycmVkIGZyb20gYSBwcmlvciBjYWxsIGFuZCBzdGFydCB2YWx1ZXMgd2VyZSBub3QgZm9yY2VmZWQgYnkgdGhlIHVzZXIgKG1vcmUgb24gdGhpcyBiZWxvdyksXHJcblx0XHRcdFx0XHRcdCB0aGVuIHRoZSBET00gaXMgcXVlcmllZCBmb3IgdGhlIGVsZW1lbnQncyBjdXJyZW50IHZhbHVlcyBhcyBhIGxhc3QgcmVzb3J0LiAqL1xyXG5cdFx0XHRcdFx0XHQvKiBOb3RlOiBDb252ZXJzZWx5LCBhbmltYXRpb24gcmV2ZXJzYWwgKGFuZCBsb29waW5nKSAqYWx3YXlzKiBwZXJmb3JtIGludGVyLWNhbGwgdmFsdWUgdHJhbnNmZXJzOyB0aGV5IG5ldmVyIHJlcXVlcnkgdGhlIERPTS4gKi9cclxuXHJcblx0XHRcdFx0XHRcdGRhdGEgPSBEYXRhKGVsZW1lbnQpO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogVGhlIHBlci1lbGVtZW50IGlzQW5pbWF0aW5nIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIGl0J3Mgc2FmZSAoaS5lLiB0aGUgZGF0YSBpc24ndCBzdGFsZSlcclxuXHRcdFx0XHRcdFx0IHRvIHRyYW5zZmVyIG92ZXIgZW5kIHZhbHVlcyB0byB1c2UgYXMgc3RhcnQgdmFsdWVzLiBJZiBpdCdzIHNldCB0byB0cnVlIGFuZCB0aGVyZSBpcyBhIHByZXZpb3VzXHJcblx0XHRcdFx0XHRcdCBWZWxvY2l0eSBjYWxsIHRvIHB1bGwgdmFsdWVzIGZyb20sIGRvIHNvLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLnR3ZWVuc0NvbnRhaW5lciAmJiBkYXRhLmlzQW5pbWF0aW5nID09PSB0cnVlKSB7XHJcblx0XHRcdFx0XHRcdFx0bGFzdFR3ZWVuc0NvbnRhaW5lciA9IGRhdGEudHdlZW5zQ29udGFpbmVyO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdCBUd2VlbiBEYXRhIENhbGN1bGF0aW9uXHJcblx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBwcm9wZXJ0eSBkYXRhIGFuZCBkZWZhdWx0cyBlbmRWYWx1ZSwgZWFzaW5nLCBhbmQgc3RhcnRWYWx1ZSBhcyBhcHByb3ByaWF0ZS4gKi9cclxuXHRcdFx0XHRcdFx0LyogUHJvcGVydHkgbWFwIHZhbHVlcyBjYW4gZWl0aGVyIHRha2UgdGhlIGZvcm0gb2YgMSkgYSBzaW5nbGUgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBlbmQgdmFsdWUsXHJcblx0XHRcdFx0XHRcdCBvciAyKSBhbiBhcnJheSBpbiB0aGUgZm9ybSBvZiBbIGVuZFZhbHVlLCBbLCBlYXNpbmddIFssIHN0YXJ0VmFsdWVdIF0uXHJcblx0XHRcdFx0XHRcdCBUaGUgb3B0aW9uYWwgdGhpcmQgcGFyYW1ldGVyIGlzIGEgZm9yY2VmZWQgc3RhcnRWYWx1ZSB0byBiZSB1c2VkIGluc3RlYWQgb2YgcXVlcnlpbmcgdGhlIERPTSBmb3JcclxuXHRcdFx0XHRcdFx0IHRoZSBlbGVtZW50J3MgY3VycmVudCB2YWx1ZS4gUmVhZCBWZWxvY2l0eSdzIGRvY21lbnRhdGlvbiB0byBsZWFybiBtb3JlIGFib3V0IGZvcmNlZmVlZGluZzogVmVsb2NpdHlKUy5vcmcvI2ZvcmNlZmVlZGluZyAqL1xyXG5cdFx0XHRcdFx0XHR2YXIgcGFyc2VQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24odmFsdWVEYXRhLCBza2lwUmVzb2x2aW5nRWFzaW5nKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGVuZFZhbHVlLCBlYXNpbmcsIHN0YXJ0VmFsdWU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIElmIHdlIGhhdmUgYSBmdW5jdGlvbiBhcyB0aGUgbWFpbiBhcmd1bWVudCB0aGVuIHJlc29sdmUgaXQgZmlyc3QsIGluIGNhc2UgaXQgcmV0dXJucyBhbiBhcnJheSB0aGF0IG5lZWRzIHRvIGJlIHNwbGl0ICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKFR5cGUuaXNGdW5jdGlvbih2YWx1ZURhdGEpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZURhdGEgPSB2YWx1ZURhdGEuY2FsbChlbGVtZW50LCBlbGVtZW50QXJyYXlJbmRleCwgZWxlbWVudHNMZW5ndGgpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogSGFuZGxlIHRoZSBhcnJheSBmb3JtYXQsIHdoaWNoIGNhbiBiZSBzdHJ1Y3R1cmVkIGFzIG9uZSBvZiB0aHJlZSBwb3RlbnRpYWwgb3ZlcmxvYWRzOlxyXG5cdFx0XHRcdFx0XHRcdCBBKSBbIGVuZFZhbHVlLCBlYXNpbmcsIHN0YXJ0VmFsdWUgXSwgQikgWyBlbmRWYWx1ZSwgZWFzaW5nIF0sIG9yIEMpIFsgZW5kVmFsdWUsIHN0YXJ0VmFsdWUgXSAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChUeXBlLmlzQXJyYXkodmFsdWVEYXRhKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogZW5kVmFsdWUgaXMgYWx3YXlzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheS4gRG9uJ3QgYm90aGVyIHZhbGlkYXRpbmcgZW5kVmFsdWUncyB2YWx1ZSBub3dcclxuXHRcdFx0XHRcdFx0XHRcdCBzaW5jZSB0aGUgZW5zdWluZyBwcm9wZXJ0eSBjeWNsaW5nIGxvZ2ljIGRvZXMgdGhhdC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gdmFsdWVEYXRhWzBdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFR3by1pdGVtIGFycmF5IGZvcm1hdDogSWYgdGhlIHNlY29uZCBpdGVtIGlzIGEgbnVtYmVyLCBmdW5jdGlvbiwgb3IgaGV4IHN0cmluZywgdHJlYXQgaXQgYXMgYVxyXG5cdFx0XHRcdFx0XHRcdFx0IHN0YXJ0IHZhbHVlIHNpbmNlIGVhc2luZ3MgY2FuIG9ubHkgYmUgbm9uLWhleCBzdHJpbmdzIG9yIGFycmF5cy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmICgoIVR5cGUuaXNBcnJheSh2YWx1ZURhdGFbMV0pICYmIC9eW1xcZC1dLy50ZXN0KHZhbHVlRGF0YVsxXSkpIHx8IFR5cGUuaXNGdW5jdGlvbih2YWx1ZURhdGFbMV0pIHx8IENTUy5SZWdFeC5pc0hleC50ZXN0KHZhbHVlRGF0YVsxXSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IHZhbHVlRGF0YVsxXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogVHdvIG9yIHRocmVlLWl0ZW0gYXJyYXk6IElmIHRoZSBzZWNvbmQgaXRlbSBpcyBhIG5vbi1oZXggc3RyaW5nIGVhc2luZyBuYW1lIG9yIGFuIGFycmF5LCB0cmVhdCBpdCBhcyBhbiBlYXNpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKChUeXBlLmlzU3RyaW5nKHZhbHVlRGF0YVsxXSkgJiYgIUNTUy5SZWdFeC5pc0hleC50ZXN0KHZhbHVlRGF0YVsxXSkgJiYgVmVsb2NpdHkuRWFzaW5nc1t2YWx1ZURhdGFbMV1dKSB8fCBUeXBlLmlzQXJyYXkodmFsdWVEYXRhWzFdKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlYXNpbmcgPSBza2lwUmVzb2x2aW5nRWFzaW5nID8gdmFsdWVEYXRhWzFdIDogZ2V0RWFzaW5nKHZhbHVlRGF0YVsxXSwgb3B0cy5kdXJhdGlvbik7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBEb24ndCBib3RoZXIgdmFsaWRhdGluZyBzdGFydFZhbHVlJ3MgdmFsdWUgbm93IHNpbmNlIHRoZSBlbnN1aW5nIHByb3BlcnR5IGN5Y2xpbmcgbG9naWMgaW5oZXJlbnRseSBkb2VzIHRoYXQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSB2YWx1ZURhdGFbMl07XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gdmFsdWVEYXRhWzFdIHx8IHZhbHVlRGF0YVsyXTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdC8qIEhhbmRsZSB0aGUgc2luZ2xlLXZhbHVlIGZvcm1hdC4gKi9cclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSB2YWx1ZURhdGE7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBEZWZhdWx0IHRvIHRoZSBjYWxsJ3MgZWFzaW5nIGlmIGEgcGVyLXByb3BlcnR5IGVhc2luZyB0eXBlIHdhcyBub3QgZGVmaW5lZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoIXNraXBSZXNvbHZpbmdFYXNpbmcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGVhc2luZyA9IGVhc2luZyB8fCBvcHRzLmVhc2luZztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIElmIGZ1bmN0aW9ucyB3ZXJlIHBhc3NlZCBpbiBhcyB2YWx1ZXMsIHBhc3MgdGhlIGZ1bmN0aW9uIHRoZSBjdXJyZW50IGVsZW1lbnQgYXMgaXRzIGNvbnRleHQsXHJcblx0XHRcdFx0XHRcdFx0IHBsdXMgdGhlIGVsZW1lbnQncyBpbmRleCBhbmQgdGhlIGVsZW1lbnQgc2V0J3Mgc2l6ZSBhcyBhcmd1bWVudHMuIFRoZW4sIGFzc2lnbiB0aGUgcmV0dXJuZWQgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKFR5cGUuaXNGdW5jdGlvbihlbmRWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gZW5kVmFsdWUuY2FsbChlbGVtZW50LCBlbGVtZW50QXJyYXlJbmRleCwgZWxlbWVudHNMZW5ndGgpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKFR5cGUuaXNGdW5jdGlvbihzdGFydFZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IHN0YXJ0VmFsdWUuY2FsbChlbGVtZW50LCBlbGVtZW50QXJyYXlJbmRleCwgZWxlbWVudHNMZW5ndGgpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogQWxsb3cgc3RhcnRWYWx1ZSB0byBiZSBsZWZ0IGFzIHVuZGVmaW5lZCB0byBpbmRpY2F0ZSB0byB0aGUgZW5zdWluZyBjb2RlIHRoYXQgaXRzIHZhbHVlIHdhcyBub3QgZm9yY2VmZWQuICovXHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFtlbmRWYWx1ZSB8fCAwLCBlYXNpbmcsIHN0YXJ0VmFsdWVdO1xyXG5cdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIGZpeFByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWVEYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogSW4gY2FzZSB0aGlzIHByb3BlcnR5IGlzIGEgaG9vaywgdGhlcmUgYXJlIGNpcmN1bXN0YW5jZXMgd2hlcmUgd2Ugd2lsbCBpbnRlbmQgdG8gd29yayBvbiB0aGUgaG9vaydzIHJvb3QgcHJvcGVydHkgYW5kIG5vdCB0aGUgaG9va2VkIHN1YnByb3BlcnR5LiAqL1xyXG5cdFx0XHRcdFx0XHRcdHZhciByb290UHJvcGVydHkgPSBDU1MuSG9va3MuZ2V0Um9vdChwcm9wZXJ0eSksXHJcblx0XHRcdFx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIFBhcnNlIG91dCBlbmRWYWx1ZSwgZWFzaW5nLCBhbmQgc3RhcnRWYWx1ZSBmcm9tIHRoZSBwcm9wZXJ0eSdzIGRhdGEuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gdmFsdWVEYXRhWzBdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlYXNpbmcgPSB2YWx1ZURhdGFbMV0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSB2YWx1ZURhdGFbMl0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm47XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCBTdGFydCBWYWx1ZSBTb3VyY2luZ1xyXG5cdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogT3RoZXIgdGhhbiBmb3IgdGhlIGR1bW15IHR3ZWVuIHByb3BlcnR5LCBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIgKGFuZCBkbyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIG5vcm1hbGl6YXRpb24pIHdpbGxcclxuXHRcdFx0XHRcdFx0XHQgaW5oZXJlbnRseSBwcm9kdWNlIG5vIHN0eWxlIGNoYW5nZXMgd2hlbiBzZXQsIHNvIHRoZXkgYXJlIHNraXBwZWQgaW4gb3JkZXIgdG8gZGVjcmVhc2UgYW5pbWF0aW9uIHRpY2sgb3ZlcmhlYWQuXHJcblx0XHRcdFx0XHRcdFx0IFByb3BlcnR5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZCB2aWEgcHJlZml4Q2hlY2soKSwgd2hpY2ggcmV0dXJucyBhIGZhbHNlIGZsYWcgd2hlbiBubyBzdXBwb3J0ZWQgaXMgZGV0ZWN0ZWQuICovXHJcblx0XHRcdFx0XHRcdFx0LyogTm90ZTogU2luY2UgU1ZHIGVsZW1lbnRzIGhhdmUgc29tZSBvZiB0aGVpciBwcm9wZXJ0aWVzIGRpcmVjdGx5IGFwcGxpZWQgYXMgSFRNTCBhdHRyaWJ1dGVzLFxyXG5cdFx0XHRcdFx0XHRcdCB0aGVyZSBpcyBubyB3YXkgdG8gY2hlY2sgZm9yIHRoZWlyIGV4cGxpY2l0IGJyb3dzZXIgc3VwcG9ydCwgYW5kIHNvIHdlIHNraXAgc2tpcCB0aGlzIGNoZWNrIGZvciB0aGVtLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmICgoIWRhdGEgfHwgIWRhdGEuaXNTVkcpICYmIHJvb3RQcm9wZXJ0eSAhPT0gXCJ0d2VlblwiICYmIENTUy5OYW1lcy5wcmVmaXhDaGVjayhyb290UHJvcGVydHkpWzFdID09PSBmYWxzZSAmJiBDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFtyb290UHJvcGVydHldID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1Zykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIlNraXBwaW5nIFtcIiArIHJvb3RQcm9wZXJ0eSArIFwiXSBkdWUgdG8gYSBsYWNrIG9mIGJyb3dzZXIgc3VwcG9ydC5cIik7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgZGlzcGxheSBvcHRpb24gaXMgYmVpbmcgc2V0IHRvIGEgbm9uLVwibm9uZVwiIChlLmcuIFwiYmxvY2tcIikgYW5kIG9wYWNpdHkgKGZpbHRlciBvbiBJRTw9OCkgaXMgYmVpbmdcclxuXHRcdFx0XHRcdFx0XHQgYW5pbWF0ZWQgdG8gYW4gZW5kVmFsdWUgb2Ygbm9uLXplcm8sIHRoZSB1c2VyJ3MgaW50ZW50aW9uIGlzIHRvIGZhZGUgaW4gZnJvbSBpbnZpc2libGUsIHRodXMgd2UgZm9yY2VmZWVkIG9wYWNpdHlcclxuXHRcdFx0XHRcdFx0XHQgYSBzdGFydFZhbHVlIG9mIDAgaWYgaXRzIHN0YXJ0VmFsdWUgaGFzbid0IGFscmVhZHkgYmVlbiBzb3VyY2VkIGJ5IHZhbHVlIHRyYW5zZmVycmluZyBvciBwcmlvciBmb3JjZWZlZWRpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKCgob3B0cy5kaXNwbGF5ICE9PSB1bmRlZmluZWQgJiYgb3B0cy5kaXNwbGF5ICE9PSBudWxsICYmIG9wdHMuZGlzcGxheSAhPT0gXCJub25lXCIpIHx8IChvcHRzLnZpc2liaWxpdHkgIT09IHVuZGVmaW5lZCAmJiBvcHRzLnZpc2liaWxpdHkgIT09IFwiaGlkZGVuXCIpKSAmJiAvb3BhY2l0eXxmaWx0ZXIvLnRlc3QocHJvcGVydHkpICYmICFzdGFydFZhbHVlICYmIGVuZFZhbHVlICE9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gMDtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIElmIHZhbHVlcyBoYXZlIGJlZW4gdHJhbnNmZXJyZWQgZnJvbSB0aGUgcHJldmlvdXMgVmVsb2NpdHkgY2FsbCwgZXh0cmFjdCB0aGUgZW5kVmFsdWUgYW5kIHJvb3RQcm9wZXJ0eVZhbHVlXHJcblx0XHRcdFx0XHRcdFx0IGZvciBhbGwgb2YgdGhlIGN1cnJlbnQgY2FsbCdzIHByb3BlcnRpZXMgdGhhdCB3ZXJlICphbHNvKiBhbmltYXRlZCBpbiB0aGUgcHJldmlvdXMgY2FsbC4gKi9cclxuXHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBWYWx1ZSB0cmFuc2ZlcnJpbmcgY2FuIG9wdGlvbmFsbHkgYmUgZGlzYWJsZWQgYnkgdGhlIHVzZXIgdmlhIHRoZSBfY2FjaGVWYWx1ZXMgb3B0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChvcHRzLl9jYWNoZVZhbHVlcyAmJiBsYXN0VHdlZW5zQ29udGFpbmVyICYmIGxhc3RUd2VlbnNDb250YWluZXJbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoc3RhcnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSBsYXN0VHdlZW5zQ29udGFpbmVyW3Byb3BlcnR5XS5lbmRWYWx1ZSArIGxhc3RUd2VlbnNDb250YWluZXJbcHJvcGVydHldLnVuaXRUeXBlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFRoZSBwcmV2aW91cyBjYWxsJ3Mgcm9vdFByb3BlcnR5VmFsdWUgaXMgZXh0cmFjdGVkIGZyb20gdGhlIGVsZW1lbnQncyBkYXRhIGNhY2hlIHNpbmNlIHRoYXQncyB0aGVcclxuXHRcdFx0XHRcdFx0XHRcdCBpbnN0YW5jZSBvZiByb290UHJvcGVydHlWYWx1ZSB0aGF0IGdldHMgZnJlc2hseSB1cGRhdGVkIGJ5IHRoZSB0d2VlbmluZyBwcm9jZXNzLCB3aGVyZWFzIHRoZSByb290UHJvcGVydHlWYWx1ZVxyXG5cdFx0XHRcdFx0XHRcdFx0IGF0dGFjaGVkIHRvIHRoZSBpbmNvbWluZyBsYXN0VHdlZW5zQ29udGFpbmVyIGlzIGVxdWFsIHRvIHRoZSByb290IHByb3BlcnR5J3MgdmFsdWUgcHJpb3IgdG8gYW55IHR3ZWVuaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWUgPSBkYXRhLnJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGVbcm9vdFByb3BlcnR5XTtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIElmIHZhbHVlcyB3ZXJlIG5vdCB0cmFuc2ZlcnJlZCBmcm9tIGEgcHJldmlvdXMgVmVsb2NpdHkgY2FsbCwgcXVlcnkgdGhlIERPTSBhcyBuZWVkZWQuICovXHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIEhhbmRsZSBob29rZWQgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChDU1MuSG9va3MucmVnaXN0ZXJlZFtwcm9wZXJ0eV0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHN0YXJ0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgcm9vdFByb3BlcnR5KTsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogVGhlIGZvbGxvd2luZyBnZXRQcm9wZXJ0eVZhbHVlKCkgY2FsbCBkb2VzIG5vdCBhY3R1YWxseSB0cmlnZ2VyIGEgRE9NIHF1ZXJ5O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBnZXRQcm9wZXJ0eVZhbHVlKCkgd2lsbCBleHRyYWN0IHRoZSBob29rIGZyb20gcm9vdFByb3BlcnR5VmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5LCByb290UHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgc3RhcnRWYWx1ZSBpcyBhbHJlYWR5IGRlZmluZWQgdmlhIGZvcmNlZmVlZGluZywgZG8gbm90IHF1ZXJ5IHRoZSBET00gZm9yIHRoZSByb290IHByb3BlcnR5J3MgdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IGp1c3QgZ3JhYiByb290UHJvcGVydHkncyB6ZXJvLXZhbHVlIHRlbXBsYXRlIGZyb20gQ1NTLkhvb2tzLiBUaGlzIG92ZXJ3cml0ZXMgdGhlIGVsZW1lbnQncyBhY3R1YWxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgcm9vdCBwcm9wZXJ0eSB2YWx1ZSAoaWYgb25lIGlzIHNldCksIGJ1dCB0aGlzIGlzIGFjY2VwdGFibGUgc2luY2UgdGhlIHByaW1hcnkgcmVhc29uIHVzZXJzIGZvcmNlZmVlZCBpc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCB0byBhdm9pZCBET00gcXVlcmllcywgYW5kIHRodXMgd2UgbGlrZXdpc2UgYXZvaWQgcXVlcnlpbmcgdGhlIERPTSBmb3IgdGhlIHJvb3QgcHJvcGVydHkncyB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBHcmFiIHRoaXMgaG9vaydzIHplcm8tdmFsdWUgdGVtcGxhdGUsIGUuZy4gXCIwcHggMHB4IDBweCBibGFja1wiLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gQ1NTLkhvb2tzLnRlbXBsYXRlc1tyb290UHJvcGVydHldWzFdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIEhhbmRsZSBub24taG9va2VkIHByb3BlcnRpZXMgdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiBkZWZpbmVkIHZpYSBmb3JjZWZlZWRpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHN0YXJ0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHkpOyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCBWYWx1ZSBEYXRhIEV4dHJhY3Rpb25cclxuXHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdHZhciBzZXBhcmF0ZWRWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWVVbml0VHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZVVuaXRUeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRvcGVyYXRvciA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBTZXBhcmF0ZXMgYSBwcm9wZXJ0eSB2YWx1ZSBpbnRvIGl0cyBudW1lcmljIHZhbHVlIGFuZCBpdHMgdW5pdCB0eXBlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHZhciBzZXBhcmF0ZVZhbHVlID0gZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdW5pdFR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bnVtZXJpY1ZhbHVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdG51bWVyaWNWYWx1ZSA9ICh2YWx1ZSB8fCBcIjBcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQudG9TdHJpbmcoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC50b0xvd2VyQ2FzZSgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogTWF0Y2ggdGhlIHVuaXQgdHlwZSBhdCB0aGUgZW5kIG9mIHRoZSB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZSgvWyVBLXpdKyQvLCBmdW5jdGlvbihtYXRjaCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogR3JhYiB0aGUgdW5pdCB0eXBlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pdFR5cGUgPSBtYXRjaDtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBTdHJpcCB0aGUgdW5pdCB0eXBlIG9mZiBvZiB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIElmIG5vIHVuaXQgdHlwZSB3YXMgc3VwcGxpZWQsIGFzc2lnbiBvbmUgdGhhdCBpcyBhcHByb3ByaWF0ZSBmb3IgdGhpcyBwcm9wZXJ0eSAoZS5nLiBcImRlZ1wiIGZvciByb3RhdGVaIG9yIFwicHhcIiBmb3Igd2lkdGgpLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCF1bml0VHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bml0VHlwZSA9IENTUy5WYWx1ZXMuZ2V0VW5pdFR5cGUocHJvcGVydHkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBbbnVtZXJpY1ZhbHVlLCB1bml0VHlwZV07XHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKHN0YXJ0VmFsdWUgIT09IGVuZFZhbHVlICYmIFR5cGUuaXNTdHJpbmcoc3RhcnRWYWx1ZSkgJiYgVHlwZS5pc1N0cmluZyhlbmRWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHBhdHRlcm4gPSBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGlTdGFydCA9IDAsIC8vIGluZGV4IGluIHN0YXJ0VmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpRW5kID0gMCwgLy8gaW5kZXggaW4gZW5kVmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhU3RhcnQgPSBbXSwgLy8gYXJyYXkgb2Ygc3RhcnRWYWx1ZSBudW1iZXJzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YUVuZCA9IFtdLCAvLyBhcnJheSBvZiBlbmRWYWx1ZSBudW1iZXJzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aW5DYWxjID0gMCwgLy8gS2VlcCB0cmFjayBvZiBiZWluZyBpbnNpZGUgYSBcImNhbGMoKVwiIHNvIHdlIGRvbid0IGR1cGxpY2F0ZSBpdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGluUkdCID0gMCwgLy8gS2VlcCB0cmFjayBvZiBiZWluZyBpbnNpZGUgYW4gUkdCIGFzIHdlIGNhbid0IHVzZSBmcmFjdGlvbmFsIHZhbHVlc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGluUkdCQSA9IDA7IC8vIEtlZXAgdHJhY2sgb2YgYmVpbmcgaW5zaWRlIGFuIFJHQkEgYXMgd2UgbXVzdCBwYXNzIGZyYWN0aW9uYWwgZm9yIHRoZSBhbHBoYSBjaGFubmVsXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IENTUy5Ib29rcy5maXhDb2xvcnMoc3RhcnRWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IENTUy5Ib29rcy5maXhDb2xvcnMoZW5kVmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKGlTdGFydCA8IHN0YXJ0VmFsdWUubGVuZ3RoICYmIGlFbmQgPCBlbmRWYWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNTdGFydCA9IHN0YXJ0VmFsdWVbaVN0YXJ0XSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNFbmQgPSBlbmRWYWx1ZVtpRW5kXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICgvW1xcZFxcLi1dLy50ZXN0KGNTdGFydCkgJiYgL1tcXGRcXC4tXS8udGVzdChjRW5kKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB0U3RhcnQgPSBjU3RhcnQsIC8vIHRlbXBvcmFyeSBjaGFyYWN0ZXIgYnVmZmVyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRFbmQgPSBjRW5kLCAvLyB0ZW1wb3JhcnkgY2hhcmFjdGVyIGJ1ZmZlclxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkb3RTdGFydCA9IFwiLlwiLCAvLyBNYWtlIHN1cmUgd2UgY2FuIG9ubHkgZXZlciBtYXRjaCBhIHNpbmdsZSBkb3QgaW4gYSBkZWNpbWFsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRvdEVuZCA9IFwiLlwiOyAvLyBNYWtlIHN1cmUgd2UgY2FuIG9ubHkgZXZlciBtYXRjaCBhIHNpbmdsZSBkb3QgaW4gYSBkZWNpbWFsXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdoaWxlICgrK2lTdGFydCA8IHN0YXJ0VmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjU3RhcnQgPSBzdGFydFZhbHVlW2lTdGFydF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY1N0YXJ0ID09PSBkb3RTdGFydCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkb3RTdGFydCA9IFwiLi5cIjsgLy8gQ2FuIG5ldmVyIG1hdGNoIHR3byBjaGFyYWN0ZXJzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCEvXFxkLy50ZXN0KGNTdGFydCkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0U3RhcnQgKz0gY1N0YXJ0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoKytpRW5kIDwgZW5kVmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjRW5kID0gZW5kVmFsdWVbaUVuZF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY0VuZCA9PT0gZG90RW5kKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRvdEVuZCA9IFwiLi5cIjsgLy8gQ2FuIG5ldmVyIG1hdGNoIHR3byBjaGFyYWN0ZXJzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCEvXFxkLy50ZXN0KGNFbmQpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dEVuZCArPSBjRW5kO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdVN0YXJ0ID0gQ1NTLkhvb2tzLmdldFVuaXQoc3RhcnRWYWx1ZSwgaVN0YXJ0KSwgLy8gdGVtcG9yYXJ5IHVuaXQgdHlwZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1RW5kID0gQ1NTLkhvb2tzLmdldFVuaXQoZW5kVmFsdWUsIGlFbmQpOyAvLyB0ZW1wb3JhcnkgdW5pdCB0eXBlXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlTdGFydCArPSB1U3RhcnQubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlFbmQgKz0gdUVuZC5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHVTdGFydCA9PT0gdUVuZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU2FtZSB1bml0c1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRTdGFydCA9PT0gdEVuZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTYW1lIG51bWJlcnMsIHNvIGp1c3QgY29weSBvdmVyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm4gKz0gdFN0YXJ0ICsgdVN0YXJ0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGlmZmVyZW50IG51bWJlcnMsIHNvIHN0b3JlIHRoZW1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybiArPSBcIntcIiArIGFTdGFydC5sZW5ndGggKyAoaW5SR0IgPyBcIiFcIiA6IFwiXCIpICsgXCJ9XCIgKyB1U3RhcnQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFTdGFydC5wdXNoKHBhcnNlRmxvYXQodFN0YXJ0KSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFFbmQucHVzaChwYXJzZUZsb2F0KHRFbmQpKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGlmZmVyZW50IHVuaXRzLCBzbyBwdXQgaW50byBhIFwiY2FsYyhmcm9tICsgdG8pXCIgYW5kIGFuaW1hdGUgZWFjaCBzaWRlIHRvL2Zyb20gemVyb1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5TdGFydCA9IHBhcnNlRmxvYXQodFN0YXJ0KSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuRW5kID0gcGFyc2VGbG9hdCh0RW5kKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuICs9IChpbkNhbGMgPCA1ID8gXCJjYWxjXCIgOiBcIlwiKSArIFwiKFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KyAoblN0YXJ0ID8gXCJ7XCIgKyBhU3RhcnQubGVuZ3RoICsgKGluUkdCID8gXCIhXCIgOiBcIlwiKSArIFwifVwiIDogXCIwXCIpICsgdVN0YXJ0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KyBcIiArIFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KyAobkVuZCA/IFwie1wiICsgKGFTdGFydC5sZW5ndGggKyAoblN0YXJ0ID8gMSA6IDApKSArIChpblJHQiA/IFwiIVwiIDogXCJcIikgKyBcIn1cIiA6IFwiMFwiKSArIHVFbmRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQrIFwiKVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG5TdGFydCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhU3RhcnQucHVzaChuU3RhcnQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhRW5kLnB1c2goMCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobkVuZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhU3RhcnQucHVzaCgwKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUVuZC5wdXNoKG5FbmQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChjU3RhcnQgPT09IGNFbmQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuICs9IGNTdGFydDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpU3RhcnQrKztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpRW5kKys7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gS2VlcCB0cmFjayBvZiBiZWluZyBpbnNpZGUgYSBjYWxjKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaW5DYWxjID09PSAwICYmIGNTdGFydCA9PT0gXCJjXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5DYWxjID09PSAxICYmIGNTdGFydCA9PT0gXCJhXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5DYWxjID09PSAyICYmIGNTdGFydCA9PT0gXCJsXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5DYWxjID09PSAzICYmIGNTdGFydCA9PT0gXCJjXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5DYWxjID49IDQgJiYgY1N0YXJ0ID09PSBcIihcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluQ2FsYysrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoKGluQ2FsYyAmJiBpbkNhbGMgPCA1KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR8fCBpbkNhbGMgPj0gNCAmJiBjU3RhcnQgPT09IFwiKVwiICYmIC0taW5DYWxjIDwgNSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5DYWxjID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gS2VlcCB0cmFjayBvZiBiZWluZyBpbnNpZGUgYW4gcmdiKCkgLyByZ2JhKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaW5SR0IgPT09IDAgJiYgY1N0YXJ0ID09PSBcInJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR8fCBpblJHQiA9PT0gMSAmJiBjU3RhcnQgPT09IFwiZ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHx8IGluUkdCID09PSAyICYmIGNTdGFydCA9PT0gXCJiXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5SR0IgPT09IDMgJiYgY1N0YXJ0ID09PSBcImFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR8fCBpblJHQiA+PSAzICYmIGNTdGFydCA9PT0gXCIoXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaW5SR0IgPT09IDMgJiYgY1N0YXJ0ID09PSBcImFcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpblJHQkEgPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5SR0IrKztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGluUkdCQSAmJiBjU3RhcnQgPT09IFwiLFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoKytpblJHQkEgPiAzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluUkdCID0gaW5SR0JBID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKChpblJHQkEgJiYgaW5SR0IgPCAoaW5SR0JBID8gNSA6IDQpKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR8fCBpblJHQiA+PSAoaW5SR0JBID8gNCA6IDMpICYmIGNTdGFydCA9PT0gXCIpXCIgJiYgLS1pblJHQiA8IChpblJHQkEgPyA1IDogNCkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluUkdCID0gaW5SR0JBID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aW5DYWxjID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBjaGFuZ2luZyB1bml0cywgZml4aW5nIGNvbG91cnNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGlTdGFydCAhPT0gc3RhcnRWYWx1ZS5sZW5ndGggfHwgaUVuZCAhPT0gZW5kVmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1Zykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCJUcnlpbmcgdG8gcGF0dGVybiBtYXRjaCBtaXMtbWF0Y2hlZCBzdHJpbmdzIFtcXFwiXCIgKyBlbmRWYWx1ZSArIFwiXFxcIiwgXFxcIlwiICsgc3RhcnRWYWx1ZSArIFwiXFxcIl1cIik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybiA9IHVuZGVmaW5lZDtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChwYXR0ZXJuKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhU3RhcnQubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFZlbG9jaXR5LmRlYnVnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIlBhdHRlcm4gZm91bmQgXFxcIlwiICsgcGF0dGVybiArIFwiXFxcIiAtPiBcIiwgYVN0YXJ0LCBhRW5kLCBcIltcIiArIHN0YXJ0VmFsdWUgKyBcIixcIiArIGVuZFZhbHVlICsgXCJdXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gYVN0YXJ0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gYUVuZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVVuaXRUeXBlID0gc3RhcnRWYWx1ZVVuaXRUeXBlID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuID0gdW5kZWZpbmVkO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRpZiAoIXBhdHRlcm4pIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIFNlcGFyYXRlIHN0YXJ0VmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRzZXBhcmF0ZWRWYWx1ZSA9IHNlcGFyYXRlVmFsdWUocHJvcGVydHksIHN0YXJ0VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IHNlcGFyYXRlZFZhbHVlWzBdO1xyXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZVVuaXRUeXBlID0gc2VwYXJhdGVkVmFsdWVbMV07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogU2VwYXJhdGUgZW5kVmFsdWUsIGFuZCBleHRyYWN0IGEgdmFsdWUgb3BlcmF0b3IgKGUuZy4gXCIrPVwiLCBcIi09XCIpIGlmIG9uZSBleGlzdHMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRzZXBhcmF0ZWRWYWx1ZSA9IHNlcGFyYXRlVmFsdWUocHJvcGVydHksIGVuZFZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gc2VwYXJhdGVkVmFsdWVbMF0ucmVwbGFjZSgvXihbKy1cXC8qXSk9LywgZnVuY3Rpb24obWF0Y2gsIHN1Yk1hdGNoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG9wZXJhdG9yID0gc3ViTWF0Y2g7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBTdHJpcCB0aGUgb3BlcmF0b3Igb2ZmIG9mIHRoZSB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlVW5pdFR5cGUgPSBzZXBhcmF0ZWRWYWx1ZVsxXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBQYXJzZSBmbG9hdCB2YWx1ZXMgZnJvbSBlbmRWYWx1ZSBhbmQgc3RhcnRWYWx1ZS4gRGVmYXVsdCB0byAwIGlmIE5hTiBpcyByZXR1cm5lZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSBwYXJzZUZsb2F0KHN0YXJ0VmFsdWUpIHx8IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IHBhcnNlRmxvYXQoZW5kVmFsdWUpIHx8IDA7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdFx0IFByb3BlcnR5LVNwZWNpZmljIFZhbHVlIENvbnZlcnNpb25cclxuXHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogQ3VzdG9tIHN1cHBvcnQgZm9yIHByb3BlcnRpZXMgdGhhdCBkb24ndCBhY3R1YWxseSBhY2NlcHQgdGhlICUgdW5pdCB0eXBlLCBidXQgd2hlcmUgcG9sbHlmaWxsaW5nIGlzIHRyaXZpYWwgYW5kIHJlbGF0aXZlbHkgZm9vbHByb29mLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVuZFZhbHVlVW5pdFR5cGUgPT09IFwiJVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIEEgJS12YWx1ZSBmb250U2l6ZS9saW5lSGVpZ2h0IGlzIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQncyBmb250U2l6ZSAoYXMgb3Bwb3NlZCB0byB0aGUgcGFyZW50J3MgZGltZW5zaW9ucyksXHJcblx0XHRcdFx0XHRcdFx0XHRcdCB3aGljaCBpcyBpZGVudGljYWwgdG8gdGhlIGVtIHVuaXQncyBiZWhhdmlvciwgc28gd2UgcGlnZ3liYWNrIG9mZiBvZiB0aGF0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoL14oZm9udFNpemV8bGluZUhlaWdodCkkLy50ZXN0KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIENvbnZlcnQgJSBpbnRvIGFuIGVtIGRlY2ltYWwgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSBlbmRWYWx1ZSAvIDEwMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVVuaXRUeXBlID0gXCJlbVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIEZvciBzY2FsZVggYW5kIHNjYWxlWSwgY29udmVydCB0aGUgdmFsdWUgaW50byBpdHMgZGVjaW1hbCBmb3JtYXQgYW5kIHN0cmlwIG9mZiB0aGUgdW5pdCB0eXBlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKC9ec2NhbGUvLnRlc3QocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSBlbmRWYWx1ZSAvIDEwMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVVuaXRUeXBlID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBGb3IgUkdCIGNvbXBvbmVudHMsIHRha2UgdGhlIGRlZmluZWQgcGVyY2VudGFnZSBvZiAyNTUgYW5kIHN0cmlwIG9mZiB0aGUgdW5pdCB0eXBlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKC8oUmVkfEdyZWVufEJsdWUpJC9pLnRlc3QocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSAoZW5kVmFsdWUgLyAxMDApICogMjU1O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlVW5pdFR5cGUgPSBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0IFVuaXQgUmF0aW8gQ2FsY3VsYXRpb25cclxuXHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBXaGVuIHF1ZXJpZWQsIHRoZSBicm93c2VyIHJldHVybnMgKG1vc3QpIENTUyBwcm9wZXJ0eSB2YWx1ZXMgaW4gcGl4ZWxzLiBUaGVyZWZvcmUsIGlmIGFuIGVuZFZhbHVlIHdpdGggYSB1bml0IHR5cGUgb2ZcclxuXHRcdFx0XHRcdFx0XHQgJSwgZW0sIG9yIHJlbSBpcyBhbmltYXRlZCB0b3dhcmQsIHN0YXJ0VmFsdWUgbXVzdCBiZSBjb252ZXJ0ZWQgZnJvbSBwaXhlbHMgaW50byB0aGUgc2FtZSB1bml0IHR5cGUgYXMgZW5kVmFsdWUgaW4gb3JkZXJcclxuXHRcdFx0XHRcdFx0XHQgZm9yIHZhbHVlIG1hbmlwdWxhdGlvbiBsb2dpYyAoaW5jcmVtZW50L2RlY3JlbWVudCkgdG8gcHJvY2VlZC4gRnVydGhlciwgaWYgdGhlIHN0YXJ0VmFsdWUgd2FzIGZvcmNlZmVkIG9yIHRyYW5zZmVycmVkXHJcblx0XHRcdFx0XHRcdFx0IGZyb20gYSBwcmV2aW91cyBjYWxsLCBzdGFydFZhbHVlIG1heSBhbHNvIG5vdCBiZSBpbiBwaXhlbHMuIFVuaXQgY29udmVyc2lvbiBsb2dpYyB0aGVyZWZvcmUgY29uc2lzdHMgb2YgdHdvIHN0ZXBzOlxyXG5cdFx0XHRcdFx0XHRcdCAxKSBDYWxjdWxhdGluZyB0aGUgcmF0aW8gb2YgJS9lbS9yZW0vdmgvdncgcmVsYXRpdmUgdG8gcGl4ZWxzXHJcblx0XHRcdFx0XHRcdFx0IDIpIENvbnZlcnRpbmcgc3RhcnRWYWx1ZSBpbnRvIHRoZSBzYW1lIHVuaXQgb2YgbWVhc3VyZW1lbnQgYXMgZW5kVmFsdWUgYmFzZWQgb24gdGhlc2UgcmF0aW9zLiAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIFVuaXQgY29udmVyc2lvbiByYXRpb3MgYXJlIGNhbGN1bGF0ZWQgYnkgaW5zZXJ0aW5nIGEgc2libGluZyBub2RlIG5leHQgdG8gdGhlIHRhcmdldCBub2RlLCBjb3B5aW5nIG92ZXIgaXRzIHBvc2l0aW9uIHByb3BlcnR5LFxyXG5cdFx0XHRcdFx0XHRcdCBzZXR0aW5nIHZhbHVlcyB3aXRoIHRoZSB0YXJnZXQgdW5pdCB0eXBlIHRoZW4gY29tcGFyaW5nIHRoZSByZXR1cm5lZCBwaXhlbCB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBFdmVuIGlmIG9ubHkgb25lIG9mIHRoZXNlIHVuaXQgdHlwZXMgaXMgYmVpbmcgYW5pbWF0ZWQsIGFsbCB1bml0IHJhdGlvcyBhcmUgY2FsY3VsYXRlZCBhdCBvbmNlIHNpbmNlIHRoZSBvdmVyaGVhZFxyXG5cdFx0XHRcdFx0XHRcdCBvZiBiYXRjaGluZyB0aGUgU0VUcyBhbmQgR0VUcyB0b2dldGhlciB1cGZyb250IG91dHdlaWdodHMgdGhlIHBvdGVudGlhbCBvdmVyaGVhZFxyXG5cdFx0XHRcdFx0XHRcdCBvZiBsYXlvdXQgdGhyYXNoaW5nIGNhdXNlZCBieSByZS1xdWVyeWluZyBmb3IgdW5jYWxjdWxhdGVkIHJhdGlvcyBmb3Igc3Vic2VxdWVudGx5LXByb2Nlc3NlZCBwcm9wZXJ0aWVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIFRvZG86IFNoaWZ0IHRoaXMgbG9naWMgaW50byB0aGUgY2FsbHMnIGZpcnN0IHRpY2sgaW5zdGFuY2Ugc28gdGhhdCBpdCdzIHN5bmNlZCB3aXRoIFJBRi4gKi9cclxuXHRcdFx0XHRcdFx0XHR2YXIgY2FsY3VsYXRlVW5pdFJhdGlvcyA9IGZ1bmN0aW9uKCkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHRcdCBTYW1lIFJhdGlvIENoZWNrc1xyXG5cdFx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBUaGUgcHJvcGVydGllcyBiZWxvdyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZWxlbWVudCBkaWZmZXJzIHN1ZmZpY2llbnRseSBmcm9tIHRoaXMgY2FsbCdzXHJcblx0XHRcdFx0XHRcdFx0XHQgcHJldmlvdXNseSBpdGVyYXRlZCBlbGVtZW50IHRvIGFsc28gZGlmZmVyIGluIGl0cyB1bml0IGNvbnZlcnNpb24gcmF0aW9zLiBJZiB0aGUgcHJvcGVydGllcyBtYXRjaCB1cCB3aXRoIHRob3NlXHJcblx0XHRcdFx0XHRcdFx0XHQgb2YgdGhlIHByaW9yIGVsZW1lbnQsIHRoZSBwcmlvciBlbGVtZW50J3MgY29udmVyc2lvbiByYXRpb3MgYXJlIHVzZWQuIExpa2UgbW9zdCBvcHRpbWl6YXRpb25zIGluIFZlbG9jaXR5LFxyXG5cdFx0XHRcdFx0XHRcdFx0IHRoaXMgaXMgZG9uZSB0byBtaW5pbWl6ZSBET00gcXVlcnlpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgc2FtZVJhdGlvSW5kaWNhdG9ycyA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bXlQYXJlbnQ6IGVsZW1lbnQucGFyZW50Tm9kZSB8fCBkb2N1bWVudC5ib2R5LCAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0cG9zaXRpb246IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwicG9zaXRpb25cIiksIC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb250U2l6ZTogQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJmb250U2l6ZVwiKSAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogRGV0ZXJtaW5lIGlmIHRoZSBzYW1lICUgcmF0aW8gY2FuIGJlIHVzZWQuICUgaXMgYmFzZWQgb24gdGhlIGVsZW1lbnQncyBwb3NpdGlvbiB2YWx1ZSBhbmQgaXRzIHBhcmVudCdzIHdpZHRoIGFuZCBoZWlnaHQgZGltZW5zaW9ucy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzYW1lUGVyY2VudFJhdGlvID0gKChzYW1lUmF0aW9JbmRpY2F0b3JzLnBvc2l0aW9uID09PSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RQb3NpdGlvbikgJiYgKHNhbWVSYXRpb0luZGljYXRvcnMubXlQYXJlbnQgPT09IGNhbGxVbml0Q29udmVyc2lvbkRhdGEubGFzdFBhcmVudCkpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIERldGVybWluZSBpZiB0aGUgc2FtZSBlbSByYXRpbyBjYW4gYmUgdXNlZC4gZW0gaXMgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQncyBmb250U2l6ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzYW1lRW1SYXRpbyA9IChzYW1lUmF0aW9JbmRpY2F0b3JzLmZvbnRTaXplID09PSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RGb250U2l6ZSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogU3RvcmUgdGhlc2UgcmF0aW8gaW5kaWNhdG9ycyBjYWxsLXdpZGUgZm9yIHRoZSBuZXh0IGVsZW1lbnQgdG8gY29tcGFyZSBhZ2FpbnN0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FsbFVuaXRDb252ZXJzaW9uRGF0YS5sYXN0UGFyZW50ID0gc2FtZVJhdGlvSW5kaWNhdG9ycy5teVBhcmVudDtcclxuXHRcdFx0XHRcdFx0XHRcdGNhbGxVbml0Q29udmVyc2lvbkRhdGEubGFzdFBvc2l0aW9uID0gc2FtZVJhdGlvSW5kaWNhdG9ycy5wb3NpdGlvbjtcclxuXHRcdFx0XHRcdFx0XHRcdGNhbGxVbml0Q29udmVyc2lvbkRhdGEubGFzdEZvbnRTaXplID0gc2FtZVJhdGlvSW5kaWNhdG9ycy5mb250U2l6ZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0XHQgRWxlbWVudC1TcGVjaWZpYyBVbml0c1xyXG5cdFx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBJRTggcm91bmRzIHRvIHRoZSBuZWFyZXN0IHBpeGVsIHdoZW4gcmV0dXJuaW5nIENTUyB2YWx1ZXMsIHRodXMgd2UgcGVyZm9ybSBjb252ZXJzaW9ucyB1c2luZyBhIG1lYXN1cmVtZW50XHJcblx0XHRcdFx0XHRcdFx0XHQgb2YgMTAwIChpbnN0ZWFkIG9mIDEpIHRvIGdpdmUgb3VyIHJhdGlvcyBhIHByZWNpc2lvbiBvZiBhdCBsZWFzdCAyIGRlY2ltYWwgdmFsdWVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIG1lYXN1cmVtZW50ID0gMTAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXRSYXRpb3MgPSB7fTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXNhbWVFbVJhdGlvIHx8ICFzYW1lUGVyY2VudFJhdGlvKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBkdW1teSA9IGRhdGEgJiYgZGF0YS5pc1NWRyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwicmVjdFwiKSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5pbml0KGR1bW15KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2FtZVJhdGlvSW5kaWNhdG9ycy5teVBhcmVudC5hcHBlbmRDaGlsZChkdW1teSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBUbyBhY2N1cmF0ZWx5IGFuZCBjb25zaXN0ZW50bHkgY2FsY3VsYXRlIGNvbnZlcnNpb24gcmF0aW9zLCB0aGUgZWxlbWVudCdzIGNhc2NhZGVkIG92ZXJmbG93IGFuZCBib3gtc2l6aW5nIGFyZSBzdHJpcHBlZC5cclxuXHRcdFx0XHRcdFx0XHRcdFx0IFNpbWlsYXJseSwgc2luY2Ugd2lkdGgvaGVpZ2h0IGNhbiBiZSBhcnRpZmljaWFsbHkgY29uc3RyYWluZWQgYnkgdGhlaXIgbWluLS9tYXgtIGVxdWl2YWxlbnRzLCB0aGVzZSBhcmUgY29udHJvbGxlZCBmb3IgYXMgd2VsbC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogT3ZlcmZsb3cgbXVzdCBiZSBhbHNvIGJlIGNvbnRyb2xsZWQgZm9yIHBlci1heGlzIHNpbmNlIHRoZSBvdmVyZmxvdyBwcm9wZXJ0eSBvdmVyd3JpdGVzIGl0cyBwZXItYXhpcyB2YWx1ZXMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdCQuZWFjaChbXCJvdmVyZmxvd1wiLCBcIm92ZXJmbG93WFwiLCBcIm92ZXJmbG93WVwiXSwgZnVuY3Rpb24oaSwgcHJvcGVydHkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5DU1Muc2V0UHJvcGVydHlWYWx1ZShkdW1teSwgcHJvcGVydHksIFwiaGlkZGVuXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuQ1NTLnNldFByb3BlcnR5VmFsdWUoZHVtbXksIFwicG9zaXRpb25cIiwgc2FtZVJhdGlvSW5kaWNhdG9ycy5wb3NpdGlvbik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFZlbG9jaXR5LkNTUy5zZXRQcm9wZXJ0eVZhbHVlKGR1bW15LCBcImZvbnRTaXplXCIsIHNhbWVSYXRpb0luZGljYXRvcnMuZm9udFNpemUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5DU1Muc2V0UHJvcGVydHlWYWx1ZShkdW1teSwgXCJib3hTaXppbmdcIiwgXCJjb250ZW50LWJveFwiKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIHdpZHRoIGFuZCBoZWlnaHQgYWN0IGFzIG91ciBwcm94eSBwcm9wZXJ0aWVzIGZvciBtZWFzdXJpbmcgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsICUgcmF0aW9zLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQkLmVhY2goW1wibWluV2lkdGhcIiwgXCJtYXhXaWR0aFwiLCBcIndpZHRoXCIsIFwibWluSGVpZ2h0XCIsIFwibWF4SGVpZ2h0XCIsIFwiaGVpZ2h0XCJdLCBmdW5jdGlvbihpLCBwcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFZlbG9jaXR5LkNTUy5zZXRQcm9wZXJ0eVZhbHVlKGR1bW15LCBwcm9wZXJ0eSwgbWVhc3VyZW1lbnQgKyBcIiVcIik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBwYWRkaW5nTGVmdCBhcmJpdHJhcmlseSBhY3RzIGFzIG91ciBwcm94eSBwcm9wZXJ0eSBmb3IgdGhlIGVtIHJhdGlvLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5DU1Muc2V0UHJvcGVydHlWYWx1ZShkdW1teSwgXCJwYWRkaW5nTGVmdFwiLCBtZWFzdXJlbWVudCArIFwiZW1cIik7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBEaXZpZGUgdGhlIHJldHVybmVkIHZhbHVlIGJ5IHRoZSBtZWFzdXJlbWVudCB0byBnZXQgdGhlIHJhdGlvIGJldHdlZW4gMSUgYW5kIDFweC4gRGVmYXVsdCB0byAxIHNpbmNlIHdvcmtpbmcgd2l0aCAwIGNhbiBwcm9kdWNlIEluZmluaXRlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zLnBlcmNlbnRUb1B4V2lkdGggPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RQZXJjZW50VG9QeFdpZHRoID0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZHVtbXksIFwid2lkdGhcIiwgbnVsbCwgdHJ1ZSkpIHx8IDEpIC8gbWVhc3VyZW1lbnQ7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zLnBlcmNlbnRUb1B4SGVpZ2h0ID0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5sYXN0UGVyY2VudFRvUHhIZWlnaHQgPSAocGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShkdW1teSwgXCJoZWlnaHRcIiwgbnVsbCwgdHJ1ZSkpIHx8IDEpIC8gbWVhc3VyZW1lbnQ7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zLmVtVG9QeCA9IGNhbGxVbml0Q29udmVyc2lvbkRhdGEubGFzdEVtVG9QeCA9IChwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGR1bW15LCBcInBhZGRpbmdMZWZ0XCIpKSB8fCAxKSAvIG1lYXN1cmVtZW50OyAvKiBHRVQgKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNhbWVSYXRpb0luZGljYXRvcnMubXlQYXJlbnQucmVtb3ZlQ2hpbGQoZHVtbXkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pdFJhdGlvcy5lbVRvUHggPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RFbVRvUHg7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVuaXRSYXRpb3MucGVyY2VudFRvUHhXaWR0aCA9IGNhbGxVbml0Q29udmVyc2lvbkRhdGEubGFzdFBlcmNlbnRUb1B4V2lkdGg7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVuaXRSYXRpb3MucGVyY2VudFRvUHhIZWlnaHQgPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RQZXJjZW50VG9QeEhlaWdodDtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0XHQgRWxlbWVudC1BZ25vc3RpYyBVbml0c1xyXG5cdFx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBXaGVyZWFzICUgYW5kIGVtIHJhdGlvcyBhcmUgZGV0ZXJtaW5lZCBvbiBhIHBlci1lbGVtZW50IGJhc2lzLCB0aGUgcmVtIHVuaXQgb25seSBuZWVkcyB0byBiZSBjaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHQgb25jZSBwZXIgY2FsbCBzaW5jZSBpdCdzIGV4Y2x1c2l2ZWx5IGRlcGVuZGFudCB1cG9uIGRvY3VtZW50LmJvZHkncyBmb250U2l6ZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZVxyXG5cdFx0XHRcdFx0XHRcdFx0IHRoYXQgY2FsY3VsYXRlVW5pdFJhdGlvcygpIGlzIGJlaW5nIHJ1biBkdXJpbmcgdGhpcyBjYWxsLCByZW1Ub1B4IHdpbGwgc3RpbGwgYmUgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlIG9mIG51bGwsXHJcblx0XHRcdFx0XHRcdFx0XHQgc28gd2UgY2FsY3VsYXRlIGl0IG5vdy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChjYWxsVW5pdENvbnZlcnNpb25EYXRhLnJlbVRvUHggPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogRGVmYXVsdCB0byBicm93c2VycycgZGVmYXVsdCBmb250U2l6ZSBvZiAxNnB4IGluIHRoZSBjYXNlIG9mIDAuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhbGxVbml0Q29udmVyc2lvbkRhdGEucmVtVG9QeCA9IHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZG9jdW1lbnQuYm9keSwgXCJmb250U2l6ZVwiKSkgfHwgMTY7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFNpbWlsYXJseSwgdmlld3BvcnQgdW5pdHMgYXJlICUtcmVsYXRpdmUgdG8gdGhlIHdpbmRvdydzIGlubmVyIGRpbWVuc2lvbnMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoY2FsbFVuaXRDb252ZXJzaW9uRGF0YS52d1RvUHggPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FsbFVuaXRDb252ZXJzaW9uRGF0YS52d1RvUHggPSBwYXJzZUZsb2F0KHdpbmRvdy5pbm5lcldpZHRoKSAvIDEwMDsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhbGxVbml0Q29udmVyc2lvbkRhdGEudmhUb1B4ID0gcGFyc2VGbG9hdCh3aW5kb3cuaW5uZXJIZWlnaHQpIC8gMTAwOyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zLnJlbVRvUHggPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLnJlbVRvUHg7XHJcblx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zLnZ3VG9QeCA9IGNhbGxVbml0Q29udmVyc2lvbkRhdGEudndUb1B4O1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pdFJhdGlvcy52aFRvUHggPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLnZoVG9QeDtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuZGVidWcgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIlVuaXQgcmF0aW9zOiBcIiArIEpTT04uc3RyaW5naWZ5KHVuaXRSYXRpb3MpLCBlbGVtZW50KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB1bml0UmF0aW9zO1xyXG5cdFx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCBVbml0IENvbnZlcnNpb25cclxuXHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIFRoZSAqIGFuZCAvIG9wZXJhdG9ycywgd2hpY2ggYXJlIG5vdCBwYXNzZWQgaW4gd2l0aCBhbiBhc3NvY2lhdGVkIHVuaXQsIGluaGVyZW50bHkgdXNlIHN0YXJ0VmFsdWUncyB1bml0LiBTa2lwIHZhbHVlIGFuZCB1bml0IGNvbnZlcnNpb24uICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKC9bXFwvKl0vLnRlc3Qob3BlcmF0b3IpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVVuaXRUeXBlID0gc3RhcnRWYWx1ZVVuaXRUeXBlO1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogSWYgc3RhcnRWYWx1ZSBhbmQgZW5kVmFsdWUgZGlmZmVyIGluIHVuaXQgdHlwZSwgY29udmVydCBzdGFydFZhbHVlIGludG8gdGhlIHNhbWUgdW5pdCB0eXBlIGFzIGVuZFZhbHVlIHNvIHRoYXQgaWYgZW5kVmFsdWVVbml0VHlwZVxyXG5cdFx0XHRcdFx0XHRcdFx0IGlzIGEgcmVsYXRpdmUgdW5pdCAoJSwgZW0sIHJlbSksIHRoZSB2YWx1ZXMgc2V0IGR1cmluZyB0d2VlbmluZyB3aWxsIGNvbnRpbnVlIHRvIGJlIGFjY3VyYXRlbHkgcmVsYXRpdmUgZXZlbiBpZiB0aGUgbWV0cmljcyB0aGV5IGRlcGVuZFxyXG5cdFx0XHRcdFx0XHRcdFx0IG9uIGFyZSBkeW5hbWljYWxseSBjaGFuZ2luZyBkdXJpbmcgdGhlIGNvdXJzZSBvZiB0aGUgYW5pbWF0aW9uLiBDb252ZXJzZWx5LCBpZiB3ZSBhbHdheXMgbm9ybWFsaXplZCBpbnRvIHB4IGFuZCB1c2VkIHB4IGZvciBzZXR0aW5nIHZhbHVlcywgdGhlIHB4IHJhdGlvXHJcblx0XHRcdFx0XHRcdFx0XHQgd291bGQgYmVjb21lIHN0YWxlIGlmIHRoZSBvcmlnaW5hbCB1bml0IGJlaW5nIGFuaW1hdGVkIHRvd2FyZCB3YXMgcmVsYXRpdmUgYW5kIHRoZSB1bmRlcmx5aW5nIG1ldHJpY3MgY2hhbmdlIGR1cmluZyB0aGUgYW5pbWF0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogU2luY2UgMCBpcyAwIGluIGFueSB1bml0IHR5cGUsIG5vIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5IHdoZW4gc3RhcnRWYWx1ZSBpcyAwIC0tIHdlIGp1c3Qgc3RhcnQgYXQgMCB3aXRoIGVuZFZhbHVlVW5pdFR5cGUuICovXHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICgoc3RhcnRWYWx1ZVVuaXRUeXBlICE9PSBlbmRWYWx1ZVVuaXRUeXBlKSAmJiBzdGFydFZhbHVlICE9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBVbml0IGNvbnZlcnNpb24gaXMgYWxzbyBza2lwcGVkIHdoZW4gZW5kVmFsdWUgaXMgMCwgYnV0ICpzdGFydFZhbHVlVW5pdFR5cGUqIG11c3QgYmUgdXNlZCBmb3IgdHdlZW4gdmFsdWVzIHRvIHJlbWFpbiBhY2N1cmF0ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdC8qIE5vdGU6IFNraXBwaW5nIHVuaXQgY29udmVyc2lvbiBoZXJlIG1lYW5zIHRoYXQgaWYgZW5kVmFsdWVVbml0VHlwZSB3YXMgb3JpZ2luYWxseSBhIHJlbGF0aXZlIHVuaXQsIHRoZSBhbmltYXRpb24gd29uJ3QgcmVsYXRpdmVseVxyXG5cdFx0XHRcdFx0XHRcdFx0IG1hdGNoIHRoZSB1bmRlcmx5aW5nIG1ldHJpY3MgaWYgdGhleSBjaGFuZ2UsIGJ1dCB0aGlzIGlzIGFjY2VwdGFibGUgc2luY2Ugd2UncmUgYW5pbWF0aW5nIHRvd2FyZCBpbnZpc2liaWxpdHkgaW5zdGVhZCBvZiB0b3dhcmQgdmlzaWJpbGl0eSxcclxuXHRcdFx0XHRcdFx0XHRcdCB3aGljaCByZW1haW5zIHBhc3QgdGhlIHBvaW50IG9mIHRoZSBhbmltYXRpb24ncyBjb21wbGV0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVuZFZhbHVlID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlVW5pdFR5cGUgPSBzdGFydFZhbHVlVW5pdFR5cGU7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBCeSB0aGlzIHBvaW50LCB3ZSBjYW5ub3QgYXZvaWQgdW5pdCBjb252ZXJzaW9uIChpdCdzIHVuZGVzaXJhYmxlIHNpbmNlIGl0IGNhdXNlcyBsYXlvdXQgdGhyYXNoaW5nKS5cclxuXHRcdFx0XHRcdFx0XHRcdFx0IElmIHdlIGhhdmVuJ3QgYWxyZWFkeSwgd2UgdHJpZ2dlciBjYWxjdWxhdGVVbml0UmF0aW9zKCksIHdoaWNoIHJ1bnMgb25jZSBwZXIgZWxlbWVudCBwZXIgY2FsbC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxlbWVudFVuaXRDb252ZXJzaW9uRGF0YSA9IGVsZW1lbnRVbml0Q29udmVyc2lvbkRhdGEgfHwgY2FsY3VsYXRlVW5pdFJhdGlvcygpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogVGhlIGZvbGxvd2luZyBSZWdFeCBtYXRjaGVzIENTUyBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSB0aGVpciAlIHZhbHVlcyBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgeC1heGlzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBXM0Mgc3BlYyBtYW5kYXRlcyB0aGF0IGFsbCBvZiBtYXJnaW4gYW5kIHBhZGRpbmcncyBwcm9wZXJ0aWVzIChldmVuIHRvcCBhbmQgYm90dG9tKSBhcmUgJS1yZWxhdGl2ZSB0byB0aGUgKndpZHRoKiBvZiB0aGUgcGFyZW50IGVsZW1lbnQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBheGlzID0gKC9tYXJnaW58cGFkZGluZ3xsZWZ0fHJpZ2h0fHdpZHRofHRleHR8d29yZHxsZXR0ZXIvaS50ZXN0KHByb3BlcnR5KSB8fCAvWCQvLnRlc3QocHJvcGVydHkpIHx8IHByb3BlcnR5ID09PSBcInhcIikgPyBcInhcIiA6IFwieVwiO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogSW4gb3JkZXIgdG8gYXZvaWQgZ2VuZXJhdGluZyBuXjIgYmVzcG9rZSBjb252ZXJzaW9uIGZ1bmN0aW9ucywgdW5pdCBjb252ZXJzaW9uIGlzIGEgdHdvLXN0ZXAgcHJvY2VzczpcclxuXHRcdFx0XHRcdFx0XHRcdFx0IDEpIENvbnZlcnQgc3RhcnRWYWx1ZSBpbnRvIHBpeGVscy4gMikgQ29udmVydCB0aGlzIG5ldyBwaXhlbCB2YWx1ZSBpbnRvIGVuZFZhbHVlJ3MgdW5pdCB0eXBlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKHN0YXJ0VmFsdWVVbml0VHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIlXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBOb3RlOiB0cmFuc2xhdGVYIGFuZCB0cmFuc2xhdGVZIGFyZSB0aGUgb25seSBwcm9wZXJ0aWVzIHRoYXQgYXJlICUtcmVsYXRpdmUgdG8gYW4gZWxlbWVudCdzIG93biBkaW1lbnNpb25zIC0tIG5vdCBpdHMgcGFyZW50J3MgZGltZW5zaW9ucy5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBWZWxvY2l0eSBkb2VzIG5vdCBpbmNsdWRlIGEgc3BlY2lhbCBjb252ZXJzaW9uIHByb2Nlc3MgdG8gYWNjb3VudCBmb3IgdGhpcyBiZWhhdmlvci4gVGhlcmVmb3JlLCBhbmltYXRpbmcgdHJhbnNsYXRlWC9ZIGZyb20gYSAlIHZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgdG8gYSBub24tJSB2YWx1ZSB3aWxsIHByb2R1Y2UgYW4gaW5jb3JyZWN0IHN0YXJ0IHZhbHVlLiBGb3J0dW5hdGVseSwgdGhpcyBzb3J0IG9mIGNyb3NzLXVuaXQgY29udmVyc2lvbiBpcyByYXJlbHkgZG9uZSBieSB1c2VycyBpbiBwcmFjdGljZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgKj0gKGF4aXMgPT09IFwieFwiID8gZWxlbWVudFVuaXRDb252ZXJzaW9uRGF0YS5wZXJjZW50VG9QeFdpZHRoIDogZWxlbWVudFVuaXRDb252ZXJzaW9uRGF0YS5wZXJjZW50VG9QeEhlaWdodCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInB4XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBweCBhY3RzIGFzIG91ciBtaWRwb2ludCBpbiB0aGUgdW5pdCBjb252ZXJzaW9uIHByb2Nlc3M7IGRvIG5vdGhpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgKj0gZWxlbWVudFVuaXRDb252ZXJzaW9uRGF0YVtzdGFydFZhbHVlVW5pdFR5cGUgKyBcIlRvUHhcIl07XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIEludmVydCB0aGUgcHggcmF0aW9zIHRvIGNvbnZlcnQgaW50byB0byB0aGUgdGFyZ2V0IHVuaXQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoZW5kVmFsdWVVbml0VHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIlXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlICo9IDEgLyAoYXhpcyA9PT0gXCJ4XCIgPyBlbGVtZW50VW5pdENvbnZlcnNpb25EYXRhLnBlcmNlbnRUb1B4V2lkdGggOiBlbGVtZW50VW5pdENvbnZlcnNpb25EYXRhLnBlcmNlbnRUb1B4SGVpZ2h0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwicHhcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIHN0YXJ0VmFsdWUgaXMgYWxyZWFkeSBpbiBweCwgZG8gbm90aGluZzsgd2UncmUgZG9uZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSAqPSAxIC8gZWxlbWVudFVuaXRDb252ZXJzaW9uRGF0YVtlbmRWYWx1ZVVuaXRUeXBlICsgXCJUb1B4XCJdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0IFJlbGF0aXZlIFZhbHVlc1xyXG5cdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIE9wZXJhdG9yIGxvZ2ljIG11c3QgYmUgcGVyZm9ybWVkIGxhc3Qgc2luY2UgaXQgcmVxdWlyZXMgdW5pdC1ub3JtYWxpemVkIHN0YXJ0IGFuZCBlbmQgdmFsdWVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIE5vdGU6IFJlbGF0aXZlICpwZXJjZW50IHZhbHVlcyogZG8gbm90IGJlaGF2ZSBob3cgbW9zdCBwZW9wbGUgdGhpbms7IHdoaWxlIG9uZSB3b3VsZCBleHBlY3QgXCIrPTUwJVwiXHJcblx0XHRcdFx0XHRcdFx0IHRvIGluY3JlYXNlIHRoZSBwcm9wZXJ0eSAxLjV4IGl0cyBjdXJyZW50IHZhbHVlLCBpdCBpbiBmYWN0IGluY3JlYXNlcyB0aGUgcGVyY2VudCB1bml0cyBpbiBhYnNvbHV0ZSB0ZXJtczpcclxuXHRcdFx0XHRcdFx0XHQgNTAgcG9pbnRzIGlzIGFkZGVkIG9uIHRvcCBvZiB0aGUgY3VycmVudCAlIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAob3BlcmF0b3IpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIrXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gc3RhcnRWYWx1ZSArIGVuZFZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiLVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IHN0YXJ0VmFsdWUgLSBlbmRWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIipcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSBzdGFydFZhbHVlICogZW5kVmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIvXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gc3RhcnRWYWx1ZSAvIGVuZFZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCB0d2VlbnNDb250YWluZXIgUHVzaFxyXG5cdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogQ29uc3RydWN0IHRoZSBwZXItcHJvcGVydHkgdHdlZW4gb2JqZWN0LCBhbmQgcHVzaCBpdCB0byB0aGUgZWxlbWVudCdzIHR3ZWVuc0NvbnRhaW5lci4gKi9cclxuXHRcdFx0XHRcdFx0XHR0d2VlbnNDb250YWluZXJbcHJvcGVydHldID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWU6IHJvb3RQcm9wZXJ0eVZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZTogc3RhcnRWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZTogc3RhcnRWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlOiBlbmRWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdHVuaXRUeXBlOiBlbmRWYWx1ZVVuaXRUeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZWFzaW5nOiBlYXNpbmdcclxuXHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRcdGlmIChwYXR0ZXJuKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0d2VlbnNDb250YWluZXJbcHJvcGVydHldLnBhdHRlcm4gPSBwYXR0ZXJuO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKFZlbG9jaXR5LmRlYnVnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcInR3ZWVuc0NvbnRhaW5lciAoXCIgKyBwcm9wZXJ0eSArIFwiKTogXCIgKyBKU09OLnN0cmluZ2lmeSh0d2VlbnNDb250YWluZXJbcHJvcGVydHldKSwgZWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0LyogQ3JlYXRlIGEgdHdlZW4gb3V0IG9mIGVhY2ggcHJvcGVydHksIGFuZCBhcHBlbmQgaXRzIGFzc29jaWF0ZWQgZGF0YSB0byB0d2VlbnNDb250YWluZXIuICovXHJcblx0XHRcdFx0XHRcdGZvciAodmFyIHByb3BlcnR5IGluIHByb3BlcnRpZXNNYXApIHtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKCFwcm9wZXJ0aWVzTWFwLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdC8qIFRoZSBvcmlnaW5hbCBwcm9wZXJ0eSBuYW1lJ3MgZm9ybWF0IG11c3QgYmUgdXNlZCBmb3IgdGhlIHBhcnNlUHJvcGVydHlWYWx1ZSgpIGxvb2t1cCxcclxuXHRcdFx0XHRcdFx0XHQgYnV0IHdlIHRoZW4gdXNlIGl0cyBjYW1lbENhc2Ugc3R5bGluZyB0byBub3JtYWxpemUgaXQgZm9yIG1hbmlwdWxhdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHR2YXIgcHJvcGVydHlOYW1lID0gQ1NTLk5hbWVzLmNhbWVsQ2FzZShwcm9wZXJ0eSksXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlRGF0YSA9IHBhcnNlUHJvcGVydHlWYWx1ZShwcm9wZXJ0aWVzTWFwW3Byb3BlcnR5XSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIEZpbmQgc2hvcnRoYW5kIGNvbG9yIHByb3BlcnRpZXMgdGhhdCBoYXZlIGJlZW4gcGFzc2VkIGEgaGV4IHN0cmluZy4gKi9cclxuXHRcdFx0XHRcdFx0XHQvKiBXb3VsZCBiZSBxdWlja2VyIHRvIHVzZSBDU1MuTGlzdHMuY29sb3JzLmluY2x1ZGVzKCkgaWYgcG9zc2libGUgKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoX2luQXJyYXkoQ1NTLkxpc3RzLmNvbG9ycywgcHJvcGVydHlOYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogUGFyc2UgdGhlIHZhbHVlIGRhdGEgZm9yIGVhY2ggc2hvcnRoYW5kLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGVuZFZhbHVlID0gdmFsdWVEYXRhWzBdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVhc2luZyA9IHZhbHVlRGF0YVsxXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gdmFsdWVEYXRhWzJdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChDU1MuUmVnRXguaXNIZXgudGVzdChlbmRWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogQ29udmVydCB0aGUgaGV4IHN0cmluZ3MgaW50byB0aGVpciBSR0IgY29tcG9uZW50IGFycmF5cy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNvbG9yQ29tcG9uZW50cyA9IFtcIlJlZFwiLCBcIkdyZWVuXCIsIFwiQmx1ZVwiXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlUkdCID0gQ1NTLlZhbHVlcy5oZXhUb1JnYihlbmRWYWx1ZSksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlUkdCID0gc3RhcnRWYWx1ZSA/IENTUy5WYWx1ZXMuaGV4VG9SZ2Ioc3RhcnRWYWx1ZSkgOiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBJbmplY3QgdGhlIFJHQiBjb21wb25lbnQgdHdlZW5zIGludG8gcHJvcGVydGllc01hcC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvckNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGF0YUFycmF5ID0gW2VuZFZhbHVlUkdCW2ldXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVhc2luZykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUFycmF5LnB1c2goZWFzaW5nKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChzdGFydFZhbHVlUkdCICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFBcnJheS5wdXNoKHN0YXJ0VmFsdWVSR0JbaV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zml4UHJvcGVydHlWYWx1ZShwcm9wZXJ0eU5hbWUgKyBjb2xvckNvbXBvbmVudHNbaV0sIGRhdGFBcnJheSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgd2UgaGF2ZSByZXBsYWNlZCBhIHNob3J0Y3V0IGNvbG9yIHZhbHVlIHRoZW4gZG9uJ3QgdXBkYXRlIHRoZSBzdGFuZGFyZCBwcm9wZXJ0eSBuYW1lICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRmaXhQcm9wZXJ0eVZhbHVlKHByb3BlcnR5TmFtZSwgdmFsdWVEYXRhKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogQWxvbmcgd2l0aCBpdHMgcHJvcGVydHkgZGF0YSwgc3RvcmUgYSByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgaXRzZWxmIG9udG8gdHdlZW5zQ29udGFpbmVyLiAqL1xyXG5cdFx0XHRcdFx0XHR0d2VlbnNDb250YWluZXIuZWxlbWVudCA9IGVsZW1lbnQ7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHQgQ2FsbCBQdXNoXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0LyogTm90ZTogdHdlZW5zQ29udGFpbmVyIGNhbiBiZSBlbXB0eSBpZiBhbGwgb2YgdGhlIHByb3BlcnRpZXMgaW4gdGhpcyBjYWxsJ3MgcHJvcGVydHkgbWFwIHdlcmUgc2tpcHBlZCBkdWUgdG8gbm90XHJcblx0XHRcdFx0XHQgYmVpbmcgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLiBUaGUgZWxlbWVudCBwcm9wZXJ0eSBpcyB1c2VkIGZvciBjaGVja2luZyB0aGF0IHRoZSB0d2VlbnNDb250YWluZXIgaGFzIGJlZW4gYXBwZW5kZWQgdG8uICovXHJcblx0XHRcdFx0XHRpZiAodHdlZW5zQ29udGFpbmVyLmVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0LyogQXBwbHkgdGhlIFwidmVsb2NpdHktYW5pbWF0aW5nXCIgaW5kaWNhdG9yIGNsYXNzLiAqL1xyXG5cdFx0XHRcdFx0XHRDU1MuVmFsdWVzLmFkZENsYXNzKGVsZW1lbnQsIFwidmVsb2NpdHktYW5pbWF0aW5nXCIpO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogVGhlIGNhbGwgYXJyYXkgaG91c2VzIHRoZSB0d2VlbnNDb250YWluZXJzIGZvciBlYWNoIGVsZW1lbnQgYmVpbmcgYW5pbWF0ZWQgaW4gdGhlIGN1cnJlbnQgY2FsbC4gKi9cclxuXHRcdFx0XHRcdFx0Y2FsbC5wdXNoKHR3ZWVuc0NvbnRhaW5lcik7XHJcblxyXG5cdFx0XHRcdFx0XHRkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChkYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogU3RvcmUgdGhlIHR3ZWVuc0NvbnRhaW5lciBhbmQgb3B0aW9ucyBpZiB3ZSdyZSB3b3JraW5nIG9uIHRoZSBkZWZhdWx0IGVmZmVjdHMgcXVldWUsIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBieSB0aGUgcmV2ZXJzZSBjb21tYW5kLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChvcHRzLnF1ZXVlID09PSBcIlwiKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS50d2VlbnNDb250YWluZXIgPSB0d2VlbnNDb250YWluZXI7XHJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLm9wdHMgPSBvcHRzO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogU3dpdGNoIG9uIHRoZSBlbGVtZW50J3MgYW5pbWF0aW5nIGZsYWcuICovXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5pc0FuaW1hdGluZyA9IHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIE9uY2UgdGhlIGZpbmFsIGVsZW1lbnQgaW4gdGhpcyBjYWxsJ3MgZWxlbWVudCBzZXQgaGFzIGJlZW4gcHJvY2Vzc2VkLCBwdXNoIHRoZSBjYWxsIGFycmF5IG9udG9cclxuXHRcdFx0XHRcdFx0IFZlbG9jaXR5LlN0YXRlLmNhbGxzIGZvciB0aGUgYW5pbWF0aW9uIHRpY2sgdG8gaW1tZWRpYXRlbHkgYmVnaW4gcHJvY2Vzc2luZy4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKGVsZW1lbnRzSW5kZXggPT09IGVsZW1lbnRzTGVuZ3RoIC0gMSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIEFkZCB0aGUgY3VycmVudCBjYWxsIHBsdXMgaXRzIGFzc29jaWF0ZWQgbWV0YWRhdGEgKHRoZSBlbGVtZW50IHNldCBhbmQgdGhlIGNhbGwncyBvcHRpb25zKSBvbnRvIHRoZSBnbG9iYWwgY2FsbCBjb250YWluZXIuXHJcblx0XHRcdFx0XHRcdFx0IEFueXRoaW5nIG9uIHRoaXMgY2FsbCBjb250YWluZXIgaXMgc3ViamVjdGVkIHRvIHRpY2soKSBwcm9jZXNzaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFZlbG9jaXR5LlN0YXRlLmNhbGxzLnB1c2goW2NhbGwsIGVsZW1lbnRzLCBvcHRzLCBudWxsLCBwcm9taXNlRGF0YS5yZXNvbHZlciwgbnVsbCwgMF0pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgYW5pbWF0aW9uIHRpY2sgaXNuJ3QgcnVubmluZywgc3RhcnQgaXQuIChWZWxvY2l0eSBzaHV0cyBpdCBvZmYgd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIGNhbGxzIHRvIHByb2Nlc3MuKSAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5TdGF0ZS5pc1RpY2tpbmcgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5pc1RpY2tpbmcgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFN0YXJ0IHRoZSB0aWNrIGxvb3AuICovXHJcblx0XHRcdFx0XHRcdFx0XHR0aWNrKCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRzSW5kZXgrKztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyogV2hlbiB0aGUgcXVldWUgb3B0aW9uIGlzIHNldCB0byBmYWxzZSwgdGhlIGNhbGwgc2tpcHMgdGhlIGVsZW1lbnQncyBxdWV1ZSBhbmQgZmlyZXMgaW1tZWRpYXRlbHkuICovXHJcblx0XHRcdFx0aWYgKG9wdHMucXVldWUgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHQvKiBTaW5jZSB0aGlzIGJ1aWxkUXVldWUgY2FsbCBkb2Vzbid0IHJlc3BlY3QgdGhlIGVsZW1lbnQncyBleGlzdGluZyBxdWV1ZSAod2hpY2ggaXMgd2hlcmUgYSBkZWxheSBvcHRpb24gd291bGQgaGF2ZSBiZWVuIGFwcGVuZGVkKSxcclxuXHRcdFx0XHRcdCB3ZSBtYW51YWxseSBpbmplY3QgdGhlIGRlbGF5IHByb3BlcnR5IGhlcmUgd2l0aCBhbiBleHBsaWNpdCBzZXRUaW1lb3V0LiAqL1xyXG5cdFx0XHRcdFx0aWYgKG9wdHMuZGVsYXkpIHtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFRlbXBvcmFyaWx5IHN0b3JlIGRlbGF5ZWQgZWxlbWVudHMgdG8gZmFjaWxpdGF0ZSBhY2Nlc3MgZm9yIGdsb2JhbCBwYXVzZS9yZXN1bWUgKi9cclxuXHRcdFx0XHRcdFx0dmFyIGNhbGxJbmRleCA9IFZlbG9jaXR5LlN0YXRlLmRlbGF5ZWRFbGVtZW50cy5jb3VudCsrO1xyXG5cdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5kZWxheWVkRWxlbWVudHNbY2FsbEluZGV4XSA9IGVsZW1lbnQ7XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgZGVsYXlDb21wbGV0ZSA9IChmdW5jdGlvbihpbmRleCkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIENsZWFyIHRoZSB0ZW1wb3JhcnkgZWxlbWVudCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuZGVsYXllZEVsZW1lbnRzW2luZGV4XSA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIEZpbmFsbHksIGlzc3VlIHRoZSBjYWxsICovXHJcblx0XHRcdFx0XHRcdFx0XHRidWlsZFF1ZXVlKCk7XHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0fSkoY2FsbEluZGV4KTtcclxuXHJcblx0XHRcdFx0XHRcdERhdGEoZWxlbWVudCkuZGVsYXlCZWdpbiA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcblx0XHRcdFx0XHRcdERhdGEoZWxlbWVudCkuZGVsYXkgPSBwYXJzZUZsb2F0KG9wdHMuZGVsYXkpO1xyXG5cdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLmRlbGF5VGltZXIgPSB7XHJcblx0XHRcdFx0XHRcdFx0c2V0VGltZW91dDogc2V0VGltZW91dChidWlsZFF1ZXVlLCBwYXJzZUZsb2F0KG9wdHMuZGVsYXkpKSxcclxuXHRcdFx0XHRcdFx0XHRuZXh0OiBkZWxheUNvbXBsZXRlXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRidWlsZFF1ZXVlKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvKiBPdGhlcndpc2UsIHRoZSBjYWxsIHVuZGVyZ29lcyBlbGVtZW50IHF1ZXVlaW5nIGFzIG5vcm1hbC4gKi9cclxuXHRcdFx0XHRcdC8qIE5vdGU6IFRvIGludGVyb3BlcmF0ZSB3aXRoIGpRdWVyeSwgVmVsb2NpdHkgdXNlcyBqUXVlcnkncyBvd24gJC5xdWV1ZSgpIHN0YWNrIGZvciBxdWV1aW5nIGxvZ2ljLiAqL1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQkLnF1ZXVlKGVsZW1lbnQsIG9wdHMucXVldWUsIGZ1bmN0aW9uKG5leHQsIGNsZWFyUXVldWUpIHtcclxuXHRcdFx0XHRcdFx0LyogSWYgdGhlIGNsZWFyUXVldWUgZmxhZyB3YXMgcGFzc2VkIGluIGJ5IHRoZSBzdG9wIGNvbW1hbmQsIHJlc29sdmUgdGhpcyBjYWxsJ3MgcHJvbWlzZS4gKFByb21pc2VzIGNhbiBvbmx5IGJlIHJlc29sdmVkIG9uY2UsXHJcblx0XHRcdFx0XHRcdCBzbyBpdCdzIGZpbmUgaWYgdGhpcyBpcyByZXBlYXRlZGx5IHRyaWdnZXJlZCBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBhc3NvY2lhdGVkIGNhbGwuKSAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoY2xlYXJRdWV1ZSA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChwcm9taXNlRGF0YS5wcm9taXNlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRwcm9taXNlRGF0YS5yZXNvbHZlcihlbGVtZW50cyk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBEbyBub3QgY29udGludWUgd2l0aCBhbmltYXRpb24gcXVldWVpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIFRoaXMgZmxhZyBpbmRpY2F0ZXMgdG8gdGhlIHVwY29taW5nIGNvbXBsZXRlQ2FsbCgpIGZ1bmN0aW9uIHRoYXQgdGhpcyBxdWV1ZSBlbnRyeSB3YXMgaW5pdGlhdGVkIGJ5IFZlbG9jaXR5LlxyXG5cdFx0XHRcdFx0XHQgU2VlIGNvbXBsZXRlQ2FsbCgpIGZvciBmdXJ0aGVyIGRldGFpbHMuICovXHJcblx0XHRcdFx0XHRcdFZlbG9jaXR5LnZlbG9jaXR5UXVldWVFbnRyeUZsYWcgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdFx0YnVpbGRRdWV1ZShuZXh0KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBBdXRvLURlcXVldWluZ1xyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIEFzIHBlciBqUXVlcnkncyAkLnF1ZXVlKCkgYmVoYXZpb3IsIHRvIGZpcmUgdGhlIGZpcnN0IG5vbi1jdXN0b20tcXVldWUgZW50cnkgb24gYW4gZWxlbWVudCwgdGhlIGVsZW1lbnRcclxuXHRcdFx0XHQgbXVzdCBiZSBkZXF1ZXVlZCBpZiBpdHMgcXVldWUgc3RhY2sgY29uc2lzdHMgKnNvbGVseSogb2YgdGhlIGN1cnJlbnQgY2FsbC4gKFRoaXMgY2FuIGJlIGRldGVybWluZWQgYnkgY2hlY2tpbmdcclxuXHRcdFx0XHQgZm9yIHRoZSBcImlucHJvZ3Jlc3NcIiBpdGVtIHRoYXQgalF1ZXJ5IHByZXBlbmRzIHRvIGFjdGl2ZSBxdWV1ZSBzdGFjayBhcnJheXMuKSBSZWdhcmRsZXNzLCB3aGVuZXZlciB0aGUgZWxlbWVudCdzXHJcblx0XHRcdFx0IHF1ZXVlIGlzIGZ1cnRoZXIgYXBwZW5kZWQgd2l0aCBhZGRpdGlvbmFsIGl0ZW1zIC0tIGluY2x1ZGluZyAkLmRlbGF5KCkncyBvciBldmVuICQuYW5pbWF0ZSgpIGNhbGxzLCB0aGUgcXVldWUnc1xyXG5cdFx0XHRcdCBmaXJzdCBlbnRyeSBpcyBhdXRvbWF0aWNhbGx5IGZpcmVkLiBUaGlzIGJlaGF2aW9yIGNvbnRyYXN0cyB0aGF0IG9mIGN1c3RvbSBxdWV1ZXMsIHdoaWNoIG5ldmVyIGF1dG8tZmlyZS4gKi9cclxuXHRcdFx0XHQvKiBOb3RlOiBXaGVuIGFuIGVsZW1lbnQgc2V0IGlzIGJlaW5nIHN1YmplY3RlZCB0byBhIG5vbi1wYXJhbGxlbCBWZWxvY2l0eSBjYWxsLCB0aGUgYW5pbWF0aW9uIHdpbGwgbm90IGJlZ2luIHVudGlsXHJcblx0XHRcdFx0IGVhY2ggb25lIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc2V0IGhhcyByZWFjaGVkIHRoZSBlbmQgb2YgaXRzIGluZGl2aWR1YWxseSBwcmUtZXhpc3RpbmcgcXVldWUgY2hhaW4uICovXHJcblx0XHRcdFx0LyogTm90ZTogVW5mb3J0dW5hdGVseSwgbW9zdCBwZW9wbGUgZG9uJ3QgZnVsbHkgZ3Jhc3AgalF1ZXJ5J3MgcG93ZXJmdWwsIHlldCBxdWlya3ksICQucXVldWUoKSBmdW5jdGlvbi5cclxuXHRcdFx0XHQgTGVhbiBtb3JlIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA1ODE1OC9jYW4tc29tZWJvZHktZXhwbGFpbi1qcXVlcnktcXVldWUtdG8tbWUgKi9cclxuXHRcdFx0XHRpZiAoKG9wdHMucXVldWUgPT09IFwiXCIgfHwgb3B0cy5xdWV1ZSA9PT0gXCJmeFwiKSAmJiAkLnF1ZXVlKGVsZW1lbnQpWzBdICE9PSBcImlucHJvZ3Jlc3NcIikge1xyXG5cdFx0XHRcdFx0JC5kZXF1ZXVlKGVsZW1lbnQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdCBFbGVtZW50IFNldCBJdGVyYXRpb25cclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogSWYgdGhlIFwibm9kZVR5cGVcIiBwcm9wZXJ0eSBleGlzdHMgb24gdGhlIGVsZW1lbnRzIHZhcmlhYmxlLCB3ZSdyZSBhbmltYXRpbmcgYSBzaW5nbGUgZWxlbWVudC5cclxuXHRcdFx0IFBsYWNlIGl0IGluIGFuIGFycmF5IHNvIHRoYXQgJC5lYWNoKCkgY2FuIGl0ZXJhdGUgb3ZlciBpdC4gKi9cclxuXHRcdFx0JC5lYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihpLCBlbGVtZW50KSB7XHJcblx0XHRcdFx0LyogRW5zdXJlIGVhY2ggZWxlbWVudCBpbiBhIHNldCBoYXMgYSBub2RlVHlwZSAoaXMgYSByZWFsIGVsZW1lbnQpIHRvIGF2b2lkIHRocm93aW5nIGVycm9ycy4gKi9cclxuXHRcdFx0XHRpZiAoVHlwZS5pc05vZGUoZWxlbWVudCkpIHtcclxuXHRcdFx0XHRcdHByb2Nlc3NFbGVtZW50KGVsZW1lbnQsIGkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdCBPcHRpb246IExvb3BcclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIFRoZSBsb29wIG9wdGlvbiBhY2NlcHRzIGFuIGludGVnZXIgaW5kaWNhdGluZyBob3cgbWFueSB0aW1lcyB0aGUgZWxlbWVudCBzaG91bGQgbG9vcCBiZXR3ZWVuIHRoZSB2YWx1ZXMgaW4gdGhlXHJcblx0XHRcdCBjdXJyZW50IGNhbGwncyBwcm9wZXJ0aWVzIG1hcCBhbmQgdGhlIGVsZW1lbnQncyBwcm9wZXJ0eSB2YWx1ZXMgcHJpb3IgdG8gdGhpcyBjYWxsLiAqL1xyXG5cdFx0XHQvKiBOb3RlOiBUaGUgbG9vcCBvcHRpb24ncyBsb2dpYyBpcyBwZXJmb3JtZWQgaGVyZSAtLSBhZnRlciBlbGVtZW50IHByb2Nlc3NpbmcgLS0gYmVjYXVzZSB0aGUgY3VycmVudCBjYWxsIG5lZWRzXHJcblx0XHRcdCB0byB1bmRlcmdvIGl0cyBxdWV1ZSBpbnNlcnRpb24gcHJpb3IgdG8gdGhlIGxvb3Agb3B0aW9uIGdlbmVyYXRpbmcgaXRzIHNlcmllcyBvZiBjb25zdGl0dWVudCBcInJldmVyc2VcIiBjYWxscyxcclxuXHRcdFx0IHdoaWNoIGNoYWluIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwuIFR3byByZXZlcnNlIGNhbGxzICh0d28gXCJhbHRlcm5hdGlvbnNcIikgY29uc3RpdHV0ZSBvbmUgbG9vcC4gKi9cclxuXHRcdFx0b3B0cyA9ICQuZXh0ZW5kKHt9LCBWZWxvY2l0eS5kZWZhdWx0cywgb3B0aW9ucyk7XHJcblx0XHRcdG9wdHMubG9vcCA9IHBhcnNlSW50KG9wdHMubG9vcCwgMTApO1xyXG5cdFx0XHR2YXIgcmV2ZXJzZUNhbGxzQ291bnQgPSAob3B0cy5sb29wICogMikgLSAxO1xyXG5cclxuXHRcdFx0aWYgKG9wdHMubG9vcCkge1xyXG5cdFx0XHRcdC8qIERvdWJsZSB0aGUgbG9vcCBjb3VudCB0byBjb252ZXJ0IGl0IGludG8gaXRzIGFwcHJvcHJpYXRlIG51bWJlciBvZiBcInJldmVyc2VcIiBjYWxscy5cclxuXHRcdFx0XHQgU3VidHJhY3QgMSBmcm9tIHRoZSByZXN1bHRpbmcgdmFsdWUgc2luY2UgdGhlIGN1cnJlbnQgY2FsbCBpcyBpbmNsdWRlZCBpbiB0aGUgdG90YWwgYWx0ZXJuYXRpb24gY291bnQuICovXHJcblx0XHRcdFx0Zm9yICh2YXIgeCA9IDA7IHggPCByZXZlcnNlQ2FsbHNDb3VudDsgeCsrKSB7XHJcblx0XHRcdFx0XHQvKiBTaW5jZSB0aGUgbG9naWMgZm9yIHRoZSByZXZlcnNlIGFjdGlvbiBvY2N1cnMgaW5zaWRlIFF1ZXVlaW5nIGFuZCB0aGVyZWZvcmUgdGhpcyBjYWxsJ3Mgb3B0aW9ucyBvYmplY3RcclxuXHRcdFx0XHRcdCBpc24ndCBwYXJzZWQgdW50aWwgdGhlbiBhcyB3ZWxsLCB0aGUgY3VycmVudCBjYWxsJ3MgZGVsYXkgb3B0aW9uIG11c3QgYmUgZXhwbGljaXRseSBwYXNzZWQgaW50byB0aGUgcmV2ZXJzZVxyXG5cdFx0XHRcdFx0IGNhbGwgc28gdGhhdCB0aGUgZGVsYXkgbG9naWMgdGhhdCBvY2N1cnMgaW5zaWRlICpQcmUtUXVldWVpbmcqIGNhbiBwcm9jZXNzIGl0LiAqL1xyXG5cdFx0XHRcdFx0dmFyIHJldmVyc2VPcHRpb25zID0ge1xyXG5cdFx0XHRcdFx0XHRkZWxheTogb3B0cy5kZWxheSxcclxuXHRcdFx0XHRcdFx0cHJvZ3Jlc3M6IG9wdHMucHJvZ3Jlc3NcclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgYSBjb21wbGV0ZSBjYWxsYmFjayB3YXMgcGFzc2VkIGludG8gdGhpcyBjYWxsLCB0cmFuc2ZlciBpdCB0byB0aGUgbG9vcCByZWRpcmVjdCdzIGZpbmFsIFwicmV2ZXJzZVwiIGNhbGxcclxuXHRcdFx0XHRcdCBzbyB0aGF0IGl0J3MgdHJpZ2dlcmVkIHdoZW4gdGhlIGVudGlyZSByZWRpcmVjdCBpcyBjb21wbGV0ZSAoYW5kIG5vdCB3aGVuIHRoZSB2ZXJ5IGZpcnN0IGFuaW1hdGlvbiBpcyBjb21wbGV0ZSkuICovXHJcblx0XHRcdFx0XHRpZiAoeCA9PT0gcmV2ZXJzZUNhbGxzQ291bnQgLSAxKSB7XHJcblx0XHRcdFx0XHRcdHJldmVyc2VPcHRpb25zLmRpc3BsYXkgPSBvcHRzLmRpc3BsYXk7XHJcblx0XHRcdFx0XHRcdHJldmVyc2VPcHRpb25zLnZpc2liaWxpdHkgPSBvcHRzLnZpc2liaWxpdHk7XHJcblx0XHRcdFx0XHRcdHJldmVyc2VPcHRpb25zLmNvbXBsZXRlID0gb3B0cy5jb21wbGV0ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRhbmltYXRlKGVsZW1lbnRzLCBcInJldmVyc2VcIiwgcmV2ZXJzZU9wdGlvbnMpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQ2hhaW5pbmdcclxuXHRcdFx0ICoqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIFJldHVybiB0aGUgZWxlbWVudHMgYmFjayB0byB0aGUgY2FsbCBjaGFpbiwgd2l0aCB3cmFwcGVkIGVsZW1lbnRzIHRha2luZyBwcmVjZWRlbmNlIGluIGNhc2UgVmVsb2NpdHkgd2FzIGNhbGxlZCB2aWEgdGhlICQuZm4uIGV4dGVuc2lvbi4gKi9cclxuXHRcdFx0cmV0dXJuIGdldENoYWluKCk7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8qIFR1cm4gVmVsb2NpdHkgaW50byB0aGUgYW5pbWF0aW9uIGZ1bmN0aW9uLCBleHRlbmRlZCB3aXRoIHRoZSBwcmUtZXhpc3RpbmcgVmVsb2NpdHkgb2JqZWN0LiAqL1xyXG5cdFx0VmVsb2NpdHkgPSAkLmV4dGVuZChhbmltYXRlLCBWZWxvY2l0eSk7XHJcblx0XHQvKiBGb3IgbGVnYWN5IHN1cHBvcnQsIGFsc28gZXhwb3NlIHRoZSBsaXRlcmFsIGFuaW1hdGUgbWV0aG9kLiAqL1xyXG5cdFx0VmVsb2NpdHkuYW5pbWF0ZSA9IGFuaW1hdGU7XHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqXHJcblx0XHQgVGltaW5nXHJcblx0XHQgKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0LyogVGlja2VyIGZ1bmN0aW9uLiAqL1xyXG5cdFx0dmFyIHRpY2tlciA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgckFGU2hpbTtcclxuXHJcblx0XHQvKiBJbmFjdGl2ZSBicm93c2VyIHRhYnMgcGF1c2UgckFGLCB3aGljaCByZXN1bHRzIGluIGFsbCBhY3RpdmUgYW5pbWF0aW9ucyBpbW1lZGlhdGVseSBzcHJpbnRpbmcgdG8gdGhlaXIgY29tcGxldGlvbiBzdGF0ZXMgd2hlbiB0aGUgdGFiIHJlZm9jdXNlcy5cclxuXHRcdCBUbyBnZXQgYXJvdW5kIHRoaXMsIHdlIGR5bmFtaWNhbGx5IHN3aXRjaCByQUYgdG8gc2V0VGltZW91dCAod2hpY2ggdGhlIGJyb3dzZXIgKmRvZXNuJ3QqIHBhdXNlKSB3aGVuIHRoZSB0YWIgbG9zZXMgZm9jdXMuIFdlIHNraXAgdGhpcyBmb3IgbW9iaWxlXHJcblx0XHQgZGV2aWNlcyB0byBhdm9pZCB3YXN0aW5nIGJhdHRlcnkgcG93ZXIgb24gaW5hY3RpdmUgdGFicy4gKi9cclxuXHRcdC8qIE5vdGU6IFRhYiBmb2N1cyBkZXRlY3Rpb24gZG9lc24ndCB3b3JrIG9uIG9sZGVyIHZlcnNpb25zIG9mIElFLCBidXQgdGhhdCdzIG9rYXkgc2luY2UgdGhleSBkb24ndCBzdXBwb3J0IHJBRiB0byBiZWdpbiB3aXRoLiAqL1xyXG5cdFx0aWYgKCFWZWxvY2l0eS5TdGF0ZS5pc01vYmlsZSAmJiBkb2N1bWVudC5oaWRkZW4gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR2YXIgdXBkYXRlVGlja2VyID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0LyogUmVhc3NpZ24gdGhlIHJBRiBmdW5jdGlvbiAod2hpY2ggdGhlIGdsb2JhbCB0aWNrKCkgZnVuY3Rpb24gdXNlcykgYmFzZWQgb24gdGhlIHRhYidzIGZvY3VzIHN0YXRlLiAqL1xyXG5cdFx0XHRcdGlmIChkb2N1bWVudC5oaWRkZW4pIHtcclxuXHRcdFx0XHRcdHRpY2tlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcblx0XHRcdFx0XHRcdC8qIFRoZSB0aWNrIGZ1bmN0aW9uIG5lZWRzIGEgdHJ1dGh5IGZpcnN0IGFyZ3VtZW50IGluIG9yZGVyIHRvIHBhc3MgaXRzIGludGVybmFsIHRpbWVzdGFtcCBjaGVjay4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sodHJ1ZSk7XHJcblx0XHRcdFx0XHRcdH0sIDE2KTtcclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0LyogVGhlIHJBRiBsb29wIGhhcyBiZWVuIHBhdXNlZCBieSB0aGUgYnJvd3Nlciwgc28gd2UgbWFudWFsbHkgcmVzdGFydCB0aGUgdGljay4gKi9cclxuXHRcdFx0XHRcdHRpY2soKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGlja2VyID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCByQUZTaGltO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8qIFBhZ2UgY291bGQgYmUgc2l0dGluZyBpbiB0aGUgYmFja2dyb3VuZCBhdCB0aGlzIHRpbWUgKGkuZS4gb3BlbmVkIGFzIG5ldyB0YWIpIHNvIG1ha2luZyBzdXJlIHdlIHVzZSBjb3JyZWN0IHRpY2tlciBmcm9tIHRoZSBzdGFydCAqL1xyXG5cdFx0XHR1cGRhdGVUaWNrZXIoKTtcclxuXHJcblx0XHRcdC8qIEFuZCB0aGVuIHJ1biBjaGVjayBhZ2FpbiBldmVyeSB0aW1lIHZpc2liaWxpdHkgY2hhbmdlcyAqL1xyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCB1cGRhdGVUaWNrZXIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKioqKioqKioqKipcclxuXHRcdCBUaWNrXHJcblx0XHQgKioqKioqKioqKioqL1xyXG5cclxuXHRcdC8qIE5vdGU6IEFsbCBjYWxscyB0byBWZWxvY2l0eSBhcmUgcHVzaGVkIHRvIHRoZSBWZWxvY2l0eS5TdGF0ZS5jYWxscyBhcnJheSwgd2hpY2ggaXMgZnVsbHkgaXRlcmF0ZWQgdGhyb3VnaCB1cG9uIGVhY2ggdGljay4gKi9cclxuXHRcdGZ1bmN0aW9uIHRpY2sodGltZXN0YW1wKSB7XHJcblx0XHRcdC8qIEFuIGVtcHR5IHRpbWVzdGFtcCBhcmd1bWVudCBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBmaXJzdCB0aWNrIG9jY3VyZW5jZSBzaW5jZSB0aWNraW5nIHdhcyB0dXJuZWQgb24uXHJcblx0XHRcdCBXZSBsZXZlcmFnZSB0aGlzIG1ldGFkYXRhIHRvIGZ1bGx5IGlnbm9yZSB0aGUgZmlyc3QgdGljayBwYXNzIHNpbmNlIFJBRidzIGluaXRpYWwgcGFzcyBpcyBmaXJlZCB3aGVuZXZlclxyXG5cdFx0XHQgdGhlIGJyb3dzZXIncyBuZXh0IHRpY2sgc3luYyB0aW1lIG9jY3Vycywgd2hpY2ggcmVzdWx0cyBpbiB0aGUgZmlyc3QgZWxlbWVudHMgc3ViamVjdGVkIHRvIFZlbG9jaXR5XHJcblx0XHRcdCBjYWxscyBiZWluZyBhbmltYXRlZCBvdXQgb2Ygc3luYyB3aXRoIGFueSBlbGVtZW50cyBhbmltYXRlZCBpbW1lZGlhdGVseSB0aGVyZWFmdGVyLiBJbiBzaG9ydCwgd2UgaWdub3JlXHJcblx0XHRcdCB0aGUgZmlyc3QgUkFGIHRpY2sgcGFzcyBzbyB0aGF0IGVsZW1lbnRzIGJlaW5nIGltbWVkaWF0ZWx5IGNvbnNlY3V0aXZlbHkgYW5pbWF0ZWQgLS0gaW5zdGVhZCBvZiBzaW11bHRhbmVvdXNseSBhbmltYXRlZFxyXG5cdFx0XHQgYnkgdGhlIHNhbWUgVmVsb2NpdHkgY2FsbCAtLSBhcmUgcHJvcGVybHkgYmF0Y2hlZCBpbnRvIHRoZSBzYW1lIGluaXRpYWwgUkFGIHRpY2sgYW5kIGNvbnNlcXVlbnRseSByZW1haW4gaW4gc3luYyB0aGVyZWFmdGVyLiAqL1xyXG5cdFx0XHRpZiAodGltZXN0YW1wKSB7XHJcblx0XHRcdFx0LyogV2Ugbm9ybWFsbHkgdXNlIFJBRidzIGhpZ2ggcmVzb2x1dGlvbiB0aW1lc3RhbXAgYnV0IGFzIGl0IGNhbiBiZSBzaWduaWZpY2FudGx5IG9mZnNldCB3aGVuIHRoZSBicm93c2VyIGlzXHJcblx0XHRcdFx0IHVuZGVyIGhpZ2ggc3RyZXNzIHdlIGdpdmUgdGhlIG9wdGlvbiBmb3IgY2hvcHBpbmVzcyBvdmVyIGFsbG93aW5nIHRoZSBicm93c2VyIHRvIGRyb3AgaHVnZSBjaHVua3Mgb2YgZnJhbWVzLlxyXG5cdFx0XHRcdCBXZSB1c2UgcGVyZm9ybWFuY2Uubm93KCkgYW5kIHNoaW0gaXQgaWYgaXQgZG9lc24ndCBleGlzdCBmb3Igd2hlbiB0aGUgdGFiIGlzIGhpZGRlbi4gKi9cclxuXHRcdFx0XHR2YXIgdGltZUN1cnJlbnQgPSBWZWxvY2l0eS50aW1lc3RhbXAgJiYgdGltZXN0YW1wICE9PSB0cnVlID8gdGltZXN0YW1wIDogcGVyZm9ybWFuY2Uubm93KCk7XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBDYWxsIEl0ZXJhdGlvblxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0dmFyIGNhbGxzTGVuZ3RoID0gVmVsb2NpdHkuU3RhdGUuY2FsbHMubGVuZ3RoO1xyXG5cclxuXHRcdFx0XHQvKiBUbyBzcGVlZCB1cCBpdGVyYXRpbmcgb3ZlciB0aGlzIGFycmF5LCBpdCBpcyBjb21wYWN0ZWQgKGZhbHNleSBpdGVtcyAtLSBjYWxscyB0aGF0IGhhdmUgY29tcGxldGVkIC0tIGFyZSByZW1vdmVkKVxyXG5cdFx0XHRcdCB3aGVuIGl0cyBsZW5ndGggaGFzIGJhbGxvb25lZCB0byBhIHBvaW50IHRoYXQgY2FuIGltcGFjdCB0aWNrIHBlcmZvcm1hbmNlLiBUaGlzIG9ubHkgYmVjb21lcyBuZWNlc3Nhcnkgd2hlbiBhbmltYXRpb25cclxuXHRcdFx0XHQgaGFzIGJlZW4gY29udGludW91cyB3aXRoIG1hbnkgZWxlbWVudHMgb3ZlciBhIGxvbmcgcGVyaW9kIG9mIHRpbWU7IHdoZW5ldmVyIGFsbCBhY3RpdmUgY2FsbHMgYXJlIGNvbXBsZXRlZCwgY29tcGxldGVDYWxsKCkgY2xlYXJzIFZlbG9jaXR5LlN0YXRlLmNhbGxzLiAqL1xyXG5cdFx0XHRcdGlmIChjYWxsc0xlbmd0aCA+IDEwMDAwKSB7XHJcblx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5jYWxscyA9IGNvbXBhY3RTcGFyc2VBcnJheShWZWxvY2l0eS5TdGF0ZS5jYWxscyk7XHJcblx0XHRcdFx0XHRjYWxsc0xlbmd0aCA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzLmxlbmd0aDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIGFjdGl2ZSBjYWxsLiAqL1xyXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbHNMZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0LyogV2hlbiBhIFZlbG9jaXR5IGNhbGwgaXMgY29tcGxldGVkLCBpdHMgVmVsb2NpdHkuU3RhdGUuY2FsbHMgZW50cnkgaXMgc2V0IHRvIGZhbHNlLiBDb250aW51ZSBvbiB0byB0aGUgbmV4dCBjYWxsLiAqL1xyXG5cdFx0XHRcdFx0aWYgKCFWZWxvY2l0eS5TdGF0ZS5jYWxsc1tpXSkge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHQgQ2FsbC1XaWRlIFZhcmlhYmxlc1xyXG5cdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHR2YXIgY2FsbENvbnRhaW5lciA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzW2ldLFxyXG5cdFx0XHRcdFx0XHRcdGNhbGwgPSBjYWxsQ29udGFpbmVyWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG9wdHMgPSBjYWxsQ29udGFpbmVyWzJdLFxyXG5cdFx0XHRcdFx0XHRcdHRpbWVTdGFydCA9IGNhbGxDb250YWluZXJbM10sXHJcblx0XHRcdFx0XHRcdFx0Zmlyc3RUaWNrID0gIXRpbWVTdGFydCxcclxuXHRcdFx0XHRcdFx0XHR0d2VlbkR1bW15VmFsdWUgPSBudWxsLFxyXG5cdFx0XHRcdFx0XHRcdHBhdXNlT2JqZWN0ID0gY2FsbENvbnRhaW5lcls1XSxcclxuXHRcdFx0XHRcdFx0XHRtaWxsaXNlY29uZHNFbGxhcHNlZCA9IGNhbGxDb250YWluZXJbNl07XHJcblxyXG5cclxuXHJcblx0XHRcdFx0XHQvKiBJZiB0aW1lU3RhcnQgaXMgdW5kZWZpbmVkLCB0aGVuIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhhdCB0aGlzIGNhbGwgaGFzIGJlZW4gcHJvY2Vzc2VkIGJ5IHRpY2soKS5cclxuXHRcdFx0XHRcdCBXZSBhc3NpZ24gdGltZVN0YXJ0IG5vdyBzbyB0aGF0IGl0cyB2YWx1ZSBpcyBhcyBjbG9zZSB0byB0aGUgcmVhbCBhbmltYXRpb24gc3RhcnQgdGltZSBhcyBwb3NzaWJsZS5cclxuXHRcdFx0XHRcdCAoQ29udmVyc2VseSwgaGFkIHRpbWVTdGFydCBiZWVuIGRlZmluZWQgd2hlbiB0aGlzIGNhbGwgd2FzIGFkZGVkIHRvIFZlbG9jaXR5LlN0YXRlLmNhbGxzLCB0aGUgZGVsYXlcclxuXHRcdFx0XHRcdCBiZXR3ZWVuIHRoYXQgdGltZSBhbmQgbm93IHdvdWxkIGNhdXNlIHRoZSBmaXJzdCBmZXcgZnJhbWVzIG9mIHRoZSB0d2VlbiB0byBiZSBza2lwcGVkIHNpbmNlXHJcblx0XHRcdFx0XHQgcGVyY2VudENvbXBsZXRlIGlzIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8gdGltZVN0YXJ0LikgKi9cclxuXHRcdFx0XHRcdC8qIEZ1cnRoZXIsIHN1YnRyYWN0IDE2bXMgKHRoZSBhcHByb3hpbWF0ZSByZXNvbHV0aW9uIG9mIFJBRikgZnJvbSB0aGUgY3VycmVudCB0aW1lIHZhbHVlIHNvIHRoYXQgdGhlXHJcblx0XHRcdFx0XHQgZmlyc3QgdGljayBpdGVyYXRpb24gaXNuJ3Qgd2FzdGVkIGJ5IGFuaW1hdGluZyBhdCAwJSB0d2VlbiBjb21wbGV0aW9uLCB3aGljaCB3b3VsZCBwcm9kdWNlIHRoZVxyXG5cdFx0XHRcdFx0IHNhbWUgc3R5bGUgdmFsdWUgYXMgdGhlIGVsZW1lbnQncyBjdXJyZW50IHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0aWYgKCF0aW1lU3RhcnQpIHtcclxuXHRcdFx0XHRcdFx0dGltZVN0YXJ0ID0gVmVsb2NpdHkuU3RhdGUuY2FsbHNbaV1bM10gPSB0aW1lQ3VycmVudCAtIDE2O1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIElmIGEgcGF1c2Ugb2JqZWN0IGlzIHByZXNlbnQsIHNraXAgcHJvY2Vzc2luZyB1bmxlc3MgaXQgaGFzIGJlZW4gc2V0IHRvIHJlc3VtZSAqL1xyXG5cdFx0XHRcdFx0aWYgKHBhdXNlT2JqZWN0KSB7XHJcblx0XHRcdFx0XHRcdGlmIChwYXVzZU9iamVjdC5yZXN1bWUgPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBVcGRhdGUgdGhlIHRpbWUgc3RhcnQgdG8gYWNjb21vZGF0ZSB0aGUgcGF1c2VkIGNvbXBsZXRpb24gYW1vdW50ICovXHJcblx0XHRcdFx0XHRcdFx0dGltZVN0YXJ0ID0gY2FsbENvbnRhaW5lclszXSA9IE1hdGgucm91bmQodGltZUN1cnJlbnQgLSBtaWxsaXNlY29uZHNFbGxhcHNlZCAtIDE2KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogUmVtb3ZlIHBhdXNlIG9iamVjdCBhZnRlciBwcm9jZXNzaW5nICovXHJcblx0XHRcdFx0XHRcdFx0Y2FsbENvbnRhaW5lcls1XSA9IG51bGw7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRtaWxsaXNlY29uZHNFbGxhcHNlZCA9IGNhbGxDb250YWluZXJbNl0gPSB0aW1lQ3VycmVudCAtIHRpbWVTdGFydDtcclxuXHJcblx0XHRcdFx0XHQvKiBUaGUgdHdlZW4ncyBjb21wbGV0aW9uIHBlcmNlbnRhZ2UgaXMgcmVsYXRpdmUgdG8gdGhlIHR3ZWVuJ3Mgc3RhcnQgdGltZSwgbm90IHRoZSB0d2VlbidzIHN0YXJ0IHZhbHVlXHJcblx0XHRcdFx0XHQgKHdoaWNoIHdvdWxkIHJlc3VsdCBpbiB1bnByZWRpY3RhYmxlIHR3ZWVuIGR1cmF0aW9ucyBzaW5jZSBKYXZhU2NyaXB0J3MgdGltZXJzIGFyZSBub3QgcGFydGljdWxhcmx5IGFjY3VyYXRlKS5cclxuXHRcdFx0XHRcdCBBY2NvcmRpbmdseSwgd2UgZW5zdXJlIHRoYXQgcGVyY2VudENvbXBsZXRlIGRvZXMgbm90IGV4Y2VlZCAxLiAqL1xyXG5cdFx0XHRcdFx0dmFyIHBlcmNlbnRDb21wbGV0ZSA9IE1hdGgubWluKChtaWxsaXNlY29uZHNFbGxhcHNlZCkgLyBvcHRzLmR1cmF0aW9uLCAxKTtcclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0IEVsZW1lbnQgSXRlcmF0aW9uXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHQvKiBGb3IgZXZlcnkgY2FsbCwgaXRlcmF0ZSB0aHJvdWdoIGVhY2ggb2YgdGhlIGVsZW1lbnRzIGluIGl0cyBzZXQuICovXHJcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMCwgY2FsbExlbmd0aCA9IGNhbGwubGVuZ3RoOyBqIDwgY2FsbExlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdHZhciB0d2VlbnNDb250YWluZXIgPSBjYWxsW2pdLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZWxlbWVudCA9IHR3ZWVuc0NvbnRhaW5lci5lbGVtZW50O1xyXG5cclxuXHRcdFx0XHRcdFx0LyogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgZWxlbWVudCBoYXMgYmVlbiBkZWxldGVkIG1pZHdheSB0aHJvdWdoIHRoZSBhbmltYXRpb24gYnkgY2hlY2tpbmcgZm9yIHRoZVxyXG5cdFx0XHRcdFx0XHQgY29udGludWVkIGV4aXN0ZW5jZSBvZiBpdHMgZGF0YSBjYWNoZS4gSWYgaXQncyBnb25lLCBvciB0aGUgZWxlbWVudCBpcyBjdXJyZW50bHkgcGF1c2VkLCBza2lwIGFuaW1hdGluZyB0aGlzIGVsZW1lbnQuICovXHJcblx0XHRcdFx0XHRcdGlmICghRGF0YShlbGVtZW50KSkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgdHJhbnNmb3JtUHJvcGVydHlFeGlzdHMgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdCBEaXNwbGF5ICYgVmlzaWJpbGl0eSBUb2dnbGluZ1xyXG5cdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBkaXNwbGF5IG9wdGlvbiBpcyBzZXQgdG8gbm9uLVwibm9uZVwiLCBzZXQgaXQgdXBmcm9udCBzbyB0aGF0IHRoZSBlbGVtZW50IGNhbiBiZWNvbWUgdmlzaWJsZSBiZWZvcmUgdHdlZW5pbmcgYmVnaW5zLlxyXG5cdFx0XHRcdFx0XHQgKE90aGVyd2lzZSwgZGlzcGxheSdzIFwibm9uZVwiIHZhbHVlIGlzIHNldCBpbiBjb21wbGV0ZUNhbGwoKSBvbmNlIHRoZSBhbmltYXRpb24gaGFzIGNvbXBsZXRlZC4pICovXHJcblx0XHRcdFx0XHRcdGlmIChvcHRzLmRpc3BsYXkgIT09IHVuZGVmaW5lZCAmJiBvcHRzLmRpc3BsYXkgIT09IG51bGwgJiYgb3B0cy5kaXNwbGF5ICE9PSBcIm5vbmVcIikge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChvcHRzLmRpc3BsYXkgPT09IFwiZmxleFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgZmxleFZhbHVlcyA9IFtcIi13ZWJraXQtYm94XCIsIFwiLW1vei1ib3hcIiwgXCItbXMtZmxleGJveFwiLCBcIi13ZWJraXQtZmxleFwiXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQkLmVhY2goZmxleFZhbHVlcywgZnVuY3Rpb24oaSwgZmxleFZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdENTUy5zZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiZGlzcGxheVwiLCBmbGV4VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImRpc3BsYXlcIiwgb3B0cy5kaXNwbGF5KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogU2FtZSBnb2VzIHdpdGggdGhlIHZpc2liaWxpdHkgb3B0aW9uLCBidXQgaXRzIFwibm9uZVwiIGVxdWl2YWxlbnQgaXMgXCJoaWRkZW5cIi4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKG9wdHMudmlzaWJpbGl0eSAhPT0gdW5kZWZpbmVkICYmIG9wdHMudmlzaWJpbGl0eSAhPT0gXCJoaWRkZW5cIikge1xyXG5cdFx0XHRcdFx0XHRcdENTUy5zZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwidmlzaWJpbGl0eVwiLCBvcHRzLnZpc2liaWxpdHkpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdCBQcm9wZXJ0eSBJdGVyYXRpb25cclxuXHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdC8qIEZvciBldmVyeSBlbGVtZW50LCBpdGVyYXRlIHRocm91Z2ggZWFjaCBwcm9wZXJ0eS4gKi9cclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgcHJvcGVydHkgaW4gdHdlZW5zQ29udGFpbmVyKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogTm90ZTogSW4gYWRkaXRpb24gdG8gcHJvcGVydHkgdHdlZW4gZGF0YSwgdHdlZW5zQ29udGFpbmVyIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGl0cyBhc3NvY2lhdGVkIGVsZW1lbnQuICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKHR3ZWVuc0NvbnRhaW5lci5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkgJiYgcHJvcGVydHkgIT09IFwiZWxlbWVudFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdHdlZW4gPSB0d2VlbnNDb250YWluZXJbcHJvcGVydHldLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBFYXNpbmcgY2FuIGVpdGhlciBiZSBhIHByZS1nZW5lcmVhdGVkIGZ1bmN0aW9uIG9yIGEgc3RyaW5nIHRoYXQgcmVmZXJlbmNlcyBhIHByZS1yZWdpc3RlcmVkIGVhc2luZ1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBvbiB0aGUgVmVsb2NpdHkuRWFzaW5ncyBvYmplY3QuIEluIGVpdGhlciBjYXNlLCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIGVhc2luZyAqZnVuY3Rpb24qLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVhc2luZyA9IFR5cGUuaXNTdHJpbmcodHdlZW4uZWFzaW5nKSA/IFZlbG9jaXR5LkVhc2luZ3NbdHdlZW4uZWFzaW5nXSA6IHR3ZWVuLmVhc2luZztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0XHQgQ3VycmVudCBWYWx1ZSBDYWxjdWxhdGlvblxyXG5cdFx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoVHlwZS5pc1N0cmluZyh0d2Vlbi5wYXR0ZXJuKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGF0dGVyblJlcGxhY2UgPSBwZXJjZW50Q29tcGxldGUgPT09IDEgP1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oJDAsIGluZGV4LCByb3VuZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gdHdlZW4uZW5kVmFsdWVbaW5kZXhdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJvdW5kID8gTWF0aC5yb3VuZChyZXN1bHQpIDogcmVzdWx0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSA6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigkMCwgaW5kZXgsIHJvdW5kKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBzdGFydFZhbHVlID0gdHdlZW4uc3RhcnRWYWx1ZVtpbmRleF0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0d2VlbkRlbHRhID0gdHdlZW4uZW5kVmFsdWVbaW5kZXhdIC0gc3RhcnRWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdCA9IHN0YXJ0VmFsdWUgKyAodHdlZW5EZWx0YSAqIGVhc2luZyhwZXJjZW50Q29tcGxldGUsIG9wdHMsIHR3ZWVuRGVsdGEpKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByb3VuZCA/IE1hdGgucm91bmQocmVzdWx0KSA6IHJlc3VsdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWUgPSB0d2Vlbi5wYXR0ZXJuLnJlcGxhY2UoL3soXFxkKykoISk/fS9nLCBwYXR0ZXJuUmVwbGFjZSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHBlcmNlbnRDb21wbGV0ZSA9PT0gMSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHRpY2sgcGFzcyAoaWYgd2UndmUgcmVhY2hlZCAxMDAlIGNvbXBsZXRpb24gZm9yIHRoaXMgdHdlZW4pLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgZW5zdXJlIHRoYXQgY3VycmVudFZhbHVlIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGl0cyB0YXJnZXQgZW5kVmFsdWUgc28gdGhhdCBpdCdzIG5vdCBzdWJqZWN0ZWQgdG8gYW55IHJvdW5kaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWUgPSB0d2Vlbi5lbmRWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIE90aGVyd2lzZSwgY2FsY3VsYXRlIGN1cnJlbnRWYWx1ZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkZWx0YSBmcm9tIHN0YXJ0VmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB0d2VlbkRlbHRhID0gdHdlZW4uZW5kVmFsdWUgLSB0d2Vlbi5zdGFydFZhbHVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZhbHVlID0gdHdlZW4uc3RhcnRWYWx1ZSArICh0d2VlbkRlbHRhICogZWFzaW5nKHBlcmNlbnRDb21wbGV0ZSwgb3B0cywgdHdlZW5EZWx0YSkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiBubyB2YWx1ZSBjaGFuZ2UgaXMgb2NjdXJyaW5nLCBkb24ndCBwcm9jZWVkIHdpdGggRE9NIHVwZGF0aW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFmaXJzdFRpY2sgJiYgKGN1cnJlbnRWYWx1ZSA9PT0gdHdlZW4uY3VycmVudFZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHR0d2Vlbi5jdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogSWYgd2UncmUgdHdlZW5pbmcgYSBmYWtlICd0d2VlbicgcHJvcGVydHkgaW4gb3JkZXIgdG8gbG9nIHRyYW5zaXRpb24gdmFsdWVzLCB1cGRhdGUgdGhlIG9uZS1wZXItY2FsbCB2YXJpYWJsZSBzbyB0aGF0XHJcblx0XHRcdFx0XHRcdFx0XHQgaXQgY2FuIGJlIHBhc3NlZCBpbnRvIHRoZSBwcm9ncmVzcyBjYWxsYmFjay4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eSA9PT0gXCJ0d2VlblwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHR3ZWVuRHVtbXlWYWx1ZSA9IGN1cnJlbnRWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHRcdFx0IEhvb2tzOiBQYXJ0IElcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGhvb2tSb290O1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogRm9yIGhvb2tlZCBwcm9wZXJ0aWVzLCB0aGUgbmV3bHktdXBkYXRlZCByb290UHJvcGVydHlWYWx1ZUNhY2hlIGlzIGNhY2hlZCBvbnRvIHRoZSBlbGVtZW50IHNvIHRoYXQgaXQgY2FuIGJlIHVzZWRcclxuXHRcdFx0XHRcdFx0XHRcdFx0IGZvciBzdWJzZXF1ZW50IGhvb2tzIGluIHRoaXMgY2FsbCB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUgcm9vdCBwcm9wZXJ0eS4gSWYgd2UgZGlkbid0IGNhY2hlIHRoZSB1cGRhdGVkXHJcblx0XHRcdFx0XHRcdFx0XHRcdCByb290UHJvcGVydHlWYWx1ZSwgZWFjaCBzdWJzZXF1ZW50IHVwZGF0ZSB0byB0aGUgcm9vdCBwcm9wZXJ0eSBpbiB0aGlzIHRpY2sgcGFzcyB3b3VsZCByZXNldCB0aGUgcHJldmlvdXMgaG9vaydzXHJcblx0XHRcdFx0XHRcdFx0XHRcdCB1cGRhdGVzIHRvIHJvb3RQcm9wZXJ0eVZhbHVlIHByaW9yIHRvIGluamVjdGlvbi4gQSBuaWNlIHBlcmZvcm1hbmNlIGJ5cHJvZHVjdCBvZiByb290UHJvcGVydHlWYWx1ZSBjYWNoaW5nIGlzIHRoYXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0IHN1YnNlcXVlbnRseSBjaGFpbmVkIGFuaW1hdGlvbnMgdXNpbmcgdGhlIHNhbWUgaG9va1Jvb3QgYnV0IGEgZGlmZmVyZW50IGhvb2sgY2FuIHVzZSB0aGlzIGNhY2hlZCByb290UHJvcGVydHlWYWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKENTUy5Ib29rcy5yZWdpc3RlcmVkW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGhvb2tSb290ID0gQ1NTLkhvb2tzLmdldFJvb3QocHJvcGVydHkpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcm9vdFByb3BlcnR5VmFsdWVDYWNoZSA9IERhdGEoZWxlbWVudCkucm9vdFByb3BlcnR5VmFsdWVDYWNoZVtob29rUm9vdF07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChyb290UHJvcGVydHlWYWx1ZUNhY2hlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0d2Vlbi5yb290UHJvcGVydHlWYWx1ZSA9IHJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHRcdFx0IERPTSBVcGRhdGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0Lyogc2V0UHJvcGVydHlWYWx1ZSgpIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHByb3BlcnR5IG5hbWUgYW5kIHByb3BlcnR5IHZhbHVlIHBvc3QgYW55IG5vcm1hbGl6YXRpb24gdGhhdCBtYXkgaGF2ZSBiZWVuIHBlcmZvcm1lZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogVG8gc29sdmUgYW4gSUU8PTggcG9zaXRpb25pbmcgYnVnLCB0aGUgdW5pdCB0eXBlIGlzIGRyb3BwZWQgd2hlbiBzZXR0aW5nIGEgcHJvcGVydHkgdmFsdWUgb2YgMC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFkanVzdGVkU2V0RGF0YSA9IENTUy5zZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIC8qIFNFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0d2Vlbi5jdXJyZW50VmFsdWUgKyAoSUUgPCA5ICYmIHBhcnNlRmxvYXQoY3VycmVudFZhbHVlKSA9PT0gMCA/IFwiXCIgOiB0d2Vlbi51bml0VHlwZSksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0d2Vlbi5yb290UHJvcGVydHlWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR3ZWVuLnNjcm9sbERhdGEpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHRcdFx0IEhvb2tzOiBQYXJ0IElJXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogTm93IHRoYXQgd2UgaGF2ZSB0aGUgaG9vaydzIHVwZGF0ZWQgcm9vdFByb3BlcnR5VmFsdWUgKHRoZSBwb3N0LXByb2Nlc3NlZCB2YWx1ZSBwcm92aWRlZCBieSBhZGp1c3RlZFNldERhdGEpLCBjYWNoZSBpdCBvbnRvIHRoZSBlbGVtZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoQ1NTLkhvb2tzLnJlZ2lzdGVyZWRbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogU2luY2UgYWRqdXN0ZWRTZXREYXRhIGNvbnRhaW5zIG5vcm1hbGl6ZWQgZGF0YSByZWFkeSBmb3IgRE9NIHVwZGF0aW5nLCB0aGUgcm9vdFByb3BlcnR5VmFsdWUgbmVlZHMgdG8gYmUgcmUtZXh0cmFjdGVkIGZyb20gaXRzIG5vcm1hbGl6ZWQgZm9ybS4gPz8gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbaG9va1Jvb3RdKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLnJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGVbaG9va1Jvb3RdID0gQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbaG9va1Jvb3RdKFwiZXh0cmFjdFwiLCBudWxsLCBhZGp1c3RlZFNldERhdGFbMV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLnJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGVbaG9va1Jvb3RdID0gYWRqdXN0ZWRTZXREYXRhWzFdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgVHJhbnNmb3Jtc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogRmxhZyB3aGV0aGVyIGEgdHJhbnNmb3JtIHByb3BlcnR5IGlzIGJlaW5nIGFuaW1hdGVkIHNvIHRoYXQgZmx1c2hUcmFuc2Zvcm1DYWNoZSgpIGNhbiBiZSB0cmlnZ2VyZWQgb25jZSB0aGlzIHRpY2sgcGFzcyBpcyBjb21wbGV0ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFkanVzdGVkU2V0RGF0YVswXSA9PT0gXCJ0cmFuc2Zvcm1cIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyYW5zZm9ybVByb3BlcnR5RXhpc3RzID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdCBtb2JpbGVIQVxyXG5cdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIG1vYmlsZUhBIGlzIGVuYWJsZWQsIHNldCB0aGUgdHJhbnNsYXRlM2QgdHJhbnNmb3JtIHRvIG51bGwgdG8gZm9yY2UgaGFyZHdhcmUgYWNjZWxlcmF0aW9uLlxyXG5cdFx0XHRcdFx0XHQgSXQncyBzYWZlIHRvIG92ZXJyaWRlIHRoaXMgcHJvcGVydHkgc2luY2UgVmVsb2NpdHkgZG9lc24ndCBhY3R1YWxseSBzdXBwb3J0IGl0cyBhbmltYXRpb24gKGhvb2tzIGFyZSB1c2VkIGluIGl0cyBwbGFjZSkuICovXHJcblx0XHRcdFx0XHRcdGlmIChvcHRzLm1vYmlsZUhBKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogRG9uJ3Qgc2V0IHRoZSBudWxsIHRyYW5zZm9ybSBoYWNrIGlmIHdlJ3ZlIGFscmVhZHkgZG9uZSBzby4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoRGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZS50cmFuc2xhdGUzZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBBbGwgZW50cmllcyBvbiB0aGUgdHJhbnNmb3JtQ2FjaGUgb2JqZWN0IGFyZSBsYXRlciBjb25jYXRlbmF0ZWQgaW50byBhIHNpbmdsZSB0cmFuc2Zvcm0gc3RyaW5nIHZpYSBmbHVzaFRyYW5zZm9ybUNhY2hlKCkuICovXHJcblx0XHRcdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLnRyYW5zZm9ybUNhY2hlLnRyYW5zbGF0ZTNkID0gXCIoMHB4LCAwcHgsIDBweClcIjtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1Qcm9wZXJ0eUV4aXN0cyA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAodHJhbnNmb3JtUHJvcGVydHlFeGlzdHMpIHtcclxuXHRcdFx0XHRcdFx0XHRDU1MuZmx1c2hUcmFuc2Zvcm1DYWNoZShlbGVtZW50KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIFRoZSBub24tXCJub25lXCIgZGlzcGxheSB2YWx1ZSBpcyBvbmx5IGFwcGxpZWQgdG8gYW4gZWxlbWVudCBvbmNlIC0tIHdoZW4gaXRzIGFzc29jaWF0ZWQgY2FsbCBpcyBmaXJzdCB0aWNrZWQgdGhyb3VnaC5cclxuXHRcdFx0XHRcdCBBY2NvcmRpbmdseSwgaXQncyBzZXQgdG8gZmFsc2Ugc28gdGhhdCBpdCBpc24ndCByZS1wcm9jZXNzZWQgYnkgdGhpcyBjYWxsIGluIHRoZSBuZXh0IHRpY2suICovXHJcblx0XHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ICE9PSB1bmRlZmluZWQgJiYgb3B0cy5kaXNwbGF5ICE9PSBcIm5vbmVcIikge1xyXG5cdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5jYWxsc1tpXVsyXS5kaXNwbGF5ID0gZmFsc2U7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAob3B0cy52aXNpYmlsaXR5ICE9PSB1bmRlZmluZWQgJiYgb3B0cy52aXNpYmlsaXR5ICE9PSBcImhpZGRlblwiKSB7XHJcblx0XHRcdFx0XHRcdFZlbG9jaXR5LlN0YXRlLmNhbGxzW2ldWzJdLnZpc2liaWxpdHkgPSBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBQYXNzIHRoZSBlbGVtZW50cyBhbmQgdGhlIHRpbWluZyBkYXRhIChwZXJjZW50Q29tcGxldGUsIG1zUmVtYWluaW5nLCB0aW1lU3RhcnQsIHR3ZWVuRHVtbXlWYWx1ZSkgaW50byB0aGUgcHJvZ3Jlc3MgY2FsbGJhY2suICovXHJcblx0XHRcdFx0XHRpZiAob3B0cy5wcm9ncmVzcykge1xyXG5cdFx0XHRcdFx0XHRvcHRzLnByb2dyZXNzLmNhbGwoY2FsbENvbnRhaW5lclsxXSxcclxuXHRcdFx0XHRcdFx0XHRcdGNhbGxDb250YWluZXJbMV0sXHJcblx0XHRcdFx0XHRcdFx0XHRwZXJjZW50Q29tcGxldGUsXHJcblx0XHRcdFx0XHRcdFx0XHRNYXRoLm1heCgwLCAodGltZVN0YXJ0ICsgb3B0cy5kdXJhdGlvbikgLSB0aW1lQ3VycmVudCksXHJcblx0XHRcdFx0XHRcdFx0XHR0aW1lU3RhcnQsXHJcblx0XHRcdFx0XHRcdFx0XHR0d2VlbkR1bW15VmFsdWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIElmIHRoaXMgY2FsbCBoYXMgZmluaXNoZWQgdHdlZW5pbmcsIHBhc3MgaXRzIGluZGV4IHRvIGNvbXBsZXRlQ2FsbCgpIHRvIGhhbmRsZSBjYWxsIGNsZWFudXAuICovXHJcblx0XHRcdFx0XHRpZiAocGVyY2VudENvbXBsZXRlID09PSAxKSB7XHJcblx0XHRcdFx0XHRcdGNvbXBsZXRlQ2FsbChpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIE5vdGU6IGNvbXBsZXRlQ2FsbCgpIHNldHMgdGhlIGlzVGlja2luZyBmbGFnIHRvIGZhbHNlIHdoZW4gdGhlIGxhc3QgY2FsbCBvbiBWZWxvY2l0eS5TdGF0ZS5jYWxscyBoYXMgY29tcGxldGVkLiAqL1xyXG5cdFx0XHRpZiAoVmVsb2NpdHkuU3RhdGUuaXNUaWNraW5nKSB7XHJcblx0XHRcdFx0dGlja2VyKHRpY2spO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdCBDYWxsIENvbXBsZXRpb25cclxuXHRcdCAqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdC8qIE5vdGU6IFVubGlrZSB0aWNrKCksIHdoaWNoIHByb2Nlc3NlcyBhbGwgYWN0aXZlIGNhbGxzIGF0IG9uY2UsIGNhbGwgY29tcGxldGlvbiBpcyBoYW5kbGVkIG9uIGEgcGVyLWNhbGwgYmFzaXMuICovXHJcblx0XHRmdW5jdGlvbiBjb21wbGV0ZUNhbGwoY2FsbEluZGV4LCBpc1N0b3BwZWQpIHtcclxuXHRcdFx0LyogRW5zdXJlIHRoZSBjYWxsIGV4aXN0cy4gKi9cclxuXHRcdFx0aWYgKCFWZWxvY2l0eS5TdGF0ZS5jYWxsc1tjYWxsSW5kZXhdKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBQdWxsIHRoZSBtZXRhZGF0YSBmcm9tIHRoZSBjYWxsLiAqL1xyXG5cdFx0XHR2YXIgY2FsbCA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzW2NhbGxJbmRleF1bMF0sXHJcblx0XHRcdFx0XHRlbGVtZW50cyA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzW2NhbGxJbmRleF1bMV0sXHJcblx0XHRcdFx0XHRvcHRzID0gVmVsb2NpdHkuU3RhdGUuY2FsbHNbY2FsbEluZGV4XVsyXSxcclxuXHRcdFx0XHRcdHJlc29sdmVyID0gVmVsb2NpdHkuU3RhdGUuY2FsbHNbY2FsbEluZGV4XVs0XTtcclxuXHJcblx0XHRcdHZhciByZW1haW5pbmdDYWxsc0V4aXN0ID0gZmFsc2U7XHJcblxyXG5cdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgRWxlbWVudCBGaW5hbGl6YXRpb25cclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRmb3IgKHZhciBpID0gMCwgY2FsbExlbmd0aCA9IGNhbGwubGVuZ3RoOyBpIDwgY2FsbExlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0dmFyIGVsZW1lbnQgPSBjYWxsW2ldLmVsZW1lbnQ7XHJcblxyXG5cdFx0XHRcdC8qIElmIHRoZSB1c2VyIHNldCBkaXNwbGF5IHRvIFwibm9uZVwiIChpbnRlbmRpbmcgdG8gaGlkZSB0aGUgZWxlbWVudCksIHNldCBpdCBub3cgdGhhdCB0aGUgYW5pbWF0aW9uIGhhcyBjb21wbGV0ZWQuICovXHJcblx0XHRcdFx0LyogTm90ZTogZGlzcGxheTpub25lIGlzbid0IHNldCB3aGVuIGNhbGxzIGFyZSBtYW51YWxseSBzdG9wcGVkICh2aWEgVmVsb2NpdHkoXCJzdG9wXCIpLiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IERpc3BsYXkgZ2V0cyBpZ25vcmVkIHdpdGggXCJyZXZlcnNlXCIgY2FsbHMgYW5kIGluZmluaXRlIGxvb3BzLCBzaW5jZSB0aGlzIGJlaGF2aW9yIHdvdWxkIGJlIHVuZGVzaXJhYmxlLiAqL1xyXG5cdFx0XHRcdGlmICghaXNTdG9wcGVkICYmICFvcHRzLmxvb3ApIHtcclxuXHRcdFx0XHRcdGlmIChvcHRzLmRpc3BsYXkgPT09IFwibm9uZVwiKSB7XHJcblx0XHRcdFx0XHRcdENTUy5zZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiZGlzcGxheVwiLCBvcHRzLmRpc3BsYXkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChvcHRzLnZpc2liaWxpdHkgPT09IFwiaGlkZGVuXCIpIHtcclxuXHRcdFx0XHRcdFx0Q1NTLnNldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJ2aXNpYmlsaXR5XCIsIG9wdHMudmlzaWJpbGl0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBJZiB0aGUgZWxlbWVudCdzIHF1ZXVlIGlzIGVtcHR5IChpZiBvbmx5IHRoZSBcImlucHJvZ3Jlc3NcIiBpdGVtIGlzIGxlZnQgYXQgcG9zaXRpb24gMCkgb3IgaWYgaXRzIHF1ZXVlIGlzIGFib3V0IHRvIHJ1blxyXG5cdFx0XHRcdCBhIG5vbi1WZWxvY2l0eS1pbml0aWF0ZWQgZW50cnksIHR1cm4gb2ZmIHRoZSBpc0FuaW1hdGluZyBmbGFnLiBBIG5vbi1WZWxvY2l0eS1pbml0aWF0aWVkIHF1ZXVlIGVudHJ5J3MgbG9naWMgbWlnaHQgYWx0ZXJcclxuXHRcdFx0XHQgYW4gZWxlbWVudCdzIENTUyB2YWx1ZXMgYW5kIHRoZXJlYnkgY2F1c2UgVmVsb2NpdHkncyBjYWNoZWQgdmFsdWUgZGF0YSB0byBnbyBzdGFsZS4gVG8gZGV0ZWN0IGlmIGEgcXVldWUgZW50cnkgd2FzIGluaXRpYXRlZCBieSBWZWxvY2l0eSxcclxuXHRcdFx0XHQgd2UgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2Ygb3VyIHNwZWNpYWwgVmVsb2NpdHkucXVldWVFbnRyeUZsYWcgZGVjbGFyYXRpb24sIHdoaWNoIG1pbmlmaWVycyB3b24ndCByZW5hbWUgc2luY2UgdGhlIGZsYWdcclxuXHRcdFx0XHQgaXMgYXNzaWduZWQgdG8galF1ZXJ5J3MgZ2xvYmFsICQgb2JqZWN0IGFuZCB0aHVzIGV4aXN0cyBvdXQgb2YgVmVsb2NpdHkncyBvd24gc2NvcGUuICovXHJcblx0XHRcdFx0dmFyIGRhdGEgPSBEYXRhKGVsZW1lbnQpO1xyXG5cclxuXHRcdFx0XHRpZiAob3B0cy5sb29wICE9PSB0cnVlICYmICgkLnF1ZXVlKGVsZW1lbnQpWzFdID09PSB1bmRlZmluZWQgfHwgIS9cXC52ZWxvY2l0eVF1ZXVlRW50cnlGbGFnL2kudGVzdCgkLnF1ZXVlKGVsZW1lbnQpWzFdKSkpIHtcclxuXHRcdFx0XHRcdC8qIFRoZSBlbGVtZW50IG1heSBoYXZlIGJlZW4gZGVsZXRlZC4gRW5zdXJlIHRoYXQgaXRzIGRhdGEgY2FjaGUgc3RpbGwgZXhpc3RzIGJlZm9yZSBhY3Rpbmcgb24gaXQuICovXHJcblx0XHRcdFx0XHRpZiAoZGF0YSkge1xyXG5cdFx0XHRcdFx0XHRkYXRhLmlzQW5pbWF0aW5nID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdC8qIENsZWFyIHRoZSBlbGVtZW50J3Mgcm9vdFByb3BlcnR5VmFsdWVDYWNoZSwgd2hpY2ggd2lsbCBiZWNvbWUgc3RhbGUuICovXHJcblx0XHRcdFx0XHRcdGRhdGEucm9vdFByb3BlcnR5VmFsdWVDYWNoZSA9IHt9O1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIHRyYW5zZm9ybUhBUHJvcGVydHlFeGlzdHMgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0LyogSWYgYW55IDNEIHRyYW5zZm9ybSBzdWJwcm9wZXJ0eSBpcyBhdCBpdHMgZGVmYXVsdCB2YWx1ZSAocmVnYXJkbGVzcyBvZiB1bml0IHR5cGUpLCByZW1vdmUgaXQuICovXHJcblx0XHRcdFx0XHRcdCQuZWFjaChDU1MuTGlzdHMudHJhbnNmb3JtczNELCBmdW5jdGlvbihpLCB0cmFuc2Zvcm1OYW1lKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGRlZmF1bHRWYWx1ZSA9IC9ec2NhbGUvLnRlc3QodHJhbnNmb3JtTmFtZSkgPyAxIDogMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZhbHVlID0gZGF0YS50cmFuc2Zvcm1DYWNoZVt0cmFuc2Zvcm1OYW1lXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKGRhdGEudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV0gIT09IHVuZGVmaW5lZCAmJiBuZXcgUmVnRXhwKFwiXlxcXFwoXCIgKyBkZWZhdWx0VmFsdWUgKyBcIlteLl1cIikudGVzdChjdXJyZW50VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1IQVByb3BlcnR5RXhpc3RzID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgZGF0YS50cmFuc2Zvcm1DYWNoZVt0cmFuc2Zvcm1OYW1lXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogTW9iaWxlIGRldmljZXMgaGF2ZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gcmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoZSBhbmltYXRpb24gaW4gb3JkZXIgdG8gYXZvaWQgaG9nZ2luZyB0aGUgR1BVJ3MgbWVtb3J5LiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAob3B0cy5tb2JpbGVIQSkge1xyXG5cdFx0XHRcdFx0XHRcdHRyYW5zZm9ybUhBUHJvcGVydHlFeGlzdHMgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBkYXRhLnRyYW5zZm9ybUNhY2hlLnRyYW5zbGF0ZTNkO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBGbHVzaCB0aGUgc3VicHJvcGVydHkgcmVtb3ZhbHMgdG8gdGhlIERPTS4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKHRyYW5zZm9ybUhBUHJvcGVydHlFeGlzdHMpIHtcclxuXHRcdFx0XHRcdFx0XHRDU1MuZmx1c2hUcmFuc2Zvcm1DYWNoZShlbGVtZW50KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogUmVtb3ZlIHRoZSBcInZlbG9jaXR5LWFuaW1hdGluZ1wiIGluZGljYXRvciBjbGFzcy4gKi9cclxuXHRcdFx0XHRcdFx0Q1NTLlZhbHVlcy5yZW1vdmVDbGFzcyhlbGVtZW50LCBcInZlbG9jaXR5LWFuaW1hdGluZ1wiKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBDb21wbGV0ZVxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIENvbXBsZXRlIGlzIGZpcmVkIG9uY2UgcGVyIGNhbGwgKG5vdCBvbmNlIHBlciBlbGVtZW50KSBhbmQgaXMgcGFzc2VkIHRoZSBmdWxsIHJhdyBET00gZWxlbWVudCBzZXQgYXMgYm90aCBpdHMgY29udGV4dCBhbmQgaXRzIGZpcnN0IGFyZ3VtZW50LiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IENhbGxiYWNrcyBhcmVuJ3QgZmlyZWQgd2hlbiBjYWxscyBhcmUgbWFudWFsbHkgc3RvcHBlZCAodmlhIFZlbG9jaXR5KFwic3RvcFwiKS4gKi9cclxuXHRcdFx0XHRpZiAoIWlzU3RvcHBlZCAmJiBvcHRzLmNvbXBsZXRlICYmICFvcHRzLmxvb3AgJiYgKGkgPT09IGNhbGxMZW5ndGggLSAxKSkge1xyXG5cdFx0XHRcdFx0LyogV2UgdGhyb3cgY2FsbGJhY2tzIGluIGEgc2V0VGltZW91dCBzbyB0aGF0IHRocm93biBlcnJvcnMgZG9uJ3QgaGFsdCB0aGUgZXhlY3V0aW9uIG9mIFZlbG9jaXR5IGl0c2VsZi4gKi9cclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdG9wdHMuY29tcGxldGUuY2FsbChlbGVtZW50cywgZWxlbWVudHMpO1xyXG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcclxuXHRcdFx0XHRcdFx0fSwgMSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBQcm9taXNlIFJlc29sdmluZ1xyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBOb3RlOiBJbmZpbml0ZSBsb29wcyBkb24ndCByZXR1cm4gcHJvbWlzZXMuICovXHJcblx0XHRcdFx0aWYgKHJlc29sdmVyICYmIG9wdHMubG9vcCAhPT0gdHJ1ZSkge1xyXG5cdFx0XHRcdFx0cmVzb2x2ZXIoZWxlbWVudHMpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBMb29wIChJbmZpbml0ZSlcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0aWYgKGRhdGEgJiYgb3B0cy5sb29wID09PSB0cnVlICYmICFpc1N0b3BwZWQpIHtcclxuXHRcdFx0XHRcdC8qIElmIGEgcm90YXRlWC9ZL1ogcHJvcGVydHkgaXMgYmVpbmcgYW5pbWF0ZWQgYnkgMzYwIGRlZyB3aXRoIGxvb3A6dHJ1ZSwgc3dhcCB0d2VlbiBzdGFydC9lbmQgdmFsdWVzIHRvIGVuYWJsZVxyXG5cdFx0XHRcdFx0IGNvbnRpbnVvdXMgaXRlcmF0aXZlIHJvdGF0aW9uIGxvb3BpbmcuIChPdGhlcmlzZSwgdGhlIGVsZW1lbnQgd291bGQganVzdCByb3RhdGUgYmFjayBhbmQgZm9ydGguKSAqL1xyXG5cdFx0XHRcdFx0JC5lYWNoKGRhdGEudHdlZW5zQ29udGFpbmVyLCBmdW5jdGlvbihwcm9wZXJ0eU5hbWUsIHR3ZWVuQ29udGFpbmVyKSB7XHJcblx0XHRcdFx0XHRcdGlmICgvXnJvdGF0ZS8udGVzdChwcm9wZXJ0eU5hbWUpICYmICgocGFyc2VGbG9hdCh0d2VlbkNvbnRhaW5lci5zdGFydFZhbHVlKSAtIHBhcnNlRmxvYXQodHdlZW5Db250YWluZXIuZW5kVmFsdWUpKSAlIDM2MCA9PT0gMCkpIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgb2xkU3RhcnRWYWx1ZSA9IHR3ZWVuQ29udGFpbmVyLnN0YXJ0VmFsdWU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHR3ZWVuQ29udGFpbmVyLnN0YXJ0VmFsdWUgPSB0d2VlbkNvbnRhaW5lci5lbmRWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR0d2VlbkNvbnRhaW5lci5lbmRWYWx1ZSA9IG9sZFN0YXJ0VmFsdWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmICgvXmJhY2tncm91bmRQb3NpdGlvbi8udGVzdChwcm9wZXJ0eU5hbWUpICYmIHBhcnNlRmxvYXQodHdlZW5Db250YWluZXIuZW5kVmFsdWUpID09PSAxMDAgJiYgdHdlZW5Db250YWluZXIudW5pdFR5cGUgPT09IFwiJVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0dHdlZW5Db250YWluZXIuZW5kVmFsdWUgPSAwO1xyXG5cdFx0XHRcdFx0XHRcdHR3ZWVuQ29udGFpbmVyLnN0YXJ0VmFsdWUgPSAxMDA7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFZlbG9jaXR5KGVsZW1lbnQsIFwicmV2ZXJzZVwiLCB7bG9vcDogdHJ1ZSwgZGVsYXk6IG9wdHMuZGVsYXl9KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgRGVxdWV1ZWluZ1xyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIEZpcmUgdGhlIG5leHQgY2FsbCBpbiB0aGUgcXVldWUgc28gbG9uZyBhcyB0aGlzIGNhbGwncyBxdWV1ZSB3YXNuJ3Qgc2V0IHRvIGZhbHNlICh0byB0cmlnZ2VyIGEgcGFyYWxsZWwgYW5pbWF0aW9uKSxcclxuXHRcdFx0XHQgd2hpY2ggd291bGQgaGF2ZSBhbHJlYWR5IGNhdXNlZCB0aGUgbmV4dCBjYWxsIHRvIGZpcmUuIE5vdGU6IEV2ZW4gaWYgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uIHF1ZXVlIGhhcyBiZWVuIHJlYWNoZWQsXHJcblx0XHRcdFx0ICQuZGVxdWV1ZSgpIG11c3Qgc3RpbGwgYmUgY2FsbGVkIGluIG9yZGVyIHRvIGNvbXBsZXRlbHkgY2xlYXIgalF1ZXJ5J3MgYW5pbWF0aW9uIHF1ZXVlLiAqL1xyXG5cdFx0XHRcdGlmIChvcHRzLnF1ZXVlICE9PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0JC5kZXF1ZXVlKGVsZW1lbnQsIG9wdHMucXVldWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQ2FsbHMgQXJyYXkgQ2xlYW51cFxyXG5cdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogU2luY2UgdGhpcyBjYWxsIGlzIGNvbXBsZXRlLCBzZXQgaXQgdG8gZmFsc2Ugc28gdGhhdCB0aGUgckFGIHRpY2sgc2tpcHMgaXQuIFRoaXMgYXJyYXkgaXMgbGF0ZXIgY29tcGFjdGVkIHZpYSBjb21wYWN0U3BhcnNlQXJyYXkoKS5cclxuXHRcdFx0IChGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgdGhlIGNhbGwgaXMgc2V0IHRvIGZhbHNlIGluc3RlYWQgb2YgYmVpbmcgZGVsZXRlZCBmcm9tIHRoZSBhcnJheTogaHR0cDovL3d3dy5odG1sNXJvY2tzLmNvbS9lbi90dXRvcmlhbHMvc3BlZWQvdjgvKSAqL1xyXG5cdFx0XHRWZWxvY2l0eS5TdGF0ZS5jYWxsc1tjYWxsSW5kZXhdID0gZmFsc2U7XHJcblxyXG5cdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGNhbGxzIGFycmF5IHRvIGRldGVybWluZSBpZiB0aGlzIHdhcyB0aGUgZmluYWwgaW4tcHJvZ3Jlc3MgYW5pbWF0aW9uLlxyXG5cdFx0XHQgSWYgc28sIHNldCBhIGZsYWcgdG8gZW5kIHRpY2tpbmcgYW5kIGNsZWFyIHRoZSBjYWxscyBhcnJheS4gKi9cclxuXHRcdFx0Zm9yICh2YXIgaiA9IDAsIGNhbGxzTGVuZ3RoID0gVmVsb2NpdHkuU3RhdGUuY2FsbHMubGVuZ3RoOyBqIDwgY2FsbHNMZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdGlmIChWZWxvY2l0eS5TdGF0ZS5jYWxsc1tqXSAhPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdHJlbWFpbmluZ0NhbGxzRXhpc3QgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHJlbWFpbmluZ0NhbGxzRXhpc3QgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0LyogdGljaygpIHdpbGwgZGV0ZWN0IHRoaXMgZmxhZyB1cG9uIGl0cyBuZXh0IGl0ZXJhdGlvbiBhbmQgc3Vic2VxdWVudGx5IHR1cm4gaXRzZWxmIG9mZi4gKi9cclxuXHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5pc1RpY2tpbmcgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0LyogQ2xlYXIgdGhlIGNhbGxzIGFycmF5IHNvIHRoYXQgaXRzIGxlbmd0aCBpcyByZXNldC4gKi9cclxuXHRcdFx0XHRkZWxldGUgVmVsb2NpdHkuU3RhdGUuY2FsbHM7XHJcblx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuY2FsbHMgPSBbXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKioqKioqKioqKioqKioqKipcclxuXHRcdCBGcmFtZXdvcmtzXHJcblx0XHQgKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdC8qIEJvdGggalF1ZXJ5IGFuZCBaZXB0byBhbGxvdyB0aGVpciAkLmZuIG9iamVjdCB0byBiZSBleHRlbmRlZCB0byBhbGxvdyB3cmFwcGVkIGVsZW1lbnRzIHRvIGJlIHN1YmplY3RlZCB0byBwbHVnaW4gY2FsbHMuXHJcblx0XHQgSWYgZWl0aGVyIGZyYW1ld29yayBpcyBsb2FkZWQsIHJlZ2lzdGVyIGEgXCJ2ZWxvY2l0eVwiIGV4dGVuc2lvbiBwb2ludGluZyB0byBWZWxvY2l0eSdzIGNvcmUgYW5pbWF0ZSgpIG1ldGhvZC4gIFZlbG9jaXR5XHJcblx0XHQgYWxzbyByZWdpc3RlcnMgaXRzZWxmIG9udG8gYSBnbG9iYWwgY29udGFpbmVyICh3aW5kb3cualF1ZXJ5IHx8IHdpbmRvdy5aZXB0byB8fCB3aW5kb3cpIHNvIHRoYXQgY2VydGFpbiBmZWF0dXJlcyBhcmVcclxuXHRcdCBhY2Nlc3NpYmxlIGJleW9uZCBqdXN0IGEgcGVyLWVsZW1lbnQgc2NvcGUuIFRoaXMgbWFzdGVyIG9iamVjdCBjb250YWlucyBhbiAuYW5pbWF0ZSgpIG1ldGhvZCwgd2hpY2ggaXMgbGF0ZXIgYXNzaWduZWQgdG8gJC5mblxyXG5cdFx0IChpZiBqUXVlcnkgb3IgWmVwdG8gYXJlIHByZXNlbnQpLiBBY2NvcmRpbmdseSwgVmVsb2NpdHkgY2FuIGJvdGggYWN0IG9uIHdyYXBwZWQgRE9NIGVsZW1lbnRzIGFuZCBzdGFuZCBhbG9uZSBmb3IgdGFyZ2V0aW5nIHJhdyBET00gZWxlbWVudHMuICovXHJcblx0XHRnbG9iYWwuVmVsb2NpdHkgPSBWZWxvY2l0eTtcclxuXHJcblx0XHRpZiAoZ2xvYmFsICE9PSB3aW5kb3cpIHtcclxuXHRcdFx0LyogQXNzaWduIHRoZSBlbGVtZW50IGZ1bmN0aW9uIHRvIFZlbG9jaXR5J3MgY29yZSBhbmltYXRlKCkgbWV0aG9kLiAqL1xyXG5cdFx0XHRnbG9iYWwuZm4udmVsb2NpdHkgPSBhbmltYXRlO1xyXG5cdFx0XHQvKiBBc3NpZ24gdGhlIG9iamVjdCBmdW5jdGlvbidzIGRlZmF1bHRzIHRvIFZlbG9jaXR5J3MgZ2xvYmFsIGRlZmF1bHRzIG9iamVjdC4gKi9cclxuXHRcdFx0Z2xvYmFsLmZuLnZlbG9jaXR5LmRlZmF1bHRzID0gVmVsb2NpdHkuZGVmYXVsdHM7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHQgUGFja2FnZWQgUmVkaXJlY3RzXHJcblx0XHQgKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0Lyogc2xpZGVVcCwgc2xpZGVEb3duICovXHJcblx0XHQkLmVhY2goW1wiRG93blwiLCBcIlVwXCJdLCBmdW5jdGlvbihpLCBkaXJlY3Rpb24pIHtcclxuXHRcdFx0VmVsb2NpdHkuUmVkaXJlY3RzW1wic2xpZGVcIiArIGRpcmVjdGlvbl0gPSBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zLCBlbGVtZW50c0luZGV4LCBlbGVtZW50c1NpemUsIGVsZW1lbnRzLCBwcm9taXNlRGF0YSkge1xyXG5cdFx0XHRcdHZhciBvcHRzID0gJC5leHRlbmQoe30sIG9wdGlvbnMpLFxyXG5cdFx0XHRcdFx0XHRiZWdpbiA9IG9wdHMuYmVnaW4sXHJcblx0XHRcdFx0XHRcdGNvbXBsZXRlID0gb3B0cy5jb21wbGV0ZSxcclxuXHRcdFx0XHRcdFx0aW5saW5lVmFsdWVzID0ge30sXHJcblx0XHRcdFx0XHRcdGNvbXB1dGVkVmFsdWVzID0ge2hlaWdodDogXCJcIiwgbWFyZ2luVG9wOiBcIlwiLCBtYXJnaW5Cb3R0b206IFwiXCIsIHBhZGRpbmdUb3A6IFwiXCIsIHBhZGRpbmdCb3R0b206IFwiXCJ9O1xyXG5cclxuXHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdC8qIFNob3cgdGhlIGVsZW1lbnQgYmVmb3JlIHNsaWRlRG93biBiZWdpbnMgYW5kIGhpZGUgdGhlIGVsZW1lbnQgYWZ0ZXIgc2xpZGVVcCBjb21wbGV0ZXMuICovXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBJbmxpbmUgZWxlbWVudHMgY2Fubm90IGhhdmUgZGltZW5zaW9ucyBhbmltYXRlZCwgc28gdGhleSdyZSByZXZlcnRlZCB0byBpbmxpbmUtYmxvY2suICovXHJcblx0XHRcdFx0XHRvcHRzLmRpc3BsYXkgPSAoZGlyZWN0aW9uID09PSBcIkRvd25cIiA/IChWZWxvY2l0eS5DU1MuVmFsdWVzLmdldERpc3BsYXlUeXBlKGVsZW1lbnQpID09PSBcImlubGluZVwiID8gXCJpbmxpbmUtYmxvY2tcIiA6IFwiYmxvY2tcIikgOiBcIm5vbmVcIik7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRvcHRzLmJlZ2luID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHQvKiBJZiB0aGUgdXNlciBwYXNzZWQgaW4gYSBiZWdpbiBjYWxsYmFjaywgZmlyZSBpdCBub3cuICovXHJcblx0XHRcdFx0XHRpZiAoZWxlbWVudHNJbmRleCA9PT0gMCAmJiBiZWdpbikge1xyXG5cdFx0XHRcdFx0XHRiZWdpbi5jYWxsKGVsZW1lbnRzLCBlbGVtZW50cyk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogQ2FjaGUgdGhlIGVsZW1lbnRzJyBvcmlnaW5hbCB2ZXJ0aWNhbCBkaW1lbnNpb25hbCBwcm9wZXJ0eSB2YWx1ZXMgc28gdGhhdCB3ZSBjYW4gYW5pbWF0ZSBiYWNrIHRvIHRoZW0uICovXHJcblx0XHRcdFx0XHRmb3IgKHZhciBwcm9wZXJ0eSBpbiBjb21wdXRlZFZhbHVlcykge1xyXG5cdFx0XHRcdFx0XHRpZiAoIWNvbXB1dGVkVmFsdWVzLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlubGluZVZhbHVlc1twcm9wZXJ0eV0gPSBlbGVtZW50LnN0eWxlW3Byb3BlcnR5XTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIEZvciBzbGlkZURvd24sIHVzZSBmb3JjZWZlZWRpbmcgdG8gYW5pbWF0ZSBhbGwgdmVydGljYWwgcHJvcGVydGllcyBmcm9tIDAuIEZvciBzbGlkZVVwLFxyXG5cdFx0XHRcdFx0XHQgdXNlIGZvcmNlZmVlZGluZyB0byBzdGFydCBmcm9tIGNvbXB1dGVkIHZhbHVlcyBhbmQgYW5pbWF0ZSBkb3duIHRvIDAuICovXHJcblx0XHRcdFx0XHRcdHZhciBwcm9wZXJ0eVZhbHVlID0gQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHkpO1xyXG5cdFx0XHRcdFx0XHRjb21wdXRlZFZhbHVlc1twcm9wZXJ0eV0gPSAoZGlyZWN0aW9uID09PSBcIkRvd25cIikgPyBbcHJvcGVydHlWYWx1ZSwgMF0gOiBbMCwgcHJvcGVydHlWYWx1ZV07XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogRm9yY2UgdmVydGljYWwgb3ZlcmZsb3cgY29udGVudCB0byBjbGlwIHNvIHRoYXQgc2xpZGluZyB3b3JrcyBhcyBleHBlY3RlZC4gKi9cclxuXHRcdFx0XHRcdGlubGluZVZhbHVlcy5vdmVyZmxvdyA9IGVsZW1lbnQuc3R5bGUub3ZlcmZsb3c7XHJcblx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRvcHRzLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHQvKiBSZXNldCBlbGVtZW50IHRvIGl0cyBwcmUtc2xpZGUgaW5saW5lIHZhbHVlcyBvbmNlIGl0cyBzbGlkZSBhbmltYXRpb24gaXMgY29tcGxldGUuICovXHJcblx0XHRcdFx0XHRmb3IgKHZhciBwcm9wZXJ0eSBpbiBpbmxpbmVWYWx1ZXMpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGlubGluZVZhbHVlcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGlubGluZVZhbHVlc1twcm9wZXJ0eV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBJZiB0aGUgdXNlciBwYXNzZWQgaW4gYSBjb21wbGV0ZSBjYWxsYmFjaywgZmlyZSBpdCBub3cuICovXHJcblx0XHRcdFx0XHRpZiAoZWxlbWVudHNJbmRleCA9PT0gZWxlbWVudHNTaXplIC0gMSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoY29tcGxldGUpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZS5jYWxsKGVsZW1lbnRzLCBlbGVtZW50cyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKHByb21pc2VEYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0cHJvbWlzZURhdGEucmVzb2x2ZXIoZWxlbWVudHMpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0VmVsb2NpdHkoZWxlbWVudCwgY29tcHV0ZWRWYWx1ZXMsIG9wdHMpO1xyXG5cdFx0XHR9O1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0LyogZmFkZUluLCBmYWRlT3V0ICovXHJcblx0XHQkLmVhY2goW1wiSW5cIiwgXCJPdXRcIl0sIGZ1bmN0aW9uKGksIGRpcmVjdGlvbikge1xyXG5cdFx0XHRWZWxvY2l0eS5SZWRpcmVjdHNbXCJmYWRlXCIgKyBkaXJlY3Rpb25dID0gZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucywgZWxlbWVudHNJbmRleCwgZWxlbWVudHNTaXplLCBlbGVtZW50cywgcHJvbWlzZURhdGEpIHtcclxuXHRcdFx0XHR2YXIgb3B0cyA9ICQuZXh0ZW5kKHt9LCBvcHRpb25zKSxcclxuXHRcdFx0XHRcdFx0Y29tcGxldGUgPSBvcHRzLmNvbXBsZXRlLFxyXG5cdFx0XHRcdFx0XHRwcm9wZXJ0aWVzTWFwID0ge29wYWNpdHk6IChkaXJlY3Rpb24gPT09IFwiSW5cIikgPyAxIDogMH07XHJcblxyXG5cdFx0XHRcdC8qIFNpbmNlIHJlZGlyZWN0cyBhcmUgdHJpZ2dlcmVkIGluZGl2aWR1YWxseSBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBhbmltYXRlZCBzZXQsIGF2b2lkIHJlcGVhdGVkbHkgdHJpZ2dlcmluZ1xyXG5cdFx0XHRcdCBjYWxsYmFja3MgYnkgZmlyaW5nIHRoZW0gb25seSB3aGVuIHRoZSBmaW5hbCBlbGVtZW50IGhhcyBiZWVuIHJlYWNoZWQuICovXHJcblx0XHRcdFx0aWYgKGVsZW1lbnRzSW5kZXggIT09IDApIHtcclxuXHRcdFx0XHRcdG9wdHMuYmVnaW4gPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoZWxlbWVudHNJbmRleCAhPT0gZWxlbWVudHNTaXplIC0gMSkge1xyXG5cdFx0XHRcdFx0b3B0cy5jb21wbGV0ZSA9IG51bGw7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdG9wdHMuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGNvbXBsZXRlKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUuY2FsbChlbGVtZW50cywgZWxlbWVudHMpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChwcm9taXNlRGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdHByb21pc2VEYXRhLnJlc29sdmVyKGVsZW1lbnRzKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIElmIGEgZGlzcGxheSB3YXMgcGFzc2VkIGluLCB1c2UgaXQuIE90aGVyd2lzZSwgZGVmYXVsdCB0byBcIm5vbmVcIiBmb3IgZmFkZU91dCBvciB0aGUgZWxlbWVudC1zcGVjaWZpYyBkZWZhdWx0IGZvciBmYWRlSW4uICovXHJcblx0XHRcdFx0LyogTm90ZTogV2UgYWxsb3cgdXNlcnMgdG8gcGFzcyBpbiBcIm51bGxcIiB0byBza2lwIGRpc3BsYXkgc2V0dGluZyBhbHRvZ2V0aGVyLiAqL1xyXG5cdFx0XHRcdGlmIChvcHRzLmRpc3BsYXkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0b3B0cy5kaXNwbGF5ID0gKGRpcmVjdGlvbiA9PT0gXCJJblwiID8gXCJhdXRvXCIgOiBcIm5vbmVcIik7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRWZWxvY2l0eSh0aGlzLCBwcm9wZXJ0aWVzTWFwLCBvcHRzKTtcclxuXHRcdFx0fTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiBWZWxvY2l0eTtcclxuXHR9KCh3aW5kb3cualF1ZXJ5IHx8IHdpbmRvdy5aZXB0byB8fCB3aW5kb3cpLCB3aW5kb3csICh3aW5kb3cgPyB3aW5kb3cuZG9jdW1lbnQgOiB1bmRlZmluZWQpKTtcclxufSkpO1xyXG5cclxuLyoqKioqKioqKioqKioqKioqKlxyXG4gS25vd24gSXNzdWVzXHJcbiAqKioqKioqKioqKioqKioqKiovXHJcblxyXG4vKiBUaGUgQ1NTIHNwZWMgbWFuZGF0ZXMgdGhhdCB0aGUgdHJhbnNsYXRlWC9ZL1ogdHJhbnNmb3JtcyBhcmUgJS1yZWxhdGl2ZSB0byB0aGUgZWxlbWVudCBpdHNlbGYgLS0gbm90IGl0cyBwYXJlbnQuXHJcbiBWZWxvY2l0eSwgaG93ZXZlciwgZG9lc24ndCBtYWtlIHRoaXMgZGlzdGluY3Rpb24uIFRodXMsIGNvbnZlcnRpbmcgdG8gb3IgZnJvbSB0aGUgJSB1bml0IHdpdGggdGhlc2Ugc3VicHJvcGVydGllc1xyXG4gd2lsbCBwcm9kdWNlIGFuIGluYWNjdXJhdGUgY29udmVyc2lvbiB2YWx1ZS4gVGhlIHNhbWUgaXNzdWUgZXhpc3RzIHdpdGggdGhlIGN4L2N5IGF0dHJpYnV0ZXMgb2YgU1ZHIGNpcmNsZXMgYW5kIGVsbGlwc2VzLiAqL1xyXG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKi9cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZVNvdXJjZXMoaW1nLCBzb3VyY2VzKSB7XG4gIGlmIChzb3VyY2VzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBHZXQgc291cmNlIHNpYmxpbmdzIG9mIHRoZSBpbWcgdGFnXG4gIGNvbnN0IGltZ1NpYmxpbmdXZWJwID0gJChpbWcpLnNpYmxpbmdzKCdzb3VyY2VbdHlwZT1cImltYWdlL3dlYnBcIl0nKTtcbiAgY29uc3QgaW1nU2libGluZ0F2aWYgPSAkKGltZykuc2libGluZ3MoJ3NvdXJjZVt0eXBlPVwiaW1hZ2UvYXZpZlwiXScpO1xuXG4gIC8vIFVwZGF0ZSB0aGVtIGlmIHRoZXkgZXhpc3QgYW5kIHdlIGhhdmUgYSBzb3VyY2UgZm9yIHRoZW1cbiAgaWYgKHNvdXJjZXMud2VicCAhPT0gdW5kZWZpbmVkICYmIGltZ1NpYmxpbmdXZWJwLmxlbmd0aCkge1xuICAgIGltZ1NpYmxpbmdXZWJwLmF0dHIoJ3NyY3NldCcsIHNvdXJjZXMud2VicCk7XG4gIH1cbiAgaWYgKHNvdXJjZXMuYXZpZiAhPT0gdW5kZWZpbmVkICYmIGltZ1NpYmxpbmdBdmlmLmxlbmd0aCkge1xuICAgIGltZ1NpYmxpbmdBdmlmLmF0dHIoJ3NyY3NldCcsIHNvdXJjZXMuYXZpZik7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvZHVjdE1pbml0YXR1cmUge1xuICBpbml0KCkge1xuICAgICQoJy5qcy1wcm9kdWN0LW1pbmlhdHVyZScpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XG4gICAgICAvLyBMaW1pdCBudW1iZXIgb2Ygc2hvd24gY29sb3JzXG4gICAgICBpZiAoJChlbGVtZW50KS5maW5kKCcuY29sb3InKS5sZW5ndGggPiA1KSB7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG5cbiAgICAgICAgJChlbGVtZW50KVxuICAgICAgICAgIC5maW5kKCcuY29sb3InKVxuICAgICAgICAgIC5lYWNoKChjb2xvckluZGV4LCBjb2xvckVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChjb2xvckluZGV4ID4gNCkge1xuICAgICAgICAgICAgICAkKGNvbG9yRWxlbWVudCkuaGlkZSgpO1xuICAgICAgICAgICAgICBjb3VudCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICQoZWxlbWVudCkuZmluZCgnLmpzLWNvdW50JykuYXBwZW5kKGArJHtjb3VudH1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgJCBmcm9tIFwianF1ZXJ5XCI7XG5pbXBvcnQgcHJlc3Rhc2hvcCBmcm9tIFwicHJlc3Rhc2hvcFwiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5pbXBvcnQgXCJ2ZWxvY2l0eS1hbmltYXRlXCI7XG5pbXBvcnQgdXBkYXRlU291cmNlcyBmcm9tIFwiLi9jb21wb25lbnRzL3VwZGF0ZS1zb3VyY2VzXCI7XG5pbXBvcnQgUHJvZHVjdE1pbml0YXR1cmUgZnJvbSBcIi4vY29tcG9uZW50cy9wcm9kdWN0LW1pbmlhdHVyZVwiO1xuXG5cblxuJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICBjb25zdCBtb3ZlID0gKGRpcmVjdGlvbikgPT4ge1xuICAgIGNvbnN0IFRIVU1CX01BUkdJTiA9IDIwO1xuICAgIGNvbnN0ICR0aHVtYm5haWxzID0gJChcIi5qcy1xdi1wcm9kdWN0LWltYWdlc1wiKTtcbiAgICBjb25zdCB0aHVtYkhlaWdodCA9XG4gICAgICAkKFwiLmpzLXF2LXByb2R1Y3QtaW1hZ2VzIGxpIGltZ1wiKS5oZWlnaHQoKSArIFRIVU1CX01BUkdJTjtcbiAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSAkdGh1bWJuYWlscy5wb3NpdGlvbigpLnRvcDtcbiAgICAkdGh1bWJuYWlscy52ZWxvY2l0eShcbiAgICAgIHtcbiAgICAgICAgdHJhbnNsYXRlWTpcbiAgICAgICAgICBkaXJlY3Rpb24gPT09IFwidXBcIlxuICAgICAgICAgICAgPyBjdXJyZW50UG9zaXRpb24gKyB0aHVtYkhlaWdodFxuICAgICAgICAgICAgOiBjdXJyZW50UG9zaXRpb24gLSB0aHVtYkhlaWdodCxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICgkdGh1bWJuYWlscy5wb3NpdGlvbigpLnRvcCA+PSAwKSB7XG4gICAgICAgICAgJChcIi5hcnJvdy11cFwiKS5jc3MoXCJvcGFjaXR5XCIsIFwiLjJcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgJHRodW1ibmFpbHMucG9zaXRpb24oKS50b3AgKyAkdGh1bWJuYWlscy5oZWlnaHQoKSA8PVxuICAgICAgICAgICQoXCIuanMtcXYtbWFza1wiKS5oZWlnaHQoKVxuICAgICAgICApIHtcbiAgICAgICAgICAkKFwiLmFycm93LWRvd25cIikuY3NzKFwib3BhY2l0eVwiLCBcIi4yXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgcHJvZHVjdENvbmZpZyA9IChxdikgPT4ge1xuICAgIGNvbnN0IE1BWF9USFVNQlMgPSA0O1xuICAgIGNvbnN0ICRhcnJvd3MgPSAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5hcnJvd3MpO1xuICAgIGNvbnN0ICR0aHVtYm5haWxzID0gcXYuZmluZChcIi5qcy1xdi1wcm9kdWN0LWltYWdlc1wiKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC50aHVtYikub24oXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFN3YXAgYWN0aXZlIGNsYXNzZXMgb24gdGh1bWJuYWlsXG4gICAgICBpZiAoJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGh1bWIpLmhhc0NsYXNzKFwic2VsZWN0ZWRcIikpIHtcbiAgICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGh1bWIpLnJlbW92ZUNsYXNzKFwic2VsZWN0ZWRcIik7XG4gICAgICB9XG4gICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKFwic2VsZWN0ZWRcIik7XG5cbiAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc3JjLCBhbHQgYW5kIHRpdGxlXG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5jb3ZlcikuYXR0cihcbiAgICAgICAgXCJzcmNcIixcbiAgICAgICAgJChldmVudC50YXJnZXQpLmRhdGEoXCJpbWFnZS1sYXJnZS1zcmNcIiksXG4gICAgICApO1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QuY292ZXIpLmF0dHIoXG4gICAgICAgIFwiYWx0XCIsXG4gICAgICAgICQoZXZlbnQudGFyZ2V0KS5hdHRyKFwiYWx0XCIpLFxuICAgICAgKTtcbiAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmNvdmVyKS5hdHRyKFxuICAgICAgICBcInRpdGxlXCIsXG4gICAgICAgICQoZXZlbnQudGFyZ2V0KS5hdHRyKFwidGl0bGVcIiksXG4gICAgICApO1xuXG4gICAgICAvLyBHZXQgZGF0YSBmcm9tIHRodW1ibmFpbCBhbmQgdXBkYXRlIGNvdmVyIHNvdXJjZXNcbiAgICAgIHVwZGF0ZVNvdXJjZXMoXG4gICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmNvdmVyKSxcbiAgICAgICAgJChldmVudC50YXJnZXQpLmRhdGEoXCJpbWFnZS1sYXJnZS1zb3VyY2VzXCIpLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICBpZiAoJHRodW1ibmFpbHMuZmluZChcImxpXCIpLmxlbmd0aCA8PSBNQVhfVEhVTUJTKSB7XG4gICAgICAkYXJyb3dzLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGFycm93cy5vbihcImNsaWNrXCIsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgJChldmVudC50YXJnZXQpLmhhc0NsYXNzKFwiYXJyb3ctdXBcIikgJiZcbiAgICAgICAgICAkKFwiLmpzLXF2LXByb2R1Y3QtaW1hZ2VzXCIpLnBvc2l0aW9uKCkudG9wIDwgMFxuICAgICAgICApIHtcbiAgICAgICAgICBtb3ZlKFwidXBcIik7XG4gICAgICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmFycm93RG93bikuY3NzKFwib3BhY2l0eVwiLCBcIjFcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgJChldmVudC50YXJnZXQpLmhhc0NsYXNzKFwiYXJyb3ctZG93blwiKSAmJlxuICAgICAgICAgICR0aHVtYm5haWxzLnBvc2l0aW9uKCkudG9wICsgJHRodW1ibmFpbHMuaGVpZ2h0KCkgPlxuICAgICAgICAgICAgJChcIi5qcy1xdi1tYXNrXCIpLmhlaWdodCgpXG4gICAgICAgICkge1xuICAgICAgICAgIG1vdmUoXCJkb3duXCIpO1xuICAgICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5hcnJvd1VwKS5jc3MoXCJvcGFjaXR5XCIsIFwiMVwiKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHF2LmZpbmQocHJlc3Rhc2hvcC5zZWxlY3RvcnMucXVhbnRpdHlXYW50ZWQpLlRvdWNoU3Bpbih7XG4gICAgICB2ZXJ0aWNhbGJ1dHRvbnM6IHRydWUsXG4gICAgICBtaW46IDEsXG4gICAgICBtYXg6IDEwMDAwMDAsXG4gICAgfSk7XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMudG91Y2hzcGluKS5vZmYoXCJ0b3VjaHN0YXJ0LnRvdWNoc3BpblwiKTtcbiAgfTtcblxuICBwcmVzdGFzaG9wLm9uKFwiY2xpY2tRdWlja1ZpZXdcIiwgKGVsbSkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb246IFwicXVpY2t2aWV3XCIsXG4gICAgICBpZF9wcm9kdWN0OiBlbG0uZGF0YXNldC5pZFByb2R1Y3QsXG4gICAgICBpZF9wcm9kdWN0X2F0dHJpYnV0ZTogZWxtLmRhdGFzZXQuaWRQcm9kdWN0QXR0cmlidXRlLFxuICAgIH07XG4gICAgJC5wb3N0KHByZXN0YXNob3AudXJscy5wYWdlcy5wcm9kdWN0LCBkYXRhLCBudWxsLCBcImpzb25cIilcbiAgICAgIC50aGVuKChyZXNwKSA9PiB7XG4gICAgICAgICQoXCJib2R5XCIpLmFwcGVuZChyZXNwLnF1aWNrdmlld19odG1sKTtcbiAgICAgICAgY29uc3QgcHJvZHVjdE1vZGFsID0gJChcbiAgICAgICAgICBgI3F1aWNrdmlldy1tb2RhbC0ke3Jlc3AucHJvZHVjdC5pZH0tJHtyZXNwLnByb2R1Y3QuaWRfcHJvZHVjdF9hdHRyaWJ1dGV9YCxcbiAgICAgICAgKTtcbiAgICAgICAgcHJvZHVjdE1vZGFsLm1vZGFsKFwic2hvd1wiKTtcbiAgICAgICAgcHJvZHVjdENvbmZpZyhwcm9kdWN0TW9kYWwpO1xuICAgICAgICBwcm9kdWN0TW9kYWwub24oXCJoaWRkZW4uYnMubW9kYWxcIiwgKCkgPT4ge1xuICAgICAgICAgIHByb2R1Y3RNb2RhbC5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmZhaWwoKHJlc3ApID0+IHtcbiAgICAgICAgcHJlc3Rhc2hvcC5lbWl0KFwiaGFuZGxlRXJyb3JcIiwge1xuICAgICAgICAgIGV2ZW50VHlwZTogXCJjbGlja1F1aWNrVmlld1wiLFxuICAgICAgICAgIHJlc3AsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gICQoXCJib2R5XCIpLm9uKFxuICAgIFwiY2xpY2tcIixcbiAgICBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3Rpbmcuc2VhcmNoRmlsdGVyVG9nZ2xlcixcbiAgICAoKSA9PiB7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzV3JhcHBlcikucmVtb3ZlQ2xhc3MoXG4gICAgICAgIFwiaGlkZGVuLXNtLWRvd25cIixcbiAgICAgICk7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY29udGVudFdyYXBwZXIpLmFkZENsYXNzKFwiaGlkZGVuLXNtLWRvd25cIik7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuZm9vdGVyKS5hZGRDbGFzcyhcImhpZGRlbi1zbS1kb3duXCIpO1xuICAgIH0sXG4gICk7XG4gICQoXG4gICAgYCR7cHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5saXN0aW5nLnNlYXJjaEZpbHRlckNvbnRyb2xzfSAke3ByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2xlYXJ9YCxcbiAgKS5vbihcImNsaWNrXCIsICgpID0+IHtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzV3JhcHBlcikuYWRkQ2xhc3MoXG4gICAgICBcImhpZGRlbi1zbS1kb3duXCIsXG4gICAgKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY29udGVudFdyYXBwZXIpLnJlbW92ZUNsYXNzKFwiaGlkZGVuLXNtLWRvd25cIik7XG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmZvb3RlcikucmVtb3ZlQ2xhc3MoXCJoaWRkZW4tc20tZG93blwiKTtcbiAgfSk7XG4gICQoYCR7cHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5saXN0aW5nLnNlYXJjaEZpbHRlckNvbnRyb2xzfSAub2tgKS5vbihcbiAgICBcImNsaWNrXCIsXG4gICAgKCkgPT4ge1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3Rpbmcuc2VhcmNoRmlsdGVyc1dyYXBwZXIpLmFkZENsYXNzKFxuICAgICAgICBcImhpZGRlbi1zbS1kb3duXCIsXG4gICAgICApO1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNvbnRlbnRXcmFwcGVyKS5yZW1vdmVDbGFzcyhcImhpZGRlbi1zbS1kb3duXCIpO1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmZvb3RlcikucmVtb3ZlQ2xhc3MoXCJoaWRkZW4tc20tZG93blwiKTtcbiAgICB9LFxuICApO1xuXG4gIGNvbnN0IHBhcnNlU2VhcmNoVXJsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldC5kYXRhc2V0LnNlYXJjaFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZlbnQudGFyZ2V0LmRhdGFzZXQuc2VhcmNoVXJsO1xuICAgIH1cblxuICAgIGlmICgkKGV2ZW50LnRhcmdldCkucGFyZW50KClbMF0uZGF0YXNldC5zZWFyY2hVcmwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuIG5vdCBwYXJzZSBzZWFyY2ggVVJMXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAkKGV2ZW50LnRhcmdldCkucGFyZW50KClbMF0uZGF0YXNldC5zZWFyY2hVcmw7XG4gIH07XG5cbiAgZnVuY3Rpb24gdXBkYXRlUHJvZHVjdExpc3RET00oZGF0YSkge1xuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5saXN0aW5nLnNlYXJjaEZpbHRlcnMpLnJlcGxhY2VXaXRoKFxuICAgICAgZGF0YS5yZW5kZXJlZF9mYWNldHMsXG4gICAgKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5hY3RpdmVTZWFyY2hGaWx0ZXJzKS5yZXBsYWNlV2l0aChcbiAgICAgIGRhdGEucmVuZGVyZWRfYWN0aXZlX2ZpbHRlcnMsXG4gICAgKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5saXN0VG9wKS5yZXBsYWNlV2l0aChcbiAgICAgIGRhdGEucmVuZGVyZWRfcHJvZHVjdHNfdG9wLFxuICAgICk7XG5cbiAgICBjb25zdCByZW5kZXJlZFByb2R1Y3RzID0gJChkYXRhLnJlbmRlcmVkX3Byb2R1Y3RzKTtcbiAgICBjb25zdCBwcm9kdWN0U2VsZWN0b3JzID0gJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3RpbmcucHJvZHVjdCk7XG5cbiAgICBpZiAocHJvZHVjdFNlbGVjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBwcm9kdWN0U2VsZWN0b3JzXG4gICAgICAgIC5yZW1vdmVDbGFzcygpXG4gICAgICAgIC5hZGRDbGFzcyhwcm9kdWN0U2VsZWN0b3JzLmZpcnN0KCkuYXR0cihcImNsYXNzXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZHVjdFNlbGVjdG9yc1xuICAgICAgICAucmVtb3ZlQ2xhc3MoKVxuICAgICAgICAuYWRkQ2xhc3MocmVuZGVyZWRQcm9kdWN0cy5maXJzdCgpLmF0dHIoXCJjbGFzc1wiKSk7XG4gICAgfVxuXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3RpbmcubGlzdCkucmVwbGFjZVdpdGgocmVuZGVyZWRQcm9kdWN0cyk7XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5saXN0Qm90dG9tKS5yZXBsYWNlV2l0aChcbiAgICAgIGRhdGEucmVuZGVyZWRfcHJvZHVjdHNfYm90dG9tLFxuICAgICk7XG4gICAgaWYgKGRhdGEucmVuZGVyZWRfcHJvZHVjdHNfaGVhZGVyKSB7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5saXN0SGVhZGVyKS5yZXBsYWNlV2l0aChcbiAgICAgICAgZGF0YS5yZW5kZXJlZF9wcm9kdWN0c19oZWFkZXIsXG4gICAgICApO1xuICAgIH1cbiAgXG4gICAgJCgnI3Nob3ctZmlsdGVycycpLm9uKCdjbGljay5vZmZjYW52YXMnLCAoKSA9PiB7XG4gICAgICAkKCcjcHJvZHVjdC1saXN0LXRvcC1maWx0ZXJzJykuc2hvdygpO1xuICAgIH0pO1xuICBcbiAgICAkKCcjaGlkZS1maWx0ZXJzJykub24oJ2NsaWNrLm9mZmNhbnZhcycsICgpID0+IHtcbiAgICAgICQoJyNwcm9kdWN0LWxpc3QtdG9wLWZpbHRlcnMnKS5oaWRlKCk7XG4gICAgICAkKCcjb3ZlcmxheScpLmhpZGUoKTsgXG4gICAgfSk7XG5cbiAgICAkKCcjc2hvdy1maWx0ZXJzJykuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICAkKCcjb3ZlcmxheScpLnNob3coKTtcbiAgICB9KTtcblxuICAgICQoJyNwcm9kdWN0LWxpc3QtdG9wLWZpbHRlcnMnKS5zaG93KCk7XG4gIFxuICAgIGZ1bmN0aW9uIGNoZWNrQW5kU2hvd092ZXJsYXkoKSB7XG4gICAgICBpZiAoJCgnI3Byb2R1Y3QtbGlzdC10b3AtZmlsdGVycycpLmlzKCc6dmlzaWJsZScpKSB7IFxuICAgICAgICAgICQoJyNvdmVybGF5Jykuc2hvdygpO1xuICAgICAgfSBlbHNlIHsgXG4gICAgICAgICAgJCgnI292ZXJsYXknKS5oaWRlKCk7XG4gICAgICB9XG4gIH1cblxuICAkKCcjcHJvZHVjdC1saXN0LXRvcC1maWx0ZXJzJykuc2hvdyhmdW5jdGlvbigpIHtcbiAgICBjaGVja0FuZFNob3dPdmVybGF5KCk7XG4gICAgfSk7XG5cbiAgICAkKCcjb3ZlcmxheScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgJCgnI3Byb2R1Y3QtbGlzdC10b3AtZmlsdGVycycpLmhpZGUoKTtcbiAgICAgICQoJyNvdmVybGF5JykuaGlkZSgpOyAgXG4gICAgIFxuICB9KTtcblxuICAgICQoJy50aC1hY2NvcmRpb24nKS50aGFjY29yZGlvbigpO1xuXG4gICAgY29uc3QgcHJvZHVjdE1pbml0YXR1cmUgPSBuZXcgUHJvZHVjdE1pbml0YXR1cmUoKTtcbiAgICBwcm9kdWN0TWluaXRhdHVyZS5pbml0KCk7XG4gIH1cblxuICBcblxuICAkKFwiYm9keVwiKS5vbihcbiAgICBcImNoYW5nZVwiLFxuICAgIGAke3ByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzfSBpbnB1dFtkYXRhLXNlYXJjaC11cmxdYCxcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIHByZXN0YXNob3AuZW1pdChcInVwZGF0ZUZhY2V0c1wiLCBwYXJzZVNlYXJjaFVybChldmVudCkpO1xuICAgIH0sXG4gICk7XG5cbiAgJChcImJvZHlcIikub24oXG4gICAgXCJjbGlja1wiLFxuICAgIHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzQ2xlYXJBbGwsXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBwcmVzdGFzaG9wLmVtaXQoXCJ1cGRhdGVGYWNldHNcIiwgcGFyc2VTZWFyY2hVcmwoZXZlbnQpKTtcbiAgICB9LFxuICApO1xuXG4gICQoXCJib2R5XCIpLm9uKFxuICAgIFwiY2xpY2tcIixcbiAgICBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3Rpbmcuc2VhcmNoTGluayxcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBwcmVzdGFzaG9wLmVtaXQoXCJ1cGRhdGVGYWNldHNcIiwgJChldmVudC50YXJnZXQpLmNsb3Nlc3QoXCJhXCIpLmdldCgwKS5ocmVmKTtcbiAgICB9LFxuICApO1xuXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgKGUpID0+IHtcbiAgICBpZiAoZS5zdGF0ZSAmJiBlLnN0YXRlLmN1cnJlbnRfdXJsKSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGUuc3RhdGUuY3VycmVudF91cmw7XG4gICAgfVxuICB9KTtcblxuICAkKFwiYm9keVwiKS5vbihcbiAgICBcImNoYW5nZVwiLFxuICAgIGAke3ByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzfSBzZWxlY3RgLFxuICAgIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgZm9ybSA9ICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiZm9ybVwiKTtcbiAgICAgIHByZXN0YXNob3AuZW1pdChcInVwZGF0ZUZhY2V0c1wiLCBgPyR7Zm9ybS5zZXJpYWxpemUoKX1gKTtcbiAgICB9LFxuICApO1xuXG4gIHByZXN0YXNob3Aub24oXCJ1cGRhdGVQcm9kdWN0TGlzdFwiLCAoZGF0YSkgPT4ge1xuICAgIHVwZGF0ZVByb2R1Y3RMaXN0RE9NKGRhdGEpO1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgfSk7XG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuaW1wb3J0ICd2ZWxvY2l0eS1hbmltYXRlJztcbi8vIGltcG9ydCB1cGRhdGVTb3VyY2VzIGZyb20gJ3VwZGF0ZS1zb3VyY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvZHVjdFNlbGVjdCB7XG4gIGluaXQoKSB7XG4gICAgY29uc3QgTUFYX1RIVU1CUyA9IDU7XG4gICAgY29uc3QgJGFycm93cyA9ICQoJy5qcy1tb2RhbC1hcnJvd3MnKTtcbiAgICBjb25zdCAkdGh1bWJuYWlscyA9ICQoJy5qcy1tb2RhbC1wcm9kdWN0LWltYWdlcycpO1xuXG4gICAgJCgnYm9keScpXG4gICAgICAub24oJ2NsaWNrJywgJy5qcy1tb2RhbC10aHVtYicsIChldmVudCkgPT4ge1xuICAgICAgICAvLyBTd2FwIGFjdGl2ZSBjbGFzc2VzIG9uIHRodW1ibmFpbFxuICAgICAgICBpZiAoJCgnLmpzLW1vZGFsLXRodW1iJykuaGFzQ2xhc3MoJ3NlbGVjdGVkJykpIHtcbiAgICAgICAgICAkKCcuanMtbW9kYWwtdGh1bWInKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuXG4gICAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc3JjLCBhbHQgYW5kIHRpdGxlXG4gICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0Lm1vZGFsUHJvZHVjdENvdmVyKS5hdHRyKCdzcmMnLCAkKGV2ZW50LnRhcmdldCkuZGF0YSgnaW1hZ2UtbGFyZ2Utc3JjJykpO1xuICAgICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5tb2RhbFByb2R1Y3RDb3ZlcikuYXR0cigndGl0bGUnLCAkKGV2ZW50LnRhcmdldCkuYXR0cigndGl0bGUnKSk7XG4gICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0Lm1vZGFsUHJvZHVjdENvdmVyKS5hdHRyKCdhbHQnLCAkKGV2ZW50LnRhcmdldCkuYXR0cignYWx0JykpO1xuXG4gICAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc291cmNlc1xuICAgICAgICAvLyB1cGRhdGVTb3VyY2VzKFxuICAgICAgICAvLyAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0Lm1vZGFsUHJvZHVjdENvdmVyKSxcbiAgICAgICAgLy8gICAkKGV2ZW50LnRhcmdldCkuZGF0YSgnaW1hZ2UtbGFyZ2Utc291cmNlcycpLFxuICAgICAgICAvLyApO1xuICAgICAgfSlcbiAgICAgIC5vbignY2xpY2snLCAnYXNpZGUjdGh1bWJuYWlscycsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmlkID09PSAndGh1bWJuYWlscycpIHtcbiAgICAgICAgICAkKCcjcHJvZHVjdC1tb2RhbCcpLm1vZGFsKCdoaWRlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgaWYgKCQoJy5qcy1tb2RhbC1wcm9kdWN0LWltYWdlcyBsaScpLmxlbmd0aCA8PSBNQVhfVEhVTUJTKSB7XG4gICAgICAkYXJyb3dzLmNzcygnb3BhY2l0eScsICcuMicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkYXJyb3dzLm9uKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoJChldmVudC50YXJnZXQpLmhhc0NsYXNzKCdhcnJvdy11cCcpICYmICR0aHVtYm5haWxzLnBvc2l0aW9uKCkudG9wIDwgMCkge1xuICAgICAgICAgIHRoaXMubW92ZSgndXAnKTtcbiAgICAgICAgICAkKCcuanMtbW9kYWwtYXJyb3ctZG93bicpLmNzcygnb3BhY2l0eScsICcxJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgJChldmVudC50YXJnZXQpLmhhc0NsYXNzKCdhcnJvdy1kb3duJylcbiAgICAgICAgICAmJiAkdGh1bWJuYWlscy5wb3NpdGlvbigpLnRvcCArICR0aHVtYm5haWxzLmhlaWdodCgpID4gJCgnLmpzLW1vZGFsLW1hc2snKS5oZWlnaHQoKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLm1vdmUoJ2Rvd24nKTtcbiAgICAgICAgICAkKCcuanMtbW9kYWwtYXJyb3ctdXAnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBtb3ZlKGRpcmVjdGlvbikge1xuICAgIGNvbnN0IFRIVU1CX01BUkdJTiA9IDEwO1xuICAgIGNvbnN0ICR0aHVtYm5haWxzID0gJCgnLmpzLW1vZGFsLXByb2R1Y3QtaW1hZ2VzJyk7XG4gICAgY29uc3QgdGh1bWJIZWlnaHQgPSAkKCcuanMtbW9kYWwtcHJvZHVjdC1pbWFnZXMgbGkgaW1nJykuaGVpZ2h0KCkgKyBUSFVNQl9NQVJHSU47XG4gICAgY29uc3QgY3VycmVudFBvc2l0aW9uID0gJHRodW1ibmFpbHMucG9zaXRpb24oKS50b3A7XG4gICAgJHRodW1ibmFpbHMudmVsb2NpdHkoXG4gICAgICB7XG4gICAgICAgIHRyYW5zbGF0ZVk6IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IGN1cnJlbnRQb3NpdGlvbiArIHRodW1iSGVpZ2h0IDogY3VycmVudFBvc2l0aW9uIC0gdGh1bWJIZWlnaHQsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAoJHRodW1ibmFpbHMucG9zaXRpb24oKS50b3AgPj0gMCkge1xuICAgICAgICAgICQoJy5qcy1tb2RhbC1hcnJvdy11cCcpLmNzcygnb3BhY2l0eScsICcuMicpO1xuICAgICAgICB9IGVsc2UgaWYgKCR0aHVtYm5haWxzLnBvc2l0aW9uKCkudG9wICsgJHRodW1ibmFpbHMuaGVpZ2h0KCkgPD0gJCgnLmpzLW1vZGFsLW1hc2snKS5oZWlnaHQoKSkge1xuICAgICAgICAgICQoJy5qcy1tb2RhbC1hcnJvdy1kb3duJykuY3NzKCdvcGFjaXR5JywgJy4yJyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHByZXN0YXNob3AgZnJvbSAncHJlc3Rhc2hvcCc7XG5pbXBvcnQgUHJvZHVjdFNlbGVjdCBmcm9tICcuL2NvbXBvbmVudHMvcHJvZHVjdC1zZWxlY3QnO1xuaW1wb3J0IHVwZGF0ZVNvdXJjZXMgZnJvbSAnLi9jb21wb25lbnRzL3VwZGF0ZS1zb3VyY2VzJztcblxuJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICBmdW5jdGlvbiBjb3ZlckltYWdlKCkge1xuICAgIGNvbnN0IHByb2R1Y3RDb3ZlciA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmNvdmVyKTtcbiAgICBjb25zdCBtb2RhbFByb2R1Y3RDb3ZlciA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0Lm1vZGFsUHJvZHVjdENvdmVyKTtcbiAgICBsZXQgdGh1bWJTZWxlY3RlZCA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LnNlbGVjdGVkKTtcblxuICAgIGNvbnN0IHN3aXBlID0gKHNlbGVjdGVkVGh1bWIsIHRodW1iUGFyZW50KSA9PiB7XG4gICAgICBjb25zdCBuZXdTZWxlY3RlZFRodW1iID0gdGh1bWJQYXJlbnQuZmluZChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGh1bWIpO1xuXG4gICAgICAvLyBTd2FwIGFjdGl2ZSBjbGFzc2VzIG9uIHRodW1ibmFpbFxuICAgICAgc2VsZWN0ZWRUaHVtYi5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgIG5ld1NlbGVjdGVkVGh1bWIuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG5cbiAgICAgIC8vIFVwZGF0ZSBzb3VyY2VzIG9mIGJvdGggY292ZXIgYW5kIG1vZGFsIGNvdmVyXG4gICAgICBtb2RhbFByb2R1Y3RDb3Zlci5wcm9wKCdzcmMnLCBuZXdTZWxlY3RlZFRodW1iLmRhdGEoJ2ltYWdlLWxhcmdlLXNyYycpKTtcbiAgICAgIHByb2R1Y3RDb3Zlci5wcm9wKCdzcmMnLCBuZXdTZWxlY3RlZFRodW1iLmRhdGEoJ2ltYWdlLW1lZGl1bS1zcmMnKSk7XG4gICAgICAkKCcuZWFzeXpvb20gI2Vhc3l6b29tLWxhcmdlLWltZy1hbmNob3InKS5hdHRyKCdocmVmJywgbmV3U2VsZWN0ZWRUaHVtYi5kYXRhKCdpbWFnZS1sYXJnZS1zcmMnKSk7XG5cbiAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc3JjLCBhbHQgYW5kIHRpdGxlXG4gICAgICBwcm9kdWN0Q292ZXIuYXR0cigndGl0bGUnLCBuZXdTZWxlY3RlZFRodW1iLmF0dHIoJ3RpdGxlJykpO1xuICAgICAgbW9kYWxQcm9kdWN0Q292ZXIuYXR0cigndGl0bGUnLCBuZXdTZWxlY3RlZFRodW1iLmF0dHIoJ3RpdGxlJykpO1xuICAgICAgcHJvZHVjdENvdmVyLmF0dHIoJ2FsdCcsIG5ld1NlbGVjdGVkVGh1bWIuYXR0cignYWx0JykpO1xuICAgICAgbW9kYWxQcm9kdWN0Q292ZXIuYXR0cignYWx0JywgbmV3U2VsZWN0ZWRUaHVtYi5hdHRyKCdhbHQnKSk7XG5cbiAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc291cmNlc1xuICAgICAgdXBkYXRlU291cmNlcyhwcm9kdWN0Q292ZXIsIG5ld1NlbGVjdGVkVGh1bWIuZGF0YSgnaW1hZ2UtbWVkaXVtLXNvdXJjZXMnKSk7XG4gICAgICB1cGRhdGVTb3VyY2VzKG1vZGFsUHJvZHVjdENvdmVyLCBuZXdTZWxlY3RlZFRodW1iLmRhdGEoJ2ltYWdlLWxhcmdlLXNvdXJjZXMnKSk7XG4gICAgfTtcblxuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LnRodW1iKS5vbignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgIHRodW1iU2VsZWN0ZWQgPSAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5zZWxlY3RlZCk7XG4gICAgICBzd2lwZSh0aHVtYlNlbGVjdGVkLCAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGh1bWJDb250YWluZXIpKTtcbiAgICB9KTtcblxuICAgIHByb2R1Y3RDb3Zlci5zd2lwZSh7XG4gICAgICBzd2lwZTogKGV2ZW50LCBkaXJlY3Rpb24pID0+IHtcbiAgICAgICAgdGh1bWJTZWxlY3RlZCA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LnNlbGVjdGVkKTtcbiAgICAgICAgY29uc3QgcGFyZW50VGh1bWIgPSB0aHVtYlNlbGVjdGVkLmNsb3Nlc3QocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LnRodW1iQ29udGFpbmVyKTtcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHBhcmVudFRodW1iLnByZXYoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzd2lwZSh0aHVtYlNlbGVjdGVkLCBwYXJlbnRUaHVtYi5wcmV2KCkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50VGh1bWIubmV4dCgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHN3aXBlKHRodW1iU2VsZWN0ZWQsIHBhcmVudFRodW1iLm5leHQoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHBhcmVudFRodW1iLm5leHQoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzd2lwZSh0aHVtYlNlbGVjdGVkLCBwYXJlbnRUaHVtYi5uZXh0KCkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50VGh1bWIucHJldigpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHN3aXBlKHRodW1iU2VsZWN0ZWQsIHBhcmVudFRodW1iLnByZXYoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYWxsb3dQYWdlU2Nyb2xsOiAndmVydGljYWwnLFxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaW1hZ2VTY3JvbGxCb3goKSB7XG4gICAgaWYgKCQoJyNtYWluIC5qcy1xdi1wcm9kdWN0LWltYWdlcyBsaScpLmxlbmd0aCA+IDIpIHtcbiAgICAgICQoJyNtYWluIC5qcy1xdi1tYXNrJykuYWRkQ2xhc3MoJ3Njcm9sbCcpO1xuICAgICAgJCgnLnNjcm9sbC1ib3gtYXJyb3dzJykuYWRkQ2xhc3MoJ3Njcm9sbCcpO1xuICAgICAgJCgnI21haW4gLmpzLXF2LW1hc2snKS5zY3JvbGxib3goe1xuICAgICAgICBkaXJlY3Rpb246ICdoJyxcbiAgICAgICAgZGlzdGFuY2U6IDExMyxcbiAgICAgICAgYXV0b1BsYXk6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICAkKCcuc2Nyb2xsLWJveC1hcnJvd3MgLmxlZnQnKS5jbGljaygoKSA9PiB7XG4gICAgICAgICQoJyNtYWluIC5qcy1xdi1tYXNrJykudHJpZ2dlcignYmFja3dhcmQnKTtcbiAgICAgIH0pO1xuICAgICAgJCgnLnNjcm9sbC1ib3gtYXJyb3dzIC5yaWdodCcpLmNsaWNrKCgpID0+IHtcbiAgICAgICAgJCgnI21haW4gLmpzLXF2LW1hc2snKS50cmlnZ2VyKCdmb3J3YXJkJyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJCgnI21haW4gLmpzLXF2LW1hc2snKS5yZW1vdmVDbGFzcygnc2Nyb2xsJyk7XG4gICAgICAkKCcuc2Nyb2xsLWJveC1hcnJvd3MnKS5yZW1vdmVDbGFzcygnc2Nyb2xsJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5wdXRGaWxlKCkge1xuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5maWxlSW5wdXQpLm9uKCdjaGFuZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQuY3VycmVudFRhcmdldClbMF07XG4gICAgICBjb25zdCBmaWxlID0gKHRhcmdldCkgPyB0YXJnZXQuZmlsZXNbMF0gOiBudWxsO1xuXG4gICAgICBpZiAodGFyZ2V0ICYmIGZpbGUpIHtcbiAgICAgICAgJCh0YXJnZXQpLnByZXYoKS50ZXh0KGZpbGUubmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcm9kdWN0U3BpbigpIHtcbiAgICBjb25zdCAkcXVhbnRpdHlJbnB1dCA9ICQocHJlc3Rhc2hvcC5zZWxlY3RvcnMucXVhbnRpdHlXYW50ZWQpO1xuXG4gICAgJHF1YW50aXR5SW5wdXQuVG91Y2hTcGluKHtcbiAgICAgIHZlcnRpY2FsYnV0dG9uczogdHJ1ZSxcbiAgICAgIHZlcnRpY2FsdXBjbGFzczogJ21hdGVyaWFsLWljb25zIHRvdWNoc3Bpbi11cCcsXG4gICAgICB2ZXJ0aWNhbGRvd25jbGFzczogJ21hdGVyaWFsLWljb25zIHRvdWNoc3Bpbi1kb3duJyxcbiAgICAgIGJ1dHRvbmRvd25fY2xhc3M6ICdidG4gYnRuLXRvdWNoc3BpbiBqcy10b3VjaHNwaW4nLFxuICAgICAgYnV0dG9udXBfY2xhc3M6ICdidG4gYnRuLXRvdWNoc3BpbiBqcy10b3VjaHNwaW4nLFxuICAgICAgbWluOiBwYXJzZUludCgkcXVhbnRpdHlJbnB1dC5hdHRyKCdtaW4nKSwgMTApLFxuICAgICAgbWF4OiAxMDAwMDAwLFxuICAgIH0pO1xuXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnRvdWNoc3Bpbikub2ZmKCd0b3VjaHN0YXJ0LnRvdWNoc3BpbicpO1xuXG4gICAgJHF1YW50aXR5SW5wdXQub24oJ2ZvY3Vzb3V0JywgKCkgPT4ge1xuICAgICAgaWYgKCRxdWFudGl0eUlucHV0LnZhbCgpID09PSAnJyB8fCAkcXVhbnRpdHlJbnB1dC52YWwoKSA8ICRxdWFudGl0eUlucHV0LmF0dHIoJ21pbicpKSB7XG4gICAgICAgICRxdWFudGl0eUlucHV0LnZhbCgkcXVhbnRpdHlJbnB1dC5hdHRyKCdtaW4nKSk7XG4gICAgICAgICRxdWFudGl0eUlucHV0LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJCgnYm9keScpLm9uKCdjaGFuZ2Uga2V5dXAnLCBwcmVzdGFzaG9wLnNlbGVjdG9ycy5xdWFudGl0eVdhbnRlZCwgKGUpID0+IHtcbiAgICAgIGlmICgkcXVhbnRpdHlJbnB1dC52YWwoKSAhPT0gJycpIHtcbiAgICAgICAgJChlLmN1cnJlbnRUYXJnZXQpLnRyaWdnZXIoJ3RvdWNoc3Bpbi5zdG9wc3BpbicpO1xuICAgICAgICBwcmVzdGFzaG9wLmVtaXQoJ3VwZGF0ZVByb2R1Y3QnLCB7XG4gICAgICAgICAgZXZlbnRUeXBlOiAndXBkYXRlZFByb2R1Y3RRdWFudGl0eScsXG4gICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkSnNQcm9kdWN0VGFiQWN0aXZlU2VsZWN0b3IoKSB7XG4gICAgY29uc3QgbmF2ID0gJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGFicyk7XG4gICAgbmF2Lm9uKCdzaG93LmJzLnRhYicsIChlKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSAkKGUudGFyZ2V0KTtcbiAgICAgIHRhcmdldC5hZGRDbGFzcyhwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QuYWN0aXZlTmF2Q2xhc3MpO1xuICAgICAgJCh0YXJnZXQuYXR0cignaHJlZicpKS5hZGRDbGFzcyhwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QuYWN0aXZlVGFiQ2xhc3MpO1xuICAgIH0pO1xuICAgIG5hdi5vbignaGlkZS5icy50YWInLCAoZSkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gJChlLnRhcmdldCk7XG4gICAgICB0YXJnZXQucmVtb3ZlQ2xhc3MocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmFjdGl2ZU5hdkNsYXNzKTtcbiAgICAgICQodGFyZ2V0LmF0dHIoJ2hyZWYnKSkucmVtb3ZlQ2xhc3MocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmFjdGl2ZVRhYkNsYXNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZVByb2R1Y3RTcGluKCk7XG4gIGNyZWF0ZUlucHV0RmlsZSgpO1xuICBjb3ZlckltYWdlKCk7XG4gIGltYWdlU2Nyb2xsQm94KCk7XG4gIGFkZEpzUHJvZHVjdFRhYkFjdGl2ZVNlbGVjdG9yKCk7XG5cbiAgcHJlc3Rhc2hvcC5vbigndXBkYXRlZFByb2R1Y3QnLCAoZXZlbnQpID0+IHtcbiAgICBjcmVhdGVJbnB1dEZpbGUoKTtcbiAgICBjb3ZlckltYWdlKCk7XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnByb2R1Y3RfbWluaW1hbF9xdWFudGl0eSkge1xuICAgICAgY29uc3QgbWluaW1hbFByb2R1Y3RRdWFudGl0eSA9IHBhcnNlSW50KGV2ZW50LnByb2R1Y3RfbWluaW1hbF9xdWFudGl0eSwgMTApO1xuICAgICAgY29uc3QgcXVhbnRpdHlJbnB1dFNlbGVjdG9yID0gcHJlc3Rhc2hvcC5zZWxlY3RvcnMucXVhbnRpdHlXYW50ZWQ7XG4gICAgICBjb25zdCBxdWFudGl0eUlucHV0ID0gJChxdWFudGl0eUlucHV0U2VsZWN0b3IpO1xuXG4gICAgICAvLyBAc2VlIGh0dHA6Ly93d3cudmlydHVvc29mdC5ldS9jb2RlL2Jvb3RzdHJhcC10b3VjaHNwaW4vIGFib3V0IEJvb3RzdHJhcCBUb3VjaFNwaW5cbiAgICAgIHF1YW50aXR5SW5wdXQudHJpZ2dlcigndG91Y2hzcGluLnVwZGF0ZXNldHRpbmdzJywge1xuICAgICAgICBtaW46IG1pbmltYWxQcm9kdWN0UXVhbnRpdHksXG4gICAgICB9KTtcbiAgICB9XG4gICAgaW1hZ2VTY3JvbGxCb3goKTtcbiAgICAkKCQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmFjdGl2ZVRhYnMpLmF0dHIoJ2hyZWYnKSkuYWRkQ2xhc3MoJ2FjdGl2ZScpLnJlbW92ZUNsYXNzKCdmYWRlJyk7XG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QuaW1hZ2VzTW9kYWwpLnJlcGxhY2VXaXRoKGV2ZW50LnByb2R1Y3RfaW1hZ2VzX21vZGFsKTtcblxuICAgIGNvbnN0IHByb2R1Y3RTZWxlY3QgPSBuZXcgUHJvZHVjdFNlbGVjdCgpO1xuICAgIHByb2R1Y3RTZWxlY3QuaW5pdCgpO1xuICB9KTtcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHRpbWVvdXQgPSAzMDApIHtcbiAgbGV0IHRpbWVyO1xuXG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTsgfSwgdGltZW91dCk7XG4gIH07XG59XG4iLCJpbXBvcnQgJCBmcm9tIFwianF1ZXJ5XCI7XG5pbXBvcnQgcHJlc3Rhc2hvcCBmcm9tIFwicHJlc3Rhc2hvcFwiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL2NvbXBvbmVudHMvZGVib3VuY2VcIjtcblxucHJlc3Rhc2hvcC5jYXJ0ID0gcHJlc3Rhc2hvcC5jYXJ0IHx8IHt9O1xuXG5wcmVzdGFzaG9wLmNhcnQuYWN0aXZlX2lucHV0cyA9IG51bGw7XG5cbmNvbnN0IHNwaW5uZXJTZWxlY3RvciA9ICdpbnB1dFtuYW1lPVwicHJvZHVjdC1xdWFudGl0eS1zcGluXCJdJztcbmxldCBoYXNFcnJvciA9IGZhbHNlO1xubGV0IGlzVXBkYXRlT3BlcmF0aW9uID0gZmFsc2U7XG5sZXQgZXJyb3JNc2cgPSBcIlwiO1xuXG5jb25zdCBDaGVja1VwZGF0ZVF1YW50aXR5T3BlcmF0aW9ucyA9IHtcbiAgc3dpdGNoRXJyb3JTdGF0OiAoKSA9PiB7XG4gICAgLyoqXG4gICAgICogaWYgZXJyb3JNc2cgaXMgbm90IGVtcHR5IG9yIGlmIG5vdGlmaWNhdGlvbnMgYXJlIHNob3duLCB3ZSBoYXZlIGVycm9yIHRvIGRpc3BsYXlcbiAgICAgKiBpZiBoYXNFcnJvciBpcyB0cnVlLCBxdWFudGl0eSB3YXMgbm90IHVwZGF0ZWQgOiB3ZSBkb24ndCBkaXNhYmxlIGNoZWNrb3V0IGJ1dHRvblxuICAgICAqL1xuICAgIGNvbnN0ICRjaGVja291dEJ0biA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jaGVja291dC5idG4pO1xuXG4gICAgaWYgKFxuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLm5vdGlmaWNhdGlvbnMuZGFuZ2VyQWxlcnQpLmxlbmd0aCB8fFxuICAgICAgKGVycm9yTXNnICE9PSBcIlwiICYmICFoYXNFcnJvcilcbiAgICApIHtcbiAgICAgICRjaGVja291dEJ0bi5hZGRDbGFzcyhcImRpc2FibGVkXCIpO1xuICAgIH1cblxuICAgIGlmIChlcnJvck1zZyAhPT0gXCJcIikge1xuICAgICAgY29uc3Qgc3RyRXJyb3IgPSBgXG4gICAgICAgIDxhcnRpY2xlIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCIgZGF0YS1hbGVydD1cImRhbmdlclwiPlxuICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgIDxsaT4ke2Vycm9yTXNnfTwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgYDtcbiAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5ub3RpZmljYXRpb25zLmNvbnRhaW5lcikuaHRtbChzdHJFcnJvcik7XG4gICAgICBlcnJvck1zZyA9IFwiXCI7XG4gICAgICBpc1VwZGF0ZU9wZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgIC8vIGlmIGhhc0Vycm9yIGlzIHRydWUsIHF1YW50aXR5IHdhcyBub3QgdXBkYXRlZCA6IGFsbG93IGNoZWNrb3V0XG4gICAgICAgICRjaGVja291dEJ0bi5yZW1vdmVDbGFzcyhcImRpc2FibGVkXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWhhc0Vycm9yICYmIGlzVXBkYXRlT3BlcmF0aW9uKSB7XG4gICAgICBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgaXNVcGRhdGVPcGVyYXRpb24gPSBmYWxzZTtcbiAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5ub3RpZmljYXRpb25zLmNvbnRhaW5lcikuaHRtbChcIlwiKTtcbiAgICAgICRjaGVja291dEJ0bi5yZW1vdmVDbGFzcyhcImRpc2FibGVkXCIpO1xuICAgIH1cbiAgfSxcbiAgY2hlY2tVcGRhdGVPcGVyYXRpb246IChyZXNwKSA9PiB7XG4gICAgLyoqXG4gICAgICogcmVzcC5oYXNFcnJvciBjYW4gYmUgbm90IGRlZmluZWQgYnV0IHJlc3AuZXJyb3JzIG5vdCBlbXB0eTogcXVhbnRpdHkgaXMgdXBkYXRlZCBidXQgb3JkZXIgY2Fubm90IGJlIHBsYWNlZFxuICAgICAqIHdoZW4gcmVzcC5oYXNFcnJvcj10cnVlLCBxdWFudGl0eSBpcyBub3QgdXBkYXRlZFxuICAgICAqL1xuICAgIGNvbnN0IHsgaGFzRXJyb3I6IGhhc0Vycm9yT2NjdXJyZWQsIGVycm9yczogZXJyb3JEYXRhIH0gPSByZXNwO1xuICAgIGhhc0Vycm9yID0gaGFzRXJyb3JPY2N1cnJlZCA/PyBmYWxzZTtcbiAgICBjb25zdCBlcnJvcnMgPSBlcnJvckRhdGEgPz8gXCJcIjtcblxuICAgIC8vIDEuNy4yLnggcmV0dXJucyBlcnJvcnMgYXMgc3RyaW5nLCAxLjcuMy54IHJldHVybnMgYXJyYXlcbiAgICBpZiAoZXJyb3JzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIGVycm9yTXNnID0gZXJyb3JzLmpvaW4oXCIgXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvck1zZyA9IGVycm9ycztcbiAgICB9XG5cbiAgICBpc1VwZGF0ZU9wZXJhdGlvbiA9IHRydWU7XG4gIH0sXG59O1xuXG4vKipcbiAqIEF0dGFjaCBCb290c3RyYXAgVG91Y2hTcGluIGV2ZW50IGhhbmRsZXJzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNwaW4oKSB7XG4gICQuZWFjaCgkKHNwaW5uZXJTZWxlY3RvciksIChpbmRleCwgc3Bpbm5lcikgPT4ge1xuICAgICQoc3Bpbm5lcikuVG91Y2hTcGluKHtcbiAgICAgIG1pbjogcGFyc2VJbnQoJChzcGlubmVyKS5hdHRyKFwibWluXCIpLCAxMCksXG4gICAgICBtYXg6IDEwMDAwMDAsXG4gICAgfSk7XG4gIH0pO1xuXG4gICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy50b3VjaHNwaW4pLm9mZihcInRvdWNoc3RhcnQudG91Y2hzcGluXCIpO1xuXG4gIENoZWNrVXBkYXRlUXVhbnRpdHlPcGVyYXRpb25zLnN3aXRjaEVycm9yU3RhdCgpO1xufVxuXG5jb25zdCBwcmV2ZW50Q3VzdG9tTW9kYWxPcGVuID0gKGV2ZW50KSA9PiB7XG4gIGlmICh3aW5kb3cuc2hvdWxkUHJldmVudE1vZGFsKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiQoZnVuY3Rpb24gKCkge1xuICBjb25zdCBwcm9kdWN0TGluZUluQ2FydFNlbGVjdG9yID1cbiAgICBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQucHJvZHVjdExpbmVRdHk7XG4gIGNvbnN0IHByb21pc2VzID0gW107XG5cbiAgcHJlc3Rhc2hvcC5vbihcInVwZGF0ZWRDYXJ0XCIsICgpID0+IHtcbiAgICB3aW5kb3cuc2hvdWxkUHJldmVudE1vZGFsID0gZmFsc2U7XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5jdXN0b21pemF0aW9uTW9kYWwpLm9uKFxuICAgICAgXCJzaG93LmJzLm1vZGFsXCIsXG4gICAgICAobW9kYWxFdmVudCkgPT4ge1xuICAgICAgICBwcmV2ZW50Q3VzdG9tTW9kYWxPcGVuKG1vZGFsRXZlbnQpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgY3JlYXRlU3BpbigpO1xuICB9KTtcblxuICBjcmVhdGVTcGluKCk7XG5cbiAgY29uc3QgJGJvZHkgPSAkKFwiYm9keVwiKTtcblxuICBmdW5jdGlvbiBpc1RvdWNoU3BpbihuYW1lc3BhY2UpIHtcbiAgICByZXR1cm4gbmFtZXNwYWNlID09PSBcIm9uLnN0YXJ0dXBzcGluXCIgfHwgbmFtZXNwYWNlID09PSBcIm9uLnN0YXJ0ZG93bnNwaW5cIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZEluY3JlYXNlUHJvZHVjdFF1YW50aXR5KG5hbWVzcGFjZSkge1xuICAgIHJldHVybiBuYW1lc3BhY2UgPT09IFwib24uc3RhcnR1cHNwaW5cIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRDYXJ0TGluZVByb2R1Y3RRdWFudGl0eUlucHV0KCR0YXJnZXQpIHtcbiAgICBjb25zdCAkaW5wdXQgPSAkdGFyZ2V0XG4gICAgICAucGFyZW50cyhwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQudG91Y2hzcGluKVxuICAgICAgLmZpbmQocHJvZHVjdExpbmVJbkNhcnRTZWxlY3Rvcik7XG5cbiAgICBpZiAoJGlucHV0LmlzKFwiOmZvY3VzXCIpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gJGlucHV0O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FtZWxpemUoc3ViamVjdCkge1xuICAgIGNvbnN0IGFjdGlvblR5cGVQYXJ0cyA9IHN1YmplY3Quc3BsaXQoXCItXCIpO1xuICAgIGxldCBpO1xuICAgIGxldCBwYXJ0O1xuICAgIGxldCBjYW1lbGl6ZWRTdWJqZWN0ID0gXCJcIjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBhY3Rpb25UeXBlUGFydHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHBhcnQgPSBhY3Rpb25UeXBlUGFydHNbaV07XG5cbiAgICAgIGlmIChpICE9PSAwKSB7XG4gICAgICAgIHBhcnQgPSBwYXJ0LnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICsgcGFydC5zdWJzdHJpbmcoMSk7XG4gICAgICB9XG5cbiAgICAgIGNhbWVsaXplZFN1YmplY3QgKz0gcGFydDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FtZWxpemVkU3ViamVjdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQ2FydEFjdGlvbigkdGFyZ2V0LCBuYW1lc3BhY2UpIHtcbiAgICBpZiAoIWlzVG91Y2hTcGluKG5hbWVzcGFjZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVybDogJHRhcmdldC5hdHRyKFwiaHJlZlwiKSxcbiAgICAgICAgdHlwZTogY2FtZWxpemUoJHRhcmdldC5kYXRhKFwibGluay1hY3Rpb25cIikpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCAkaW5wdXQgPSBmaW5kQ2FydExpbmVQcm9kdWN0UXVhbnRpdHlJbnB1dCgkdGFyZ2V0KTtcblxuICAgIGlmICghJGlucHV0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGNhcnRBY3Rpb24gPSB7fTtcblxuICAgIGlmIChzaG91bGRJbmNyZWFzZVByb2R1Y3RRdWFudGl0eShuYW1lc3BhY2UpKSB7XG4gICAgICBjYXJ0QWN0aW9uID0ge1xuICAgICAgICB1cmw6ICRpbnB1dC5kYXRhKFwidXAtdXJsXCIpLFxuICAgICAgICB0eXBlOiBcImluY3JlYXNlUHJvZHVjdFF1YW50aXR5XCIsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjYXJ0QWN0aW9uID0ge1xuICAgICAgICB1cmw6ICRpbnB1dC5kYXRhKFwiZG93bi11cmxcIiksXG4gICAgICAgIHR5cGU6IFwiZGVjcmVhc2VQcm9kdWN0UXVhbnRpdHlcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhcnRBY3Rpb247XG4gIH1cblxuICBjb25zdCBhYm9ydFByZXZpb3VzUmVxdWVzdHMgPSAoKSA9PiB7XG4gICAgbGV0IHByb21pc2U7XG4gICAgd2hpbGUgKHByb21pc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlcy5wb3AoKTtcbiAgICAgIHByb21pc2UuYWJvcnQoKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0VG91Y2hTcGluSW5wdXQgPSAoJGJ1dHRvbikgPT5cbiAgICAkKCRidXR0b24ucGFyZW50cyhwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQudG91Y2hzcGluKS5maW5kKFwiaW5wdXRcIikpO1xuXG4gICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmN1c3RvbWl6YXRpb25Nb2RhbCkub24oXG4gICAgXCJzaG93LmJzLm1vZGFsXCIsXG4gICAgKG1vZGFsRXZlbnQpID0+IHtcbiAgICAgIHByZXZlbnRDdXN0b21Nb2RhbE9wZW4obW9kYWxFdmVudCk7XG4gICAgfSxcbiAgKTtcblxuICBjb25zdCBoYW5kbGVDYXJ0QWN0aW9uID0gKGV2ZW50KSA9PiB7XG4gICAgYWJvcnRQcmV2aW91c1JlcXVlc3RzKCk7XG4gICAgd2luZG93LnNob3VsZFByZXZlbnRNb2RhbCA9IHRydWU7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0ICR0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IHsgZGF0YXNldCB9ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICBjb25zdCBjYXJ0QWN0aW9uID0gcGFyc2VDYXJ0QWN0aW9uKCR0YXJnZXQsIGV2ZW50Lm5hbWVzcGFjZSk7XG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB7XG4gICAgICBhamF4OiBcIjFcIixcbiAgICAgIGFjdGlvbjogXCJ1cGRhdGVcIixcbiAgICB9O1xuXG4gICAgaWYgKCFjYXJ0QWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgJC5hamF4KHtcbiAgICAgIHVybDogY2FydEFjdGlvbi51cmwsXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgZGF0YTogcmVxdWVzdERhdGEsXG4gICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICBiZWZvcmVTZW5kKGpxWEhSKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2goanFYSFIpO1xuICAgICAgfSxcbiAgICB9KVxuICAgICAgLnRoZW4oKHJlc3ApID0+IHtcbiAgICAgICAgY29uc3QgJHF1YW50aXR5SW5wdXQgPSBnZXRUb3VjaFNwaW5JbnB1dCgkdGFyZ2V0KTtcbiAgICAgICAgQ2hlY2tVcGRhdGVRdWFudGl0eU9wZXJhdGlvbnMuY2hlY2tVcGRhdGVPcGVyYXRpb24ocmVzcCk7XG4gICAgICAgICRxdWFudGl0eUlucHV0LnZhbChyZXNwLnF1YW50aXR5KTtcblxuICAgICAgICAvLyBSZWZyZXNoIGNhcnQgcHJldmlld1xuICAgICAgICBwcmVzdGFzaG9wLmVtaXQoXCJ1cGRhdGVDYXJ0XCIsIHtcbiAgICAgICAgICByZWFzb246IGRhdGFzZXQsXG4gICAgICAgICAgcmVzcCxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmZhaWwoKHJlc3ApID0+IHtcbiAgICAgICAgcHJlc3Rhc2hvcC5lbWl0KFwiaGFuZGxlRXJyb3JcIiwge1xuICAgICAgICAgIGV2ZW50VHlwZTogXCJ1cGRhdGVQcm9kdWN0SW5DYXJ0XCIsXG4gICAgICAgICAgcmVzcCxcbiAgICAgICAgICBjYXJ0QWN0aW9uOiBjYXJ0QWN0aW9uLnR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH07XG5cbiAgJGJvZHkub24oXCJjbGlja1wiLCBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQuYWN0aW9ucywgaGFuZGxlQ2FydEFjdGlvbik7XG5cbiAgZnVuY3Rpb24gc2VuZFVwZGF0ZVF1YW50aXR5SW5DYXJ0UmVxdWVzdChcbiAgICB1cGRhdGVRdWFudGl0eUluQ2FydFVybCxcbiAgICByZXF1ZXN0RGF0YSxcbiAgICAkdGFyZ2V0LFxuICApIHtcbiAgICBhYm9ydFByZXZpb3VzUmVxdWVzdHMoKTtcbiAgICB3aW5kb3cuc2hvdWxkUHJldmVudE1vZGFsID0gdHJ1ZTtcblxuICAgIHJldHVybiAkLmFqYXgoe1xuICAgICAgdXJsOiB1cGRhdGVRdWFudGl0eUluQ2FydFVybCxcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBkYXRhOiByZXF1ZXN0RGF0YSxcbiAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgIGJlZm9yZVNlbmQoanFYSFIpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChqcVhIUik7XG4gICAgICB9LFxuICAgIH0pXG4gICAgICAudGhlbigocmVzcCkgPT4ge1xuICAgICAgICBDaGVja1VwZGF0ZVF1YW50aXR5T3BlcmF0aW9ucy5jaGVja1VwZGF0ZU9wZXJhdGlvbihyZXNwKTtcblxuICAgICAgICAkdGFyZ2V0LnZhbChyZXNwLnF1YW50aXR5KTtcbiAgICAgICAgY29uc3QgZGF0YXNldCA9ICR0YXJnZXQgJiYgJHRhcmdldC5kYXRhc2V0ID8gJHRhcmdldC5kYXRhc2V0IDogcmVzcDtcblxuICAgICAgICAvLyBSZWZyZXNoIGNhcnQgcHJldmlld1xuICAgICAgICBwcmVzdGFzaG9wLmVtaXQoXCJ1cGRhdGVDYXJ0XCIsIHtcbiAgICAgICAgICByZWFzb246IGRhdGFzZXQsXG4gICAgICAgICAgcmVzcCxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmZhaWwoKHJlc3ApID0+IHtcbiAgICAgICAgcHJlc3Rhc2hvcC5lbWl0KFwiaGFuZGxlRXJyb3JcIiwge1xuICAgICAgICAgIGV2ZW50VHlwZTogXCJ1cGRhdGVQcm9kdWN0UXVhbnRpdHlJbkNhcnRcIixcbiAgICAgICAgICByZXNwLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UXVhbnRpdHlDaGFuZ2VUeXBlKCRxdWFudGl0eSkge1xuICAgIHJldHVybiAkcXVhbnRpdHkgPiAwID8gXCJ1cFwiIDogXCJkb3duXCI7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRSZXF1ZXN0RGF0YShxdWFudGl0eSkge1xuICAgIHJldHVybiB7XG4gICAgICBhamF4OiBcIjFcIixcbiAgICAgIHF0eTogTWF0aC5hYnMocXVhbnRpdHkpLFxuICAgICAgYWN0aW9uOiBcInVwZGF0ZVwiLFxuICAgICAgb3A6IGdldFF1YW50aXR5Q2hhbmdlVHlwZShxdWFudGl0eSksXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVByb2R1Y3RRdWFudGl0eUluQ2FydChldmVudCkge1xuICAgIGNvbnN0ICR0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IHVwZGF0ZVF1YW50aXR5SW5DYXJ0VXJsID0gJHRhcmdldC5kYXRhKFwidXBkYXRlLXVybFwiKTtcbiAgICBjb25zdCBiYXNlVmFsdWUgPSAkdGFyZ2V0LmF0dHIoXCJ2YWx1ZVwiKTtcblxuICAgIC8vIFRoZXJlIHNob3VsZCBiZSBhIHZhbGlkIHByb2R1Y3QgcXVhbnRpdHkgaW4gY2FydFxuICAgIGNvbnN0IHRhcmdldFZhbHVlID0gJHRhcmdldC52YWwoKTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIGlmIChcbiAgICAgIHRhcmdldFZhbHVlICE9IHBhcnNlSW50KHRhcmdldFZhbHVlLCAxMCkgfHxcbiAgICAgIHRhcmdldFZhbHVlIDwgMCB8fFxuICAgICAgaXNOYU4odGFyZ2V0VmFsdWUpXG4gICAgKSB7XG4gICAgICB3aW5kb3cuc2hvdWxkUHJldmVudE1vZGFsID0gZmFsc2U7XG4gICAgICAkdGFyZ2V0LnZhbChiYXNlVmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgLy8gVGhlcmUgc2hvdWxkIGJlIGEgbmV3IHByb2R1Y3QgcXVhbnRpdHkgaW4gY2FydFxuICAgIGNvbnN0IHF0eSA9IHRhcmdldFZhbHVlIC0gYmFzZVZhbHVlO1xuXG4gICAgaWYgKHF0eSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0YXJnZXRWYWx1ZSA9PT0gXCIwXCIpIHtcbiAgICAgICR0YXJnZXRcbiAgICAgICAgLmNsb3Nlc3QoXCIucHJvZHVjdC1saW5lLWFjdGlvbnNcIilcbiAgICAgICAgLmZpbmQoJ1tkYXRhLWxpbmstYWN0aW9uPVwiZGVsZXRlLWZyb20tY2FydFwiXScpXG4gICAgICAgIC5jbGljaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkdGFyZ2V0LmF0dHIoXCJ2YWx1ZVwiLCB0YXJnZXRWYWx1ZSk7XG4gICAgICBzZW5kVXBkYXRlUXVhbnRpdHlJbkNhcnRSZXF1ZXN0KFxuICAgICAgICB1cGRhdGVRdWFudGl0eUluQ2FydFVybCxcbiAgICAgICAgZ2V0UmVxdWVzdERhdGEocXR5KSxcbiAgICAgICAgJHRhcmdldCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgJGJvZHkub24oXG4gICAgXCJ0b3VjaHNwaW4ub24uc3RvcHNwaW5cIixcbiAgICBzcGlubmVyU2VsZWN0b3IsXG4gICAgZGVib3VuY2UodXBkYXRlUHJvZHVjdFF1YW50aXR5SW5DYXJ0KSxcbiAgKTtcblxuICAkYm9keS5vbihcImZvY3Vzb3V0IGtleXVwXCIsIHByb2R1Y3RMaW5lSW5DYXJ0U2VsZWN0b3IsIChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleXVwXCIpIHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICBpc1VwZGF0ZU9wZXJhdGlvbiA9IHRydWU7XG4gICAgICAgIHVwZGF0ZVByb2R1Y3RRdWFudGl0eUluQ2FydChldmVudCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVXBkYXRlT3BlcmF0aW9uKSB7XG4gICAgICB1cGRhdGVQcm9kdWN0UXVhbnRpdHlJbkNhcnQoZXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG5cbiAgY29uc3QgJHRpbWVvdXRFZmZlY3QgPSA0MDA7XG5cbiAgJGJvZHkub24oXG4gICAgXCJoaWRkZW4uYnMuY29sbGFwc2VcIixcbiAgICBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQucHJvbW9Db2RlLFxuICAgICgpID0+IHtcbiAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jYXJ0LmRpc3BsYXlQcm9tbykuc2hvdygkdGltZW91dEVmZmVjdCk7XG4gICAgfSxcbiAgKTtcblxuICAkYm9keS5vbihcImNsaWNrXCIsIHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2FydC5wcm9tb0NvZGVCdXR0b24sIChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2FydC5wcm9tb0NvZGUpLmNvbGxhcHNlKFwidG9nZ2xlXCIpO1xuICB9KTtcblxuICAkYm9keS5vbihcImNsaWNrXCIsIHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2FydC5kaXNwbGF5UHJvbW8sIChldmVudCkgPT4ge1xuICAgICQoZXZlbnQuY3VycmVudFRhcmdldCkuaGlkZSgkdGltZW91dEVmZmVjdCk7XG4gIH0pO1xuXG4gICRib2R5Lm9uKFwiY2xpY2tcIiwgcHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jYXJ0LmRpc2NvdW50Q29kZSwgKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCAkY29kZSA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgJGRpc2NvdW50SW5wdXQgPSAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2FydC5kaXNjb3VudE5hbWUpO1xuXG4gICAgJGRpc2NvdW50SW5wdXQudmFsKCRjb2RlLnRleHQoKSk7XG4gICAgLy8gU2hvdyBwcm9tbyBjb2RlIGZpZWxkXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQucHJvbW9Db2RlKS5jb2xsYXBzZShcInNob3dcIik7XG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQuZGlzcGxheVByb21vKS5oaWRlKCR0aW1lb3V0RWZmZWN0KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59KTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnID8gUmVmbGVjdCA6IG51bGxcbnZhciBSZWZsZWN0QXBwbHkgPSBSICYmIHR5cGVvZiBSLmFwcGx5ID09PSAnZnVuY3Rpb24nXG4gID8gUi5hcHBseVxuICA6IGZ1bmN0aW9uIFJlZmxlY3RBcHBseSh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpO1xuICB9XG5cbnZhciBSZWZsZWN0T3duS2V5c1xuaWYgKFIgJiYgdHlwZW9mIFIub3duS2V5cyA9PT0gJ2Z1bmN0aW9uJykge1xuICBSZWZsZWN0T3duS2V5cyA9IFIub3duS2V5c1xufSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldClcbiAgICAgIC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKTtcbiAgfTtcbn0gZWxzZSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFByb2Nlc3NFbWl0V2FybmluZyh3YXJuaW5nKSB7XG4gIGlmIChjb25zb2xlICYmIGNvbnNvbGUud2FybikgY29uc29sZS53YXJuKHdhcm5pbmcpO1xufVxuXG52YXIgTnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gTnVtYmVySXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICBFdmVudEVtaXR0ZXIuaW5pdC5jYWxsKHRoaXMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5tb2R1bGUuZXhwb3J0cy5vbmNlID0gb25jZTtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHNDb3VudCA9IDA7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbnZhciBkZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgbGlzdGVuZXIpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudEVtaXR0ZXIsICdkZWZhdWx0TWF4TGlzdGVuZXJzJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkZWZhdWx0TWF4TGlzdGVuZXJzO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwIHx8IE51bWJlcklzTmFOKGFyZykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIGFyZyArICcuJyk7XG4gICAgfVxuICAgIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSBhcmc7XG4gIH1cbn0pO1xuXG5FdmVudEVtaXR0ZXIuaW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICh0aGlzLl9ldmVudHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fZXZlbnRzID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykge1xuICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn07XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA8IDAgfHwgTnVtYmVySXNOYU4obikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiblwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBuICsgJy4nKTtcbiAgfVxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIF9nZXRNYXhMaXN0ZW5lcnModGhhdCkge1xuICBpZiAodGhhdC5fbWF4TGlzdGVuZXJzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICByZXR1cm4gdGhhdC5fbWF4TGlzdGVuZXJzO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmdldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIGdldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIF9nZXRNYXhMaXN0ZW5lcnModGhpcyk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KHR5cGUpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICB2YXIgZG9FcnJvciA9ICh0eXBlID09PSAnZXJyb3InKTtcblxuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpXG4gICAgZG9FcnJvciA9IChkb0Vycm9yICYmIGV2ZW50cy5lcnJvciA9PT0gdW5kZWZpbmVkKTtcbiAgZWxzZSBpZiAoIWRvRXJyb3IpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKGRvRXJyb3IpIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMClcbiAgICAgIGVyID0gYXJnc1swXTtcbiAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgLy8gTm90ZTogVGhlIGNvbW1lbnRzIG9uIHRoZSBgdGhyb3dgIGxpbmVzIGFyZSBpbnRlbnRpb25hbCwgdGhleSBzaG93XG4gICAgICAvLyB1cCBpbiBOb2RlJ3Mgb3V0cHV0IGlmIHRoaXMgcmVzdWx0cyBpbiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLlxuICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgfVxuICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmhhbmRsZWQgZXJyb3IuJyArIChlciA/ICcgKCcgKyBlci5tZXNzYWdlICsgJyknIDogJycpKTtcbiAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgIHRocm93IGVycjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgfVxuXG4gIHZhciBoYW5kbGVyID0gZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFJlZmxlY3RBcHBseShoYW5kbGVyLCB0aGlzLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuID0gaGFuZGxlci5sZW5ndGg7XG4gICAgdmFyIGxpc3RlbmVycyA9IGFycmF5Q2xvbmUoaGFuZGxlciwgbGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgUmVmbGVjdEFwcGx5KGxpc3RlbmVyc1tpXSwgdGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIF9hZGRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIGxpc3RlbmVyLCBwcmVwZW5kKSB7XG4gIHZhciBtO1xuICB2YXIgZXZlbnRzO1xuICB2YXIgZXhpc3Rpbmc7XG5cbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0YXJnZXQuX2V2ZW50c0NvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgICBpZiAoZXZlbnRzLm5ld0xpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldC5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA/IGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gICAgICAvLyBSZS1hc3NpZ24gYGV2ZW50c2AgYmVjYXVzZSBhIG5ld0xpc3RlbmVyIGhhbmRsZXIgY291bGQgaGF2ZSBjYXVzZWQgdGhlXG4gICAgICAvLyB0aGlzLl9ldmVudHMgdG8gYmUgYXNzaWduZWQgdG8gYSBuZXcgb2JqZWN0XG4gICAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgICB9XG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV07XG4gIH1cblxuICBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gICAgKyt0YXJnZXQuX2V2ZW50c0NvdW50O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPVxuICAgICAgICBwcmVwZW5kID8gW2xpc3RlbmVyLCBleGlzdGluZ10gOiBbZXhpc3RpbmcsIGxpc3RlbmVyXTtcbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB9IGVsc2UgaWYgKHByZXBlbmQpIHtcbiAgICAgIGV4aXN0aW5nLnVuc2hpZnQobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdGluZy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICAgIG0gPSBfZ2V0TWF4TGlzdGVuZXJzKHRhcmdldCk7XG4gICAgaWYgKG0gPiAwICYmIGV4aXN0aW5nLmxlbmd0aCA+IG0gJiYgIWV4aXN0aW5nLndhcm5lZCkge1xuICAgICAgZXhpc3Rpbmcud2FybmVkID0gdHJ1ZTtcbiAgICAgIC8vIE5vIGVycm9yIGNvZGUgZm9yIHRoaXMgc2luY2UgaXQgaXMgYSBXYXJuaW5nXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIHZhciB3ID0gbmV3IEVycm9yKCdQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5sZW5ndGggKyAnICcgKyBTdHJpbmcodHlwZSkgKyAnIGxpc3RlbmVycyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY3JlYXNlIGxpbWl0Jyk7XG4gICAgICB3Lm5hbWUgPSAnTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nJztcbiAgICAgIHcuZW1pdHRlciA9IHRhcmdldDtcbiAgICAgIHcudHlwZSA9IHR5cGU7XG4gICAgICB3LmNvdW50ID0gZXhpc3RpbmcubGVuZ3RoO1xuICAgICAgUHJvY2Vzc0VtaXRXYXJuaW5nKHcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gICAgfTtcblxuZnVuY3Rpb24gb25jZVdyYXBwZXIoKSB7XG4gIGlmICghdGhpcy5maXJlZCkge1xuICAgIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSwgdGhpcy53cmFwRm4pO1xuICAgIHRoaXMuZmlyZWQgPSB0cnVlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsIGFyZ3VtZW50cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX29uY2VXcmFwKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIHN0YXRlID0geyBmaXJlZDogZmFsc2UsIHdyYXBGbjogdW5kZWZpbmVkLCB0YXJnZXQ6IHRhcmdldCwgdHlwZTogdHlwZSwgbGlzdGVuZXI6IGxpc3RlbmVyIH07XG4gIHZhciB3cmFwcGVkID0gb25jZVdyYXBwZXIuYmluZChzdGF0ZSk7XG4gIHdyYXBwZWQubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgc3RhdGUud3JhcEZuID0gd3JhcHBlZDtcbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UodHlwZSwgbGlzdGVuZXIpIHtcbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gIHRoaXMub24odHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kT25jZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGxpc3QgPSBldmVudHNbdHlwZV07XG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8IGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0Lmxpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwb3NpdGlvbiA9IC0xO1xuXG4gICAgICAgIGZvciAoaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHwgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0W2ldLmxpc3RlbmVyO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICBpZiAocG9zaXRpb24gPT09IDApXG4gICAgICAgICAgbGlzdC5zaGlmdCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzcGxpY2VPbmUobGlzdCwgcG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKVxuICAgICAgICAgIGV2ZW50c1t0eXBlXSA9IGxpc3RbMF07XG5cbiAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBvcmlnaW5hbExpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKHR5cGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMsIGV2ZW50cywgaTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGV2ZW50cyk7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5lcnMgPSBldmVudHNbdHlwZV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgICAgIH0gZWxzZSBpZiAobGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTElGTyBvcmRlclxuICAgICAgICBmb3IgKGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuZnVuY3Rpb24gX2xpc3RlbmVycyh0YXJnZXQsIHR5cGUsIHVud3JhcCkge1xuICB2YXIgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcbiAgaWYgKGV2bGlzdGVuZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiB1bndyYXAgPyBbZXZsaXN0ZW5lci5saXN0ZW5lciB8fCBldmxpc3RlbmVyXSA6IFtldmxpc3RlbmVyXTtcblxuICByZXR1cm4gdW53cmFwID9cbiAgICB1bndyYXBMaXN0ZW5lcnMoZXZsaXN0ZW5lcikgOiBhcnJheUNsb25lKGV2bGlzdGVuZXIsIGV2bGlzdGVuZXIubGVuZ3RoKTtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCB0cnVlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmF3TGlzdGVuZXJzID0gZnVuY3Rpb24gcmF3TGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGlzdGVuZXJDb3VudC5jYWxsKGVtaXR0ZXIsIHR5cGUpO1xuICB9XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBsaXN0ZW5lckNvdW50O1xuZnVuY3Rpb24gbGlzdGVuZXJDb3VudCh0eXBlKSB7XG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG5cbiAgICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoZXZsaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHJldHVybiB0aGlzLl9ldmVudHNDb3VudCA+IDAgPyBSZWZsZWN0T3duS2V5cyh0aGlzLl9ldmVudHMpIDogW107XG59O1xuXG5mdW5jdGlvbiBhcnJheUNsb25lKGFyciwgbikge1xuICB2YXIgY29weSA9IG5ldyBBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpXG4gICAgY29weVtpXSA9IGFycltpXTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbmZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKDsgaW5kZXggKyAxIDwgbGlzdC5sZW5ndGg7IGluZGV4KyspXG4gICAgbGlzdFtpbmRleF0gPSBsaXN0W2luZGV4ICsgMV07XG4gIGxpc3QucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHVud3JhcExpc3RlbmVycyhhcnIpIHtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXQubGVuZ3RoOyArK2kpIHtcbiAgICByZXRbaV0gPSBhcnJbaV0ubGlzdGVuZXIgfHwgYXJyW2ldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIG9uY2UoZW1pdHRlciwgbmFtZSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXJyKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKG5hbWUsIHJlc29sdmVyKTtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgaWYgKHR5cGVvZiBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICByZXNvbHZlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCByZXNvbHZlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGlmIChuYW1lICE9PSAnZXJyb3InKSB7XG4gICAgICBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBlcnJvckxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgaGFuZGxlciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsICdlcnJvcicsIGhhbmRsZXIsIGZsYWdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgbGlzdGVuZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICBlbWl0dGVyLm9uY2UobmFtZSwgbGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0dGVyLm9uKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEV2ZW50VGFyZ2V0IGRvZXMgbm90IGhhdmUgYGVycm9yYCBldmVudCBzZW1hbnRpY3MgbGlrZSBOb2RlXG4gICAgLy8gRXZlbnRFbWl0dGVycywgd2UgZG8gbm90IGxpc3RlbiBmb3IgYGVycm9yYCBldmVudHMgaGVyZS5cbiAgICBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZnVuY3Rpb24gd3JhcExpc3RlbmVyKGFyZykge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBidWlsdGluIGB7IG9uY2U6IHRydWUgfWAgc3VwcG9ydCBzbyB3ZVxuICAgICAgLy8gaGF2ZSB0byBkbyBpdCBtYW51YWxseS5cbiAgICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgbGlzdGVuZXIoYXJnKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJlbWl0dGVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGVtaXR0ZXIpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKi9cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyb3BEb3duIHtcbiAgY29uc3RydWN0b3IoZWwpIHtcbiAgICB0aGlzLmVsID0gZWw7XG4gIH1cblxuICBpbml0KCkge1xuICAgIHRoaXMuZWwub24oJ3Nob3cuYnMuZHJvcGRvd24nLCAoZSwgZWwpID0+IHtcbiAgICAgIGlmIChlbCkge1xuICAgICAgICAkKGAjJHtlbH1gKS5maW5kKCcuZHJvcGRvd24tbWVudScpLmZpcnN0KCkuc3RvcCh0cnVlLCB0cnVlKVxuICAgICAgICAgIC5zbGlkZURvd24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQoZS50YXJnZXQpLmZpbmQoJy5kcm9wZG93bi1tZW51JykuZmlyc3QoKS5zdG9wKHRydWUsIHRydWUpXG4gICAgICAgICAgLnNsaWRlRG93bigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5lbC5vbignaGlkZS5icy5kcm9wZG93bicsIChlLCBlbCkgPT4ge1xuICAgICAgaWYgKGVsKSB7XG4gICAgICAgICQoYCMke2VsfWApLmZpbmQoJy5kcm9wZG93bi1tZW51JykuZmlyc3QoKS5zdG9wKHRydWUsIHRydWUpXG4gICAgICAgICAgLnNsaWRlVXAoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQoZS50YXJnZXQpLmZpbmQoJy5kcm9wZG93bi1tZW51JykuZmlyc3QoKS5zdG9wKHRydWUsIHRydWUpXG4gICAgICAgICAgLnNsaWRlVXAoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZWwuZmluZCgnc2VsZWN0LmxpbmsnKS5lYWNoKChpZHgsIGVsKSA9PiB7XG4gICAgICAkKGVsKS5vbignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAkKHRoaXMpLnZhbCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9ybSB7XG4gIGluaXQoKSB7XG4gICAgdGhpcy5wYXJlbnRGb2N1cygpO1xuICAgIHRoaXMudG9nZ2xlUGFzc3dvcmRWaXNpYmlsaXR5KCk7XG4gIH1cblxuICBwYXJlbnRGb2N1cygpIHtcbiAgICAkKCcuanMtY2hpbGQtZm9jdXMnKS5vbignZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5qcy1wYXJlbnQtZm9jdXMnKS5hZGRDbGFzcygnZm9jdXMnKTtcbiAgICB9KTtcbiAgICAkKCcuanMtY2hpbGQtZm9jdXMnKS5vbignZm9jdXNvdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5qcy1wYXJlbnQtZm9jdXMnKS5yZW1vdmVDbGFzcygnZm9jdXMnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZVBhc3N3b3JkVmlzaWJpbGl0eSgpIHtcbiAgICAkKCdidXR0b25bZGF0YS1hY3Rpb249XCJzaG93LXBhc3N3b3JkXCJdJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZWxtID0gJCh0aGlzKS5jbG9zZXN0KCcuaW5wdXQtZ3JvdXAnKS5jaGlsZHJlbignaW5wdXQuanMtdmlzaWJsZS1wYXNzd29yZCcpO1xuXG4gICAgICBpZiAoZWxtLmF0dHIoJ3R5cGUnKSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICBlbG0uYXR0cigndHlwZScsICd0ZXh0Jyk7XG4gICAgICAgICQodGhpcykudGV4dCgkKHRoaXMpLmRhdGEoJ3RleHRIaWRlJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxtLmF0dHIoJ3R5cGUnLCAncGFzc3dvcmQnKTtcbiAgICAgICAgJCh0aGlzKS50ZXh0KCQodGhpcykuZGF0YSgndGV4dFNob3cnKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8qIGdsb2JhbCB3aW5kb3csIGV4cG9ydHMsIGRlZmluZSAqL1xuXG4hZnVuY3Rpb24oKSB7XG4gICAgJ3VzZSBzdHJpY3QnXG5cbiAgICB2YXIgcmUgPSB7XG4gICAgICAgIG5vdF9zdHJpbmc6IC9bXnNdLyxcbiAgICAgICAgbm90X2Jvb2w6IC9bXnRdLyxcbiAgICAgICAgbm90X3R5cGU6IC9bXlRdLyxcbiAgICAgICAgbm90X3ByaW1pdGl2ZTogL1tedl0vLFxuICAgICAgICBudW1iZXI6IC9bZGllZmddLyxcbiAgICAgICAgbnVtZXJpY19hcmc6IC9bYmNkaWVmZ3V4WF0vLFxuICAgICAgICBqc29uOiAvW2pdLyxcbiAgICAgICAgbm90X2pzb246IC9bXmpdLyxcbiAgICAgICAgdGV4dDogL15bXlxceDI1XSsvLFxuICAgICAgICBtb2R1bG86IC9eXFx4MjV7Mn0vLFxuICAgICAgICBwbGFjZWhvbGRlcjogL15cXHgyNSg/OihbMS05XVxcZCopXFwkfFxcKChbXildKylcXCkpPyhcXCspPygwfCdbXiRdKT8oLSk/KFxcZCspPyg/OlxcLihcXGQrKSk/KFtiLWdpam9zdFR1dnhYXSkvLFxuICAgICAgICBrZXk6IC9eKFthLXpfXVthLXpfXFxkXSopL2ksXG4gICAgICAgIGtleV9hY2Nlc3M6IC9eXFwuKFthLXpfXVthLXpfXFxkXSopL2ksXG4gICAgICAgIGluZGV4X2FjY2VzczogL15cXFsoXFxkKylcXF0vLFxuICAgICAgICBzaWduOiAvXlsrLV0vXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3ByaW50ZihrZXkpIHtcbiAgICAgICAgLy8gYGFyZ3VtZW50c2AgaXMgbm90IGFuIGFycmF5LCBidXQgc2hvdWxkIGJlIGZpbmUgZm9yIHRoaXMgY2FsbFxuICAgICAgICByZXR1cm4gc3ByaW50Zl9mb3JtYXQoc3ByaW50Zl9wYXJzZShrZXkpLCBhcmd1bWVudHMpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdnNwcmludGYoZm10LCBhcmd2KSB7XG4gICAgICAgIHJldHVybiBzcHJpbnRmLmFwcGx5KG51bGwsIFtmbXRdLmNvbmNhdChhcmd2IHx8IFtdKSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzcHJpbnRmX2Zvcm1hdChwYXJzZV90cmVlLCBhcmd2KSB7XG4gICAgICAgIHZhciBjdXJzb3IgPSAxLCB0cmVlX2xlbmd0aCA9IHBhcnNlX3RyZWUubGVuZ3RoLCBhcmcsIG91dHB1dCA9ICcnLCBpLCBrLCBwaCwgcGFkLCBwYWRfY2hhcmFjdGVyLCBwYWRfbGVuZ3RoLCBpc19wb3NpdGl2ZSwgc2lnblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJlZV9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJzZV90cmVlW2ldID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBwYXJzZV90cmVlW2ldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGFyc2VfdHJlZVtpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBwaCA9IHBhcnNlX3RyZWVbaV0gLy8gY29udmVuaWVuY2UgcHVycG9zZXMgb25seVxuICAgICAgICAgICAgICAgIGlmIChwaC5rZXlzKSB7IC8vIGtleXdvcmQgYXJndW1lbnRcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndltjdXJzb3JdXG4gICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBwaC5rZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzcHJpbnRmKCdbc3ByaW50Zl0gQ2Fubm90IGFjY2VzcyBwcm9wZXJ0eSBcIiVzXCIgb2YgdW5kZWZpbmVkIHZhbHVlIFwiJXNcIicsIHBoLmtleXNba10sIHBoLmtleXNbay0xXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmdbcGgua2V5c1trXV1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwaC5wYXJhbV9ubykgeyAvLyBwb3NpdGlvbmFsIGFyZ3VtZW50IChleHBsaWNpdClcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndltwaC5wYXJhbV9ub11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7IC8vIHBvc2l0aW9uYWwgYXJndW1lbnQgKGltcGxpY2l0KVxuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd2W2N1cnNvcisrXVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZS5ub3RfdHlwZS50ZXN0KHBoLnR5cGUpICYmIHJlLm5vdF9wcmltaXRpdmUudGVzdChwaC50eXBlKSAmJiBhcmcgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZS5udW1lcmljX2FyZy50ZXN0KHBoLnR5cGUpICYmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyAmJiBpc05hTihhcmcpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNwcmludGYoJ1tzcHJpbnRmXSBleHBlY3RpbmcgbnVtYmVyIGJ1dCBmb3VuZCAlVCcsIGFyZykpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlLm51bWJlci50ZXN0KHBoLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzX3Bvc2l0aXZlID0gYXJnID49IDBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHBoLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwYXJzZUludChhcmcsIDEwKS50b1N0cmluZygyKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGFyZywgMTApKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2knOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGFyc2VJbnQoYXJnLCAxMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2onOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gSlNPTi5zdHJpbmdpZnkoYXJnLCBudWxsLCBwaC53aWR0aCA/IHBhcnNlSW50KHBoLndpZHRoKSA6IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBoLnByZWNpc2lvbiA/IHBhcnNlRmxvYXQoYXJnKS50b0V4cG9uZW50aWFsKHBoLnByZWNpc2lvbikgOiBwYXJzZUZsb2F0KGFyZykudG9FeHBvbmVudGlhbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBoLnByZWNpc2lvbiA/IHBhcnNlRmxvYXQoYXJnKS50b0ZpeGVkKHBoLnByZWNpc2lvbikgOiBwYXJzZUZsb2F0KGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2cnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGgucHJlY2lzaW9uID8gU3RyaW5nKE51bWJlcihhcmcudG9QcmVjaXNpb24ocGgucHJlY2lzaW9uKSkpIDogcGFyc2VGbG9hdChhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdvJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwYXJzZUludChhcmcsIDEwKSA+Pj4gMCkudG9TdHJpbmcoOClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gU3RyaW5nKGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwaC5wcmVjaXNpb24gPyBhcmcuc3Vic3RyaW5nKDAsIHBoLnByZWNpc2lvbikgOiBhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IFN0cmluZyghIWFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwaC5wcmVjaXNpb24gPyBhcmcuc3Vic3RyaW5nKDAsIHBoLnByZWNpc2lvbikgOiBhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdUJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGgucHJlY2lzaW9uID8gYXJnLnN1YnN0cmluZygwLCBwaC5wcmVjaXNpb24pIDogYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwYXJzZUludChhcmcsIDEwKSA+Pj4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGgucHJlY2lzaW9uID8gYXJnLnN1YnN0cmluZygwLCBwaC5wcmVjaXNpb24pIDogYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGFyc2VJbnQoYXJnLCAxMCkgPj4+IDApLnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnWCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGFyc2VJbnQoYXJnLCAxMCkgPj4+IDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmUuanNvbi50ZXN0KHBoLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBhcmdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZS5udW1iZXIudGVzdChwaC50eXBlKSAmJiAoIWlzX3Bvc2l0aXZlIHx8IHBoLnNpZ24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gaXNfcG9zaXRpdmUgPyAnKycgOiAnLSdcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy50b1N0cmluZygpLnJlcGxhY2UocmUuc2lnbiwgJycpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gJydcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYWRfY2hhcmFjdGVyID0gcGgucGFkX2NoYXIgPyBwaC5wYWRfY2hhciA9PT0gJzAnID8gJzAnIDogcGgucGFkX2NoYXIuY2hhckF0KDEpIDogJyAnXG4gICAgICAgICAgICAgICAgICAgIHBhZF9sZW5ndGggPSBwaC53aWR0aCAtIChzaWduICsgYXJnKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgcGFkID0gcGgud2lkdGggPyAocGFkX2xlbmd0aCA+IDAgPyBwYWRfY2hhcmFjdGVyLnJlcGVhdChwYWRfbGVuZ3RoKSA6ICcnKSA6ICcnXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBwaC5hbGlnbiA/IHNpZ24gKyBhcmcgKyBwYWQgOiAocGFkX2NoYXJhY3RlciA9PT0gJzAnID8gc2lnbiArIHBhZCArIGFyZyA6IHBhZCArIHNpZ24gKyBhcmcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXRcbiAgICB9XG5cbiAgICB2YXIgc3ByaW50Zl9jYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuICAgIGZ1bmN0aW9uIHNwcmludGZfcGFyc2UoZm10KSB7XG4gICAgICAgIGlmIChzcHJpbnRmX2NhY2hlW2ZtdF0pIHtcbiAgICAgICAgICAgIHJldHVybiBzcHJpbnRmX2NhY2hlW2ZtdF1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfZm10ID0gZm10LCBtYXRjaCwgcGFyc2VfdHJlZSA9IFtdLCBhcmdfbmFtZXMgPSAwXG4gICAgICAgIHdoaWxlIChfZm10KSB7XG4gICAgICAgICAgICBpZiAoKG1hdGNoID0gcmUudGV4dC5leGVjKF9mbXQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBhcnNlX3RyZWUucHVzaChtYXRjaFswXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKChtYXRjaCA9IHJlLm1vZHVsby5leGVjKF9mbXQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBhcnNlX3RyZWUucHVzaCgnJScpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgobWF0Y2ggPSByZS5wbGFjZWhvbGRlci5leGVjKF9mbXQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdfbmFtZXMgfD0gMVxuICAgICAgICAgICAgICAgICAgICB2YXIgZmllbGRfbGlzdCA9IFtdLCByZXBsYWNlbWVudF9maWVsZCA9IG1hdGNoWzJdLCBmaWVsZF9tYXRjaCA9IFtdXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZmllbGRfbWF0Y2ggPSByZS5rZXkuZXhlYyhyZXBsYWNlbWVudF9maWVsZCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9saXN0LnB1c2goZmllbGRfbWF0Y2hbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHJlcGxhY2VtZW50X2ZpZWxkID0gcmVwbGFjZW1lbnRfZmllbGQuc3Vic3RyaW5nKGZpZWxkX21hdGNoWzBdLmxlbmd0aCkpICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZmllbGRfbWF0Y2ggPSByZS5rZXlfYWNjZXNzLmV4ZWMocmVwbGFjZW1lbnRfZmllbGQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9saXN0LnB1c2goZmllbGRfbWF0Y2hbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChmaWVsZF9tYXRjaCA9IHJlLmluZGV4X2FjY2Vzcy5leGVjKHJlcGxhY2VtZW50X2ZpZWxkKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbGlzdC5wdXNoKGZpZWxkX21hdGNoWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleScpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMl0gPSBmaWVsZF9saXN0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcmdfbmFtZXMgfD0gMlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXJnX25hbWVzID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW3NwcmludGZdIG1peGluZyBwb3NpdGlvbmFsIGFuZCBuYW1lZCBwbGFjZWhvbGRlcnMgaXMgbm90ICh5ZXQpIHN1cHBvcnRlZCcpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogbWF0Y2hbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9ubzogICAgbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzOiAgICAgICAgbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduOiAgICAgICAgbWF0Y2hbM10sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRfY2hhcjogICAgbWF0Y2hbNF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbjogICAgICAgbWF0Y2hbNV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogICAgICAgbWF0Y2hbNl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb246ICAgbWF0Y2hbN10sXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICAgICAgbWF0Y2hbOF1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignW3NwcmludGZdIHVuZXhwZWN0ZWQgcGxhY2Vob2xkZXInKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2ZtdCA9IF9mbXQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3ByaW50Zl9jYWNoZVtmbXRdID0gcGFyc2VfdHJlZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGV4cG9ydCB0byBlaXRoZXIgYnJvd3NlciBvciBub2RlLmpzXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUgcXVvdGUtcHJvcHMgKi9cbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGV4cG9ydHNbJ3NwcmludGYnXSA9IHNwcmludGZcbiAgICAgICAgZXhwb3J0c1sndnNwcmludGYnXSA9IHZzcHJpbnRmXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3dbJ3NwcmludGYnXSA9IHNwcmludGZcbiAgICAgICAgd2luZG93Wyd2c3ByaW50ZiddID0gdnNwcmludGZcblxuICAgICAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKSB7XG4gICAgICAgICAgICBkZWZpbmUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgJ3NwcmludGYnOiBzcHJpbnRmLFxuICAgICAgICAgICAgICAgICAgICAndnNwcmludGYnOiB2c3ByaW50ZlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBxdW90ZS1wcm9wcyAqL1xufSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKi9cblxuaW1wb3J0IHtzcHJpbnRmfSBmcm9tICdzcHJpbnRmLWpzJztcblxuY29uc3Qge3Bhc3N3b3JkUG9saWN5OiBQYXNzd29yZFBvbGljeU1hcH0gPSBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzO1xuXG5jb25zdCBQQVNTV09SRF9QT0xJQ1lfRVJST1IgPSAnVGhlIHBhc3N3b3JkIHBvbGljeSBlbGVtZW50cyBhcmUgdW5kZWZpbmVkLic7XG5cbmNvbnN0IGdldFBhc3N3b3JkU3RyZW5ndGhGZWVkYmFjayA9IChcbiAgc3RyZW5ndGgsXG4pID0+IHtcbiAgc3dpdGNoIChzdHJlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiAnYmctZGFuZ2VyJyxcbiAgICAgIH07XG5cbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogJ2JnLWRhbmdlcicsXG4gICAgICB9O1xuXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6ICdiZy13YXJuaW5nJyxcbiAgICAgIH07XG5cbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogJ2JnLXN1Y2Nlc3MnLFxuICAgICAgfTtcblxuICAgIGNhc2UgNDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiAnYmctc3VjY2VzcycsXG4gICAgICB9O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYXNzd29yZCBzdHJlbmd0aCBpbmRpY2F0b3IuJyk7XG4gIH1cbn07XG5cbmNvbnN0IHdhdGNoUGFzc3dvcmQgPSBhc3luYyAoXG4gIGVsZW1lbnRJbnB1dCxcbiAgZmVlZGJhY2tDb250YWluZXIsXG4gIGhpbnRzLFxuKSA9PiB7XG4gIGNvbnN0IHtwcmVzdGFzaG9wfSA9IHdpbmRvdztcbiAgY29uc3QgcGFzc3dvcmRWYWx1ZSA9IGVsZW1lbnRJbnB1dC52YWx1ZTtcbiAgY29uc3QgZWxlbWVudEljb24gPSBmZWVkYmFja0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLnJlcXVpcmVtZW50U2NvcmVJY29uKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJlc3Rhc2hvcC5jaGVja1Bhc3N3b3JkU2NvcmUocGFzc3dvcmRWYWx1ZSk7XG4gIGNvbnN0IGZlZWRiYWNrID0gZ2V0UGFzc3dvcmRTdHJlbmd0aEZlZWRiYWNrKHJlc3VsdC5zY29yZSk7XG4gIGNvbnN0IHBhc3N3b3JkTGVuZ3RoID0gcGFzc3dvcmRWYWx1ZS5sZW5ndGg7XG4gIGNvbnN0IHBvcG92ZXJDb250ZW50ID0gW107XG5cbiAgJChlbGVtZW50SW5wdXQpLnBvcG92ZXIoJ2Rpc3Bvc2UnKTtcblxuICBmZWVkYmFja0NvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gcGFzc3dvcmRWYWx1ZSA9PT0gJycgPyAnbm9uZScgOiAnYmxvY2snO1xuXG4gIGlmIChyZXN1bHQuZmVlZGJhY2sud2FybmluZyAhPT0gJycpIHtcbiAgICBpZiAocmVzdWx0LmZlZWRiYWNrLndhcm5pbmcgaW4gaGludHMpIHtcbiAgICAgIHBvcG92ZXJDb250ZW50LnB1c2goaGludHNbcmVzdWx0LmZlZWRiYWNrLndhcm5pbmddKTtcbiAgICB9XG4gIH1cblxuICByZXN1bHQuZmVlZGJhY2suc3VnZ2VzdGlvbnMuZm9yRWFjaCgoc3VnZ2VzdGlvbikgPT4ge1xuICAgIGlmIChzdWdnZXN0aW9uIGluIGhpbnRzKSB7XG4gICAgICBwb3BvdmVyQ29udGVudC5wdXNoKGhpbnRzW3N1Z2dlc3Rpb25dKTtcbiAgICB9XG4gIH0pO1xuXG4gICQoZWxlbWVudElucHV0KS5wb3BvdmVyKHtcbiAgICBodG1sOiB0cnVlLFxuICAgIHBsYWNlbWVudDogJ3RvcCcsXG4gICAgY29udGVudDogcG9wb3ZlckNvbnRlbnQuam9pbignPGJyLz4nKSxcbiAgfSkucG9wb3Zlcignc2hvdycpO1xuXG4gIGNvbnN0IHBhc3N3b3JkTGVuZ3RoVmFsaWQgPSBwYXNzd29yZExlbmd0aCA+PSBwYXJzZUludChlbGVtZW50SW5wdXQuZGF0YXNldC5taW5sZW5ndGgsIDEwKVxuICAgICYmIHBhc3N3b3JkTGVuZ3RoIDw9IHBhcnNlSW50KGVsZW1lbnRJbnB1dC5kYXRhc2V0Lm1heGxlbmd0aCwgMTApO1xuICBjb25zdCBwYXNzd29yZFNjb3JlVmFsaWQgPSBwYXJzZUludChlbGVtZW50SW5wdXQuZGF0YXNldC5taW5zY29yZSwgMTApIDw9IHJlc3VsdC5zY29yZTtcblxuICBmZWVkYmFja0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLnJlcXVpcmVtZW50TGVuZ3RoSWNvbikuY2xhc3NMaXN0LnRvZ2dsZShcbiAgICAndGV4dC1zdWNjZXNzJyxcbiAgICBwYXNzd29yZExlbmd0aFZhbGlkLFxuICApO1xuXG4gIGVsZW1lbnRJY29uLmNsYXNzTGlzdC50b2dnbGUoXG4gICAgJ3RleHQtc3VjY2VzcycsXG4gICAgcGFzc3dvcmRTY29yZVZhbGlkLFxuICApO1xuXG4gIC8vIENoYW5nZSBpbnB1dCBib3JkZXIgY29sb3IgZGVwZW5kaW5nIG9uIHRoZSB2YWxpZGl0eVxuICBlbGVtZW50SW5wdXRcbiAgICAuY2xhc3NMaXN0LnJlbW92ZSgnYm9yZGVyLXN1Y2Nlc3MnLCAnYm9yZGVyLWRhbmdlcicpO1xuICBlbGVtZW50SW5wdXRcbiAgICAuY2xhc3NMaXN0LmFkZChwYXNzd29yZFNjb3JlVmFsaWQgJiYgcGFzc3dvcmRMZW5ndGhWYWxpZCA/ICdib3JkZXItc3VjY2VzcycgOiAnYm9yZGVyLWRhbmdlcicpO1xuICBlbGVtZW50SW5wdXRcbiAgICAuY2xhc3NMaXN0LmFkZCgnZm9ybS1jb250cm9sJywgJ2JvcmRlcicpO1xuXG4gIGNvbnN0IHBlcmNlbnRhZ2UgPSAocmVzdWx0LnNjb3JlICogMjApICsgMjA7XG4gIGNvbnN0IHByb2dyZXNzQmFyID0gZmVlZGJhY2tDb250YWluZXIucXVlcnlTZWxlY3RvcihQYXNzd29yZFBvbGljeU1hcC5wcm9ncmVzc0Jhcik7XG5cbiAgLy8gaW5jcmVhc2UgYW5kIGRlY3JlYXNlIHByb2dyZXNzIGJhclxuICBpZiAocHJvZ3Jlc3NCYXIpIHtcbiAgICBwcm9ncmVzc0Jhci5zdHlsZS53aWR0aCA9IGAke3BlcmNlbnRhZ2V9JWA7XG4gICAgcHJvZ3Jlc3NCYXIuY2xhc3NMaXN0LnJlbW92ZSgnYmctc3VjY2VzcycsICdiZy1kYW5nZXInLCAnYmctd2FybmluZycpO1xuICAgIHByb2dyZXNzQmFyLmNsYXNzTGlzdC5hZGQoZmVlZGJhY2suY29sb3IpO1xuICB9XG59O1xuXG4vLyBOb3QgdGVzdGFibGUgYmVjYXVzZSBpdCBtYW5pcHVsYXRlcyBTVkcgZWxlbWVudHMsIHVuc3VwcG9ydGVkIGJ5IEpTRG9tXG5jb25zdCB1c2VQYXNzd29yZFBvbGljeSA9IChzZWxlY3RvcikgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgaW5wdXRDb2x1bW4gPSBlbGVtZW50Py5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLmlucHV0Q29sdW1uKTtcbiAgICBjb25zdCBlbGVtZW50SW5wdXQgPSBlbGVtZW50Py5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgIGNvbnN0IHRlbXBsYXRlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IGZlZWRiYWNrVGVtcGxhdGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLnRlbXBsYXRlKTtcbiAgICBsZXQgZmVlZGJhY2tDb250YWluZXI7XG5cbiAgICBpZiAoZmVlZGJhY2tUZW1wbGF0ZSAmJiBlbGVtZW50ICYmIGlucHV0Q29sdW1uICYmIGVsZW1lbnRJbnB1dCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmlubmVySFRNTCA9IGZlZWRiYWNrVGVtcGxhdGUuaW5uZXJIVE1MO1xuICAgICAgaW5wdXRDb2x1bW4uYXBwZW5kKHRlbXBsYXRlRWxlbWVudCk7XG4gICAgICBmZWVkYmFja0NvbnRhaW5lciA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcihQYXNzd29yZFBvbGljeU1hcC5jb250YWluZXIpO1xuXG4gICAgICBpZiAoZmVlZGJhY2tDb250YWluZXIpIHtcbiAgICAgICAgY29uc3QgaGludEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLmhpbnQpO1xuXG4gICAgICAgIGlmIChoaW50RWxlbWVudCkge1xuICAgICAgICAgIGNvbnN0IGhpbnRzID0gSlNPTi5wYXJzZShoaW50RWxlbWVudC5pbm5lckhUTUwpO1xuXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICBjb25zdCBwYXNzd29yZFJlcXVpcmVtZW50c0xlbmd0aCA9IGZlZWRiYWNrQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoUGFzc3dvcmRQb2xpY3lNYXAucmVxdWlyZW1lbnRMZW5ndGgpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgY29uc3QgcGFzc3dvcmRSZXF1aXJlbWVudHNTY29yZSA9IGZlZWRiYWNrQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoUGFzc3dvcmRQb2xpY3lNYXAucmVxdWlyZW1lbnRTY29yZSk7XG4gICAgICAgICAgY29uc3QgcGFzc3dvcmRMZW5ndGhUZXh0ID0gcGFzc3dvcmRSZXF1aXJlbWVudHNMZW5ndGg/LnF1ZXJ5U2VsZWN0b3IoJ3NwYW4nKTtcbiAgICAgICAgICBjb25zdCBwYXNzd29yZFJlcXVpcmVtZW50c1RleHQgPSBwYXNzd29yZFJlcXVpcmVtZW50c1Njb3JlPy5xdWVyeVNlbGVjdG9yKCdzcGFuJyk7XG5cbiAgICAgICAgICBpZiAocGFzc3dvcmRMZW5ndGhUZXh0ICYmIHBhc3N3b3JkUmVxdWlyZW1lbnRzTGVuZ3RoICYmIHBhc3N3b3JkUmVxdWlyZW1lbnRzTGVuZ3RoLmRhdGFzZXQudHJhbnNsYXRpb24pIHtcbiAgICAgICAgICAgIHBhc3N3b3JkTGVuZ3RoVGV4dC5pbm5lclRleHQgPSBzcHJpbnRmKFxuICAgICAgICAgICAgICBwYXNzd29yZFJlcXVpcmVtZW50c0xlbmd0aC5kYXRhc2V0LnRyYW5zbGF0aW9uLFxuICAgICAgICAgICAgICBlbGVtZW50SW5wdXQuZGF0YXNldC5taW5sZW5ndGgsXG4gICAgICAgICAgICAgIGVsZW1lbnRJbnB1dC5kYXRhc2V0Lm1heGxlbmd0aCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhc3N3b3JkUmVxdWlyZW1lbnRzVGV4dCAmJiBwYXNzd29yZFJlcXVpcmVtZW50c1Njb3JlICYmIHBhc3N3b3JkUmVxdWlyZW1lbnRzU2NvcmUuZGF0YXNldC50cmFuc2xhdGlvbikge1xuICAgICAgICAgICAgcGFzc3dvcmRSZXF1aXJlbWVudHNUZXh0LmlubmVyVGV4dCA9IHNwcmludGYoXG4gICAgICAgICAgICAgIHBhc3N3b3JkUmVxdWlyZW1lbnRzU2NvcmUuZGF0YXNldC50cmFuc2xhdGlvbixcbiAgICAgICAgICAgICAgaGludHNbZWxlbWVudElucHV0LmRhdGFzZXQubWluc2NvcmVdLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgIGVsZW1lbnRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsICgpID0+IHdhdGNoUGFzc3dvcmQoZWxlbWVudElucHV0LCBmZWVkYmFja0NvbnRhaW5lciwgaGludHMpKTtcbiAgICAgICAgICBlbGVtZW50SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHtcbiAgICAgICAgICAgICQoZWxlbWVudElucHV0KS5wb3BvdmVyKCdkaXNwb3NlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiBuZXcgRXJyb3IoUEFTU1dPUkRfUE9MSUNZX0VSUk9SKSxcbiAgICB9O1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVBhc3N3b3JkUG9saWN5O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHByZXN0YXNob3AgZnJvbSAncHJlc3Rhc2hvcCc7XG5pbXBvcnQgRHJvcERvd24gZnJvbSAnLi9kcm9wLWRvd24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3BNZW51IGV4dGVuZHMgRHJvcERvd24ge1xuICBpbml0KCkge1xuICAgIGxldCBlbG10Q2xhc3M7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5lbC5maW5kKCdsaScpLm9uKCdtb3VzZWVudGVyIG1vdXNlbGVhdmUnLCAoZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuZWwucGFyZW50KCkuaGFzQ2xhc3MoJ21vYmlsZScpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXRDbGFzcyA9ICQoZS5jdXJyZW50VGFyZ2V0KS5hdHRyKCdjbGFzcycpO1xuXG4gICAgICBpZiAoZWxtdENsYXNzICE9PSBjdXJyZW50VGFyZ2V0Q2xhc3MpIHtcbiAgICAgICAgY29uc3QgY2xhc3Nlc1NlbGVjdGVkID0gQXJyYXkucHJvdG90eXBlLnNsaWNlXG4gICAgICAgICAgLmNhbGwoZS5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdClcbiAgICAgICAgICAubWFwKChlbGVtKSA9PiAodHlwZW9mIGVsZW0gPT09ICdzdHJpbmcnID8gYC4ke2VsZW19YCA6IGZhbHNlKSk7XG5cbiAgICAgICAgZWxtdENsYXNzID0gY2xhc3Nlc1NlbGVjdGVkLmpvaW4oJycpO1xuXG4gICAgICAgIGlmIChlbG10Q2xhc3MgJiYgJChlLnRhcmdldCkuZGF0YSgnZGVwdGgnKSA9PT0gMCkge1xuICAgICAgICAgICQoYCR7ZWxtdENsYXNzfSAuanMtc3ViLW1lbnVgKS5jc3Moe1xuICAgICAgICAgICAgdG9wOiAkKGAke2VsbXRDbGFzc31gKS5oZWlnaHQoKSArICQoYCR7ZWxtdENsYXNzfWApLnBvc2l0aW9uKCkudG9wLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgJCgnI21lbnUtaWNvbicpLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAgICQoJyNtb2JpbGVfdG9wX21lbnVfd3JhcHBlcicpLnRvZ2dsZSgpO1xuICAgICAgc2VsZi50b2dnbGVNb2JpbGVNZW51KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVsLm9uKCdjbGljaycsIChlKSA9PiB7XG4gICAgICBpZiAodGhpcy5lbC5wYXJlbnQoKS5oYXNDbGFzcygnbW9iaWxlJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcblxuICAgIHByZXN0YXNob3Aub24oJ3Jlc3BvbnNpdmUgdXBkYXRlJywgKCkgPT4ge1xuICAgICAgJCgnLmpzLXN1Yi1tZW51JykucmVtb3ZlQXR0cignc3R5bGUnKTtcbiAgICAgIHNlbGYudG9nZ2xlTW9iaWxlTWVudSgpO1xuICAgIH0pO1xuICAgIHN1cGVyLmluaXQoKTtcbiAgfVxuXG4gIHRvZ2dsZU1vYmlsZU1lbnUoKSB7XG4gICAgJCgnI2hlYWRlcicpLnRvZ2dsZUNsYXNzKCdpcy1vcGVuJyk7XG4gICAgaWYgKCQoJyNtb2JpbGVfdG9wX21lbnVfd3JhcHBlcicpLmlzKCc6dmlzaWJsZScpKSB7XG4gICAgICAkKCcjbm90aWZpY2F0aW9ucywgI3dyYXBwZXIsICNmb290ZXInKS5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICQoJyNub3RpZmljYXRpb25zLCAjd3JhcHBlciwgI2Zvb3RlcicpLnNob3coKTtcbiAgICB9XG4gIH1cbn1cbiIsIlwiZnVuY3Rpb25cIiE9dHlwZW9mIE9iamVjdC5jcmVhdGUmJihPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG8oKXt9cmV0dXJuIG8ucHJvdG90eXBlPXQsbmV3IG99KSxmdW5jdGlvbih0LG8saSxzKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17X3Bvc2l0aW9uQ2xhc3NlczpbXCJib3R0b20tbGVmdFwiLFwiYm90dG9tLXJpZ2h0XCIsXCJ0b3AtcmlnaHRcIixcInRvcC1sZWZ0XCIsXCJib3R0b20tY2VudGVyXCIsXCJ0b3AtY2VudGVyXCIsXCJtaWQtY2VudGVyXCJdLF9kZWZhdWx0SWNvbnM6W1wic3VjY2Vzc1wiLFwiZXJyb3JcIixcImluZm9cIixcIndhcm5pbmdcIl0saW5pdDpmdW5jdGlvbihvLGkpe3RoaXMucHJlcGFyZU9wdGlvbnMobyx0LnRvYXN0Lm9wdGlvbnMpLHRoaXMucHJvY2VzcygpfSxwcmVwYXJlT3B0aW9uczpmdW5jdGlvbihvLGkpe3ZhciBzPXt9O1wic3RyaW5nXCI9PXR5cGVvZiBvfHxvIGluc3RhbmNlb2YgQXJyYXk/cy50ZXh0PW86cz1vLHRoaXMub3B0aW9ucz10LmV4dGVuZCh7fSxpLHMpfSxwcm9jZXNzOmZ1bmN0aW9uKCl7dGhpcy5zZXR1cCgpLHRoaXMuYWRkVG9Eb20oKSx0aGlzLnBvc2l0aW9uKCksdGhpcy5iaW5kVG9hc3QoKSx0aGlzLmFuaW1hdGUoKX0sc2V0dXA6ZnVuY3Rpb24oKXt2YXIgbz1cIlwiO2lmKHRoaXMuX3RvYXN0RWw9dGhpcy5fdG9hc3RFbHx8dChcIjxkaXY+PC9kaXY+XCIse1wiY2xhc3NcIjpcImpxLXRvYXN0LXNpbmdsZVwifSksbys9JzxzcGFuIGNsYXNzPVwianEtdG9hc3QtbG9hZGVyXCI+PC9zcGFuPicsdGhpcy5vcHRpb25zLmFsbG93VG9hc3RDbG9zZSYmKG8rPSc8c3BhbiBjbGFzcz1cImNsb3NlLWpxLXRvYXN0LXNpbmdsZVwiPiZ0aW1lczs8L3NwYW4+JyksdGhpcy5vcHRpb25zLnRleHQgaW5zdGFuY2VvZiBBcnJheSl7dGhpcy5vcHRpb25zLmhlYWRpbmcmJihvKz0nPGgyIGNsYXNzPVwianEtdG9hc3QtaGVhZGluZ1wiPicrdGhpcy5vcHRpb25zLmhlYWRpbmcrXCI8L2gyPlwiKSxvKz0nPHVsIGNsYXNzPVwianEtdG9hc3QtdWxcIj4nO2Zvcih2YXIgaT0wO2k8dGhpcy5vcHRpb25zLnRleHQubGVuZ3RoO2krKylvKz0nPGxpIGNsYXNzPVwianEtdG9hc3QtbGlcIiBpZD1cImpxLXRvYXN0LWl0ZW0tJytpKydcIj4nK3RoaXMub3B0aW9ucy50ZXh0W2ldK1wiPC9saT5cIjtvKz1cIjwvdWw+XCJ9ZWxzZSB0aGlzLm9wdGlvbnMuaGVhZGluZyYmKG8rPSc8aDIgY2xhc3M9XCJqcS10b2FzdC1oZWFkaW5nXCI+Jyt0aGlzLm9wdGlvbnMuaGVhZGluZytcIjwvaDI+XCIpLG8rPXRoaXMub3B0aW9ucy50ZXh0O3RoaXMuX3RvYXN0RWwuaHRtbChvKSx0aGlzLm9wdGlvbnMuYmdDb2xvciE9PSExJiZ0aGlzLl90b2FzdEVsLmNzcyhcImJhY2tncm91bmQtY29sb3JcIix0aGlzLm9wdGlvbnMuYmdDb2xvciksdGhpcy5vcHRpb25zLnRleHRDb2xvciE9PSExJiZ0aGlzLl90b2FzdEVsLmNzcyhcImNvbG9yXCIsdGhpcy5vcHRpb25zLnRleHRDb2xvciksdGhpcy5vcHRpb25zLnRleHRBbGlnbiYmdGhpcy5fdG9hc3RFbC5jc3MoXCJ0ZXh0LWFsaWduXCIsdGhpcy5vcHRpb25zLnRleHRBbGlnbiksdGhpcy5vcHRpb25zLmljb24hPT0hMSYmKHRoaXMuX3RvYXN0RWwuYWRkQ2xhc3MoXCJqcS1oYXMtaWNvblwiKSwtMSE9PXQuaW5BcnJheSh0aGlzLm9wdGlvbnMuaWNvbix0aGlzLl9kZWZhdWx0SWNvbnMpJiZ0aGlzLl90b2FzdEVsLmFkZENsYXNzKFwianEtaWNvbi1cIit0aGlzLm9wdGlvbnMuaWNvbikpLHRoaXMub3B0aW9uc1tcImNsYXNzXCJdIT09ITEmJnRoaXMuX3RvYXN0RWwuYWRkQ2xhc3ModGhpcy5vcHRpb25zW1wiY2xhc3NcIl0pfSxwb3NpdGlvbjpmdW5jdGlvbigpe1wic3RyaW5nXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucG9zaXRpb24mJi0xIT09dC5pbkFycmF5KHRoaXMub3B0aW9ucy5wb3NpdGlvbix0aGlzLl9wb3NpdGlvbkNsYXNzZXMpP1wiYm90dG9tLWNlbnRlclwiPT09dGhpcy5vcHRpb25zLnBvc2l0aW9uP3RoaXMuX2NvbnRhaW5lci5jc3Moe2xlZnQ6dChvKS5vdXRlcldpZHRoKCkvMi10aGlzLl9jb250YWluZXIub3V0ZXJXaWR0aCgpLzIsYm90dG9tOjIwfSk6XCJ0b3AtY2VudGVyXCI9PT10aGlzLm9wdGlvbnMucG9zaXRpb24/dGhpcy5fY29udGFpbmVyLmNzcyh7bGVmdDp0KG8pLm91dGVyV2lkdGgoKS8yLXRoaXMuX2NvbnRhaW5lci5vdXRlcldpZHRoKCkvMix0b3A6MjB9KTpcIm1pZC1jZW50ZXJcIj09PXRoaXMub3B0aW9ucy5wb3NpdGlvbj90aGlzLl9jb250YWluZXIuY3NzKHtsZWZ0OnQobykub3V0ZXJXaWR0aCgpLzItdGhpcy5fY29udGFpbmVyLm91dGVyV2lkdGgoKS8yLHRvcDp0KG8pLm91dGVySGVpZ2h0KCkvMi10aGlzLl9jb250YWluZXIub3V0ZXJIZWlnaHQoKS8yfSk6dGhpcy5fY29udGFpbmVyLmFkZENsYXNzKHRoaXMub3B0aW9ucy5wb3NpdGlvbik6XCJvYmplY3RcIj09dHlwZW9mIHRoaXMub3B0aW9ucy5wb3NpdGlvbj90aGlzLl9jb250YWluZXIuY3NzKHt0b3A6dGhpcy5vcHRpb25zLnBvc2l0aW9uLnRvcD90aGlzLm9wdGlvbnMucG9zaXRpb24udG9wOlwiYXV0b1wiLGJvdHRvbTp0aGlzLm9wdGlvbnMucG9zaXRpb24uYm90dG9tP3RoaXMub3B0aW9ucy5wb3NpdGlvbi5ib3R0b206XCJhdXRvXCIsbGVmdDp0aGlzLm9wdGlvbnMucG9zaXRpb24ubGVmdD90aGlzLm9wdGlvbnMucG9zaXRpb24ubGVmdDpcImF1dG9cIixyaWdodDp0aGlzLm9wdGlvbnMucG9zaXRpb24ucmlnaHQ/dGhpcy5vcHRpb25zLnBvc2l0aW9uLnJpZ2h0OlwiYXV0b1wifSk6dGhpcy5fY29udGFpbmVyLmFkZENsYXNzKFwiYm90dG9tLWxlZnRcIil9LGJpbmRUb2FzdDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fdG9hc3RFbC5vbihcImFmdGVyU2hvd25cIixmdW5jdGlvbigpe3QucHJvY2Vzc0xvYWRlcigpfSksdGhpcy5fdG9hc3RFbC5maW5kKFwiLmNsb3NlLWpxLXRvYXN0LXNpbmdsZVwiKS5vbihcImNsaWNrXCIsZnVuY3Rpb24obyl7by5wcmV2ZW50RGVmYXVsdCgpLFwiZmFkZVwiPT09dC5vcHRpb25zLnNob3dIaWRlVHJhbnNpdGlvbj8odC5fdG9hc3RFbC50cmlnZ2VyKFwiYmVmb3JlSGlkZVwiKSx0Ll90b2FzdEVsLmZhZGVPdXQoZnVuY3Rpb24oKXt0Ll90b2FzdEVsLnRyaWdnZXIoXCJhZnRlckhpZGRlblwiKX0pKTpcInNsaWRlXCI9PT10Lm9wdGlvbnMuc2hvd0hpZGVUcmFuc2l0aW9uPyh0Ll90b2FzdEVsLnRyaWdnZXIoXCJiZWZvcmVIaWRlXCIpLHQuX3RvYXN0RWwuc2xpZGVVcChmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVySGlkZGVuXCIpfSkpOih0Ll90b2FzdEVsLnRyaWdnZXIoXCJiZWZvcmVIaWRlXCIpLHQuX3RvYXN0RWwuaGlkZShmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVySGlkZGVuXCIpfSkpfSksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLmJlZm9yZVNob3cmJnRoaXMuX3RvYXN0RWwub24oXCJiZWZvcmVTaG93XCIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMuYmVmb3JlU2hvdygpfSksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLmFmdGVyU2hvd24mJnRoaXMuX3RvYXN0RWwub24oXCJhZnRlclNob3duXCIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMuYWZ0ZXJTaG93bigpfSksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLmJlZm9yZUhpZGUmJnRoaXMuX3RvYXN0RWwub24oXCJiZWZvcmVIaWRlXCIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMuYmVmb3JlSGlkZSgpfSksXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLmFmdGVySGlkZGVuJiZ0aGlzLl90b2FzdEVsLm9uKFwiYWZ0ZXJIaWRkZW5cIixmdW5jdGlvbigpe3Qub3B0aW9ucy5hZnRlckhpZGRlbigpfSl9LGFkZFRvRG9tOmZ1bmN0aW9uKCl7dmFyIG89dChcIi5qcS10b2FzdC13cmFwXCIpO2lmKDA9PT1vLmxlbmd0aD8obz10KFwiPGRpdj48L2Rpdj5cIix7XCJjbGFzc1wiOlwianEtdG9hc3Qtd3JhcFwifSksdChcImJvZHlcIikuYXBwZW5kKG8pKTooIXRoaXMub3B0aW9ucy5zdGFja3x8aXNOYU4ocGFyc2VJbnQodGhpcy5vcHRpb25zLnN0YWNrLDEwKSkpJiZvLmVtcHR5KCksby5maW5kKFwiLmpxLXRvYXN0LXNpbmdsZTpoaWRkZW5cIikucmVtb3ZlKCksby5hcHBlbmQodGhpcy5fdG9hc3RFbCksdGhpcy5vcHRpb25zLnN0YWNrJiYhaXNOYU4ocGFyc2VJbnQodGhpcy5vcHRpb25zLnN0YWNrKSwxMCkpe3ZhciBpPW8uZmluZChcIi5qcS10b2FzdC1zaW5nbGVcIikubGVuZ3RoLHM9aS10aGlzLm9wdGlvbnMuc3RhY2s7cz4wJiZ0KFwiLmpxLXRvYXN0LXdyYXBcIikuZmluZChcIi5qcS10b2FzdC1zaW5nbGVcIikuc2xpY2UoMCxzKS5yZW1vdmUoKX10aGlzLl9jb250YWluZXI9b30sY2FuQXV0b0hpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmhpZGVBZnRlciE9PSExJiYhaXNOYU4ocGFyc2VJbnQodGhpcy5vcHRpb25zLmhpZGVBZnRlciwxMCkpfSxwcm9jZXNzTG9hZGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY2FuQXV0b0hpZGUoKXx8dGhpcy5vcHRpb25zLmxvYWRlcj09PSExKXJldHVybiExO3ZhciB0PXRoaXMuX3RvYXN0RWwuZmluZChcIi5qcS10b2FzdC1sb2FkZXJcIiksbz0odGhpcy5vcHRpb25zLmhpZGVBZnRlci00MDApLzFlMytcInNcIixpPXRoaXMub3B0aW9ucy5sb2FkZXJCZyxzPXQuYXR0cihcInN0eWxlXCIpfHxcIlwiO3M9cy5zdWJzdHJpbmcoMCxzLmluZGV4T2YoXCItd2Via2l0LXRyYW5zaXRpb25cIikpLHMrPVwiLXdlYmtpdC10cmFuc2l0aW9uOiB3aWR0aCBcIitvK1wiIGVhc2UtaW47ICAgICAgICAgICAgICAgICAgICAgICAtby10cmFuc2l0aW9uOiB3aWR0aCBcIitvK1wiIGVhc2UtaW47ICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCBcIitvK1wiIGVhc2UtaW47ICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIitpK1wiO1wiLHQuYXR0cihcInN0eWxlXCIscykuYWRkQ2xhc3MoXCJqcS10b2FzdC1sb2FkZWRcIil9LGFuaW1hdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuX3RvYXN0RWwuaGlkZSgpLHRoaXMuX3RvYXN0RWwudHJpZ2dlcihcImJlZm9yZVNob3dcIiksXCJmYWRlXCI9PT10aGlzLm9wdGlvbnMuc2hvd0hpZGVUcmFuc2l0aW9uLnRvTG93ZXJDYXNlKCk/dGhpcy5fdG9hc3RFbC5mYWRlSW4oZnVuY3Rpb24oKXt0Ll90b2FzdEVsLnRyaWdnZXIoXCJhZnRlclNob3duXCIpfSk6XCJzbGlkZVwiPT09dGhpcy5vcHRpb25zLnNob3dIaWRlVHJhbnNpdGlvbi50b0xvd2VyQ2FzZSgpP3RoaXMuX3RvYXN0RWwuc2xpZGVEb3duKGZ1bmN0aW9uKCl7dC5fdG9hc3RFbC50cmlnZ2VyKFwiYWZ0ZXJTaG93blwiKX0pOnRoaXMuX3RvYXN0RWwuc2hvdyhmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVyU2hvd25cIil9KSx0aGlzLmNhbkF1dG9IaWRlKCkpe3ZhciB0PXRoaXM7by5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XCJmYWRlXCI9PT10Lm9wdGlvbnMuc2hvd0hpZGVUcmFuc2l0aW9uLnRvTG93ZXJDYXNlKCk/KHQuX3RvYXN0RWwudHJpZ2dlcihcImJlZm9yZUhpZGVcIiksdC5fdG9hc3RFbC5mYWRlT3V0KGZ1bmN0aW9uKCl7dC5fdG9hc3RFbC50cmlnZ2VyKFwiYWZ0ZXJIaWRkZW5cIil9KSk6XCJzbGlkZVwiPT09dC5vcHRpb25zLnNob3dIaWRlVHJhbnNpdGlvbi50b0xvd2VyQ2FzZSgpPyh0Ll90b2FzdEVsLnRyaWdnZXIoXCJiZWZvcmVIaWRlXCIpLHQuX3RvYXN0RWwuc2xpZGVVcChmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVySGlkZGVuXCIpfSkpOih0Ll90b2FzdEVsLnRyaWdnZXIoXCJiZWZvcmVIaWRlXCIpLHQuX3RvYXN0RWwuaGlkZShmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVySGlkZGVuXCIpfSkpfSx0aGlzLm9wdGlvbnMuaGlkZUFmdGVyKX19LHJlc2V0OmZ1bmN0aW9uKG8pe1wiYWxsXCI9PT1vP3QoXCIuanEtdG9hc3Qtd3JhcFwiKS5yZW1vdmUoKTp0aGlzLl90b2FzdEVsLnJlbW92ZSgpfSx1cGRhdGU6ZnVuY3Rpb24odCl7dGhpcy5wcmVwYXJlT3B0aW9ucyh0LHRoaXMub3B0aW9ucyksdGhpcy5zZXR1cCgpLHRoaXMuYmluZFRvYXN0KCl9fTt0LnRvYXN0PWZ1bmN0aW9uKHQpe3ZhciBvPU9iamVjdC5jcmVhdGUobik7cmV0dXJuIG8uaW5pdCh0LHRoaXMpLHtyZXNldDpmdW5jdGlvbih0KXtvLnJlc2V0KHQpfSx1cGRhdGU6ZnVuY3Rpb24odCl7by51cGRhdGUodCl9fX0sdC50b2FzdC5vcHRpb25zPXt0ZXh0OlwiXCIsaGVhZGluZzpcIlwiLHNob3dIaWRlVHJhbnNpdGlvbjpcImZhZGVcIixhbGxvd1RvYXN0Q2xvc2U6ITAsaGlkZUFmdGVyOjNlMyxsb2FkZXI6ITAsbG9hZGVyQmc6XCIjOUVDNjAwXCIsc3RhY2s6NSxwb3NpdGlvbjpcImJvdHRvbS1sZWZ0XCIsYmdDb2xvcjohMSx0ZXh0Q29sb3I6ITEsdGV4dEFsaWduOlwibGVmdFwiLGljb246ITEsYmVmb3JlU2hvdzpmdW5jdGlvbigpe30sYWZ0ZXJTaG93bjpmdW5jdGlvbigpe30sYmVmb3JlSGlkZTpmdW5jdGlvbigpe30sYWZ0ZXJIaWRkZW46ZnVuY3Rpb24oKXt9fX0oalF1ZXJ5LHdpbmRvdyxkb2N1bWVudCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgcHJlc3Rhc2hvcCBmcm9tICdwcmVzdGFzaG9wJztcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgJ2pxdWVyeS10b2FzdC1wbHVnaW4nO1xuaW1wb3J0ICdqcXVlcnktdG9hc3QtcGx1Z2luL2Rpc3QvanF1ZXJ5LnRvYXN0Lm1pbi5jc3MnO1xuXG4kKCgpID0+IHtcbiAgcHJlc3Rhc2hvcC5ibG9ja2NhcnQgPSBwcmVzdGFzaG9wLmJsb2NrY2FydCB8fCB7fTtcbiAgY29uc3Qgc2hvd01vZGFsID0gcHJlc3Rhc2hvcC5ibG9ja2NhcnQuc2hvd01vZGFsXG4gICAgfHwgZnVuY3Rpb24gKG1vZGFsKSB7XG4gICAgICBjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcbiAgICAgICRib2R5LmFwcGVuZChtb2RhbCk7XG4gICAgICAkKCcjYmxvY2tjYXJ0LW1vZGFsJykubW9kYWwoKTtcbiAgICAgIGNvbnNvbGUubG9nKCdjYWxsZWQnKTtcbiAgICAgICRib2R5Lm9uZSgnY2xpY2snLCAnI2Jsb2NrY2FydC1tb2RhbCcsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmlkID09PSAnYmxvY2tjYXJ0LW1vZGFsJykge1xuICAgICAgICAgICQubW9kYWwuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgcHJlc3Rhc2hvcC5vbigndXBkYXRlQ2FydCcsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHJlZnJlc2hVUkwgPSAkKCcuYmxvY2tjYXJ0JykuZGF0YSgncmVmcmVzaC11cmwnKTtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSB7fTtcblxuICAgIGlmIChcbiAgICAgIGV2ZW50XG4gICAgICAmJiBldmVudC5yZWFzb25cbiAgICAgICYmIHR5cGVvZiBldmVudC5yZXNwICE9PSAndW5kZWZpbmVkJ1xuICAgICAgJiYgIWV2ZW50LnJlc3AuaGFzRXJyb3JcbiAgICApIHtcbiAgICAgIHJlcXVlc3REYXRhID0ge1xuICAgICAgICBpZF9jdXN0b21pemF0aW9uOiBldmVudC5yZWFzb24uaWRDdXN0b21pemF0aW9uLFxuICAgICAgICBpZF9wcm9kdWN0X2F0dHJpYnV0ZTogZXZlbnQucmVhc29uLmlkUHJvZHVjdEF0dHJpYnV0ZSxcbiAgICAgICAgaWRfcHJvZHVjdDogZXZlbnQucmVhc29uLmlkUHJvZHVjdCxcbiAgICAgICAgYWN0aW9uOiBldmVudC5yZWFzb24ubGlua0FjdGlvbixcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChldmVudCAmJiBldmVudC5yZXNwICYmIGV2ZW50LnJlc3AuaGFzRXJyb3IpIHtcbiAgICAgIHByZXN0YXNob3AuZW1pdCgnc2hvd0Vycm9yTmV4dFRvQWRkdG9DYXJ0QnV0dG9uJywge1xuICAgICAgICBlcnJvck1lc3NhZ2U6IGV2ZW50LnJlc3AuZXJyb3JzLmpvaW4oJzxici8+JyksXG4gICAgICB9KTtcbiAgICB9XG4gICAgJC5wb3N0KHJlZnJlc2hVUkwsIHJlcXVlc3REYXRhKVxuICAgICAgLnRoZW4oKHJlc3ApID0+IHtcbiAgICAgICAgJCgnLmJsb2NrY2FydCcpLnJlcGxhY2VXaXRoKCQocmVzcC5wcmV2aWV3KS5maW5kKCcuYmxvY2tjYXJ0JykpO1xuICAgICAgICBpZiAocmVzcC5tb2RhbCkge1xuICAgICAgICAgICQudG9hc3Qoe1xuICAgICAgICAgICAgaGVhZGluZzogJ0FkZGVkIHRvIENhcnQnLFxuICAgICAgICAgICAgdGV4dDogJ1lvdSBjYW4gY2hlY2tvdXQgb3IgY29udGludWUgc2hvcHBpbmcuJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHRvcDogJzEwMHB4JyxcbiAgICAgICAgICAgICAgcmlnaHQ6ICcyMHB4JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiZ0NvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICB0ZXh0Q29sb3I6ICcjMTExODI3JyxcbiAgICAgICAgICAgIGxvYWRlckJnOiAnIzE3MjU1NCcsXG4gICAgICAgICAgICBjbGFzczogJ3JvdW5kZWQtbm9uZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5mYWlsKChyZXNwKSA9PiB7XG4gICAgICAgIHByZXN0YXNob3AuZW1pdCgnaGFuZGxlRXJyb3InLCB7XG4gICAgICAgICAgZXZlbnRUeXBlOiAndXBkYXRlU2hvcHBpbmdDYXJ0JyxcbiAgICAgICAgICByZXNwLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9KTtcbn0pO1xuIiwiLyoqXG4gKiBqUXVlcnkub2ZmY2FudmFzIHYzLjQuNyAtIEVhc3kgdG8gdXNlIGpRdWVyeSBvZmZjYW52YXMgcGx1Z2luLlxuICogQ29weXJpZ2h0IDIwMTYgTGFycyBHcmF1Ym5lciAtIGh0dHA6Ly9sZ3JhdWJuZXIuZ2l0aHViLmlvL2pxdWVyeS1vZmZjYW52YXMvXG4gKiBMaWNlbnNlOiBNSVRcbiAqL1xuIWZ1bmN0aW9uKHQsZSl7XCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHQscyl7cmV0dXJuIHZvaWQgMD09PXMmJihzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/cmVxdWlyZShcImpxdWVyeVwiKTpyZXF1aXJlKFwianF1ZXJ5XCIpKHQpKSxlKHMpLHN9OlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wianF1ZXJ5IFwiXSxlKTplKGpRdWVyeSl9KHRoaXMsZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSh0LGUscyl7dmFyIGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcyxvPWFyZ3VtZW50cyxoPWZ1bmN0aW9uKCl7aT1udWxsLHN8fHQuYXBwbHkobixvKX0sYT1zJiYhaTtjbGVhclRpbWVvdXQoaSksaT1zZXRUaW1lb3V0KGgsZSksYSYmdC5hcHBseShuLG8pfX1mdW5jdGlvbiBzKGUscyl7dmFyIG4sbyxoPXQoZSkuZGF0YSgpO3RoaXMuJGVsPXQoZSk7Zm9yKG4gaW4gaCloLmhhc093blByb3BlcnR5KG4pJiYvXm9mZmNhbnZhc1tBLVpdKy8udGVzdChuKSYmKG89bltpLmxlbmd0aF0udG9Mb3dlckNhc2UoKStuLnN1YnN0cihpLmxlbmd0aCsxKSxoW29dPWhbbl0pO3RoaXMuc2V0dGluZ3M9dC5leHRlbmQoITAse30sdC5mbltpXS5kZWZhdWx0cyxzLGgpLHRoaXMubmFtZT1pLHRoaXMuJGVsLmRhdGEodGhpcy5uYW1lK1wiLm9wdHNcIix0aGlzLnNldHRpbmdzKSx0aGlzLmluaXQoKX12YXIgaT1cIm9mZmNhbnZhc1wiO3QuZXh0ZW5kKHMucHJvdG90eXBlLHtzZXRIZWlnaHRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kb3V0ZXJXcmFwcGVyLmhlaWdodCgpO3RoaXMuJGVsLmRhdGEodGhpcy5uYW1lK1wiLm9wdHNcIikmJih0aGlzLiRlbGVtZW50LmNzcyhcImhlaWdodFwiLHQpLHRoaXMuc2V0dGluZ3Mub3ZlcmxheSYmdGhpcy4kb3ZlcmxheS5jc3MoXCJoZWlnaHRcIix0KSl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgZT17fTt0aGlzLnZpc2libGV8fCh0aGlzLiRjb250LmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vcGVuKSx0aGlzLnZpc2libGU9ITAsdGhpcy4kZWwudHJpZ2dlcihcInNob3cuXCIrdGhpcy5uYW1lKSx0aGlzLiRlbC50cmlnZ2VyKFwidG9nZ2xlLlwiK3RoaXMubmFtZSx0aGlzLnZpc2libGUpLHRoaXMuc2V0SGVpZ2h0cygpLGVbdGhpcy5zZXR0aW5ncy5vcmlnaW5dPXRoaXMuZWZmZWN0c1t0aGlzLnNldHRpbmdzLmVmZmVjdF0udG8sdGhpcy5lZmZlY3RzW3RoaXMuc2V0dGluZ3MuZWZmZWN0XS4kZWwudmVsb2NpdHkoZSx0LmV4dGVuZCh7Y29tcGxldGU6ZnVuY3Rpb24oKXt0aGlzLiRlbC50cmlnZ2VyKFwic2hvd24uXCIrdGhpcy5uYW1lKSx0aGlzLnNldHRpbmdzLm92ZXJsYXkmJnRoaXMuJG92ZXJsYXkub25lKFwiY2xpY2suXCIrdGhpcy5uYW1lLGZ1bmN0aW9uKCl7dGhpcy5oaWRlKCl9LmJpbmQodGhpcykpfS5iaW5kKHRoaXMpfSx0aGlzLmFuaW1hdGlvbk9wdGlvbnMpKSx0aGlzLnNldHRpbmdzLm92ZXJsYXkmJnRoaXMuJG92ZXJsYXkudmVsb2NpdHkoe29wYWNpdHk6MX0sdC5leHRlbmQoe2Rpc3BsYXk6XCJibG9ja1wifSx0aGlzLmFuaW1hdGlvbk9wdGlvbnMpKSl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLnZpc2libGUmJih0aGlzLiRjb250LnJlbW92ZUNsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vcGVuKSx0aGlzLnZpc2libGU9ITEsdGhpcy4kZWwudHJpZ2dlcihcImhpZGUuXCIrdGhpcy5uYW1lKSx0aGlzLiRlbC50cmlnZ2VyKFwidG9nZ2xlLlwiK3RoaXMubmFtZSx0aGlzLnZpc2libGUpLHRoaXMuZWZmZWN0c1t0aGlzLnNldHRpbmdzLmVmZmVjdF0uJGVsLnZlbG9jaXR5KFwic3RvcFwiKS52ZWxvY2l0eShcInJldmVyc2VcIix0LmV4dGVuZCh7Y29tcGxldGU6ZnVuY3Rpb24oKXt0aGlzLiRlbC50cmlnZ2VyKFwiaGlkZGVuLlwiK3RoaXMubmFtZSl9LmJpbmQodGhpcyl9LHRoaXMuYW5pbWF0aW9uT3B0aW9ucykpLHRoaXMuc2V0dGluZ3Mub3ZlcmxheSYmdGhpcy4kb3ZlcmxheS52ZWxvY2l0eShcInN0b3BcIikudmVsb2NpdHkoXCJyZXZlcnNlXCIsdC5leHRlbmQoe2Rpc3BsYXk6XCJub25lXCJ9LHRoaXMuYW5pbWF0aW9uT3B0aW9ucykpKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMudmlzaWJsZT90aGlzLmhpZGU6dGhpcy5zaG93KS5jYWxsKHRoaXMpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy4kZWwuZGF0YSh0aGlzLm5hbWUrXCIub3B0c1wiKSYmKHRoaXMuJGlubmVyV3JhcHBlci51bndyYXAoKSx0aGlzLiRpbm5lcldyYXBwZXIuY2hpbGRyZW4oKS51bndyYXAoKSx0aGlzLiRjb250LnJlbW92ZUNsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5jb250YWluZXIpLnJlbW92ZUNsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vcGVuKSx0aGlzLnNldHRpbmdzLm92ZXJsYXkmJnRoaXMuJG92ZXJsYXkub2ZmKFwiY2xpY2suXCIrdGhpcy5uYW1lKS5yZW1vdmUoKSx0aGlzLiRlbC51bndyYXAoKS5yZW1vdmVEYXRhKHRoaXMubmFtZStcIi5vcHRzXCIpLnJlbW92ZUF0dHIoXCJzdHlsZVwiKSx0aGlzLiR3aW4ub2ZmKFwicmVzaXplLlwiK3RoaXMubmFtZSkpfSxpbml0OmZ1bmN0aW9uKCl7dmFyIHM9e307dGhpcy4kd2luPXQod2luZG93KSx0aGlzLiRib2R5PXQoXCJib2R5XCIpLHRoaXMudmlzaWJsZT0hMSx0aGlzLiRjb250PXQodGhpcy5zZXR0aW5ncy5jb250YWluZXIpLHRoaXMuJGNvbnQuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5jbGFzc2VzLmNvbnRhaW5lcikuY2hpbGRyZW4oXCI6bm90KHNjcmlwdClcIikud3JhcEFsbCh0KFwiPGRpdi8+XCIpLmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vdXRlcikpLHRoaXMuJG91dGVyV3JhcHBlcj10KFwiLlwiK3RoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vdXRlcikud3JhcElubmVyKHQoXCI8ZGl2Lz5cIikuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5jbGFzc2VzLmlubmVyKSksdGhpcy4kaW5uZXJXcmFwcGVyPXQoXCIuXCIrdGhpcy5zZXR0aW5ncy5jbGFzc2VzLmlubmVyKSx0aGlzLnNldHRpbmdzLm92ZXJsYXkmJih0aGlzLiRpbm5lcldyYXBwZXIuYXBwZW5kKHQoXCI8ZGl2Lz5cIikuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5jbGFzc2VzLm92ZXJsYXkpLmNzcyhcImJhY2tncm91bmQtY29sb3JcIix0aGlzLnNldHRpbmdzLm92ZXJsYXlDb2xvcikpLHRoaXMuJG92ZXJsYXk9dChcIi5cIit0aGlzLnNldHRpbmdzLmNsYXNzZXMub3ZlcmxheSkpLHRoaXMuJGVsLndyYXAodChcIjxkaXYvPlwiKS5hZGRDbGFzcyh0aGlzLnNldHRpbmdzLmNsYXNzZXMuZWxlbWVudCkpLHRoaXMuJGVsZW1lbnQ9dGhpcy4kZWwucGFyZW50KCksc1t0aGlzLnNldHRpbmdzLm9yaWdpbl09XCItXCIrdGhpcy5zZXR0aW5ncy5jb3ZlcmFnZSxzLndpZHRoPXRoaXMuc2V0dGluZ3MuY292ZXJhZ2UsdGhpcy4kZWxlbWVudC5jc3MocyksdGhpcy5lZmZlY3RzPXtwdXNoOnskZWw6dGhpcy4kaW5uZXJXcmFwcGVyLGZyb206MCx0bzp0aGlzLnNldHRpbmdzLmNvdmVyYWdlfSxcInNsaWRlLWluLW92ZXJcIjp7JGVsOnRoaXMuJGVsZW1lbnQsZnJvbTpcIi1cIit0aGlzLnNldHRpbmdzLmNvdmVyYWdlLHRvOjB9fSx0aGlzLmFuaW1hdGlvbk9wdGlvbnM9e2Vhc2luZzp0aGlzLnNldHRpbmdzLmVhc2luZyxkdXJhdGlvbjp0aGlzLnNldHRpbmdzLmR1cmF0aW9ufSx0aGlzLiR3aW4ub24oXCJyZXNpemUuXCIrdGhpcy5uYW1lLGUodGhpcy5zZXRIZWlnaHRzLDMwMCkuYmluZCh0aGlzKSksdGhpcy5zZXRIZWlnaHRzKCksdGhpcy4kZWwudHJpZ2dlcihcImluaXQuXCIrdGhpcy5uYW1lKX19KSx0LmZuW2ldPWZ1bmN0aW9uKGUpe3ZhciBuLG89YXJndW1lbnRzO3JldHVybiB2b2lkIDA9PT1lfHxcIm9iamVjdFwiPT10eXBlb2YgZT90aGlzLmVhY2goZnVuY3Rpb24oKXt0LmRhdGEodGhpcyxcInBsdWdpbl9cIitpKXx8dC5kYXRhKHRoaXMsXCJwbHVnaW5fXCIraSxuZXcgcyh0aGlzLGUpKX0pOlwic3RyaW5nXCI9PXR5cGVvZiBlJiZcIl9cIiE9PWVbMF0mJlwiaW5pdFwiIT09ZSYmKHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBoPXQuZGF0YSh0aGlzLFwicGx1Z2luX1wiK2kpO2ggaW5zdGFuY2VvZiBzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBoW2VdJiYobj1oW2VdLmFwcGx5KGgsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobywxKSkpLFwiZGVzdHJveVwiPT09ZSYmdC5kYXRhKHRoaXMsXCJwbHVnaW5fXCIraSxudWxsKX0pLHZvaWQgMCE9PW4/bjp0aGlzKX0sdC5mbltpXS5kZWZhdWx0cz17Y2xhc3Nlczp7Y29udGFpbmVyOmksZWxlbWVudDppK1wiLWVsZW1lbnRcIixpbm5lcjppK1wiLWlubmVyXCIsb3BlbjppK1wiLW9wZW5cIixvdXRlcjppK1wiLW91dGVyXCIsb3ZlcmxheTppK1wiLW92ZXJsYXlcIn0sY29udGFpbmVyOlwiYm9keVwiLGNvdmVyYWdlOlwiMjIwcHhcIixvcmlnaW46XCJsZWZ0XCIsZHVyYXRpb246MzAwLGVhc2luZzpcImVhc2UtaW4tb3V0XCIsZWZmZWN0OlwicHVzaFwiLG92ZXJsYXk6ITEsb3ZlcmxheUNvbG9yOlwicmdiYSgwLCAwLCAwLCAwLjcpXCJ9fSk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gaW1wb3J0ICdib290c3RyYXAvZGlzdC9qcy9ib290c3RyYXAubWluJztcbmltcG9ydCBcImpxdWVyeS1tb2RhbFwiO1xuLy8gaW1wb3J0IFwianF1ZXJ5LW9mZmNhbnZhcy9kaXN0L2pxdWVyeS5vZmZjYW52YXMubWluLmNzc1wiO1xuaW1wb3J0IFwidG9vbHRpcHN0ZXJcIjtcbmltcG9ydCBcInRvb2x0aXBzdGVyL2Rpc3QvY3NzL3Rvb2x0aXBzdGVyLmJ1bmRsZS5taW4uY3NzXCI7XG5pbXBvcnQgXCJ0b29sdGlwc3Rlci9kaXN0L2Nzcy9wbHVnaW5zL3Rvb2x0aXBzdGVyL3NpZGVUaXAvdGhlbWVzL3Rvb2x0aXBzdGVyLXNpZGVUaXAtc2hhZG93Lm1pbi5jc3NcIjtcbmltcG9ydCB0b3VjaHNwaW4gZnJvbSBcImJvb3RzdHJhcC10b3VjaHNwaW5cIjtcbmltcG9ydCBcImpxdWVyeS10b3VjaHN3aXBlXCI7XG5pbXBvcnQgXCIuL3NlbGVjdG9yc1wiO1xuaW1wb3J0IFwiLi90YWJzLmpzXCI7XG5pbXBvcnQgXCIuL2Vhc3l6b29tXCI7XG5cbmltcG9ydCBcIi4vcmVzcG9uc2l2ZVwiO1xuaW1wb3J0IFwiLi9jaGVja291dFwiO1xuaW1wb3J0IFwiLi9jdXN0b21lclwiO1xuaW1wb3J0IFwiLi9saXN0aW5nXCI7XG5pbXBvcnQgXCIuL3Byb2R1Y3RcIjtcbmltcG9ydCBcIi4vY2FydFwiO1xuaW1wb3J0IFwiLi9mYWNldHNcIjtcblxuaW1wb3J0IHByZXN0YXNob3AgZnJvbSBcInByZXN0YXNob3BcIjtcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IERyb3BEb3duIGZyb20gXCIuL2NvbXBvbmVudHMvZHJvcC1kb3duXCI7XG5pbXBvcnQgRm9ybSBmcm9tIFwiLi9jb21wb25lbnRzL2Zvcm1cIjtcbmltcG9ydCB1c2VQYXNzd29yZFBvbGljeSBmcm9tIFwiLi9jb21wb25lbnRzL3VzZVBhc3N3b3JkUG9saWN5XCI7XG5pbXBvcnQgUHJvZHVjdE1pbml0YXR1cmUgZnJvbSBcIi4vY29tcG9uZW50cy9wcm9kdWN0LW1pbmlhdHVyZVwiO1xuaW1wb3J0IFByb2R1Y3RTZWxlY3QgZnJvbSBcIi4vY29tcG9uZW50cy9wcm9kdWN0LXNlbGVjdFwiO1xuaW1wb3J0IFRvcE1lbnUgZnJvbSBcIi4vY29tcG9uZW50cy90b3AtbWVudVwiO1xuXG5pbXBvcnQgXCIuL2NvbXBvbmVudHMvYmxvY2stY2FydFwiO1xuaW1wb3J0ICQgZnJvbSBcImpxdWVyeVwiO1xuaW1wb3J0IGpvIGZyb20gXCJqcXVlcnktb2ZmY2FudmFzXCI7XG5qbyh3aW5kb3csICQpO1xudG91Y2hzcGluKHdpbmRvdywgJCk7XG4vKiBlc2xpbnQtZW5hYmxlICovXG5cbi8vIFwiaW5oZXJpdFwiIEV2ZW50RW1pdHRlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5mb3IgKGNvbnN0IGkgaW4gRXZlbnRFbWl0dGVyLnByb3RvdHlwZSkge1xuICBwcmVzdGFzaG9wW2ldID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZVtpXTtcbn1cblxuJCgoKSA9PiB7XG4gIGNvbnN0IGRyb3BEb3duRWwgPSAkKCcuanMtZHJvcGRvd24nKTtcbiAgY29uc3QgZm9ybSA9IG5ldyBGb3JtKCk7XG4gIGNvbnN0IHRvcE1lbnVFbCA9ICQoJy5qcy10b3AtbWVudSB1bFtkYXRhLWRlcHRoPVwiMFwiXScpO1xuICBjb25zdCBkcm9wRG93biA9IG5ldyBEcm9wRG93bihkcm9wRG93bkVsKTtcbiAgY29uc3QgdG9wTWVudSA9IG5ldyBUb3BNZW51KHRvcE1lbnVFbCk7XG4gIGNvbnN0IHByb2R1Y3RNaW5pdGF0dXJlID0gbmV3IFByb2R1Y3RNaW5pdGF0dXJlKCk7XG4gIGNvbnN0IHByb2R1Y3RTZWxlY3QgPSBuZXcgUHJvZHVjdFNlbGVjdCgpO1xuICBkcm9wRG93bi5pbml0KCk7XG4gIGZvcm0uaW5pdCgpO1xuICB0b3BNZW51LmluaXQoKTtcbiAgcHJvZHVjdE1pbml0YXR1cmUuaW5pdCgpO1xuICBwcm9kdWN0U2VsZWN0LmluaXQoKTtcbiAgdXNlUGFzc3dvcmRQb2xpY3koJy5maWVsZC1wYXNzd29yZC1wb2xpY3knKTtcblxuXG4gICQoJy5lYXN5em9vbScpLmVhc3lab29tKHtcbiAgfSk7XG5cbiAgJCgnLmNhcm91c2VsW2RhdGEtdG91Y2g9XCJ0cnVlXCJdJykuc3dpcGUoe1xuICAgIHN3aXBlKGV2ZW50LCBkaXJlY3Rpb24pIHtcbiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAkKHRoaXMpLmNhcm91c2VsKCduZXh0Jyk7XG4gICAgICB9XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICQodGhpcykuY2Fyb3VzZWwoJ3ByZXYnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFsbG93UGFnZVNjcm9sbDogJ3ZlcnRpY2FsJyxcbiAgfSk7XG5cbiAgJCgnI3Byb2R1Y3QtbGlzdC10b3AtZmlsdGVycycpLm9mZmNhbnZhcyh7XG4gICAgZHVyYXRpb246IDEwMCxcbiAgICBlZmZlY3Q6ICdzbGlkZS1pbi1vdmVyJyxcbiAgICBjbGFzc2VzOiB7XG4gICAgICBlbGVtZW50OiAnYWJzb2x1dGUgdG9wLTAgei01MCcsXG4gICAgfSxcbiAgfSk7XG5cbiAgJCgnI3Nob3ctZmlsdGVycycpLm9uKCdjbGljay5vZmZjYW52YXMnLCAoKSA9PiB7XG4gICAgJCgnI3Byb2R1Y3QtbGlzdC10b3AtZmlsdGVycycpLnNob3coKTtcbiAgICBcbiAgfSk7XG5cbiAgJCgnI2hpZGUtZmlsdGVycycpLm9uKCdjbGljay5vZmZjYW52YXMnLCAoKSA9PiB7XG4gICAgJCgnI3Byb2R1Y3QtbGlzdC10b3AtZmlsdGVycycpLmhpZGUoKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gVGhBY2NvcmRpb24oKSB7fVxuXG4gICQuZXh0ZW5kKFRoQWNjb3JkaW9uLnByb3RvdHlwZSwge1xuICAgIGluaXQoKSB7fSxcbiAgfSk7XG5cbiAgJC5mbi50aGFjY29yZGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzZWxlY3RvcnMgPSB7XG4gICAgICByb290OiAnLnRoLWFjY29yZGlvbicsXG4gICAgICBpdGVtOiAnLnRoLWFjY29yZGlvbi1pdGVtJyxcbiAgICAgIHRyaWdnZXI6ICcudGgtYWNjb3JkaW9uLWl0ZW0tdHJpZ2dlcicsXG4gICAgICBzdmc6ICcudGgtYWNjb3JkaW9uLWl0ZW0tdHJpZ2dlci1zdmcnLFxuICAgICAgY29udGVudDogJy50aC1hY2NvcmRpb24taXRlbS1jb250ZW50JyxcbiAgICB9O1xuICAgIGxldCBzZWxlY3Rpb24gPSBudWxsO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5maW5kKHNlbGVjdG9ycy5pdGVtKTtcbiAgICBjb25zdCByb3RhdGVDbGFzcyA9ICdyb3RhdGUtOTAgZHVyYXRpb24tNTAwJztcblxuICAgIGZ1bmN0aW9uIGNvbGxhcHNlQWxsKCkge1xuICAgICAgaXRlbXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICQodGhpcykuZmluZChzZWxlY3RvcnMuY29udGVudCkuaGlkZSg1MDApO1xuICAgICAgICAkKHRoaXMpLmZpbmQoc2VsZWN0b3JzLnN2ZykucmVtb3ZlQ2xhc3Mocm90YXRlQ2xhc3MpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgJChzZWxlY3Rpb24pLmZpbmQoc2VsZWN0b3JzLmNvbnRlbnQpLmhpZGUoNTAwKTtcbiAgICAgICQoc2VsZWN0aW9uKS5maW5kKHNlbGVjdG9ycy5zdmcpLnJlbW92ZUNsYXNzKCdyb3RhdGUtOTAnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvcGVuKCkge1xuICAgICAgY29sbGFwc2VBbGwoKTtcbiAgICAgICQoc2VsZWN0aW9uKS5maW5kKHNlbGVjdG9ycy5jb250ZW50KS5zaG93KDUwMCk7XG4gICAgICAkKHNlbGVjdGlvbikuZmluZChzZWxlY3RvcnMuc3ZnKS5hZGRDbGFzcyhyb3RhdGVDbGFzcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPcGVuKGl0ZW0pIHtcbiAgICAgIHJldHVybiAkKGl0ZW0pLmZpbmQoc2VsZWN0b3JzLmNvbnRlbnQpLmlzKCc6dmlzaWJsZScpO1xuICAgIH1cblxuICAgIGNvbGxhcHNlQWxsKCk7XG5cbiAgICBpdGVtcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgJCh0aGlzKVxuICAgICAgICAuZmluZChzZWxlY3RvcnMudHJpZ2dlcilcbiAgICAgICAgLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICBpZiAoc2VsZWN0aW9uID09PSBzZWxmKSB7XG4gICAgICAgICAgICBpZiAoaXNPcGVuKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgY2xvc2UoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9wZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0aW9uID0gc2VsZjtcbiAgICAgICAgICAgIGlmICghaXNPcGVuKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgb3BlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgJCgnLnRoLWFjY29yZGlvbicpLnRoYWNjb3JkaW9uKCk7XG4gICQoJy50b29sdGlwJykudG9vbHRpcHN0ZXIoe1xuICAgIHRoZW1lOiAndG9vbHRpcHN0ZXItc2hhZG93JyxcbiAgICB0cmlnZ2VyT3Blbjoge1xuICAgICAgY2xpY2s6IHRydWUsXG4gICAgICBtb3VzZWVudGVyOiB0cnVlLFxuICAgICAgdG91Y2hzdGFydDogdHJ1ZSxcbiAgICB9LFxuICAgIGRlbGF5VG91Y2g6IFswLCAyMDAwXSxcbiAgfSk7XG5cbiAgJCgnLnRvZ2dsZS1tYWluLW1lbnUnKS5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgJCgnLm1vYmlsZS1tYWluLW1lbnUnKS50b2dnbGUoKTtcbiAgfSk7XG5cdFxufSk7XG5cbiJdLCJuYW1lcyI6WyJyZXF1aXJlJCQwIiwiJCIsIndpbmRvdyIsImRvY3VtZW50IiwidW5kZWZpbmVkIiwibW9kdWxlIiwidGhpcyIsImEiLCJiIiwiYyIsImQiLCJlIiwiZyIsImkiLCJmIiwiaiIsImsiLCJoIiwibCIsIm0iLCJuIiwibyIsInAiLCJvYmoiLCJqUXVlcnkiLCJ2YWx1ZSIsInBoYXNlIiwiZGlyZWN0aW9uIiwiZGlzdGFuY2UiLCJwcmVzdGFzaG9wIiwic2VsZiIsImVsZW0iLCJvZmZzZXRQYXJlbnQiLCJnbG9iYWwiLCIkMiIsImVsZW1lbnQiLCJwcm9wZXJ0eSIsIm9wdHMiLCJjYWxsSW5kZXgiLCJkZWxheUNvbXBsZXRlIiwidmFsdWVEYXRhIiwiZW5kVmFsdWUiLCJlYXNpbmciLCJzdGFydFZhbHVlIiwidHdlZW5EZWx0YSIsIlJlZmxlY3RBcHBseSIsIlJlZmxlY3RPd25LZXlzIiwiTnVtYmVySXNOYU4iLCJldmVudHNNb2R1bGUiLCJldmVudHMiLCJvbmNlIiwic3ByaW50ZiIsInMiLCJ0IiwiRXZlbnRFbWl0dGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBS0EsS0FBQyxTQUFVLFNBQVM7QUFHbUQ7QUFDbkUsZ0JBQVFBLEtBQW1CLFFBQVEsUUFBUTtBQUFBLE1BSTVDO0FBQUEsSUFDRixHQUFDLFNBQVNDLElBQUdDLFNBQVFDLFdBQVVDLGFBQVc7QUFFekMsVUFBSSxTQUFTLENBQUUsR0FDWCxhQUFhLFdBQVc7QUFDdEIsZUFBTyxPQUFPLFNBQVMsT0FBTyxPQUFP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QUksSUFBRSxFQUFFLENBQUM7QUFBRSw0QkFBUSxLQUFHLElBQUUsTUFBSSxJQUFFLEdBQUUsTUFBSSxNQUFJLElBQUUsS0FBSSxJQUFFLE1BQUksSUFBRSxJQUFHLElBQUUsVUFBUSxJQUFFLE1BQUksSUFBRSxHQUFFLEtBQUcsTUFBSSxJQUFFLEtBQUksSUFBRSxNQUFJLElBQUUsSUFBRyxJQUFFO0FBQUEsZ0JBQU87QUFBQyxnQkFBQUEsR0FBRSxPQUFPLEtBQUssU0FBTyxJQUFFLEdBQUVBLEdBQUUsT0FBTyxLQUFLLFFBQU0sSUFBRSxHQUFFQSxHQUFFLE9BQU8sYUFBYSxRQUFNLEdBQUVBLEdBQUUsT0FBTyxhQUFhLE9BQUs7QUFBQSxZQUFDO0FBQUEsUUFBQztBQUFDLFlBQUksSUFBRSxTQUFTVCxJQUFFO0FBQUMsVUFBQVMsR0FBRSxPQUFPLEtBQUssU0FBT1QsR0FBRSxRQUFPUyxHQUFFLE9BQU8sYUFBYSxPQUFLVCxHQUFFLE1BQUtTLEdBQUUsT0FBTyxhQUFhLE1BQUlULEdBQUUsS0FBSVMsR0FBRSxPQUFPLEtBQUssUUFBTVQsR0FBRTtBQUFBLFFBQUs7QUFBRSxhQUFJQyxHQUFFLFNBQVMsRUFBQyxNQUFLLFlBQVcsTUFBSyxHQUFFLFVBQVMsRUFBQyxRQUFPUSxHQUFFLE9BQU8sS0FBSyxRQUFPLE1BQUtBLEdBQUUsT0FBTyxhQUFhLE1BQUssS0FBSUEsR0FBRSxPQUFPLGFBQWEsS0FBSSxPQUFNQSxHQUFFLE9BQU8sS0FBSyxNQUFLLEVBQUMsQ0FBQyxHQUFFQSxHQUFFLE9BQU8sYUFBYSxRQUFNQSxHQUFFLE9BQU8sYUFBYSxPQUFLQSxHQUFFLE9BQU8sS0FBSyxPQUFNQSxHQUFFLE9BQU8sYUFBYSxTQUFPQSxHQUFFLE9BQU8sYUFBYSxNQUFJQSxHQUFFLE9BQU8sS0FBSyxRQUFPQSxHQUFFLE9BQU8sT0FBTyxPQUFLQSxHQUFFLE9BQU8sYUFBYSxPQUFLQSxHQUFFLE9BQU8sT0FBTyxNQUFLQSxHQUFFLE9BQU8sT0FBTyxNQUFJQSxHQUFFLE9BQU8sYUFBYSxNQUFJQSxHQUFFLE9BQU8sT0FBTyxLQUFJQSxHQUFFLE9BQU8sT0FBTyxTQUFPQSxHQUFFLE9BQU8sT0FBTyxNQUFJQSxHQUFFLE9BQU8sS0FBSyxRQUFPQSxHQUFFLE9BQU8sT0FBTyxRQUFNQSxHQUFFLE9BQU8sT0FBTyxPQUFLQSxHQUFFLE9BQU8sS0FBSyxPQUFNQSxHQUFFLFVBQVUsV0FBUyxFQUFDLFFBQU8sRUFBQyxRQUFPQSxHQUFFLFNBQVMsS0FBSyxTQUFPQSxHQUFFLE9BQU8sT0FBTyxRQUFPLE9BQU1BLEdBQUUsU0FBUyxLQUFLLE1BQUssR0FBRSxNQUFLLEVBQUMsUUFBT0EsR0FBRSxTQUFTLEtBQUssUUFBTyxPQUFNQSxHQUFFLE9BQU8sT0FBTyxLQUFJLEdBQUUsT0FBTSxFQUFDLFFBQU9BLEdBQUUsU0FBUyxLQUFLLFFBQU8sT0FBTUEsR0FBRSxTQUFTLEtBQUssUUFBTUEsR0FBRSxPQUFPLE9BQU8sTUFBSyxHQUFFLEtBQUksRUFBQyxRQUFPQSxHQUFFLE9BQU8sT0FBTyxLQUFJLE9BQU1BLEdBQUUsU0FBUyxLQUFLLE1BQUssRUFBQyxHQUFFQSxHQUFFLFVBQVUsU0FBTyxFQUFDLFFBQU8sRUFBQyxRQUFPLEtBQUssSUFBSUEsR0FBRSxPQUFPLEtBQUssU0FBTyxLQUFLLElBQUlBLEdBQUUsT0FBTyxhQUFhLFFBQU8sQ0FBQyxHQUFFLENBQUMsR0FBRSxPQUFNQSxHQUFFLE9BQU8sS0FBSyxNQUFLLEdBQUUsTUFBSyxFQUFDLFFBQU9BLEdBQUUsT0FBTyxLQUFLLFFBQU8sT0FBTSxLQUFLLElBQUlBLEdBQUUsT0FBTyxhQUFhLE1BQUssQ0FBQyxFQUFDLEdBQUUsT0FBTSxFQUFDLFFBQU9BLEdBQUUsT0FBTyxLQUFLLFFBQU8sT0FBTSxLQUFLLElBQUlBLEdBQUUsT0FBTyxLQUFLLFFBQU0sS0FBSyxJQUFJQSxHQUFFLE9BQU8sYUFBYSxPQUFNLENBQUMsR0FBRSxDQUFDLEVBQUMsR0FBRSxLQUFJLEVBQUMsUUFBTyxLQUFLLElBQUlBLEdBQUUsT0FBTyxhQUFhLEtBQUksQ0FBQyxHQUFFLE9B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O0FBQUEsUUFBQyxDQUFDLEdBQUVHLEtBQUVFLEdBQUUsQ0FBQyxHQUFFRixHQUFFLFFBQU0sQ0FBRSxHQUFDQSxHQUFFLE1BQU07QUFBQSxVQUFBLEtBQUk7QUFBQSxVQUFPLEtBQUk7QUFBUSxZQUFBQSxHQUFFLE1BQU0sTUFBSSxLQUFLLE1BQU1BLEdBQUUsU0FBT0EsR0FBRSxLQUFLLFNBQU8sQ0FBQztBQUFFO0FBQUEsVUFBTSxLQUFJO0FBQUEsVUFBUyxLQUFJO0FBQU0sWUFBQUEsR0FBRSxNQUFNLE9BQUssS0FBSyxNQUFNQSxHQUFFLFNBQU9BLEdBQUUsS0FBSyxRQUFNLENBQUM7QUFBQSxRQUFDO0FBQUMsZ0JBQU9BLEdBQUU7VUFBTSxLQUFJO0FBQU8sWUFBQUEsR0FBRSxNQUFNLE9BQUtELEdBQUUsSUFBSSxPQUFPLGFBQWEsT0FBS0MsR0FBRSxVQUFVO0FBQU07QUFBQSxVQUFNLEtBQUk7QUFBUSxZQUFBQSxHQUFFLE1BQU0sT0FBS0QsR0FBRSxJQUFJLE9BQU8sYUFBYSxRQUFNQyxHQUFFLFNBQVM7QUFBVztBQUFBLFVBQU0sS0FBSTtBQUFNLFlBQUFBLEdBQUUsTUFBTSxNQUFJRCxHQUFFLElBQUksT0FBTyxhQUFhLE1BQUlDLEdBQUUsVUFBVTtBQUFPO0FBQUEsVUFBTSxLQUFJO0FBQVMsWUFBQUEsR0FBRSxNQUFNLE1BQUlELEdBQUUsSUFBSSxPQUFPLGFBQWEsU0FBT0MsR0FBRSxTQUFTO0FBQUEsUUFBUTtBQUFDLG9CQUFVQSxHQUFFLFlBQVUsU0FBT0EsR0FBRSxRQUFNLFlBQVVBLEdBQUUsT0FBS0EsR0FBRSxNQUFNLE9BQUssSUFBRUQsR0FBRSxJQUFJLE9BQU8sYUFBYSxRQUFNLEtBQUssVUFBVSxtQkFBaUIsSUFBRUMsR0FBRSxNQUFNLE9BQUssSUFBRUEsR0FBRSxNQUFNLE9BQUtELEdBQUUsSUFBSSxPQUFPLGFBQWEsUUFBTSxLQUFLLFVBQVUsa0JBQWdCLElBQUVDLEdBQUUsTUFBTSxPQUFLRCxHQUFFLElBQUksT0FBTyxLQUFLLFFBQU1DLEdBQUUsS0FBSyxVQUFR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QUFTLEtBQUssU0FBUyxRQUFRLElBQUksR0FBRSxLQUFLLFVBQVEsTUFBRyxLQUFLLElBQUksUUFBUSxVQUFRLEtBQUssSUFBSSxHQUFFLEtBQUssSUFBSSxRQUFRLFlBQVUsS0FBSyxNQUFLLEtBQUssT0FBTyxHQUFFLEtBQUssV0FBWSxHQUFDQSxHQUFFLEtBQUssU0FBUyxNQUFNLElBQUUsS0FBSyxRQUFRLEtBQUssU0FBUyxNQUFNLEVBQUUsSUFBRyxLQUFLLFFBQVEsS0FBSyxTQUFTLE1BQU0sRUFBRSxJQUFJLFNBQVNBLElBQUUsRUFBRSxPQUFPLEVBQUMsV0FBUyxXQUFVO0FBQUMsZUFBSyxJQUFJLFFBQVEsV0FBUyxLQUFLLElBQUksR0FBRSxLQUFLLFNBQVMsV0FBUyxLQUFLLFNBQVMsSUFBSSxXQUFTLEtBQUssT0FBSyxXQUFVO0FBQUMsaUJBQUssS0FBSTtBQUFBLFVBQUUsR0FBRSxLQUFLLElBQUksQ0FBQztBQUFBLFFBQUMsR0FBRSxLQUFLLElBQUksRUFBQyxHQUFFLEtBQUssZ0JBQWdCLENBQUMsR0FBRSxLQUFLLFNBQVMsV0FBUyxLQUFLLFNBQVMsU0FBUyxFQUFDLFNBQVEsRUFBQyxHQUFFLEVBQUUsT0FBTyxFQUFDLFNBQVEsUUFBTyxHQUFFLEtBQUssZ0JBQWdCLENBQUM7QUFBQSxNQUFFLEdBQUUsTUFBSyxXQUFVO0FBQUMsYUFBSyxZQUFVLEtBQUssTUFBTSxZQUFZLEtBQUssU0FBUyxRQUFRLElBQUksR0FBRSxLQUFLLFVBQVEsT0FBRyxLQUFLLElBQUksUUFBUSxVQUFRLEtBQUssSUFBSSxHQUFFLEtBQUssSUFBSSxRQUFRLFlBQVUsS0FBSyxNQUFLLEtBQUssT0FBTyxHQUFFLEtBQUssUUFBUSxLQUFLLFNBQVMsTUFBTSxFQUFFLElBQUksU0FBUyxNQUFNLEVBQUUsU0FBUyxXQUFVLEVBQUUsT0FBTyxFQUFDLFdBQVMsV0FBVTtBQUFDLGVBQUssSUFBSSxRQUFRLFlBQVUsS0FBSyxJQUFJO0FBQUEsUUFBQyxHQUFFLEtBQUssSUFBSSxFQUFDLEdBQUUsS0FBSyxnQkFB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QUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxTQUFTO0FBQUEsTUFDZjtBQUNJLFVBQUksWUFBWTtBQUNoQixZQUFNLFFBQVEsS0FBSyxLQUFLLFVBQVUsSUFBSTtBQUN0QyxZQUFNLGNBQWM7QUFFcEIsZUFBUyxjQUFjO0FBQ3JCLGNBQU0sS0FBSyxXQUFZO0FBQ3JCQSxjQUFFLElBQUksRUFBRSxLQUFLLFVBQVUsT0FBTyxFQUFFLEtBQUssR0FBRztBQUN4Q0EsY0FBRSxJQUFJLEVBQUUsS0FBSyxVQUFVLEdBQUcsRUFBRSxZQUFZLFdBQVc7QUFBQSxRQUMzRCxDQUFPO0FBQUEsTUFDRjtBQUNELGVBQVMsUUFBUTtBQUNmQSxZQUFFLFNBQVMsRUFBRSxLQUFLLFVBQVUsT0FBTyxFQUFFLEtBQUssR0FBRztBQUM3Q0EsWUFBRSxTQUFTLEVBQUUsS0FBSyxVQUFVLEdBQUcsRUFBRSxZQUFZLFdBQVc7QUFBQSxNQUN6RDtBQUVELGVBQVMsT0FBTztBQUNkO0FBQ0FBLFlBQUUsU0FBUyxFQUFFLEtBQUssVUFBVSxPQUFPLEVBQUUsS0FBSyxHQUFHO0FBQzdDQSxZQUFFLFNBQVMsRUFBRSxLQUFLLFVBQVUsR0FBRyxFQUFFLFNBQVMsV0FBVztBQUFBLE1BQ3REO0FBRUQsZUFBUyxPQUFPLE1BQU07QUFDcEIsZUFBT0EsSUFBRSxJQUFJLEVBQUUsS0FBSyxVQUFVLE9BQU8sRUFBRSxHQUFHLFVBQVU7QUFBQSxNQUNyRDtBQUVEO0FBRUEsWUFBTSxLQUFLLFdBQVk7QUFDckIsY0FBTTZCLFFBQU87QUFDYjdCLFlBQUUsSUFBSSxFQUNILEtBQUssVUFBVSxPQUFPLEVBQ3RCLEdBQUcsU0FBUyxNQUFNO0FBQ2pCLGNBQUksY0FBYzZCLE9BQU07QUFDdEIsZ0JBQUksT0FBTyxTQUFTLEdBQUc7QUFDckI7WUFDZCxPQUFtQjtBQUNMO1lBQ0Q7QUFBQSxVQUNiLE9BQWlCO0FBQ0wsd0JBQVlBO0FBQ1osZ0JBQUksQ0FBQyxPQUFPLFNBQVMsR0FBRztBQUN0QjtZQUNEO0FBQUEsVUFDRjtBQUFBLFFBQ1gsQ0FBUztBQUFBLE1BQ1QsQ0FBSztBQUFBLElBQ0w7QUFFRTdCLFFBQUUsZUFBZSxFQUFFO0FBQ25CQSxRQUFFLFVBQVUsRUFBRSxZQUFZO0FBQUEsTUFDeEIsT0FBTztBQUFBLE1BQ1AsYUFBYTtBQUFBLFFBQ1gsT0FBTztBQUFBLFFBQ1AsWUFBWTtBQUFBLFFBQ1osWUFBWTtBQUFBLE1BQ2I7QUFBQSxNQUNELFlBQVksQ0FBQyxHQUFHLEdBQUk7QUFBQSxJQUN4QixDQUFHO0FBRURBLFFBQUUsbUJBQW1CLEVBQUUsR0FBRyxTQUFTLE1BQU07QUFDdkNBLFVBQUUsbUJBQW1CLEVBQUU7SUFDM0IsQ0FBRztBQUFBLEVBRUgsQ0FBQzs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsMTAsMTgsMjEsMjQsMjZdfQ== +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuanMiLCJzb3VyY2VzIjpbIi4uLy4uL19kZXYvbm9kZV9tb2R1bGVzL2pxdWVyeS1tb2RhbC9qcXVlcnkubW9kYWwuanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy90b29sdGlwc3Rlci9kaXN0L2pzL3Rvb2x0aXBzdGVyLmJ1bmRsZS5taW4uanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9ib290c3RyYXAtdG91Y2hzcGluL2Rpc3QvanF1ZXJ5LmJvb3RzdHJhcC10b3VjaHNwaW4uanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9qcXVlcnktdG91Y2hzd2lwZS9qcXVlcnkudG91Y2hTd2lwZS5taW4uanMiLCIuLi8uLi9fZGV2L2pzL3NlbGVjdG9ycy5qcyIsIi4uLy4uL19kZXYvanMvdGFicy5qcyIsIi4uLy4uL19kZXYvanMvZWFzeXpvb20uanMiLCIuLi8uLi9fZGV2L2pzL3Jlc3BvbnNpdmUuanMiLCIuLi8uLi9fZGV2L2pzL2NoZWNrb3V0LmpzIiwiLi4vLi4vX2Rldi9qcy9jdXN0b21lci5qcyIsIi4uLy4uL19kZXYvbm9kZV9tb2R1bGVzL3ZlbG9jaXR5LWFuaW1hdGUvdmVsb2NpdHkuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvdXBkYXRlLXNvdXJjZXMuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvcHJvZHVjdC1taW5pYXR1cmUuanMiLCIuLi8uLi9fZGV2L2pzL2xpc3RpbmcuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvcHJvZHVjdC1zZWxlY3QuanMiLCIuLi8uLi9fZGV2L2pzL3Byb2R1Y3QuanMiLCIuLi8uLi9fZGV2L2pzL2NvbXBvbmVudHMvZGVib3VuY2UuanMiLCIuLi8uLi9fZGV2L2pzL2NhcnQuanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwiLi4vLi4vX2Rldi9qcy9jb21wb25lbnRzL2Ryb3AtZG93bi5qcyIsIi4uLy4uL19kZXYvanMvY29tcG9uZW50cy9mb3JtLmpzIiwiLi4vLi4vX2Rldi9ub2RlX21vZHVsZXMvc3ByaW50Zi1qcy9zcmMvc3ByaW50Zi5qcyIsIi4uLy4uL19kZXYvanMvY29tcG9uZW50cy91c2VQYXNzd29yZFBvbGljeS5qcyIsIi4uLy4uL19kZXYvanMvY29tcG9uZW50cy90b3AtbWVudS5qcyIsIi4uLy4uL19kZXYvbm9kZV9tb2R1bGVzL2pxdWVyeS10b2FzdC1wbHVnaW4vZGlzdC9qcXVlcnkudG9hc3QubWluLmpzIiwiLi4vLi4vX2Rldi9qcy9jb21wb25lbnRzL2Jsb2NrLWNhcnQuanMiLCIuLi8uLi9fZGV2L25vZGVfbW9kdWxlcy9qcXVlcnktb2ZmY2FudmFzL2Rpc3QvanF1ZXJ5Lm9mZmNhbnZhcy5taW4uanMiLCIuLi8uLi9fZGV2L2pzL3RoZW1lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQSBzaW1wbGUgalF1ZXJ5IG1vZGFsIChodHRwOi8vZ2l0aHViLmNvbS9reWxlZm94L2pxdWVyeS1tb2RhbClcbiAgICBWZXJzaW9uIDAuOS4yXG4qL1xuXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgLy8gTWFraW5nIHlvdXIgalF1ZXJ5IHBsdWdpbiB3b3JrIGJldHRlciB3aXRoIG5wbSB0b29sc1xuICAvLyBodHRwOi8vYmxvZy5ucG1qcy5vcmcvcG9zdC8xMTI3MTIxNjk4MzAvbWFraW5nLXlvdXItanF1ZXJ5LXBsdWdpbi13b3JrLWJldHRlci13aXRoLW5wbVxuICBpZih0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuICAgIGZhY3RvcnkocmVxdWlyZShcImpxdWVyeVwiKSwgd2luZG93LCBkb2N1bWVudCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgZmFjdG9yeShqUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpO1xuICB9XG59KGZ1bmN0aW9uKCQsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCkge1xuXG4gIHZhciBtb2RhbHMgPSBbXSxcbiAgICAgIGdldEN1cnJlbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG1vZGFscy5sZW5ndGggPyBtb2RhbHNbbW9kYWxzLmxlbmd0aCAtIDFdIDogbnVsbDtcbiAgICAgIH0sXG4gICAgICBzZWxlY3RDdXJyZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChpPW1vZGFscy5sZW5ndGgtMTsgaT49MDsgaS0tKSB7XG4gICAgICAgICAgaWYgKG1vZGFsc1tpXS4kYmxvY2tlcikge1xuICAgICAgICAgICAgbW9kYWxzW2ldLiRibG9ja2VyLnRvZ2dsZUNsYXNzKCdjdXJyZW50Jywhc2VsZWN0ZWQpLnRvZ2dsZUNsYXNzKCdiZWhpbmQnLHNlbGVjdGVkKTtcbiAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgJC5tb2RhbCA9IGZ1bmN0aW9uKGVsLCBvcHRpb25zKSB7XG4gICAgdmFyIHJlbW92ZSwgdGFyZ2V0O1xuICAgIHRoaXMuJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sICQubW9kYWwuZGVmYXVsdHMsIG9wdGlvbnMpO1xuICAgIHRoaXMub3B0aW9ucy5kb0ZhZGUgPSAhaXNOYU4ocGFyc2VJbnQodGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiwgMTApKTtcbiAgICB0aGlzLiRibG9ja2VyID0gbnVsbDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlRXhpc3RpbmcpXG4gICAgICB3aGlsZSAoJC5tb2RhbC5pc0FjdGl2ZSgpKVxuICAgICAgICAkLm1vZGFsLmNsb3NlKCk7IC8vIENsb3NlIGFueSBvcGVuIG1vZGFscy5cbiAgICBtb2RhbHMucHVzaCh0aGlzKTtcbiAgICBpZiAoZWwuaXMoJ2EnKSkge1xuICAgICAgdGFyZ2V0ID0gZWwuYXR0cignaHJlZicpO1xuICAgICAgdGhpcy5hbmNob3IgPSBlbDtcbiAgICAgIC8vU2VsZWN0IGVsZW1lbnQgYnkgaWQgZnJvbSBocmVmXG4gICAgICBpZiAoL14jLy50ZXN0KHRhcmdldCkpIHtcbiAgICAgICAgdGhpcy4kZWxtID0gJCh0YXJnZXQpO1xuICAgICAgICBpZiAodGhpcy4kZWxtLmxlbmd0aCAhPT0gMSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHRoaXMuJGJvZHkuYXBwZW5kKHRoaXMuJGVsbSk7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgLy9BSkFYXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRlbG0gPSAkKCc8ZGl2PicpO1xuICAgICAgICB0aGlzLiRib2R5LmFwcGVuZCh0aGlzLiRlbG0pO1xuICAgICAgICByZW1vdmUgPSBmdW5jdGlvbihldmVudCwgbW9kYWwpIHsgbW9kYWwuZWxtLnJlbW92ZSgpOyB9O1xuICAgICAgICB0aGlzLnNob3dTcGlubmVyKCk7XG4gICAgICAgIGVsLnRyaWdnZXIoJC5tb2RhbC5BSkFYX1NFTkQpO1xuICAgICAgICAkLmdldCh0YXJnZXQpLmRvbmUoZnVuY3Rpb24oaHRtbCkge1xuICAgICAgICAgIGlmICghJC5tb2RhbC5pc0FjdGl2ZSgpKSByZXR1cm47XG4gICAgICAgICAgZWwudHJpZ2dlcigkLm1vZGFsLkFKQVhfU1VDQ0VTUyk7XG4gICAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXRDdXJyZW50KCk7XG4gICAgICAgICAgY3VycmVudC4kZWxtLmVtcHR5KCkuYXBwZW5kKGh0bWwpLm9uKCQubW9kYWwuQ0xPU0UsIHJlbW92ZSk7XG4gICAgICAgICAgY3VycmVudC5oaWRlU3Bpbm5lcigpO1xuICAgICAgICAgIGN1cnJlbnQub3BlbigpO1xuICAgICAgICAgIGVsLnRyaWdnZXIoJC5tb2RhbC5BSkFYX0NPTVBMRVRFKTtcbiAgICAgICAgfSkuZmFpbChmdW5jdGlvbigpIHtcbiAgICAgICAgICBlbC50cmlnZ2VyKCQubW9kYWwuQUpBWF9GQUlMKTtcbiAgICAgICAgICB2YXIgY3VycmVudCA9IGdldEN1cnJlbnQoKTtcbiAgICAgICAgICBjdXJyZW50LmhpZGVTcGlubmVyKCk7XG4gICAgICAgICAgbW9kYWxzLnBvcCgpOyAvLyByZW1vdmUgZXhwZWN0ZWQgbW9kYWwgZnJvbSB0aGUgbGlzdFxuICAgICAgICAgIGVsLnRyaWdnZXIoJC5tb2RhbC5BSkFYX0NPTVBMRVRFKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuJGVsbSA9IGVsO1xuICAgICAgdGhpcy5hbmNob3IgPSBlbDtcbiAgICAgIHRoaXMuJGJvZHkuYXBwZW5kKHRoaXMuJGVsbSk7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH07XG5cbiAgJC5tb2RhbC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6ICQubW9kYWwsXG5cbiAgICBvcGVuOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBtID0gdGhpcztcbiAgICAgIHRoaXMuYmxvY2soKTtcbiAgICAgIHRoaXMuYW5jaG9yLmJsdXIoKTtcbiAgICAgIGlmKHRoaXMub3B0aW9ucy5kb0ZhZGUpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBtLnNob3coKTtcbiAgICAgICAgfSwgdGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiAqIHRoaXMub3B0aW9ucy5mYWRlRGVsYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICB9XG4gICAgICAkKGRvY3VtZW50KS5vZmYoJ2tleWRvd24ubW9kYWwnKS5vbigna2V5ZG93bi5tb2RhbCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0Q3VycmVudCgpO1xuICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT09IDI3ICYmIGN1cnJlbnQub3B0aW9ucy5lc2NhcGVDbG9zZSkgY3VycmVudC5jbG9zZSgpO1xuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNsaWNrQ2xvc2UpXG4gICAgICAgIHRoaXMuJGJsb2NrZXIuY2xpY2soZnVuY3Rpb24oZSkge1xuICAgICAgICAgIGlmIChlLnRhcmdldCA9PT0gdGhpcylcbiAgICAgICAgICAgICQubW9kYWwuY2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICAgIG1vZGFscy5wb3AoKTtcbiAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICBpZiAoISQubW9kYWwuaXNBY3RpdmUoKSlcbiAgICAgICAgJChkb2N1bWVudCkub2ZmKCdrZXlkb3duLm1vZGFsJyk7XG4gICAgfSxcblxuICAgIGJsb2NrOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuJGVsbS50cmlnZ2VyKCQubW9kYWwuQkVGT1JFX0JMT0NLLCBbdGhpcy5fY3R4KCldKTtcbiAgICAgIHRoaXMuJGJvZHkuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpO1xuICAgICAgdGhpcy4kYmxvY2tlciA9ICQoJzxkaXYgY2xhc3M9XCInICsgdGhpcy5vcHRpb25zLmJsb2NrZXJDbGFzcyArICcgYmxvY2tlciBjdXJyZW50XCI+PC9kaXY+JykuYXBwZW5kVG8odGhpcy4kYm9keSk7XG4gICAgICBzZWxlY3RDdXJyZW50KCk7XG4gICAgICBpZih0aGlzLm9wdGlvbnMuZG9GYWRlKSB7XG4gICAgICAgIHRoaXMuJGJsb2NrZXIuY3NzKCdvcGFjaXR5JywwKS5hbmltYXRlKHtvcGFjaXR5OiAxfSwgdGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkJMT0NLLCBbdGhpcy5fY3R4KCldKTtcbiAgICB9LFxuXG4gICAgdW5ibG9jazogZnVuY3Rpb24obm93KSB7XG4gICAgICBpZiAoIW5vdyAmJiB0aGlzLm9wdGlvbnMuZG9GYWRlKVxuICAgICAgICB0aGlzLiRibG9ja2VyLmZhZGVPdXQodGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiwgdGhpcy51bmJsb2NrLmJpbmQodGhpcyx0cnVlKSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy4kYmxvY2tlci5jaGlsZHJlbigpLmFwcGVuZFRvKHRoaXMuJGJvZHkpO1xuICAgICAgICB0aGlzLiRibG9ja2VyLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLiRibG9ja2VyID0gbnVsbDtcbiAgICAgICAgc2VsZWN0Q3VycmVudCgpO1xuICAgICAgICBpZiAoISQubW9kYWwuaXNBY3RpdmUoKSlcbiAgICAgICAgICB0aGlzLiRib2R5LmNzcygnb3ZlcmZsb3cnLCcnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdzogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkJFRk9SRV9PUEVOLCBbdGhpcy5fY3R4KCldKTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0Nsb3NlKSB7XG4gICAgICAgIHRoaXMuY2xvc2VCdXR0b24gPSAkKCc8YSBocmVmPVwiI2Nsb3NlLW1vZGFsXCIgcmVsPVwibW9kYWw6Y2xvc2VcIiBjbGFzcz1cImNsb3NlLW1vZGFsICcgKyB0aGlzLm9wdGlvbnMuY2xvc2VDbGFzcyArICdcIj4nICsgdGhpcy5vcHRpb25zLmNsb3NlVGV4dCArICc8L2E+Jyk7XG4gICAgICAgIHRoaXMuJGVsbS5hcHBlbmQodGhpcy5jbG9zZUJ1dHRvbik7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbG0uYWRkQ2xhc3ModGhpcy5vcHRpb25zLm1vZGFsQ2xhc3MpLmFwcGVuZFRvKHRoaXMuJGJsb2NrZXIpO1xuICAgICAgaWYodGhpcy5vcHRpb25zLmRvRmFkZSkge1xuICAgICAgICB0aGlzLiRlbG0uY3NzKHtvcGFjaXR5OiAwLCBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ30pLmFuaW1hdGUoe29wYWNpdHk6IDF9LCB0aGlzLm9wdGlvbnMuZmFkZUR1cmF0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGVsbS5jc3MoJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLk9QRU4sIFt0aGlzLl9jdHgoKV0pO1xuICAgIH0sXG5cbiAgICBoaWRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuJGVsbS50cmlnZ2VyKCQubW9kYWwuQkVGT1JFX0NMT1NFLCBbdGhpcy5fY3R4KCldKTtcbiAgICAgIGlmICh0aGlzLmNsb3NlQnV0dG9uKSB0aGlzLmNsb3NlQnV0dG9uLnJlbW92ZSgpO1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIGlmKHRoaXMub3B0aW9ucy5kb0ZhZGUpIHtcbiAgICAgICAgdGhpcy4kZWxtLmZhZGVPdXQodGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkFGVEVSX0NMT1NFLCBbX3RoaXMuX2N0eCgpXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZWxtLmhpZGUoMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLiRlbG0udHJpZ2dlcigkLm1vZGFsLkFGVEVSX0NMT1NFLCBbX3RoaXMuX2N0eCgpXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy4kZWxtLnRyaWdnZXIoJC5tb2RhbC5DTE9TRSwgW3RoaXMuX2N0eCgpXSk7XG4gICAgfSxcblxuICAgIHNob3dTcGlubmVyOiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLnNob3dTcGlubmVyKSByZXR1cm47XG4gICAgICB0aGlzLnNwaW5uZXIgPSB0aGlzLnNwaW5uZXIgfHwgJCgnPGRpdiBjbGFzcz1cIicgKyB0aGlzLm9wdGlvbnMubW9kYWxDbGFzcyArICctc3Bpbm5lclwiPjwvZGl2PicpXG4gICAgICAgIC5hcHBlbmQodGhpcy5vcHRpb25zLnNwaW5uZXJIdG1sKTtcbiAgICAgIHRoaXMuJGJvZHkuYXBwZW5kKHRoaXMuc3Bpbm5lcik7XG4gICAgICB0aGlzLnNwaW5uZXIuc2hvdygpO1xuICAgIH0sXG5cbiAgICBoaWRlU3Bpbm5lcjogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5zcGlubmVyKSB0aGlzLnNwaW5uZXIucmVtb3ZlKCk7XG4gICAgfSxcblxuICAgIC8vUmV0dXJuIGNvbnRleHQgZm9yIGN1c3RvbSBldmVudHNcbiAgICBfY3R4OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7IGVsbTogdGhpcy4kZWxtLCAkZWxtOiB0aGlzLiRlbG0sICRibG9ja2VyOiB0aGlzLiRibG9ja2VyLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMsICRhbmNob3I6IHRoaXMuYW5jaG9yIH07XG4gICAgfVxuICB9O1xuXG4gICQubW9kYWwuY2xvc2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgIGlmICghJC5tb2RhbC5pc0FjdGl2ZSgpKSByZXR1cm47XG4gICAgaWYgKGV2ZW50KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHZhciBjdXJyZW50ID0gZ2V0Q3VycmVudCgpO1xuICAgIGN1cnJlbnQuY2xvc2UoKTtcbiAgICByZXR1cm4gY3VycmVudC4kZWxtO1xuICB9O1xuXG4gIC8vIFJldHVybnMgaWYgdGhlcmUgY3VycmVudGx5IGlzIGFuIGFjdGl2ZSBtb2RhbFxuICAkLm1vZGFsLmlzQWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBtb2RhbHMubGVuZ3RoID4gMDtcbiAgfTtcblxuICAkLm1vZGFsLmdldEN1cnJlbnQgPSBnZXRDdXJyZW50O1xuXG4gICQubW9kYWwuZGVmYXVsdHMgPSB7XG4gICAgY2xvc2VFeGlzdGluZzogdHJ1ZSxcbiAgICBlc2NhcGVDbG9zZTogdHJ1ZSxcbiAgICBjbGlja0Nsb3NlOiB0cnVlLFxuICAgIGNsb3NlVGV4dDogJ0Nsb3NlJyxcbiAgICBjbG9zZUNsYXNzOiAnJyxcbiAgICBtb2RhbENsYXNzOiBcIm1vZGFsXCIsXG4gICAgYmxvY2tlckNsYXNzOiBcImpxdWVyeS1tb2RhbFwiLFxuICAgIHNwaW5uZXJIdG1sOiAnPGRpdiBjbGFzcz1cInJlY3QxXCI+PC9kaXY+PGRpdiBjbGFzcz1cInJlY3QyXCI+PC9kaXY+PGRpdiBjbGFzcz1cInJlY3QzXCI+PC9kaXY+PGRpdiBjbGFzcz1cInJlY3Q0XCI+PC9kaXY+JyxcbiAgICBzaG93U3Bpbm5lcjogdHJ1ZSxcbiAgICBzaG93Q2xvc2U6IHRydWUsXG4gICAgZmFkZUR1cmF0aW9uOiBudWxsLCAgIC8vIE51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhlIGZhZGUgYW5pbWF0aW9uIHRha2VzLlxuICAgIGZhZGVEZWxheTogMS4wICAgICAgICAvLyBQb2ludCBkdXJpbmcgdGhlIG92ZXJsYXkncyBmYWRlLWluIHRoYXQgdGhlIG1vZGFsIGJlZ2lucyB0byBmYWRlIGluICguNSA9IDUwJSwgMS41ID0gMTUwJSwgZXRjLilcbiAgfTtcblxuICAvLyBFdmVudCBjb25zdGFudHNcbiAgJC5tb2RhbC5CRUZPUkVfQkxPQ0sgPSAnbW9kYWw6YmVmb3JlLWJsb2NrJztcbiAgJC5tb2RhbC5CTE9DSyA9ICdtb2RhbDpibG9jayc7XG4gICQubW9kYWwuQkVGT1JFX09QRU4gPSAnbW9kYWw6YmVmb3JlLW9wZW4nO1xuICAkLm1vZGFsLk9QRU4gPSAnbW9kYWw6b3Blbic7XG4gICQubW9kYWwuQkVGT1JFX0NMT1NFID0gJ21vZGFsOmJlZm9yZS1jbG9zZSc7XG4gICQubW9kYWwuQ0xPU0UgPSAnbW9kYWw6Y2xvc2UnO1xuICAkLm1vZGFsLkFGVEVSX0NMT1NFID0gJ21vZGFsOmFmdGVyLWNsb3NlJztcbiAgJC5tb2RhbC5BSkFYX1NFTkQgPSAnbW9kYWw6YWpheDpzZW5kJztcbiAgJC5tb2RhbC5BSkFYX1NVQ0NFU1MgPSAnbW9kYWw6YWpheDpzdWNjZXNzJztcbiAgJC5tb2RhbC5BSkFYX0ZBSUwgPSAnbW9kYWw6YWpheDpmYWlsJztcbiAgJC5tb2RhbC5BSkFYX0NPTVBMRVRFID0gJ21vZGFsOmFqYXg6Y29tcGxldGUnO1xuXG4gICQuZm4ubW9kYWwgPSBmdW5jdGlvbihvcHRpb25zKXtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIG5ldyAkLm1vZGFsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBBdXRvbWF0aWNhbGx5IGJpbmQgbGlua3Mgd2l0aCByZWw9XCJtb2RhbDpjbG9zZVwiIHRvLCB3ZWxsLCBjbG9zZSB0aGUgbW9kYWwuXG4gICQoZG9jdW1lbnQpLm9uKCdjbGljay5tb2RhbCcsICdhW3JlbH49XCJtb2RhbDpjbG9zZVwiXScsICQubW9kYWwuY2xvc2UpO1xuICAkKGRvY3VtZW50KS5vbignY2xpY2subW9kYWwnLCAnYVtyZWx+PVwibW9kYWw6b3BlblwiXScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAkKHRoaXMpLm1vZGFsKCk7XG4gIH0pO1xufSkpO1xuIiwiLyohIHRvb2x0aXBzdGVyIHY0LjIuOCAqLyFmdW5jdGlvbihhLGIpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wianF1ZXJ5XCJdLGZ1bmN0aW9uKGEpe3JldHVybiBiKGEpfSk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YihyZXF1aXJlKFwianF1ZXJ5XCIpKTpiKGpRdWVyeSl9KHRoaXMsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt0aGlzLiRjb250YWluZXIsdGhpcy5jb25zdHJhaW50cz1udWxsLHRoaXMuX18kdG9vbHRpcCx0aGlzLl9faW5pdChhKX1mdW5jdGlvbiBjKGIsYyl7dmFyIGQ9ITA7cmV0dXJuIGEuZWFjaChiLGZ1bmN0aW9uKGEsZSl7cmV0dXJuIHZvaWQgMD09PWNbYV18fGJbYV0hPT1jW2FdPyhkPSExLCExKTp2b2lkIDB9KSxkfWZ1bmN0aW9uIGQoYil7dmFyIGM9Yi5hdHRyKFwiaWRcIiksZD1jP2gud2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGMpOm51bGw7cmV0dXJuIGQ/ZD09PWJbMF06YS5jb250YWlucyhoLndpbmRvdy5kb2N1bWVudC5ib2R5LGJbMF0pfWZ1bmN0aW9uIGUoKXtpZighZylyZXR1cm4hMTt2YXIgYT1nLmRvY3VtZW50LmJvZHl8fGcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGI9YS5zdHlsZSxjPVwidHJhbnNpdGlvblwiLGQ9W1wiTW96XCIsXCJXZWJraXRcIixcIktodG1sXCIsXCJPXCIsXCJtc1wiXTtpZihcInN0cmluZ1wiPT10eXBlb2YgYltjXSlyZXR1cm4hMDtjPWMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zdWJzdHIoMSk7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspaWYoXCJzdHJpbmdcIj09dHlwZW9mIGJbZFtlXStjXSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgZj17YW5pbWF0aW9uOlwiZmFkZVwiLGFuaW1hdGlvbkR1cmF0aW9uOjM1MCxjb250ZW50Om51bGwsY29udGVudEFzSFRNTDohMSxjb250ZW50Q2xvbmluZzohMSxkZWJ1ZzohMCxkZWxheTozMDAsZGVsYXlUb3VjaDpbMzAwLDUwMF0sZnVuY3Rpb25Jbml0Om51bGwsZnVuY3Rpb25CZWZvcmU6bnVsbCxmdW5jdGlvblJlYWR5Om51bGwsZnVuY3Rpb25BZnRlcjpudWxsLGZ1bmN0aW9uRm9ybWF0Om51bGwsSUVtaW46NixpbnRlcmFjdGl2ZTohMSxtdWx0aXBsZTohMSxwYXJlbnQ6bnVsbCxwbHVnaW5zOltcInNpZGVUaXBcIl0scmVwb3NpdGlvbk9uU2Nyb2xsOiExLHJlc3RvcmF0aW9uOlwibm9uZVwiLHNlbGZEZXN0cnVjdGlvbjohMCx0aGVtZTpbXSx0aW1lcjowLHRyYWNrZXJJbnRlcnZhbDo1MDAsdHJhY2tPcmlnaW46ITEsdHJhY2tUb29sdGlwOiExLHRyaWdnZXI6XCJob3ZlclwiLHRyaWdnZXJDbG9zZTp7Y2xpY2s6ITEsbW91c2VsZWF2ZTohMSxvcmlnaW5DbGljazohMSxzY3JvbGw6ITEsdGFwOiExLHRvdWNobGVhdmU6ITF9LHRyaWdnZXJPcGVuOntjbGljazohMSxtb3VzZWVudGVyOiExLHRhcDohMSx0b3VjaHN0YXJ0OiExfSx1cGRhdGVBbmltYXRpb246XCJyb3RhdGVcIix6SW5kZXg6OTk5OTk5OX0sZz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpudWxsLGg9e2hhc1RvdWNoQ2FwYWJpbGl0eTohKCFnfHwhKFwib250b3VjaHN0YXJ0XCJpbiBnfHxnLkRvY3VtZW50VG91Y2gmJmcuZG9jdW1lbnQgaW5zdGFuY2VvZiBnLkRvY3VtZW50VG91Y2h8fGcubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzKSksaGFzVHJhbnNpdGlvbnM6ZSgpLElFOiExLHNlbVZlcjpcIjQuMi44XCIsd2luZG93Omd9LGk9ZnVuY3Rpb24oKXt0aGlzLl9fJGVtaXR0ZXJQcml2YXRlPWEoe30pLHRoaXMuX18kZW1pdHRlclB1YmxpYz1hKHt9KSx0aGlzLl9faW5zdGFuY2VzTGF0ZXN0QXJyPVtdLHRoaXMuX19wbHVnaW5zPXt9LHRoaXMuX2Vudj1ofTtpLnByb3RvdHlwZT17X19icmlkZ2U6ZnVuY3Rpb24oYixjLGQpe2lmKCFjW2RdKXt2YXIgZT1mdW5jdGlvbigpe307ZS5wcm90b3R5cGU9Yjt2YXIgZz1uZXcgZTtnLl9faW5pdCYmZy5fX2luaXQoYyksYS5lYWNoKGIsZnVuY3Rpb24oYSxiKXswIT1hLmluZGV4T2YoXCJfX1wiKSYmKGNbYV0/Zi5kZWJ1ZyYmY29uc29sZS5sb2coXCJUaGUgXCIrYStcIiBtZXRob2Qgb2YgdGhlIFwiK2QrXCIgcGx1Z2luIGNvbmZsaWN0cyB3aXRoIGFub3RoZXIgcGx1Z2luIG9yIG5hdGl2ZSBtZXRob2RzXCIpOihjW2FdPWZ1bmN0aW9uKCl7cmV0dXJuIGdbYV0uYXBwbHkoZyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSl9LGNbYV0uYnJpZGdlZD1nKSl9KSxjW2RdPWd9cmV0dXJuIHRoaXN9LF9fc2V0V2luZG93OmZ1bmN0aW9uKGEpe3JldHVybiBoLndpbmRvdz1hLHRoaXN9LF9nZXRSdWxlcjpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IGIoYSl9LF9vZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZS5vZmYuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX18kZW1pdHRlclByaXZhdGUub24uYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLm9uZS5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKSx0aGlzfSxfcGx1Z2luOmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGIpe3ZhciBkPWIsZT1udWxsO3JldHVybiBkLmluZGV4T2YoXCIuXCIpPjA/ZT1jLl9fcGx1Z2luc1tkXTphLmVhY2goYy5fX3BsdWdpbnMsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5uYW1lLnN1YnN0cmluZyhiLm5hbWUubGVuZ3RoLWQubGVuZ3RoLTEpPT1cIi5cIitkPyhlPWIsITEpOnZvaWQgMH0pLGV9aWYoYi5uYW1lLmluZGV4T2YoXCIuXCIpPDApdGhyb3cgbmV3IEVycm9yKFwiUGx1Z2lucyBtdXN0IGJlIG5hbWVzcGFjZWRcIik7cmV0dXJuIGMuX19wbHVnaW5zW2IubmFtZV09YixiLmNvcmUmJmMuX19icmlkZ2UoYi5jb3JlLGMsYi5uYW1lKSx0aGlzfSxfdHJpZ2dlcjpmdW5jdGlvbigpe3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhWzBdJiYoYVswXT17dHlwZTphWzBdfSksdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZS50cmlnZ2VyLmFwcGx5KHRoaXMuX18kZW1pdHRlclByaXZhdGUsYSksdGhpcy5fXyRlbWl0dGVyUHVibGljLnRyaWdnZXIuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHVibGljLGEpLHRoaXN9LGluc3RhbmNlczpmdW5jdGlvbihiKXt2YXIgYz1bXSxkPWJ8fFwiLnRvb2x0aXBzdGVyZWRcIjtyZXR1cm4gYShkKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKSxkPWIuZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpO2QmJmEuZWFjaChkLGZ1bmN0aW9uKGEsZCl7Yy5wdXNoKGIuZGF0YShkKSl9KX0pLGN9LGluc3RhbmNlc0xhdGVzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faW5zdGFuY2VzTGF0ZXN0QXJyfSxvZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fXyRlbWl0dGVyUHVibGljLm9mZi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX18kZW1pdHRlclB1YmxpYy5vbi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQdWJsaWMub25lLmFwcGx5KHRoaXMuX18kZW1pdHRlclB1YmxpYyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sb3JpZ2luczpmdW5jdGlvbihiKXt2YXIgYz1iP2IrXCIgXCI6XCJcIjtyZXR1cm4gYShjK1wiLnRvb2x0aXBzdGVyZWRcIikudG9BcnJheSgpfSxzZXREZWZhdWx0czpmdW5jdGlvbihiKXtyZXR1cm4gYS5leHRlbmQoZixiKSx0aGlzfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQdWJsaWMudHJpZ2dlckhhbmRsZXIuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHVibGljLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKSx0aGlzfX0sYS50b29sdGlwc3Rlcj1uZXcgaSxhLlRvb2x0aXBzdGVyPWZ1bmN0aW9uKGIsYyl7dGhpcy5fX2NhbGxiYWNrcz17Y2xvc2U6W10sb3BlbjpbXX0sdGhpcy5fX2Nsb3NpbmdUaW1lLHRoaXMuX19Db250ZW50LHRoaXMuX19jb250ZW50QmNyLHRoaXMuX19kZXN0cm95ZWQ9ITEsdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZT1hKHt9KSx0aGlzLl9fJGVtaXR0ZXJQdWJsaWM9YSh7fSksdGhpcy5fX2VuYWJsZWQ9ITAsdGhpcy5fX2dhcmJhZ2VDb2xsZWN0b3IsdGhpcy5fX0dlb21ldHJ5LHRoaXMuX19sYXN0UG9zaXRpb24sdGhpcy5fX25hbWVzcGFjZT1cInRvb2x0aXBzdGVyLVwiK01hdGgucm91bmQoMWU2Kk1hdGgucmFuZG9tKCkpLHRoaXMuX19vcHRpb25zLHRoaXMuX18kb3JpZ2luUGFyZW50cyx0aGlzLl9fcG9pbnRlcklzT3Zlck9yaWdpbj0hMSx0aGlzLl9fcHJldmlvdXNUaGVtZXM9W10sdGhpcy5fX3N0YXRlPVwiY2xvc2VkXCIsdGhpcy5fX3RpbWVvdXRzPXtjbG9zZTpbXSxvcGVuOm51bGx9LHRoaXMuX190b3VjaEV2ZW50cz1bXSx0aGlzLl9fdHJhY2tlcj1udWxsLHRoaXMuXyRvcmlnaW4sdGhpcy5fJHRvb2x0aXAsdGhpcy5fX2luaXQoYixjKX0sYS5Ub29sdGlwc3Rlci5wcm90b3R5cGU9e19faW5pdDpmdW5jdGlvbihiLGMpe3ZhciBkPXRoaXM7aWYoZC5fJG9yaWdpbj1hKGIpLGQuX19vcHRpb25zPWEuZXh0ZW5kKCEwLHt9LGYsYyksZC5fX29wdGlvbnNGb3JtYXQoKSwhaC5JRXx8aC5JRT49ZC5fX29wdGlvbnMuSUVtaW4pe3ZhciBlPW51bGw7aWYodm9pZCAwPT09ZC5fJG9yaWdpbi5kYXRhKFwidG9vbHRpcHN0ZXItaW5pdGlhbFRpdGxlXCIpJiYoZT1kLl8kb3JpZ2luLmF0dHIoXCJ0aXRsZVwiKSx2b2lkIDA9PT1lJiYoZT1udWxsKSxkLl8kb3JpZ2luLmRhdGEoXCJ0b29sdGlwc3Rlci1pbml0aWFsVGl0bGVcIixlKSksbnVsbCE9PWQuX19vcHRpb25zLmNvbnRlbnQpZC5fX2NvbnRlbnRTZXQoZC5fX29wdGlvbnMuY29udGVudCk7ZWxzZXt2YXIgZyxpPWQuXyRvcmlnaW4uYXR0cihcImRhdGEtdG9vbHRpcC1jb250ZW50XCIpO2kmJihnPWEoaSkpLGcmJmdbMF0/ZC5fX2NvbnRlbnRTZXQoZy5maXJzdCgpKTpkLl9fY29udGVudFNldChlKX1kLl8kb3JpZ2luLnJlbW92ZUF0dHIoXCJ0aXRsZVwiKS5hZGRDbGFzcyhcInRvb2x0aXBzdGVyZWRcIiksZC5fX3ByZXBhcmVPcmlnaW4oKSxkLl9fcHJlcGFyZUdDKCksYS5lYWNoKGQuX19vcHRpb25zLnBsdWdpbnMsZnVuY3Rpb24oYSxiKXtkLl9wbHVnKGIpfSksaC5oYXNUb3VjaENhcGFiaWxpdHkmJmEoaC53aW5kb3cuZG9jdW1lbnQuYm9keSkub24oXCJ0b3VjaG1vdmUuXCIrZC5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlblwiLGZ1bmN0aW9uKGEpe2QuX3RvdWNoUmVjb3JkRXZlbnQoYSl9KSxkLl9vbihcImNyZWF0ZWRcIixmdW5jdGlvbigpe2QuX19wcmVwYXJlVG9vbHRpcCgpfSkuX29uKFwicmVwb3NpdGlvbmVkXCIsZnVuY3Rpb24oYSl7ZC5fX2xhc3RQb3NpdGlvbj1hLnBvc2l0aW9ufSl9ZWxzZSBkLl9fb3B0aW9ucy5kaXNhYmxlZD0hMH0sX19jb250ZW50SW5zZXJ0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuXyR0b29sdGlwLmZpbmQoXCIudG9vbHRpcHN0ZXItY29udGVudFwiKSxjPWEuX19Db250ZW50LGQ9ZnVuY3Rpb24oYSl7Yz1hfTtyZXR1cm4gYS5fdHJpZ2dlcih7dHlwZTpcImZvcm1hdFwiLGNvbnRlbnQ6YS5fX0NvbnRlbnQsZm9ybWF0OmR9KSxhLl9fb3B0aW9ucy5mdW5jdGlvbkZvcm1hdCYmKGM9YS5fX29wdGlvbnMuZnVuY3Rpb25Gb3JtYXQuY2FsbChhLGEse29yaWdpbjphLl8kb3JpZ2luWzBdfSxhLl9fQ29udGVudCkpLFwic3RyaW5nXCIhPXR5cGVvZiBjfHxhLl9fb3B0aW9ucy5jb250ZW50QXNIVE1MP2IuZW1wdHkoKS5hcHBlbmQoYyk6Yi50ZXh0KGMpLGF9LF9fY29udGVudFNldDpmdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIGEmJnRoaXMuX19vcHRpb25zLmNvbnRlbnRDbG9uaW5nJiYoYj1iLmNsb25lKCEwKSksdGhpcy5fX0NvbnRlbnQ9Yix0aGlzLl90cmlnZ2VyKHt0eXBlOlwidXBkYXRlZFwiLGNvbnRlbnQ6Yn0pLHRoaXN9LF9fZGVzdHJveUVycm9yOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiVGhpcyB0b29sdGlwIGhhcyBiZWVuIGRlc3Ryb3llZCBhbmQgY2Fubm90IGV4ZWN1dGUgeW91ciBtZXRob2QgY2FsbC5cIil9LF9fZ2VvbWV0cnk6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLGM9Yi5fJG9yaWdpbixkPWIuXyRvcmlnaW4uaXMoXCJhcmVhXCIpO2lmKGQpe3ZhciBlPWIuXyRvcmlnaW4ucGFyZW50KCkuYXR0cihcIm5hbWVcIik7Yz1hKCdpbWdbdXNlbWFwPVwiIycrZSsnXCJdJyl9dmFyIGY9Y1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPWEoaC53aW5kb3cuZG9jdW1lbnQpLGk9YShoLndpbmRvdyksaj1jLGs9e2F2YWlsYWJsZTp7ZG9jdW1lbnQ6bnVsbCx3aW5kb3c6bnVsbH0sZG9jdW1lbnQ6e3NpemU6e2hlaWdodDpnLmhlaWdodCgpLHdpZHRoOmcud2lkdGgoKX19LHdpbmRvdzp7c2Nyb2xsOntsZWZ0Omgud2luZG93LnNjcm9sbFh8fGgud2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LHRvcDpoLndpbmRvdy5zY3JvbGxZfHxoLndpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfSxzaXplOntoZWlnaHQ6aS5oZWlnaHQoKSx3aWR0aDppLndpZHRoKCl9fSxvcmlnaW46e2ZpeGVkTGluZWFnZTohMSxvZmZzZXQ6e30sc2l6ZTp7aGVpZ2h0OmYuYm90dG9tLWYudG9wLHdpZHRoOmYucmlnaHQtZi5sZWZ0fSx1c2VtYXBJbWFnZTpkP2NbMF06bnVsbCx3aW5kb3dPZmZzZXQ6e2JvdHRvbTpmLmJvdHRvbSxsZWZ0OmYubGVmdCxyaWdodDpmLnJpZ2h0LHRvcDpmLnRvcH19fTtpZihkKXt2YXIgbD1iLl8kb3JpZ2luLmF0dHIoXCJzaGFwZVwiKSxtPWIuXyRvcmlnaW4uYXR0cihcImNvb3Jkc1wiKTtpZihtJiYobT1tLnNwbGl0KFwiLFwiKSxhLm1hcChtLGZ1bmN0aW9uKGEsYil7bVtiXT1wYXJzZUludChhKX0pKSxcImRlZmF1bHRcIiE9bClzd2l0Y2gobCl7Y2FzZVwiY2lyY2xlXCI6dmFyIG49bVswXSxvPW1bMV0scD1tWzJdLHE9by1wLHI9bi1wO2sub3JpZ2luLnNpemUuaGVpZ2h0PTIqcCxrLm9yaWdpbi5zaXplLndpZHRoPWsub3JpZ2luLnNpemUuaGVpZ2h0LGsub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0Kz1yLGsub3JpZ2luLndpbmRvd09mZnNldC50b3ArPXE7YnJlYWs7Y2FzZVwicmVjdFwiOnZhciBzPW1bMF0sdD1tWzFdLHU9bVsyXSx2PW1bM107ay5vcmlnaW4uc2l6ZS5oZWlnaHQ9di10LGsub3JpZ2luLnNpemUud2lkdGg9dS1zLGsub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0Kz1zLGsub3JpZ2luLndpbmRvd09mZnNldC50b3ArPXQ7YnJlYWs7Y2FzZVwicG9seVwiOmZvcih2YXIgdz0wLHg9MCx5PTAsej0wLEE9XCJldmVuXCIsQj0wO0I8bS5sZW5ndGg7QisrKXt2YXIgQz1tW0JdO1wiZXZlblwiPT1BPyhDPnkmJih5PUMsMD09PUImJih3PXkpKSx3PkMmJih3PUMpLEE9XCJvZGRcIik6KEM+eiYmKHo9QywxPT1CJiYoeD16KSkseD5DJiYoeD1DKSxBPVwiZXZlblwiKX1rLm9yaWdpbi5zaXplLmhlaWdodD16LXgsay5vcmlnaW4uc2l6ZS53aWR0aD15LXcsay5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQrPXcsay5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCs9eH19dmFyIEQ9ZnVuY3Rpb24oYSl7ay5vcmlnaW4uc2l6ZS5oZWlnaHQ9YS5oZWlnaHQsay5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQ9YS5sZWZ0LGsub3JpZ2luLndpbmRvd09mZnNldC50b3A9YS50b3Asay5vcmlnaW4uc2l6ZS53aWR0aD1hLndpZHRofTtmb3IoYi5fdHJpZ2dlcih7dHlwZTpcImdlb21ldHJ5XCIsZWRpdDpELGdlb21ldHJ5OntoZWlnaHQ6ay5vcmlnaW4uc2l6ZS5oZWlnaHQsbGVmdDprLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCx0b3A6ay5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCx3aWR0aDprLm9yaWdpbi5zaXplLndpZHRofX0pLGsub3JpZ2luLndpbmRvd09mZnNldC5yaWdodD1rLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCtrLm9yaWdpbi5zaXplLndpZHRoLGsub3JpZ2luLndpbmRvd09mZnNldC5ib3R0b209ay5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCtrLm9yaWdpbi5zaXplLmhlaWdodCxrLm9yaWdpbi5vZmZzZXQubGVmdD1rLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCtrLndpbmRvdy5zY3JvbGwubGVmdCxrLm9yaWdpbi5vZmZzZXQudG9wPWsub3JpZ2luLndpbmRvd09mZnNldC50b3Aray53aW5kb3cuc2Nyb2xsLnRvcCxrLm9yaWdpbi5vZmZzZXQuYm90dG9tPWsub3JpZ2luLm9mZnNldC50b3Aray5vcmlnaW4uc2l6ZS5oZWlnaHQsay5vcmlnaW4ub2Zmc2V0LnJpZ2h0PWsub3JpZ2luLm9mZnNldC5sZWZ0K2sub3JpZ2luLnNpemUud2lkdGgsay5hdmFpbGFibGUuZG9jdW1lbnQ9e2JvdHRvbTp7aGVpZ2h0OmsuZG9jdW1lbnQuc2l6ZS5oZWlnaHQtay5vcmlnaW4ub2Zmc2V0LmJvdHRvbSx3aWR0aDprLmRvY3VtZW50LnNpemUud2lkdGh9LGxlZnQ6e2hlaWdodDprLmRvY3VtZW50LnNpemUuaGVpZ2h0LHdpZHRoOmsub3JpZ2luLm9mZnNldC5sZWZ0fSxyaWdodDp7aGVpZ2h0OmsuZG9jdW1lbnQuc2l6ZS5oZWlnaHQsd2lkdGg6ay5kb2N1bWVudC5zaXplLndpZHRoLWsub3JpZ2luLm9mZnNldC5yaWdodH0sdG9wOntoZWlnaHQ6ay5vcmlnaW4ub2Zmc2V0LnRvcCx3aWR0aDprLmRvY3VtZW50LnNpemUud2lkdGh9fSxrLmF2YWlsYWJsZS53aW5kb3c9e2JvdHRvbTp7aGVpZ2h0Ok1hdGgubWF4KGsud2luZG93LnNpemUuaGVpZ2h0LU1hdGgubWF4KGsub3JpZ2luLndpbmRvd09mZnNldC5ib3R0b20sMCksMCksd2lkdGg6ay53aW5kb3cuc2l6ZS53aWR0aH0sbGVmdDp7aGVpZ2h0Omsud2luZG93LnNpemUuaGVpZ2h0LHdpZHRoOk1hdGgubWF4KGsub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0LDApfSxyaWdodDp7aGVpZ2h0Omsud2luZG93LnNpemUuaGVpZ2h0LHdpZHRoOk1hdGgubWF4KGsud2luZG93LnNpemUud2lkdGgtTWF0aC5tYXgoay5vcmlnaW4ud2luZG93T2Zmc2V0LnJpZ2h0LDApLDApfSx0b3A6e2hlaWdodDpNYXRoLm1heChrLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wLDApLHdpZHRoOmsud2luZG93LnNpemUud2lkdGh9fTtcImh0bWxcIiE9alswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7KXtpZihcImZpeGVkXCI9PWouY3NzKFwicG9zaXRpb25cIikpe2sub3JpZ2luLmZpeGVkTGluZWFnZT0hMDticmVha31qPWoucGFyZW50KCl9cmV0dXJuIGt9LF9fb3B0aW9uc0Zvcm1hdDpmdW5jdGlvbigpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbiYmKHRoaXMuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uPVt0aGlzLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbix0aGlzLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbl0pLFwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLl9fb3B0aW9ucy5kZWxheSYmKHRoaXMuX19vcHRpb25zLmRlbGF5PVt0aGlzLl9fb3B0aW9ucy5kZWxheSx0aGlzLl9fb3B0aW9ucy5kZWxheV0pLFwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLl9fb3B0aW9ucy5kZWxheVRvdWNoJiYodGhpcy5fX29wdGlvbnMuZGVsYXlUb3VjaD1bdGhpcy5fX29wdGlvbnMuZGVsYXlUb3VjaCx0aGlzLl9fb3B0aW9ucy5kZWxheVRvdWNoXSksXCJzdHJpbmdcIj09dHlwZW9mIHRoaXMuX19vcHRpb25zLnRoZW1lJiYodGhpcy5fX29wdGlvbnMudGhlbWU9W3RoaXMuX19vcHRpb25zLnRoZW1lXSksbnVsbD09PXRoaXMuX19vcHRpb25zLnBhcmVudD90aGlzLl9fb3B0aW9ucy5wYXJlbnQ9YShoLndpbmRvdy5kb2N1bWVudC5ib2R5KTpcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5fX29wdGlvbnMucGFyZW50JiYodGhpcy5fX29wdGlvbnMucGFyZW50PWEodGhpcy5fX29wdGlvbnMucGFyZW50KSksXCJob3ZlclwiPT10aGlzLl9fb3B0aW9ucy50cmlnZ2VyPyh0aGlzLl9fb3B0aW9ucy50cmlnZ2VyT3Blbj17bW91c2VlbnRlcjohMCx0b3VjaHN0YXJ0OiEwfSx0aGlzLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2U9e21vdXNlbGVhdmU6ITAsb3JpZ2luQ2xpY2s6ITAsdG91Y2hsZWF2ZTohMH0pOlwiY2xpY2tcIj09dGhpcy5fX29wdGlvbnMudHJpZ2dlciYmKHRoaXMuX19vcHRpb25zLnRyaWdnZXJPcGVuPXtjbGljazohMCx0YXA6ITB9LHRoaXMuX19vcHRpb25zLnRyaWdnZXJDbG9zZT17Y2xpY2s6ITAsdGFwOiEwfSksdGhpcy5fdHJpZ2dlcihcIm9wdGlvbnNcIiksdGhpc30sX19wcmVwYXJlR0M6ZnVuY3Rpb24oKXt2YXIgYj10aGlzO3JldHVybiBiLl9fb3B0aW9ucy5zZWxmRGVzdHJ1Y3Rpb24/Yi5fX2dhcmJhZ2VDb2xsZWN0b3I9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt2YXIgYz0obmV3IERhdGUpLmdldFRpbWUoKTtiLl9fdG91Y2hFdmVudHM9YS5ncmVwKGIuX190b3VjaEV2ZW50cyxmdW5jdGlvbihhLGIpe3JldHVybiBjLWEudGltZT42ZTR9KSxkKGIuXyRvcmlnaW4pfHxiLmNsb3NlKGZ1bmN0aW9uKCl7Yi5kZXN0cm95KCl9KX0sMmU0KTpjbGVhckludGVydmFsKGIuX19nYXJiYWdlQ29sbGVjdG9yKSxifSxfX3ByZXBhcmVPcmlnaW46ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2lmKGEuXyRvcmlnaW4ub2ZmKFwiLlwiK2EuX19uYW1lc3BhY2UrXCItdHJpZ2dlck9wZW5cIiksaC5oYXNUb3VjaENhcGFiaWxpdHkmJmEuXyRvcmlnaW4ub24oXCJ0b3VjaHN0YXJ0LlwiK2EuX19uYW1lc3BhY2UrXCItdHJpZ2dlck9wZW4gdG91Y2hlbmQuXCIrYS5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlbiB0b3VjaGNhbmNlbC5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIsZnVuY3Rpb24oYil7YS5fdG91Y2hSZWNvcmRFdmVudChiKX0pLGEuX19vcHRpb25zLnRyaWdnZXJPcGVuLmNsaWNrfHxhLl9fb3B0aW9ucy50cmlnZ2VyT3Blbi50YXAmJmguaGFzVG91Y2hDYXBhYmlsaXR5KXt2YXIgYj1cIlwiO2EuX19vcHRpb25zLnRyaWdnZXJPcGVuLmNsaWNrJiYoYis9XCJjbGljay5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuIFwiKSxhLl9fb3B0aW9ucy50cmlnZ2VyT3Blbi50YXAmJmguaGFzVG91Y2hDYXBhYmlsaXR5JiYoYis9XCJ0b3VjaGVuZC5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIpLGEuXyRvcmlnaW4ub24oYixmdW5jdGlvbihiKXthLl90b3VjaElzTWVhbmluZ2Z1bEV2ZW50KGIpJiZhLl9vcGVuKGIpfSl9aWYoYS5fX29wdGlvbnMudHJpZ2dlck9wZW4ubW91c2VlbnRlcnx8YS5fX29wdGlvbnMudHJpZ2dlck9wZW4udG91Y2hzdGFydCYmaC5oYXNUb3VjaENhcGFiaWxpdHkpe3ZhciBiPVwiXCI7YS5fX29wdGlvbnMudHJpZ2dlck9wZW4ubW91c2VlbnRlciYmKGIrPVwibW91c2VlbnRlci5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuIFwiKSxhLl9fb3B0aW9ucy50cmlnZ2VyT3Blbi50b3VjaHN0YXJ0JiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSYmKGIrPVwidG91Y2hzdGFydC5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIpLGEuXyRvcmlnaW4ub24oYixmdW5jdGlvbihiKXshYS5fdG91Y2hJc1RvdWNoRXZlbnQoYikmJmEuX3RvdWNoSXNFbXVsYXRlZEV2ZW50KGIpfHwoYS5fX3BvaW50ZXJJc092ZXJPcmlnaW49ITAsYS5fb3BlblNob3J0bHkoYikpfSl9aWYoYS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLm1vdXNlbGVhdmV8fGEuX19vcHRpb25zLnRyaWdnZXJDbG9zZS50b3VjaGxlYXZlJiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSl7dmFyIGI9XCJcIjthLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UubW91c2VsZWF2ZSYmKGIrPVwibW91c2VsZWF2ZS5cIithLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuIFwiKSxhLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudG91Y2hsZWF2ZSYmaC5oYXNUb3VjaENhcGFiaWxpdHkmJihiKz1cInRvdWNoZW5kLlwiK2EuX19uYW1lc3BhY2UrXCItdHJpZ2dlck9wZW4gdG91Y2hjYW5jZWwuXCIrYS5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlblwiKSxhLl8kb3JpZ2luLm9uKGIsZnVuY3Rpb24oYil7YS5fdG91Y2hJc01lYW5pbmdmdWxFdmVudChiKSYmKGEuX19wb2ludGVySXNPdmVyT3JpZ2luPSExKX0pfXJldHVybiBhfSxfX3ByZXBhcmVUb29sdGlwOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPWIuX19vcHRpb25zLmludGVyYWN0aXZlP1wiYXV0b1wiOlwiXCI7cmV0dXJuIGIuXyR0b29sdGlwLmF0dHIoXCJpZFwiLGIuX19uYW1lc3BhY2UpLmNzcyh7XCJwb2ludGVyLWV2ZW50c1wiOmMsekluZGV4OmIuX19vcHRpb25zLnpJbmRleH0pLGEuZWFjaChiLl9fcHJldmlvdXNUaGVtZXMsZnVuY3Rpb24oYSxjKXtiLl8kdG9vbHRpcC5yZW1vdmVDbGFzcyhjKX0pLGEuZWFjaChiLl9fb3B0aW9ucy50aGVtZSxmdW5jdGlvbihhLGMpe2IuXyR0b29sdGlwLmFkZENsYXNzKGMpfSksYi5fX3ByZXZpb3VzVGhlbWVzPWEubWVyZ2UoW10sYi5fX29wdGlvbnMudGhlbWUpLGJ9LF9fc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbihiKXt2YXIgYz10aGlzO2lmKGMuX19vcHRpb25zLnRyaWdnZXJDbG9zZS5zY3JvbGwpYy5fY2xvc2UoYik7ZWxzZSBpZihkKGMuXyRvcmlnaW4pJiZkKGMuXyR0b29sdGlwKSl7dmFyIGU9bnVsbDtpZihiLnRhcmdldD09PWgud2luZG93LmRvY3VtZW50KWMuX19HZW9tZXRyeS5vcmlnaW4uZml4ZWRMaW5lYWdlfHxjLl9fb3B0aW9ucy5yZXBvc2l0aW9uT25TY3JvbGwmJmMucmVwb3NpdGlvbihiKTtlbHNle2U9Yy5fX2dlb21ldHJ5KCk7dmFyIGY9ITE7aWYoXCJmaXhlZFwiIT1jLl8kb3JpZ2luLmNzcyhcInBvc2l0aW9uXCIpJiZjLl9fJG9yaWdpblBhcmVudHMuZWFjaChmdW5jdGlvbihiLGMpe3ZhciBkPWEoYyksZz1kLmNzcyhcIm92ZXJmbG93LXhcIiksaD1kLmNzcyhcIm92ZXJmbG93LXlcIik7aWYoXCJ2aXNpYmxlXCIhPWd8fFwidmlzaWJsZVwiIT1oKXt2YXIgaT1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKFwidmlzaWJsZVwiIT1nJiYoZS5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQ8aS5sZWZ0fHxlLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQ+aS5yaWdodCkpcmV0dXJuIGY9ITAsITE7aWYoXCJ2aXNpYmxlXCIhPWgmJihlLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wPGkudG9wfHxlLm9yaWdpbi53aW5kb3dPZmZzZXQuYm90dG9tPmkuYm90dG9tKSlyZXR1cm4gZj0hMCwhMX1yZXR1cm5cImZpeGVkXCI9PWQuY3NzKFwicG9zaXRpb25cIik/ITE6dm9pZCAwfSksZiljLl8kdG9vbHRpcC5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIik7ZWxzZSBpZihjLl8kdG9vbHRpcC5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJ2aXNpYmxlXCIpLGMuX19vcHRpb25zLnJlcG9zaXRpb25PblNjcm9sbCljLnJlcG9zaXRpb24oYik7ZWxzZXt2YXIgZz1lLm9yaWdpbi5vZmZzZXQubGVmdC1jLl9fR2VvbWV0cnkub3JpZ2luLm9mZnNldC5sZWZ0LGk9ZS5vcmlnaW4ub2Zmc2V0LnRvcC1jLl9fR2VvbWV0cnkub3JpZ2luLm9mZnNldC50b3A7Yy5fJHRvb2x0aXAuY3NzKHtsZWZ0OmMuX19sYXN0UG9zaXRpb24uY29vcmQubGVmdCtnLHRvcDpjLl9fbGFzdFBvc2l0aW9uLmNvb3JkLnRvcCtpfSl9fWMuX3RyaWdnZXIoe3R5cGU6XCJzY3JvbGxcIixldmVudDpiLGdlbzplfSl9cmV0dXJuIGN9LF9fc3RhdGVTZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX19zdGF0ZT1hLHRoaXMuX3RyaWdnZXIoe3R5cGU6XCJzdGF0ZVwiLHN0YXRlOmF9KSx0aGlzfSxfX3RpbWVvdXRzQ2xlYXI6ZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KHRoaXMuX190aW1lb3V0cy5vcGVuKSx0aGlzLl9fdGltZW91dHMub3Blbj1udWxsLGEuZWFjaCh0aGlzLl9fdGltZW91dHMuY2xvc2UsZnVuY3Rpb24oYSxiKXtjbGVhclRpbWVvdXQoYil9KSx0aGlzLl9fdGltZW91dHMuY2xvc2U9W10sdGhpc30sX190cmFja2VyU3RhcnQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5fJHRvb2x0aXAuZmluZChcIi50b29sdGlwc3Rlci1jb250ZW50XCIpO3JldHVybiBhLl9fb3B0aW9ucy50cmFja1Rvb2x0aXAmJihhLl9fY29udGVudEJjcj1iWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxhLl9fdHJhY2tlcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2lmKGQoYS5fJG9yaWdpbikmJmQoYS5fJHRvb2x0aXApKXtpZihhLl9fb3B0aW9ucy50cmFja09yaWdpbil7dmFyIGU9YS5fX2dlb21ldHJ5KCksZj0hMTtjKGUub3JpZ2luLnNpemUsYS5fX0dlb21ldHJ5Lm9yaWdpbi5zaXplKSYmKGEuX19HZW9tZXRyeS5vcmlnaW4uZml4ZWRMaW5lYWdlP2MoZS5vcmlnaW4ud2luZG93T2Zmc2V0LGEuX19HZW9tZXRyeS5vcmlnaW4ud2luZG93T2Zmc2V0KSYmKGY9ITApOmMoZS5vcmlnaW4ub2Zmc2V0LGEuX19HZW9tZXRyeS5vcmlnaW4ub2Zmc2V0KSYmKGY9ITApKSxmfHwoYS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLm1vdXNlbGVhdmU/YS5fY2xvc2UoKTphLnJlcG9zaXRpb24oKSl9aWYoYS5fX29wdGlvbnMudHJhY2tUb29sdGlwKXt2YXIgZz1iWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2cuaGVpZ2h0PT09YS5fX2NvbnRlbnRCY3IuaGVpZ2h0JiZnLndpZHRoPT09YS5fX2NvbnRlbnRCY3Iud2lkdGh8fChhLnJlcG9zaXRpb24oKSxhLl9fY29udGVudEJjcj1nKX19ZWxzZSBhLl9jbG9zZSgpfSxhLl9fb3B0aW9ucy50cmFja2VySW50ZXJ2YWwpLGF9LF9jbG9zZTpmdW5jdGlvbihiLGMsZCl7dmFyIGU9dGhpcyxmPSEwO2lmKGUuX3RyaWdnZXIoe3R5cGU6XCJjbG9zZVwiLGV2ZW50OmIsc3RvcDpmdW5jdGlvbigpe2Y9ITF9fSksZnx8ZCl7YyYmZS5fX2NhbGxiYWNrcy5jbG9zZS5wdXNoKGMpLGUuX19jYWxsYmFja3Mub3Blbj1bXSxlLl9fdGltZW91dHNDbGVhcigpO3ZhciBnPWZ1bmN0aW9uKCl7YS5lYWNoKGUuX19jYWxsYmFja3MuY2xvc2UsZnVuY3Rpb24oYSxjKXtjLmNhbGwoZSxlLHtldmVudDpiLG9yaWdpbjplLl8kb3JpZ2luWzBdfSl9KSxlLl9fY2FsbGJhY2tzLmNsb3NlPVtdfTtpZihcImNsb3NlZFwiIT1lLl9fc3RhdGUpe3ZhciBpPSEwLGo9bmV3IERhdGUsaz1qLmdldFRpbWUoKSxsPWsrZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV07aWYoXCJkaXNhcHBlYXJpbmdcIj09ZS5fX3N0YXRlJiZsPmUuX19jbG9zaW5nVGltZSYmZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV0+MCYmKGk9ITEpLGkpe2UuX19jbG9zaW5nVGltZT1sLFwiZGlzYXBwZWFyaW5nXCIhPWUuX19zdGF0ZSYmZS5fX3N0YXRlU2V0KFwiZGlzYXBwZWFyaW5nXCIpO3ZhciBtPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChlLl9fdHJhY2tlciksZS5fdHJpZ2dlcih7dHlwZTpcImNsb3NpbmdcIixldmVudDpifSksZS5fJHRvb2x0aXAub2ZmKFwiLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItZHlpbmdcIiksYShoLndpbmRvdykub2ZmKFwiLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIpLGUuX18kb3JpZ2luUGFyZW50cy5lYWNoKGZ1bmN0aW9uKGIsYyl7YShjKS5vZmYoXCJzY3JvbGwuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2VcIil9KSxlLl9fJG9yaWdpblBhcmVudHM9bnVsbCxhKGgud2luZG93LmRvY3VtZW50LmJvZHkpLm9mZihcIi5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiKSxlLl8kb3JpZ2luLm9mZihcIi5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiKSxlLl9vZmYoXCJkaXNtaXNzYWJsZVwiKSxlLl9fc3RhdGVTZXQoXCJjbG9zZWRcIiksZS5fdHJpZ2dlcih7dHlwZTpcImFmdGVyXCIsZXZlbnQ6Yn0pLGUuX19vcHRpb25zLmZ1bmN0aW9uQWZ0ZXImJmUuX19vcHRpb25zLmZ1bmN0aW9uQWZ0ZXIuY2FsbChlLGUse2V2ZW50OmIsb3JpZ2luOmUuXyRvcmlnaW5bMF19KSxnKCl9O2guaGFzVHJhbnNpdGlvbnM/KGUuXyR0b29sdGlwLmNzcyh7XCItbW96LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzFdK1wibXNcIixcIi1tcy1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXStcIm1zXCIsXCItby1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXStcIm1zXCIsXCItd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzFdK1wibXNcIixcImFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzFdK1wibXNcIixcInRyYW5zaXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXStcIm1zXCJ9KSxlLl8kdG9vbHRpcC5jbGVhclF1ZXVlKCkucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3Rlci1zaG93XCIpLmFkZENsYXNzKFwidG9vbHRpcHN0ZXItZHlpbmdcIiksZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV0+MCYmZS5fJHRvb2x0aXAuZGVsYXkoZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMV0pLGUuXyR0b29sdGlwLnF1ZXVlKG0pKTplLl8kdG9vbHRpcC5zdG9wKCkuZmFkZU91dChlLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblsxXSxtKX19ZWxzZSBnKCl9cmV0dXJuIGV9LF9vZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fXyRlbWl0dGVyUHJpdmF0ZS5vZmYuYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX18kZW1pdHRlclByaXZhdGUub24uYXBwbHkodGhpcy5fXyRlbWl0dGVyUHJpdmF0ZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sX29uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLm9uZS5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKSx0aGlzfSxfb3BlbjpmdW5jdGlvbihiLGMpe3ZhciBlPXRoaXM7aWYoIWUuX19kZXN0cm95aW5nJiZkKGUuXyRvcmlnaW4pJiZlLl9fZW5hYmxlZCl7dmFyIGY9ITA7aWYoXCJjbG9zZWRcIj09ZS5fX3N0YXRlJiYoZS5fdHJpZ2dlcih7dHlwZTpcImJlZm9yZVwiLGV2ZW50OmIsc3RvcDpmdW5jdGlvbigpe2Y9ITF9fSksZiYmZS5fX29wdGlvbnMuZnVuY3Rpb25CZWZvcmUmJihmPWUuX19vcHRpb25zLmZ1bmN0aW9uQmVmb3JlLmNhbGwoZSxlLHtldmVudDpiLG9yaWdpbjplLl8kb3JpZ2luWzBdfSkpKSxmIT09ITEmJm51bGwhPT1lLl9fQ29udGVudCl7YyYmZS5fX2NhbGxiYWNrcy5vcGVuLnB1c2goYyksZS5fX2NhbGxiYWNrcy5jbG9zZT1bXSxlLl9fdGltZW91dHNDbGVhcigpO3ZhciBnLGk9ZnVuY3Rpb24oKXtcInN0YWJsZVwiIT1lLl9fc3RhdGUmJmUuX19zdGF0ZVNldChcInN0YWJsZVwiKSxhLmVhY2goZS5fX2NhbGxiYWNrcy5vcGVuLGZ1bmN0aW9uKGEsYil7Yi5jYWxsKGUsZSx7b3JpZ2luOmUuXyRvcmlnaW5bMF0sdG9vbHRpcDplLl8kdG9vbHRpcFswXX0pfSksZS5fX2NhbGxiYWNrcy5vcGVuPVtdfTtpZihcImNsb3NlZFwiIT09ZS5fX3N0YXRlKWc9MCxcImRpc2FwcGVhcmluZ1wiPT09ZS5fX3N0YXRlPyhlLl9fc3RhdGVTZXQoXCJhcHBlYXJpbmdcIiksaC5oYXNUcmFuc2l0aW9ucz8oZS5fJHRvb2x0aXAuY2xlYXJRdWV1ZSgpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItZHlpbmdcIikuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci1zaG93XCIpLGUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdPjAmJmUuXyR0b29sdGlwLmRlbGF5KGUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdKSxlLl8kdG9vbHRpcC5xdWV1ZShpKSk6ZS5fJHRvb2x0aXAuc3RvcCgpLmZhZGVJbihpKSk6XCJzdGFibGVcIj09ZS5fX3N0YXRlJiZpKCk7ZWxzZXtpZihlLl9fc3RhdGVTZXQoXCJhcHBlYXJpbmdcIiksZz1lLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXSxlLl9fY29udGVudEluc2VydCgpLGUucmVwb3NpdGlvbihiLCEwKSxoLmhhc1RyYW5zaXRpb25zPyhlLl8kdG9vbHRpcC5hZGRDbGFzcyhcInRvb2x0aXBzdGVyLVwiK2UuX19vcHRpb25zLmFuaW1hdGlvbikuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci1pbml0aWFsXCIpLmNzcyh7XCItbW96LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdK1wibXNcIixcIi1tcy1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXStcIm1zXCIsXCItby1hbmltYXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXStcIm1zXCIsXCItd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdK1wibXNcIixcImFuaW1hdGlvbi1kdXJhdGlvblwiOmUuX19vcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uWzBdK1wibXNcIixcInRyYW5zaXRpb24tZHVyYXRpb25cIjplLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXStcIm1zXCJ9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XCJjbG9zZWRcIiE9ZS5fX3N0YXRlJiYoZS5fJHRvb2x0aXAuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci1zaG93XCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItaW5pdGlhbFwiKSxlLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXT4wJiZlLl8kdG9vbHRpcC5kZWxheShlLl9fb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvblswXSksZS5fJHRvb2x0aXAucXVldWUoaSkpfSwwKSk6ZS5fJHRvb2x0aXAuY3NzKFwiZGlzcGxheVwiLFwibm9uZVwiKS5mYWRlSW4oZS5fX29wdGlvbnMuYW5pbWF0aW9uRHVyYXRpb25bMF0saSksZS5fX3RyYWNrZXJTdGFydCgpLGEoaC53aW5kb3cpLm9uKFwicmVzaXplLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIsZnVuY3Rpb24oYil7dmFyIGM9YShkb2N1bWVudC5hY3RpdmVFbGVtZW50KTsoYy5pcyhcImlucHV0XCIpfHxjLmlzKFwidGV4dGFyZWFcIikpJiZhLmNvbnRhaW5zKGUuXyR0b29sdGlwWzBdLGNbMF0pfHxlLnJlcG9zaXRpb24oYil9KS5vbihcInNjcm9sbC5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiLGZ1bmN0aW9uKGEpe2UuX19zY3JvbGxIYW5kbGVyKGEpfSksZS5fXyRvcmlnaW5QYXJlbnRzPWUuXyRvcmlnaW4ucGFyZW50cygpLGUuX18kb3JpZ2luUGFyZW50cy5lYWNoKGZ1bmN0aW9uKGIsYyl7YShjKS5vbihcInNjcm9sbC5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiLGZ1bmN0aW9uKGEpe2UuX19zY3JvbGxIYW5kbGVyKGEpfSl9KSxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UubW91c2VsZWF2ZXx8ZS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLnRvdWNobGVhdmUmJmguaGFzVG91Y2hDYXBhYmlsaXR5KXtlLl9vbihcImRpc21pc3NhYmxlXCIsZnVuY3Rpb24oYSl7YS5kaXNtaXNzYWJsZT9hLmRlbGF5PyhtPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9jbG9zZShhLmV2ZW50KX0sYS5kZWxheSksZS5fX3RpbWVvdXRzLmNsb3NlLnB1c2gobSkpOmUuX2Nsb3NlKGEpOmNsZWFyVGltZW91dChtKX0pO3ZhciBqPWUuXyRvcmlnaW4saz1cIlwiLGw9XCJcIixtPW51bGw7ZS5fX29wdGlvbnMuaW50ZXJhY3RpdmUmJihqPWouYWRkKGUuXyR0b29sdGlwKSksZS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLm1vdXNlbGVhdmUmJihrKz1cIm1vdXNlZW50ZXIuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2UgXCIsbCs9XCJtb3VzZWxlYXZlLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlIFwiKSxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudG91Y2hsZWF2ZSYmaC5oYXNUb3VjaENhcGFiaWxpdHkmJihrKz1cInRvdWNoc3RhcnQuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2VcIixsKz1cInRvdWNoZW5kLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlIHRvdWNoY2FuY2VsLlwiK2UuX19uYW1lc3BhY2UrXCItdHJpZ2dlckNsb3NlXCIpLGoub24obCxmdW5jdGlvbihhKXtpZihlLl90b3VjaElzVG91Y2hFdmVudChhKXx8IWUuX3RvdWNoSXNFbXVsYXRlZEV2ZW50KGEpKXt2YXIgYj1cIm1vdXNlbGVhdmVcIj09YS50eXBlP2UuX19vcHRpb25zLmRlbGF5OmUuX19vcHRpb25zLmRlbGF5VG91Y2g7ZS5fdHJpZ2dlcih7ZGVsYXk6YlsxXSxkaXNtaXNzYWJsZTohMCxldmVudDphLHR5cGU6XCJkaXNtaXNzYWJsZVwifSl9fSkub24oayxmdW5jdGlvbihhKXshZS5fdG91Y2hJc1RvdWNoRXZlbnQoYSkmJmUuX3RvdWNoSXNFbXVsYXRlZEV2ZW50KGEpfHxlLl90cmlnZ2VyKHtkaXNtaXNzYWJsZTohMSxldmVudDphLHR5cGU6XCJkaXNtaXNzYWJsZVwifSl9KX1lLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2Uub3JpZ2luQ2xpY2smJmUuXyRvcmlnaW4ub24oXCJjbGljay5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiLGZ1bmN0aW9uKGEpe2UuX3RvdWNoSXNUb3VjaEV2ZW50KGEpfHxlLl90b3VjaElzRW11bGF0ZWRFdmVudChhKXx8ZS5fY2xvc2UoYSl9KSwoZS5fX29wdGlvbnMudHJpZ2dlckNsb3NlLmNsaWNrfHxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudGFwJiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihcImNsb3NlZFwiIT1lLl9fc3RhdGUpe3ZhciBiPVwiXCIsYz1hKGgud2luZG93LmRvY3VtZW50LmJvZHkpO2UuX19vcHRpb25zLnRyaWdnZXJDbG9zZS5jbGljayYmKGIrPVwiY2xpY2suXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2UgXCIpLGUuX19vcHRpb25zLnRyaWdnZXJDbG9zZS50YXAmJmguaGFzVG91Y2hDYXBhYmlsaXR5JiYoYis9XCJ0b3VjaGVuZC5cIitlLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJDbG9zZVwiKSxjLm9uKGIsZnVuY3Rpb24oYil7ZS5fdG91Y2hJc01lYW5pbmdmdWxFdmVudChiKSYmKGUuX3RvdWNoUmVjb3JkRXZlbnQoYiksZS5fX29wdGlvbnMuaW50ZXJhY3RpdmUmJmEuY29udGFpbnMoZS5fJHRvb2x0aXBbMF0sYi50YXJnZXQpfHxlLl9jbG9zZShiKSl9KSxlLl9fb3B0aW9ucy50cmlnZ2VyQ2xvc2UudGFwJiZoLmhhc1RvdWNoQ2FwYWJpbGl0eSYmYy5vbihcInRvdWNoc3RhcnQuXCIrZS5fX25hbWVzcGFjZStcIi10cmlnZ2VyQ2xvc2VcIixmdW5jdGlvbihhKXtlLl90b3VjaFJlY29yZEV2ZW50KGEpfSl9fSwwKSxlLl90cmlnZ2VyKFwicmVhZHlcIiksZS5fX29wdGlvbnMuZnVuY3Rpb25SZWFkeSYmZS5fX29wdGlvbnMuZnVuY3Rpb25SZWFkeS5jYWxsKGUsZSx7b3JpZ2luOmUuXyRvcmlnaW5bMF0sdG9vbHRpcDplLl8kdG9vbHRpcFswXX0pfWlmKGUuX19vcHRpb25zLnRpbWVyPjApe3ZhciBtPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9jbG9zZSgpfSxlLl9fb3B0aW9ucy50aW1lcitnKTtlLl9fdGltZW91dHMuY2xvc2UucHVzaChtKX19fXJldHVybiBlfSxfb3BlblNob3J0bHk6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPSEwO2lmKFwic3RhYmxlXCIhPWIuX19zdGF0ZSYmXCJhcHBlYXJpbmdcIiE9Yi5fX3N0YXRlJiYhYi5fX3RpbWVvdXRzLm9wZW4mJihiLl90cmlnZ2VyKHt0eXBlOlwic3RhcnRcIixldmVudDphLHN0b3A6ZnVuY3Rpb24oKXtjPSExfX0pLGMpKXt2YXIgZD0wPT1hLnR5cGUuaW5kZXhPZihcInRvdWNoXCIpP2IuX19vcHRpb25zLmRlbGF5VG91Y2g6Yi5fX29wdGlvbnMuZGVsYXk7ZFswXT9iLl9fdGltZW91dHMub3Blbj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5fX3RpbWVvdXRzLm9wZW49bnVsbCxiLl9fcG9pbnRlcklzT3Zlck9yaWdpbiYmYi5fdG91Y2hJc01lYW5pbmdmdWxFdmVudChhKT8oYi5fdHJpZ2dlcihcInN0YXJ0ZW5kXCIpLGIuX29wZW4oYSkpOmIuX3RyaWdnZXIoXCJzdGFydGNhbmNlbFwiKX0sZFswXSk6KGIuX3RyaWdnZXIoXCJzdGFydGVuZFwiKSxiLl9vcGVuKGEpKX1yZXR1cm4gYn0sX29wdGlvbnNFeHRyYWN0OmZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcyxlPWEuZXh0ZW5kKCEwLHt9LGMpLGY9ZC5fX29wdGlvbnNbYl07cmV0dXJuIGZ8fChmPXt9LGEuZWFjaChjLGZ1bmN0aW9uKGEsYil7dmFyIGM9ZC5fX29wdGlvbnNbYV07dm9pZCAwIT09YyYmKGZbYV09Yyl9KSksYS5lYWNoKGUsZnVuY3Rpb24oYixjKXt2b2lkIDAhPT1mW2JdJiYoXCJvYmplY3RcIiE9dHlwZW9mIGN8fGMgaW5zdGFuY2VvZiBBcnJheXx8bnVsbD09Y3x8XCJvYmplY3RcIiE9dHlwZW9mIGZbYl18fGZbYl1pbnN0YW5jZW9mIEFycmF5fHxudWxsPT1mW2JdP2VbYl09ZltiXTphLmV4dGVuZChlW2JdLGZbYl0pKX0pLGV9LF9wbHVnOmZ1bmN0aW9uKGIpe3ZhciBjPWEudG9vbHRpcHN0ZXIuX3BsdWdpbihiKTtpZighYyl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcIicrYisnXCIgcGx1Z2luIGlzIG5vdCBkZWZpbmVkJyk7cmV0dXJuIGMuaW5zdGFuY2UmJmEudG9vbHRpcHN0ZXIuX19icmlkZ2UoYy5pbnN0YW5jZSx0aGlzLGMubmFtZSksdGhpc30sX3RvdWNoSXNFbXVsYXRlZEV2ZW50OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0hMSxjPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGQ9dGhpcy5fX3RvdWNoRXZlbnRzLmxlbmd0aC0xO2Q+PTA7ZC0tKXt2YXIgZT10aGlzLl9fdG91Y2hFdmVudHNbZF07aWYoIShjLWUudGltZTw1MDApKWJyZWFrO2UudGFyZ2V0PT09YS50YXJnZXQmJihiPSEwKX1yZXR1cm4gYn0sX3RvdWNoSXNNZWFuaW5nZnVsRXZlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX3RvdWNoSXNUb3VjaEV2ZW50KGEpJiYhdGhpcy5fdG91Y2hTd2lwZWQoYS50YXJnZXQpfHwhdGhpcy5fdG91Y2hJc1RvdWNoRXZlbnQoYSkmJiF0aGlzLl90b3VjaElzRW11bGF0ZWRFdmVudChhKX0sX3RvdWNoSXNUb3VjaEV2ZW50OmZ1bmN0aW9uKGEpe3JldHVybiAwPT1hLnR5cGUuaW5kZXhPZihcInRvdWNoXCIpfSxfdG91Y2hSZWNvcmRFdmVudDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fdG91Y2hJc1RvdWNoRXZlbnQoYSkmJihhLnRpbWU9KG5ldyBEYXRlKS5nZXRUaW1lKCksdGhpcy5fX3RvdWNoRXZlbnRzLnB1c2goYSkpLHRoaXN9LF90b3VjaFN3aXBlZDpmdW5jdGlvbihhKXtmb3IodmFyIGI9ITEsYz10aGlzLl9fdG91Y2hFdmVudHMubGVuZ3RoLTE7Yz49MDtjLS0pe3ZhciBkPXRoaXMuX190b3VjaEV2ZW50c1tjXTtpZihcInRvdWNobW92ZVwiPT1kLnR5cGUpe2I9ITA7YnJlYWt9aWYoXCJ0b3VjaHN0YXJ0XCI9PWQudHlwZSYmYT09PWQudGFyZ2V0KWJyZWFrfXJldHVybiBifSxfdHJpZ2dlcjpmdW5jdGlvbigpe3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBiWzBdJiYoYlswXT17dHlwZTpiWzBdfSksYlswXS5pbnN0YW5jZT10aGlzLGJbMF0ub3JpZ2luPXRoaXMuXyRvcmlnaW4/dGhpcy5fJG9yaWdpblswXTpudWxsLGJbMF0udG9vbHRpcD10aGlzLl8kdG9vbHRpcD90aGlzLl8kdG9vbHRpcFswXTpudWxsLHRoaXMuX18kZW1pdHRlclByaXZhdGUudHJpZ2dlci5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQcml2YXRlLGIpLGEudG9vbHRpcHN0ZXIuX3RyaWdnZXIuYXBwbHkoYS50b29sdGlwc3RlcixiKSx0aGlzLl9fJGVtaXR0ZXJQdWJsaWMudHJpZ2dlci5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsYiksdGhpc30sX3VucGx1ZzpmdW5jdGlvbihiKXt2YXIgYz10aGlzO2lmKGNbYl0pe3ZhciBkPWEudG9vbHRpcHN0ZXIuX3BsdWdpbihiKTtkLmluc3RhbmNlJiZhLmVhY2goZC5pbnN0YW5jZSxmdW5jdGlvbihhLGQpe2NbYV0mJmNbYV0uYnJpZGdlZD09PWNbYl0mJmRlbGV0ZSBjW2FdfSksY1tiXS5fX2Rlc3Ryb3kmJmNbYl0uX19kZXN0cm95KCksZGVsZXRlIGNbYl19cmV0dXJuIGN9LGNsb3NlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9fZGVzdHJveWVkP3RoaXMuX19kZXN0cm95RXJyb3IoKTp0aGlzLl9jbG9zZShudWxsLGEpLHRoaXN9LGNvbnRlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZih2b2lkIDA9PT1hKXJldHVybiBiLl9fQ29udGVudDtpZihiLl9fZGVzdHJveWVkKWIuX19kZXN0cm95RXJyb3IoKTtlbHNlIGlmKGIuX19jb250ZW50U2V0KGEpLG51bGwhPT1iLl9fQ29udGVudCl7aWYoXCJjbG9zZWRcIiE9PWIuX19zdGF0ZSYmKGIuX19jb250ZW50SW5zZXJ0KCksYi5yZXBvc2l0aW9uKCksYi5fX29wdGlvbnMudXBkYXRlQW5pbWF0aW9uKSlpZihoLmhhc1RyYW5zaXRpb25zKXt2YXIgYz1iLl9fb3B0aW9ucy51cGRhdGVBbmltYXRpb247Yi5fJHRvb2x0aXAuYWRkQ2xhc3MoXCJ0b29sdGlwc3Rlci11cGRhdGUtXCIrYyksc2V0VGltZW91dChmdW5jdGlvbigpe1wiY2xvc2VkXCIhPWIuX19zdGF0ZSYmYi5fJHRvb2x0aXAucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3Rlci11cGRhdGUtXCIrYyl9LDFlMyl9ZWxzZSBiLl8kdG9vbHRpcC5mYWRlVG8oMjAwLC41LGZ1bmN0aW9uKCl7XCJjbG9zZWRcIiE9Yi5fX3N0YXRlJiZiLl8kdG9vbHRpcC5mYWRlVG8oMjAwLDEpfSl9ZWxzZSBiLl9jbG9zZSgpO3JldHVybiBifSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcztpZihiLl9fZGVzdHJveWVkKWIuX19kZXN0cm95RXJyb3IoKTtlbHNle1wiY2xvc2VkXCIhPWIuX19zdGF0ZT9iLm9wdGlvbihcImFuaW1hdGlvbkR1cmF0aW9uXCIsMCkuX2Nsb3NlKG51bGwsbnVsbCwhMCk6Yi5fX3RpbWVvdXRzQ2xlYXIoKSxiLl90cmlnZ2VyKFwiZGVzdHJveVwiKSxiLl9fZGVzdHJveWVkPSEwLGIuXyRvcmlnaW4ucmVtb3ZlRGF0YShiLl9fbmFtZXNwYWNlKS5vZmYoXCIuXCIrYi5fX25hbWVzcGFjZStcIi10cmlnZ2VyT3BlblwiKSxhKGgud2luZG93LmRvY3VtZW50LmJvZHkpLm9mZihcIi5cIitiLl9fbmFtZXNwYWNlK1wiLXRyaWdnZXJPcGVuXCIpO3ZhciBjPWIuXyRvcmlnaW4uZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpO2lmKGMpaWYoMT09PWMubGVuZ3RoKXt2YXIgZD1udWxsO1wicHJldmlvdXNcIj09Yi5fX29wdGlvbnMucmVzdG9yYXRpb24/ZD1iLl8kb3JpZ2luLmRhdGEoXCJ0b29sdGlwc3Rlci1pbml0aWFsVGl0bGVcIik6XCJjdXJyZW50XCI9PWIuX19vcHRpb25zLnJlc3RvcmF0aW9uJiYoZD1cInN0cmluZ1wiPT10eXBlb2YgYi5fX0NvbnRlbnQ/Yi5fX0NvbnRlbnQ6YShcIjxkaXY+PC9kaXY+XCIpLmFwcGVuZChiLl9fQ29udGVudCkuaHRtbCgpKSxkJiZiLl8kb3JpZ2luLmF0dHIoXCJ0aXRsZVwiLGQpLGIuXyRvcmlnaW4ucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3RlcmVkXCIpLGIuXyRvcmlnaW4ucmVtb3ZlRGF0YShcInRvb2x0aXBzdGVyLW5zXCIpLnJlbW92ZURhdGEoXCJ0b29sdGlwc3Rlci1pbml0aWFsVGl0bGVcIil9ZWxzZSBjPWEuZ3JlcChjLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGEhPT1iLl9fbmFtZXNwYWNlfSksYi5fJG9yaWdpbi5kYXRhKFwidG9vbHRpcHN0ZXItbnNcIixjKTtiLl90cmlnZ2VyKFwiZGVzdHJveWVkXCIpLGIuX29mZigpLGIub2ZmKCksYi5fX0NvbnRlbnQ9bnVsbCxiLl9fJGVtaXR0ZXJQcml2YXRlPW51bGwsYi5fXyRlbWl0dGVyUHVibGljPW51bGwsYi5fX29wdGlvbnMucGFyZW50PW51bGwsYi5fJG9yaWdpbj1udWxsLGIuXyR0b29sdGlwPW51bGwsYS50b29sdGlwc3Rlci5fX2luc3RhbmNlc0xhdGVzdEFycj1hLmdyZXAoYS50b29sdGlwc3Rlci5fX2luc3RhbmNlc0xhdGVzdEFycixmdW5jdGlvbihhLGMpe3JldHVybiBiIT09YX0pLGNsZWFySW50ZXJ2YWwoYi5fX2dhcmJhZ2VDb2xsZWN0b3IpfXJldHVybiBifSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kZXN0cm95ZWQ/KHRoaXMuX19kZXN0cm95RXJyb3IoKSx0aGlzKToodGhpcy5fY2xvc2UoKSx0aGlzLl9fZW5hYmxlZD0hMSx0aGlzKX0sZWxlbWVudE9yaWdpbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZGVzdHJveWVkP3ZvaWQgdGhpcy5fX2Rlc3Ryb3lFcnJvcigpOnRoaXMuXyRvcmlnaW5bMF19LGVsZW1lbnRUb29sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXyR0b29sdGlwP3RoaXMuXyR0b29sdGlwWzBdOm51bGx9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZW5hYmxlZD0hMCx0aGlzfSxoaWRlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNsb3NlKGEpfSxpbnN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxvZmY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2Rlc3Ryb3llZHx8dGhpcy5fXyRlbWl0dGVyUHVibGljLm9mZi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kZXN0cm95ZWQ/dGhpcy5fX2Rlc3Ryb3lFcnJvcigpOnRoaXMuX18kZW1pdHRlclB1YmxpYy5vbi5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9LG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZGVzdHJveWVkP3RoaXMuX19kZXN0cm95RXJyb3IoKTp0aGlzLl9fJGVtaXR0ZXJQdWJsaWMub25lLmFwcGx5KHRoaXMuX18kZW1pdHRlclB1YmxpYyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSksdGhpc30sb3BlbjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fX2Rlc3Ryb3llZD90aGlzLl9fZGVzdHJveUVycm9yKCk6dGhpcy5fb3BlbihudWxsLGEpLHRoaXN9LG9wdGlvbjpmdW5jdGlvbihiLGMpe3JldHVybiB2b2lkIDA9PT1jP3RoaXMuX19vcHRpb25zW2JdOih0aGlzLl9fZGVzdHJveWVkP3RoaXMuX19kZXN0cm95RXJyb3IoKToodGhpcy5fX29wdGlvbnNbYl09Yyx0aGlzLl9fb3B0aW9uc0Zvcm1hdCgpLGEuaW5BcnJheShiLFtcInRyaWdnZXJcIixcInRyaWdnZXJDbG9zZVwiLFwidHJpZ2dlck9wZW5cIl0pPj0wJiZ0aGlzLl9fcHJlcGFyZU9yaWdpbigpLFwic2VsZkRlc3RydWN0aW9uXCI9PT1iJiZ0aGlzLl9fcHJlcGFyZUdDKCkpLHRoaXMpfSxyZXBvc2l0aW9uOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztyZXR1cm4gYy5fX2Rlc3Ryb3llZD9jLl9fZGVzdHJveUVycm9yKCk6XCJjbG9zZWRcIiE9Yy5fX3N0YXRlJiZkKGMuXyRvcmlnaW4pJiYoYnx8ZChjLl8kdG9vbHRpcCkpJiYoYnx8Yy5fJHRvb2x0aXAuZGV0YWNoKCksYy5fX0dlb21ldHJ5PWMuX19nZW9tZXRyeSgpLGMuX3RyaWdnZXIoe3R5cGU6XCJyZXBvc2l0aW9uXCIsZXZlbnQ6YSxoZWxwZXI6e2dlbzpjLl9fR2VvbWV0cnl9fSkpLGN9LHNob3c6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub3BlbihhKX0sc3RhdHVzOmZ1bmN0aW9uKCl7cmV0dXJue2Rlc3Ryb3llZDp0aGlzLl9fZGVzdHJveWVkLGVuYWJsZWQ6dGhpcy5fX2VuYWJsZWQsb3BlbjpcImNsb3NlZFwiIT09dGhpcy5fX3N0YXRlLHN0YXRlOnRoaXMuX19zdGF0ZX19LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kZXN0cm95ZWQ/dGhpcy5fX2Rlc3Ryb3lFcnJvcigpOnRoaXMuX18kZW1pdHRlclB1YmxpYy50cmlnZ2VySGFuZGxlci5hcHBseSh0aGlzLl9fJGVtaXR0ZXJQdWJsaWMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpLHRoaXN9fSxhLmZuLnRvb2x0aXBzdGVyPWZ1bmN0aW9uKCl7dmFyIGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyksYz1cIllvdSBhcmUgdXNpbmcgYSBzaW5nbGUgSFRNTCBlbGVtZW50IGFzIGNvbnRlbnQgZm9yIHNldmVyYWwgdG9vbHRpcHMuIFlvdSBwcm9iYWJseSB3YW50IHRvIHNldCB0aGUgY29udGVudENsb25pbmcgb3B0aW9uIHRvIFRSVUUuXCI7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiWzBdKXt2YXIgZD1cIiMqJH4mXCI7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWEodGhpcykuZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpLGY9ZT9hKHRoaXMpLmRhdGEoZVswXSk6bnVsbDtpZighZil0aHJvdyBuZXcgRXJyb3IoXCJZb3UgY2FsbGVkIFRvb2x0aXBzdGVyJ3MgXFxcIlwiK2JbMF0rJ1wiIG1ldGhvZCBvbiBhbiB1bmluaXRpYWxpemVkIGVsZW1lbnQnKTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBmW2JbMF1dKXRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXRob2QgXCInK2JbMF0rJ1wiJyk7dGhpcy5sZW5ndGg+MSYmXCJjb250ZW50XCI9PWJbMF0mJihiWzFdaW5zdGFuY2VvZiBhfHxcIm9iamVjdFwiPT10eXBlb2YgYlsxXSYmbnVsbCE9YlsxXSYmYlsxXS50YWdOYW1lKSYmIWYuX19vcHRpb25zLmNvbnRlbnRDbG9uaW5nJiZmLl9fb3B0aW9ucy5kZWJ1ZyYmY29uc29sZS5sb2coYyk7dmFyIGc9ZltiWzBdXShiWzFdLGJbMl0pO3JldHVybiBnIT09Znx8XCJpbnN0YW5jZVwiPT09YlswXT8oZD1nLCExKTp2b2lkIDB9KSxcIiMqJH4mXCIhPT1kP2Q6dGhpc31hLnRvb2x0aXBzdGVyLl9faW5zdGFuY2VzTGF0ZXN0QXJyPVtdO3ZhciBlPWJbMF0mJnZvaWQgMCE9PWJbMF0ubXVsdGlwbGUsZz1lJiZiWzBdLm11bHRpcGxlfHwhZSYmZi5tdWx0aXBsZSxoPWJbMF0mJnZvaWQgMCE9PWJbMF0uY29udGVudCxpPWgmJmJbMF0uY29udGVudHx8IWgmJmYuY29udGVudCxqPWJbMF0mJnZvaWQgMCE9PWJbMF0uY29udGVudENsb25pbmcsaz1qJiZiWzBdLmNvbnRlbnRDbG9uaW5nfHwhaiYmZi5jb250ZW50Q2xvbmluZyxsPWJbMF0mJnZvaWQgMCE9PWJbMF0uZGVidWcsbT1sJiZiWzBdLmRlYnVnfHwhbCYmZi5kZWJ1ZztyZXR1cm4gdGhpcy5sZW5ndGg+MSYmKGkgaW5zdGFuY2VvZiBhfHxcIm9iamVjdFwiPT10eXBlb2YgaSYmbnVsbCE9aSYmaS50YWdOYW1lKSYmIWsmJm0mJmNvbnNvbGUubG9nKGMpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPSExLGQ9YSh0aGlzKSxlPWQuZGF0YShcInRvb2x0aXBzdGVyLW5zXCIpLGY9bnVsbDtlP2c/Yz0hMDptJiYoY29uc29sZS5sb2coXCJUb29sdGlwc3Rlcjogb25lIG9yIG1vcmUgdG9vbHRpcHMgYXJlIGFscmVhZHkgYXR0YWNoZWQgdG8gdGhlIGVsZW1lbnQgYmVsb3cuIElnbm9yaW5nLlwiKSxjb25zb2xlLmxvZyh0aGlzKSk6Yz0hMCxjJiYoZj1uZXcgYS5Ub29sdGlwc3Rlcih0aGlzLGJbMF0pLGV8fChlPVtdKSxlLnB1c2goZi5fX25hbWVzcGFjZSksZC5kYXRhKFwidG9vbHRpcHN0ZXItbnNcIixlKSxkLmRhdGEoZi5fX25hbWVzcGFjZSxmKSxmLl9fb3B0aW9ucy5mdW5jdGlvbkluaXQmJmYuX19vcHRpb25zLmZ1bmN0aW9uSW5pdC5jYWxsKGYsZix7b3JpZ2luOnRoaXN9KSxmLl90cmlnZ2VyKFwiaW5pdFwiKSksYS50b29sdGlwc3Rlci5fX2luc3RhbmNlc0xhdGVzdEFyci5wdXNoKGYpfSksdGhpc30sYi5wcm90b3R5cGU9e19faW5pdDpmdW5jdGlvbihiKXt0aGlzLl9fJHRvb2x0aXA9Yix0aGlzLl9fJHRvb2x0aXAuY3NzKHtsZWZ0OjAsb3ZlcmZsb3c6XCJoaWRkZW5cIixwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOjB9KS5maW5kKFwiLnRvb2x0aXBzdGVyLWNvbnRlbnRcIikuY3NzKFwib3ZlcmZsb3dcIixcImF1dG9cIiksdGhpcy4kY29udGFpbmVyPWEoJzxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1ydWxlclwiPjwvZGl2PicpLmFwcGVuZCh0aGlzLl9fJHRvb2x0aXApLmFwcGVuZFRvKGgud2luZG93LmRvY3VtZW50LmJvZHkpfSxfX2ZvcmNlUmVkcmF3OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fXyR0b29sdGlwLnBhcmVudCgpO3RoaXMuX18kdG9vbHRpcC5kZXRhY2goKSx0aGlzLl9fJHRvb2x0aXAuYXBwZW5kVG8oYSl9LGNvbnN0cmFpbjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmNvbnN0cmFpbnRzPXt3aWR0aDphLGhlaWdodDpifSx0aGlzLl9fJHRvb2x0aXAuY3NzKHtkaXNwbGF5OlwiYmxvY2tcIixoZWlnaHQ6XCJcIixvdmVyZmxvdzpcImF1dG9cIix3aWR0aDphfSksdGhpc30sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX18kdG9vbHRpcC5kZXRhY2goKS5maW5kKFwiLnRvb2x0aXBzdGVyLWNvbnRlbnRcIikuY3NzKHtkaXNwbGF5OlwiXCIsb3ZlcmZsb3c6XCJcIn0pLHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKX0sZnJlZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN0cmFpbnRzPW51bGwsdGhpcy5fXyR0b29sdGlwLmNzcyh7ZGlzcGxheTpcIlwiLGhlaWdodDpcIlwiLG92ZXJmbG93OlwidmlzaWJsZVwiLHdpZHRoOlwiXCJ9KSx0aGlzfSxtZWFzdXJlOmZ1bmN0aW9uKCl7dGhpcy5fX2ZvcmNlUmVkcmF3KCk7dmFyIGE9dGhpcy5fXyR0b29sdGlwWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGI9e3NpemU6e2hlaWdodDphLmhlaWdodHx8YS5ib3R0b20tYS50b3Asd2lkdGg6YS53aWR0aHx8YS5yaWdodC1hLmxlZnR9fTtpZih0aGlzLmNvbnN0cmFpbnRzKXt2YXIgYz10aGlzLl9fJHRvb2x0aXAuZmluZChcIi50b29sdGlwc3Rlci1jb250ZW50XCIpLGQ9dGhpcy5fXyR0b29sdGlwLm91dGVySGVpZ2h0KCksZT1jWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9e2hlaWdodDpkPD10aGlzLmNvbnN0cmFpbnRzLmhlaWdodCx3aWR0aDphLndpZHRoPD10aGlzLmNvbnN0cmFpbnRzLndpZHRoJiZlLndpZHRoPj1jWzBdLnNjcm9sbFdpZHRoLTF9O2IuZml0cz1mLmhlaWdodCYmZi53aWR0aH1yZXR1cm4gaC5JRSYmaC5JRTw9MTEmJmIuc2l6ZS53aWR0aCE9PWgud2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCYmKGIuc2l6ZS53aWR0aD1NYXRoLmNlaWwoYi5zaXplLndpZHRoKSsxKSxifX07dmFyIGo9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOy0xIT1qLmluZGV4T2YoXCJtc2llXCIpP2guSUU9cGFyc2VJbnQoai5zcGxpdChcIm1zaWVcIilbMV0pOi0xIT09ai50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJ0cmlkZW50XCIpJiYtMSE9PWouaW5kZXhPZihcIiBydjoxMVwiKT9oLklFPTExOi0xIT1qLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImVkZ2UvXCIpJiYoaC5JRT1wYXJzZUludChqLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCJlZGdlL1wiKVsxXSkpO3ZhciBrPVwidG9vbHRpcHN0ZXIuc2lkZVRpcFwiO3JldHVybiBhLnRvb2x0aXBzdGVyLl9wbHVnaW4oe25hbWU6ayxpbnN0YW5jZTp7X19kZWZhdWx0czpmdW5jdGlvbigpe3JldHVybnthcnJvdzohMCxkaXN0YW5jZTo2LGZ1bmN0aW9uUG9zaXRpb246bnVsbCxtYXhXaWR0aDpudWxsLG1pbkludGVyc2VjdGlvbjoxNixtaW5XaWR0aDowLHBvc2l0aW9uOm51bGwsc2lkZTpcInRvcFwiLHZpZXdwb3J0QXdhcmU6ITB9fSxfX2luaXQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztiLl9faW5zdGFuY2U9YSxiLl9fbmFtZXNwYWNlPVwidG9vbHRpcHN0ZXItc2lkZVRpcC1cIitNYXRoLnJvdW5kKDFlNipNYXRoLnJhbmRvbSgpKSxiLl9fcHJldmlvdXNTdGF0ZT1cImNsb3NlZFwiLGIuX19vcHRpb25zLGIuX19vcHRpb25zRm9ybWF0KCksYi5fX2luc3RhbmNlLl9vbihcInN0YXRlLlwiK2IuX19uYW1lc3BhY2UsZnVuY3Rpb24oYSl7XCJjbG9zZWRcIj09YS5zdGF0ZT9iLl9fY2xvc2UoKTpcImFwcGVhcmluZ1wiPT1hLnN0YXRlJiZcImNsb3NlZFwiPT1iLl9fcHJldmlvdXNTdGF0ZSYmYi5fX2NyZWF0ZSgpLGIuX19wcmV2aW91c1N0YXRlPWEuc3RhdGV9KSxiLl9faW5zdGFuY2UuX29uKFwib3B0aW9ucy5cIitiLl9fbmFtZXNwYWNlLGZ1bmN0aW9uKCl7Yi5fX29wdGlvbnNGb3JtYXQoKX0pLGIuX19pbnN0YW5jZS5fb24oXCJyZXBvc2l0aW9uLlwiK2IuX19uYW1lc3BhY2UsZnVuY3Rpb24oYSl7Yi5fX3JlcG9zaXRpb24oYS5ldmVudCxhLmhlbHBlcil9KX0sX19jbG9zZTpmdW5jdGlvbigpe3RoaXMuX19pbnN0YW5jZS5jb250ZW50KClpbnN0YW5jZW9mIGEmJnRoaXMuX19pbnN0YW5jZS5jb250ZW50KCkuZGV0YWNoKCksdGhpcy5fX2luc3RhbmNlLl8kdG9vbHRpcC5yZW1vdmUoKSx0aGlzLl9faW5zdGFuY2UuXyR0b29sdGlwPW51bGx9LF9fY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGI9YSgnPGRpdiBjbGFzcz1cInRvb2x0aXBzdGVyLWJhc2UgdG9vbHRpcHN0ZXItc2lkZXRpcFwiPjxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1ib3hcIj48ZGl2IGNsYXNzPVwidG9vbHRpcHN0ZXItY29udGVudFwiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1hcnJvd1wiPjxkaXYgY2xhc3M9XCJ0b29sdGlwc3Rlci1hcnJvdy11bmNyb3BwZWRcIj48ZGl2IGNsYXNzPVwidG9vbHRpcHN0ZXItYXJyb3ctYm9yZGVyXCI+PC9kaXY+PGRpdiBjbGFzcz1cInRvb2x0aXBzdGVyLWFycm93LWJhY2tncm91bmRcIj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4nKTt0aGlzLl9fb3B0aW9ucy5hcnJvd3x8Yi5maW5kKFwiLnRvb2x0aXBzdGVyLWJveFwiKS5jc3MoXCJtYXJnaW5cIiwwKS5lbmQoKS5maW5kKFwiLnRvb2x0aXBzdGVyLWFycm93XCIpLmhpZGUoKSx0aGlzLl9fb3B0aW9ucy5taW5XaWR0aCYmYi5jc3MoXCJtaW4td2lkdGhcIix0aGlzLl9fb3B0aW9ucy5taW5XaWR0aCtcInB4XCIpLHRoaXMuX19vcHRpb25zLm1heFdpZHRoJiZiLmNzcyhcIm1heC13aWR0aFwiLHRoaXMuX19vcHRpb25zLm1heFdpZHRoK1wicHhcIiksXG50aGlzLl9faW5zdGFuY2UuXyR0b29sdGlwPWIsdGhpcy5fX2luc3RhbmNlLl90cmlnZ2VyKFwiY3JlYXRlZFwiKX0sX19kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX2luc3RhbmNlLl9vZmYoXCIuXCIrc2VsZi5fX25hbWVzcGFjZSl9LF9fb3B0aW9uc0Zvcm1hdDpmdW5jdGlvbigpe3ZhciBiPXRoaXM7aWYoYi5fX29wdGlvbnM9Yi5fX2luc3RhbmNlLl9vcHRpb25zRXh0cmFjdChrLGIuX19kZWZhdWx0cygpKSxiLl9fb3B0aW9ucy5wb3NpdGlvbiYmKGIuX19vcHRpb25zLnNpZGU9Yi5fX29wdGlvbnMucG9zaXRpb24pLFwib2JqZWN0XCIhPXR5cGVvZiBiLl9fb3B0aW9ucy5kaXN0YW5jZSYmKGIuX19vcHRpb25zLmRpc3RhbmNlPVtiLl9fb3B0aW9ucy5kaXN0YW5jZV0pLGIuX19vcHRpb25zLmRpc3RhbmNlLmxlbmd0aDw0JiYodm9pZCAwPT09Yi5fX29wdGlvbnMuZGlzdGFuY2VbMV0mJihiLl9fb3B0aW9ucy5kaXN0YW5jZVsxXT1iLl9fb3B0aW9ucy5kaXN0YW5jZVswXSksdm9pZCAwPT09Yi5fX29wdGlvbnMuZGlzdGFuY2VbMl0mJihiLl9fb3B0aW9ucy5kaXN0YW5jZVsyXT1iLl9fb3B0aW9ucy5kaXN0YW5jZVswXSksdm9pZCAwPT09Yi5fX29wdGlvbnMuZGlzdGFuY2VbM10mJihiLl9fb3B0aW9ucy5kaXN0YW5jZVszXT1iLl9fb3B0aW9ucy5kaXN0YW5jZVsxXSkpLGIuX19vcHRpb25zLmRpc3RhbmNlPXt0b3A6Yi5fX29wdGlvbnMuZGlzdGFuY2VbMF0scmlnaHQ6Yi5fX29wdGlvbnMuZGlzdGFuY2VbMV0sYm90dG9tOmIuX19vcHRpb25zLmRpc3RhbmNlWzJdLGxlZnQ6Yi5fX29wdGlvbnMuZGlzdGFuY2VbM119LFwic3RyaW5nXCI9PXR5cGVvZiBiLl9fb3B0aW9ucy5zaWRlKXt2YXIgYz17dG9wOlwiYm90dG9tXCIscmlnaHQ6XCJsZWZ0XCIsYm90dG9tOlwidG9wXCIsbGVmdDpcInJpZ2h0XCJ9O2IuX19vcHRpb25zLnNpZGU9W2IuX19vcHRpb25zLnNpZGUsY1tiLl9fb3B0aW9ucy5zaWRlXV0sXCJsZWZ0XCI9PWIuX19vcHRpb25zLnNpZGVbMF18fFwicmlnaHRcIj09Yi5fX29wdGlvbnMuc2lkZVswXT9iLl9fb3B0aW9ucy5zaWRlLnB1c2goXCJ0b3BcIixcImJvdHRvbVwiKTpiLl9fb3B0aW9ucy5zaWRlLnB1c2goXCJyaWdodFwiLFwibGVmdFwiKX02PT09YS50b29sdGlwc3Rlci5fZW52LklFJiZiLl9fb3B0aW9ucy5hcnJvdyE9PSEwJiYoYi5fX29wdGlvbnMuYXJyb3c9ITEpfSxfX3JlcG9zaXRpb246ZnVuY3Rpb24oYixjKXt2YXIgZCxlPXRoaXMsZj1lLl9fdGFyZ2V0RmluZChjKSxnPVtdO2UuX19pbnN0YW5jZS5fJHRvb2x0aXAuZGV0YWNoKCk7dmFyIGg9ZS5fX2luc3RhbmNlLl8kdG9vbHRpcC5jbG9uZSgpLGk9YS50b29sdGlwc3Rlci5fZ2V0UnVsZXIoaCksaj0hMSxrPWUuX19pbnN0YW5jZS5vcHRpb24oXCJhbmltYXRpb25cIik7c3dpdGNoKGsmJmgucmVtb3ZlQ2xhc3MoXCJ0b29sdGlwc3Rlci1cIitrKSxhLmVhY2goW1wid2luZG93XCIsXCJkb2N1bWVudFwiXSxmdW5jdGlvbihkLGspe3ZhciBsPW51bGw7aWYoZS5fX2luc3RhbmNlLl90cmlnZ2VyKHtjb250YWluZXI6ayxoZWxwZXI6YyxzYXRpc2ZpZWQ6aix0YWtlVGVzdDpmdW5jdGlvbihhKXtsPWF9LHJlc3VsdHM6Zyx0eXBlOlwicG9zaXRpb25UZXN0XCJ9KSwxPT1sfHwwIT1sJiYwPT1qJiYoXCJ3aW5kb3dcIiE9a3x8ZS5fX29wdGlvbnMudmlld3BvcnRBd2FyZSkpZm9yKHZhciBkPTA7ZDxlLl9fb3B0aW9ucy5zaWRlLmxlbmd0aDtkKyspe3ZhciBtPXtob3Jpem9udGFsOjAsdmVydGljYWw6MH0sbj1lLl9fb3B0aW9ucy5zaWRlW2RdO1widG9wXCI9PW58fFwiYm90dG9tXCI9PW4/bS52ZXJ0aWNhbD1lLl9fb3B0aW9ucy5kaXN0YW5jZVtuXTptLmhvcml6b250YWw9ZS5fX29wdGlvbnMuZGlzdGFuY2Vbbl0sZS5fX3NpZGVDaGFuZ2UoaCxuKSxhLmVhY2goW1wibmF0dXJhbFwiLFwiY29uc3RyYWluZWRcIl0sZnVuY3Rpb24oYSxkKXtpZihsPW51bGwsZS5fX2luc3RhbmNlLl90cmlnZ2VyKHtjb250YWluZXI6ayxldmVudDpiLGhlbHBlcjpjLG1vZGU6ZCxyZXN1bHRzOmcsc2F0aXNmaWVkOmosc2lkZTpuLHRha2VUZXN0OmZ1bmN0aW9uKGEpe2w9YX0sdHlwZTpcInBvc2l0aW9uVGVzdFwifSksMT09bHx8MCE9bCYmMD09ail7dmFyIGg9e2NvbnRhaW5lcjprLGRpc3RhbmNlOm0sZml0czpudWxsLG1vZGU6ZCxvdXRlclNpemU6bnVsbCxzaWRlOm4sc2l6ZTpudWxsLHRhcmdldDpmW25dLHdob2xlOm51bGx9LG89XCJuYXR1cmFsXCI9PWQ/aS5mcmVlKCk6aS5jb25zdHJhaW4oYy5nZW8uYXZhaWxhYmxlW2tdW25dLndpZHRoLW0uaG9yaXpvbnRhbCxjLmdlby5hdmFpbGFibGVba11bbl0uaGVpZ2h0LW0udmVydGljYWwpLHA9by5tZWFzdXJlKCk7aWYoaC5zaXplPXAuc2l6ZSxoLm91dGVyU2l6ZT17aGVpZ2h0OnAuc2l6ZS5oZWlnaHQrbS52ZXJ0aWNhbCx3aWR0aDpwLnNpemUud2lkdGgrbS5ob3Jpem9udGFsfSxcIm5hdHVyYWxcIj09ZD9jLmdlby5hdmFpbGFibGVba11bbl0ud2lkdGg+PWgub3V0ZXJTaXplLndpZHRoJiZjLmdlby5hdmFpbGFibGVba11bbl0uaGVpZ2h0Pj1oLm91dGVyU2l6ZS5oZWlnaHQ/aC5maXRzPSEwOmguZml0cz0hMTpoLmZpdHM9cC5maXRzLFwid2luZG93XCI9PWsmJihoLmZpdHM/XCJ0b3BcIj09bnx8XCJib3R0b21cIj09bj9oLndob2xlPWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQ+PWUuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbiYmYy5nZW8ud2luZG93LnNpemUud2lkdGgtYy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0Pj1lLl9fb3B0aW9ucy5taW5JbnRlcnNlY3Rpb246aC53aG9sZT1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmJvdHRvbT49ZS5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uJiZjLmdlby53aW5kb3cuc2l6ZS5oZWlnaHQtYy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC50b3A+PWUuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbjpoLndob2xlPSExKSxnLnB1c2goaCksaC53aG9sZSlqPSEwO2Vsc2UgaWYoXCJuYXR1cmFsXCI9PWgubW9kZSYmKGguZml0c3x8aC5zaXplLndpZHRoPD1jLmdlby5hdmFpbGFibGVba11bbl0ud2lkdGgpKXJldHVybiExfX0pfX0pLGUuX19pbnN0YW5jZS5fdHJpZ2dlcih7ZWRpdDpmdW5jdGlvbihhKXtnPWF9LGV2ZW50OmIsaGVscGVyOmMscmVzdWx0czpnLHR5cGU6XCJwb3NpdGlvblRlc3RlZFwifSksZy5zb3J0KGZ1bmN0aW9uKGEsYil7aWYoYS53aG9sZSYmIWIud2hvbGUpcmV0dXJuLTE7aWYoIWEud2hvbGUmJmIud2hvbGUpcmV0dXJuIDE7aWYoYS53aG9sZSYmYi53aG9sZSl7dmFyIGM9ZS5fX29wdGlvbnMuc2lkZS5pbmRleE9mKGEuc2lkZSksZD1lLl9fb3B0aW9ucy5zaWRlLmluZGV4T2YoYi5zaWRlKTtyZXR1cm4gZD5jPy0xOmM+ZD8xOlwibmF0dXJhbFwiPT1hLm1vZGU/LTE6MX1pZihhLmZpdHMmJiFiLmZpdHMpcmV0dXJuLTE7aWYoIWEuZml0cyYmYi5maXRzKXJldHVybiAxO2lmKGEuZml0cyYmYi5maXRzKXt2YXIgYz1lLl9fb3B0aW9ucy5zaWRlLmluZGV4T2YoYS5zaWRlKSxkPWUuX19vcHRpb25zLnNpZGUuaW5kZXhPZihiLnNpZGUpO3JldHVybiBkPmM/LTE6Yz5kPzE6XCJuYXR1cmFsXCI9PWEubW9kZT8tMToxfXJldHVyblwiZG9jdW1lbnRcIj09YS5jb250YWluZXImJlwiYm90dG9tXCI9PWEuc2lkZSYmXCJuYXR1cmFsXCI9PWEubW9kZT8tMToxfSksZD1nWzBdLGQuY29vcmQ9e30sZC5zaWRlKXtjYXNlXCJsZWZ0XCI6Y2FzZVwicmlnaHRcIjpkLmNvb3JkLnRvcD1NYXRoLmZsb29yKGQudGFyZ2V0LWQuc2l6ZS5oZWlnaHQvMik7YnJlYWs7Y2FzZVwiYm90dG9tXCI6Y2FzZVwidG9wXCI6ZC5jb29yZC5sZWZ0PU1hdGguZmxvb3IoZC50YXJnZXQtZC5zaXplLndpZHRoLzIpfXN3aXRjaChkLnNpZGUpe2Nhc2VcImxlZnRcIjpkLmNvb3JkLmxlZnQ9Yy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0LWQub3V0ZXJTaXplLndpZHRoO2JyZWFrO2Nhc2VcInJpZ2h0XCI6ZC5jb29yZC5sZWZ0PWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQrZC5kaXN0YW5jZS5ob3Jpem9udGFsO2JyZWFrO2Nhc2VcInRvcFwiOmQuY29vcmQudG9wPWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wLWQub3V0ZXJTaXplLmhlaWdodDticmVhaztjYXNlXCJib3R0b21cIjpkLmNvb3JkLnRvcD1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmJvdHRvbStkLmRpc3RhbmNlLnZlcnRpY2FsfVwid2luZG93XCI9PWQuY29udGFpbmVyP1widG9wXCI9PWQuc2lkZXx8XCJib3R0b21cIj09ZC5zaWRlP2QuY29vcmQubGVmdDwwP2MuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQucmlnaHQtdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uPj0wP2QuY29vcmQubGVmdD0wOmQuY29vcmQubGVmdD1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LnJpZ2h0LXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbi0xOmQuY29vcmQubGVmdD5jLmdlby53aW5kb3cuc2l6ZS53aWR0aC1kLnNpemUud2lkdGgmJihjLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQrdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uPD1jLmdlby53aW5kb3cuc2l6ZS53aWR0aD9kLmNvb3JkLmxlZnQ9Yy5nZW8ud2luZG93LnNpemUud2lkdGgtZC5zaXplLndpZHRoOmQuY29vcmQubGVmdD1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LmxlZnQrdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uKzEtZC5zaXplLndpZHRoKTpkLmNvb3JkLnRvcDwwP2MuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQuYm90dG9tLXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbj49MD9kLmNvb3JkLnRvcD0wOmQuY29vcmQudG9wPWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQuYm90dG9tLXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbi0xOmQuY29vcmQudG9wPmMuZ2VvLndpbmRvdy5zaXplLmhlaWdodC1kLnNpemUuaGVpZ2h0JiYoYy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC50b3ArdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uPD1jLmdlby53aW5kb3cuc2l6ZS5oZWlnaHQ/ZC5jb29yZC50b3A9Yy5nZW8ud2luZG93LnNpemUuaGVpZ2h0LWQuc2l6ZS5oZWlnaHQ6ZC5jb29yZC50b3A9Yy5nZW8ub3JpZ2luLndpbmRvd09mZnNldC50b3ArdGhpcy5fX29wdGlvbnMubWluSW50ZXJzZWN0aW9uKzEtZC5zaXplLmhlaWdodCk6KGQuY29vcmQubGVmdD5jLmdlby53aW5kb3cuc2l6ZS53aWR0aC1kLnNpemUud2lkdGgmJihkLmNvb3JkLmxlZnQ9Yy5nZW8ud2luZG93LnNpemUud2lkdGgtZC5zaXplLndpZHRoKSxkLmNvb3JkLmxlZnQ8MCYmKGQuY29vcmQubGVmdD0wKSksZS5fX3NpZGVDaGFuZ2UoaCxkLnNpZGUpLGMudG9vbHRpcENsb25lPWhbMF0sYy50b29sdGlwUGFyZW50PWUuX19pbnN0YW5jZS5vcHRpb24oXCJwYXJlbnRcIikucGFyZW50WzBdLGMubW9kZT1kLm1vZGUsYy53aG9sZT1kLndob2xlLGMub3JpZ2luPWUuX19pbnN0YW5jZS5fJG9yaWdpblswXSxjLnRvb2x0aXA9ZS5fX2luc3RhbmNlLl8kdG9vbHRpcFswXSxkZWxldGUgZC5jb250YWluZXIsZGVsZXRlIGQuZml0cyxkZWxldGUgZC5tb2RlLGRlbGV0ZSBkLm91dGVyU2l6ZSxkZWxldGUgZC53aG9sZSxkLmRpc3RhbmNlPWQuZGlzdGFuY2UuaG9yaXpvbnRhbHx8ZC5kaXN0YW5jZS52ZXJ0aWNhbDt2YXIgbD1hLmV4dGVuZCghMCx7fSxkKTtpZihlLl9faW5zdGFuY2UuX3RyaWdnZXIoe2VkaXQ6ZnVuY3Rpb24oYSl7ZD1hfSxldmVudDpiLGhlbHBlcjpjLHBvc2l0aW9uOmwsdHlwZTpcInBvc2l0aW9uXCJ9KSxlLl9fb3B0aW9ucy5mdW5jdGlvblBvc2l0aW9uKXt2YXIgbT1lLl9fb3B0aW9ucy5mdW5jdGlvblBvc2l0aW9uLmNhbGwoZSxlLl9faW5zdGFuY2UsYyxsKTttJiYoZD1tKX1pLmRlc3Ryb3koKTt2YXIgbixvO1widG9wXCI9PWQuc2lkZXx8XCJib3R0b21cIj09ZC5zaWRlPyhuPXtwcm9wOlwibGVmdFwiLHZhbDpkLnRhcmdldC1kLmNvb3JkLmxlZnR9LG89ZC5zaXplLndpZHRoLXRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbik6KG49e3Byb3A6XCJ0b3BcIix2YWw6ZC50YXJnZXQtZC5jb29yZC50b3B9LG89ZC5zaXplLmhlaWdodC10aGlzLl9fb3B0aW9ucy5taW5JbnRlcnNlY3Rpb24pLG4udmFsPHRoaXMuX19vcHRpb25zLm1pbkludGVyc2VjdGlvbj9uLnZhbD10aGlzLl9fb3B0aW9ucy5taW5JbnRlcnNlY3Rpb246bi52YWw+byYmKG4udmFsPW8pO3ZhciBwO3A9Yy5nZW8ub3JpZ2luLmZpeGVkTGluZWFnZT9jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0OntsZWZ0OmMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCtjLmdlby53aW5kb3cuc2Nyb2xsLmxlZnQsdG9wOmMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wK2MuZ2VvLndpbmRvdy5zY3JvbGwudG9wfSxkLmNvb3JkPXtsZWZ0OnAubGVmdCsoZC5jb29yZC5sZWZ0LWMuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQubGVmdCksdG9wOnAudG9wKyhkLmNvb3JkLnRvcC1jLmdlby5vcmlnaW4ud2luZG93T2Zmc2V0LnRvcCl9LGUuX19zaWRlQ2hhbmdlKGUuX19pbnN0YW5jZS5fJHRvb2x0aXAsZC5zaWRlKSxjLmdlby5vcmlnaW4uZml4ZWRMaW5lYWdlP2UuX19pbnN0YW5jZS5fJHRvb2x0aXAuY3NzKFwicG9zaXRpb25cIixcImZpeGVkXCIpOmUuX19pbnN0YW5jZS5fJHRvb2x0aXAuY3NzKFwicG9zaXRpb25cIixcIlwiKSxlLl9faW5zdGFuY2UuXyR0b29sdGlwLmNzcyh7bGVmdDpkLmNvb3JkLmxlZnQsdG9wOmQuY29vcmQudG9wLGhlaWdodDpkLnNpemUuaGVpZ2h0LHdpZHRoOmQuc2l6ZS53aWR0aH0pLmZpbmQoXCIudG9vbHRpcHN0ZXItYXJyb3dcIikuY3NzKHtsZWZ0OlwiXCIsdG9wOlwiXCJ9KS5jc3Mobi5wcm9wLG4udmFsKSxlLl9faW5zdGFuY2UuXyR0b29sdGlwLmFwcGVuZFRvKGUuX19pbnN0YW5jZS5vcHRpb24oXCJwYXJlbnRcIikpLGUuX19pbnN0YW5jZS5fdHJpZ2dlcih7dHlwZTpcInJlcG9zaXRpb25lZFwiLGV2ZW50OmIscG9zaXRpb246ZH0pfSxfX3NpZGVDaGFuZ2U6ZnVuY3Rpb24oYSxiKXthLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItYm90dG9tXCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItbGVmdFwiKS5yZW1vdmVDbGFzcyhcInRvb2x0aXBzdGVyLXJpZ2h0XCIpLnJlbW92ZUNsYXNzKFwidG9vbHRpcHN0ZXItdG9wXCIpLmFkZENsYXNzKFwidG9vbHRpcHN0ZXItXCIrYil9LF9fdGFyZ2V0RmluZDpmdW5jdGlvbihhKXt2YXIgYj17fSxjPXRoaXMuX19pbnN0YW5jZS5fJG9yaWdpblswXS5nZXRDbGllbnRSZWN0cygpO2lmKGMubGVuZ3RoPjEpe3ZhciBkPXRoaXMuX19pbnN0YW5jZS5fJG9yaWdpbi5jc3MoXCJvcGFjaXR5XCIpOzE9PWQmJih0aGlzLl9faW5zdGFuY2UuXyRvcmlnaW4uY3NzKFwib3BhY2l0eVwiLC45OSksYz10aGlzLl9faW5zdGFuY2UuXyRvcmlnaW5bMF0uZ2V0Q2xpZW50UmVjdHMoKSx0aGlzLl9faW5zdGFuY2UuXyRvcmlnaW4uY3NzKFwib3BhY2l0eVwiLDEpKX1pZihjLmxlbmd0aDwyKWIudG9wPU1hdGguZmxvb3IoYS5nZW8ub3JpZ2luLndpbmRvd09mZnNldC5sZWZ0K2EuZ2VvLm9yaWdpbi5zaXplLndpZHRoLzIpLGIuYm90dG9tPWIudG9wLGIubGVmdD1NYXRoLmZsb29yKGEuZ2VvLm9yaWdpbi53aW5kb3dPZmZzZXQudG9wK2EuZ2VvLm9yaWdpbi5zaXplLmhlaWdodC8yKSxiLnJpZ2h0PWIubGVmdDtlbHNle3ZhciBlPWNbMF07Yi50b3A9TWF0aC5mbG9vcihlLmxlZnQrKGUucmlnaHQtZS5sZWZ0KS8yKSxlPWMubGVuZ3RoPjI/Y1tNYXRoLmNlaWwoYy5sZW5ndGgvMiktMV06Y1swXSxiLnJpZ2h0PU1hdGguZmxvb3IoZS50b3ArKGUuYm90dG9tLWUudG9wKS8yKSxlPWNbYy5sZW5ndGgtMV0sYi5ib3R0b209TWF0aC5mbG9vcihlLmxlZnQrKGUucmlnaHQtZS5sZWZ0KS8yKSxlPWMubGVuZ3RoPjI/Y1tNYXRoLmNlaWwoKGMubGVuZ3RoKzEpLzIpLTFdOmNbYy5sZW5ndGgtMV0sYi5sZWZ0PU1hdGguZmxvb3IoZS50b3ArKGUuYm90dG9tLWUudG9wKS8yKX1yZXR1cm4gYn19fSksYX0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfSwgX3R5cGVvZihvYmopOyB9XG4vKlxyXG4gKiAgQm9vdHN0cmFwIFRvdWNoc3BpbiAtIHY0LjcuM1xyXG4gKiAgQSBtb2JpbGUgYW5kIHRvdWNoIGZyaWVuZGx5IGlucHV0IHNwaW5uZXIgY29tcG9uZW50IGZvciBCb290c3RyYXAgMyAmIDQuXHJcbiAqICBodHRwczovL3d3dy52aXJ0dW9zb2Z0LmV1L2NvZGUvYm9vdHN0cmFwLXRvdWNoc3Bpbi9cclxuICpcclxuICogIE1hZGUgYnkgSXN0dsOhbiBVamotTcOpc3rDoXJvc1xyXG4gKiAgVW5kZXIgTUlUIExpY2Vuc2VcclxuICovXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICgodHlwZW9mIG1vZHVsZSA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG1vZHVsZSkpID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJvb3QsIGpRdWVyeSkge1xuICAgICAgaWYgKGpRdWVyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpKHJvb3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmYWN0b3J5KGpRdWVyeSk7XG4gICAgICByZXR1cm4galF1ZXJ5O1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZmFjdG9yeShqUXVlcnkpO1xuICB9XG59KShmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIF9jdXJyZW50U3Bpbm5lcklkID0gMDtcbiAgJC5mbi5Ub3VjaFNwaW4gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBkZWZhdWx0cyA9IHtcbiAgICAgIG1pbjogMCxcbiAgICAgIC8vIElmIG51bGwsIHRoZXJlIGlzIG5vIG1pbmltdW0gZW5mb3JjZWRcbiAgICAgIG1heDogMTAwLFxuICAgICAgLy8gSWYgbnVsbCwgdGhlcmUgaXMgbm8gbWF4aW11bSBlbmZvcmNlZFxuICAgICAgaW5pdHZhbDogJycsXG4gICAgICByZXBsYWNlbWVudHZhbDogJycsXG4gICAgICBmaXJzdGNsaWNrdmFsdWVpZmVtcHR5OiBudWxsLFxuICAgICAgc3RlcDogMSxcbiAgICAgIGRlY2ltYWxzOiAwLFxuICAgICAgc3RlcGludGVydmFsOiAxMDAsXG4gICAgICBmb3JjZXN0ZXBkaXZpc2liaWxpdHk6ICdyb3VuZCcsXG4gICAgICAvLyBub25lIHwgZmxvb3IgfCByb3VuZCB8IGNlaWxcbiAgICAgIHN0ZXBpbnRlcnZhbGRlbGF5OiA1MDAsXG4gICAgICB2ZXJ0aWNhbGJ1dHRvbnM6IGZhbHNlLFxuICAgICAgdmVydGljYWx1cDogJyZwbHVzOycsXG4gICAgICB2ZXJ0aWNhbGRvd246ICcmbWludXM7JyxcbiAgICAgIHZlcnRpY2FsdXBjbGFzczogJycsXG4gICAgICB2ZXJ0aWNhbGRvd25jbGFzczogJycsXG4gICAgICBwcmVmaXg6ICcnLFxuICAgICAgcG9zdGZpeDogJycsXG4gICAgICBwcmVmaXhfZXh0cmFjbGFzczogJycsXG4gICAgICBwb3N0Zml4X2V4dHJhY2xhc3M6ICcnLFxuICAgICAgYm9vc3RlcjogdHJ1ZSxcbiAgICAgIGJvb3N0YXQ6IDEwLFxuICAgICAgbWF4Ym9vc3RlZHN0ZXA6IGZhbHNlLFxuICAgICAgbW91c2V3aGVlbDogdHJ1ZSxcbiAgICAgIGJ1dHRvbmRvd25fY2xhc3M6ICdidG4gYnRuLXByaW1hcnknLFxuICAgICAgYnV0dG9udXBfY2xhc3M6ICdidG4gYnRuLXByaW1hcnknLFxuICAgICAgYnV0dG9uZG93bl90eHQ6ICcmbWludXM7JyxcbiAgICAgIGJ1dHRvbnVwX3R4dDogJyZwbHVzOycsXG4gICAgICBjYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb246IGZ1bmN0aW9uIGNhbGxiYWNrX2JlZm9yZV9jYWxjdWxhdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tfYWZ0ZXJfY2FsY3VsYXRpb246IGZ1bmN0aW9uIGNhbGxiYWNrX2FmdGVyX2NhbGN1bGF0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBhdHRyaWJ1dGVNYXAgPSB7XG4gICAgICBtaW46ICdtaW4nLFxuICAgICAgbWF4OiAnbWF4JyxcbiAgICAgIGluaXR2YWw6ICdpbml0LXZhbCcsXG4gICAgICByZXBsYWNlbWVudHZhbDogJ3JlcGxhY2VtZW50LXZhbCcsXG4gICAgICBmaXJzdGNsaWNrdmFsdWVpZmVtcHR5OiAnZmlyc3QtY2xpY2stdmFsdWUtaWYtZW1wdHknLFxuICAgICAgc3RlcDogJ3N0ZXAnLFxuICAgICAgZGVjaW1hbHM6ICdkZWNpbWFscycsXG4gICAgICBzdGVwaW50ZXJ2YWw6ICdzdGVwLWludGVydmFsJyxcbiAgICAgIHZlcnRpY2FsYnV0dG9uczogJ3ZlcnRpY2FsLWJ1dHRvbnMnLFxuICAgICAgdmVydGljYWx1cGNsYXNzOiAndmVydGljYWwtdXAtY2xhc3MnLFxuICAgICAgdmVydGljYWxkb3duY2xhc3M6ICd2ZXJ0aWNhbC1kb3duLWNsYXNzJyxcbiAgICAgIGZvcmNlc3RlcGRpdmlzaWJpbGl0eTogJ2ZvcmNlLXN0ZXAtZGl2aXNpYmlsaXR5JyxcbiAgICAgIHN0ZXBpbnRlcnZhbGRlbGF5OiAnc3RlcC1pbnRlcnZhbC1kZWxheScsXG4gICAgICBwcmVmaXg6ICdwcmVmaXgnLFxuICAgICAgcG9zdGZpeDogJ3Bvc3RmaXgnLFxuICAgICAgcHJlZml4X2V4dHJhY2xhc3M6ICdwcmVmaXgtZXh0cmEtY2xhc3MnLFxuICAgICAgcG9zdGZpeF9leHRyYWNsYXNzOiAncG9zdGZpeC1leHRyYS1jbGFzcycsXG4gICAgICBib29zdGVyOiAnYm9vc3RlcicsXG4gICAgICBib29zdGF0OiAnYm9vc3RhdCcsXG4gICAgICBtYXhib29zdGVkc3RlcDogJ21heC1ib29zdGVkLXN0ZXAnLFxuICAgICAgbW91c2V3aGVlbDogJ21vdXNlLXdoZWVsJyxcbiAgICAgIGJ1dHRvbmRvd25fY2xhc3M6ICdidXR0b24tZG93bi1jbGFzcycsXG4gICAgICBidXR0b251cF9jbGFzczogJ2J1dHRvbi11cC1jbGFzcycsXG4gICAgICBidXR0b25kb3duX3R4dDogJ2J1dHRvbi1kb3duLXR4dCcsXG4gICAgICBidXR0b251cF90eHQ6ICdidXR0b24tdXAtdHh0J1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc2V0dGluZ3MsXG4gICAgICAgIG9yaWdpbmFsaW5wdXQgPSAkKHRoaXMpLFxuICAgICAgICBvcmlnaW5hbGlucHV0X2RhdGEgPSBvcmlnaW5hbGlucHV0LmRhdGEoKSxcbiAgICAgICAgX2RldGFjaGVkX3ByZWZpeCxcbiAgICAgICAgX2RldGFjaGVkX3Bvc3RmaXgsXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIHZlcnRpY2FsYnV0dG9uc19odG1sLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZG93blNwaW5UaW1lcixcbiAgICAgICAgdXBTcGluVGltZXIsXG4gICAgICAgIGRvd25EZWxheVRpbWVvdXQsXG4gICAgICAgIHVwRGVsYXlUaW1lb3V0LFxuICAgICAgICBzcGluY291bnQgPSAwLFxuICAgICAgICBzcGlubmluZyA9IGZhbHNlO1xuICAgICAgaW5pdCgpO1xuICAgICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuZGF0YSgnYWxyZWFkeWluaXRpYWxpemVkJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgb3JpZ2luYWxpbnB1dC5kYXRhKCdhbHJlYWR5aW5pdGlhbGl6ZWQnLCB0cnVlKTtcbiAgICAgICAgX2N1cnJlbnRTcGlubmVySWQgKz0gMTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC5kYXRhKCdzcGlubmVyaWQnLCBfY3VycmVudFNwaW5uZXJJZCk7XG4gICAgICAgIGlmICghb3JpZ2luYWxpbnB1dC5pcygnaW5wdXQnKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdNdXN0IGJlIGFuIGlucHV0LicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBfaW5pdFNldHRpbmdzKCk7XG4gICAgICAgIF9zZXRJbml0dmFsKCk7XG4gICAgICAgIF9jaGVja1ZhbHVlKCk7XG4gICAgICAgIF9idWlsZEh0bWwoKTtcbiAgICAgICAgX2luaXRFbGVtZW50cygpO1xuICAgICAgICBfdXBkYXRlQnV0dG9uRGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgICBfaGlkZUVtcHR5UHJlZml4UG9zdGZpeCgpO1xuICAgICAgICBfc2V0dXBNdXRhdGlvbk9ic2VydmVycygpO1xuICAgICAgICBfYmluZEV2ZW50cygpO1xuICAgICAgICBfYmluZEV2ZW50c0ludGVyZmFjZSgpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3NldEluaXR2YWwoKSB7XG4gICAgICAgIGlmIChzZXR0aW5ncy5pbml0dmFsICE9PSAnJyAmJiBvcmlnaW5hbGlucHV0LnZhbCgpID09PSAnJykge1xuICAgICAgICAgIG9yaWdpbmFsaW5wdXQudmFsKHNldHRpbmdzLmluaXR2YWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjaGFuZ2VTZXR0aW5ncyhuZXdzZXR0aW5ncykge1xuICAgICAgICBfdXBkYXRlU2V0dGluZ3MobmV3c2V0dGluZ3MpO1xuICAgICAgICBfY2hlY2tWYWx1ZSgpO1xuICAgICAgICB2YXIgdmFsdWUgPSBlbGVtZW50cy5pbnB1dC52YWwoKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSAnJykge1xuICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChzZXR0aW5ncy5jYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb24oZWxlbWVudHMuaW5wdXQudmFsKCkpKTtcbiAgICAgICAgICBlbGVtZW50cy5pbnB1dC52YWwoc2V0dGluZ3MuY2FsbGJhY2tfYWZ0ZXJfY2FsY3VsYXRpb24ocGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2luaXRTZXR0aW5ncygpIHtcbiAgICAgICAgc2V0dGluZ3MgPSAkLmV4dGVuZCh7fSwgZGVmYXVsdHMsIG9yaWdpbmFsaW5wdXRfZGF0YSwgX3BhcnNlQXR0cmlidXRlcygpLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKHBhcnNlRmxvYXQoc2V0dGluZ3Muc3RlcCkgIT09IDEpIHtcbiAgICAgICAgICB2YXIgcmVtYWluZGVyO1xuXG4gICAgICAgICAgLy8gTW9kaWZ5IHNldHRpbmdzLm1heCB0byBiZSBkaXZpc2libGUgYnkgc3RlcFxuICAgICAgICAgIHJlbWFpbmRlciA9IHNldHRpbmdzLm1heCAlIHNldHRpbmdzLnN0ZXA7XG4gICAgICAgICAgaWYgKHJlbWFpbmRlciAhPT0gMCkge1xuICAgICAgICAgICAgc2V0dGluZ3MubWF4ID0gcGFyc2VGbG9hdChzZXR0aW5ncy5tYXgpIC0gcmVtYWluZGVyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERvIHRoZSBzYW1lIHdpdGggbWluLCBzaG91bGQgd29yayB3aXRoIG5lZ2F0aXZlIG51bWJlcnMgdG9vXG4gICAgICAgICAgcmVtYWluZGVyID0gc2V0dGluZ3MubWluICUgc2V0dGluZ3Muc3RlcDtcbiAgICAgICAgICBpZiAocmVtYWluZGVyICE9PSAwKSB7XG4gICAgICAgICAgICBzZXR0aW5ncy5taW4gPSBwYXJzZUZsb2F0KHNldHRpbmdzLm1pbikgKyAocGFyc2VGbG9hdChzZXR0aW5ncy5zdGVwKSAtIHJlbWFpbmRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfcGFyc2VBdHRyaWJ1dGVzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHt9O1xuXG4gICAgICAgIC8vIFNldHRpbmcgdXAgYmFzZWQgb24gZGF0YSBhdHRyaWJ1dGVzXG4gICAgICAgICQuZWFjaChhdHRyaWJ1dGVNYXAsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgdmFyIGF0dHJOYW1lID0gJ2J0cy0nICsgdmFsdWUgKyAnJztcbiAgICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5pcygnW2RhdGEtJyArIGF0dHJOYW1lICsgJ10nKSkge1xuICAgICAgICAgICAgZGF0YVtrZXldID0gb3JpZ2luYWxpbnB1dC5kYXRhKGF0dHJOYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNldHRpbmcgdXAgYmFzZWQgb24gaW5wdXQgYXR0cmlidXRlcyBpZiBzcGVjaWZpZWQgKGlucHV0IGF0dHJpYnV0ZXMgaGF2ZSBwcmVjZWRlbmNlKVxuICAgICAgICAkLmVhY2goWydtaW4nLCAnbWF4JywgJ3N0ZXAnXSwgZnVuY3Rpb24gKGksIGtleSkge1xuICAgICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCdbJyArIGtleSArICddJykpIHtcbiAgICAgICAgICAgIGlmIChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0JvdGggdGhlIFwiZGF0YS1idHMtJyArIGtleSArICdcIiBkYXRhIGF0dHJpYnV0ZSBhbmQgdGhlIFwiJyArIGtleSArICdcIiBpbmRpdmlkdWFsIGF0dHJpYnV0ZSB3ZXJlIHNwZWNpZmllZCwgdGhlIGluZGl2aWR1YWwgYXR0cmlidXRlIHdpbGwgdGFrZSBwcmVjZWRlbmNlIG9uOiAnLCBvcmlnaW5hbGlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGFba2V5XSA9IG9yaWdpbmFsaW5wdXQuYXR0cihrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2Rlc3Ryb3koKSB7XG4gICAgICAgIHZhciAkcGFyZW50ID0gb3JpZ2luYWxpbnB1dC5wYXJlbnQoKTtcbiAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC5vZmYoJy50b3VjaHNwaW4nKTtcbiAgICAgICAgaWYgKCRwYXJlbnQuaGFzQ2xhc3MoJ2Jvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWQnKSkge1xuICAgICAgICAgIG9yaWdpbmFsaW5wdXQuc2libGluZ3MoKS5yZW1vdmUoKTtcbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnVud3JhcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICQoJy5ib290c3RyYXAtdG91Y2hzcGluLWluamVjdGVkJywgJHBhcmVudCkucmVtb3ZlKCk7XG4gICAgICAgICAgJHBhcmVudC5yZW1vdmVDbGFzcygnYm9vdHN0cmFwLXRvdWNoc3BpbicpO1xuICAgICAgICB9XG4gICAgICAgIG9yaWdpbmFsaW5wdXQuZGF0YSgnYWxyZWFkeWluaXRpYWxpemVkJywgZmFsc2UpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3VwZGF0ZVNldHRpbmdzKG5ld3NldHRpbmdzKSB7XG4gICAgICAgIHNldHRpbmdzID0gJC5leHRlbmQoe30sIHNldHRpbmdzLCBuZXdzZXR0aW5ncyk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHBvc3RmaXggYW5kIHByZWZpeCB0ZXh0cyBpZiB0aG9zZSBzZXR0aW5ncyB3ZXJlIGNoYW5nZWQuXG4gICAgICAgIGlmIChuZXdzZXR0aW5ncy5wb3N0Zml4KSB7XG4gICAgICAgICAgdmFyICRwb3N0Zml4ID0gb3JpZ2luYWxpbnB1dC5wYXJlbnQoKS5maW5kKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wb3N0Zml4Jyk7XG4gICAgICAgICAgaWYgKCRwb3N0Zml4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgX2RldGFjaGVkX3Bvc3RmaXguaW5zZXJ0QWZ0ZXIob3JpZ2luYWxpbnB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9yaWdpbmFsaW5wdXQucGFyZW50KCkuZmluZCgnLmJvb3RzdHJhcC10b3VjaHNwaW4tcG9zdGZpeCAuaW5wdXQtZ3JvdXAtdGV4dCcpLnRleHQobmV3c2V0dGluZ3MucG9zdGZpeCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld3NldHRpbmdzLnByZWZpeCkge1xuICAgICAgICAgIHZhciAkcHJlZml4ID0gb3JpZ2luYWxpbnB1dC5wYXJlbnQoKS5maW5kKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXgnKTtcbiAgICAgICAgICBpZiAoJHByZWZpeC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIF9kZXRhY2hlZF9wcmVmaXguaW5zZXJ0QmVmb3JlKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnBhcmVudCgpLmZpbmQoJy5ib290c3RyYXAtdG91Y2hzcGluLXByZWZpeCAuaW5wdXQtZ3JvdXAtdGV4dCcpLnRleHQobmV3c2V0dGluZ3MucHJlZml4KTtcbiAgICAgICAgfVxuICAgICAgICBfaGlkZUVtcHR5UHJlZml4UG9zdGZpeCgpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2J1aWxkSHRtbCgpIHtcbiAgICAgICAgdmFyIGluaXR2YWwgPSBvcmlnaW5hbGlucHV0LnZhbCgpLFxuICAgICAgICAgIHBhcmVudGVsZW1lbnQgPSBvcmlnaW5hbGlucHV0LnBhcmVudCgpO1xuICAgICAgICBpZiAoaW5pdHZhbCAhPT0gJycpIHtcbiAgICAgICAgICAvLyBpbml0dmFsIG1heSBub3QgYmUgcGFyc2FibGUgYXMgYSBudW1iZXIgKGNhbGxiYWNrX2FmdGVyX2NhbGN1bGF0aW9uKCkgbWF5IGRlY29yYXRlIGl0IHNvIGl0IGNhbnQgYmUgcGFyc2VkKS4gIFVzZSB0aGUgY2FsbGJhY2tzIGlmIHByb3ZpZGVkLlxuICAgICAgICAgIGluaXR2YWwgPSBzZXR0aW5ncy5jYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb24oaW5pdHZhbCk7XG4gICAgICAgICAgaW5pdHZhbCA9IHNldHRpbmdzLmNhbGxiYWNrX2FmdGVyX2NhbGN1bGF0aW9uKHBhcnNlRmxvYXQoaW5pdHZhbCkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpO1xuICAgICAgICB9XG4gICAgICAgIG9yaWdpbmFsaW5wdXQuZGF0YSgnaW5pdHZhbHVlJywgaW5pdHZhbCkudmFsKGluaXR2YWwpO1xuICAgICAgICBvcmlnaW5hbGlucHV0LmFkZENsYXNzKCdmb3JtLWNvbnRyb2wnKTtcbiAgICAgICAgdmVydGljYWxidXR0b25zX2h0bWwgPSBcIlxcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gYm9vdHN0cmFwLXRvdWNoc3Bpbi12ZXJ0aWNhbC1idXR0b24td3JhcHBlclxcXCI+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0bi12ZXJ0aWNhbFxcXCI+XFxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVxcXCItMVxcXCIgY2xhc3M9XFxcIlwiLmNvbmNhdChzZXR0aW5ncy5idXR0b25kb3duX2NsYXNzLCBcIiBib290c3RyYXAtdG91Y2hzcGluLXVwIFwiKS5jb25jYXQoc2V0dGluZ3MudmVydGljYWx1cGNsYXNzLCBcIlxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnZlcnRpY2FsdXAsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVxcXCItMVxcXCIgY2xhc3M9XFxcIlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9udXBfY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tZG93biBcIikuY29uY2F0KHNldHRpbmdzLnZlcnRpY2FsZG93bmNsYXNzLCBcIlxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnZlcnRpY2FsZG93biwgXCI8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgXCIpO1xuICAgICAgICBpZiAocGFyZW50ZWxlbWVudC5oYXNDbGFzcygnaW5wdXQtZ3JvdXAnKSkge1xuICAgICAgICAgIF9hZHZhbmNlSW5wdXRHcm91cChwYXJlbnRlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfYnVpbGRJbnB1dEdyb3VwKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9hZHZhbmNlSW5wdXRHcm91cChwYXJlbnRlbGVtZW50KSB7XG4gICAgICAgIHBhcmVudGVsZW1lbnQuYWRkQ2xhc3MoJ2Jvb3RzdHJhcC10b3VjaHNwaW4nKTtcbiAgICAgICAgdmFyIHByZXYgPSBvcmlnaW5hbGlucHV0LnByZXYoKSxcbiAgICAgICAgICBuZXh0ID0gb3JpZ2luYWxpbnB1dC5uZXh0KCk7XG4gICAgICAgIHZhciBkb3duaHRtbCxcbiAgICAgICAgICB1cGh0bWwsXG4gICAgICAgICAgcHJlZml4aHRtbCA9IFwiXFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGlucHV0LWdyb3VwLXByZXBlbmQgYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXggaW5wdXQtZ3JvdXAtcHJlcGVuZCBib290c3RyYXAtdG91Y2hzcGluLWluamVjdGVkXFxcIj5cXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC10ZXh0XFxcIj5cIi5jb25jYXQoc2V0dGluZ3MucHJlZml4LCBcIjwvc3Bhbj5cXG4gICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgIFwiKSxcbiAgICAgICAgICBwb3N0Zml4aHRtbCA9IFwiXFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGlucHV0LWdyb3VwLWFwcGVuZCBib290c3RyYXAtdG91Y2hzcGluLXBvc3RmaXggaW5wdXQtZ3JvdXAtYXBwZW5kIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLXRleHRcXFwiPlwiLmNvbmNhdChzZXR0aW5ncy5wb3N0Zml4LCBcIjwvc3Bhbj5cXG4gICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgIFwiKTtcbiAgICAgICAgaWYgKHNldHRpbmdzLnZlcnRpY2FsYnV0dG9ucykge1xuICAgICAgICAgICQodmVydGljYWxidXR0b25zX2h0bWwpLmluc2VydEFmdGVyKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcmV2Lmhhc0NsYXNzKCdpbnB1dC1ncm91cC1idG4nKSB8fCBwcmV2Lmhhc0NsYXNzKCdpbnB1dC1ncm91cC1wcmVwZW5kJykpIHtcbiAgICAgICAgICAgIGRvd25odG1sID0gXCJcXG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XFxcIi0xXFxcIiBjbGFzcz1cXFwiXCIuY29uY2F0KHNldHRpbmdzLmJ1dHRvbmRvd25fY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tZG93biBib290c3RyYXAtdG91Y2hzcGluLWluamVjdGVkXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiPlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9uZG93bl90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgXCIpO1xuICAgICAgICAgICAgcHJldi5hcHBlbmQoZG93bmh0bWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3duaHRtbCA9IFwiXFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYnRuIGlucHV0LWdyb3VwLXByZXBlbmQgYm9vdHN0cmFwLXRvdWNoc3Bpbi1pbmplY3RlZFxcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XFxcIi0xXFxcIiBjbGFzcz1cXFwiXCIuY29uY2F0KHNldHRpbmdzLmJ1dHRvbmRvd25fY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tZG93blxcXCIgdHlwZT1cXFwiYnV0dG9uXFxcIj5cIikuY29uY2F0KHNldHRpbmdzLmJ1dHRvbmRvd25fdHh0LCBcIjwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgIFwiKTtcbiAgICAgICAgICAgICQoZG93bmh0bWwpLmluc2VydEJlZm9yZShvcmlnaW5hbGlucHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5leHQuaGFzQ2xhc3MoJ2lucHV0LWdyb3VwLWJ0bicpIHx8IG5leHQuaGFzQ2xhc3MoJ2lucHV0LWdyb3VwLWFwcGVuZCcpKSB7XG4gICAgICAgICAgICB1cGh0bWwgPSBcIlxcbiAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XFxcIi0xXFxcIiBjbGFzcz1cXFwiXCIuY29uY2F0KHNldHRpbmdzLmJ1dHRvbnVwX2NsYXNzLCBcIiBib290c3RyYXAtdG91Y2hzcGluLXVwIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5idXR0b251cF90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgIFwiKTtcbiAgICAgICAgICAgIG5leHQucHJlcGVuZCh1cGh0bWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cGh0bWwgPSBcIlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC1idG4gaW5wdXQtZ3JvdXAtYXBwZW5kIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cXFwiLTFcXFwiIGNsYXNzPVxcXCJcIi5jb25jYXQoc2V0dGluZ3MuYnV0dG9udXBfY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tdXBcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5idXR0b251cF90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICBcIik7XG4gICAgICAgICAgICAkKHVwaHRtbCkuaW5zZXJ0QWZ0ZXIob3JpZ2luYWxpbnB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICQocHJlZml4aHRtbCkuaW5zZXJ0QmVmb3JlKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICAkKHBvc3RmaXhodG1sKS5pbnNlcnRBZnRlcihvcmlnaW5hbGlucHV0KTtcbiAgICAgICAgY29udGFpbmVyID0gcGFyZW50ZWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9idWlsZElucHV0R3JvdXAoKSB7XG4gICAgICAgIHZhciBodG1sO1xuICAgICAgICB2YXIgaW5wdXRHcm91cFNpemUgPSAnJztcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuaGFzQ2xhc3MoJ2lucHV0LXNtJykgfHwgb3JpZ2luYWxpbnB1dC5oYXNDbGFzcygnZm9ybS1jb250cm9sLXNtJykpIHtcbiAgICAgICAgICBpbnB1dEdyb3VwU2l6ZSA9ICdpbnB1dC1ncm91cC1zbSc7XG4gICAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxpbnB1dC5oYXNDbGFzcygnaW5wdXQtbGcnKSB8fCBvcmlnaW5hbGlucHV0Lmhhc0NsYXNzKCdmb3JtLWNvbnRyb2wtbGcnKSkge1xuICAgICAgICAgIGlucHV0R3JvdXBTaXplID0gJ2lucHV0LWdyb3VwLWxnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0dGluZ3MudmVydGljYWxidXR0b25zKSB7XG4gICAgICAgICAgaHRtbCA9IFwiXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAgXCIuY29uY2F0KGlucHV0R3JvdXBTaXplLCBcIiBib290c3RyYXAtdG91Y2hzcGluIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGlucHV0LWdyb3VwLXByZXBlbmQgYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXhcXFwiPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtdGV4dFxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5wcmVmaXgsIFwiPC9zcGFuPlxcbiAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGJvb3RzdHJhcC10b3VjaHNwaW4tcG9zdGZpeCBpbnB1dC1ncm91cC1hcHBlbmRcXFwiPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtdGV4dFxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5wb3N0Zml4LCBcIjwvc3Bhbj5cXG4gICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgIFwiKS5jb25jYXQodmVydGljYWxidXR0b25zX2h0bWwsIFwiXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgIFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBodG1sID0gXCJcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cCBib290c3RyYXAtdG91Y2hzcGluIGJvb3RzdHJhcC10b3VjaHNwaW4taW5qZWN0ZWRcXFwiPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1wcmVwZW5kXFxcIj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cXFwiLTFcXFwiIGNsYXNzPVxcXCJcIi5jb25jYXQoc2V0dGluZ3MuYnV0dG9uZG93bl9jbGFzcywgXCIgYm9vdHN0cmFwLXRvdWNoc3Bpbi1kb3duXFxcIiB0eXBlPVxcXCJidXR0b25cXFwiPlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9uZG93bl90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXggaW5wdXQtZ3JvdXAtcHJlcGVuZFxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC10ZXh0XFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnByZWZpeCwgXCI8L3NwYW4+XFxuICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gYm9vdHN0cmFwLXRvdWNoc3Bpbi1wb3N0Zml4IGlucHV0LWdyb3VwLWFwcGVuZFxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC10ZXh0XFxcIj5cIikuY29uY2F0KHNldHRpbmdzLnBvc3RmaXgsIFwiPC9zcGFuPlxcbiAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1hcHBlbmRcXFwiPlxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVxcXCItMVxcXCIgY2xhc3M9XFxcIlwiKS5jb25jYXQoc2V0dGluZ3MuYnV0dG9udXBfY2xhc3MsIFwiIGJvb3RzdHJhcC10b3VjaHNwaW4tdXBcXFwiIHR5cGU9XFxcImJ1dHRvblxcXCI+XCIpLmNvbmNhdChzZXR0aW5ncy5idXR0b251cF90eHQsIFwiPC9idXR0b24+XFxuICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgPC9kaXY+XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lciA9ICQoaHRtbCkuaW5zZXJ0QmVmb3JlKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXgnLCBjb250YWluZXIpLmFmdGVyKG9yaWdpbmFsaW5wdXQpO1xuICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5oYXNDbGFzcygnaW5wdXQtc20nKSB8fCBvcmlnaW5hbGlucHV0Lmhhc0NsYXNzKCdmb3JtLWNvbnRyb2wtc20nKSkge1xuICAgICAgICAgIGNvbnRhaW5lci5hZGRDbGFzcygnaW5wdXQtZ3JvdXAtc20nKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcmlnaW5hbGlucHV0Lmhhc0NsYXNzKCdpbnB1dC1sZycpIHx8IG9yaWdpbmFsaW5wdXQuaGFzQ2xhc3MoJ2Zvcm0tY29udHJvbC1sZycpKSB7XG4gICAgICAgICAgY29udGFpbmVyLmFkZENsYXNzKCdpbnB1dC1ncm91cC1sZycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfaW5pdEVsZW1lbnRzKCkge1xuICAgICAgICBlbGVtZW50cyA9IHtcbiAgICAgICAgICBkb3duOiAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1kb3duJywgY29udGFpbmVyKSxcbiAgICAgICAgICB1cDogJCgnLmJvb3RzdHJhcC10b3VjaHNwaW4tdXAnLCBjb250YWluZXIpLFxuICAgICAgICAgIGlucHV0OiAkKCdpbnB1dCcsIGNvbnRhaW5lciksXG4gICAgICAgICAgcHJlZml4OiAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wcmVmaXgnLCBjb250YWluZXIpLmFkZENsYXNzKHNldHRpbmdzLnByZWZpeF9leHRyYWNsYXNzKSxcbiAgICAgICAgICBwb3N0Zml4OiAkKCcuYm9vdHN0cmFwLXRvdWNoc3Bpbi1wb3N0Zml4JywgY29udGFpbmVyKS5hZGRDbGFzcyhzZXR0aW5ncy5wb3N0Zml4X2V4dHJhY2xhc3MpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfaGlkZUVtcHR5UHJlZml4UG9zdGZpeCgpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzLnByZWZpeCA9PT0gJycpIHtcbiAgICAgICAgICBfZGV0YWNoZWRfcHJlZml4ID0gZWxlbWVudHMucHJlZml4LmRldGFjaCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXR0aW5ncy5wb3N0Zml4ID09PSAnJykge1xuICAgICAgICAgIF9kZXRhY2hlZF9wb3N0Zml4ID0gZWxlbWVudHMucG9zdGZpeC5kZXRhY2goKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2JpbmRFdmVudHMoKSB7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ2tleWRvd24udG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgdmFyIGNvZGUgPSBldi5rZXlDb2RlIHx8IGV2LndoaWNoO1xuICAgICAgICAgIGlmIChjb2RlID09PSAzOCkge1xuICAgICAgICAgICAgaWYgKHNwaW5uaW5nICE9PSAndXAnKSB7XG4gICAgICAgICAgICAgIHVwT25jZSgpO1xuICAgICAgICAgICAgICBzdGFydFVwU3BpbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDQwKSB7XG4gICAgICAgICAgICBpZiAoc3Bpbm5pbmcgIT09ICdkb3duJykge1xuICAgICAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICAgICAgICBzdGFydERvd25TcGluKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gOSB8fCBjb2RlID09PSAxMykge1xuICAgICAgICAgICAgX2NoZWNrVmFsdWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCdrZXl1cC50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICB2YXIgY29kZSA9IGV2LmtleUNvZGUgfHwgZXYud2hpY2g7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDM4KSB7XG4gICAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gNDApIHtcbiAgICAgICAgICAgIHN0b3BTcGluKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBjaGFuZ2UgaXMgZmlyZWQgYmVmb3JlIGJsdXIsIHNvIHdlIG5lZWQgdG8gd29yayBhcm91bmQgdGhhdFxuICAgICAgICAkKGRvY3VtZW50KS5vbignbW91c2Vkb3duIHRvdWNoc3RhcnQnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoJChldmVudC50YXJnZXQpLmlzKG9yaWdpbmFsaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIF9jaGVja1ZhbHVlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCdibHVyLnRvdWNoc3BpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfY2hlY2tWYWx1ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMuZG93bi5vbigna2V5ZG93bicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIHZhciBjb2RlID0gZXYua2V5Q29kZSB8fCBldi53aGljaDtcbiAgICAgICAgICBpZiAoY29kZSA9PT0gMzIgfHwgY29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgIGlmIChzcGlubmluZyAhPT0gJ2Rvd24nKSB7XG4gICAgICAgICAgICAgIGRvd25PbmNlKCk7XG4gICAgICAgICAgICAgIHN0YXJ0RG93blNwaW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMuZG93bi5vbigna2V5dXAudG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgdmFyIGNvZGUgPSBldi5rZXlDb2RlIHx8IGV2LndoaWNoO1xuICAgICAgICAgIGlmIChjb2RlID09PSAzMiB8fCBjb2RlID09PSAxMykge1xuICAgICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50cy51cC5vbigna2V5ZG93bi50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICB2YXIgY29kZSA9IGV2LmtleUNvZGUgfHwgZXYud2hpY2g7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDMyIHx8IGNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICBpZiAoc3Bpbm5pbmcgIT09ICd1cCcpIHtcbiAgICAgICAgICAgICAgdXBPbmNlKCk7XG4gICAgICAgICAgICAgIHN0YXJ0VXBTcGluKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLnVwLm9uKCdrZXl1cC50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICB2YXIgY29kZSA9IGV2LmtleUNvZGUgfHwgZXYud2hpY2g7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IDMyIHx8IGNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLmRvd24ub24oJ21vdXNlZG93bi50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICBlbGVtZW50cy5kb3duLm9mZigndG91Y2hzdGFydC50b3VjaHNwaW4nKTsgLy8gYW5kcm9pZCA0IHdvcmthcm91bmRcblxuICAgICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGRvd25PbmNlKCk7XG4gICAgICAgICAgc3RhcnREb3duU3BpbigpO1xuICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50cy5kb3duLm9uKCd0b3VjaHN0YXJ0LnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGVsZW1lbnRzLmRvd24ub2ZmKCdtb3VzZWRvd24udG91Y2hzcGluJyk7IC8vIGFuZHJvaWQgNCB3b3JrYXJvdW5kXG5cbiAgICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5pcygnOmRpc2FibGVkLFtyZWFkb25seV0nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICAgIHN0YXJ0RG93blNwaW4oKTtcbiAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMudXAub24oJ21vdXNlZG93bi50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICBlbGVtZW50cy51cC5vZmYoJ3RvdWNoc3RhcnQudG91Y2hzcGluJyk7IC8vIGFuZHJvaWQgNCB3b3JrYXJvdW5kXG5cbiAgICAgICAgICBpZiAob3JpZ2luYWxpbnB1dC5pcygnOmRpc2FibGVkLFtyZWFkb25seV0nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB1cE9uY2UoKTtcbiAgICAgICAgICBzdGFydFVwU3BpbigpO1xuICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50cy51cC5vbigndG91Y2hzdGFydC50b3VjaHNwaW4nLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICBlbGVtZW50cy51cC5vZmYoJ21vdXNlZG93bi50b3VjaHNwaW4nKTsgLy8gYW5kcm9pZCA0IHdvcmthcm91bmRcblxuICAgICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHVwT25jZSgpO1xuICAgICAgICAgIHN0YXJ0VXBTcGluKCk7XG4gICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLnVwLm9uKCdtb3VzZXVwLnRvdWNoc3BpbiBtb3VzZW91dC50b3VjaHNwaW4gdG91Y2hsZWF2ZS50b3VjaHNwaW4gdG91Y2hlbmQudG91Y2hzcGluIHRvdWNoY2FuY2VsLnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGlmICghc3Bpbm5pbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLmRvd24ub24oJ21vdXNldXAudG91Y2hzcGluIG1vdXNlb3V0LnRvdWNoc3BpbiB0b3VjaGxlYXZlLnRvdWNoc3BpbiB0b3VjaGVuZC50b3VjaHNwaW4gdG91Y2hjYW5jZWwudG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgaWYgKCFzcGlubmluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMuZG93bi5vbignbW91c2Vtb3ZlLnRvdWNoc3BpbiB0b3VjaG1vdmUudG91Y2hzcGluJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgaWYgKCFzcGlubmluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMudXAub24oJ21vdXNlbW92ZS50b3VjaHNwaW4gdG91Y2htb3ZlLnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGlmICghc3Bpbm5pbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ21vdXNld2hlZWwudG91Y2hzcGluIERPTU1vdXNlU2Nyb2xsLnRvdWNoc3BpbicsIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgIGlmICghc2V0dGluZ3MubW91c2V3aGVlbCB8fCAhb3JpZ2luYWxpbnB1dC5pcygnOmZvY3VzJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGRlbHRhID0gZXYub3JpZ2luYWxFdmVudC53aGVlbERlbHRhIHx8IC1ldi5vcmlnaW5hbEV2ZW50LmRlbHRhWSB8fCAtZXYub3JpZ2luYWxFdmVudC5kZXRhaWw7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBpZiAoZGVsdGEgPCAwKSB7XG4gICAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cE9uY2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2JpbmRFdmVudHNJbnRlcmZhY2UoKSB7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ3RvdWNoc3Bpbi5kZXN0cm95JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF9kZXN0cm95KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4udXBvbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0b3BTcGluKCk7XG4gICAgICAgICAgdXBPbmNlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4uZG93bm9uY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgICBkb3duT25jZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC5vbigndG91Y2hzcGluLnN0YXJ0dXBzcGluJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0YXJ0VXBTcGluKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4uc3RhcnRkb3duc3BpbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzdGFydERvd25TcGluKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvcmlnaW5hbGlucHV0Lm9uKCd0b3VjaHNwaW4uc3RvcHNwaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9yaWdpbmFsaW5wdXQub24oJ3RvdWNoc3Bpbi51cGRhdGVzZXR0aW5ncycsIGZ1bmN0aW9uIChlLCBuZXdzZXR0aW5ncykge1xuICAgICAgICAgIGNoYW5nZVNldHRpbmdzKG5ld3NldHRpbmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfc2V0dXBNdXRhdGlvbk9ic2VydmVycygpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE11dGF0aW9uT2JzZXJ2ZXIgaXMgYXZhaWxhYmxlXG4gICAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuICAgICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSAnYXR0cmlidXRlcycgJiYgKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT09ICdkaXNhYmxlZCcgfHwgbXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICAgICAgICBfdXBkYXRlQnV0dG9uRGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKG9yaWdpbmFsaW5wdXRbMF0sIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2ZvcmNlc3RlcGRpdmlzaWJpbGl0eSh2YWx1ZSkge1xuICAgICAgICBzd2l0Y2ggKHNldHRpbmdzLmZvcmNlc3RlcGRpdmlzaWJpbGl0eSkge1xuICAgICAgICAgIGNhc2UgJ3JvdW5kJzpcbiAgICAgICAgICAgIHJldHVybiAoTWF0aC5yb3VuZCh2YWx1ZSAvIHNldHRpbmdzLnN0ZXApICogc2V0dGluZ3Muc3RlcCkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscyk7XG4gICAgICAgICAgY2FzZSAnZmxvb3InOlxuICAgICAgICAgICAgcmV0dXJuIChNYXRoLmZsb29yKHZhbHVlIC8gc2V0dGluZ3Muc3RlcCkgKiBzZXR0aW5ncy5zdGVwKS50b0ZpeGVkKHNldHRpbmdzLmRlY2ltYWxzKTtcbiAgICAgICAgICBjYXNlICdjZWlsJzpcbiAgICAgICAgICAgIHJldHVybiAoTWF0aC5jZWlsKHZhbHVlIC8gc2V0dGluZ3Muc3RlcCkgKiBzZXR0aW5ncy5zdGVwKS50b0ZpeGVkKHNldHRpbmdzLmRlY2ltYWxzKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoc2V0dGluZ3MuZGVjaW1hbHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfY2hlY2tWYWx1ZSgpIHtcbiAgICAgICAgdmFyIHZhbCwgcGFyc2VkdmFsLCByZXR1cm52YWw7XG4gICAgICAgIHZhbCA9IHNldHRpbmdzLmNhbGxiYWNrX2JlZm9yZV9jYWxjdWxhdGlvbihvcmlnaW5hbGlucHV0LnZhbCgpKTtcbiAgICAgICAgaWYgKHZhbCA9PT0gJycpIHtcbiAgICAgICAgICBpZiAoc2V0dGluZ3MucmVwbGFjZW1lbnR2YWwgIT09ICcnKSB7XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnZhbChzZXR0aW5ncy5yZXBsYWNlbWVudHZhbCk7XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldHRpbmdzLmRlY2ltYWxzID4gMCAmJiB2YWwgPT09ICcuJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZWR2YWwgPSBwYXJzZUZsb2F0KHZhbCk7XG4gICAgICAgIGlmIChpc05hTihwYXJzZWR2YWwpKSB7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLnJlcGxhY2VtZW50dmFsICE9PSAnJykge1xuICAgICAgICAgICAgcGFyc2VkdmFsID0gc2V0dGluZ3MucmVwbGFjZW1lbnR2YWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlZHZhbCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybnZhbCA9IHBhcnNlZHZhbDtcbiAgICAgICAgaWYgKHBhcnNlZHZhbC50b1N0cmluZygpICE9PSB2YWwpIHtcbiAgICAgICAgICByZXR1cm52YWwgPSBwYXJzZWR2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJudmFsID0gX2ZvcmNlc3RlcGRpdmlzaWJpbGl0eShwYXJzZWR2YWwpO1xuICAgICAgICBpZiAoc2V0dGluZ3MubWluICE9PSBudWxsICYmIHBhcnNlZHZhbCA8IHNldHRpbmdzLm1pbikge1xuICAgICAgICAgIHJldHVybnZhbCA9IHNldHRpbmdzLm1pbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0dGluZ3MubWF4ICE9PSBudWxsICYmIHBhcnNlZHZhbCA+IHNldHRpbmdzLm1heCkge1xuICAgICAgICAgIHJldHVybnZhbCA9IHNldHRpbmdzLm1heDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VGbG9hdChwYXJzZWR2YWwpLnRvU3RyaW5nKCkgIT09IHBhcnNlRmxvYXQocmV0dXJudmFsKS50b1N0cmluZygpKSB7XG4gICAgICAgICAgb3JpZ2luYWxpbnB1dC52YWwocmV0dXJudmFsKTtcbiAgICAgICAgfVxuICAgICAgICBvcmlnaW5hbGlucHV0LnZhbChzZXR0aW5ncy5jYWxsYmFja19hZnRlcl9jYWxjdWxhdGlvbihwYXJzZUZsb2F0KHJldHVybnZhbCkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9nZXRCb29zdGVkU3RlcCgpIHtcbiAgICAgICAgaWYgKCFzZXR0aW5ncy5ib29zdGVyKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRpbmdzLnN0ZXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGJvb3N0ZWQgPSBNYXRoLnBvdygyLCBNYXRoLmZsb29yKHNwaW5jb3VudCAvIHNldHRpbmdzLmJvb3N0YXQpKSAqIHNldHRpbmdzLnN0ZXA7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLm1heGJvb3N0ZWRzdGVwKSB7XG4gICAgICAgICAgICBpZiAoYm9vc3RlZCA+IHNldHRpbmdzLm1heGJvb3N0ZWRzdGVwKSB7XG4gICAgICAgICAgICAgIGJvb3N0ZWQgPSBzZXR0aW5ncy5tYXhib29zdGVkc3RlcDtcbiAgICAgICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gYm9vc3RlZCkgKiBib29zdGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoc2V0dGluZ3Muc3RlcCwgYm9vc3RlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHZhbHVlSWZJc05hTigpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXR0aW5ncy5maXJzdGNsaWNrdmFsdWVpZmVtcHR5ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJldHVybiBzZXR0aW5ncy5maXJzdGNsaWNrdmFsdWVpZmVtcHR5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoc2V0dGluZ3MubWluICsgc2V0dGluZ3MubWF4KSAvIDI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF91cGRhdGVCdXR0b25EaXNhYmxlZFN0YXRlKCkge1xuICAgICAgICB2YXIgaXNEaXNhYmxlZCA9IG9yaWdpbmFsaW5wdXQuaXMoJzpkaXNhYmxlZCxbcmVhZG9ubHldJyk7XG4gICAgICAgIGVsZW1lbnRzLnVwLnByb3AoJ2Rpc2FibGVkJywgaXNEaXNhYmxlZCk7XG4gICAgICAgIGVsZW1lbnRzLmRvd24ucHJvcCgnZGlzYWJsZWQnLCBpc0Rpc2FibGVkKTtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1cE9uY2UoKSB7XG4gICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIF9jaGVja1ZhbHVlKCk7XG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChzZXR0aW5ncy5jYWxsYmFja19iZWZvcmVfY2FsY3VsYXRpb24oZWxlbWVudHMuaW5wdXQudmFsKCkpKTtcbiAgICAgICAgdmFyIGluaXR2YWx1ZSA9IHZhbHVlO1xuICAgICAgICB2YXIgYm9vc3RlZHN0ZXA7XG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlSWZJc05hTigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvb3N0ZWRzdGVwID0gX2dldEJvb3N0ZWRTdGVwKCk7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSArIGJvb3N0ZWRzdGVwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXR0aW5ncy5tYXggIT09IG51bGwgJiYgdmFsdWUgPj0gc2V0dGluZ3MubWF4KSB7XG4gICAgICAgICAgdmFsdWUgPSBzZXR0aW5ncy5tYXg7XG4gICAgICAgICAgb3JpZ2luYWxpbnB1dC50cmlnZ2VyKCd0b3VjaHNwaW4ub24ubWF4Jyk7XG4gICAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50cy5pbnB1dC52YWwoc2V0dGluZ3MuY2FsbGJhY2tfYWZ0ZXJfY2FsY3VsYXRpb24ocGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZChzZXR0aW5ncy5kZWNpbWFscykpKTtcbiAgICAgICAgaWYgKGluaXR2YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBkb3duT25jZSgpIHtcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuaXMoJzpkaXNhYmxlZCxbcmVhZG9ubHldJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgX2NoZWNrVmFsdWUoKTtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHNldHRpbmdzLmNhbGxiYWNrX2JlZm9yZV9jYWxjdWxhdGlvbihlbGVtZW50cy5pbnB1dC52YWwoKSkpO1xuICAgICAgICB2YXIgaW5pdHZhbHVlID0gdmFsdWU7XG4gICAgICAgIHZhciBib29zdGVkc3RlcDtcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVJZklzTmFOKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9vc3RlZHN0ZXAgPSBfZ2V0Qm9vc3RlZFN0ZXAoKTtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC0gYm9vc3RlZHN0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldHRpbmdzLm1pbiAhPT0gbnVsbCAmJiB2YWx1ZSA8PSBzZXR0aW5ncy5taW4pIHtcbiAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzLm1pbjtcbiAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5taW4nKTtcbiAgICAgICAgICBzdG9wU3BpbigpO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzLmlucHV0LnZhbChzZXR0aW5ncy5jYWxsYmFja19hZnRlcl9jYWxjdWxhdGlvbihwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKHNldHRpbmdzLmRlY2ltYWxzKSkpO1xuICAgICAgICBpZiAoaW5pdHZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgIG9yaWdpbmFsaW5wdXQudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0RG93blNwaW4oKSB7XG4gICAgICAgIGlmIChvcmlnaW5hbGlucHV0LmlzKCc6ZGlzYWJsZWQsW3JlYWRvbmx5XScpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0b3BTcGluKCk7XG4gICAgICAgIHNwaW5jb3VudCA9IDA7XG4gICAgICAgIHNwaW5uaW5nID0gJ2Rvd24nO1xuICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdGFydHNwaW4nKTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC50cmlnZ2VyKCd0b3VjaHNwaW4ub24uc3RhcnRkb3duc3BpbicpO1xuICAgICAgICBkb3duRGVsYXlUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZG93blNwaW5UaW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNwaW5jb3VudCsrO1xuICAgICAgICAgICAgZG93bk9uY2UoKTtcbiAgICAgICAgICB9LCBzZXR0aW5ncy5zdGVwaW50ZXJ2YWwpO1xuICAgICAgICB9LCBzZXR0aW5ncy5zdGVwaW50ZXJ2YWxkZWxheSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzdGFydFVwU3BpbigpIHtcbiAgICAgICAgaWYgKG9yaWdpbmFsaW5wdXQuaXMoJzpkaXNhYmxlZCxbcmVhZG9ubHldJykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RvcFNwaW4oKTtcbiAgICAgICAgc3BpbmNvdW50ID0gMDtcbiAgICAgICAgc3Bpbm5pbmcgPSAndXAnO1xuICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdGFydHNwaW4nKTtcbiAgICAgICAgb3JpZ2luYWxpbnB1dC50cmlnZ2VyKCd0b3VjaHNwaW4ub24uc3RhcnR1cHNwaW4nKTtcbiAgICAgICAgdXBEZWxheVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB1cFNwaW5UaW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNwaW5jb3VudCsrO1xuICAgICAgICAgICAgdXBPbmNlKCk7XG4gICAgICAgICAgfSwgc2V0dGluZ3Muc3RlcGludGVydmFsKTtcbiAgICAgICAgfSwgc2V0dGluZ3Muc3RlcGludGVydmFsZGVsYXkpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gc3RvcFNwaW4oKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChkb3duRGVsYXlUaW1lb3V0KTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHVwRGVsYXlUaW1lb3V0KTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChkb3duU3BpblRpbWVyKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh1cFNwaW5UaW1lcik7XG4gICAgICAgIHN3aXRjaCAoc3Bpbm5pbmcpIHtcbiAgICAgICAgICBjYXNlICd1cCc6XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdG9wdXBzcGluJyk7XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdG9wc3BpbicpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgICBvcmlnaW5hbGlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi5vbi5zdG9wZG93bnNwaW4nKTtcbiAgICAgICAgICAgIG9yaWdpbmFsaW5wdXQudHJpZ2dlcigndG91Y2hzcGluLm9uLnN0b3BzcGluJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzcGluY291bnQgPSAwO1xuICAgICAgICBzcGlubmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qcXVlcnkuYm9vdHN0cmFwLXRvdWNoc3Bpbi5qcy5tYXBcbiIsIi8qIVxuICogQGZpbGVPdmVydmlldyBUb3VjaFN3aXBlIC0galF1ZXJ5IFBsdWdpblxuICogQHZlcnNpb24gMS42LjE4XG4gKlxuICogQGF1dGhvciBNYXR0IEJyeXNvbiBodHRwOi8vd3d3LmdpdGh1Yi5jb20vbWF0dGJyeXNvblxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWF0dGJyeXNvbi9Ub3VjaFN3aXBlLUpxdWVyeS1QbHVnaW5cbiAqIEBzZWUgaHR0cDovL2xhYnMucmFtcGludGVyYWN0aXZlLmNvLnVrL3RvdWNoU3dpcGUvXG4gKiBAc2VlIGh0dHA6Ly9wbHVnaW5zLmpxdWVyeS5jb20vcHJvamVjdC90b3VjaFN3aXBlXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTUgTWF0dCBCcnlzb25cbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLlxuICpcbiAqL1xuIWZ1bmN0aW9uKGZhY3Rvcnkpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lLmFtZC5qUXVlcnk/ZGVmaW5lKFtcImpxdWVyeVwiXSxmYWN0b3J5KTpmYWN0b3J5KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP3JlcXVpcmUoXCJqcXVlcnlcIik6alF1ZXJ5KX0oZnVuY3Rpb24oJCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaW5pdChvcHRpb25zKXtyZXR1cm4hb3B0aW9uc3x8dm9pZCAwIT09b3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGx8fHZvaWQgMD09PW9wdGlvbnMuc3dpcGUmJnZvaWQgMD09PW9wdGlvbnMuc3dpcGVTdGF0dXN8fChvcHRpb25zLmFsbG93UGFnZVNjcm9sbD1OT05FKSx2b2lkIDAhPT1vcHRpb25zLmNsaWNrJiZ2b2lkIDA9PT1vcHRpb25zLnRhcCYmKG9wdGlvbnMudGFwPW9wdGlvbnMuY2xpY2spLG9wdGlvbnN8fChvcHRpb25zPXt9KSxvcHRpb25zPSQuZXh0ZW5kKHt9LCQuZm4uc3dpcGUuZGVmYXVsdHMsb3B0aW9ucyksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyICR0aGlzPSQodGhpcykscGx1Z2luPSR0aGlzLmRhdGEoUExVR0lOX05TKTtwbHVnaW58fChwbHVnaW49bmV3IFRvdWNoU3dpcGUodGhpcyxvcHRpb25zKSwkdGhpcy5kYXRhKFBMVUdJTl9OUyxwbHVnaW4pKX0pfWZ1bmN0aW9uIFRvdWNoU3dpcGUoZWxlbWVudCxvcHRpb25zKXtmdW5jdGlvbiB0b3VjaFN0YXJ0KGpxRXZlbnQpe2lmKCEoZ2V0VG91Y2hJblByb2dyZXNzKCl8fCQoanFFdmVudC50YXJnZXQpLmNsb3Nlc3Qob3B0aW9ucy5leGNsdWRlZEVsZW1lbnRzLCRlbGVtZW50KS5sZW5ndGg+MCkpe3ZhciBldmVudD1qcUV2ZW50Lm9yaWdpbmFsRXZlbnQ/anFFdmVudC5vcmlnaW5hbEV2ZW50OmpxRXZlbnQ7aWYoIWV2ZW50LnBvaW50ZXJUeXBlfHxcIm1vdXNlXCIhPWV2ZW50LnBvaW50ZXJUeXBlfHwwIT1vcHRpb25zLmZhbGxiYWNrVG9Nb3VzZUV2ZW50cyl7dmFyIHJldCx0b3VjaGVzPWV2ZW50LnRvdWNoZXMsZXZ0PXRvdWNoZXM/dG91Y2hlc1swXTpldmVudDtyZXR1cm4gcGhhc2U9UEhBU0VfU1RBUlQsdG91Y2hlcz9maW5nZXJDb3VudD10b3VjaGVzLmxlbmd0aDpvcHRpb25zLnByZXZlbnREZWZhdWx0RXZlbnRzIT09ITEmJmpxRXZlbnQucHJldmVudERlZmF1bHQoKSxkaXN0YW5jZT0wLGRpcmVjdGlvbj1udWxsLGN1cnJlbnREaXJlY3Rpb249bnVsbCxwaW5jaERpcmVjdGlvbj1udWxsLGR1cmF0aW9uPTAsc3RhcnRUb3VjaGVzRGlzdGFuY2U9MCxlbmRUb3VjaGVzRGlzdGFuY2U9MCxwaW5jaFpvb209MSxwaW5jaERpc3RhbmNlPTAsbWF4aW11bXNNYXA9Y3JlYXRlTWF4aW11bXNEYXRhKCksY2FuY2VsTXVsdGlGaW5nZXJSZWxlYXNlKCksY3JlYXRlRmluZ2VyRGF0YSgwLGV2dCksIXRvdWNoZXN8fGZpbmdlckNvdW50PT09b3B0aW9ucy5maW5nZXJzfHxvcHRpb25zLmZpbmdlcnM9PT1BTExfRklOR0VSU3x8aGFzUGluY2hlcygpPyhzdGFydFRpbWU9Z2V0VGltZVN0YW1wKCksMj09ZmluZ2VyQ291bnQmJihjcmVhdGVGaW5nZXJEYXRhKDEsdG91Y2hlc1sxXSksc3RhcnRUb3VjaGVzRGlzdGFuY2U9ZW5kVG91Y2hlc0Rpc3RhbmNlPWNhbGN1bGF0ZVRvdWNoZXNEaXN0YW5jZShmaW5nZXJEYXRhWzBdLnN0YXJ0LGZpbmdlckRhdGFbMV0uc3RhcnQpKSwob3B0aW9ucy5zd2lwZVN0YXR1c3x8b3B0aW9ucy5waW5jaFN0YXR1cykmJihyZXQ9dHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpKSk6cmV0PSExLHJldD09PSExPyhwaGFzZT1QSEFTRV9DQU5DRUwsdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpLHJldCk6KG9wdGlvbnMuaG9sZCYmKGhvbGRUaW1lb3V0PXNldFRpbWVvdXQoJC5wcm94eShmdW5jdGlvbigpeyRlbGVtZW50LnRyaWdnZXIoXCJob2xkXCIsW2V2ZW50LnRhcmdldF0pLG9wdGlvbnMuaG9sZCYmKHJldD1vcHRpb25zLmhvbGQuY2FsbCgkZWxlbWVudCxldmVudCxldmVudC50YXJnZXQpKX0sdGhpcyksb3B0aW9ucy5sb25nVGFwVGhyZXNob2xkKSksc2V0VG91Y2hJblByb2dyZXNzKCEwKSxudWxsKX19fWZ1bmN0aW9uIHRvdWNoTW92ZShqcUV2ZW50KXt2YXIgZXZlbnQ9anFFdmVudC5vcmlnaW5hbEV2ZW50P2pxRXZlbnQub3JpZ2luYWxFdmVudDpqcUV2ZW50O2lmKHBoYXNlIT09UEhBU0VfRU5EJiZwaGFzZSE9PVBIQVNFX0NBTkNFTCYmIWluTXVsdGlGaW5nZXJSZWxlYXNlKCkpe3ZhciByZXQsdG91Y2hlcz1ldmVudC50b3VjaGVzLGV2dD10b3VjaGVzP3RvdWNoZXNbMF06ZXZlbnQsY3VycmVudEZpbmdlcj11cGRhdGVGaW5nZXJEYXRhKGV2dCk7aWYoZW5kVGltZT1nZXRUaW1lU3RhbXAoKSx0b3VjaGVzJiYoZmluZ2VyQ291bnQ9dG91Y2hlcy5sZW5ndGgpLG9wdGlvbnMuaG9sZCYmY2xlYXJUaW1lb3V0KGhvbGRUaW1lb3V0KSxwaGFzZT1QSEFTRV9NT1ZFLDI9PWZpbmdlckNvdW50JiYoMD09c3RhcnRUb3VjaGVzRGlzdGFuY2U/KGNyZWF0ZUZpbmdlckRhdGEoMSx0b3VjaGVzWzFdKSxzdGFydFRvdWNoZXNEaXN0YW5jZT1lbmRUb3VjaGVzRGlzdGFuY2U9Y2FsY3VsYXRlVG91Y2hlc0Rpc3RhbmNlKGZpbmdlckRhdGFbMF0uc3RhcnQsZmluZ2VyRGF0YVsxXS5zdGFydCkpOih1cGRhdGVGaW5nZXJEYXRhKHRvdWNoZXNbMV0pLGVuZFRvdWNoZXNEaXN0YW5jZT1jYWxjdWxhdGVUb3VjaGVzRGlzdGFuY2UoZmluZ2VyRGF0YVswXS5lbmQsZmluZ2VyRGF0YVsxXS5lbmQpLHBpbmNoRGlyZWN0aW9uPWNhbGN1bGF0ZVBpbmNoRGlyZWN0aW9uKGZpbmdlckRhdGFbMF0uZW5kLGZpbmdlckRhdGFbMV0uZW5kKSkscGluY2hab29tPWNhbGN1bGF0ZVBpbmNoWm9vbShzdGFydFRvdWNoZXNEaXN0YW5jZSxlbmRUb3VjaGVzRGlzdGFuY2UpLHBpbmNoRGlzdGFuY2U9TWF0aC5hYnMoc3RhcnRUb3VjaGVzRGlzdGFuY2UtZW5kVG91Y2hlc0Rpc3RhbmNlKSksZmluZ2VyQ291bnQ9PT1vcHRpb25zLmZpbmdlcnN8fG9wdGlvbnMuZmluZ2Vycz09PUFMTF9GSU5HRVJTfHwhdG91Y2hlc3x8aGFzUGluY2hlcygpKXtpZihkaXJlY3Rpb249Y2FsY3VsYXRlRGlyZWN0aW9uKGN1cnJlbnRGaW5nZXIuc3RhcnQsY3VycmVudEZpbmdlci5lbmQpLGN1cnJlbnREaXJlY3Rpb249Y2FsY3VsYXRlRGlyZWN0aW9uKGN1cnJlbnRGaW5nZXIubGFzdCxjdXJyZW50RmluZ2VyLmVuZCksdmFsaWRhdGVEZWZhdWx0RXZlbnQoanFFdmVudCxjdXJyZW50RGlyZWN0aW9uKSxkaXN0YW5jZT1jYWxjdWxhdGVEaXN0YW5jZShjdXJyZW50RmluZ2VyLnN0YXJ0LGN1cnJlbnRGaW5nZXIuZW5kKSxkdXJhdGlvbj1jYWxjdWxhdGVEdXJhdGlvbigpLHNldE1heERpc3RhbmNlKGRpcmVjdGlvbixkaXN0YW5jZSkscmV0PXRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKSwhb3B0aW9ucy50cmlnZ2VyT25Ub3VjaEVuZHx8b3B0aW9ucy50cmlnZ2VyT25Ub3VjaExlYXZlKXt2YXIgaW5Cb3VuZHM9ITA7aWYob3B0aW9ucy50cmlnZ2VyT25Ub3VjaExlYXZlKXt2YXIgYm91bmRzPWdldGJvdW5kcyh0aGlzKTtpbkJvdW5kcz1pc0luQm91bmRzKGN1cnJlbnRGaW5nZXIuZW5kLGJvdW5kcyl9IW9wdGlvbnMudHJpZ2dlck9uVG91Y2hFbmQmJmluQm91bmRzP3BoYXNlPWdldE5leHRQaGFzZShQSEFTRV9NT1ZFKTpvcHRpb25zLnRyaWdnZXJPblRvdWNoTGVhdmUmJiFpbkJvdW5kcyYmKHBoYXNlPWdldE5leHRQaGFzZShQSEFTRV9FTkQpKSxwaGFzZSE9UEhBU0VfQ0FOQ0VMJiZwaGFzZSE9UEhBU0VfRU5EfHx0cmlnZ2VySGFuZGxlcihldmVudCxwaGFzZSl9fWVsc2UgcGhhc2U9UEhBU0VfQ0FOQ0VMLHRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKTtyZXQ9PT0hMSYmKHBoYXNlPVBIQVNFX0NBTkNFTCx0cmlnZ2VySGFuZGxlcihldmVudCxwaGFzZSkpfX1mdW5jdGlvbiB0b3VjaEVuZChqcUV2ZW50KXt2YXIgZXZlbnQ9anFFdmVudC5vcmlnaW5hbEV2ZW50P2pxRXZlbnQub3JpZ2luYWxFdmVudDpqcUV2ZW50LHRvdWNoZXM9ZXZlbnQudG91Y2hlcztpZih0b3VjaGVzKXtpZih0b3VjaGVzLmxlbmd0aCYmIWluTXVsdGlGaW5nZXJSZWxlYXNlKCkpcmV0dXJuIHN0YXJ0TXVsdGlGaW5nZXJSZWxlYXNlKGV2ZW50KSwhMDtpZih0b3VjaGVzLmxlbmd0aCYmaW5NdWx0aUZpbmdlclJlbGVhc2UoKSlyZXR1cm4hMH1yZXR1cm4gaW5NdWx0aUZpbmdlclJlbGVhc2UoKSYmKGZpbmdlckNvdW50PWZpbmdlckNvdW50QXRSZWxlYXNlKSxlbmRUaW1lPWdldFRpbWVTdGFtcCgpLGR1cmF0aW9uPWNhbGN1bGF0ZUR1cmF0aW9uKCksZGlkU3dpcGVCYWNrVG9DYW5jZWwoKXx8IXZhbGlkYXRlU3dpcGVEaXN0YW5jZSgpPyhwaGFzZT1QSEFTRV9DQU5DRUwsdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpKTpvcHRpb25zLnRyaWdnZXJPblRvdWNoRW5kfHxvcHRpb25zLnRyaWdnZXJPblRvdWNoRW5kPT09ITEmJnBoYXNlPT09UEhBU0VfTU9WRT8ob3B0aW9ucy5wcmV2ZW50RGVmYXVsdEV2ZW50cyE9PSExJiZqcUV2ZW50LmNhbmNlbGFibGUhPT0hMSYmanFFdmVudC5wcmV2ZW50RGVmYXVsdCgpLHBoYXNlPVBIQVNFX0VORCx0cmlnZ2VySGFuZGxlcihldmVudCxwaGFzZSkpOiFvcHRpb25zLnRyaWdnZXJPblRvdWNoRW5kJiZoYXNUYXAoKT8ocGhhc2U9UEhBU0VfRU5ELHRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxUQVApKTpwaGFzZT09PVBIQVNFX01PVkUmJihwaGFzZT1QSEFTRV9DQU5DRUwsdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpKSxzZXRUb3VjaEluUHJvZ3Jlc3MoITEpLG51bGx9ZnVuY3Rpb24gdG91Y2hDYW5jZWwoKXtmaW5nZXJDb3VudD0wLGVuZFRpbWU9MCxzdGFydFRpbWU9MCxzdGFydFRvdWNoZXNEaXN0YW5jZT0wLGVuZFRvdWNoZXNEaXN0YW5jZT0wLHBpbmNoWm9vbT0xLGNhbmNlbE11bHRpRmluZ2VyUmVsZWFzZSgpLHNldFRvdWNoSW5Qcm9ncmVzcyghMSl9ZnVuY3Rpb24gdG91Y2hMZWF2ZShqcUV2ZW50KXt2YXIgZXZlbnQ9anFFdmVudC5vcmlnaW5hbEV2ZW50P2pxRXZlbnQub3JpZ2luYWxFdmVudDpqcUV2ZW50O29wdGlvbnMudHJpZ2dlck9uVG91Y2hMZWF2ZSYmKHBoYXNlPWdldE5leHRQaGFzZShQSEFTRV9FTkQpLHRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKSl9ZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXJzKCl7JGVsZW1lbnQub2ZmKFNUQVJUX0VWLHRvdWNoU3RhcnQpLCRlbGVtZW50Lm9mZihDQU5DRUxfRVYsdG91Y2hDYW5jZWwpLCRlbGVtZW50Lm9mZihNT1ZFX0VWLHRvdWNoTW92ZSksJGVsZW1lbnQub2ZmKEVORF9FVix0b3VjaEVuZCksTEVBVkVfRVYmJiRlbGVtZW50Lm9mZihMRUFWRV9FVix0b3VjaExlYXZlKSxzZXRUb3VjaEluUHJvZ3Jlc3MoITEpfWZ1bmN0aW9uIGdldE5leHRQaGFzZShjdXJyZW50UGhhc2Upe3ZhciBuZXh0UGhhc2U9Y3VycmVudFBoYXNlLHZhbGlkVGltZT12YWxpZGF0ZVN3aXBlVGltZSgpLHZhbGlkRGlzdGFuY2U9dmFsaWRhdGVTd2lwZURpc3RhbmNlKCksZGlkQ2FuY2VsPWRpZFN3aXBlQmFja1RvQ2FuY2VsKCk7cmV0dXJuIXZhbGlkVGltZXx8ZGlkQ2FuY2VsP25leHRQaGFzZT1QSEFTRV9DQU5DRUw6IXZhbGlkRGlzdGFuY2V8fGN1cnJlbnRQaGFzZSE9UEhBU0VfTU9WRXx8b3B0aW9ucy50cmlnZ2VyT25Ub3VjaEVuZCYmIW9wdGlvbnMudHJpZ2dlck9uVG91Y2hMZWF2ZT8hdmFsaWREaXN0YW5jZSYmY3VycmVudFBoYXNlPT1QSEFTRV9FTkQmJm9wdGlvbnMudHJpZ2dlck9uVG91Y2hMZWF2ZSYmKG5leHRQaGFzZT1QSEFTRV9DQU5DRUwpOm5leHRQaGFzZT1QSEFTRV9FTkQsbmV4dFBoYXNlfWZ1bmN0aW9uIHRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKXt2YXIgcmV0LHRvdWNoZXM9ZXZlbnQudG91Y2hlcztyZXR1cm4oZGlkU3dpcGUoKXx8aGFzU3dpcGVzKCkpJiYocmV0PXRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxTV0lQRSkpLChkaWRQaW5jaCgpfHxoYXNQaW5jaGVzKCkpJiZyZXQhPT0hMSYmKHJldD10cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsUElOQ0gpKSxkaWREb3VibGVUYXAoKSYmcmV0IT09ITE/cmV0PXRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxET1VCTEVfVEFQKTpkaWRMb25nVGFwKCkmJnJldCE9PSExP3JldD10cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsTE9OR19UQVApOmRpZFRhcCgpJiZyZXQhPT0hMSYmKHJldD10cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsVEFQKSkscGhhc2U9PT1QSEFTRV9DQU5DRUwmJnRvdWNoQ2FuY2VsKGV2ZW50KSxwaGFzZT09PVBIQVNFX0VORCYmKHRvdWNoZXM/dG91Y2hlcy5sZW5ndGh8fHRvdWNoQ2FuY2VsKGV2ZW50KTp0b3VjaENhbmNlbChldmVudCkpLHJldH1mdW5jdGlvbiB0cmlnZ2VySGFuZGxlckZvckdlc3R1cmUoZXZlbnQscGhhc2UsZ2VzdHVyZSl7dmFyIHJldDtpZihnZXN0dXJlPT1TV0lQRSl7aWYoJGVsZW1lbnQudHJpZ2dlcihcInN3aXBlU3RhdHVzXCIsW3BoYXNlLGRpcmVjdGlvbnx8bnVsbCxkaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb25dKSxvcHRpb25zLnN3aXBlU3RhdHVzJiYocmV0PW9wdGlvbnMuc3dpcGVTdGF0dXMuY2FsbCgkZWxlbWVudCxldmVudCxwaGFzZSxkaXJlY3Rpb258fG51bGwsZGlzdGFuY2V8fDAsZHVyYXRpb258fDAsZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uKSxyZXQ9PT0hMSkpcmV0dXJuITE7aWYocGhhc2U9PVBIQVNFX0VORCYmdmFsaWRhdGVTd2lwZSgpKXtpZihjbGVhclRpbWVvdXQoc2luZ2xlVGFwVGltZW91dCksY2xlYXJUaW1lb3V0KGhvbGRUaW1lb3V0KSwkZWxlbWVudC50cmlnZ2VyKFwic3dpcGVcIixbZGlyZWN0aW9uLGRpc3RhbmNlLGR1cmF0aW9uLGZpbmdlckNvdW50LGZpbmdlckRhdGEsY3VycmVudERpcmVjdGlvbl0pLG9wdGlvbnMuc3dpcGUmJihyZXQ9b3B0aW9ucy5zd2lwZS5jYWxsKCRlbGVtZW50LGV2ZW50LGRpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb24pLHJldD09PSExKSlyZXR1cm4hMTtzd2l0Y2goZGlyZWN0aW9uKXtjYXNlIExFRlQ6JGVsZW1lbnQudHJpZ2dlcihcInN3aXBlTGVmdFwiLFtkaXJlY3Rpb24sZGlzdGFuY2UsZHVyYXRpb24sZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uXSksb3B0aW9ucy5zd2lwZUxlZnQmJihyZXQ9b3B0aW9ucy5zd2lwZUxlZnQuY2FsbCgkZWxlbWVudCxldmVudCxkaXJlY3Rpb24sZGlzdGFuY2UsZHVyYXRpb24sZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uKSk7YnJlYWs7Y2FzZSBSSUdIVDokZWxlbWVudC50cmlnZ2VyKFwic3dpcGVSaWdodFwiLFtkaXJlY3Rpb24sZGlzdGFuY2UsZHVyYXRpb24sZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uXSksb3B0aW9ucy5zd2lwZVJpZ2h0JiYocmV0PW9wdGlvbnMuc3dpcGVSaWdodC5jYWxsKCRlbGVtZW50LGV2ZW50LGRpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb24pKTticmVhaztjYXNlIFVQOiRlbGVtZW50LnRyaWdnZXIoXCJzd2lwZVVwXCIsW2RpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb25dKSxvcHRpb25zLnN3aXBlVXAmJihyZXQ9b3B0aW9ucy5zd2lwZVVwLmNhbGwoJGVsZW1lbnQsZXZlbnQsZGlyZWN0aW9uLGRpc3RhbmNlLGR1cmF0aW9uLGZpbmdlckNvdW50LGZpbmdlckRhdGEsY3VycmVudERpcmVjdGlvbikpO2JyZWFrO2Nhc2UgRE9XTjokZWxlbWVudC50cmlnZ2VyKFwic3dpcGVEb3duXCIsW2RpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb25dKSxvcHRpb25zLnN3aXBlRG93biYmKHJldD1vcHRpb25zLnN3aXBlRG93bi5jYWxsKCRlbGVtZW50LGV2ZW50LGRpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb24pKX19fWlmKGdlc3R1cmU9PVBJTkNIKXtpZigkZWxlbWVudC50cmlnZ2VyKFwicGluY2hTdGF0dXNcIixbcGhhc2UscGluY2hEaXJlY3Rpb258fG51bGwscGluY2hEaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxwaW5jaFpvb20sZmluZ2VyRGF0YV0pLG9wdGlvbnMucGluY2hTdGF0dXMmJihyZXQ9b3B0aW9ucy5waW5jaFN0YXR1cy5jYWxsKCRlbGVtZW50LGV2ZW50LHBoYXNlLHBpbmNoRGlyZWN0aW9ufHxudWxsLHBpbmNoRGlzdGFuY2V8fDAsZHVyYXRpb258fDAsZmluZ2VyQ291bnQscGluY2hab29tLGZpbmdlckRhdGEpLHJldD09PSExKSlyZXR1cm4hMTtpZihwaGFzZT09UEhBU0VfRU5EJiZ2YWxpZGF0ZVBpbmNoKCkpc3dpdGNoKHBpbmNoRGlyZWN0aW9uKXtjYXNlIElOOiRlbGVtZW50LnRyaWdnZXIoXCJwaW5jaEluXCIsW3BpbmNoRGlyZWN0aW9ufHxudWxsLHBpbmNoRGlzdGFuY2V8fDAsZHVyYXRpb258fDAsZmluZ2VyQ291bnQscGluY2hab29tLGZpbmdlckRhdGFdKSxvcHRpb25zLnBpbmNoSW4mJihyZXQ9b3B0aW9ucy5waW5jaEluLmNhbGwoJGVsZW1lbnQsZXZlbnQscGluY2hEaXJlY3Rpb258fG51bGwscGluY2hEaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxwaW5jaFpvb20sZmluZ2VyRGF0YSkpO2JyZWFrO2Nhc2UgT1VUOiRlbGVtZW50LnRyaWdnZXIoXCJwaW5jaE91dFwiLFtwaW5jaERpcmVjdGlvbnx8bnVsbCxwaW5jaERpc3RhbmNlfHwwLGR1cmF0aW9ufHwwLGZpbmdlckNvdW50LHBpbmNoWm9vbSxmaW5nZXJEYXRhXSksb3B0aW9ucy5waW5jaE91dCYmKHJldD1vcHRpb25zLnBpbmNoT3V0LmNhbGwoJGVsZW1lbnQsZXZlbnQscGluY2hEaXJlY3Rpb258fG51bGwscGluY2hEaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxwaW5jaFpvb20sZmluZ2VyRGF0YSkpfX1yZXR1cm4gZ2VzdHVyZT09VEFQP3BoYXNlIT09UEhBU0VfQ0FOQ0VMJiZwaGFzZSE9PVBIQVNFX0VORHx8KGNsZWFyVGltZW91dChzaW5nbGVUYXBUaW1lb3V0KSxjbGVhclRpbWVvdXQoaG9sZFRpbWVvdXQpLGhhc0RvdWJsZVRhcCgpJiYhaW5Eb3VibGVUYXAoKT8oZG91YmxlVGFwU3RhcnRUaW1lPWdldFRpbWVTdGFtcCgpLHNpbmdsZVRhcFRpbWVvdXQ9c2V0VGltZW91dCgkLnByb3h5KGZ1bmN0aW9uKCl7ZG91YmxlVGFwU3RhcnRUaW1lPW51bGwsJGVsZW1lbnQudHJpZ2dlcihcInRhcFwiLFtldmVudC50YXJnZXRdKSxvcHRpb25zLnRhcCYmKHJldD1vcHRpb25zLnRhcC5jYWxsKCRlbGVtZW50LGV2ZW50LGV2ZW50LnRhcmdldCkpfSx0aGlzKSxvcHRpb25zLmRvdWJsZVRhcFRocmVzaG9sZCkpOihkb3VibGVUYXBTdGFydFRpbWU9bnVsbCwkZWxlbWVudC50cmlnZ2VyKFwidGFwXCIsW2V2ZW50LnRhcmdldF0pLG9wdGlvbnMudGFwJiYocmV0PW9wdGlvbnMudGFwLmNhbGwoJGVsZW1lbnQsZXZlbnQsZXZlbnQudGFyZ2V0KSkpKTpnZXN0dXJlPT1ET1VCTEVfVEFQP3BoYXNlIT09UEhBU0VfQ0FOQ0VMJiZwaGFzZSE9PVBIQVNFX0VORHx8KGNsZWFyVGltZW91dChzaW5nbGVUYXBUaW1lb3V0KSxjbGVhclRpbWVvdXQoaG9sZFRpbWVvdXQpLGRvdWJsZVRhcFN0YXJ0VGltZT1udWxsLCRlbGVtZW50LnRyaWdnZXIoXCJkb3VibGV0YXBcIixbZXZlbnQudGFyZ2V0XSksb3B0aW9ucy5kb3VibGVUYXAmJihyZXQ9b3B0aW9ucy5kb3VibGVUYXAuY2FsbCgkZWxlbWVudCxldmVudCxldmVudC50YXJnZXQpKSk6Z2VzdHVyZT09TE9OR19UQVAmJihwaGFzZSE9PVBIQVNFX0NBTkNFTCYmcGhhc2UhPT1QSEFTRV9FTkR8fChjbGVhclRpbWVvdXQoc2luZ2xlVGFwVGltZW91dCksZG91YmxlVGFwU3RhcnRUaW1lPW51bGwsJGVsZW1lbnQudHJpZ2dlcihcImxvbmd0YXBcIixbZXZlbnQudGFyZ2V0XSksb3B0aW9ucy5sb25nVGFwJiYocmV0PW9wdGlvbnMubG9uZ1RhcC5jYWxsKCRlbGVtZW50LGV2ZW50LGV2ZW50LnRhcmdldCkpKSkscmV0fWZ1bmN0aW9uIHZhbGlkYXRlU3dpcGVEaXN0YW5jZSgpe3ZhciB2YWxpZD0hMDtyZXR1cm4gbnVsbCE9PW9wdGlvbnMudGhyZXNob2xkJiYodmFsaWQ9ZGlzdGFuY2U+PW9wdGlvbnMudGhyZXNob2xkKSx2YWxpZH1mdW5jdGlvbiBkaWRTd2lwZUJhY2tUb0NhbmNlbCgpe3ZhciBjYW5jZWxsZWQ9ITE7cmV0dXJuIG51bGwhPT1vcHRpb25zLmNhbmNlbFRocmVzaG9sZCYmbnVsbCE9PWRpcmVjdGlvbiYmKGNhbmNlbGxlZD1nZXRNYXhEaXN0YW5jZShkaXJlY3Rpb24pLWRpc3RhbmNlPj1vcHRpb25zLmNhbmNlbFRocmVzaG9sZCksY2FuY2VsbGVkfWZ1bmN0aW9uIHZhbGlkYXRlUGluY2hEaXN0YW5jZSgpe3JldHVybiBudWxsIT09b3B0aW9ucy5waW5jaFRocmVzaG9sZD9waW5jaERpc3RhbmNlPj1vcHRpb25zLnBpbmNoVGhyZXNob2xkOiEwfWZ1bmN0aW9uIHZhbGlkYXRlU3dpcGVUaW1lKCl7dmFyIHJlc3VsdDtyZXR1cm4gcmVzdWx0PW9wdGlvbnMubWF4VGltZVRocmVzaG9sZD8hKGR1cmF0aW9uPj1vcHRpb25zLm1heFRpbWVUaHJlc2hvbGQpOiEwfWZ1bmN0aW9uIHZhbGlkYXRlRGVmYXVsdEV2ZW50KGpxRXZlbnQsZGlyZWN0aW9uKXtpZihvcHRpb25zLnByZXZlbnREZWZhdWx0RXZlbnRzIT09ITEpaWYob3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGw9PT1OT05FKWpxRXZlbnQucHJldmVudERlZmF1bHQoKTtlbHNle3ZhciBhdXRvPW9wdGlvbnMuYWxsb3dQYWdlU2Nyb2xsPT09QVVUTztzd2l0Y2goZGlyZWN0aW9uKXtjYXNlIExFRlQ6KG9wdGlvbnMuc3dpcGVMZWZ0JiZhdXRvfHwhYXV0byYmb3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGwhPUhPUklaT05UQUwpJiZqcUV2ZW50LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBSSUdIVDoob3B0aW9ucy5zd2lwZVJpZ2h0JiZhdXRvfHwhYXV0byYmb3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGwhPUhPUklaT05UQUwpJiZqcUV2ZW50LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBVUDoob3B0aW9ucy5zd2lwZVVwJiZhdXRvfHwhYXV0byYmb3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGwhPVZFUlRJQ0FMKSYmanFFdmVudC5wcmV2ZW50RGVmYXVsdCgpO2JyZWFrO2Nhc2UgRE9XTjoob3B0aW9ucy5zd2lwZURvd24mJmF1dG98fCFhdXRvJiZvcHRpb25zLmFsbG93UGFnZVNjcm9sbCE9VkVSVElDQUwpJiZqcUV2ZW50LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBOT05FOn19fWZ1bmN0aW9uIHZhbGlkYXRlUGluY2goKXt2YXIgaGFzQ29ycmVjdEZpbmdlckNvdW50PXZhbGlkYXRlRmluZ2VycygpLGhhc0VuZFBvaW50PXZhbGlkYXRlRW5kUG9pbnQoKSxoYXNDb3JyZWN0RGlzdGFuY2U9dmFsaWRhdGVQaW5jaERpc3RhbmNlKCk7cmV0dXJuIGhhc0NvcnJlY3RGaW5nZXJDb3VudCYmaGFzRW5kUG9pbnQmJmhhc0NvcnJlY3REaXN0YW5jZX1mdW5jdGlvbiBoYXNQaW5jaGVzKCl7cmV0dXJuISEob3B0aW9ucy5waW5jaFN0YXR1c3x8b3B0aW9ucy5waW5jaElufHxvcHRpb25zLnBpbmNoT3V0KX1mdW5jdGlvbiBkaWRQaW5jaCgpe3JldHVybiEoIXZhbGlkYXRlUGluY2goKXx8IWhhc1BpbmNoZXMoKSl9ZnVuY3Rpb24gdmFsaWRhdGVTd2lwZSgpe3ZhciBoYXNWYWxpZFRpbWU9dmFsaWRhdGVTd2lwZVRpbWUoKSxoYXNWYWxpZERpc3RhbmNlPXZhbGlkYXRlU3dpcGVEaXN0YW5jZSgpLGhhc0NvcnJlY3RGaW5nZXJDb3VudD12YWxpZGF0ZUZpbmdlcnMoKSxoYXNFbmRQb2ludD12YWxpZGF0ZUVuZFBvaW50KCksZGlkQ2FuY2VsPWRpZFN3aXBlQmFja1RvQ2FuY2VsKCksdmFsaWQ9IWRpZENhbmNlbCYmaGFzRW5kUG9pbnQmJmhhc0NvcnJlY3RGaW5nZXJDb3VudCYmaGFzVmFsaWREaXN0YW5jZSYmaGFzVmFsaWRUaW1lO3JldHVybiB2YWxpZH1mdW5jdGlvbiBoYXNTd2lwZXMoKXtyZXR1cm4hIShvcHRpb25zLnN3aXBlfHxvcHRpb25zLnN3aXBlU3RhdHVzfHxvcHRpb25zLnN3aXBlTGVmdHx8b3B0aW9ucy5zd2lwZVJpZ2h0fHxvcHRpb25zLnN3aXBlVXB8fG9wdGlvbnMuc3dpcGVEb3duKX1mdW5jdGlvbiBkaWRTd2lwZSgpe3JldHVybiEoIXZhbGlkYXRlU3dpcGUoKXx8IWhhc1N3aXBlcygpKX1mdW5jdGlvbiB2YWxpZGF0ZUZpbmdlcnMoKXtyZXR1cm4gZmluZ2VyQ291bnQ9PT1vcHRpb25zLmZpbmdlcnN8fG9wdGlvbnMuZmluZ2Vycz09PUFMTF9GSU5HRVJTfHwhU1VQUE9SVFNfVE9VQ0h9ZnVuY3Rpb24gdmFsaWRhdGVFbmRQb2ludCgpe3JldHVybiAwIT09ZmluZ2VyRGF0YVswXS5lbmQueH1mdW5jdGlvbiBoYXNUYXAoKXtyZXR1cm4hIW9wdGlvbnMudGFwfWZ1bmN0aW9uIGhhc0RvdWJsZVRhcCgpe3JldHVybiEhb3B0aW9ucy5kb3VibGVUYXB9ZnVuY3Rpb24gaGFzTG9uZ1RhcCgpe3JldHVybiEhb3B0aW9ucy5sb25nVGFwfWZ1bmN0aW9uIHZhbGlkYXRlRG91YmxlVGFwKCl7aWYobnVsbD09ZG91YmxlVGFwU3RhcnRUaW1lKXJldHVybiExO3ZhciBub3c9Z2V0VGltZVN0YW1wKCk7cmV0dXJuIGhhc0RvdWJsZVRhcCgpJiZub3ctZG91YmxlVGFwU3RhcnRUaW1lPD1vcHRpb25zLmRvdWJsZVRhcFRocmVzaG9sZH1mdW5jdGlvbiBpbkRvdWJsZVRhcCgpe3JldHVybiB2YWxpZGF0ZURvdWJsZVRhcCgpfWZ1bmN0aW9uIHZhbGlkYXRlVGFwKCl7cmV0dXJuKDE9PT1maW5nZXJDb3VudHx8IVNVUFBPUlRTX1RPVUNIKSYmKGlzTmFOKGRpc3RhbmNlKXx8ZGlzdGFuY2U8b3B0aW9ucy50aHJlc2hvbGQpfWZ1bmN0aW9uIHZhbGlkYXRlTG9uZ1RhcCgpe3JldHVybiBkdXJhdGlvbj5vcHRpb25zLmxvbmdUYXBUaHJlc2hvbGQmJkRPVUJMRV9UQVBfVEhSRVNIT0xEPmRpc3RhbmNlfWZ1bmN0aW9uIGRpZFRhcCgpe3JldHVybiEoIXZhbGlkYXRlVGFwKCl8fCFoYXNUYXAoKSl9ZnVuY3Rpb24gZGlkRG91YmxlVGFwKCl7cmV0dXJuISghdmFsaWRhdGVEb3VibGVUYXAoKXx8IWhhc0RvdWJsZVRhcCgpKX1mdW5jdGlvbiBkaWRMb25nVGFwKCl7cmV0dXJuISghdmFsaWRhdGVMb25nVGFwKCl8fCFoYXNMb25nVGFwKCkpfWZ1bmN0aW9uIHN0YXJ0TXVsdGlGaW5nZXJSZWxlYXNlKGV2ZW50KXtwcmV2aW91c1RvdWNoRW5kVGltZT1nZXRUaW1lU3RhbXAoKSxmaW5nZXJDb3VudEF0UmVsZWFzZT1ldmVudC50b3VjaGVzLmxlbmd0aCsxfWZ1bmN0aW9uIGNhbmNlbE11bHRpRmluZ2VyUmVsZWFzZSgpe3ByZXZpb3VzVG91Y2hFbmRUaW1lPTAsZmluZ2VyQ291bnRBdFJlbGVhc2U9MH1mdW5jdGlvbiBpbk11bHRpRmluZ2VyUmVsZWFzZSgpe3ZhciB3aXRoaW5UaHJlc2hvbGQ9ITE7aWYocHJldmlvdXNUb3VjaEVuZFRpbWUpe3ZhciBkaWZmPWdldFRpbWVTdGFtcCgpLXByZXZpb3VzVG91Y2hFbmRUaW1lO2RpZmY8PW9wdGlvbnMuZmluZ2VyUmVsZWFzZVRocmVzaG9sZCYmKHdpdGhpblRocmVzaG9sZD0hMCl9cmV0dXJuIHdpdGhpblRocmVzaG9sZH1mdW5jdGlvbiBnZXRUb3VjaEluUHJvZ3Jlc3MoKXtyZXR1cm4hKCRlbGVtZW50LmRhdGEoUExVR0lOX05TK1wiX2ludG91Y2hcIikhPT0hMCl9ZnVuY3Rpb24gc2V0VG91Y2hJblByb2dyZXNzKHZhbCl7JGVsZW1lbnQmJih2YWw9PT0hMD8oJGVsZW1lbnQub24oTU9WRV9FVix0b3VjaE1vdmUpLCRlbGVtZW50Lm9uKEVORF9FVix0b3VjaEVuZCksTEVBVkVfRVYmJiRlbGVtZW50Lm9uKExFQVZFX0VWLHRvdWNoTGVhdmUpKTooJGVsZW1lbnQub2ZmKE1PVkVfRVYsdG91Y2hNb3ZlLCExKSwkZWxlbWVudC5vZmYoRU5EX0VWLHRvdWNoRW5kLCExKSxMRUFWRV9FViYmJGVsZW1lbnQub2ZmKExFQVZFX0VWLHRvdWNoTGVhdmUsITEpKSwkZWxlbWVudC5kYXRhKFBMVUdJTl9OUytcIl9pbnRvdWNoXCIsdmFsPT09ITApKX1mdW5jdGlvbiBjcmVhdGVGaW5nZXJEYXRhKGlkLGV2dCl7dmFyIGY9e3N0YXJ0Ont4OjAseTowfSxsYXN0Ont4OjAseTowfSxlbmQ6e3g6MCx5OjB9fTtyZXR1cm4gZi5zdGFydC54PWYubGFzdC54PWYuZW5kLng9ZXZ0LnBhZ2VYfHxldnQuY2xpZW50WCxmLnN0YXJ0Lnk9Zi5sYXN0Lnk9Zi5lbmQueT1ldnQucGFnZVl8fGV2dC5jbGllbnRZLGZpbmdlckRhdGFbaWRdPWYsZn1mdW5jdGlvbiB1cGRhdGVGaW5nZXJEYXRhKGV2dCl7dmFyIGlkPXZvaWQgMCE9PWV2dC5pZGVudGlmaWVyP2V2dC5pZGVudGlmaWVyOjAsZj1nZXRGaW5nZXJEYXRhKGlkKTtyZXR1cm4gbnVsbD09PWYmJihmPWNyZWF0ZUZpbmdlckRhdGEoaWQsZXZ0KSksZi5sYXN0Lng9Zi5lbmQueCxmLmxhc3QueT1mLmVuZC55LGYuZW5kLng9ZXZ0LnBhZ2VYfHxldnQuY2xpZW50WCxmLmVuZC55PWV2dC5wYWdlWXx8ZXZ0LmNsaWVudFksZn1mdW5jdGlvbiBnZXRGaW5nZXJEYXRhKGlkKXtyZXR1cm4gZmluZ2VyRGF0YVtpZF18fG51bGx9ZnVuY3Rpb24gc2V0TWF4RGlzdGFuY2UoZGlyZWN0aW9uLGRpc3RhbmNlKXtkaXJlY3Rpb24hPU5PTkUmJihkaXN0YW5jZT1NYXRoLm1heChkaXN0YW5jZSxnZXRNYXhEaXN0YW5jZShkaXJlY3Rpb24pKSxtYXhpbXVtc01hcFtkaXJlY3Rpb25dLmRpc3RhbmNlPWRpc3RhbmNlKX1mdW5jdGlvbiBnZXRNYXhEaXN0YW5jZShkaXJlY3Rpb24pe3JldHVybiBtYXhpbXVtc01hcFtkaXJlY3Rpb25dP21heGltdW1zTWFwW2RpcmVjdGlvbl0uZGlzdGFuY2U6dm9pZCAwfWZ1bmN0aW9uIGNyZWF0ZU1heGltdW1zRGF0YSgpe3ZhciBtYXhEYXRhPXt9O3JldHVybiBtYXhEYXRhW0xFRlRdPWNyZWF0ZU1heGltdW1WTyhMRUZUKSxtYXhEYXRhW1JJR0hUXT1jcmVhdGVNYXhpbXVtVk8oUklHSFQpLG1heERhdGFbVVBdPWNyZWF0ZU1heGltdW1WTyhVUCksbWF4RGF0YVtET1dOXT1jcmVhdGVNYXhpbXVtVk8oRE9XTiksbWF4RGF0YX1mdW5jdGlvbiBjcmVhdGVNYXhpbXVtVk8oZGlyKXtyZXR1cm57ZGlyZWN0aW9uOmRpcixkaXN0YW5jZTowfX1mdW5jdGlvbiBjYWxjdWxhdGVEdXJhdGlvbigpe3JldHVybiBlbmRUaW1lLXN0YXJ0VGltZX1mdW5jdGlvbiBjYWxjdWxhdGVUb3VjaGVzRGlzdGFuY2Uoc3RhcnRQb2ludCxlbmRQb2ludCl7dmFyIGRpZmZYPU1hdGguYWJzKHN0YXJ0UG9pbnQueC1lbmRQb2ludC54KSxkaWZmWT1NYXRoLmFicyhzdGFydFBvaW50LnktZW5kUG9pbnQueSk7cmV0dXJuIE1hdGgucm91bmQoTWF0aC5zcXJ0KGRpZmZYKmRpZmZYK2RpZmZZKmRpZmZZKSl9ZnVuY3Rpb24gY2FsY3VsYXRlUGluY2hab29tKHN0YXJ0RGlzdGFuY2UsZW5kRGlzdGFuY2Upe3ZhciBwZXJjZW50PWVuZERpc3RhbmNlL3N0YXJ0RGlzdGFuY2UqMTtyZXR1cm4gcGVyY2VudC50b0ZpeGVkKDIpfWZ1bmN0aW9uIGNhbGN1bGF0ZVBpbmNoRGlyZWN0aW9uKCl7cmV0dXJuIDE+cGluY2hab29tP09VVDpJTn1mdW5jdGlvbiBjYWxjdWxhdGVEaXN0YW5jZShzdGFydFBvaW50LGVuZFBvaW50KXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnNxcnQoTWF0aC5wb3coZW5kUG9pbnQueC1zdGFydFBvaW50LngsMikrTWF0aC5wb3coZW5kUG9pbnQueS1zdGFydFBvaW50LnksMikpKX1mdW5jdGlvbiBjYWxjdWxhdGVBbmdsZShzdGFydFBvaW50LGVuZFBvaW50KXt2YXIgeD1zdGFydFBvaW50LngtZW5kUG9pbnQueCx5PWVuZFBvaW50Lnktc3RhcnRQb2ludC55LHI9TWF0aC5hdGFuMih5LHgpLGFuZ2xlPU1hdGgucm91bmQoMTgwKnIvTWF0aC5QSSk7cmV0dXJuIDA+YW5nbGUmJihhbmdsZT0zNjAtTWF0aC5hYnMoYW5nbGUpKSxhbmdsZX1mdW5jdGlvbiBjYWxjdWxhdGVEaXJlY3Rpb24oc3RhcnRQb2ludCxlbmRQb2ludCl7aWYoY29tcGFyZVBvaW50cyhzdGFydFBvaW50LGVuZFBvaW50KSlyZXR1cm4gTk9ORTt2YXIgYW5nbGU9Y2FsY3VsYXRlQW5nbGUoc3RhcnRQb2ludCxlbmRQb2ludCk7cmV0dXJuIDQ1Pj1hbmdsZSYmYW5nbGU+PTA/TEVGVDozNjA+PWFuZ2xlJiZhbmdsZT49MzE1P0xFRlQ6YW5nbGU+PTEzNSYmMjI1Pj1hbmdsZT9SSUdIVDphbmdsZT40NSYmMTM1PmFuZ2xlP0RPV046VVB9ZnVuY3Rpb24gZ2V0VGltZVN0YW1wKCl7dmFyIG5vdz1uZXcgRGF0ZTtyZXR1cm4gbm93LmdldFRpbWUoKX1mdW5jdGlvbiBnZXRib3VuZHMoZWwpe2VsPSQoZWwpO3ZhciBvZmZzZXQ9ZWwub2Zmc2V0KCksYm91bmRzPXtsZWZ0Om9mZnNldC5sZWZ0LHJpZ2h0Om9mZnNldC5sZWZ0K2VsLm91dGVyV2lkdGgoKSx0b3A6b2Zmc2V0LnRvcCxib3R0b206b2Zmc2V0LnRvcCtlbC5vdXRlckhlaWdodCgpfTtyZXR1cm4gYm91bmRzfWZ1bmN0aW9uIGlzSW5Cb3VuZHMocG9pbnQsYm91bmRzKXtyZXR1cm4gcG9pbnQueD5ib3VuZHMubGVmdCYmcG9pbnQueDxib3VuZHMucmlnaHQmJnBvaW50Lnk+Ym91bmRzLnRvcCYmcG9pbnQueTxib3VuZHMuYm90dG9tfWZ1bmN0aW9uIGNvbXBhcmVQb2ludHMocG9pbnRBLHBvaW50Qil7cmV0dXJuIHBvaW50QS54PT1wb2ludEIueCYmcG9pbnRBLnk9PXBvaW50Qi55fXZhciBvcHRpb25zPSQuZXh0ZW5kKHt9LG9wdGlvbnMpLHVzZVRvdWNoRXZlbnRzPVNVUFBPUlRTX1RPVUNIfHxTVVBQT1JUU19QT0lOVEVSfHwhb3B0aW9ucy5mYWxsYmFja1RvTW91c2VFdmVudHMsU1RBUlRfRVY9dXNlVG91Y2hFdmVudHM/U1VQUE9SVFNfUE9JTlRFUj9TVVBQT1JUU19QT0lOVEVSX0lFMTA/XCJNU1BvaW50ZXJEb3duXCI6XCJwb2ludGVyZG93blwiOlwidG91Y2hzdGFydFwiOlwibW91c2Vkb3duXCIsTU9WRV9FVj11c2VUb3VjaEV2ZW50cz9TVVBQT1JUU19QT0lOVEVSP1NVUFBPUlRTX1BPSU5URVJfSUUxMD9cIk1TUG9pbnRlck1vdmVcIjpcInBvaW50ZXJtb3ZlXCI6XCJ0b3VjaG1vdmVcIjpcIm1vdXNlbW92ZVwiLEVORF9FVj11c2VUb3VjaEV2ZW50cz9TVVBQT1JUU19QT0lOVEVSP1NVUFBPUlRTX1BPSU5URVJfSUUxMD9cIk1TUG9pbnRlclVwXCI6XCJwb2ludGVydXBcIjpcInRvdWNoZW5kXCI6XCJtb3VzZXVwXCIsTEVBVkVfRVY9dXNlVG91Y2hFdmVudHM/U1VQUE9SVFNfUE9JTlRFUj9cIm1vdXNlbGVhdmVcIjpudWxsOlwibW91c2VsZWF2ZVwiLENBTkNFTF9FVj1TVVBQT1JUU19QT0lOVEVSP1NVUFBPUlRTX1BPSU5URVJfSUUxMD9cIk1TUG9pbnRlckNhbmNlbFwiOlwicG9pbnRlcmNhbmNlbFwiOlwidG91Y2hjYW5jZWxcIixkaXN0YW5jZT0wLGRpcmVjdGlvbj1udWxsLGN1cnJlbnREaXJlY3Rpb249bnVsbCxkdXJhdGlvbj0wLHN0YXJ0VG91Y2hlc0Rpc3RhbmNlPTAsZW5kVG91Y2hlc0Rpc3RhbmNlPTAscGluY2hab29tPTEscGluY2hEaXN0YW5jZT0wLHBpbmNoRGlyZWN0aW9uPTAsbWF4aW11bXNNYXA9bnVsbCwkZWxlbWVudD0kKGVsZW1lbnQpLHBoYXNlPVwic3RhcnRcIixmaW5nZXJDb3VudD0wLGZpbmdlckRhdGE9e30sc3RhcnRUaW1lPTAsZW5kVGltZT0wLHByZXZpb3VzVG91Y2hFbmRUaW1lPTAsZmluZ2VyQ291bnRBdFJlbGVhc2U9MCxkb3VibGVUYXBTdGFydFRpbWU9MCxzaW5nbGVUYXBUaW1lb3V0PW51bGwsaG9sZFRpbWVvdXQ9bnVsbDt0cnl7JGVsZW1lbnQub24oU1RBUlRfRVYsdG91Y2hTdGFydCksJGVsZW1lbnQub24oQ0FOQ0VMX0VWLHRvdWNoQ2FuY2VsKX1jYXRjaChlKXskLmVycm9yKFwiZXZlbnRzIG5vdCBzdXBwb3J0ZWQgXCIrU1RBUlRfRVYrXCIsXCIrQ0FOQ0VMX0VWK1wiIG9uIGpRdWVyeS5zd2lwZVwiKX10aGlzLmVuYWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGUoKSwkZWxlbWVudC5vbihTVEFSVF9FVix0b3VjaFN0YXJ0KSwkZWxlbWVudC5vbihDQU5DRUxfRVYsdG91Y2hDYW5jZWwpLCRlbGVtZW50fSx0aGlzLmRpc2FibGU9ZnVuY3Rpb24oKXtyZXR1cm4gcmVtb3ZlTGlzdGVuZXJzKCksJGVsZW1lbnR9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe3JlbW92ZUxpc3RlbmVycygpLCRlbGVtZW50LmRhdGEoUExVR0lOX05TLG51bGwpLCRlbGVtZW50PW51bGx9LHRoaXMub3B0aW9uPWZ1bmN0aW9uKHByb3BlcnR5LHZhbHVlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgcHJvcGVydHkpb3B0aW9ucz0kLmV4dGVuZChvcHRpb25zLHByb3BlcnR5KTtlbHNlIGlmKHZvaWQgMCE9PW9wdGlvbnNbcHJvcGVydHldKXtpZih2b2lkIDA9PT12YWx1ZSlyZXR1cm4gb3B0aW9uc1twcm9wZXJ0eV07b3B0aW9uc1twcm9wZXJ0eV09dmFsdWV9ZWxzZXtpZighcHJvcGVydHkpcmV0dXJuIG9wdGlvbnM7JC5lcnJvcihcIk9wdGlvbiBcIitwcm9wZXJ0eStcIiBkb2VzIG5vdCBleGlzdCBvbiBqUXVlcnkuc3dpcGUub3B0aW9uc1wiKX1yZXR1cm4gbnVsbH19dmFyIFZFUlNJT049XCIxLjYuMThcIixMRUZUPVwibGVmdFwiLFJJR0hUPVwicmlnaHRcIixVUD1cInVwXCIsRE9XTj1cImRvd25cIixJTj1cImluXCIsT1VUPVwib3V0XCIsTk9ORT1cIm5vbmVcIixBVVRPPVwiYXV0b1wiLFNXSVBFPVwic3dpcGVcIixQSU5DSD1cInBpbmNoXCIsVEFQPVwidGFwXCIsRE9VQkxFX1RBUD1cImRvdWJsZXRhcFwiLExPTkdfVEFQPVwibG9uZ3RhcFwiLEhPUklaT05UQUw9XCJob3Jpem9udGFsXCIsVkVSVElDQUw9XCJ2ZXJ0aWNhbFwiLEFMTF9GSU5HRVJTPVwiYWxsXCIsRE9VQkxFX1RBUF9USFJFU0hPTEQ9MTAsUEhBU0VfU1RBUlQ9XCJzdGFydFwiLFBIQVNFX01PVkU9XCJtb3ZlXCIsUEhBU0VfRU5EPVwiZW5kXCIsUEhBU0VfQ0FOQ0VMPVwiY2FuY2VsXCIsU1VQUE9SVFNfVE9VQ0g9XCJvbnRvdWNoc3RhcnRcImluIHdpbmRvdyxTVVBQT1JUU19QT0lOVEVSX0lFMTA9d2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkJiYhd2luZG93LlBvaW50ZXJFdmVudCYmIVNVUFBPUlRTX1RPVUNILFNVUFBPUlRTX1BPSU5URVI9KHdpbmRvdy5Qb2ludGVyRXZlbnR8fHdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZCkmJiFTVVBQT1JUU19UT1VDSCxQTFVHSU5fTlM9XCJUb3VjaFN3aXBlXCIsZGVmYXVsdHM9e2ZpbmdlcnM6MSx0aHJlc2hvbGQ6NzUsY2FuY2VsVGhyZXNob2xkOm51bGwscGluY2hUaHJlc2hvbGQ6MjAsbWF4VGltZVRocmVzaG9sZDpudWxsLGZpbmdlclJlbGVhc2VUaHJlc2hvbGQ6MjUwLGxvbmdUYXBUaHJlc2hvbGQ6NTAwLGRvdWJsZVRhcFRocmVzaG9sZDoyMDAsc3dpcGU6bnVsbCxzd2lwZUxlZnQ6bnVsbCxzd2lwZVJpZ2h0Om51bGwsc3dpcGVVcDpudWxsLHN3aXBlRG93bjpudWxsLHN3aXBlU3RhdHVzOm51bGwscGluY2hJbjpudWxsLHBpbmNoT3V0Om51bGwscGluY2hTdGF0dXM6bnVsbCxjbGljazpudWxsLHRhcDpudWxsLGRvdWJsZVRhcDpudWxsLGxvbmdUYXA6bnVsbCxob2xkOm51bGwsdHJpZ2dlck9uVG91Y2hFbmQ6ITAsdHJpZ2dlck9uVG91Y2hMZWF2ZTohMSxhbGxvd1BhZ2VTY3JvbGw6XCJhdXRvXCIsZmFsbGJhY2tUb01vdXNlRXZlbnRzOiEwLGV4Y2x1ZGVkRWxlbWVudHM6XCIubm9Td2lwZVwiLHByZXZlbnREZWZhdWx0RXZlbnRzOiEwfTskLmZuLnN3aXBlPWZ1bmN0aW9uKG1ldGhvZCl7dmFyICR0aGlzPSQodGhpcykscGx1Z2luPSR0aGlzLmRhdGEoUExVR0lOX05TKTtpZihwbHVnaW4mJlwic3RyaW5nXCI9PXR5cGVvZiBtZXRob2Qpe2lmKHBsdWdpblttZXRob2RdKXJldHVybiBwbHVnaW5bbWV0aG9kXS5hcHBseShwbHVnaW4sQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKTskLmVycm9yKFwiTWV0aG9kIFwiK21ldGhvZCtcIiBkb2VzIG5vdCBleGlzdCBvbiBqUXVlcnkuc3dpcGVcIil9ZWxzZSBpZihwbHVnaW4mJlwib2JqZWN0XCI9PXR5cGVvZiBtZXRob2QpcGx1Z2luLm9wdGlvbi5hcHBseShwbHVnaW4sYXJndW1lbnRzKTtlbHNlIGlmKCEocGx1Z2lufHxcIm9iamVjdFwiIT10eXBlb2YgbWV0aG9kJiZtZXRob2QpKXJldHVybiBpbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gJHRoaXN9LCQuZm4uc3dpcGUudmVyc2lvbj1WRVJTSU9OLCQuZm4uc3dpcGUuZGVmYXVsdHM9ZGVmYXVsdHMsJC5mbi5zd2lwZS5waGFzZXM9e1BIQVNFX1NUQVJUOlBIQVNFX1NUQVJULFBIQVNFX01PVkU6UEhBU0VfTU9WRSxQSEFTRV9FTkQ6UEhBU0VfRU5ELFBIQVNFX0NBTkNFTDpQSEFTRV9DQU5DRUx9LCQuZm4uc3dpcGUuZGlyZWN0aW9ucz17TEVGVDpMRUZULFJJR0hUOlJJR0hULFVQOlVQLERPV046RE9XTixJTjpJTixPVVQ6T1VUfSwkLmZuLnN3aXBlLnBhZ2VTY3JvbGw9e05PTkU6Tk9ORSxIT1JJWk9OVEFMOkhPUklaT05UQUwsVkVSVElDQUw6VkVSVElDQUwsQVVUTzpBVVRPfSwkLmZuLnN3aXBlLmZpbmdlcnM9e09ORToxLFRXTzoyLFRIUkVFOjMsRk9VUjo0LEZJVkU6NSxBTEw6QUxMX0ZJTkdFUlN9fSk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgcHJlc3Rhc2hvcCBmcm9tICdwcmVzdGFzaG9wJztcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmNvbnN0IHBhc3N3b3JkUG9saWN5ID0ge1xuICB0ZW1wbGF0ZTogJyNwYXNzd29yZC1mZWVkYmFjaycsXG4gIGhpbnQ6ICcuanMtaGludC1wYXNzd29yZCcsXG4gIGNvbnRhaW5lcjogJy5wYXNzd29yZC1zdHJlbmd0aC1mZWVkYmFjaycsXG4gIHN0cmVuZ3RoVGV4dDogJy5wYXNzd29yZC1zdHJlbmd0aC10ZXh0JyxcbiAgcmVxdWlyZW1lbnRTY29yZTogJy5wYXNzd29yZC1yZXF1aXJlbWVudHMtc2NvcmUnLFxuICByZXF1aXJlbWVudExlbmd0aDogJy5wYXNzd29yZC1yZXF1aXJlbWVudHMtbGVuZ3RoJyxcbiAgcmVxdWlyZW1lbnRTY29yZUljb246ICcucGFzc3dvcmQtcmVxdWlyZW1lbnRzLXNjb3JlIGknLFxuICByZXF1aXJlbWVudExlbmd0aEljb246ICcucGFzc3dvcmQtcmVxdWlyZW1lbnRzLWxlbmd0aCBpJyxcbiAgcHJvZ3Jlc3NCYXI6ICcucHJvZ3Jlc3MtYmFyJyxcbiAgaW5wdXRDb2x1bW46ICcuanMtaW5wdXQtY29sdW1uJyxcbn07XG5cbnByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMgPSB7XG4gIHByb2R1Y3Q6IHtcbiAgICB0YWJzOiAnLnRhYnMgLm5hdi1saW5rJyxcbiAgICBhY3RpdmVOYXZDbGFzczogJ2pzLXByb2R1Y3QtbmF2LWFjdGl2ZScsXG4gICAgYWN0aXZlVGFiQ2xhc3M6ICdqcy1wcm9kdWN0LXRhYi1hY3RpdmUnLFxuICAgIGFjdGl2ZVRhYnM6ICcudGFicyAubmF2LWxpbmsuYWN0aXZlLCAuanMtcHJvZHVjdC1uYXYtYWN0aXZlJyxcbiAgICBpbWFnZXNNb2RhbDogJy5qcy1wcm9kdWN0LWltYWdlcy1tb2RhbCcsXG4gICAgdGh1bWI6ICcuanMtdGh1bWInLFxuICAgIHRodW1iQ29udGFpbmVyOiAnLnRodW1iLWNvbnRhaW5lciwgLmpzLXRodW1iLWNvbnRhaW5lcicsXG4gICAgYXJyb3dzOiAnLmpzLWFycm93cycsXG4gICAgc2VsZWN0ZWQ6ICcuc2VsZWN0ZWQsIC5qcy10aHVtYi1zZWxlY3RlZCcsXG4gICAgbW9kYWxQcm9kdWN0Q292ZXI6ICcuanMtbW9kYWwtcHJvZHVjdC1jb3ZlcicsXG4gICAgY292ZXI6ICcuanMtcXYtcHJvZHVjdC1jb3ZlcicsXG4gICAgY3VzdG9taXphdGlvbk1vZGFsOiAnLmpzLWN1c3RvbWl6YXRpb24tbW9kYWwnLFxuICB9LFxuICBsaXN0aW5nOiB7XG4gICAgc2VhcmNoRmlsdGVyVG9nZ2xlcjogJyNzZWFyY2hfZmlsdGVyX3RvZ2dsZXIsIC5qcy1zZWFyY2gtdG9nZ2xlcicsXG4gICAgc2VhcmNoRmlsdGVyc1dyYXBwZXI6ICcjc2VhcmNoX2ZpbHRlcnNfd3JhcHBlcicsXG4gICAgc2VhcmNoRmlsdGVyQ29udHJvbHM6ICcjc2VhcmNoX2ZpbHRlcl9jb250cm9scycsXG4gICAgc2VhcmNoRmlsdGVyczogJyNzZWFyY2hfZmlsdGVycycsXG4gICAgYWN0aXZlU2VhcmNoRmlsdGVyczogJyNqcy1hY3RpdmUtc2VhcmNoLWZpbHRlcnMnLFxuICAgIGxpc3RUb3A6ICcjanMtcHJvZHVjdC1saXN0LXRvcCcsXG4gICAgcHJvZHVjdDogJy5qcy1wcm9kdWN0JyxcbiAgICBsaXN0OiAnI2pzLXByb2R1Y3QtbGlzdCcsXG4gICAgbGlzdEJvdHRvbTogJyNqcy1wcm9kdWN0LWxpc3QtYm90dG9tJyxcbiAgICBsaXN0SGVhZGVyOiAnI2pzLXByb2R1Y3QtbGlzdC1oZWFkZXInLFxuICAgIHNlYXJjaEZpbHRlcnNDbGVhckFsbDogJy5qcy1zZWFyY2gtZmlsdGVycy1jbGVhci1hbGwnLFxuICAgIHNlYXJjaExpbms6ICcuanMtc2VhcmNoLWxpbmsnLFxuICB9LFxuICBvcmRlcjoge1xuICAgIHJldHVybkZvcm06ICcjb3JkZXItcmV0dXJuLWZvcm0sIC5qcy1vcmRlci1yZXR1cm4tZm9ybScsXG4gIH0sXG4gIGFycm93RG93bjogJy5hcnJvdy1kb3duLCAuanMtYXJyb3ctZG93bicsXG4gIGFycm93VXA6ICcuYXJyb3ctdXAsIC5qcy1hcnJvdy11cCcsXG4gIGNsZWFyOiAnLmNsZWFyJyxcbiAgZmlsZUlucHV0OiAnLmpzLWZpbGUtaW5wdXQnLFxuICBjb250ZW50V3JhcHBlcjogJyNjb250ZW50LXdyYXBwZXIsIC5qcy1jb250ZW50LXdyYXBwZXInLFxuICBmb290ZXI6ICcjZm9vdGVyLCAuanMtZm9vdGVyJyxcbiAgbW9kYWxDb250ZW50OiAnLmpzLW1vZGFsLWNvbnRlbnQnLFxuICBtb2RhbDogJyNtb2RhbCwgLmpzLWNoZWNrb3V0LW1vZGFsJyxcbiAgdG91Y2hzcGluOiAnLmpzLXRvdWNoc3BpbicsXG4gIGNoZWNrb3V0OiB7XG4gICAgdGVybXNMaW5rOiAnLmpzLXRlcm1zIGEnLFxuICAgIGdpZnRDaGVja2JveDogJy5qcy1naWZ0LWNoZWNrYm94JyxcbiAgICBpbWFnZXNMaW5rOiAnLmNhcmQtYmxvY2sgLmNhcnQtc3VtbWFyeS1wcm9kdWN0cyBwIGEsIC5qcy1zaG93LWRldGFpbHMnLFxuICAgIGNhcnJpZXJFeHRyYUNvbnRlbnQ6ICcuY2Fycmllci1leHRyYS1jb250ZW50LCAuanMtY2Fycmllci1leHRyYS1jb250ZW50JyxcbiAgICBidG46ICcuY2hlY2tvdXQgYScsXG4gIH0sXG4gIGNhcnQ6IHtcbiAgICBwcm9kdWN0TGluZVF0eTogJy5qcy1jYXJ0LWxpbmUtcHJvZHVjdC1xdWFudGl0eScsXG4gICAgcXVpY2t2aWV3OiAnLnF1aWNrdmlldycsXG4gICAgdG91Y2hzcGluOiAnLmJvb3RzdHJhcC10b3VjaHNwaW4nLFxuICAgIHByb21vQ29kZTogJyNwcm9tby1jb2RlJyxcbiAgICBkaXNwbGF5UHJvbW86ICcuZGlzcGxheS1wcm9tbycsXG4gICAgcHJvbW9Db2RlQnV0dG9uOiAnLnByb21vLWNvZGUtYnV0dG9uJyxcbiAgICBkaXNjb3VudENvZGU6ICcuanMtZGlzY291bnQgLmNvZGUnLFxuICAgIGRpc2NvdW50TmFtZTogJ1tuYW1lPWRpc2NvdW50X25hbWVdJyxcbiAgICBhY3Rpb25zOiAnW2RhdGEtbGluay1hY3Rpb249XCJkZWxldGUtZnJvbS1jYXJ0XCJdLCBbZGF0YS1saW5rLWFjdGlvbj1cInJlbW92ZS12b3VjaGVyXCJdJyxcbiAgfSxcbiAgbm90aWZpY2F0aW9uczoge1xuICAgIGRhbmdlckFsZXJ0OiAnI25vdGlmaWNhdGlvbnMgYXJ0aWNsZS5hbGVydC1kYW5nZXInLFxuICAgIGNvbnRhaW5lcjogJyNub3RpZmljYXRpb25zIC5ub3RpZmljYXRpb25zLWNvbnRhaW5lcicsXG4gIH0sXG4gIHBhc3N3b3JkUG9saWN5LFxufTtcblxuJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICBwcmVzdGFzaG9wLmVtaXQoJ3RoZW1lU2VsZWN0b3JzSW5pdCcpO1xufSk7XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknXG5cbnZhciBzaW1wbGV0YWJzcGx1Z2lubmFtZSA9ICdzaW1wbGV0YWJzJ1xuZnVuY3Rpb24gU2ltcGxlVGFic1BsdWdpbihlbGVtZW50LCBvcHRpb25zKSB7XG4gIHRoaXMuJGVsID0gJChlbGVtZW50KVxuICB0aGlzLiR0YWJzID0gW11cbiAgdGhpcy5pbml0KClcbn1cblxuJC5leHRlbmQoU2ltcGxlVGFic1BsdWdpbi5wcm90b3R5cGUsIHtcbiAgaW5pdCgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICB0aGlzLiR0YWJzID0gW11cbiAgICB0aGlzLiRlbC5maW5kKCd1bCA+IGxpID4gYScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgJGEgPSAkKHRoaXMpXG4gICAgICB2YXIgaWQgPSAkYS5hdHRyKCdocmVmJylcbiAgICAgIGlmICggaWQuc3RhcnRzV2l0aCgnIycpICkge1xuICAgICAgICBpZCA9IGlkLnJlcGxhY2UoJyMnLCAnJylcbiAgICAgICAgdmFyIGV4aXN0cyA9IHNlbGYuJHRhYnMuZmluZChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnQgPT09IGlkXG4gICAgICAgIH0pXG4gICAgICAgIHZhciBjb250ZW50c2VsZWN0b3IgPSAnIycgKyBpZCArICcudGFicy1jb250ZW50J1xuICAgICAgICB2YXIgY29udGVudCA9IHNlbGYuJGVsLmZpbmQoY29udGVudHNlbGVjdG9yKVxuICAgICAgICBpZiAoIGV4aXN0cyApIHtcbiAgICAgICAgICBleGlzdHMudGFiID0gJGFcbiAgICAgICAgICBleGlzdHMuY29udGVudCA9IGNvbnRlbnRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxmLiR0YWJzLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgdGFiOiAkYSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICBzZWxmLiR0YWJzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgaWYgKCFlbGVtZW50LnRhYi5oYXNDbGFzcygnYWN0aXZlJykpIHtcbiAgICAgICAgc2VsZi5oaWRlKGVsZW1lbnQuaWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLnNob3coZWxlbWVudC5pZClcbiAgICAgIH1cblxuICAgICAgZWxlbWVudC50YWIuY2xpY2soZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBzZWxmLnNob3coZWxlbWVudC5pZClcbiAgICAgIH0pXG4gICAgfSlcbiAgfSxcbiAgc2hvdyhpZCkge1xuICAgIHZhciBzZWxmID0gdGhpc1xuICAgIHRoaXMuJHRhYnMuZm9yRWFjaChmdW5jdGlvbiggZWxlbWVudCApIHtcbiAgICAgIHNlbGYuaGlkZShlbGVtZW50LmlkKVxuICAgICAgaWYgKCBlbGVtZW50LmlkID09PSBpZCApIHtcbiAgICAgICAgZWxlbWVudC50YWIuYWRkQ2xhc3MoJ2FjdGl2ZScpLmFkZENsYXNzKCdmb250LWJvbGQnKVxuICAgICAgICBlbGVtZW50LmNvbnRlbnQucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcbiAgaGlkZShpZCkge1xuICAgIHRoaXMuJHRhYnMuZm9yRWFjaChmdW5jdGlvbiggZWxlbWVudCApIHtcbiAgICAgIGlmICggZWxlbWVudC5pZCA9PT0gaWQgKSB7XG4gICAgICAgIGVsZW1lbnQudGFiLnJlbW92ZUNsYXNzKCdhY3RpdmUnKS5yZW1vdmVDbGFzcygnZm9udC1ib2xkJylcbiAgICAgICAgZWxlbWVudC5jb250ZW50LmFkZENsYXNzKCdoaWRkZW4nKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG59KVxuXG4kLmZuLnNpbXBsZXRhYnMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICBpZiAoICEkLmRhdGEodGhpcywgJ3BsdWdpbl8nICsgc2ltcGxldGFic3BsdWdpbm5hbWUpKSB7XG4gICAgICAkLmRhdGEodGhpcywgJ3BsdWdpbl8nICsgc2ltcGxldGFic3BsdWdpbm5hbWUsIG5ldyBTaW1wbGVUYWJzUGx1Z2luKHRoaXMsIG9wdGlvbnMpKVxuICAgIH1cbiAgfSlcbn1cblxuXG4iLCIoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbJ2pxdWVyeSddLCBmdW5jdGlvbigkKXtcbiAgICAgICAgICAgIGZhY3RvcnkoJCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSBpZih0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IChyb290LkVhc3lab29tID0gZmFjdG9yeShyZXF1aXJlKCdqcXVlcnknKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuRWFzeVpvb20gPSBmYWN0b3J5KHJvb3QualF1ZXJ5KTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uICgkKSB7XG5cbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgem9vbUltZ092ZXJsYXBYO1xuICAgIHZhciB6b29tSW1nT3ZlcmxhcFk7XG4gICAgdmFyIHJhdGlvWDtcbiAgICB2YXIgcmF0aW9ZO1xuICAgIHZhciBwb2ludGVyUG9zaXRpb25YO1xuICAgIHZhciBwb2ludGVyUG9zaXRpb25ZO1xuXG4gICAgdmFyIGRlZmF1bHRzID0ge1xuXG4gICAgICAgIC8vIFRoZSB0ZXh0IHRvIGRpc3BsYXkgd2l0aGluIHRoZSBub3RpY2UgYm94IHdoaWxlIGxvYWRpbmcgdGhlIHpvb20gaW1hZ2UuXG4gICAgICAgIGxvYWRpbmdOb3RpY2U6ICdMb2FkaW5nIGltYWdlJyxcblxuICAgICAgICAvLyBUaGUgdGV4dCB0byBkaXNwbGF5IHdpdGhpbiB0aGUgbm90aWNlIGJveCBpZiBhbiBlcnJvciBvY2N1cnMgd2hlbiBsb2FkaW5nIHRoZSB6b29tIGltYWdlLlxuICAgICAgICBlcnJvck5vdGljZTogJ1RoZSBpbWFnZSBjb3VsZCBub3QgYmUgbG9hZGVkJyxcblxuICAgICAgICAvLyBUaGUgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSB0byBkaXNwbGF5IHRoZSBlcnJvciBub3RpY2UuXG4gICAgICAgIGVycm9yRHVyYXRpb246IDI1MDAsXG5cbiAgICAgICAgLy8gQXR0cmlidXRlIHRvIHJldHJpZXZlIHRoZSB6b29tIGltYWdlIFVSTCBmcm9tLlxuICAgICAgICBsaW5rQXR0cmlidXRlOiAnaHJlZicsXG5cbiAgICAgICAgLy8gUHJldmVudCBjbGlja3Mgb24gdGhlIHpvb20gaW1hZ2UgbGluay5cbiAgICAgICAgcHJldmVudENsaWNrczogdHJ1ZSxcblxuICAgICAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIGJlZm9yZSB0aGUgZmx5b3V0IGlzIGRpc3BsYXllZC5cbiAgICAgICAgYmVmb3JlU2hvdzogJC5ub29wLFxuXG4gICAgICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYmVmb3JlIHRoZSBmbHlvdXQgaXMgcmVtb3ZlZC5cbiAgICAgICAgYmVmb3JlSGlkZTogJC5ub29wLFxuXG4gICAgICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZmx5b3V0IGlzIGRpc3BsYXllZC5cbiAgICAgICAgb25TaG93OiAkLm5vb3AsXG5cbiAgICAgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBmbHlvdXQgaXMgcmVtb3ZlZC5cbiAgICAgICAgb25IaWRlOiAkLm5vb3AsXG5cbiAgICAgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBjdXJzb3IgaXMgbW92ZWQgd2hpbGUgb3ZlciB0aGUgaW1hZ2UuXG4gICAgICAgIG9uTW92ZTogJC5ub29wXG5cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRWFzeVpvb21cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgKE9wdGlvbmFsKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIEVhc3lab29tKHRhcmdldCwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLiR0YXJnZXQgPSAkKHRhcmdldCk7XG4gICAgICAgIHRoaXMub3B0cyA9ICQuZXh0ZW5kKHt9LCBkZWZhdWx0cywgb3B0aW9ucywgdGhpcy4kdGFyZ2V0LmRhdGEoKSk7XG5cbiAgICAgICAgdGhpcy5pc09wZW4gPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9pbml0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuJGxpbmsgICA9IHRoaXMuJHRhcmdldC5maW5kKCdhJyk7XG4gICAgICAgIHRoaXMuJGltYWdlICA9IHRoaXMuJHRhcmdldC5maW5kKCdpbWcnKTtcblxuICAgICAgICB0aGlzLiRmbHlvdXQgPSAkKCc8ZGl2IGNsYXNzPVwiZWFzeXpvb20tZmx5b3V0XCIgLz4nKTtcbiAgICAgICAgdGhpcy4kbm90aWNlID0gJCgnPGRpdiBjbGFzcz1cImVhc3l6b29tLW5vdGljZVwiIC8+Jyk7XG5cbiAgICAgICAgdGhpcy4kdGFyZ2V0Lm9uKHtcbiAgICAgICAgICAgICdtb3VzZW1vdmUuZWFzeXpvb20gdG91Y2htb3ZlLmVhc3l6b29tJzogJC5wcm94eSh0aGlzLl9vbk1vdmUsIHRoaXMpLFxuICAgICAgICAgICAgJ21vdXNlbGVhdmUuZWFzeXpvb20gdG91Y2hlbmQuZWFzeXpvb20nOiAkLnByb3h5KHRoaXMuX29uTGVhdmUsIHRoaXMpLFxuICAgICAgICAgICAgJ21vdXNlZW50ZXIuZWFzeXpvb20gdG91Y2hzdGFydC5lYXN5em9vbSc6ICQucHJveHkodGhpcy5fb25FbnRlciwgdGhpcylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vcHRzLnByZXZlbnRDbGlja3MgJiYgdGhpcy4kdGFyZ2V0Lm9uKCdjbGljay5lYXN5em9vbScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNob3dcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR8VG91Y2hFdmVudH0gZVxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gdGVzdE1vdXNlT3ZlciAoT3B0aW9uYWwpXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbihlLCB0ZXN0TW91c2VPdmVyKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICBpZiAodGhpcy5vcHRzLmJlZm9yZVNob3cuY2FsbCh0aGlzKSA9PT0gZmFsc2UpIHJldHVybjtcblxuICAgICAgICBpZiAoIXRoaXMuaXNSZWFkeSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRJbWFnZSh0aGlzLiRsaW5rLmF0dHIodGhpcy5vcHRzLmxpbmtBdHRyaWJ1dGUpLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5pc01vdXNlT3ZlciB8fCAhdGVzdE1vdXNlT3Zlcikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNob3coZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiR0YXJnZXQuYXBwZW5kKHRoaXMuJGZseW91dCk7XG5cbiAgICAgICAgdmFyIHRhcmdldFdpZHRoID0gdGhpcy4kdGFyZ2V0Lm91dGVyV2lkdGgoKTtcbiAgICAgICAgdmFyIHRhcmdldEhlaWdodCA9IHRoaXMuJHRhcmdldC5vdXRlckhlaWdodCgpO1xuXG4gICAgICAgIHZhciBmbHlvdXRJbm5lcldpZHRoID0gdGhpcy4kZmx5b3V0LndpZHRoKCk7XG4gICAgICAgIHZhciBmbHlvdXRJbm5lckhlaWdodCA9IHRoaXMuJGZseW91dC5oZWlnaHQoKTtcblxuICAgICAgICB2YXIgem9vbUltZ1dpZHRoID0gdGhpcy4kem9vbS53aWR0aCgpO1xuICAgICAgICB2YXIgem9vbUltZ0hlaWdodCA9IHRoaXMuJHpvb20uaGVpZ2h0KCk7XG5cbiAgICAgICAgem9vbUltZ092ZXJsYXBYID0gTWF0aC5jZWlsKHpvb21JbWdXaWR0aCAtIGZseW91dElubmVyV2lkdGgpO1xuICAgICAgICB6b29tSW1nT3ZlcmxhcFkgPSBNYXRoLmNlaWwoem9vbUltZ0hlaWdodCAtIGZseW91dElubmVySGVpZ2h0KTtcblxuXG4gICAgICAgIC8vIEZvciB3aGVuIHRoZSB6b29tIGltYWdlIGlzIHNtYWxsZXIgdGhhbiB0aGUgZmx5b3V0IGVsZW1lbnQuXG4gICAgICAgIGlmICh6b29tSW1nT3ZlcmxhcFggPCAwKSB6b29tSW1nT3ZlcmxhcFggPSAwO1xuICAgICAgICBpZiAoem9vbUltZ092ZXJsYXBZIDwgMCkgem9vbUltZ092ZXJsYXBZID0gMDtcblxuICAgICAgICByYXRpb1ggPSB6b29tSW1nT3ZlcmxhcFggLyB0YXJnZXRXaWR0aDtcbiAgICAgICAgcmF0aW9ZID0gem9vbUltZ092ZXJsYXBZIC8gdGFyZ2V0SGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLm9wdHMub25TaG93LmNhbGwodGhpcyk7XG5cbiAgICAgICAgZSAmJiB0aGlzLl9tb3ZlKGUpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBPbiBlbnRlclxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5fb25FbnRlciA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIHRvdWNoZXMgPSBlLm9yaWdpbmFsRXZlbnQudG91Y2hlcztcblxuICAgICAgICB0aGlzLmlzTW91c2VPdmVyID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIXRvdWNoZXMgfHwgdG91Y2hlcy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5zaG93KGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9uIG1vdmVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGVcbiAgICAgKi9cbiAgICBFYXN5Wm9vbS5wcm90b3R5cGUuX29uTW92ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbikgcmV0dXJuO1xuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fbW92ZShlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT24gbGVhdmVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5fb25MZWF2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmlzTW91c2VPdmVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNPcGVuICYmIHRoaXMuaGlkZSgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBPbiBsb2FkXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBlXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLl9vbkxvYWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIC8vIElFIG1heSBmaXJlIGEgbG9hZCBldmVudCBldmVuIG9uIGVycm9yIHNvIHRlc3QgdGhlIGltYWdlIGRpbWVuc2lvbnNcbiAgICAgICAgaWYgKCFlLmN1cnJlbnRUYXJnZXQud2lkdGgpIHJldHVybjtcblxuICAgICAgICB0aGlzLmlzUmVhZHkgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuJG5vdGljZS5kZXRhY2goKTtcbiAgICAgICAgdGhpcy4kZmx5b3V0Lmh0bWwodGhpcy4kem9vbSk7XG4gICAgICAgIHRoaXMuJHRhcmdldC5yZW1vdmVDbGFzcygnaXMtbG9hZGluZycpLmFkZENsYXNzKCdpcy1yZWFkeScpO1xuXG4gICAgICAgIGUuZGF0YS5jYWxsICYmIGUuZGF0YSgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBPbiBlcnJvclxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLl9vbkVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICB0aGlzLiRub3RpY2UudGV4dCh0aGlzLm9wdHMuZXJyb3JOb3RpY2UpO1xuICAgICAgICB0aGlzLiR0YXJnZXQucmVtb3ZlQ2xhc3MoJ2lzLWxvYWRpbmcnKS5hZGRDbGFzcygnaXMtZXJyb3InKTtcblxuICAgICAgICB0aGlzLmRldGFjaE5vdGljZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBzZWxmLiRub3RpY2UuZGV0YWNoKCk7XG4gICAgICAgICAgICBzZWxmLmRldGFjaE5vdGljZSA9IG51bGw7XG4gICAgICAgIH0sIHRoaXMub3B0cy5lcnJvckR1cmF0aW9uKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTG9hZCBpbWFnZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhyZWZcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5fbG9hZEltYWdlID0gZnVuY3Rpb24oaHJlZiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHpvb20gPSBuZXcgSW1hZ2UoKTtcblxuICAgICAgICB0aGlzLiR0YXJnZXRcbiAgICAgICAgICAgIC5hZGRDbGFzcygnaXMtbG9hZGluZycpXG4gICAgICAgICAgICAuYXBwZW5kKHRoaXMuJG5vdGljZS50ZXh0KHRoaXMub3B0cy5sb2FkaW5nTm90aWNlKSk7XG5cbiAgICAgICAgdGhpcy4kem9vbSA9ICQoem9vbSlcbiAgICAgICAgICAgIC5vbignZXJyb3InLCAkLnByb3h5KHRoaXMuX29uRXJyb3IsIHRoaXMpKVxuICAgICAgICAgICAgLm9uKCdsb2FkJywgY2FsbGJhY2ssICQucHJveHkodGhpcy5fb25Mb2FkLCB0aGlzKSk7XG5cbiAgICAgICAgem9vbS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgIHpvb20uc3JjID0gaHJlZjtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTW92ZVxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAqL1xuICAgIEVhc3lab29tLnByb3RvdHlwZS5fbW92ZSA9IGZ1bmN0aW9uKGUpIHtcblxuICAgICAgICBpZiAoZS50eXBlLmluZGV4T2YoJ3RvdWNoJykgPT09IDApIHtcbiAgICAgICAgICAgIHZhciB0b3VjaGxpc3QgPSBlLnRvdWNoZXMgfHwgZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXM7XG4gICAgICAgICAgICBwb2ludGVyUG9zaXRpb25YID0gdG91Y2hsaXN0WzBdLnBhZ2VYO1xuICAgICAgICAgICAgcG9pbnRlclBvc2l0aW9uWSA9IHRvdWNobGlzdFswXS5wYWdlWTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvaW50ZXJQb3NpdGlvblggPSBlLnBhZ2VYIHx8IHBvaW50ZXJQb3NpdGlvblg7XG4gICAgICAgICAgICBwb2ludGVyUG9zaXRpb25ZID0gZS5wYWdlWSB8fCBwb2ludGVyUG9zaXRpb25ZO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRhcmdldE9mZnNldCAgPSB0aGlzLiR0YXJnZXQub2Zmc2V0KCk7XG4gICAgICAgIHZhciByZWxhdGl2ZVBvc2l0aW9uWCA9IHBvaW50ZXJQb3NpdGlvblggLSB0YXJnZXRPZmZzZXQubGVmdDtcbiAgICAgICAgdmFyIHJlbGF0aXZlUG9zaXRpb25ZID0gcG9pbnRlclBvc2l0aW9uWSAtIHRhcmdldE9mZnNldC50b3A7XG4gICAgICAgIHZhciBtb3ZlWCA9IE1hdGguY2VpbChyZWxhdGl2ZVBvc2l0aW9uWCAqIHJhdGlvWCk7XG4gICAgICAgIHZhciBtb3ZlWSA9IE1hdGguY2VpbChyZWxhdGl2ZVBvc2l0aW9uWSAqIHJhdGlvWSk7XG5cbiAgICAgICAgLy8gQ2xvc2UgaWYgb3V0c2lkZVxuICAgICAgICBpZiAobW92ZVggPCAwIHx8IG1vdmVZIDwgMCB8fCBtb3ZlWCA+IHpvb21JbWdPdmVybGFwWCB8fCBtb3ZlWSA+IHpvb21JbWdPdmVybGFwWSkge1xuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdG9wID0gbW92ZVkgKiAtMTtcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gbW92ZVggKiAtMTtcblxuICAgICAgICAgICAgaWYgKCd0cmFuc2Zvcm0nIGluIGRvY3VtZW50LmJvZHkuc3R5bGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiR6b29tLmNzcyh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgnICsgbGVmdCArICdweCwgJyArIHRvcCArICdweCknIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiR6b29tLmNzcyh7IHRvcDogdG9wLCBsZWZ0OiBsZWZ0IH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9wdHMub25Nb3ZlLmNhbGwodGhpcywgdG9wLCBsZWZ0KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBIaWRlXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbikgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmJlZm9yZUhpZGUuY2FsbCh0aGlzKSA9PT0gZmFsc2UpIHJldHVybjtcblxuICAgICAgICB0aGlzLiRmbHlvdXQuZGV0YWNoKCk7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5vcHRzLm9uSGlkZS5jYWxsKHRoaXMpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTd2FwXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHN0YW5kYXJkU3JjXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHpvb21IcmVmXG4gICAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IHNyY3NldCAoT3B0aW9uYWwpXG4gICAgICovXG4gICAgRWFzeVpvb20ucHJvdG90eXBlLnN3YXAgPSBmdW5jdGlvbihzdGFuZGFyZFNyYywgem9vbUhyZWYsIHNyY3NldCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgdGhpcy5pc1JlYWR5ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5kZXRhY2hOb3RpY2UgJiYgY2xlYXJUaW1lb3V0KHRoaXMuZGV0YWNoTm90aWNlKTtcblxuICAgICAgICB0aGlzLiRub3RpY2UucGFyZW50KCkubGVuZ3RoICYmIHRoaXMuJG5vdGljZS5kZXRhY2goKTtcblxuICAgICAgICB0aGlzLiR0YXJnZXQucmVtb3ZlQ2xhc3MoJ2lzLWxvYWRpbmcgaXMtcmVhZHkgaXMtZXJyb3InKTtcblxuICAgICAgICB0aGlzLiRpbWFnZS5hdHRyKHtcbiAgICAgICAgICAgIHNyYzogc3RhbmRhcmRTcmMsXG4gICAgICAgICAgICBzcmNzZXQ6ICQuaXNBcnJheShzcmNzZXQpID8gc3Jjc2V0LmpvaW4oKSA6IHNyY3NldFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiRsaW5rLmF0dHIodGhpcy5vcHRzLmxpbmtBdHRyaWJ1dGUsIHpvb21IcmVmKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGVhcmRvd25cbiAgICAgKi9cbiAgICBFYXN5Wm9vbS5wcm90b3R5cGUudGVhcmRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG5cbiAgICAgICAgdGhpcy4kdGFyZ2V0XG4gICAgICAgICAgICAub2ZmKCcuZWFzeXpvb20nKVxuICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdpcy1sb2FkaW5nIGlzLXJlYWR5IGlzLWVycm9yJyk7XG5cbiAgICAgICAgdGhpcy5kZXRhY2hOb3RpY2UgJiYgY2xlYXJUaW1lb3V0KHRoaXMuZGV0YWNoTm90aWNlKTtcblxuICAgICAgICBkZWxldGUgdGhpcy4kbGluaztcbiAgICAgICAgZGVsZXRlIHRoaXMuJHpvb207XG4gICAgICAgIGRlbGV0ZSB0aGlzLiRpbWFnZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuJG5vdGljZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuJGZseW91dDtcblxuICAgICAgICBkZWxldGUgdGhpcy5pc09wZW47XG4gICAgICAgIGRlbGV0ZSB0aGlzLmlzUmVhZHk7XG4gICAgfTtcblxuICAgIC8vIGpRdWVyeSBwbHVnaW4gd3JhcHBlclxuICAgICQuZm4uZWFzeVpvb20gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgYXBpID0gJC5kYXRhKHRoaXMsICdlYXN5Wm9vbScpO1xuXG4gICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgICQuZGF0YSh0aGlzLCAnZWFzeVpvb20nLCBuZXcgRWFzeVpvb20odGhpcywgb3B0aW9ucykpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhcGkuaXNPcGVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhcGkuX2luaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBFYXN5Wm9vbTtcbn0pKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBwcmVzdGFzaG9wIGZyb20gJ3ByZXN0YXNob3AnO1xuXG5wcmVzdGFzaG9wLnJlc3BvbnNpdmUgPSBwcmVzdGFzaG9wLnJlc3BvbnNpdmUgfHwge307XG5cbnByZXN0YXNob3AucmVzcG9uc2l2ZS5jdXJyZW50X3dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG5wcmVzdGFzaG9wLnJlc3BvbnNpdmUubWluX3dpZHRoID0gNzY4O1xucHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1vYmlsZSA9IHByZXN0YXNob3AucmVzcG9uc2l2ZS5jdXJyZW50X3dpZHRoIDwgcHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1pbl93aWR0aDtcblxuZnVuY3Rpb24gc3dhcENoaWxkcmVuKG9iajEsIG9iajIpIHtcbiAgY29uc3QgdGVtcCA9IG9iajIuY2hpbGRyZW4oKS5kZXRhY2goKTtcbiAgb2JqMi5lbXB0eSgpLmFwcGVuZChvYmoxLmNoaWxkcmVuKCkuZGV0YWNoKCkpO1xuICBvYmoxLmFwcGVuZCh0ZW1wKTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlTW9iaWxlU3R5bGVzKCkge1xuICBpZiAocHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1vYmlsZSkge1xuICAgICQoXCIqW2lkXj0nX2Rlc2t0b3BfJ11cIikuZWFjaCgoaWR4LCBlbCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gJChgIyR7ZWwuaWQucmVwbGFjZSgnX2Rlc2t0b3BfJywgJ19tb2JpbGVfJyl9YCk7XG5cbiAgICAgIGlmICh0YXJnZXQubGVuZ3RoKSB7XG4gICAgICAgIHN3YXBDaGlsZHJlbigkKGVsKSwgdGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAkKFwiKltpZF49J19tb2JpbGVfJ11cIikuZWFjaCgoaWR4LCBlbCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gJChgIyR7ZWwuaWQucmVwbGFjZSgnX21vYmlsZV8nLCAnX2Rlc2t0b3BfJyl9YCk7XG5cbiAgICAgIGlmICh0YXJnZXQubGVuZ3RoKSB7XG4gICAgICAgIHN3YXBDaGlsZHJlbigkKGVsKSwgdGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBwcmVzdGFzaG9wLmVtaXQoJ3Jlc3BvbnNpdmUgdXBkYXRlJywge1xuICAgIG1vYmlsZTogcHJlc3Rhc2hvcC5yZXNwb25zaXZlLm1vYmlsZSxcbiAgfSk7XG59XG5cbiQod2luZG93KS5vbigncmVzaXplJywgKCkgPT4ge1xuICBjb25zdCBjdyA9IHByZXN0YXNob3AucmVzcG9uc2l2ZS5jdXJyZW50X3dpZHRoO1xuICBjb25zdCBtdyA9IHByZXN0YXNob3AucmVzcG9uc2l2ZS5taW5fd2lkdGg7XG4gIGNvbnN0IHcgPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgY29uc3QgdG9nZ2xlID0gKGN3ID49IG13ICYmIHcgPCBtdykgfHwgKGN3IDwgbXcgJiYgdyA+PSBtdyk7XG5cbiAgcHJlc3Rhc2hvcC5yZXNwb25zaXZlLmN1cnJlbnRfd2lkdGggPSB3O1xuICBwcmVzdGFzaG9wLnJlc3BvbnNpdmUubW9iaWxlID0gcHJlc3Rhc2hvcC5yZXNwb25zaXZlLmN1cnJlbnRfd2lkdGggPCBwcmVzdGFzaG9wLnJlc3BvbnNpdmUubWluX3dpZHRoO1xuICBpZiAodG9nZ2xlKSB7XG4gICAgdG9nZ2xlTW9iaWxlU3R5bGVzKCk7XG4gIH1cbn0pO1xuXG4kKGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gIGlmIChwcmVzdGFzaG9wLnJlc3BvbnNpdmUubW9iaWxlKSB7XG4gICAgdG9nZ2xlTW9iaWxlU3R5bGVzKCk7XG4gIH1cbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHByZXN0YXNob3AgZnJvbSAncHJlc3Rhc2hvcCc7XG5cbmZ1bmN0aW9uIHNldFVwQ2hlY2tvdXQoKSB7XG4gICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jaGVja291dC50ZXJtc0xpbmspLm9uKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IHVybCA9ICQoZXZlbnQudGFyZ2V0KS5hdHRyKCdocmVmJyk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICAvLyBUT0RPOiBIYW5kbGUgcmVxdWVzdCBpZiBubyBwcmV0dHkgVVJMXG4gICAgICB1cmwgKz0gJz9jb250ZW50X29ubHk9MSc7XG4gICAgICAkLmdldCh1cmwsIChjb250ZW50KSA9PiB7XG4gICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5tb2RhbClcbiAgICAgICAgICAuZmluZChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLm1vZGFsQ29udGVudClcbiAgICAgICAgICAuaHRtbCgkKGNvbnRlbnQpLmZpbmQoJy5wYWdlLWNtcycpLmNvbnRlbnRzKCkpO1xuICAgICAgfSkuZmFpbCgocmVzcCkgPT4ge1xuICAgICAgICBwcmVzdGFzaG9wLmVtaXQoJ2hhbmRsZUVycm9yJywge2V2ZW50VHlwZTogJ2NsaWNrVGVybXMnLCByZXNwfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubW9kYWwpLm1vZGFsKCdzaG93Jyk7XG4gIH0pO1xuXG4gICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jaGVja291dC5naWZ0Q2hlY2tib3gpLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAkKCcjZ2lmdCcpLnNsaWRlVG9nZ2xlKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB0b2dnbGVJbWFnZSgpIHtcbiAgLy8gQXJyb3cgc2hvdy9oaWRlIGRldGFpbHMgQ2hlY2tvdXQgcGFnZVxuICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2hlY2tvdXQuaW1hZ2VzTGluaykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGljb24gPSAkKHRoaXMpLmZpbmQoJ2kubWF0ZXJpYWwtaWNvbnMnKTtcblxuICAgIGlmIChpY29uLnRleHQoKSA9PT0gJ2V4cGFuZF9tb3JlJykge1xuICAgICAgaWNvbi50ZXh0KCdleHBhbmRfbGVzcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpY29uLnRleHQoJ2V4cGFuZF9tb3JlJyk7XG4gICAgfVxuICB9KTtcbn1cblxuJChmdW5jdGlvbigpIHtcbiAgaWYgKCQoJ2JvZHkjY2hlY2tvdXQnKS5sZW5ndGggPT09IDEpIHtcbiAgICBzZXRVcENoZWNrb3V0KCk7XG4gICAgdG9nZ2xlSW1hZ2UoKTtcbiAgfVxuXG4gICQoJy50YWJzJykuc2ltcGxldGFicygpXG5cbiAgcHJlc3Rhc2hvcC5vbigndXBkYXRlZERlbGl2ZXJ5Rm9ybScsIChwYXJhbXMpID0+IHtcbiAgICBpZiAodHlwZW9mIHBhcmFtcy5kZWxpdmVyeU9wdGlvbiA9PT0gJ3VuZGVmaW5lZCcgfHwgcGFyYW1zLmRlbGl2ZXJ5T3B0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBIaWRlIGFsbCBjYXJyaWVyIGV4dHJhIGNvbnRlbnQgLi4uXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNoZWNrb3V0LmNhcnJpZXJFeHRyYUNvbnRlbnQpLmhpZGUoKTtcbiAgICAvLyBhbmQgc2hvdyB0aGUgb25lIHJlbGF0ZWQgdG8gdGhlIHNlbGVjdGVkIGNhcnJpZXJcbiAgICBwYXJhbXMuZGVsaXZlcnlPcHRpb24ubmV4dChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNoZWNrb3V0LmNhcnJpZXJFeHRyYUNvbnRlbnQpLnNsaWRlRG93bigpO1xuICB9KTtcbn0pO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHByZXN0YXNob3AgZnJvbSAncHJlc3Rhc2hvcCc7XG5cbmZ1bmN0aW9uIGluaXRSbWFJdGVtU2VsZWN0b3IoKSB7XG4gICQoYCR7cHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5vcmRlci5yZXR1cm5Gb3JtfSB0YWJsZSB0aGVhZCBpbnB1dFt0eXBlPWNoZWNrYm94XWApLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjaGVja2VkID0gJCh0aGlzKS5wcm9wKCdjaGVja2VkJyk7XG4gICAgJChgJHtwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLm9yZGVyLnJldHVybkZvcm19IHRhYmxlIHRib2R5IGlucHV0W3R5cGU9Y2hlY2tib3hdYCkuZWFjaCgoXywgY2hlY2tib3gpID0+IHtcbiAgICAgICQoY2hlY2tib3gpLnByb3AoJ2NoZWNrZWQnLCBjaGVja2VkKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldHVwQ3VzdG9tZXJTY3JpcHRzKCkge1xuICBpZiAoJCgnYm9keSNvcmRlci1kZXRhaWwnKSkge1xuICAgIGluaXRSbWFJdGVtU2VsZWN0b3IoKTtcbiAgfVxufVxuXG4kKGRvY3VtZW50KS5yZWFkeShzZXR1cEN1c3RvbWVyU2NyaXB0cyk7XG4iLCIvKiEgVmVsb2NpdHlKUy5vcmcgKDEuNS4yKS4gKEMpIDIwMTQgSnVsaWFuIFNoYXBpcm8uIE1JVCBAbGljZW5zZTogZW4ud2lraXBlZGlhLm9yZy93aWtpL01JVF9MaWNlbnNlICovXHJcblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gVmVsb2NpdHkgalF1ZXJ5IFNoaW1cclxuICoqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG4vKiEgVmVsb2NpdHlKUy5vcmcgalF1ZXJ5IFNoaW0gKDEuMC4xKS4gKEMpIDIwMTQgVGhlIGpRdWVyeSBGb3VuZGF0aW9uLiBNSVQgQGxpY2Vuc2U6IGVuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZS4gKi9cclxuXHJcbi8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgalF1ZXJ5IGZ1bmN0aW9ucyB0aGF0IFZlbG9jaXR5IHJlbGllcyBvbiwgdGhlcmVieSByZW1vdmluZyBWZWxvY2l0eSdzIGRlcGVuZGVuY3kgb24gYSBmdWxsIGNvcHkgb2YgalF1ZXJ5LCBhbmQgYWxsb3dpbmcgaXQgdG8gd29yayBpbiBhbnkgZW52aXJvbm1lbnQuICovXHJcbi8qIFRoZXNlIHNoaW1tZWQgZnVuY3Rpb25zIGFyZSBvbmx5IHVzZWQgaWYgalF1ZXJ5IGlzbid0IHByZXNlbnQuIElmIGJvdGggdGhpcyBzaGltIGFuZCBqUXVlcnkgYXJlIGxvYWRlZCwgVmVsb2NpdHkgZGVmYXVsdHMgdG8galF1ZXJ5IHByb3Blci4gKi9cclxuLyogQnJvd3NlciBzdXBwb3J0OiBVc2luZyB0aGlzIHNoaW0gaW5zdGVhZCBvZiBqUXVlcnkgcHJvcGVyIHJlbW92ZXMgc3VwcG9ydCBmb3IgSUU4LiAqL1xyXG5cclxuKGZ1bmN0aW9uKHdpbmRvdykge1xyXG5cdFwidXNlIHN0cmljdFwiO1xyXG5cdC8qKioqKioqKioqKioqKipcclxuXHQgU2V0dXBcclxuXHQgKioqKioqKioqKioqKioqL1xyXG5cclxuXHQvKiBJZiBqUXVlcnkgaXMgYWxyZWFkeSBsb2FkZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gbG9hZGluZyB0aGlzIHNoaW0uICovXHJcblx0aWYgKHdpbmRvdy5qUXVlcnkpIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdC8qIGpRdWVyeSBiYXNlLiAqL1xyXG5cdHZhciAkID0gZnVuY3Rpb24oc2VsZWN0b3IsIGNvbnRleHQpIHtcclxuXHRcdHJldHVybiBuZXcgJC5mbi5pbml0KHNlbGVjdG9yLCBjb250ZXh0KTtcclxuXHR9O1xyXG5cclxuXHQvKioqKioqKioqKioqKioqKioqKipcclxuXHQgUHJpdmF0ZSBNZXRob2RzXHJcblx0ICoqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHQvKiBqUXVlcnkgKi9cclxuXHQkLmlzV2luZG93ID0gZnVuY3Rpb24ob2JqKSB7XHJcblx0XHQvKiBqc2hpbnQgZXFlcWVxOiBmYWxzZSAqL1xyXG5cdFx0cmV0dXJuIG9iaiAmJiBvYmogPT09IG9iai53aW5kb3c7XHJcblx0fTtcclxuXHJcblx0LyogalF1ZXJ5ICovXHJcblx0JC50eXBlID0gZnVuY3Rpb24ob2JqKSB7XHJcblx0XHRpZiAoIW9iaikge1xyXG5cdFx0XHRyZXR1cm4gb2JqICsgXCJcIjtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgP1xyXG5cdFx0XHRcdGNsYXNzMnR5cGVbdG9TdHJpbmcuY2FsbChvYmopXSB8fCBcIm9iamVjdFwiIDpcclxuXHRcdFx0XHR0eXBlb2Ygb2JqO1xyXG5cdH07XHJcblxyXG5cdC8qIGpRdWVyeSAqL1xyXG5cdCQuaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XHJcblx0XHRyZXR1cm4gJC50eXBlKG9iaikgPT09IFwiYXJyYXlcIjtcclxuXHR9O1xyXG5cclxuXHQvKiBqUXVlcnkgKi9cclxuXHRmdW5jdGlvbiBpc0FycmF5bGlrZShvYmopIHtcclxuXHRcdHZhciBsZW5ndGggPSBvYmoubGVuZ3RoLFxyXG5cdFx0XHRcdHR5cGUgPSAkLnR5cGUob2JqKTtcclxuXHJcblx0XHRpZiAodHlwZSA9PT0gXCJmdW5jdGlvblwiIHx8ICQuaXNXaW5kb3cob2JqKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKG9iai5ub2RlVHlwZSA9PT0gMSAmJiBsZW5ndGgpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHR5cGUgPT09IFwiYXJyYXlcIiB8fCBsZW5ndGggPT09IDAgfHwgdHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmIChsZW5ndGggLSAxKSBpbiBvYmo7XHJcblx0fVxyXG5cclxuXHQvKioqKioqKioqKioqKioqXHJcblx0ICQgTWV0aG9kc1xyXG5cdCAqKioqKioqKioqKioqKiovXHJcblxyXG5cdC8qIGpRdWVyeTogU3VwcG9ydCByZW1vdmVkIGZvciBJRTw5LiAqL1xyXG5cdCQuaXNQbGFpbk9iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xyXG5cdFx0dmFyIGtleTtcclxuXHJcblx0XHRpZiAoIW9iaiB8fCAkLnR5cGUob2JqKSAhPT0gXCJvYmplY3RcIiB8fCBvYmoubm9kZVR5cGUgfHwgJC5pc1dpbmRvdyhvYmopKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAob2JqLmNvbnN0cnVjdG9yICYmXHJcblx0XHRcdFx0XHQhaGFzT3duLmNhbGwob2JqLCBcImNvbnN0cnVjdG9yXCIpICYmXHJcblx0XHRcdFx0XHQhaGFzT3duLmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgXCJpc1Byb3RvdHlwZU9mXCIpKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGtleSBpbiBvYmopIHtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwgaGFzT3duLmNhbGwob2JqLCBrZXkpO1xyXG5cdH07XHJcblxyXG5cdC8qIGpRdWVyeSAqL1xyXG5cdCQuZWFjaCA9IGZ1bmN0aW9uKG9iaiwgY2FsbGJhY2ssIGFyZ3MpIHtcclxuXHRcdHZhciB2YWx1ZSxcclxuXHRcdFx0XHRpID0gMCxcclxuXHRcdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoLFxyXG5cdFx0XHRcdGlzQXJyYXkgPSBpc0FycmF5bGlrZShvYmopO1xyXG5cclxuXHRcdGlmIChhcmdzKSB7XHJcblx0XHRcdGlmIChpc0FycmF5KSB7XHJcblx0XHRcdFx0Zm9yICg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjay5hcHBseShvYmpbaV0sIGFyZ3MpO1xyXG5cclxuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvciAoaSBpbiBvYmopIHtcclxuXHRcdFx0XHRcdGlmICghb2JqLmhhc093blByb3BlcnR5KGkpKSB7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjay5hcHBseShvYmpbaV0sIGFyZ3MpO1xyXG5cclxuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKGlzQXJyYXkpIHtcclxuXHRcdFx0XHRmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrLmNhbGwob2JqW2ldLCBpLCBvYmpbaV0pO1xyXG5cclxuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvciAoaSBpbiBvYmopIHtcclxuXHRcdFx0XHRcdGlmICghb2JqLmhhc093blByb3BlcnR5KGkpKSB7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjay5jYWxsKG9ialtpXSwgaSwgb2JqW2ldKTtcclxuXHJcblx0XHRcdFx0XHRpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBvYmo7XHJcblx0fTtcclxuXHJcblx0LyogQ3VzdG9tICovXHJcblx0JC5kYXRhID0gZnVuY3Rpb24obm9kZSwga2V5LCB2YWx1ZSkge1xyXG5cdFx0LyogJC5nZXREYXRhKCkgKi9cclxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHZhciBnZXRJZCA9IG5vZGVbJC5leHBhbmRvXSxcclxuXHRcdFx0XHRcdHN0b3JlID0gZ2V0SWQgJiYgY2FjaGVbZ2V0SWRdO1xyXG5cclxuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0cmV0dXJuIHN0b3JlO1xyXG5cdFx0XHR9IGVsc2UgaWYgKHN0b3JlKSB7XHJcblx0XHRcdFx0aWYgKGtleSBpbiBzdG9yZSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHN0b3JlW2tleV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8qICQuc2V0RGF0YSgpICovXHJcblx0XHR9IGVsc2UgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHZhciBzZXRJZCA9IG5vZGVbJC5leHBhbmRvXSB8fCAobm9kZVskLmV4cGFuZG9dID0gKyskLnV1aWQpO1xyXG5cclxuXHRcdFx0Y2FjaGVbc2V0SWRdID0gY2FjaGVbc2V0SWRdIHx8IHt9O1xyXG5cdFx0XHRjYWNoZVtzZXRJZF1ba2V5XSA9IHZhbHVlO1xyXG5cclxuXHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qIEN1c3RvbSAqL1xyXG5cdCQucmVtb3ZlRGF0YSA9IGZ1bmN0aW9uKG5vZGUsIGtleXMpIHtcclxuXHRcdHZhciBpZCA9IG5vZGVbJC5leHBhbmRvXSxcclxuXHRcdFx0XHRzdG9yZSA9IGlkICYmIGNhY2hlW2lkXTtcclxuXHJcblx0XHRpZiAoc3RvcmUpIHtcclxuXHRcdFx0Ly8gQ2xlYW51cCB0aGUgZW50aXJlIHN0b3JlIGlmIG5vIGtleXMgYXJlIHByb3ZpZGVkLlxyXG5cdFx0XHRpZiAoIWtleXMpIHtcclxuXHRcdFx0XHRkZWxldGUgY2FjaGVbaWRdO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdCQuZWFjaChrZXlzLCBmdW5jdGlvbihfLCBrZXkpIHtcclxuXHRcdFx0XHRcdGRlbGV0ZSBzdG9yZVtrZXldO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyogalF1ZXJ5ICovXHJcblx0JC5leHRlbmQgPSBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBzcmMsIGNvcHlJc0FycmF5LCBjb3B5LCBuYW1lLCBvcHRpb25zLCBjbG9uZSxcclxuXHRcdFx0XHR0YXJnZXQgPSBhcmd1bWVudHNbMF0gfHwge30sXHJcblx0XHRcdFx0aSA9IDEsXHJcblx0XHRcdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcclxuXHRcdFx0XHRkZWVwID0gZmFsc2U7XHJcblxyXG5cdFx0aWYgKHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiKSB7XHJcblx0XHRcdGRlZXAgPSB0YXJnZXQ7XHJcblxyXG5cdFx0XHR0YXJnZXQgPSBhcmd1bWVudHNbaV0gfHwge307XHJcblx0XHRcdGkrKztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAkLnR5cGUodGFyZ2V0KSAhPT0gXCJmdW5jdGlvblwiKSB7XHJcblx0XHRcdHRhcmdldCA9IHt9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpID09PSBsZW5ndGgpIHtcclxuXHRcdFx0dGFyZ2V0ID0gdGhpcztcclxuXHRcdFx0aS0tO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYgKChvcHRpb25zID0gYXJndW1lbnRzW2ldKSkge1xyXG5cdFx0XHRcdGZvciAobmFtZSBpbiBvcHRpb25zKSB7XHJcblx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRzcmMgPSB0YXJnZXRbbmFtZV07XHJcblx0XHRcdFx0XHRjb3B5ID0gb3B0aW9uc1tuYW1lXTtcclxuXHJcblx0XHRcdFx0XHRpZiAodGFyZ2V0ID09PSBjb3B5KSB7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChkZWVwICYmIGNvcHkgJiYgKCQuaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJyYXkgPSAkLmlzQXJyYXkoY29weSkpKSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoY29weUlzQXJyYXkpIHtcclxuXHRcdFx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmICQuaXNBcnJheShzcmMpID8gc3JjIDogW107XHJcblxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmICQuaXNQbGFpbk9iamVjdChzcmMpID8gc3JjIDoge307XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHRhcmdldFtuYW1lXSA9ICQuZXh0ZW5kKGRlZXAsIGNsb25lLCBjb3B5KTtcclxuXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGNvcHkgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHR0YXJnZXRbbmFtZV0gPSBjb3B5O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0YXJnZXQ7XHJcblx0fTtcclxuXHJcblx0LyogalF1ZXJ5IDEuNC4zICovXHJcblx0JC5xdWV1ZSA9IGZ1bmN0aW9uKGVsZW0sIHR5cGUsIGRhdGEpIHtcclxuXHRcdGZ1bmN0aW9uICRtYWtlQXJyYXkoYXJyLCByZXN1bHRzKSB7XHJcblx0XHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xyXG5cclxuXHRcdFx0aWYgKGFycikge1xyXG5cdFx0XHRcdGlmIChpc0FycmF5bGlrZShPYmplY3QoYXJyKSkpIHtcclxuXHRcdFx0XHRcdC8qICQubWVyZ2UgKi9cclxuXHRcdFx0XHRcdChmdW5jdGlvbihmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRcdFx0XHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcclxuXHRcdFx0XHRcdFx0XHRcdGogPSAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcclxuXHJcblx0XHRcdFx0XHRcdHdoaWxlIChqIDwgbGVuKSB7XHJcblx0XHRcdFx0XHRcdFx0Zmlyc3RbaSsrXSA9IHNlY29uZFtqKytdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAobGVuICE9PSBsZW4pIHtcclxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoc2Vjb25kW2pdICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZpcnN0W2krK10gPSBzZWNvbmRbaisrXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGZpcnN0Lmxlbmd0aCA9IGk7XHJcblxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmlyc3Q7XHJcblx0XHRcdFx0XHR9KShyZXQsIHR5cGVvZiBhcnIgPT09IFwic3RyaW5nXCIgPyBbYXJyXSA6IGFycik7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFtdLnB1c2guY2FsbChyZXQsIGFycik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gcmV0O1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghZWxlbSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dHlwZSA9ICh0eXBlIHx8IFwiZnhcIikgKyBcInF1ZXVlXCI7XHJcblxyXG5cdFx0dmFyIHEgPSAkLmRhdGEoZWxlbSwgdHlwZSk7XHJcblxyXG5cdFx0aWYgKCFkYXRhKSB7XHJcblx0XHRcdHJldHVybiBxIHx8IFtdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghcSB8fCAkLmlzQXJyYXkoZGF0YSkpIHtcclxuXHRcdFx0cSA9ICQuZGF0YShlbGVtLCB0eXBlLCAkbWFrZUFycmF5KGRhdGEpKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHEucHVzaChkYXRhKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcTtcclxuXHR9O1xyXG5cclxuXHQvKiBqUXVlcnkgMS40LjMgKi9cclxuXHQkLmRlcXVldWUgPSBmdW5jdGlvbihlbGVtcywgdHlwZSkge1xyXG5cdFx0LyogQ3VzdG9tOiBFbWJlZCBlbGVtZW50IGl0ZXJhdGlvbi4gKi9cclxuXHRcdCQuZWFjaChlbGVtcy5ub2RlVHlwZSA/IFtlbGVtc10gOiBlbGVtcywgZnVuY3Rpb24oaSwgZWxlbSkge1xyXG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XHJcblxyXG5cdFx0XHR2YXIgcXVldWUgPSAkLnF1ZXVlKGVsZW0sIHR5cGUpLFxyXG5cdFx0XHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpO1xyXG5cclxuXHRcdFx0aWYgKGZuID09PSBcImlucHJvZ3Jlc3NcIikge1xyXG5cdFx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGZuKSB7XHJcblx0XHRcdFx0aWYgKHR5cGUgPT09IFwiZnhcIikge1xyXG5cdFx0XHRcdFx0cXVldWUudW5zaGlmdChcImlucHJvZ3Jlc3NcIik7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmbi5jYWxsKGVsZW0sIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0JC5kZXF1ZXVlKGVsZW0sIHR5cGUpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9O1xyXG5cclxuXHQvKioqKioqKioqKioqKioqKioqXHJcblx0ICQuZm4gTWV0aG9kc1xyXG5cdCAqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdC8qIGpRdWVyeSAqL1xyXG5cdCQuZm4gPSAkLnByb3RvdHlwZSA9IHtcclxuXHRcdGluaXQ6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XHJcblx0XHRcdC8qIEp1c3QgcmV0dXJuIHRoZSBlbGVtZW50IHdyYXBwZWQgaW5zaWRlIGFuIGFycmF5OyBkb24ndCBwcm9jZWVkIHdpdGggdGhlIGFjdHVhbCBqUXVlcnkgbm9kZSB3cmFwcGluZyBwcm9jZXNzLiAqL1xyXG5cdFx0XHRpZiAoc2VsZWN0b3Iubm9kZVR5cGUpIHtcclxuXHRcdFx0XHR0aGlzWzBdID0gc2VsZWN0b3I7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIk5vdCBhIERPTSBub2RlLlwiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdG9mZnNldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdC8qIGpRdWVyeSBhbHRlcmVkIGNvZGU6IERyb3BwZWQgZGlzY29ubmVjdGVkIERPTSBub2RlIGNoZWNraW5nLiAqL1xyXG5cdFx0XHR2YXIgYm94ID0gdGhpc1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPyB0aGlzWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIDoge3RvcDogMCwgbGVmdDogMH07XHJcblxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHRvcDogYm94LnRvcCArICh3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuc2Nyb2xsVG9wIHx8IDApIC0gKGRvY3VtZW50LmNsaWVudFRvcCB8fCAwKSxcclxuXHRcdFx0XHRsZWZ0OiBib3gubGVmdCArICh3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jdW1lbnQuc2Nyb2xsTGVmdCB8fCAwKSAtIChkb2N1bWVudC5jbGllbnRMZWZ0IHx8IDApXHJcblx0XHRcdH07XHJcblx0XHR9LFxyXG5cdFx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHQvKiBqUXVlcnkgKi9cclxuXHRcdFx0ZnVuY3Rpb24gb2Zmc2V0UGFyZW50Rm4oZWxlbSkge1xyXG5cdFx0XHRcdHZhciBvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudDtcclxuXHJcblx0XHRcdFx0d2hpbGUgKG9mZnNldFBhcmVudCAmJiAob2Zmc2V0UGFyZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwiaHRtbFwiICYmIG9mZnNldFBhcmVudC5zdHlsZSAmJiBvZmZzZXRQYXJlbnQuc3R5bGUucG9zaXRpb24udG9Mb3dlckNhc2UoKSA9PT0gXCJzdGF0aWNcIikpIHtcclxuXHRcdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBaZXB0byAqL1xyXG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbMF0sXHJcblx0XHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnRGbihlbGVtKSxcclxuXHRcdFx0XHRcdG9mZnNldCA9IHRoaXMub2Zmc2V0KCksXHJcblx0XHRcdFx0XHRwYXJlbnRPZmZzZXQgPSAvXig/OmJvZHl8aHRtbCkkL2kudGVzdChvZmZzZXRQYXJlbnQubm9kZU5hbWUpID8ge3RvcDogMCwgbGVmdDogMH0gOiAkKG9mZnNldFBhcmVudCkub2Zmc2V0KCk7XHJcblxyXG5cdFx0XHRvZmZzZXQudG9wIC09IHBhcnNlRmxvYXQoZWxlbS5zdHlsZS5tYXJnaW5Ub3ApIHx8IDA7XHJcblx0XHRcdG9mZnNldC5sZWZ0IC09IHBhcnNlRmxvYXQoZWxlbS5zdHlsZS5tYXJnaW5MZWZ0KSB8fCAwO1xyXG5cclxuXHRcdFx0aWYgKG9mZnNldFBhcmVudC5zdHlsZSkge1xyXG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0gcGFyc2VGbG9hdChvZmZzZXRQYXJlbnQuc3R5bGUuYm9yZGVyVG9wV2lkdGgpIHx8IDA7XHJcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0gcGFyc2VGbG9hdChvZmZzZXRQYXJlbnQuc3R5bGUuYm9yZGVyTGVmdFdpZHRoKSB8fCAwO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AsXHJcblx0XHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdFxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKioqKioqKioqKioqKioqKioqKioqXHJcblx0IFByaXZhdGUgVmFyaWFibGVzXHJcblx0ICoqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdC8qIEZvciAkLmRhdGEoKSAqL1xyXG5cdHZhciBjYWNoZSA9IHt9O1xyXG5cdCQuZXhwYW5kbyA9IFwidmVsb2NpdHlcIiArIChuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XHJcblx0JC51dWlkID0gMDtcclxuXHJcblx0LyogRm9yICQucXVldWUoKSAqL1xyXG5cdHZhciBjbGFzczJ0eXBlID0ge30sXHJcblx0XHRcdGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHksXHJcblx0XHRcdHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcclxuXHJcblx0dmFyIHR5cGVzID0gXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yXCIuc3BsaXQoXCIgXCIpO1xyXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNsYXNzMnR5cGVbXCJbb2JqZWN0IFwiICsgdHlwZXNbaV0gKyBcIl1cIl0gPSB0eXBlc1tpXS50b0xvd2VyQ2FzZSgpO1xyXG5cdH1cclxuXHJcblx0LyogTWFrZXMgJChub2RlKSBwb3NzaWJsZSwgd2l0aG91dCBoYXZpbmcgdG8gY2FsbCBpbml0LiAqL1xyXG5cdCQuZm4uaW5pdC5wcm90b3R5cGUgPSAkLmZuO1xyXG5cclxuXHQvKiBHbG9iYWxpemUgVmVsb2NpdHkgb250byB0aGUgd2luZG93LCBhbmQgYXNzaWduIGl0cyBVdGlsaXRpZXMgcHJvcGVydHkuICovXHJcblx0d2luZG93LlZlbG9jaXR5ID0ge1V0aWxpdGllczogJH07XHJcbn0pKHdpbmRvdyk7XHJcblxyXG4vKioqKioqKioqKioqKioqKioqXHJcbiBWZWxvY2l0eS5qc1xyXG4gKioqKioqKioqKioqKioqKioqL1xyXG5cclxuKGZ1bmN0aW9uKGZhY3RvcnkpIHtcclxuXHRcInVzZSBzdHJpY3RcIjtcclxuXHQvKiBDb21tb25KUyBtb2R1bGUuICovXHJcblx0aWYgKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiKSB7XHJcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcclxuXHRcdC8qIEFNRCBtb2R1bGUuICovXHJcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xyXG5cdFx0ZGVmaW5lKGZhY3RvcnkpO1xyXG5cdFx0LyogQnJvd3NlciBnbG9iYWxzLiAqL1xyXG5cdH0gZWxzZSB7XHJcblx0XHRmYWN0b3J5KCk7XHJcblx0fVxyXG59KGZ1bmN0aW9uKCkge1xyXG5cdFwidXNlIHN0cmljdFwiO1xyXG5cdHJldHVybiBmdW5jdGlvbihnbG9iYWwsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCkge1xyXG5cclxuXHRcdC8qKioqKioqKioqKioqKipcclxuXHRcdCBTdW1tYXJ5XHJcblx0XHQgKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdC8qXHJcblx0XHQgLSBDU1M6IENTUyBzdGFjayB0aGF0IHdvcmtzIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgcmVzdCBvZiBWZWxvY2l0eS5cclxuXHRcdCAtIGFuaW1hdGUoKTogQ29yZSBhbmltYXRpb24gbWV0aG9kIHRoYXQgaXRlcmF0ZXMgb3ZlciB0aGUgdGFyZ2V0ZWQgZWxlbWVudHMgYW5kIHF1ZXVlcyB0aGUgaW5jb21pbmcgY2FsbCBvbnRvIGVhY2ggZWxlbWVudCBpbmRpdmlkdWFsbHkuXHJcblx0XHQgLSBQcmUtUXVldWVpbmc6IFByZXBhcmUgdGhlIGVsZW1lbnQgZm9yIGFuaW1hdGlvbiBieSBpbnN0YW50aWF0aW5nIGl0cyBkYXRhIGNhY2hlIGFuZCBwcm9jZXNzaW5nIHRoZSBjYWxsJ3Mgb3B0aW9ucy5cclxuXHRcdCAtIFF1ZXVlaW5nOiBUaGUgbG9naWMgdGhhdCBydW5zIG9uY2UgdGhlIGNhbGwgaGFzIHJlYWNoZWQgaXRzIHBvaW50IG9mIGV4ZWN1dGlvbiBpbiB0aGUgZWxlbWVudCdzICQucXVldWUoKSBzdGFjay5cclxuXHRcdCBNb3N0IGxvZ2ljIGlzIHBsYWNlZCBoZXJlIHRvIGF2b2lkIHJpc2tpbmcgaXQgYmVjb21pbmcgc3RhbGUgKGlmIHRoZSBlbGVtZW50J3MgcHJvcGVydGllcyBoYXZlIGNoYW5nZWQpLlxyXG5cdFx0IC0gUHVzaGluZzogQ29uc29saWRhdGlvbiBvZiB0aGUgdHdlZW4gZGF0YSBmb2xsb3dlZCBieSBpdHMgcHVzaCBvbnRvIHRoZSBnbG9iYWwgaW4tcHJvZ3Jlc3MgY2FsbHMgY29udGFpbmVyLlxyXG5cdFx0IC0gdGljaygpOiBUaGUgc2luZ2xlIHJlcXVlc3RBbmltYXRpb25GcmFtZSBsb29wIHJlc3BvbnNpYmxlIGZvciB0d2VlbmluZyBhbGwgaW4tcHJvZ3Jlc3MgY2FsbHMuXHJcblx0XHQgLSBjb21wbGV0ZUNhbGwoKTogSGFuZGxlcyB0aGUgY2xlYW51cCBwcm9jZXNzIGZvciBlYWNoIFZlbG9jaXR5IGNhbGwuXHJcblx0XHQgKi9cclxuXHJcblx0XHQvKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHQgSGVscGVyIEZ1bmN0aW9uc1xyXG5cdFx0ICoqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHQvKiBJRSBkZXRlY3Rpb24uIEdpc3Q6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2p1bGlhbnNoYXBpcm8vOTA5ODYwOSAqL1xyXG5cdFx0dmFyIElFID0gKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRpZiAoZG9jdW1lbnQuZG9jdW1lbnRNb2RlKSB7XHJcblx0XHRcdFx0cmV0dXJuIGRvY3VtZW50LmRvY3VtZW50TW9kZTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRmb3IgKHZhciBpID0gNzsgaSA+IDQ7IGktLSkge1xyXG5cdFx0XHRcdFx0dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblxyXG5cdFx0XHRcdFx0ZGl2LmlubmVySFRNTCA9IFwiPCEtLVtpZiBJRSBcIiArIGkgKyBcIl0+PHNwYW4+PC9zcGFuPjwhW2VuZGlmXS0tPlwiO1xyXG5cclxuXHRcdFx0XHRcdGlmIChkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzcGFuXCIpLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRkaXYgPSBudWxsO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fSkoKTtcclxuXHJcblx0XHQvKiByQUYgc2hpbS4gR2lzdDogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vanVsaWFuc2hhcGlyby85NDk3NTEzICovXHJcblx0XHR2YXIgckFGU2hpbSA9IChmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIHRpbWVMYXN0ID0gMDtcclxuXHJcblx0XHRcdHJldHVybiB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuXHRcdFx0XHR2YXIgdGltZUN1cnJlbnQgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpLFxyXG5cdFx0XHRcdFx0XHR0aW1lRGVsdGE7XHJcblxyXG5cdFx0XHRcdC8qIER5bmFtaWNhbGx5IHNldCBkZWxheSBvbiBhIHBlci10aWNrIGJhc2lzIHRvIG1hdGNoIDYwZnBzLiAqL1xyXG5cdFx0XHRcdC8qIFRlY2huaXF1ZSBieSBFcmlrIE1vbGxlci4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3BhdWxpcmlzaC8xNTc5NjcxICovXHJcblx0XHRcdFx0dGltZURlbHRhID0gTWF0aC5tYXgoMCwgMTYgLSAodGltZUN1cnJlbnQgLSB0aW1lTGFzdCkpO1xyXG5cdFx0XHRcdHRpbWVMYXN0ID0gdGltZUN1cnJlbnQgKyB0aW1lRGVsdGE7XHJcblxyXG5cdFx0XHRcdHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0Y2FsbGJhY2sodGltZUN1cnJlbnQgKyB0aW1lRGVsdGEpO1xyXG5cdFx0XHRcdH0sIHRpbWVEZWx0YSk7XHJcblx0XHRcdH07XHJcblx0XHR9KSgpO1xyXG5cclxuXHRcdHZhciBwZXJmb3JtYW5jZSA9IChmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIHBlcmYgPSB3aW5kb3cucGVyZm9ybWFuY2UgfHwge307XHJcblxyXG5cdFx0XHRpZiAodHlwZW9mIHBlcmYubm93ICE9PSBcImZ1bmN0aW9uXCIpIHtcclxuXHRcdFx0XHR2YXIgbm93T2Zmc2V0ID0gcGVyZi50aW1pbmcgJiYgcGVyZi50aW1pbmcubmF2aWdhdGlvblN0YXJ0ID8gcGVyZi50aW1pbmcubmF2aWdhdGlvblN0YXJ0IDogKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcclxuXHJcblx0XHRcdFx0cGVyZi5ub3cgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHJldHVybiAobmV3IERhdGUoKSkuZ2V0VGltZSgpIC0gbm93T2Zmc2V0O1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHBlcmY7XHJcblx0XHR9KSgpO1xyXG5cclxuXHRcdC8qIEFycmF5IGNvbXBhY3RpbmcuIENvcHlyaWdodCBMby1EYXNoLiBNSVQgTGljZW5zZTogaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi9tYXN0ZXIvTElDRU5TRS50eHQgKi9cclxuXHRcdGZ1bmN0aW9uIGNvbXBhY3RTcGFyc2VBcnJheShhcnJheSkge1xyXG5cdFx0XHR2YXIgaW5kZXggPSAtMSxcclxuXHRcdFx0XHRcdGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMCxcclxuXHRcdFx0XHRcdHJlc3VsdCA9IFtdO1xyXG5cclxuXHRcdFx0d2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcclxuXHRcdFx0XHR2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XHJcblxyXG5cdFx0XHRcdGlmICh2YWx1ZSkge1xyXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2godmFsdWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNoaW0gZm9yIFwiZml4aW5nXCIgSUUncyBsYWNrIG9mIHN1cHBvcnQgKElFIDwgOSkgZm9yIGFwcGx5aW5nIHNsaWNlXHJcblx0XHQgKiBvbiBob3N0IG9iamVjdHMgbGlrZSBOYW1lZE5vZGVNYXAsIE5vZGVMaXN0LCBhbmQgSFRNTENvbGxlY3Rpb25cclxuXHRcdCAqICh0ZWNobmljYWxseSwgc2luY2UgaG9zdCBvYmplY3RzIGhhdmUgYmVlbiBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQsXHJcblx0XHQgKiBhdCBsZWFzdCBiZWZvcmUgRVMyMDE1LCBJRSBoYXNuJ3QgbmVlZGVkIHRvIHdvcmsgdGhpcyB3YXkpLlxyXG5cdFx0ICogQWxzbyB3b3JrcyBvbiBzdHJpbmdzLCBmaXhlcyBJRSA8IDkgdG8gYWxsb3cgYW4gZXhwbGljaXQgdW5kZWZpbmVkXHJcblx0XHQgKiBmb3IgdGhlIDJuZCBhcmd1bWVudCAoYXMgaW4gRmlyZWZveCksIGFuZCBwcmV2ZW50cyBlcnJvcnMgd2hlblxyXG5cdFx0ICogY2FsbGVkIG9uIG90aGVyIERPTSBvYmplY3RzLlxyXG5cdFx0ICovXHJcblx0XHR2YXIgX3NsaWNlID0gKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XHJcblxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdC8vIENhbid0IGJlIHVzZWQgd2l0aCBET00gZWxlbWVudHMgaW4gSUUgPCA5XHJcblx0XHRcdFx0c2xpY2UuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO1xyXG5cdFx0XHRcdHJldHVybiBzbGljZTtcclxuXHRcdFx0fSBjYXRjaCAoZSkgeyAvLyBGYWlscyBpbiBJRSA8IDlcclxuXHJcblx0XHRcdFx0Ly8gVGhpcyB3aWxsIHdvcmsgZm9yIGdlbnVpbmUgYXJyYXlzLCBhcnJheS1saWtlIG9iamVjdHMsIFxyXG5cdFx0XHRcdC8vIE5hbWVkTm9kZU1hcCAoYXR0cmlidXRlcywgZW50aXRpZXMsIG5vdGF0aW9ucyksXHJcblx0XHRcdFx0Ly8gTm9kZUxpc3QgKGUuZy4sIGdldEVsZW1lbnRzQnlUYWdOYW1lKSwgSFRNTENvbGxlY3Rpb24gKGUuZy4sIGNoaWxkTm9kZXMpLFxyXG5cdFx0XHRcdC8vIGFuZCB3aWxsIG5vdCBmYWlsIG9uIG90aGVyIERPTSBvYmplY3RzIChhcyBkbyBET00gZWxlbWVudHMgaW4gSUUgPCA5KVxyXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbihiZWdpbiwgZW5kKSB7XHJcblx0XHRcdFx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGg7XHJcblxyXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBiZWdpbiAhPT0gXCJudW1iZXJcIikge1xyXG5cdFx0XHRcdFx0XHRiZWdpbiA9IDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBJRSA8IDkgZ2V0cyB1bmhhcHB5IHdpdGggYW4gdW5kZWZpbmVkIGVuZCBhcmd1bWVudFxyXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBlbmQgIT09IFwibnVtYmVyXCIpIHtcclxuXHRcdFx0XHRcdFx0ZW5kID0gbGVuO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Ly8gRm9yIG5hdGl2ZSBBcnJheSBvYmplY3RzLCB3ZSB1c2UgdGhlIG5hdGl2ZSBzbGljZSBmdW5jdGlvblxyXG5cdFx0XHRcdFx0aWYgKHRoaXMuc2xpY2UpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvLyBGb3IgYXJyYXkgbGlrZSBvYmplY3Qgd2UgaGFuZGxlIGl0IG91cnNlbHZlcy5cclxuXHRcdFx0XHRcdHZhciBpLFxyXG5cdFx0XHRcdFx0XHRcdGNsb25lZCA9IFtdLFxyXG5cdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBuZWdhdGl2ZSB2YWx1ZSBmb3IgXCJiZWdpblwiXHJcblx0XHRcdFx0XHRcdFx0c3RhcnQgPSAoYmVnaW4gPj0gMCkgPyBiZWdpbiA6IE1hdGgubWF4KDAsIGxlbiArIGJlZ2luKSxcclxuXHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgbmVnYXRpdmUgdmFsdWUgZm9yIFwiZW5kXCJcclxuXHRcdFx0XHRcdFx0XHR1cFRvID0gZW5kIDwgMCA/IGxlbiArIGVuZCA6IE1hdGgubWluKGVuZCwgbGVuKSxcclxuXHRcdFx0XHRcdFx0XHQvLyBBY3R1YWwgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgc2xpY2VcclxuXHRcdFx0XHRcdFx0XHRzaXplID0gdXBUbyAtIHN0YXJ0O1xyXG5cclxuXHRcdFx0XHRcdGlmIChzaXplID4gMCkge1xyXG5cdFx0XHRcdFx0XHRjbG9uZWQgPSBuZXcgQXJyYXkoc2l6ZSk7XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmNoYXJBdCkge1xyXG5cdFx0XHRcdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNsb25lZFtpXSA9IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNsb25lZFtpXSA9IHRoaXNbc3RhcnQgKyBpXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiBjbG9uZWQ7XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fSkoKTtcclxuXHJcblx0XHQvKiAuaW5kZXhPZiBkb2Vzbid0IGV4aXN0IGluIElFPDkgKi9cclxuXHRcdHZhciBfaW5BcnJheSA9IChmdW5jdGlvbigpIHtcclxuXHRcdFx0aWYgKEFycmF5LnByb3RvdHlwZS5pbmNsdWRlcykge1xyXG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbihhcnIsIHZhbCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGFyci5pbmNsdWRlcyh2YWwpO1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGFyciwgdmFsKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gYXJyLmluZGV4T2YodmFsKSA+PSAwO1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKGFyciwgdmFsKSB7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGlmIChhcnJbaV0gPT09IHZhbCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9O1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0ZnVuY3Rpb24gc2FuaXRpemVFbGVtZW50cyhlbGVtZW50cykge1xyXG5cdFx0XHQvKiBVbndyYXAgalF1ZXJ5L1plcHRvIG9iamVjdHMuICovXHJcblx0XHRcdGlmIChUeXBlLmlzV3JhcHBlZChlbGVtZW50cykpIHtcclxuXHRcdFx0XHRlbGVtZW50cyA9IF9zbGljZS5jYWxsKGVsZW1lbnRzKTtcclxuXHRcdFx0XHQvKiBXcmFwIGEgc2luZ2xlIGVsZW1lbnQgaW4gYW4gYXJyYXkgc28gdGhhdCAkLmVhY2goKSBjYW4gaXRlcmF0ZSB3aXRoIHRoZSBlbGVtZW50IGluc3RlYWQgb2YgaXRzIG5vZGUncyBjaGlsZHJlbi4gKi9cclxuXHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzTm9kZShlbGVtZW50cykpIHtcclxuXHRcdFx0XHRlbGVtZW50cyA9IFtlbGVtZW50c107XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBlbGVtZW50cztcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgVHlwZSA9IHtcclxuXHRcdFx0aXNOdW1iZXI6IGZ1bmN0aW9uKHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0cmV0dXJuICh0eXBlb2YgdmFyaWFibGUgPT09IFwibnVtYmVyXCIpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRpc1N0cmluZzogZnVuY3Rpb24odmFyaWFibGUpIHtcclxuXHRcdFx0XHRyZXR1cm4gKHR5cGVvZiB2YXJpYWJsZSA9PT0gXCJzdHJpbmdcIik7XHJcblx0XHRcdH0sXHJcblx0XHRcdGlzQXJyYXk6IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24odmFyaWFibGUpIHtcclxuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhcmlhYmxlKSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRpc0Z1bmN0aW9uOiBmdW5jdGlvbih2YXJpYWJsZSkge1xyXG5cdFx0XHRcdHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFyaWFibGUpID09PSBcIltvYmplY3QgRnVuY3Rpb25dXCI7XHJcblx0XHRcdH0sXHJcblx0XHRcdGlzTm9kZTogZnVuY3Rpb24odmFyaWFibGUpIHtcclxuXHRcdFx0XHRyZXR1cm4gdmFyaWFibGUgJiYgdmFyaWFibGUubm9kZVR5cGU7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8qIERldGVybWluZSBpZiB2YXJpYWJsZSBpcyBhbiBhcnJheS1saWtlIHdyYXBwZWQgalF1ZXJ5LCBaZXB0byBvciBzaW1pbGFyIGVsZW1lbnQsIG9yIGV2ZW4gYSBOb2RlTGlzdCBldGMuICovXHJcblx0XHRcdC8qIE5PVEU6IEhUTUxGb3JtRWxlbWVudHMgYWxzbyBoYXZlIGEgbGVuZ3RoLiAqL1xyXG5cdFx0XHRpc1dyYXBwZWQ6IGZ1bmN0aW9uKHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0cmV0dXJuIHZhcmlhYmxlXHJcblx0XHRcdFx0XHRcdCYmIHZhcmlhYmxlICE9PSB3aW5kb3dcclxuXHRcdFx0XHRcdFx0JiYgVHlwZS5pc051bWJlcih2YXJpYWJsZS5sZW5ndGgpXHJcblx0XHRcdFx0XHRcdCYmICFUeXBlLmlzU3RyaW5nKHZhcmlhYmxlKVxyXG5cdFx0XHRcdFx0XHQmJiAhVHlwZS5pc0Z1bmN0aW9uKHZhcmlhYmxlKVxyXG5cdFx0XHRcdFx0XHQmJiAhVHlwZS5pc05vZGUodmFyaWFibGUpXHJcblx0XHRcdFx0XHRcdCYmICh2YXJpYWJsZS5sZW5ndGggPT09IDAgfHwgVHlwZS5pc05vZGUodmFyaWFibGVbMF0pKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0aXNTVkc6IGZ1bmN0aW9uKHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0cmV0dXJuIHdpbmRvdy5TVkdFbGVtZW50ICYmICh2YXJpYWJsZSBpbnN0YW5jZW9mIHdpbmRvdy5TVkdFbGVtZW50KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24odmFyaWFibGUpIHtcclxuXHRcdFx0XHRmb3IgKHZhciBuYW1lIGluIHZhcmlhYmxlKSB7XHJcblx0XHRcdFx0XHRpZiAodmFyaWFibGUuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqKioqXHJcblx0XHQgRGVwZW5kZW5jaWVzXHJcblx0XHQgKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0dmFyICQsXHJcblx0XHRcdFx0aXNKUXVlcnkgPSBmYWxzZTtcclxuXHJcblx0XHRpZiAoZ2xvYmFsLmZuICYmIGdsb2JhbC5mbi5qcXVlcnkpIHtcclxuXHRcdFx0JCA9IGdsb2JhbDtcclxuXHRcdFx0aXNKUXVlcnkgPSB0cnVlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0JCA9IHdpbmRvdy5WZWxvY2l0eS5VdGlsaXRpZXM7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKElFIDw9IDggJiYgIWlzSlF1ZXJ5KSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlZlbG9jaXR5OiBJRTggYW5kIGJlbG93IHJlcXVpcmUgalF1ZXJ5IHRvIGJlIGxvYWRlZCBiZWZvcmUgVmVsb2NpdHkuXCIpO1xyXG5cdFx0fSBlbHNlIGlmIChJRSA8PSA3KSB7XHJcblx0XHRcdC8qIFJldmVydCB0byBqUXVlcnkncyAkLmFuaW1hdGUoKSwgYW5kIGxvc2UgVmVsb2NpdHkncyBleHRyYSBmZWF0dXJlcy4gKi9cclxuXHRcdFx0alF1ZXJ5LmZuLnZlbG9jaXR5ID0galF1ZXJ5LmZuLmFuaW1hdGU7XHJcblxyXG5cdFx0XHQvKiBOb3cgdGhhdCAkLmZuLnZlbG9jaXR5IGlzIGFsaWFzZWQsIGFib3J0IHRoaXMgVmVsb2NpdHkgZGVjbGFyYXRpb24uICovXHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvKioqKioqKioqKioqKioqKipcclxuXHRcdCBDb25zdGFudHNcclxuXHRcdCAqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHR2YXIgRFVSQVRJT05fREVGQVVMVCA9IDQwMCxcclxuXHRcdFx0XHRFQVNJTkdfREVGQVVMVCA9IFwic3dpbmdcIjtcclxuXHJcblx0XHQvKioqKioqKioqKioqKlxyXG5cdFx0IFN0YXRlXHJcblx0XHQgKioqKioqKioqKioqKi9cclxuXHJcblx0XHR2YXIgVmVsb2NpdHkgPSB7XHJcblx0XHRcdC8qIENvbnRhaW5lciBmb3IgcGFnZS13aWRlIFZlbG9jaXR5IHN0YXRlIGRhdGEuICovXHJcblx0XHRcdFN0YXRlOiB7XHJcblx0XHRcdFx0LyogRGV0ZWN0IG1vYmlsZSBkZXZpY2VzIHRvIGRldGVybWluZSBpZiBtb2JpbGVIQSBzaG91bGQgYmUgdHVybmVkIG9uLiAqL1xyXG5cdFx0XHRcdGlzTW9iaWxlOiAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpLFxyXG5cdFx0XHRcdC8qIFRoZSBtb2JpbGVIQSBvcHRpb24ncyBiZWhhdmlvciBjaGFuZ2VzIG9uIG9sZGVyIEFuZHJvaWQgZGV2aWNlcyAoR2luZ2VyYnJlYWQsIHZlcnNpb25zIDIuMy4zLTIuMy43KS4gKi9cclxuXHRcdFx0XHRpc0FuZHJvaWQ6IC9BbmRyb2lkL2kudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCksXHJcblx0XHRcdFx0aXNHaW5nZXJicmVhZDogL0FuZHJvaWQgMlxcLjNcXC5bMy03XS9pLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpLFxyXG5cdFx0XHRcdGlzQ2hyb21lOiB3aW5kb3cuY2hyb21lLFxyXG5cdFx0XHRcdGlzRmlyZWZveDogL0ZpcmVmb3gvaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSxcclxuXHRcdFx0XHQvKiBDcmVhdGUgYSBjYWNoZWQgZWxlbWVudCBmb3IgcmUtdXNlIHdoZW4gY2hlY2tpbmcgZm9yIENTUyBwcm9wZXJ0eSBwcmVmaXhlcy4gKi9cclxuXHRcdFx0XHRwcmVmaXhFbGVtZW50OiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxyXG5cdFx0XHRcdC8qIENhY2hlIGV2ZXJ5IHByZWZpeCBtYXRjaCB0byBhdm9pZCByZXBlYXRpbmcgbG9va3Vwcy4gKi9cclxuXHRcdFx0XHRwcmVmaXhNYXRjaGVzOiB7fSxcclxuXHRcdFx0XHQvKiBDYWNoZSB0aGUgYW5jaG9yIHVzZWQgZm9yIGFuaW1hdGluZyB3aW5kb3cgc2Nyb2xsaW5nLiAqL1xyXG5cdFx0XHRcdHNjcm9sbEFuY2hvcjogbnVsbCxcclxuXHRcdFx0XHQvKiBDYWNoZSB0aGUgYnJvd3Nlci1zcGVjaWZpYyBwcm9wZXJ0eSBuYW1lcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNjcm9sbCBhbmNob3IuICovXHJcblx0XHRcdFx0c2Nyb2xsUHJvcGVydHlMZWZ0OiBudWxsLFxyXG5cdFx0XHRcdHNjcm9sbFByb3BlcnR5VG9wOiBudWxsLFxyXG5cdFx0XHRcdC8qIEtlZXAgdHJhY2sgb2Ygd2hldGhlciBvdXIgUkFGIHRpY2sgaXMgcnVubmluZy4gKi9cclxuXHRcdFx0XHRpc1RpY2tpbmc6IGZhbHNlLFxyXG5cdFx0XHRcdC8qIENvbnRhaW5lciBmb3IgZXZlcnkgaW4tcHJvZ3Jlc3MgY2FsbCB0byBWZWxvY2l0eS4gKi9cclxuXHRcdFx0XHRjYWxsczogW10sXHJcblx0XHRcdFx0ZGVsYXllZEVsZW1lbnRzOiB7XHJcblx0XHRcdFx0XHRjb3VudDogMFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0LyogVmVsb2NpdHkncyBjdXN0b20gQ1NTIHN0YWNrLiBNYWRlIGdsb2JhbCBmb3IgdW5pdCB0ZXN0aW5nLiAqL1xyXG5cdFx0XHRDU1M6IHsvKiBEZWZpbmVkIGJlbG93LiAqL30sXHJcblx0XHRcdC8qIEEgc2hpbSBvZiB0aGUgalF1ZXJ5IHV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYnkgVmVsb2NpdHkgLS0gcHJvdmlkZWQgYnkgVmVsb2NpdHkncyBvcHRpb25hbCBqUXVlcnkgc2hpbS4gKi9cclxuXHRcdFx0VXRpbGl0aWVzOiAkLFxyXG5cdFx0XHQvKiBDb250YWluZXIgZm9yIHRoZSB1c2VyJ3MgY3VzdG9tIGFuaW1hdGlvbiByZWRpcmVjdHMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBuYW1lIGluIHBsYWNlIG9mIHRoZSBwcm9wZXJ0aWVzIG1hcCBhcmd1bWVudC4gKi9cclxuXHRcdFx0UmVkaXJlY3RzOiB7LyogTWFudWFsbHkgcmVnaXN0ZXJlZCBieSB0aGUgdXNlci4gKi99LFxyXG5cdFx0XHRFYXNpbmdzOiB7LyogRGVmaW5lZCBiZWxvdy4gKi99LFxyXG5cdFx0XHQvKiBBdHRlbXB0IHRvIHVzZSBFUzYgUHJvbWlzZXMgYnkgZGVmYXVsdC4gVXNlcnMgY2FuIG92ZXJyaWRlIHRoaXMgd2l0aCBhIHRoaXJkLXBhcnR5IHByb21pc2VzIGxpYnJhcnkuICovXHJcblx0XHRcdFByb21pc2U6IHdpbmRvdy5Qcm9taXNlLFxyXG5cdFx0XHQvKiBWZWxvY2l0eSBvcHRpb24gZGVmYXVsdHMsIHdoaWNoIGNhbiBiZSBvdmVycmlkZW4gYnkgdGhlIHVzZXIuICovXHJcblx0XHRcdGRlZmF1bHRzOiB7XHJcblx0XHRcdFx0cXVldWU6IFwiXCIsXHJcblx0XHRcdFx0ZHVyYXRpb246IERVUkFUSU9OX0RFRkFVTFQsXHJcblx0XHRcdFx0ZWFzaW5nOiBFQVNJTkdfREVGQVVMVCxcclxuXHRcdFx0XHRiZWdpbjogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdGNvbXBsZXRlOiB1bmRlZmluZWQsXHJcblx0XHRcdFx0cHJvZ3Jlc3M6IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRkaXNwbGF5OiB1bmRlZmluZWQsXHJcblx0XHRcdFx0dmlzaWJpbGl0eTogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdGxvb3A6IGZhbHNlLFxyXG5cdFx0XHRcdGRlbGF5OiBmYWxzZSxcclxuXHRcdFx0XHRtb2JpbGVIQTogdHJ1ZSxcclxuXHRcdFx0XHQvKiBBZHZhbmNlZDogU2V0IHRvIGZhbHNlIHRvIHByZXZlbnQgcHJvcGVydHkgdmFsdWVzIGZyb20gYmVpbmcgY2FjaGVkIGJldHdlZW4gY29uc2VjdXRpdmUgVmVsb2NpdHktaW5pdGlhdGVkIGNoYWluIGNhbGxzLiAqL1xyXG5cdFx0XHRcdF9jYWNoZVZhbHVlczogdHJ1ZSxcclxuXHRcdFx0XHQvKiBBZHZhbmNlZDogU2V0IHRvIGZhbHNlIGlmIHRoZSBwcm9taXNlIHNob3VsZCBhbHdheXMgcmVzb2x2ZSBvbiBlbXB0eSBlbGVtZW50IGxpc3RzLiAqL1xyXG5cdFx0XHRcdHByb21pc2VSZWplY3RFbXB0eTogdHJ1ZVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKiBBIGRlc2lnbiBnb2FsIG9mIFZlbG9jaXR5IGlzIHRvIGNhY2hlIGRhdGEgd2hlcmV2ZXIgcG9zc2libGUgaW4gb3JkZXIgdG8gYXZvaWQgRE9NIHJlcXVlcnlpbmcuIEFjY29yZGluZ2x5LCBlYWNoIGVsZW1lbnQgaGFzIGEgZGF0YSBjYWNoZS4gKi9cclxuXHRcdFx0aW5pdDogZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cdFx0XHRcdCQuZGF0YShlbGVtZW50LCBcInZlbG9jaXR5XCIsIHtcclxuXHRcdFx0XHRcdC8qIFN0b3JlIHdoZXRoZXIgdGhpcyBpcyBhbiBTVkcgZWxlbWVudCwgc2luY2UgaXRzIHByb3BlcnRpZXMgYXJlIHJldHJpZXZlZCBhbmQgdXBkYXRlZCBkaWZmZXJlbnRseSB0aGFuIHN0YW5kYXJkIEhUTUwgZWxlbWVudHMuICovXHJcblx0XHRcdFx0XHRpc1NWRzogVHlwZS5pc1NWRyhlbGVtZW50KSxcclxuXHRcdFx0XHRcdC8qIEtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGUgZWxlbWVudCBpcyBjdXJyZW50bHkgYmVpbmcgYW5pbWF0ZWQgYnkgVmVsb2NpdHkuXHJcblx0XHRcdFx0XHQgVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IHByb3BlcnR5IHZhbHVlcyBhcmUgbm90IHRyYW5zZmVycmVkIGJldHdlZW4gbm9uLWNvbnNlY3V0aXZlIChzdGFsZSkgY2FsbHMuICovXHJcblx0XHRcdFx0XHRpc0FuaW1hdGluZzogZmFsc2UsXHJcblx0XHRcdFx0XHQvKiBBIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCdzIGxpdmUgY29tcHV0ZWRTdHlsZSBvYmplY3QuIExlYXJuIG1vcmUgaGVyZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvQVBJL3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlICovXHJcblx0XHRcdFx0XHRjb21wdXRlZFN0eWxlOiBudWxsLFxyXG5cdFx0XHRcdFx0LyogVHdlZW4gZGF0YSBpcyBjYWNoZWQgZm9yIGVhY2ggYW5pbWF0aW9uIG9uIHRoZSBlbGVtZW50IHNvIHRoYXQgZGF0YSBjYW4gYmUgcGFzc2VkIGFjcm9zcyBjYWxscyAtLVxyXG5cdFx0XHRcdFx0IGluIHBhcnRpY3VsYXIsIGVuZCB2YWx1ZXMgYXJlIHVzZWQgYXMgc3Vic2VxdWVudCBzdGFydCB2YWx1ZXMgaW4gY29uc2VjdXRpdmUgVmVsb2NpdHkgY2FsbHMuICovXHJcblx0XHRcdFx0XHR0d2VlbnNDb250YWluZXI6IG51bGwsXHJcblx0XHRcdFx0XHQvKiBUaGUgZnVsbCByb290IHByb3BlcnR5IHZhbHVlcyBvZiBlYWNoIENTUyBob29rIGJlaW5nIGFuaW1hdGVkIG9uIHRoaXMgZWxlbWVudCBhcmUgY2FjaGVkIHNvIHRoYXQ6XHJcblx0XHRcdFx0XHQgMSkgQ29uY3VycmVudGx5LWFuaW1hdGluZyBob29rcyBzaGFyaW5nIHRoZSBzYW1lIHJvb3QgY2FuIGhhdmUgdGhlaXIgcm9vdCB2YWx1ZXMnIG1lcmdlZCBpbnRvIG9uZSB3aGlsZSB0d2VlbmluZy5cclxuXHRcdFx0XHRcdCAyKSBQb3N0LWhvb2staW5qZWN0aW9uIHJvb3QgdmFsdWVzIGNhbiBiZSB0cmFuc2ZlcnJlZCBvdmVyIHRvIGNvbnNlY3V0aXZlbHkgY2hhaW5lZCBWZWxvY2l0eSBjYWxscyBhcyBzdGFydGluZyByb290IHZhbHVlcy4gKi9cclxuXHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGU6IHt9LFxyXG5cdFx0XHRcdFx0LyogQSBjYWNoZSBmb3IgdHJhbnNmb3JtIHVwZGF0ZXMsIHdoaWNoIG11c3QgYmUgbWFudWFsbHkgZmx1c2hlZCB2aWEgQ1NTLmZsdXNoVHJhbnNmb3JtQ2FjaGUoKS4gKi9cclxuXHRcdFx0XHRcdHRyYW5zZm9ybUNhY2hlOiB7fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKiBBIHBhcmFsbGVsIHRvIGpRdWVyeSdzICQuY3NzKCksIHVzZWQgZm9yIGdldHRpbmcvc2V0dGluZyBWZWxvY2l0eSdzIGhvb2tlZCBDU1MgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0aG9vazogbnVsbCwgLyogRGVmaW5lZCBiZWxvdy4gKi9cclxuXHRcdFx0LyogVmVsb2NpdHktd2lkZSBhbmltYXRpb24gdGltZSByZW1hcHBpbmcgZm9yIHRlc3RpbmcgcHVycG9zZXMuICovXHJcblx0XHRcdG1vY2s6IGZhbHNlLFxyXG5cdFx0XHR2ZXJzaW9uOiB7bWFqb3I6IDEsIG1pbm9yOiA1LCBwYXRjaDogMn0sXHJcblx0XHRcdC8qIFNldCB0byAxIG9yIDIgKG1vc3QgdmVyYm9zZSkgdG8gb3V0cHV0IGRlYnVnIGluZm8gdG8gY29uc29sZS4gKi9cclxuXHRcdFx0ZGVidWc6IGZhbHNlLFxyXG5cdFx0XHQvKiBVc2UgckFGIGhpZ2ggcmVzb2x1dGlvbiB0aW1lc3RhbXAgd2hlbiBhdmFpbGFibGUgKi9cclxuXHRcdFx0dGltZXN0YW1wOiB0cnVlLFxyXG5cdFx0XHQvKiBQYXVzZSBhbGwgYW5pbWF0aW9ucyAqL1xyXG5cdFx0XHRwYXVzZUFsbDogZnVuY3Rpb24ocXVldWVOYW1lKSB7XHJcblx0XHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcclxuXHJcblx0XHRcdFx0JC5lYWNoKFZlbG9jaXR5LlN0YXRlLmNhbGxzLCBmdW5jdGlvbihpLCBhY3RpdmVDYWxsKSB7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGFjdGl2ZUNhbGwpIHtcclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHdlIGhhdmUgYSBxdWV1ZU5hbWUgYW5kIHRoaXMgY2FsbCBpcyBub3Qgb24gdGhhdCBxdWV1ZSwgc2tpcCAqL1xyXG5cdFx0XHRcdFx0XHRpZiAocXVldWVOYW1lICE9PSB1bmRlZmluZWQgJiYgKChhY3RpdmVDYWxsWzJdLnF1ZXVlICE9PSBxdWV1ZU5hbWUpIHx8IChhY3RpdmVDYWxsWzJdLnF1ZXVlID09PSBmYWxzZSkpKSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIFNldCBjYWxsIHRvIHBhdXNlZCAqL1xyXG5cdFx0XHRcdFx0XHRhY3RpdmVDYWxsWzVdID0ge1xyXG5cdFx0XHRcdFx0XHRcdHJlc3VtZTogZmFsc2VcclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0LyogUGF1c2UgdGltZXJzIG9uIGFueSBjdXJyZW50bHkgZGVsYXllZCBjYWxscyAqL1xyXG5cdFx0XHRcdCQuZWFjaChWZWxvY2l0eS5TdGF0ZS5kZWxheWVkRWxlbWVudHMsIGZ1bmN0aW9uKGssIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdGlmICghZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRwYXVzZURlbGF5T25FbGVtZW50KGVsZW1lbnQsIGN1cnJlbnRUaW1lKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0LyogUmVzdW1lIGFsbCBhbmltYXRpb25zICovXHJcblx0XHRcdHJlc3VtZUFsbDogZnVuY3Rpb24ocXVldWVOYW1lKSB7XHJcblx0XHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcclxuXHJcblx0XHRcdFx0JC5lYWNoKFZlbG9jaXR5LlN0YXRlLmNhbGxzLCBmdW5jdGlvbihpLCBhY3RpdmVDYWxsKSB7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGFjdGl2ZUNhbGwpIHtcclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHdlIGhhdmUgYSBxdWV1ZU5hbWUgYW5kIHRoaXMgY2FsbCBpcyBub3Qgb24gdGhhdCBxdWV1ZSwgc2tpcCAqL1xyXG5cdFx0XHRcdFx0XHRpZiAocXVldWVOYW1lICE9PSB1bmRlZmluZWQgJiYgKChhY3RpdmVDYWxsWzJdLnF1ZXVlICE9PSBxdWV1ZU5hbWUpIHx8IChhY3RpdmVDYWxsWzJdLnF1ZXVlID09PSBmYWxzZSkpKSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIFNldCBjYWxsIHRvIHJlc3VtZWQgaWYgaXQgd2FzIHBhdXNlZCAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoYWN0aXZlQ2FsbFs1XSkge1xyXG5cdFx0XHRcdFx0XHRcdGFjdGl2ZUNhbGxbNV0ucmVzdW1lID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdC8qIFJlc3VtZSB0aW1lcnMgb24gYW55IGN1cnJlbnRseSBkZWxheWVkIGNhbGxzICovXHJcblx0XHRcdFx0JC5lYWNoKFZlbG9jaXR5LlN0YXRlLmRlbGF5ZWRFbGVtZW50cywgZnVuY3Rpb24oaywgZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0aWYgKCFlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJlc3VtZURlbGF5T25FbGVtZW50KGVsZW1lbnQsIGN1cnJlbnRUaW1lKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHJcblx0XHQvKiBSZXRyaWV2ZSB0aGUgYXBwcm9wcmlhdGUgc2Nyb2xsIGFuY2hvciBhbmQgcHJvcGVydHkgbmFtZSBmb3IgdGhlIGJyb3dzZXI6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cuc2Nyb2xsWSAqL1xyXG5cdFx0aWYgKHdpbmRvdy5wYWdlWU9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFZlbG9jaXR5LlN0YXRlLnNjcm9sbEFuY2hvciA9IHdpbmRvdztcclxuXHRcdFx0VmVsb2NpdHkuU3RhdGUuc2Nyb2xsUHJvcGVydHlMZWZ0ID0gXCJwYWdlWE9mZnNldFwiO1xyXG5cdFx0XHRWZWxvY2l0eS5TdGF0ZS5zY3JvbGxQcm9wZXJ0eVRvcCA9IFwicGFnZVlPZmZzZXRcIjtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdFZlbG9jaXR5LlN0YXRlLnNjcm9sbEFuY2hvciA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUgfHwgZG9jdW1lbnQuYm9keTtcclxuXHRcdFx0VmVsb2NpdHkuU3RhdGUuc2Nyb2xsUHJvcGVydHlMZWZ0ID0gXCJzY3JvbGxMZWZ0XCI7XHJcblx0XHRcdFZlbG9jaXR5LlN0YXRlLnNjcm9sbFByb3BlcnR5VG9wID0gXCJzY3JvbGxUb3BcIjtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTaG9ydGhhbmQgYWxpYXMgZm9yIGpRdWVyeSdzICQuZGF0YSgpIHV0aWxpdHkuICovXHJcblx0XHRmdW5jdGlvbiBEYXRhKGVsZW1lbnQpIHtcclxuXHRcdFx0LyogSGFyZGNvZGUgYSByZWZlcmVuY2UgdG8gdGhlIHBsdWdpbiBuYW1lLiAqL1xyXG5cdFx0XHR2YXIgcmVzcG9uc2UgPSAkLmRhdGEoZWxlbWVudCwgXCJ2ZWxvY2l0eVwiKTtcclxuXHJcblx0XHRcdC8qIGpRdWVyeSA8PTEuNC4yIHJldHVybnMgbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZCB3aGVuIG5vIG1hdGNoIGlzIGZvdW5kLiBXZSBub3JtYWxpemUgdGhpcyBiZWhhdmlvci4gKi9cclxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlID09PSBudWxsID8gdW5kZWZpbmVkIDogcmVzcG9uc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqXHJcblx0XHQgRGVsYXkgVGltZXJcclxuXHRcdCAqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRmdW5jdGlvbiBwYXVzZURlbGF5T25FbGVtZW50KGVsZW1lbnQsIGN1cnJlbnRUaW1lKSB7XHJcblx0XHRcdC8qIENoZWNrIGZvciBhbnkgZGVsYXkgdGltZXJzLCBhbmQgcGF1c2UgdGhlIHNldCB0aW1lb3V0cyAod2hpbGUgcHJlc2VydmluZyB0aW1lIGRhdGEpXHJcblx0XHRcdCB0byBiZSByZXN1bWVkIHdoZW4gdGhlIFwicmVzdW1lXCIgY29tbWFuZCBpcyBpc3N1ZWQgKi9cclxuXHRcdFx0dmFyIGRhdGEgPSBEYXRhKGVsZW1lbnQpO1xyXG5cdFx0XHRpZiAoZGF0YSAmJiBkYXRhLmRlbGF5VGltZXIgJiYgIWRhdGEuZGVsYXlQYXVzZWQpIHtcclxuXHRcdFx0XHRkYXRhLmRlbGF5UmVtYWluaW5nID0gZGF0YS5kZWxheSAtIGN1cnJlbnRUaW1lICsgZGF0YS5kZWxheUJlZ2luO1xyXG5cdFx0XHRcdGRhdGEuZGVsYXlQYXVzZWQgPSB0cnVlO1xyXG5cdFx0XHRcdGNsZWFyVGltZW91dChkYXRhLmRlbGF5VGltZXIuc2V0VGltZW91dCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRmdW5jdGlvbiByZXN1bWVEZWxheU9uRWxlbWVudChlbGVtZW50LCBjdXJyZW50VGltZSkge1xyXG5cdFx0XHQvKiBDaGVjayBmb3IgYW55IHBhdXNlZCB0aW1lcnMgYW5kIHJlc3VtZSAqL1xyXG5cdFx0XHR2YXIgZGF0YSA9IERhdGEoZWxlbWVudCk7XHJcblx0XHRcdGlmIChkYXRhICYmIGRhdGEuZGVsYXlUaW1lciAmJiBkYXRhLmRlbGF5UGF1c2VkKSB7XHJcblx0XHRcdFx0LyogSWYgdGhlIGVsZW1lbnQgd2FzIG1pZC1kZWxheSwgcmUgaW5pdGlhdGUgdGhlIHRpbWVvdXQgd2l0aCB0aGUgcmVtYWluaW5nIGRlbGF5ICovXHJcblx0XHRcdFx0ZGF0YS5kZWxheVBhdXNlZCA9IGZhbHNlO1xyXG5cdFx0XHRcdGRhdGEuZGVsYXlUaW1lci5zZXRUaW1lb3V0ID0gc2V0VGltZW91dChkYXRhLmRlbGF5VGltZXIubmV4dCwgZGF0YS5kZWxheVJlbWFpbmluZyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblxyXG5cclxuXHRcdC8qKioqKioqKioqKioqKlxyXG5cdFx0IEVhc2luZ1xyXG5cdFx0ICoqKioqKioqKioqKioqL1xyXG5cclxuXHRcdC8qIFN0ZXAgZWFzaW5nIGdlbmVyYXRvci4gKi9cclxuXHRcdGZ1bmN0aW9uIGdlbmVyYXRlU3RlcChzdGVwcykge1xyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24ocCkge1xyXG5cdFx0XHRcdHJldHVybiBNYXRoLnJvdW5kKHAgKiBzdGVwcykgKiAoMSAvIHN0ZXBzKTtcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBCZXppZXIgY3VydmUgZnVuY3Rpb24gZ2VuZXJhdG9yLiBDb3B5cmlnaHQgR2FldGFuIFJlbmF1ZGVhdS4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKi9cclxuXHRcdGZ1bmN0aW9uIGdlbmVyYXRlQmV6aWVyKG1YMSwgbVkxLCBtWDIsIG1ZMikge1xyXG5cdFx0XHR2YXIgTkVXVE9OX0lURVJBVElPTlMgPSA0LFxyXG5cdFx0XHRcdFx0TkVXVE9OX01JTl9TTE9QRSA9IDAuMDAxLFxyXG5cdFx0XHRcdFx0U1VCRElWSVNJT05fUFJFQ0lTSU9OID0gMC4wMDAwMDAxLFxyXG5cdFx0XHRcdFx0U1VCRElWSVNJT05fTUFYX0lURVJBVElPTlMgPSAxMCxcclxuXHRcdFx0XHRcdGtTcGxpbmVUYWJsZVNpemUgPSAxMSxcclxuXHRcdFx0XHRcdGtTYW1wbGVTdGVwU2l6ZSA9IDEuMCAvIChrU3BsaW5lVGFibGVTaXplIC0gMS4wKSxcclxuXHRcdFx0XHRcdGZsb2F0MzJBcnJheVN1cHBvcnRlZCA9IFwiRmxvYXQzMkFycmF5XCIgaW4gd2luZG93O1xyXG5cclxuXHRcdFx0LyogTXVzdCBjb250YWluIGZvdXIgYXJndW1lbnRzLiAqL1xyXG5cdFx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gNCkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogQXJndW1lbnRzIG11c3QgYmUgbnVtYmVycy4gKi9cclxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCA0OyArK2kpIHtcclxuXHRcdFx0XHRpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSAhPT0gXCJudW1iZXJcIiB8fCBpc05hTihhcmd1bWVudHNbaV0pIHx8ICFpc0Zpbml0ZShhcmd1bWVudHNbaV0pKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBYIHZhbHVlcyBtdXN0IGJlIGluIHRoZSBbMCwgMV0gcmFuZ2UuICovXHJcblx0XHRcdG1YMSA9IE1hdGgubWluKG1YMSwgMSk7XHJcblx0XHRcdG1YMiA9IE1hdGgubWluKG1YMiwgMSk7XHJcblx0XHRcdG1YMSA9IE1hdGgubWF4KG1YMSwgMCk7XHJcblx0XHRcdG1YMiA9IE1hdGgubWF4KG1YMiwgMCk7XHJcblxyXG5cdFx0XHR2YXIgbVNhbXBsZVZhbHVlcyA9IGZsb2F0MzJBcnJheVN1cHBvcnRlZCA/IG5ldyBGbG9hdDMyQXJyYXkoa1NwbGluZVRhYmxlU2l6ZSkgOiBuZXcgQXJyYXkoa1NwbGluZVRhYmxlU2l6ZSk7XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBBKGFBMSwgYUEyKSB7XHJcblx0XHRcdFx0cmV0dXJuIDEuMCAtIDMuMCAqIGFBMiArIDMuMCAqIGFBMTtcclxuXHRcdFx0fVxyXG5cdFx0XHRmdW5jdGlvbiBCKGFBMSwgYUEyKSB7XHJcblx0XHRcdFx0cmV0dXJuIDMuMCAqIGFBMiAtIDYuMCAqIGFBMTtcclxuXHRcdFx0fVxyXG5cdFx0XHRmdW5jdGlvbiBDKGFBMSkge1xyXG5cdFx0XHRcdHJldHVybiAzLjAgKiBhQTE7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIGNhbGNCZXppZXIoYVQsIGFBMSwgYUEyKSB7XHJcblx0XHRcdFx0cmV0dXJuICgoQShhQTEsIGFBMikgKiBhVCArIEIoYUExLCBhQTIpKSAqIGFUICsgQyhhQTEpKSAqIGFUO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmdW5jdGlvbiBnZXRTbG9wZShhVCwgYUExLCBhQTIpIHtcclxuXHRcdFx0XHRyZXR1cm4gMy4wICogQShhQTEsIGFBMikgKiBhVCAqIGFUICsgMi4wICogQihhQTEsIGFBMikgKiBhVCArIEMoYUExKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZnVuY3Rpb24gbmV3dG9uUmFwaHNvbkl0ZXJhdGUoYVgsIGFHdWVzc1QpIHtcclxuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IE5FV1RPTl9JVEVSQVRJT05TOyArK2kpIHtcclxuXHRcdFx0XHRcdHZhciBjdXJyZW50U2xvcGUgPSBnZXRTbG9wZShhR3Vlc3NULCBtWDEsIG1YMik7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRTbG9wZSA9PT0gMC4wKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBhR3Vlc3NUO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHZhciBjdXJyZW50WCA9IGNhbGNCZXppZXIoYUd1ZXNzVCwgbVgxLCBtWDIpIC0gYVg7XHJcblx0XHRcdFx0XHRhR3Vlc3NUIC09IGN1cnJlbnRYIC8gY3VycmVudFNsb3BlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIGFHdWVzc1Q7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIGNhbGNTYW1wbGVWYWx1ZXMoKSB7XHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrU3BsaW5lVGFibGVTaXplOyArK2kpIHtcclxuXHRcdFx0XHRcdG1TYW1wbGVWYWx1ZXNbaV0gPSBjYWxjQmV6aWVyKGkgKiBrU2FtcGxlU3RlcFNpemUsIG1YMSwgbVgyKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIGJpbmFyeVN1YmRpdmlkZShhWCwgYUEsIGFCKSB7XHJcblx0XHRcdFx0dmFyIGN1cnJlbnRYLCBjdXJyZW50VCwgaSA9IDA7XHJcblxyXG5cdFx0XHRcdGRvIHtcclxuXHRcdFx0XHRcdGN1cnJlbnRUID0gYUEgKyAoYUIgLSBhQSkgLyAyLjA7XHJcblx0XHRcdFx0XHRjdXJyZW50WCA9IGNhbGNCZXppZXIoY3VycmVudFQsIG1YMSwgbVgyKSAtIGFYO1xyXG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRYID4gMC4wKSB7XHJcblx0XHRcdFx0XHRcdGFCID0gY3VycmVudFQ7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRhQSA9IGN1cnJlbnRUO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gd2hpbGUgKE1hdGguYWJzKGN1cnJlbnRYKSA+IFNVQkRJVklTSU9OX1BSRUNJU0lPTiAmJiArK2kgPCBTVUJESVZJU0lPTl9NQVhfSVRFUkFUSU9OUyk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBjdXJyZW50VDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZnVuY3Rpb24gZ2V0VEZvclgoYVgpIHtcclxuXHRcdFx0XHR2YXIgaW50ZXJ2YWxTdGFydCA9IDAuMCxcclxuXHRcdFx0XHRcdFx0Y3VycmVudFNhbXBsZSA9IDEsXHJcblx0XHRcdFx0XHRcdGxhc3RTYW1wbGUgPSBrU3BsaW5lVGFibGVTaXplIC0gMTtcclxuXHJcblx0XHRcdFx0Zm9yICg7IGN1cnJlbnRTYW1wbGUgIT09IGxhc3RTYW1wbGUgJiYgbVNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlXSA8PSBhWDsgKytjdXJyZW50U2FtcGxlKSB7XHJcblx0XHRcdFx0XHRpbnRlcnZhbFN0YXJ0ICs9IGtTYW1wbGVTdGVwU2l6ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC0tY3VycmVudFNhbXBsZTtcclxuXHJcblx0XHRcdFx0dmFyIGRpc3QgPSAoYVggLSBtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdKSAvIChtU2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGUgKyAxXSAtIG1TYW1wbGVWYWx1ZXNbY3VycmVudFNhbXBsZV0pLFxyXG5cdFx0XHRcdFx0XHRndWVzc0ZvclQgPSBpbnRlcnZhbFN0YXJ0ICsgZGlzdCAqIGtTYW1wbGVTdGVwU2l6ZSxcclxuXHRcdFx0XHRcdFx0aW5pdGlhbFNsb3BlID0gZ2V0U2xvcGUoZ3Vlc3NGb3JULCBtWDEsIG1YMik7XHJcblxyXG5cdFx0XHRcdGlmIChpbml0aWFsU2xvcGUgPj0gTkVXVE9OX01JTl9TTE9QRSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG5ld3RvblJhcGhzb25JdGVyYXRlKGFYLCBndWVzc0ZvclQpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoaW5pdGlhbFNsb3BlID09PSAwLjApIHtcclxuXHRcdFx0XHRcdHJldHVybiBndWVzc0ZvclQ7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHJldHVybiBiaW5hcnlTdWJkaXZpZGUoYVgsIGludGVydmFsU3RhcnQsIGludGVydmFsU3RhcnQgKyBrU2FtcGxlU3RlcFNpemUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIF9wcmVjb21wdXRlZCA9IGZhbHNlO1xyXG5cclxuXHRcdFx0ZnVuY3Rpb24gcHJlY29tcHV0ZSgpIHtcclxuXHRcdFx0XHRfcHJlY29tcHV0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdGlmIChtWDEgIT09IG1ZMSB8fCBtWDIgIT09IG1ZMikge1xyXG5cdFx0XHRcdFx0Y2FsY1NhbXBsZVZhbHVlcygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIGYgPSBmdW5jdGlvbihhWCkge1xyXG5cdFx0XHRcdGlmICghX3ByZWNvbXB1dGVkKSB7XHJcblx0XHRcdFx0XHRwcmVjb21wdXRlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChtWDEgPT09IG1ZMSAmJiBtWDIgPT09IG1ZMikge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGFYO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYVggPT09IDApIHtcclxuXHRcdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYVggPT09IDEpIHtcclxuXHRcdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIGNhbGNCZXppZXIoZ2V0VEZvclgoYVgpLCBtWTEsIG1ZMik7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRmLmdldENvbnRyb2xQb2ludHMgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gW3t4OiBtWDEsIHk6IG1ZMX0sIHt4OiBtWDIsIHk6IG1ZMn1dO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0dmFyIHN0ciA9IFwiZ2VuZXJhdGVCZXppZXIoXCIgKyBbbVgxLCBtWTEsIG1YMiwgbVkyXSArIFwiKVwiO1xyXG5cdFx0XHRmLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIHN0cjtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdHJldHVybiBmO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFJ1bmdlLUt1dHRhIHNwcmluZyBwaHlzaWNzIGZ1bmN0aW9uIGdlbmVyYXRvci4gQWRhcHRlZCBmcm9tIEZyYW1lci5qcywgY29weXJpZ2h0IEtvZW4gQm9rLiBNSVQgTGljZW5zZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSAqL1xyXG5cdFx0LyogR2l2ZW4gYSB0ZW5zaW9uLCBmcmljdGlvbiwgYW5kIGR1cmF0aW9uLCBhIHNpbXVsYXRpb24gYXQgNjBGUFMgd2lsbCBmaXJzdCBydW4gd2l0aG91dCBhIGRlZmluZWQgZHVyYXRpb24gaW4gb3JkZXIgdG8gY2FsY3VsYXRlIHRoZSBmdWxsIHBhdGguIEEgc2Vjb25kIHBhc3NcclxuXHRcdCB0aGVuIGFkanVzdHMgdGhlIHRpbWUgZGVsdGEgLS0gdXNpbmcgdGhlIHJlbGF0aW9uIGJldHdlZW4gYWN0dWFsIHRpbWUgYW5kIGR1cmF0aW9uIC0tIHRvIGNhbGN1bGF0ZSB0aGUgcGF0aCBmb3IgdGhlIGR1cmF0aW9uLWNvbnN0cmFpbmVkIGFuaW1hdGlvbi4gKi9cclxuXHRcdHZhciBnZW5lcmF0ZVNwcmluZ1JLNCA9IChmdW5jdGlvbigpIHtcclxuXHRcdFx0ZnVuY3Rpb24gc3ByaW5nQWNjZWxlcmF0aW9uRm9yU3RhdGUoc3RhdGUpIHtcclxuXHRcdFx0XHRyZXR1cm4gKC1zdGF0ZS50ZW5zaW9uICogc3RhdGUueCkgLSAoc3RhdGUuZnJpY3Rpb24gKiBzdGF0ZS52KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZnVuY3Rpb24gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKGluaXRpYWxTdGF0ZSwgZHQsIGRlcml2YXRpdmUpIHtcclxuXHRcdFx0XHR2YXIgc3RhdGUgPSB7XHJcblx0XHRcdFx0XHR4OiBpbml0aWFsU3RhdGUueCArIGRlcml2YXRpdmUuZHggKiBkdCxcclxuXHRcdFx0XHRcdHY6IGluaXRpYWxTdGF0ZS52ICsgZGVyaXZhdGl2ZS5kdiAqIGR0LFxyXG5cdFx0XHRcdFx0dGVuc2lvbjogaW5pdGlhbFN0YXRlLnRlbnNpb24sXHJcblx0XHRcdFx0XHRmcmljdGlvbjogaW5pdGlhbFN0YXRlLmZyaWN0aW9uXHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHtkeDogc3RhdGUudiwgZHY6IHNwcmluZ0FjY2VsZXJhdGlvbkZvclN0YXRlKHN0YXRlKX07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZ1bmN0aW9uIHNwcmluZ0ludGVncmF0ZVN0YXRlKHN0YXRlLCBkdCkge1xyXG5cdFx0XHRcdHZhciBhID0ge1xyXG5cdFx0XHRcdFx0ZHg6IHN0YXRlLnYsXHJcblx0XHRcdFx0XHRkdjogc3ByaW5nQWNjZWxlcmF0aW9uRm9yU3RhdGUoc3RhdGUpXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0YiA9IHNwcmluZ0V2YWx1YXRlU3RhdGVXaXRoRGVyaXZhdGl2ZShzdGF0ZSwgZHQgKiAwLjUsIGEpLFxyXG5cdFx0XHRcdFx0XHRjID0gc3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlKHN0YXRlLCBkdCAqIDAuNSwgYiksXHJcblx0XHRcdFx0XHRcdGQgPSBzcHJpbmdFdmFsdWF0ZVN0YXRlV2l0aERlcml2YXRpdmUoc3RhdGUsIGR0LCBjKSxcclxuXHRcdFx0XHRcdFx0ZHhkdCA9IDEuMCAvIDYuMCAqIChhLmR4ICsgMi4wICogKGIuZHggKyBjLmR4KSArIGQuZHgpLFxyXG5cdFx0XHRcdFx0XHRkdmR0ID0gMS4wIC8gNi4wICogKGEuZHYgKyAyLjAgKiAoYi5kdiArIGMuZHYpICsgZC5kdik7XHJcblxyXG5cdFx0XHRcdHN0YXRlLnggPSBzdGF0ZS54ICsgZHhkdCAqIGR0O1xyXG5cdFx0XHRcdHN0YXRlLnYgPSBzdGF0ZS52ICsgZHZkdCAqIGR0O1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gc3RhdGU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBmdW5jdGlvbiBzcHJpbmdSSzRGYWN0b3J5KHRlbnNpb24sIGZyaWN0aW9uLCBkdXJhdGlvbikge1xyXG5cclxuXHRcdFx0XHR2YXIgaW5pdFN0YXRlID0ge1xyXG5cdFx0XHRcdFx0eDogLTEsXHJcblx0XHRcdFx0XHR2OiAwLFxyXG5cdFx0XHRcdFx0dGVuc2lvbjogbnVsbCxcclxuXHRcdFx0XHRcdGZyaWN0aW9uOiBudWxsXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0cGF0aCA9IFswXSxcclxuXHRcdFx0XHRcdFx0dGltZV9sYXBzZWQgPSAwLFxyXG5cdFx0XHRcdFx0XHR0b2xlcmFuY2UgPSAxIC8gMTAwMDAsXHJcblx0XHRcdFx0XHRcdERUID0gMTYgLyAxMDAwLFxyXG5cdFx0XHRcdFx0XHRoYXZlX2R1cmF0aW9uLCBkdCwgbGFzdF9zdGF0ZTtcclxuXHJcblx0XHRcdFx0dGVuc2lvbiA9IHBhcnNlRmxvYXQodGVuc2lvbikgfHwgNTAwO1xyXG5cdFx0XHRcdGZyaWN0aW9uID0gcGFyc2VGbG9hdChmcmljdGlvbikgfHwgMjA7XHJcblx0XHRcdFx0ZHVyYXRpb24gPSBkdXJhdGlvbiB8fCBudWxsO1xyXG5cclxuXHRcdFx0XHRpbml0U3RhdGUudGVuc2lvbiA9IHRlbnNpb247XHJcblx0XHRcdFx0aW5pdFN0YXRlLmZyaWN0aW9uID0gZnJpY3Rpb247XHJcblxyXG5cdFx0XHRcdGhhdmVfZHVyYXRpb24gPSBkdXJhdGlvbiAhPT0gbnVsbDtcclxuXHJcblx0XHRcdFx0LyogQ2FsY3VsYXRlIHRoZSBhY3R1YWwgdGltZSBpdCB0YWtlcyBmb3IgdGhpcyBhbmltYXRpb24gdG8gY29tcGxldGUgd2l0aCB0aGUgcHJvdmlkZWQgY29uZGl0aW9ucy4gKi9cclxuXHRcdFx0XHRpZiAoaGF2ZV9kdXJhdGlvbikge1xyXG5cdFx0XHRcdFx0LyogUnVuIHRoZSBzaW11bGF0aW9uIHdpdGhvdXQgYSBkdXJhdGlvbi4gKi9cclxuXHRcdFx0XHRcdHRpbWVfbGFwc2VkID0gc3ByaW5nUks0RmFjdG9yeSh0ZW5zaW9uLCBmcmljdGlvbik7XHJcblx0XHRcdFx0XHQvKiBDb21wdXRlIHRoZSBhZGp1c3RlZCB0aW1lIGRlbHRhLiAqL1xyXG5cdFx0XHRcdFx0ZHQgPSB0aW1lX2xhcHNlZCAvIGR1cmF0aW9uICogRFQ7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGR0ID0gRFQ7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR3aGlsZSAodHJ1ZSkge1xyXG5cdFx0XHRcdFx0LyogTmV4dC9zdGVwIGZ1bmN0aW9uIC4qL1xyXG5cdFx0XHRcdFx0bGFzdF9zdGF0ZSA9IHNwcmluZ0ludGVncmF0ZVN0YXRlKGxhc3Rfc3RhdGUgfHwgaW5pdFN0YXRlLCBkdCk7XHJcblx0XHRcdFx0XHQvKiBTdG9yZSB0aGUgcG9zaXRpb24uICovXHJcblx0XHRcdFx0XHRwYXRoLnB1c2goMSArIGxhc3Rfc3RhdGUueCk7XHJcblx0XHRcdFx0XHR0aW1lX2xhcHNlZCArPSAxNjtcclxuXHRcdFx0XHRcdC8qIElmIHRoZSBjaGFuZ2UgdGhyZXNob2xkIGlzIHJlYWNoZWQsIGJyZWFrLiAqL1xyXG5cdFx0XHRcdFx0aWYgKCEoTWF0aC5hYnMobGFzdF9zdGF0ZS54KSA+IHRvbGVyYW5jZSAmJiBNYXRoLmFicyhsYXN0X3N0YXRlLnYpID4gdG9sZXJhbmNlKSkge1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIElmIGR1cmF0aW9uIGlzIG5vdCBkZWZpbmVkLCByZXR1cm4gdGhlIGFjdHVhbCB0aW1lIHJlcXVpcmVkIGZvciBjb21wbGV0aW5nIHRoaXMgYW5pbWF0aW9uLiBPdGhlcndpc2UsIHJldHVybiBhIGNsb3N1cmUgdGhhdCBob2xkcyB0aGVcclxuXHRcdFx0XHQgY29tcHV0ZWQgcGF0aCBhbmQgcmV0dXJucyBhIHNuYXBzaG90IG9mIHRoZSBwb3NpdGlvbiBhY2NvcmRpbmcgdG8gYSBnaXZlbiBwZXJjZW50Q29tcGxldGUuICovXHJcblx0XHRcdFx0cmV0dXJuICFoYXZlX2R1cmF0aW9uID8gdGltZV9sYXBzZWQgOiBmdW5jdGlvbihwZXJjZW50Q29tcGxldGUpIHtcclxuXHRcdFx0XHRcdHJldHVybiBwYXRoWyAocGVyY2VudENvbXBsZXRlICogKHBhdGgubGVuZ3RoIC0gMSkpIHwgMCBdO1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH07XHJcblx0XHR9KCkpO1xyXG5cclxuXHRcdC8qIGpRdWVyeSBlYXNpbmdzLiAqL1xyXG5cdFx0VmVsb2NpdHkuRWFzaW5ncyA9IHtcclxuXHRcdFx0bGluZWFyOiBmdW5jdGlvbihwKSB7XHJcblx0XHRcdFx0cmV0dXJuIHA7XHJcblx0XHRcdH0sXHJcblx0XHRcdHN3aW5nOiBmdW5jdGlvbihwKSB7XHJcblx0XHRcdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKHAgKiBNYXRoLlBJKSAvIDI7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8qIEJvbnVzIFwic3ByaW5nXCIgZWFzaW5nLCB3aGljaCBpcyBhIGxlc3MgZXhhZ2dlcmF0ZWQgdmVyc2lvbiBvZiBlYXNlSW5PdXRFbGFzdGljLiAqL1xyXG5cdFx0XHRzcHJpbmc6IGZ1bmN0aW9uKHApIHtcclxuXHRcdFx0XHRyZXR1cm4gMSAtIChNYXRoLmNvcyhwICogNC41ICogTWF0aC5QSSkgKiBNYXRoLmV4cCgtcCAqIDYpKTtcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHJcblx0XHQvKiBDU1MzIGFuZCBSb2JlcnQgUGVubmVyIGVhc2luZ3MuICovXHJcblx0XHQkLmVhY2goXHJcblx0XHRcdFx0W1xyXG5cdFx0XHRcdFx0W1wiZWFzZVwiLCBbMC4yNSwgMC4xLCAwLjI1LCAxLjBdXSxcclxuXHRcdFx0XHRcdFtcImVhc2UtaW5cIiwgWzAuNDIsIDAuMCwgMS4wMCwgMS4wXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlLW91dFwiLCBbMC4wMCwgMC4wLCAwLjU4LCAxLjBdXSxcclxuXHRcdFx0XHRcdFtcImVhc2UtaW4tb3V0XCIsIFswLjQyLCAwLjAsIDAuNTgsIDEuMF1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluU2luZVwiLCBbMC40NywgMCwgMC43NDUsIDAuNzE1XV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlT3V0U2luZVwiLCBbMC4zOSwgMC41NzUsIDAuNTY1LCAxXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlSW5PdXRTaW5lXCIsIFswLjQ0NSwgMC4wNSwgMC41NSwgMC45NV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluUXVhZFwiLCBbMC41NSwgMC4wODUsIDAuNjgsIDAuNTNdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VPdXRRdWFkXCIsIFswLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0XV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlSW5PdXRRdWFkXCIsIFswLjQ1NSwgMC4wMywgMC41MTUsIDAuOTU1XV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlSW5DdWJpY1wiLCBbMC41NSwgMC4wNTUsIDAuNjc1LCAwLjE5XV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlT3V0Q3ViaWNcIiwgWzAuMjE1LCAwLjYxLCAwLjM1NSwgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluT3V0Q3ViaWNcIiwgWzAuNjQ1LCAwLjA0NSwgMC4zNTUsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJblF1YXJ0XCIsIFswLjg5NSwgMC4wMywgMC42ODUsIDAuMjJdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VPdXRRdWFydFwiLCBbMC4xNjUsIDAuODQsIDAuNDQsIDFdXSxcclxuXHRcdFx0XHRcdFtcImVhc2VJbk91dFF1YXJ0XCIsIFswLjc3LCAwLCAwLjE3NSwgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluUXVpbnRcIiwgWzAuNzU1LCAwLjA1LCAwLjg1NSwgMC4wNl1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZU91dFF1aW50XCIsIFswLjIzLCAxLCAwLjMyLCAxXV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlSW5PdXRRdWludFwiLCBbMC44NiwgMCwgMC4wNywgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluRXhwb1wiLCBbMC45NSwgMC4wNSwgMC43OTUsIDAuMDM1XV0sXHJcblx0XHRcdFx0XHRbXCJlYXNlT3V0RXhwb1wiLCBbMC4xOSwgMSwgMC4yMiwgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluT3V0RXhwb1wiLCBbMSwgMCwgMCwgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluQ2lyY1wiLCBbMC42LCAwLjA0LCAwLjk4LCAwLjMzNV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZU91dENpcmNcIiwgWzAuMDc1LCAwLjgyLCAwLjE2NSwgMV1dLFxyXG5cdFx0XHRcdFx0W1wiZWFzZUluT3V0Q2lyY1wiLCBbMC43ODUsIDAuMTM1LCAwLjE1LCAwLjg2XV1cclxuXHRcdFx0XHRdLCBmdW5jdGlvbihpLCBlYXNpbmdBcnJheSkge1xyXG5cdFx0XHRWZWxvY2l0eS5FYXNpbmdzW2Vhc2luZ0FycmF5WzBdXSA9IGdlbmVyYXRlQmV6aWVyLmFwcGx5KG51bGwsIGVhc2luZ0FycmF5WzFdKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIERldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgZWFzaW5nIHR5cGUgZ2l2ZW4gYW4gZWFzaW5nIGlucHV0LiAqL1xyXG5cdFx0ZnVuY3Rpb24gZ2V0RWFzaW5nKHZhbHVlLCBkdXJhdGlvbikge1xyXG5cdFx0XHR2YXIgZWFzaW5nID0gdmFsdWU7XHJcblxyXG5cdFx0XHQvKiBUaGUgZWFzaW5nIG9wdGlvbiBjYW4gZWl0aGVyIGJlIGEgc3RyaW5nIHRoYXQgcmVmZXJlbmNlcyBhIHByZS1yZWdpc3RlcmVkIGVhc2luZyxcclxuXHRcdFx0IG9yIGl0IGNhbiBiZSBhIHR3by0vZm91ci1pdGVtIGFycmF5IG9mIGludGVnZXJzIHRvIGJlIGNvbnZlcnRlZCBpbnRvIGEgYmV6aWVyL3NwcmluZyBmdW5jdGlvbi4gKi9cclxuXHRcdFx0aWYgKFR5cGUuaXNTdHJpbmcodmFsdWUpKSB7XHJcblx0XHRcdFx0LyogRW5zdXJlIHRoYXQgdGhlIGVhc2luZyBoYXMgYmVlbiBhc3NpZ25lZCB0byBqUXVlcnkncyBWZWxvY2l0eS5FYXNpbmdzIG9iamVjdC4gKi9cclxuXHRcdFx0XHRpZiAoIVZlbG9jaXR5LkVhc2luZ3NbdmFsdWVdKSB7XHJcblx0XHRcdFx0XHRlYXNpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSBpZiAoVHlwZS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDEpIHtcclxuXHRcdFx0XHRlYXNpbmcgPSBnZW5lcmF0ZVN0ZXAuYXBwbHkobnVsbCwgdmFsdWUpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKFR5cGUuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAyKSB7XHJcblx0XHRcdFx0Lyogc3ByaW5nUks0IG11c3QgYmUgcGFzc2VkIHRoZSBhbmltYXRpb24ncyBkdXJhdGlvbi4gKi9cclxuXHRcdFx0XHQvKiBOb3RlOiBJZiB0aGUgc3ByaW5nUks0IGFycmF5IGNvbnRhaW5zIG5vbi1udW1iZXJzLCBnZW5lcmF0ZVNwcmluZ1JLNCgpIHJldHVybnMgYW4gZWFzaW5nXHJcblx0XHRcdFx0IGZ1bmN0aW9uIGdlbmVyYXRlZCB3aXRoIGRlZmF1bHQgdGVuc2lvbiBhbmQgZnJpY3Rpb24gdmFsdWVzLiAqL1xyXG5cdFx0XHRcdGVhc2luZyA9IGdlbmVyYXRlU3ByaW5nUks0LmFwcGx5KG51bGwsIHZhbHVlLmNvbmNhdChbZHVyYXRpb25dKSk7XHJcblx0XHRcdH0gZWxzZSBpZiAoVHlwZS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDQpIHtcclxuXHRcdFx0XHQvKiBOb3RlOiBJZiB0aGUgYmV6aWVyIGFycmF5IGNvbnRhaW5zIG5vbi1udW1iZXJzLCBnZW5lcmF0ZUJlemllcigpIHJldHVybnMgZmFsc2UuICovXHJcblx0XHRcdFx0ZWFzaW5nID0gZ2VuZXJhdGVCZXppZXIuYXBwbHkobnVsbCwgdmFsdWUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGVhc2luZyA9IGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBSZXZlcnQgdG8gdGhlIFZlbG9jaXR5LXdpZGUgZGVmYXVsdCBlYXNpbmcgdHlwZSwgb3IgZmFsbCBiYWNrIHRvIFwic3dpbmdcIiAod2hpY2ggaXMgYWxzbyBqUXVlcnkncyBkZWZhdWx0KVxyXG5cdFx0XHQgaWYgdGhlIFZlbG9jaXR5LXdpZGUgZGVmYXVsdCBoYXMgYmVlbiBpbmNvcnJlY3RseSBtb2RpZmllZC4gKi9cclxuXHRcdFx0aWYgKGVhc2luZyA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRpZiAoVmVsb2NpdHkuRWFzaW5nc1tWZWxvY2l0eS5kZWZhdWx0cy5lYXNpbmddKSB7XHJcblx0XHRcdFx0XHRlYXNpbmcgPSBWZWxvY2l0eS5kZWZhdWx0cy5lYXNpbmc7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGVhc2luZyA9IEVBU0lOR19ERUZBVUxUO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGVhc2luZztcclxuXHRcdH1cclxuXHJcblx0XHQvKioqKioqKioqKioqKioqKipcclxuXHRcdCBDU1MgU3RhY2tcclxuXHRcdCAqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHQvKiBUaGUgQ1NTIG9iamVjdCBpcyBhIGhpZ2hseSBjb25kZW5zZWQgYW5kIHBlcmZvcm1hbnQgQ1NTIHN0YWNrIHRoYXQgZnVsbHkgcmVwbGFjZXMgalF1ZXJ5J3MuXHJcblx0XHQgSXQgaGFuZGxlcyB0aGUgdmFsaWRhdGlvbiwgZ2V0dGluZywgYW5kIHNldHRpbmcgb2YgYm90aCBzdGFuZGFyZCBDU1MgcHJvcGVydGllcyBhbmQgQ1NTIHByb3BlcnR5IGhvb2tzLiAqL1xyXG5cdFx0LyogTm90ZTogQSBcIkNTU1wiIHNob3J0aGFuZCBpcyBhbGlhc2VkIHNvIHRoYXQgb3VyIGNvZGUgaXMgZWFzaWVyIHRvIHJlYWQuICovXHJcblx0XHR2YXIgQ1NTID0gVmVsb2NpdHkuQ1NTID0ge1xyXG5cdFx0XHQvKioqKioqKioqKioqKlxyXG5cdFx0XHQgUmVnRXhcclxuXHRcdFx0ICoqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRSZWdFeDoge1xyXG5cdFx0XHRcdGlzSGV4OiAvXiMoW0EtZlxcZF17M30pezEsMn0kL2ksXHJcblx0XHRcdFx0LyogVW53cmFwIGEgcHJvcGVydHkgdmFsdWUncyBzdXJyb3VuZGluZyB0ZXh0LCBlLmcuIFwicmdiYSg0LCAzLCAyLCAxKVwiID09PiBcIjQsIDMsIDIsIDFcIiBhbmQgXCJyZWN0KDRweCAzcHggMnB4IDFweClcIiA9PT4gXCI0cHggM3B4IDJweCAxcHhcIi4gKi9cclxuXHRcdFx0XHR2YWx1ZVVud3JhcDogL15bQS16XStcXCgoLiopXFwpJC9pLFxyXG5cdFx0XHRcdHdyYXBwZWRWYWx1ZUFscmVhZHlFeHRyYWN0ZWQ6IC9bMC05Ll0rIFswLTkuXSsgWzAtOS5dKyggWzAtOS5dKyk/LyxcclxuXHRcdFx0XHQvKiBTcGxpdCBhIG11bHRpLXZhbHVlIHByb3BlcnR5IGludG8gYW4gYXJyYXkgb2Ygc3VidmFsdWVzLCBlLmcuIFwicmdiYSg0LCAzLCAyLCAxKSA0cHggM3B4IDJweCAxcHhcIiA9PT4gWyBcInJnYmEoNCwgMywgMiwgMSlcIiwgXCI0cHhcIiwgXCIzcHhcIiwgXCIycHhcIiwgXCIxcHhcIiBdLiAqL1xyXG5cdFx0XHRcdHZhbHVlU3BsaXQ6IC8oW0Etel0rXFwoLitcXCkpfCgoW0EtejAtOSMtLl0rPykoPz1cXHN8JCkpL2lnXHJcblx0XHRcdH0sXHJcblx0XHRcdC8qKioqKioqKioqKipcclxuXHRcdFx0IExpc3RzXHJcblx0XHRcdCAqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRMaXN0czoge1xyXG5cdFx0XHRcdGNvbG9yczogW1wiZmlsbFwiLCBcInN0cm9rZVwiLCBcInN0b3BDb2xvclwiLCBcImNvbG9yXCIsIFwiYmFja2dyb3VuZENvbG9yXCIsIFwiYm9yZGVyQ29sb3JcIiwgXCJib3JkZXJUb3BDb2xvclwiLCBcImJvcmRlclJpZ2h0Q29sb3JcIiwgXCJib3JkZXJCb3R0b21Db2xvclwiLCBcImJvcmRlckxlZnRDb2xvclwiLCBcIm91dGxpbmVDb2xvclwiXSxcclxuXHRcdFx0XHR0cmFuc2Zvcm1zQmFzZTogW1widHJhbnNsYXRlWFwiLCBcInRyYW5zbGF0ZVlcIiwgXCJzY2FsZVwiLCBcInNjYWxlWFwiLCBcInNjYWxlWVwiLCBcInNrZXdYXCIsIFwic2tld1lcIiwgXCJyb3RhdGVaXCJdLFxyXG5cdFx0XHRcdHRyYW5zZm9ybXMzRDogW1widHJhbnNmb3JtUGVyc3BlY3RpdmVcIiwgXCJ0cmFuc2xhdGVaXCIsIFwic2NhbGVaXCIsIFwicm90YXRlWFwiLCBcInJvdGF0ZVlcIl0sXHJcblx0XHRcdFx0dW5pdHM6IFtcclxuXHRcdFx0XHRcdFwiJVwiLCAvLyByZWxhdGl2ZVxyXG5cdFx0XHRcdFx0XCJlbVwiLCBcImV4XCIsIFwiY2hcIiwgXCJyZW1cIiwgLy8gZm9udCByZWxhdGl2ZVxyXG5cdFx0XHRcdFx0XCJ2d1wiLCBcInZoXCIsIFwidm1pblwiLCBcInZtYXhcIiwgLy8gdmlld3BvcnQgcmVsYXRpdmVcclxuXHRcdFx0XHRcdFwiY21cIiwgXCJtbVwiLCBcIlFcIiwgXCJpblwiLCBcInBjXCIsIFwicHRcIiwgXCJweFwiLCAvLyBhYnNvbHV0ZSBsZW5ndGhzXHJcblx0XHRcdFx0XHRcImRlZ1wiLCBcImdyYWRcIiwgXCJyYWRcIiwgXCJ0dXJuXCIsIC8vIGFuZ2xlc1xyXG5cdFx0XHRcdFx0XCJzXCIsIFwibXNcIiAvLyB0aW1lXHJcblx0XHRcdFx0XSxcclxuXHRcdFx0XHRjb2xvck5hbWVzOiB7XHJcblx0XHRcdFx0XHRcImFsaWNlYmx1ZVwiOiBcIjI0MCwyNDgsMjU1XCIsXHJcblx0XHRcdFx0XHRcImFudGlxdWV3aGl0ZVwiOiBcIjI1MCwyMzUsMjE1XCIsXHJcblx0XHRcdFx0XHRcImFxdWFtYXJpbmVcIjogXCIxMjcsMjU1LDIxMlwiLFxyXG5cdFx0XHRcdFx0XCJhcXVhXCI6IFwiMCwyNTUsMjU1XCIsXHJcblx0XHRcdFx0XHRcImF6dXJlXCI6IFwiMjQwLDI1NSwyNTVcIixcclxuXHRcdFx0XHRcdFwiYmVpZ2VcIjogXCIyNDUsMjQ1LDIyMFwiLFxyXG5cdFx0XHRcdFx0XCJiaXNxdWVcIjogXCIyNTUsMjI4LDE5NlwiLFxyXG5cdFx0XHRcdFx0XCJibGFja1wiOiBcIjAsMCwwXCIsXHJcblx0XHRcdFx0XHRcImJsYW5jaGVkYWxtb25kXCI6IFwiMjU1LDIzNSwyMDVcIixcclxuXHRcdFx0XHRcdFwiYmx1ZXZpb2xldFwiOiBcIjEzOCw0MywyMjZcIixcclxuXHRcdFx0XHRcdFwiYmx1ZVwiOiBcIjAsMCwyNTVcIixcclxuXHRcdFx0XHRcdFwiYnJvd25cIjogXCIxNjUsNDIsNDJcIixcclxuXHRcdFx0XHRcdFwiYnVybHl3b29kXCI6IFwiMjIyLDE4NCwxMzVcIixcclxuXHRcdFx0XHRcdFwiY2FkZXRibHVlXCI6IFwiOTUsMTU4LDE2MFwiLFxyXG5cdFx0XHRcdFx0XCJjaGFydHJldXNlXCI6IFwiMTI3LDI1NSwwXCIsXHJcblx0XHRcdFx0XHRcImNob2NvbGF0ZVwiOiBcIjIxMCwxMDUsMzBcIixcclxuXHRcdFx0XHRcdFwiY29yYWxcIjogXCIyNTUsMTI3LDgwXCIsXHJcblx0XHRcdFx0XHRcImNvcm5mbG93ZXJibHVlXCI6IFwiMTAwLDE0OSwyMzdcIixcclxuXHRcdFx0XHRcdFwiY29ybnNpbGtcIjogXCIyNTUsMjQ4LDIyMFwiLFxyXG5cdFx0XHRcdFx0XCJjcmltc29uXCI6IFwiMjIwLDIwLDYwXCIsXHJcblx0XHRcdFx0XHRcImN5YW5cIjogXCIwLDI1NSwyNTVcIixcclxuXHRcdFx0XHRcdFwiZGFya2JsdWVcIjogXCIwLDAsMTM5XCIsXHJcblx0XHRcdFx0XHRcImRhcmtjeWFuXCI6IFwiMCwxMzksMTM5XCIsXHJcblx0XHRcdFx0XHRcImRhcmtnb2xkZW5yb2RcIjogXCIxODQsMTM0LDExXCIsXHJcblx0XHRcdFx0XHRcImRhcmtncmF5XCI6IFwiMTY5LDE2OSwxNjlcIixcclxuXHRcdFx0XHRcdFwiZGFya2dyZXlcIjogXCIxNjksMTY5LDE2OVwiLFxyXG5cdFx0XHRcdFx0XCJkYXJrZ3JlZW5cIjogXCIwLDEwMCwwXCIsXHJcblx0XHRcdFx0XHRcImRhcmtraGFraVwiOiBcIjE4OSwxODMsMTA3XCIsXHJcblx0XHRcdFx0XHRcImRhcmttYWdlbnRhXCI6IFwiMTM5LDAsMTM5XCIsXHJcblx0XHRcdFx0XHRcImRhcmtvbGl2ZWdyZWVuXCI6IFwiODUsMTA3LDQ3XCIsXHJcblx0XHRcdFx0XHRcImRhcmtvcmFuZ2VcIjogXCIyNTUsMTQwLDBcIixcclxuXHRcdFx0XHRcdFwiZGFya29yY2hpZFwiOiBcIjE1Myw1MCwyMDRcIixcclxuXHRcdFx0XHRcdFwiZGFya3JlZFwiOiBcIjEzOSwwLDBcIixcclxuXHRcdFx0XHRcdFwiZGFya3NhbG1vblwiOiBcIjIzMywxNTAsMTIyXCIsXHJcblx0XHRcdFx0XHRcImRhcmtzZWFncmVlblwiOiBcIjE0MywxODgsMTQzXCIsXHJcblx0XHRcdFx0XHRcImRhcmtzbGF0ZWJsdWVcIjogXCI3Miw2MSwxMzlcIixcclxuXHRcdFx0XHRcdFwiZGFya3NsYXRlZ3JheVwiOiBcIjQ3LDc5LDc5XCIsXHJcblx0XHRcdFx0XHRcImRhcmt0dXJxdW9pc2VcIjogXCIwLDIwNiwyMDlcIixcclxuXHRcdFx0XHRcdFwiZGFya3Zpb2xldFwiOiBcIjE0OCwwLDIxMVwiLFxyXG5cdFx0XHRcdFx0XCJkZWVwcGlua1wiOiBcIjI1NSwyMCwxNDdcIixcclxuXHRcdFx0XHRcdFwiZGVlcHNreWJsdWVcIjogXCIwLDE5MSwyNTVcIixcclxuXHRcdFx0XHRcdFwiZGltZ3JheVwiOiBcIjEwNSwxMDUsMTA1XCIsXHJcblx0XHRcdFx0XHRcImRpbWdyZXlcIjogXCIxMDUsMTA1LDEwNVwiLFxyXG5cdFx0XHRcdFx0XCJkb2RnZXJibHVlXCI6IFwiMzAsMTQ0LDI1NVwiLFxyXG5cdFx0XHRcdFx0XCJmaXJlYnJpY2tcIjogXCIxNzgsMzQsMzRcIixcclxuXHRcdFx0XHRcdFwiZmxvcmFsd2hpdGVcIjogXCIyNTUsMjUwLDI0MFwiLFxyXG5cdFx0XHRcdFx0XCJmb3Jlc3RncmVlblwiOiBcIjM0LDEzOSwzNFwiLFxyXG5cdFx0XHRcdFx0XCJmdWNoc2lhXCI6IFwiMjU1LDAsMjU1XCIsXHJcblx0XHRcdFx0XHRcImdhaW5zYm9yb1wiOiBcIjIyMCwyMjAsMjIwXCIsXHJcblx0XHRcdFx0XHRcImdob3N0d2hpdGVcIjogXCIyNDgsMjQ4LDI1NVwiLFxyXG5cdFx0XHRcdFx0XCJnb2xkXCI6IFwiMjU1LDIxNSwwXCIsXHJcblx0XHRcdFx0XHRcImdvbGRlbnJvZFwiOiBcIjIxOCwxNjUsMzJcIixcclxuXHRcdFx0XHRcdFwiZ3JheVwiOiBcIjEyOCwxMjgsMTI4XCIsXHJcblx0XHRcdFx0XHRcImdyZXlcIjogXCIxMjgsMTI4LDEyOFwiLFxyXG5cdFx0XHRcdFx0XCJncmVlbnllbGxvd1wiOiBcIjE3MywyNTUsNDdcIixcclxuXHRcdFx0XHRcdFwiZ3JlZW5cIjogXCIwLDEyOCwwXCIsXHJcblx0XHRcdFx0XHRcImhvbmV5ZGV3XCI6IFwiMjQwLDI1NSwyNDBcIixcclxuXHRcdFx0XHRcdFwiaG90cGlua1wiOiBcIjI1NSwxMDUsMTgwXCIsXHJcblx0XHRcdFx0XHRcImluZGlhbnJlZFwiOiBcIjIwNSw5Miw5MlwiLFxyXG5cdFx0XHRcdFx0XCJpbmRpZ29cIjogXCI3NSwwLDEzMFwiLFxyXG5cdFx0XHRcdFx0XCJpdm9yeVwiOiBcIjI1NSwyNTUsMjQwXCIsXHJcblx0XHRcdFx0XHRcImtoYWtpXCI6IFwiMjQwLDIzMCwxNDBcIixcclxuXHRcdFx0XHRcdFwibGF2ZW5kZXJibHVzaFwiOiBcIjI1NSwyNDAsMjQ1XCIsXHJcblx0XHRcdFx0XHRcImxhdmVuZGVyXCI6IFwiMjMwLDIzMCwyNTBcIixcclxuXHRcdFx0XHRcdFwibGF3bmdyZWVuXCI6IFwiMTI0LDI1MiwwXCIsXHJcblx0XHRcdFx0XHRcImxlbW9uY2hpZmZvblwiOiBcIjI1NSwyNTAsMjA1XCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0Ymx1ZVwiOiBcIjE3MywyMTYsMjMwXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0Y29yYWxcIjogXCIyNDAsMTI4LDEyOFwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodGN5YW5cIjogXCIyMjQsMjU1LDI1NVwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodGdvbGRlbnJvZHllbGxvd1wiOiBcIjI1MCwyNTAsMjEwXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0Z3JheVwiOiBcIjIxMSwyMTEsMjExXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0Z3JleVwiOiBcIjIxMSwyMTEsMjExXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0Z3JlZW5cIjogXCIxNDQsMjM4LDE0NFwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodHBpbmtcIjogXCIyNTUsMTgyLDE5M1wiLFxyXG5cdFx0XHRcdFx0XCJsaWdodHNhbG1vblwiOiBcIjI1NSwxNjAsMTIyXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0c2VhZ3JlZW5cIjogXCIzMiwxNzgsMTcwXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0c2t5Ymx1ZVwiOiBcIjEzNSwyMDYsMjUwXCIsXHJcblx0XHRcdFx0XHRcImxpZ2h0c2xhdGVncmF5XCI6IFwiMTE5LDEzNiwxNTNcIixcclxuXHRcdFx0XHRcdFwibGlnaHRzdGVlbGJsdWVcIjogXCIxNzYsMTk2LDIyMlwiLFxyXG5cdFx0XHRcdFx0XCJsaWdodHllbGxvd1wiOiBcIjI1NSwyNTUsMjI0XCIsXHJcblx0XHRcdFx0XHRcImxpbWVncmVlblwiOiBcIjUwLDIwNSw1MFwiLFxyXG5cdFx0XHRcdFx0XCJsaW1lXCI6IFwiMCwyNTUsMFwiLFxyXG5cdFx0XHRcdFx0XCJsaW5lblwiOiBcIjI1MCwyNDAsMjMwXCIsXHJcblx0XHRcdFx0XHRcIm1hZ2VudGFcIjogXCIyNTUsMCwyNTVcIixcclxuXHRcdFx0XHRcdFwibWFyb29uXCI6IFwiMTI4LDAsMFwiLFxyXG5cdFx0XHRcdFx0XCJtZWRpdW1hcXVhbWFyaW5lXCI6IFwiMTAyLDIwNSwxNzBcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtYmx1ZVwiOiBcIjAsMCwyMDVcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtb3JjaGlkXCI6IFwiMTg2LDg1LDIxMVwiLFxyXG5cdFx0XHRcdFx0XCJtZWRpdW1wdXJwbGVcIjogXCIxNDcsMTEyLDIxOVwiLFxyXG5cdFx0XHRcdFx0XCJtZWRpdW1zZWFncmVlblwiOiBcIjYwLDE3OSwxMTNcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtc2xhdGVibHVlXCI6IFwiMTIzLDEwNCwyMzhcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtc3ByaW5nZ3JlZW5cIjogXCIwLDI1MCwxNTRcIixcclxuXHRcdFx0XHRcdFwibWVkaXVtdHVycXVvaXNlXCI6IFwiNzIsMjA5LDIwNFwiLFxyXG5cdFx0XHRcdFx0XCJtZWRpdW12aW9sZXRyZWRcIjogXCIxOTksMjEsMTMzXCIsXHJcblx0XHRcdFx0XHRcIm1pZG5pZ2h0Ymx1ZVwiOiBcIjI1LDI1LDExMlwiLFxyXG5cdFx0XHRcdFx0XCJtaW50Y3JlYW1cIjogXCIyNDUsMjU1LDI1MFwiLFxyXG5cdFx0XHRcdFx0XCJtaXN0eXJvc2VcIjogXCIyNTUsMjI4LDIyNVwiLFxyXG5cdFx0XHRcdFx0XCJtb2NjYXNpblwiOiBcIjI1NSwyMjgsMTgxXCIsXHJcblx0XHRcdFx0XHRcIm5hdmFqb3doaXRlXCI6IFwiMjU1LDIyMiwxNzNcIixcclxuXHRcdFx0XHRcdFwibmF2eVwiOiBcIjAsMCwxMjhcIixcclxuXHRcdFx0XHRcdFwib2xkbGFjZVwiOiBcIjI1MywyNDUsMjMwXCIsXHJcblx0XHRcdFx0XHRcIm9saXZlZHJhYlwiOiBcIjEwNywxNDIsMzVcIixcclxuXHRcdFx0XHRcdFwib2xpdmVcIjogXCIxMjgsMTI4LDBcIixcclxuXHRcdFx0XHRcdFwib3JhbmdlcmVkXCI6IFwiMjU1LDY5LDBcIixcclxuXHRcdFx0XHRcdFwib3JhbmdlXCI6IFwiMjU1LDE2NSwwXCIsXHJcblx0XHRcdFx0XHRcIm9yY2hpZFwiOiBcIjIxOCwxMTIsMjE0XCIsXHJcblx0XHRcdFx0XHRcInBhbGVnb2xkZW5yb2RcIjogXCIyMzgsMjMyLDE3MFwiLFxyXG5cdFx0XHRcdFx0XCJwYWxlZ3JlZW5cIjogXCIxNTIsMjUxLDE1MlwiLFxyXG5cdFx0XHRcdFx0XCJwYWxldHVycXVvaXNlXCI6IFwiMTc1LDIzOCwyMzhcIixcclxuXHRcdFx0XHRcdFwicGFsZXZpb2xldHJlZFwiOiBcIjIxOSwxMTIsMTQ3XCIsXHJcblx0XHRcdFx0XHRcInBhcGF5YXdoaXBcIjogXCIyNTUsMjM5LDIxM1wiLFxyXG5cdFx0XHRcdFx0XCJwZWFjaHB1ZmZcIjogXCIyNTUsMjE4LDE4NVwiLFxyXG5cdFx0XHRcdFx0XCJwZXJ1XCI6IFwiMjA1LDEzMyw2M1wiLFxyXG5cdFx0XHRcdFx0XCJwaW5rXCI6IFwiMjU1LDE5MiwyMDNcIixcclxuXHRcdFx0XHRcdFwicGx1bVwiOiBcIjIyMSwxNjAsMjIxXCIsXHJcblx0XHRcdFx0XHRcInBvd2RlcmJsdWVcIjogXCIxNzYsMjI0LDIzMFwiLFxyXG5cdFx0XHRcdFx0XCJwdXJwbGVcIjogXCIxMjgsMCwxMjhcIixcclxuXHRcdFx0XHRcdFwicmVkXCI6IFwiMjU1LDAsMFwiLFxyXG5cdFx0XHRcdFx0XCJyb3N5YnJvd25cIjogXCIxODgsMTQzLDE0M1wiLFxyXG5cdFx0XHRcdFx0XCJyb3lhbGJsdWVcIjogXCI2NSwxMDUsMjI1XCIsXHJcblx0XHRcdFx0XHRcInNhZGRsZWJyb3duXCI6IFwiMTM5LDY5LDE5XCIsXHJcblx0XHRcdFx0XHRcInNhbG1vblwiOiBcIjI1MCwxMjgsMTE0XCIsXHJcblx0XHRcdFx0XHRcInNhbmR5YnJvd25cIjogXCIyNDQsMTY0LDk2XCIsXHJcblx0XHRcdFx0XHRcInNlYWdyZWVuXCI6IFwiNDYsMTM5LDg3XCIsXHJcblx0XHRcdFx0XHRcInNlYXNoZWxsXCI6IFwiMjU1LDI0NSwyMzhcIixcclxuXHRcdFx0XHRcdFwic2llbm5hXCI6IFwiMTYwLDgyLDQ1XCIsXHJcblx0XHRcdFx0XHRcInNpbHZlclwiOiBcIjE5MiwxOTIsMTkyXCIsXHJcblx0XHRcdFx0XHRcInNreWJsdWVcIjogXCIxMzUsMjA2LDIzNVwiLFxyXG5cdFx0XHRcdFx0XCJzbGF0ZWJsdWVcIjogXCIxMDYsOTAsMjA1XCIsXHJcblx0XHRcdFx0XHRcInNsYXRlZ3JheVwiOiBcIjExMiwxMjgsMTQ0XCIsXHJcblx0XHRcdFx0XHRcInNub3dcIjogXCIyNTUsMjUwLDI1MFwiLFxyXG5cdFx0XHRcdFx0XCJzcHJpbmdncmVlblwiOiBcIjAsMjU1LDEyN1wiLFxyXG5cdFx0XHRcdFx0XCJzdGVlbGJsdWVcIjogXCI3MCwxMzAsMTgwXCIsXHJcblx0XHRcdFx0XHRcInRhblwiOiBcIjIxMCwxODAsMTQwXCIsXHJcblx0XHRcdFx0XHRcInRlYWxcIjogXCIwLDEyOCwxMjhcIixcclxuXHRcdFx0XHRcdFwidGhpc3RsZVwiOiBcIjIxNiwxOTEsMjE2XCIsXHJcblx0XHRcdFx0XHRcInRvbWF0b1wiOiBcIjI1NSw5OSw3MVwiLFxyXG5cdFx0XHRcdFx0XCJ0dXJxdW9pc2VcIjogXCI2NCwyMjQsMjA4XCIsXHJcblx0XHRcdFx0XHRcInZpb2xldFwiOiBcIjIzOCwxMzAsMjM4XCIsXHJcblx0XHRcdFx0XHRcIndoZWF0XCI6IFwiMjQ1LDIyMiwxNzlcIixcclxuXHRcdFx0XHRcdFwid2hpdGVzbW9rZVwiOiBcIjI0NSwyNDUsMjQ1XCIsXHJcblx0XHRcdFx0XHRcIndoaXRlXCI6IFwiMjU1LDI1NSwyNTVcIixcclxuXHRcdFx0XHRcdFwieWVsbG93Z3JlZW5cIjogXCIxNTQsMjA1LDUwXCIsXHJcblx0XHRcdFx0XHRcInllbGxvd1wiOiBcIjI1NSwyNTUsMFwiXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKioqKioqKioqKioqXHJcblx0XHRcdCBIb29rc1xyXG5cdFx0XHQgKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogSG9va3MgYWxsb3cgYSBzdWJwcm9wZXJ0eSAoZS5nLiBcImJveFNoYWRvd0JsdXJcIikgb2YgYSBjb21wb3VuZC12YWx1ZSBDU1MgcHJvcGVydHlcclxuXHRcdFx0IChlLmcuIFwiYm94U2hhZG93OiBYIFkgQmx1ciBTcHJlYWQgQ29sb3JcIikgdG8gYmUgYW5pbWF0ZWQgYXMgaWYgaXQgd2VyZSBhIGRpc2NyZXRlIHByb3BlcnR5LiAqL1xyXG5cdFx0XHQvKiBOb3RlOiBCZXlvbmQgZW5hYmxpbmcgZmluZS1ncmFpbmVkIHByb3BlcnR5IGFuaW1hdGlvbiwgaG9va2luZyBpcyBuZWNlc3Nhcnkgc2luY2UgVmVsb2NpdHkgb25seVxyXG5cdFx0XHQgdHdlZW5zIHByb3BlcnRpZXMgd2l0aCBzaW5nbGUgbnVtZXJpYyB2YWx1ZXM7IHVubGlrZSBDU1MgdHJhbnNpdGlvbnMsIFZlbG9jaXR5IGRvZXMgbm90IGludGVycG9sYXRlIGNvbXBvdW5kLXZhbHVlcy4gKi9cclxuXHRcdFx0SG9va3M6IHtcclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgUmVnaXN0cmF0aW9uXHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBUZW1wbGF0ZXMgYXJlIGEgY29uY2lzZSB3YXkgb2YgaW5kaWNhdGluZyB3aGljaCBzdWJwcm9wZXJ0aWVzIG11c3QgYmUgaW5kaXZpZHVhbGx5IHJlZ2lzdGVyZWQgZm9yIGVhY2ggY29tcG91bmQtdmFsdWUgQ1NTIHByb3BlcnR5LiAqL1xyXG5cdFx0XHRcdC8qIEVhY2ggdGVtcGxhdGUgY29uc2lzdHMgb2YgdGhlIGNvbXBvdW5kLXZhbHVlJ3MgYmFzZSBuYW1lLCBpdHMgY29uc3RpdHVlbnQgc3VicHJvcGVydHkgbmFtZXMsIGFuZCB0aG9zZSBzdWJwcm9wZXJ0aWVzJyBkZWZhdWx0IHZhbHVlcy4gKi9cclxuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcclxuXHRcdFx0XHRcdFwidGV4dFNoYWRvd1wiOiBbXCJDb2xvciBYIFkgQmx1clwiLCBcImJsYWNrIDBweCAwcHggMHB4XCJdLFxyXG5cdFx0XHRcdFx0XCJib3hTaGFkb3dcIjogW1wiQ29sb3IgWCBZIEJsdXIgU3ByZWFkXCIsIFwiYmxhY2sgMHB4IDBweCAwcHggMHB4XCJdLFxyXG5cdFx0XHRcdFx0XCJjbGlwXCI6IFtcIlRvcCBSaWdodCBCb3R0b20gTGVmdFwiLCBcIjBweCAwcHggMHB4IDBweFwiXSxcclxuXHRcdFx0XHRcdFwiYmFja2dyb3VuZFBvc2l0aW9uXCI6IFtcIlggWVwiLCBcIjAlIDAlXCJdLFxyXG5cdFx0XHRcdFx0XCJ0cmFuc2Zvcm1PcmlnaW5cIjogW1wiWCBZIFpcIiwgXCI1MCUgNTAlIDBweFwiXSxcclxuXHRcdFx0XHRcdFwicGVyc3BlY3RpdmVPcmlnaW5cIjogW1wiWCBZXCIsIFwiNTAlIDUwJVwiXVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyogQSBcInJlZ2lzdGVyZWRcIiBob29rIGlzIG9uZSB0aGF0IGhhcyBiZWVuIGNvbnZlcnRlZCBmcm9tIGl0cyB0ZW1wbGF0ZSBmb3JtIGludG8gYSBsaXZlLFxyXG5cdFx0XHRcdCB0d2VlbmFibGUgcHJvcGVydHkuIEl0IGNvbnRhaW5zIGRhdGEgdG8gYXNzb2NpYXRlIGl0IHdpdGggaXRzIHJvb3QgcHJvcGVydHkuICovXHJcblx0XHRcdFx0cmVnaXN0ZXJlZDoge1xyXG5cdFx0XHRcdFx0LyogTm90ZTogQSByZWdpc3RlcmVkIGhvb2sgbG9va3MgbGlrZSB0aGlzID09PiB0ZXh0U2hhZG93Qmx1cjogWyBcInRleHRTaGFkb3dcIiwgMyBdLFxyXG5cdFx0XHRcdFx0IHdoaWNoIGNvbnNpc3RzIG9mIHRoZSBzdWJwcm9wZXJ0eSdzIG5hbWUsIHRoZSBhc3NvY2lhdGVkIHJvb3QgcHJvcGVydHkncyBuYW1lLFxyXG5cdFx0XHRcdFx0IGFuZCB0aGUgc3VicHJvcGVydHkncyBwb3NpdGlvbiBpbiB0aGUgcm9vdCdzIHZhbHVlLiAqL1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyogQ29udmVydCB0aGUgdGVtcGxhdGVzIGludG8gaW5kaXZpZHVhbCBob29rcyB0aGVuIGFwcGVuZCB0aGVtIHRvIHRoZSByZWdpc3RlcmVkIG9iamVjdCBhYm92ZS4gKi9cclxuXHRcdFx0XHRyZWdpc3RlcjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHQvKiBDb2xvciBob29rcyByZWdpc3RyYXRpb246IENvbG9ycyBhcmUgZGVmYXVsdGVkIHRvIHdoaXRlIC0tIGFzIG9wcG9zZWQgdG8gYmxhY2sgLS0gc2luY2UgY29sb3JzIHRoYXQgYXJlXHJcblx0XHRcdFx0XHQgY3VycmVudGx5IHNldCB0byBcInRyYW5zcGFyZW50XCIgZGVmYXVsdCB0byB0aGVpciByZXNwZWN0aXZlIHRlbXBsYXRlIGJlbG93IHdoZW4gY29sb3ItYW5pbWF0ZWQsXHJcblx0XHRcdFx0XHQgYW5kIHdoaXRlIGlzIHR5cGljYWxseSBhIGNsb3NlciBtYXRjaCB0byB0cmFuc3BhcmVudCB0aGFuIGJsYWNrIGlzLiBBbiBleGNlcHRpb24gaXMgbWFkZSBmb3IgdGV4dCAoXCJjb2xvclwiKSxcclxuXHRcdFx0XHRcdCB3aGljaCBpcyBhbG1vc3QgYWx3YXlzIHNldCBjbG9zZXIgdG8gYmxhY2sgdGhhbiB3aGl0ZS4gKi9cclxuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgQ1NTLkxpc3RzLmNvbG9ycy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHR2YXIgcmdiQ29tcG9uZW50cyA9IChDU1MuTGlzdHMuY29sb3JzW2ldID09PSBcImNvbG9yXCIpID8gXCIwIDAgMCAxXCIgOiBcIjI1NSAyNTUgMjU1IDFcIjtcclxuXHRcdFx0XHRcdFx0Q1NTLkhvb2tzLnRlbXBsYXRlc1tDU1MuTGlzdHMuY29sb3JzW2ldXSA9IFtcIlJlZCBHcmVlbiBCbHVlIEFscGhhXCIsIHJnYkNvbXBvbmVudHNdO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHZhciByb290UHJvcGVydHksXHJcblx0XHRcdFx0XHRcdFx0aG9va1RlbXBsYXRlLFxyXG5cdFx0XHRcdFx0XHRcdGhvb2tOYW1lcztcclxuXHJcblx0XHRcdFx0XHQvKiBJbiBJRSwgY29sb3IgdmFsdWVzIGluc2lkZSBjb21wb3VuZC12YWx1ZSBwcm9wZXJ0aWVzIGFyZSBwb3NpdGlvbmVkIGF0IHRoZSBlbmQgdGhlIHZhbHVlIGluc3RlYWQgb2YgYXQgdGhlIGJlZ2lubmluZy5cclxuXHRcdFx0XHRcdCBUaHVzLCB3ZSByZS1hcnJhbmdlIHRoZSB0ZW1wbGF0ZXMgYWNjb3JkaW5nbHkuICovXHJcblx0XHRcdFx0XHRpZiAoSUUpIHtcclxuXHRcdFx0XHRcdFx0Zm9yIChyb290UHJvcGVydHkgaW4gQ1NTLkhvb2tzLnRlbXBsYXRlcykge1xyXG5cdFx0XHRcdFx0XHRcdGlmICghQ1NTLkhvb2tzLnRlbXBsYXRlcy5oYXNPd25Qcm9wZXJ0eShyb290UHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aG9va1RlbXBsYXRlID0gQ1NTLkhvb2tzLnRlbXBsYXRlc1tyb290UHJvcGVydHldO1xyXG5cdFx0XHRcdFx0XHRcdGhvb2tOYW1lcyA9IGhvb2tUZW1wbGF0ZVswXS5zcGxpdChcIiBcIik7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHZhciBkZWZhdWx0VmFsdWVzID0gaG9va1RlbXBsYXRlWzFdLm1hdGNoKENTUy5SZWdFeC52YWx1ZVNwbGl0KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKGhvb2tOYW1lc1swXSA9PT0gXCJDb2xvclwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBSZXBvc2l0aW9uIGJvdGggdGhlIGhvb2sncyBuYW1lIGFuZCBpdHMgZGVmYXVsdCB2YWx1ZSB0byB0aGUgZW5kIG9mIHRoZWlyIHJlc3BlY3RpdmUgc3RyaW5ncy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGhvb2tOYW1lcy5wdXNoKGhvb2tOYW1lcy5zaGlmdCgpKTtcclxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZXMucHVzaChkZWZhdWx0VmFsdWVzLnNoaWZ0KCkpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFJlcGxhY2UgdGhlIGV4aXN0aW5nIHRlbXBsYXRlIGZvciB0aGUgaG9vaydzIHJvb3QgcHJvcGVydHkuICovXHJcblx0XHRcdFx0XHRcdFx0XHRDU1MuSG9va3MudGVtcGxhdGVzW3Jvb3RQcm9wZXJ0eV0gPSBbaG9va05hbWVzLmpvaW4oXCIgXCIpLCBkZWZhdWx0VmFsdWVzLmpvaW4oXCIgXCIpXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBIb29rIHJlZ2lzdHJhdGlvbi4gKi9cclxuXHRcdFx0XHRcdGZvciAocm9vdFByb3BlcnR5IGluIENTUy5Ib29rcy50ZW1wbGF0ZXMpIHtcclxuXHRcdFx0XHRcdFx0aWYgKCFDU1MuSG9va3MudGVtcGxhdGVzLmhhc093blByb3BlcnR5KHJvb3RQcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRob29rVGVtcGxhdGUgPSBDU1MuSG9va3MudGVtcGxhdGVzW3Jvb3RQcm9wZXJ0eV07XHJcblx0XHRcdFx0XHRcdGhvb2tOYW1lcyA9IGhvb2tUZW1wbGF0ZVswXS5zcGxpdChcIiBcIik7XHJcblxyXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBqIGluIGhvb2tOYW1lcykge1xyXG5cdFx0XHRcdFx0XHRcdGlmICghaG9va05hbWVzLmhhc093blByb3BlcnR5KGopKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dmFyIGZ1bGxIb29rTmFtZSA9IHJvb3RQcm9wZXJ0eSArIGhvb2tOYW1lc1tqXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0aG9va1Bvc2l0aW9uID0gajtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogRm9yIGVhY2ggaG9vaywgcmVnaXN0ZXIgaXRzIGZ1bGwgbmFtZSAoZS5nLiB0ZXh0U2hhZG93Qmx1cikgd2l0aCBpdHMgcm9vdCBwcm9wZXJ0eSAoZS5nLiB0ZXh0U2hhZG93KVxyXG5cdFx0XHRcdFx0XHRcdCBhbmQgdGhlIGhvb2sncyBwb3NpdGlvbiBpbiBpdHMgdGVtcGxhdGUncyBkZWZhdWx0IHZhbHVlIHN0cmluZy4gKi9cclxuXHRcdFx0XHRcdFx0XHRDU1MuSG9va3MucmVnaXN0ZXJlZFtmdWxsSG9va05hbWVdID0gW3Jvb3RQcm9wZXJ0eSwgaG9va1Bvc2l0aW9uXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IEluamVjdGlvbiBhbmQgRXh0cmFjdGlvblxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0LyogTG9vayB1cCB0aGUgcm9vdCBwcm9wZXJ0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGhvb2sgKGUuZy4gcmV0dXJuIFwidGV4dFNoYWRvd1wiIGZvciBcInRleHRTaGFkb3dCbHVyXCIpLiAqL1xyXG5cdFx0XHRcdC8qIFNpbmNlIGEgaG9vayBjYW5ub3QgYmUgc2V0IGRpcmVjdGx5ICh0aGUgYnJvd3NlciB3b24ndCByZWNvZ25pemUgaXQpLCBzdHlsZSB1cGRhdGluZyBmb3IgaG9va3MgaXMgcm91dGVkIHRocm91Z2ggdGhlIGhvb2sncyByb290IHByb3BlcnR5LiAqL1xyXG5cdFx0XHRcdGdldFJvb3Q6IGZ1bmN0aW9uKHByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHR2YXIgaG9va0RhdGEgPSBDU1MuSG9va3MucmVnaXN0ZXJlZFtwcm9wZXJ0eV07XHJcblxyXG5cdFx0XHRcdFx0aWYgKGhvb2tEYXRhKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBob29rRGF0YVswXTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZXJlIHdhcyBubyBob29rIG1hdGNoLCByZXR1cm4gdGhlIHByb3BlcnR5IG5hbWUgdW50b3VjaGVkLiAqL1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcHJvcGVydHk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRnZXRVbml0OiBmdW5jdGlvbihzdHIsIHN0YXJ0KSB7XHJcblx0XHRcdFx0XHR2YXIgdW5pdCA9IChzdHIuc3Vic3RyKHN0YXJ0IHx8IDAsIDUpLm1hdGNoKC9eW2EteiVdKy8pIHx8IFtdKVswXSB8fCBcIlwiO1xyXG5cclxuXHRcdFx0XHRcdGlmICh1bml0ICYmIF9pbkFycmF5KENTUy5MaXN0cy51bml0cywgdW5pdCkpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHVuaXQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGZpeENvbG9yczogZnVuY3Rpb24oc3RyKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gc3RyLnJlcGxhY2UoLyhyZ2JhP1xcKFxccyopPyhcXGJbYS16XStcXGIpL2csIGZ1bmN0aW9uKCQwLCAkMSwgJDIpIHtcclxuXHRcdFx0XHRcdFx0aWYgKENTUy5MaXN0cy5jb2xvck5hbWVzLmhhc093blByb3BlcnR5KCQyKSkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiAoJDEgPyAkMSA6IFwicmdiYShcIikgKyBDU1MuTGlzdHMuY29sb3JOYW1lc1skMl0gKyAoJDEgPyBcIlwiIDogXCIsMSlcIik7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuICQxICsgJDI7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qIENvbnZlcnQgYW55IHJvb3RQcm9wZXJ0eVZhbHVlLCBudWxsIG9yIG90aGVyd2lzZSwgaW50byBhIHNwYWNlLWRlbGltaXRlZCBsaXN0IG9mIGhvb2sgdmFsdWVzIHNvIHRoYXRcclxuXHRcdFx0XHQgdGhlIHRhcmdldGVkIGhvb2sgY2FuIGJlIGluamVjdGVkIG9yIGV4dHJhY3RlZCBhdCBpdHMgc3RhbmRhcmQgcG9zaXRpb24uICovXHJcblx0XHRcdFx0Y2xlYW5Sb290UHJvcGVydHlWYWx1ZTogZnVuY3Rpb24ocm9vdFByb3BlcnR5LCByb290UHJvcGVydHlWYWx1ZSkge1xyXG5cdFx0XHRcdFx0LyogSWYgdGhlIHJvb3RQcm9wZXJ0eVZhbHVlIGlzIHdyYXBwZWQgd2l0aCBcInJnYigpXCIsIFwiY2xpcCgpXCIsIGV0Yy4sIHJlbW92ZSB0aGUgd3JhcHBpbmcgdG8gbm9ybWFsaXplIHRoZSB2YWx1ZSBiZWZvcmUgbWFuaXB1bGF0aW9uLiAqL1xyXG5cdFx0XHRcdFx0aWYgKENTUy5SZWdFeC52YWx1ZVVud3JhcC50ZXN0KHJvb3RQcm9wZXJ0eVZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZSA9IHJvb3RQcm9wZXJ0eVZhbHVlLm1hdGNoKENTUy5SZWdFeC52YWx1ZVVud3JhcClbMV07XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgcm9vdFByb3BlcnR5VmFsdWUgaXMgYSBDU1MgbnVsbC12YWx1ZSAoZnJvbSB3aGljaCB0aGVyZSdzIGluaGVyZW50bHkgbm8gaG9vayB2YWx1ZSB0byBleHRyYWN0KSxcclxuXHRcdFx0XHRcdCBkZWZhdWx0IHRvIHRoZSByb290J3MgZGVmYXVsdCB2YWx1ZSBhcyBkZWZpbmVkIGluIENTUy5Ib29rcy50ZW1wbGF0ZXMuICovXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBDU1MgbnVsbC12YWx1ZXMgaW5jbHVkZSBcIm5vbmVcIiwgXCJhdXRvXCIsIGFuZCBcInRyYW5zcGFyZW50XCIuIFRoZXkgbXVzdCBiZSBjb252ZXJ0ZWQgaW50byB0aGVpclxyXG5cdFx0XHRcdFx0IHplcm8tdmFsdWVzIChlLmcuIHRleHRTaGFkb3c6IFwibm9uZVwiID09PiB0ZXh0U2hhZG93OiBcIjBweCAwcHggMHB4IGJsYWNrXCIpIGZvciBob29rIG1hbmlwdWxhdGlvbiB0byBwcm9jZWVkLiAqL1xyXG5cdFx0XHRcdFx0aWYgKENTUy5WYWx1ZXMuaXNDU1NOdWxsVmFsdWUocm9vdFByb3BlcnR5VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gQ1NTLkhvb2tzLnRlbXBsYXRlc1tyb290UHJvcGVydHldWzFdO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHJldHVybiByb290UHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qIEV4dHJhY3RlZCB0aGUgaG9vaydzIHZhbHVlIGZyb20gaXRzIHJvb3QgcHJvcGVydHkncyB2YWx1ZS4gVGhpcyBpcyB1c2VkIHRvIGdldCB0aGUgc3RhcnRpbmcgdmFsdWUgb2YgYW4gYW5pbWF0aW5nIGhvb2suICovXHJcblx0XHRcdFx0ZXh0cmFjdFZhbHVlOiBmdW5jdGlvbihmdWxsSG9va05hbWUsIHJvb3RQcm9wZXJ0eVZhbHVlKSB7XHJcblx0XHRcdFx0XHR2YXIgaG9va0RhdGEgPSBDU1MuSG9va3MucmVnaXN0ZXJlZFtmdWxsSG9va05hbWVdO1xyXG5cclxuXHRcdFx0XHRcdGlmIChob29rRGF0YSkge1xyXG5cdFx0XHRcdFx0XHR2YXIgaG9va1Jvb3QgPSBob29rRGF0YVswXSxcclxuXHRcdFx0XHRcdFx0XHRcdGhvb2tQb3NpdGlvbiA9IGhvb2tEYXRhWzFdO1xyXG5cclxuXHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWUgPSBDU1MuSG9va3MuY2xlYW5Sb290UHJvcGVydHlWYWx1ZShob29rUm9vdCwgcm9vdFByb3BlcnR5VmFsdWUpO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogU3BsaXQgcm9vdFByb3BlcnR5VmFsdWUgaW50byBpdHMgY29uc3RpdHVlbnQgaG9vayB2YWx1ZXMgdGhlbiBncmFiIHRoZSBkZXNpcmVkIGhvb2sgYXQgaXRzIHN0YW5kYXJkIHBvc2l0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcm9vdFByb3BlcnR5VmFsdWUudG9TdHJpbmcoKS5tYXRjaChDU1MuUmVnRXgudmFsdWVTcGxpdClbaG9va1Bvc2l0aW9uXTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBwcm92aWRlZCBmdWxsSG9va05hbWUgaXNuJ3QgYSByZWdpc3RlcmVkIGhvb2ssIHJldHVybiB0aGUgcm9vdFByb3BlcnR5VmFsdWUgdGhhdCB3YXMgcGFzc2VkIGluLiAqL1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcm9vdFByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKiBJbmplY3QgdGhlIGhvb2sncyB2YWx1ZSBpbnRvIGl0cyByb290IHByb3BlcnR5J3MgdmFsdWUuIFRoaXMgaXMgdXNlZCB0byBwaWVjZSBiYWNrIHRvZ2V0aGVyIHRoZSByb290IHByb3BlcnR5XHJcblx0XHRcdFx0IG9uY2UgVmVsb2NpdHkgaGFzIHVwZGF0ZWQgb25lIG9mIGl0cyBpbmRpdmlkdWFsbHkgaG9va2VkIHZhbHVlcyB0aHJvdWdoIHR3ZWVuaW5nLiAqL1xyXG5cdFx0XHRcdGluamVjdFZhbHVlOiBmdW5jdGlvbihmdWxsSG9va05hbWUsIGhvb2tWYWx1ZSwgcm9vdFByb3BlcnR5VmFsdWUpIHtcclxuXHRcdFx0XHRcdHZhciBob29rRGF0YSA9IENTUy5Ib29rcy5yZWdpc3RlcmVkW2Z1bGxIb29rTmFtZV07XHJcblxyXG5cdFx0XHRcdFx0aWYgKGhvb2tEYXRhKSB7XHJcblx0XHRcdFx0XHRcdHZhciBob29rUm9vdCA9IGhvb2tEYXRhWzBdLFxyXG5cdFx0XHRcdFx0XHRcdFx0aG9va1Bvc2l0aW9uID0gaG9va0RhdGFbMV0sXHJcblx0XHRcdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZVBhcnRzLFxyXG5cdFx0XHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWVVcGRhdGVkO1xyXG5cclxuXHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWUgPSBDU1MuSG9va3MuY2xlYW5Sb290UHJvcGVydHlWYWx1ZShob29rUm9vdCwgcm9vdFByb3BlcnR5VmFsdWUpO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogU3BsaXQgcm9vdFByb3BlcnR5VmFsdWUgaW50byBpdHMgaW5kaXZpZHVhbCBob29rIHZhbHVlcywgcmVwbGFjZSB0aGUgdGFyZ2V0ZWQgdmFsdWUgd2l0aCBob29rVmFsdWUsXHJcblx0XHRcdFx0XHRcdCB0aGVuIHJlY29uc3RydWN0IHRoZSByb290UHJvcGVydHlWYWx1ZSBzdHJpbmcuICovXHJcblx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlUGFydHMgPSByb290UHJvcGVydHlWYWx1ZS50b1N0cmluZygpLm1hdGNoKENTUy5SZWdFeC52YWx1ZVNwbGl0KTtcclxuXHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWVQYXJ0c1tob29rUG9zaXRpb25dID0gaG9va1ZhbHVlO1xyXG5cdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZVVwZGF0ZWQgPSByb290UHJvcGVydHlWYWx1ZVBhcnRzLmpvaW4oXCIgXCIpO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHJvb3RQcm9wZXJ0eVZhbHVlVXBkYXRlZDtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBwcm92aWRlZCBmdWxsSG9va05hbWUgaXNuJ3QgYSByZWdpc3RlcmVkIGhvb2ssIHJldHVybiB0aGUgcm9vdFByb3BlcnR5VmFsdWUgdGhhdCB3YXMgcGFzc2VkIGluLiAqL1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcm9vdFByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgTm9ybWFsaXphdGlvbnNcclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHQvKiBOb3JtYWxpemF0aW9ucyBzdGFuZGFyZGl6ZSBDU1MgcHJvcGVydHkgbWFuaXB1bGF0aW9uIGJ5IHBvbGx5ZmlsbGluZyBicm93c2VyLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyAoZS5nLiBvcGFjaXR5KVxyXG5cdFx0XHQgYW5kIHJlZm9ybWF0dGluZyBzcGVjaWFsIHByb3BlcnRpZXMgKGUuZy4gY2xpcCwgcmdiYSkgdG8gbG9vayBsaWtlIHN0YW5kYXJkIG9uZXMuICovXHJcblx0XHRcdE5vcm1hbGl6YXRpb25zOiB7XHJcblx0XHRcdFx0LyogTm9ybWFsaXphdGlvbnMgYXJlIHBhc3NlZCBhIG5vcm1hbGl6YXRpb24gdGFyZ2V0IChlaXRoZXIgdGhlIHByb3BlcnR5J3MgbmFtZSwgaXRzIGV4dHJhY3RlZCB2YWx1ZSwgb3IgaXRzIGluamVjdGVkIHZhbHVlKSxcclxuXHRcdFx0XHQgdGhlIHRhcmdldGVkIGVsZW1lbnQgKHdoaWNoIG1heSBuZWVkIHRvIGJlIHF1ZXJpZWQpLCBhbmQgdGhlIHRhcmdldGVkIHByb3BlcnR5IHZhbHVlLiAqL1xyXG5cdFx0XHRcdHJlZ2lzdGVyZWQ6IHtcclxuXHRcdFx0XHRcdGNsaXA6IGZ1bmN0aW9uKHR5cGUsIGVsZW1lbnQsIHByb3BlcnR5VmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIm5hbWVcIjpcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBcImNsaXBcIjtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIENsaXAgbmVlZHMgdG8gYmUgdW53cmFwcGVkIGFuZCBzdHJpcHBlZCBvZiBpdHMgY29tbWFzIGR1cmluZyBleHRyYWN0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJleHRyYWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0cmFjdGVkO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIElmIFZlbG9jaXR5IGFsc28gZXh0cmFjdGVkIHRoaXMgdmFsdWUsIHNraXAgZXh0cmFjdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChDU1MuUmVnRXgud3JhcHBlZFZhbHVlQWxyZWFkeUV4dHJhY3RlZC50ZXN0KHByb3BlcnR5VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGV4dHJhY3RlZCA9IHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBSZW1vdmUgdGhlIFwicmVjdCgpXCIgd3JhcHBlci4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0ZXh0cmFjdGVkID0gcHJvcGVydHlWYWx1ZS50b1N0cmluZygpLm1hdGNoKENTUy5SZWdFeC52YWx1ZVVud3JhcCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBTdHJpcCBvZmYgY29tbWFzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRleHRyYWN0ZWQgPSBleHRyYWN0ZWQgPyBleHRyYWN0ZWRbMV0ucmVwbGFjZSgvLChcXHMrKT8vZywgXCIgXCIpIDogcHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZXh0cmFjdGVkO1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogQ2xpcCBuZWVkcyB0byBiZSByZS13cmFwcGVkIGR1cmluZyBpbmplY3Rpb24uICovXHJcblx0XHRcdFx0XHRcdFx0Y2FzZSBcImluamVjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwicmVjdChcIiArIHByb3BlcnR5VmFsdWUgKyBcIilcIjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGJsdXI6IGZ1bmN0aW9uKHR5cGUsIGVsZW1lbnQsIHByb3BlcnR5VmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2FzZSBcIm5hbWVcIjpcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBWZWxvY2l0eS5TdGF0ZS5pc0ZpcmVmb3ggPyBcImZpbHRlclwiIDogXCItd2Via2l0LWZpbHRlclwiO1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJleHRyYWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0cmFjdGVkID0gcGFyc2VGbG9hdChwcm9wZXJ0eVZhbHVlKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJZiBleHRyYWN0ZWQgaXMgTmFOLCBtZWFuaW5nIHRoZSB2YWx1ZSBpc24ndCBhbHJlYWR5IGV4dHJhY3RlZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmICghKGV4dHJhY3RlZCB8fCBleHRyYWN0ZWQgPT09IDApKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBibHVyQ29tcG9uZW50ID0gcHJvcGVydHlWYWx1ZS50b1N0cmluZygpLm1hdGNoKC9ibHVyXFwoKFswLTldK1tBLXpdKylcXCkvaSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgZmlsdGVyIHN0cmluZyBoYWQgYSBibHVyIGNvbXBvbmVudCwgcmV0dXJuIGp1c3QgdGhlIGJsdXIgdmFsdWUgYW5kIHVuaXQgdHlwZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGJsdXJDb21wb25lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRleHRyYWN0ZWQgPSBibHVyQ29tcG9uZW50WzFdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIHRoZSBjb21wb25lbnQgZG9lc24ndCBleGlzdCwgZGVmYXVsdCBibHVyIHRvIDAuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXh0cmFjdGVkID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBleHRyYWN0ZWQ7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBCbHVyIG5lZWRzIHRvIGJlIHJlLXdyYXBwZWQgZHVyaW5nIGluamVjdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRjYXNlIFwiaW5qZWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBGb3IgdGhlIGJsdXIgZWZmZWN0IHRvIGJlIGZ1bGx5IGRlLWFwcGxpZWQsIGl0IG5lZWRzIHRvIGJlIHNldCB0byBcIm5vbmVcIiBpbnN0ZWFkIG9mIDAuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXBhcnNlRmxvYXQocHJvcGVydHlWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwibm9uZVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwiYmx1cihcIiArIHByb3BlcnR5VmFsdWUgKyBcIilcIjtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdC8qIDw9SUU4IGRvIG5vdCBzdXBwb3J0IHRoZSBzdGFuZGFyZCBvcGFjaXR5IHByb3BlcnR5LiBUaGV5IHVzZSBmaWx0ZXI6YWxwaGEob3BhY2l0eT1JTlQpIGluc3RlYWQuICovXHJcblx0XHRcdFx0XHRvcGFjaXR5OiBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBwcm9wZXJ0eVZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdGlmIChJRSA8PSA4KSB7XHJcblx0XHRcdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwibmFtZVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJmaWx0ZXJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJleHRyYWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIDw9SUU4IHJldHVybiBhIFwiZmlsdGVyXCIgdmFsdWUgb2YgXCJhbHBoYShvcGFjaXR5PVxcZHsxLDN9KVwiLlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgRXh0cmFjdCB0aGUgdmFsdWUgYW5kIGNvbnZlcnQgaXQgdG8gYSBkZWNpbWFsIHZhbHVlIHRvIG1hdGNoIHRoZSBzdGFuZGFyZCBDU1Mgb3BhY2l0eSBwcm9wZXJ0eSdzIGZvcm1hdHRpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBleHRyYWN0ZWQgPSBwcm9wZXJ0eVZhbHVlLnRvU3RyaW5nKCkubWF0Y2goL2FscGhhXFwob3BhY2l0eT0oLiopXFwpL2kpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGV4dHJhY3RlZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIENvbnZlcnQgdG8gZGVjaW1hbCB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gZXh0cmFjdGVkWzFdIC8gMTAwO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFdoZW4gZXh0cmFjdGluZyBvcGFjaXR5LCBkZWZhdWx0IHRvIDEgc2luY2UgYSBudWxsIHZhbHVlIG1lYW5zIG9wYWNpdHkgaGFzbid0IGJlZW4gc2V0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJpbmplY3RcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogT3BhY2lmaWVkIGVsZW1lbnRzIGFyZSByZXF1aXJlZCB0byBoYXZlIHRoZWlyIHpvb20gcHJvcGVydHkgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBTZXR0aW5nIHRoZSBmaWx0ZXIgcHJvcGVydHkgb24gZWxlbWVudHMgd2l0aCBjZXJ0YWluIGZvbnQgcHJvcGVydHkgY29tYmluYXRpb25zIGNhbiByZXN1bHQgaW4gYVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgaGlnaGx5IHVuYXBwZWFsaW5nIHVsdHJhLWJvbGRpbmcgZWZmZWN0LiBUaGVyZSdzIG5vIHdheSB0byByZW1lZHkgdGhpcyB0aHJvdWdob3V0IGEgdHdlZW4sIGJ1dCBkcm9wcGluZyB0aGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0IHZhbHVlIGFsdG9nZXRoZXIgKHdoZW4gb3BhY2l0eSBoaXRzIDEpIGF0IGxlYXN0cyBlbnN1cmVzIHRoYXQgdGhlIGdsaXRjaCBpcyBnb25lIHBvc3QtdHdlZW5pbmcuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChwYXJzZUZsb2F0KHByb3BlcnR5VmFsdWUpID49IDEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBBcyBwZXIgdGhlIGZpbHRlciBwcm9wZXJ0eSdzIHNwZWMsIGNvbnZlcnQgdGhlIGRlY2ltYWwgdmFsdWUgdG8gYSB3aG9sZSBudW1iZXIgYW5kIHdyYXAgdGhlIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcImFscGhhKG9wYWNpdHk9XCIgKyBwYXJzZUludChwYXJzZUZsb2F0KHByb3BlcnR5VmFsdWUpICogMTAwLCAxMCkgKyBcIilcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHQvKiBXaXRoIGFsbCBvdGhlciBicm93c2Vycywgbm9ybWFsaXphdGlvbiBpcyBub3QgcmVxdWlyZWQ7IHJldHVybiB0aGUgc2FtZSB2YWx1ZXMgdGhhdCB3ZXJlIHBhc3NlZCBpbi4gKi9cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJuYW1lXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcIm9wYWNpdHlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJleHRyYWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcImluamVjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBCYXRjaGVkIFJlZ2lzdHJhdGlvbnNcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIE5vdGU6IEJhdGNoZWQgbm9ybWFsaXphdGlvbnMgZXh0ZW5kIHRoZSBDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZCBvYmplY3QuICovXHJcblx0XHRcdFx0cmVnaXN0ZXI6IGZ1bmN0aW9uKCkge1xyXG5cclxuXHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0IFRyYW5zZm9ybXNcclxuXHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHQvKiBUcmFuc2Zvcm1zIGFyZSB0aGUgc3VicHJvcGVydGllcyBjb250YWluZWQgYnkgdGhlIENTUyBcInRyYW5zZm9ybVwiIHByb3BlcnR5LiBUcmFuc2Zvcm1zIG11c3QgdW5kZXJnbyBub3JtYWxpemF0aW9uXHJcblx0XHRcdFx0XHQgc28gdGhhdCB0aGV5IGNhbiBiZSByZWZlcmVuY2VkIGluIGEgcHJvcGVydGllcyBtYXAgYnkgdGhlaXIgaW5kaXZpZHVhbCBuYW1lcy4gKi9cclxuXHRcdFx0XHRcdC8qIE5vdGU6IFdoZW4gdHJhbnNmb3JtcyBhcmUgXCJzZXRcIiwgdGhleSBhcmUgYWN0dWFsbHkgYXNzaWduZWQgdG8gYSBwZXItZWxlbWVudCB0cmFuc2Zvcm1DYWNoZS4gV2hlbiBhbGwgdHJhbnNmb3JtXHJcblx0XHRcdFx0XHQgc2V0dGluZyBpcyBjb21wbGV0ZSBjb21wbGV0ZSwgQ1NTLmZsdXNoVHJhbnNmb3JtQ2FjaGUoKSBtdXN0IGJlIG1hbnVhbGx5IGNhbGxlZCB0byBmbHVzaCB0aGUgdmFsdWVzIHRvIHRoZSBET00uXHJcblx0XHRcdFx0XHQgVHJhbnNmb3JtIHNldHRpbmcgaXMgYmF0Y2hlZCBpbiB0aGlzIHdheSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlOiB0aGUgdHJhbnNmb3JtIHN0eWxlIG9ubHkgbmVlZHMgdG8gYmUgdXBkYXRlZFxyXG5cdFx0XHRcdFx0IG9uY2Ugd2hlbiBtdWx0aXBsZSB0cmFuc2Zvcm0gc3VicHJvcGVydGllcyBhcmUgYmVpbmcgYW5pbWF0ZWQgc2ltdWx0YW5lb3VzbHkuICovXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBJRTkgYW5kIEFuZHJvaWQgR2luZ2VyYnJlYWQgaGF2ZSBzdXBwb3J0IGZvciAyRCAtLSBidXQgbm90IDNEIC0tIHRyYW5zZm9ybXMuIFNpbmNlIGFuaW1hdGluZyB1bnN1cHBvcnRlZFxyXG5cdFx0XHRcdFx0IHRyYW5zZm9ybSBwcm9wZXJ0aWVzIHJlc3VsdHMgaW4gdGhlIGJyb3dzZXIgaWdub3JpbmcgdGhlICplbnRpcmUqIHRyYW5zZm9ybSBzdHJpbmcsIHdlIHByZXZlbnQgdGhlc2UgM0QgdmFsdWVzXHJcblx0XHRcdFx0XHQgZnJvbSBiZWluZyBub3JtYWxpemVkIGZvciB0aGVzZSBicm93c2VycyBzbyB0aGF0IHR3ZWVuaW5nIHNraXBzIHRoZXNlIHByb3BlcnRpZXMgYWx0b2dldGhlclxyXG5cdFx0XHRcdFx0IChzaW5jZSBpdCB3aWxsIGlnbm9yZSB0aGVtIGFzIGJlaW5nIHVuc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLikgKi9cclxuXHRcdFx0XHRcdGlmICgoIUlFIHx8IElFID4gOSkgJiYgIVZlbG9jaXR5LlN0YXRlLmlzR2luZ2VyYnJlYWQpIHtcclxuXHRcdFx0XHRcdFx0LyogTm90ZTogU2luY2UgdGhlIHN0YW5kYWxvbmUgQ1NTIFwicGVyc3BlY3RpdmVcIiBwcm9wZXJ0eSBhbmQgdGhlIENTUyB0cmFuc2Zvcm0gXCJwZXJzcGVjdGl2ZVwiIHN1YnByb3BlcnR5XHJcblx0XHRcdFx0XHRcdCBzaGFyZSB0aGUgc2FtZSBuYW1lLCB0aGUgbGF0dGVyIGlzIGdpdmVuIGEgdW5pcXVlIHRva2VuIHdpdGhpbiBWZWxvY2l0eTogXCJ0cmFuc2Zvcm1QZXJzcGVjdGl2ZVwiLiAqL1xyXG5cdFx0XHRcdFx0XHRDU1MuTGlzdHMudHJhbnNmb3Jtc0Jhc2UgPSBDU1MuTGlzdHMudHJhbnNmb3Jtc0Jhc2UuY29uY2F0KENTUy5MaXN0cy50cmFuc2Zvcm1zM0QpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgQ1NTLkxpc3RzLnRyYW5zZm9ybXNCYXNlLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdC8qIFdyYXAgdGhlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBub3JtYWxpemF0aW9uIGZ1bmN0aW9uIGluIGEgbmV3IHNjb3BlIHNvIHRoYXQgdHJhbnNmb3JtTmFtZSdzIHZhbHVlIGlzXHJcblx0XHRcdFx0XHRcdCBwYWlyZWQgd2l0aCBpdHMgcmVzcGVjdGl2ZSBmdW5jdGlvbi4gKE90aGVyd2lzZSwgYWxsIGZ1bmN0aW9ucyB3b3VsZCB0YWtlIHRoZSBmaW5hbCBmb3IgbG9vcCdzIHRyYW5zZm9ybU5hbWUuKSAqL1xyXG5cdFx0XHRcdFx0XHQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHRyYW5zZm9ybU5hbWUgPSBDU1MuTGlzdHMudHJhbnNmb3Jtc0Jhc2VbaV07XHJcblxyXG5cdFx0XHRcdFx0XHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3RyYW5zZm9ybU5hbWVdID0gZnVuY3Rpb24odHlwZSwgZWxlbWVudCwgcHJvcGVydHlWYWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIFRoZSBub3JtYWxpemVkIHByb3BlcnR5IG5hbWUgaXMgdGhlIHBhcmVudCBcInRyYW5zZm9ybVwiIHByb3BlcnR5IC0tIHRoZSBwcm9wZXJ0eSB0aGF0IGlzIGFjdHVhbGx5IHNldCBpbiBDU1MuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJuYW1lXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwidHJhbnNmb3JtXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogVHJhbnNmb3JtIHZhbHVlcyBhcmUgY2FjaGVkIG9udG8gYSBwZXItZWxlbWVudCB0cmFuc2Zvcm1DYWNoZSBvYmplY3QuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJleHRyYWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgdGhpcyB0cmFuc2Zvcm0gaGFzIHlldCB0byBiZSBhc3NpZ25lZCBhIHZhbHVlLCByZXR1cm4gaXRzIG51bGwgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKERhdGEoZWxlbWVudCkgPT09IHVuZGVmaW5lZCB8fCBEYXRhKGVsZW1lbnQpLnRyYW5zZm9ybUNhY2hlW3RyYW5zZm9ybU5hbWVdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFNjYWxlIENTUy5MaXN0cy50cmFuc2Zvcm1zQmFzZSBkZWZhdWx0IHRvIDEgd2hlcmVhcyBhbGwgb3RoZXIgdHJhbnNmb3JtIHByb3BlcnRpZXMgZGVmYXVsdCB0byAwLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIC9ec2NhbGUvaS50ZXN0KHRyYW5zZm9ybU5hbWUpID8gMSA6IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBXaGVuIHRyYW5zZm9ybSB2YWx1ZXMgYXJlIHNldCwgdGhleSBhcmUgd3JhcHBlZCBpbiBwYXJlbnRoZXNlcyBhcyBwZXIgdGhlIENTUyBzcGVjLlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0IFRodXMsIHdoZW4gZXh0cmFjdGluZyB0aGVpciB2YWx1ZXMgKGZvciB0d2VlbiBjYWxjdWxhdGlvbnMpLCB3ZSBzdHJpcCBvZmYgdGhlIHBhcmVudGhlc2VzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gRGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZVt0cmFuc2Zvcm1OYW1lXS5yZXBsYWNlKC9bKCldL2csIFwiXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiaW5qZWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGludmFsaWQgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgYW4gaW5kaXZpZHVhbCB0cmFuc2Zvcm0gcHJvcGVydHkgY29udGFpbnMgYW4gdW5zdXBwb3J0ZWQgdW5pdCB0eXBlLCB0aGUgYnJvd3NlciBpZ25vcmVzIHRoZSAqZW50aXJlKiB0cmFuc2Zvcm0gcHJvcGVydHkuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IFRodXMsIHByb3RlY3QgdXNlcnMgZnJvbSB0aGVtc2VsdmVzIGJ5IHNraXBwaW5nIHNldHRpbmcgZm9yIHRyYW5zZm9ybSB2YWx1ZXMgc3VwcGxpZWQgd2l0aCBpbnZhbGlkIHVuaXQgdHlwZXMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogU3dpdGNoIG9uIHRoZSBiYXNlIHRyYW5zZm9ybSB0eXBlOyBpZ25vcmUgdGhlIGF4aXMgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgbGV0dGVyIGZyb20gdGhlIHRyYW5zZm9ybSdzIG5hbWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3dpdGNoICh0cmFuc2Zvcm1OYW1lLnN1YnN0cigwLCB0cmFuc2Zvcm1OYW1lLmxlbmd0aCAtIDEpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBXaGl0ZWxpc3QgdW5pdCB0eXBlcyBmb3IgZWFjaCB0cmFuc2Zvcm0uICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwidHJhbnNsYXRlXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGludmFsaWQgPSAhLyglfHB4fGVtfHJlbXx2d3x2aHxcXGQpJC9pLnRlc3QocHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBTaW5jZSBhbiBheGlzLWZyZWUgXCJzY2FsZVwiIHByb3BlcnR5IGlzIHN1cHBvcnRlZCBhcyB3ZWxsLCBhIGxpdHRsZSBoYWNrIGlzIHVzZWQgaGVyZSB0byBkZXRlY3QgaXQgYnkgY2hvcHBpbmcgb2ZmIGl0cyBsYXN0IGxldHRlci4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJzY2FsXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwic2NhbGVcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogQ2hyb21lIG9uIEFuZHJvaWQgaGFzIGEgYnVnIGluIHdoaWNoIHNjYWxlZCBlbGVtZW50cyBibHVyIGlmIHRoZWlyIGluaXRpYWwgc2NhbGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IHZhbHVlIGlzIGJlbG93IDEgKHdoaWNoIGNhbiBoYXBwZW4gd2l0aCBmb3JjZWZlZWRpbmcpLiBUaHVzLCB3ZSBkZXRlY3QgYSB5ZXQtdW5zZXQgc2NhbGUgcHJvcGVydHlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IGFuZCBlbnN1cmUgdGhhdCBpdHMgZmlyc3QgdmFsdWUgaXMgYWx3YXlzIDEuIE1vcmUgaW5mbzogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDQxNzg5MC9jc3MzLWFuaW1hdGlvbnMtd2l0aC10cmFuc2Zvcm0tY2F1c2VzLWJsdXJyZWQtZWxlbWVudHMtb24td2Via2l0LzEwNDE3OTYyIzEwNDE3OTYyICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5TdGF0ZS5pc0FuZHJvaWQgJiYgRGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZVt0cmFuc2Zvcm1OYW1lXSA9PT0gdW5kZWZpbmVkICYmIHByb3BlcnR5VmFsdWUgPCAxKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IDE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGludmFsaWQgPSAhLyhcXGQpJC9pLnRlc3QocHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInNrZXdcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW52YWxpZCA9ICEvKGRlZ3xcXGQpJC9pLnRlc3QocHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInJvdGF0ZVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbnZhbGlkID0gIS8oZGVnfFxcZCkkL2kudGVzdChwcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIWludmFsaWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIEFzIHBlciB0aGUgQ1NTIHNwZWMsIHdyYXAgdGhlIHZhbHVlIGluIHBhcmVudGhlc2VzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0RGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZVt0cmFuc2Zvcm1OYW1lXSA9IFwiKFwiICsgcHJvcGVydHlWYWx1ZSArIFwiKVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogQWx0aG91Z2ggdGhlIHZhbHVlIGlzIHNldCBvbiB0aGUgdHJhbnNmb3JtQ2FjaGUgb2JqZWN0LCByZXR1cm4gdGhlIG5ld2x5LXVwZGF0ZWQgdmFsdWUgZm9yIHRoZSBjYWxsaW5nIGNvZGUgdG8gcHJvY2VzcyBhcyBub3JtYWwuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV07XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0fSkoKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0IENvbG9yc1xyXG5cdFx0XHRcdFx0ICoqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0LyogU2luY2UgVmVsb2NpdHkgb25seSBhbmltYXRlcyBhIHNpbmdsZSBudW1lcmljIHZhbHVlIHBlciBwcm9wZXJ0eSwgY29sb3IgYW5pbWF0aW9uIGlzIGFjaGlldmVkIGJ5IGhvb2tpbmcgdGhlIGluZGl2aWR1YWwgUkdCQSBjb21wb25lbnRzIG9mIENTUyBjb2xvciBwcm9wZXJ0aWVzLlxyXG5cdFx0XHRcdFx0IEFjY29yZGluZ2x5LCBjb2xvciB2YWx1ZXMgbXVzdCBiZSBub3JtYWxpemVkIChlLmcuIFwiI2ZmMDAwMFwiLCBcInJlZFwiLCBhbmQgXCJyZ2IoMjU1LCAwLCAwKVwiID09PiBcIjI1NSAwIDAgMVwiKSBzbyB0aGF0IHRoZWlyIGNvbXBvbmVudHMgY2FuIGJlIGluamVjdGVkL2V4dHJhY3RlZCBieSBDU1MuSG9va3MgbG9naWMuICovXHJcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IENTUy5MaXN0cy5jb2xvcnMubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0LyogV3JhcCB0aGUgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIG5vcm1hbGl6YXRpb24gZnVuY3Rpb24gaW4gYSBuZXcgc2NvcGUgc28gdGhhdCBjb2xvck5hbWUncyB2YWx1ZSBpcyBwYWlyZWQgd2l0aCBpdHMgcmVzcGVjdGl2ZSBmdW5jdGlvbi5cclxuXHRcdFx0XHRcdFx0IChPdGhlcndpc2UsIGFsbCBmdW5jdGlvbnMgd291bGQgdGFrZSB0aGUgZmluYWwgZm9yIGxvb3AncyBjb2xvck5hbWUuKSAqL1xyXG5cdFx0XHRcdFx0XHQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGNvbG9yTmFtZSA9IENTUy5MaXN0cy5jb2xvcnNbal07XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIE5vdGU6IEluIElFPD04LCB3aGljaCBzdXBwb3J0IHJnYiBidXQgbm90IHJnYmEsIGNvbG9yIHByb3BlcnRpZXMgYXJlIHJldmVydGVkIHRvIHJnYiBieSBzdHJpcHBpbmcgb2ZmIHRoZSBhbHBoYSBjb21wb25lbnQuICovXHJcblx0XHRcdFx0XHRcdFx0Q1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbY29sb3JOYW1lXSA9IGZ1bmN0aW9uKHR5cGUsIGVsZW1lbnQsIHByb3BlcnR5VmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwibmFtZVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBjb2xvck5hbWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogQ29udmVydCBhbGwgY29sb3IgdmFsdWVzIGludG8gdGhlIHJnYiBmb3JtYXQuIChPbGQgSUUgY2FuIHJldHVybiBoZXggdmFsdWVzIGFuZCBjb2xvciBuYW1lcyBpbnN0ZWFkIG9mIHJnYi9yZ2JhLikgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcImV4dHJhY3RcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0cmFjdGVkO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgY29sb3IgaXMgYWxyZWFkeSBpbiBpdHMgaG9va2FibGUgZm9ybSAoZS5nLiBcIjI1NSAyNTUgMjU1IDFcIikgZHVlIHRvIGhhdmluZyBiZWVuIHByZXZpb3VzbHkgZXh0cmFjdGVkLCBza2lwIGV4dHJhY3Rpb24uICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKENTUy5SZWdFeC53cmFwcGVkVmFsdWVBbHJlYWR5RXh0cmFjdGVkLnRlc3QocHJvcGVydHlWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV4dHJhY3RlZCA9IHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBjb252ZXJ0ZWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sb3JOYW1lcyA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJsYWNrOiBcInJnYigwLCAwLCAwKVwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ymx1ZTogXCJyZ2IoMCwgMCwgMjU1KVwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z3JheTogXCJyZ2IoMTI4LCAxMjgsIDEyOClcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdyZWVuOiBcInJnYigwLCAxMjgsIDApXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZWQ6IFwicmdiKDI1NSwgMCwgMClcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdoaXRlOiBcInJnYigyNTUsIDI1NSwgMjU1KVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBDb252ZXJ0IGNvbG9yIG5hbWVzIHRvIHJnYi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgvXltBLXpdKyQvaS50ZXN0KHByb3BlcnR5VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjb2xvck5hbWVzW3Byb3BlcnR5VmFsdWVdICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZWQgPSBjb2xvck5hbWVzW3Byb3BlcnR5VmFsdWVdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIGFuIHVubWF0Y2hlZCBjb2xvciBuYW1lIGlzIHByb3ZpZGVkLCBkZWZhdWx0IHRvIGJsYWNrLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlZCA9IGNvbG9yTmFtZXMuYmxhY2s7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogQ29udmVydCBoZXggdmFsdWVzIHRvIHJnYi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoQ1NTLlJlZ0V4LmlzSGV4LnRlc3QocHJvcGVydHlWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVkID0gXCJyZ2IoXCIgKyBDU1MuVmFsdWVzLmhleFRvUmdiKHByb3BlcnR5VmFsdWUpLmpvaW4oXCIgXCIpICsgXCIpXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIElmIHRoZSBwcm92aWRlZCBjb2xvciBkb2Vzbid0IG1hdGNoIGFueSBvZiB0aGUgYWNjZXB0ZWQgY29sb3IgZm9ybWF0cywgZGVmYXVsdCB0byBibGFjay4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoISgvXnJnYmE/XFwoL2kudGVzdChwcm9wZXJ0eVZhbHVlKSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVkID0gY29sb3JOYW1lcy5ibGFjaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBSZW1vdmUgdGhlIHN1cnJvdW5kaW5nIFwicmdiL3JnYmEoKVwiIHN0cmluZyB0aGVuIHJlcGxhY2UgY29tbWFzIHdpdGggc3BhY2VzIGFuZCBzdHJpcFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0IHJlcGVhdGVkIHNwYWNlcyAoaW4gY2FzZSB0aGUgdmFsdWUgaW5jbHVkZWQgc3BhY2VzIHRvIGJlZ2luIHdpdGgpLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXh0cmFjdGVkID0gKGNvbnZlcnRlZCB8fCBwcm9wZXJ0eVZhbHVlKS50b1N0cmluZygpLm1hdGNoKENTUy5SZWdFeC52YWx1ZVVud3JhcClbMV0ucmVwbGFjZSgvLChcXHMrKT8vZywgXCIgXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogU28gbG9uZyBhcyB0aGlzIGlzbid0IDw9SUU4LCBhZGQgYSBmb3VydGggKGFscGhhKSBjb21wb25lbnQgaWYgaXQncyBtaXNzaW5nIGFuZCBkZWZhdWx0IGl0IHRvIDEgKHZpc2libGUpLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgoIUlFIHx8IElFID4gOCkgJiYgZXh0cmFjdGVkLnNwbGl0KFwiIFwiKS5sZW5ndGggPT09IDMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGV4dHJhY3RlZCArPSBcIiAxXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZXh0cmFjdGVkO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiaW5qZWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgd2UgaGF2ZSBhIHBhdHRlcm4gdGhlbiBpdCBtaWdodCBhbHJlYWR5IGhhdmUgdGhlIHJpZ2h0IHZhbHVlcyAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgvXnJnYi8udGVzdChwcm9wZXJ0eVZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiB0aGlzIGlzIElFPD04IGFuZCBhbiBhbHBoYSBjb21wb25lbnQgZXhpc3RzLCBzdHJpcCBpdCBvZmYuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKElFIDw9IDgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eVZhbHVlLnNwbGl0KFwiIFwiKS5sZW5ndGggPT09IDQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5VmFsdWUuc3BsaXQoL1xccysvKS5zbGljZSgwLCAzKS5qb2luKFwiIFwiKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIE90aGVyd2lzZSwgYWRkIGEgZm91cnRoIChhbHBoYSkgY29tcG9uZW50IGlmIGl0J3MgbWlzc2luZyBhbmQgZGVmYXVsdCBpdCB0byAxICh2aXNpYmxlKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5VmFsdWUuc3BsaXQoXCIgXCIpLmxlbmd0aCA9PT0gMykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSArPSBcIiAxXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBSZS1pbnNlcnQgdGhlIGJyb3dzZXItYXBwcm9wcmlhdGUgd3JhcHBlcihcInJnYi9yZ2JhKClcIiksIGluc2VydCBjb21tYXMsIGFuZCBzdHJpcCBvZmYgZGVjaW1hbCB1bml0c1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBvbiBhbGwgdmFsdWVzIGJ1dCB0aGUgZm91cnRoIChSLCBHLCBhbmQgQiBvbmx5IGFjY2VwdCB3aG9sZSBudW1iZXJzKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKElFIDw9IDggPyBcInJnYlwiIDogXCJyZ2JhXCIpICsgXCIoXCIgKyBwcm9wZXJ0eVZhbHVlLnJlcGxhY2UoL1xccysvZywgXCIsXCIpLnJlcGxhY2UoL1xcLihcXGQpKyg/PSwpL2csIFwiXCIpICsgXCIpXCI7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0fSkoKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBEaW1lbnNpb25zXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKiovXHJcblx0XHRcdFx0XHRmdW5jdGlvbiBhdWdtZW50RGltZW5zaW9uKG5hbWUsIGVsZW1lbnQsIHdhbnRJbm5lcikge1xyXG5cdFx0XHRcdFx0XHR2YXIgaXNCb3JkZXJCb3ggPSBDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImJveFNpemluZ1wiKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09IFwiYm9yZGVyLWJveFwiO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKGlzQm9yZGVyQm94ID09PSAod2FudElubmVyIHx8IGZhbHNlKSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIGluIGJveC1zaXppbmcgbW9kZSwgdGhlIENTUyB3aWR0aCAvIGhlaWdodCBhY2Nlc3NvcnMgYWxyZWFkeSBnaXZlIHRoZSBvdXRlcldpZHRoIC8gb3V0ZXJIZWlnaHQuICovXHJcblx0XHRcdFx0XHRcdFx0dmFyIGksXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRhdWdtZW50ID0gMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2lkZXMgPSBuYW1lID09PSBcIndpZHRoXCIgPyBbXCJMZWZ0XCIsIFwiUmlnaHRcIl0gOiBbXCJUb3BcIiwgXCJCb3R0b21cIl0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkcyA9IFtcInBhZGRpbmdcIiArIHNpZGVzWzBdLCBcInBhZGRpbmdcIiArIHNpZGVzWzFdLCBcImJvcmRlclwiICsgc2lkZXNbMF0gKyBcIldpZHRoXCIsIFwiYm9yZGVyXCIgKyBzaWRlc1sxXSArIFwiV2lkdGhcIl07XHJcblxyXG5cdFx0XHRcdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gcGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBmaWVsZHNbaV0pKTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICghaXNOYU4odmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGF1Z21lbnQgKz0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB3YW50SW5uZXIgPyAtYXVnbWVudCA6IGF1Z21lbnQ7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRmdW5jdGlvbiBnZXREaW1lbnNpb24obmFtZSwgd2FudElubmVyKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbih0eXBlLCBlbGVtZW50LCBwcm9wZXJ0eVZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwibmFtZVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbmFtZTtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJleHRyYWN0XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBwYXJzZUZsb2F0KHByb3BlcnR5VmFsdWUpICsgYXVnbWVudERpbWVuc2lvbihuYW1lLCBlbGVtZW50LCB3YW50SW5uZXIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcImluamVjdFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKHBhcnNlRmxvYXQocHJvcGVydHlWYWx1ZSkgLSBhdWdtZW50RGltZW5zaW9uKG5hbWUsIGVsZW1lbnQsIHdhbnRJbm5lcikpICsgXCJweFwiO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkLmlubmVyV2lkdGggPSBnZXREaW1lbnNpb24oXCJ3aWR0aFwiLCB0cnVlKTtcclxuXHRcdFx0XHRcdENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkLmlubmVySGVpZ2h0ID0gZ2V0RGltZW5zaW9uKFwiaGVpZ2h0XCIsIHRydWUpO1xyXG5cdFx0XHRcdFx0Q1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWQub3V0ZXJXaWR0aCA9IGdldERpbWVuc2lvbihcIndpZHRoXCIpO1xyXG5cdFx0XHRcdFx0Q1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWQub3V0ZXJIZWlnaHQgPSBnZXREaW1lbnNpb24oXCJoZWlnaHRcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdCBDU1MgUHJvcGVydHkgTmFtZXNcclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdE5hbWVzOiB7XHJcblx0XHRcdFx0LyogQ2FtZWxjYXNlIGEgcHJvcGVydHkgbmFtZSBpbnRvIGl0cyBKYXZhU2NyaXB0IG5vdGF0aW9uIChlLmcuIFwiYmFja2dyb3VuZC1jb2xvclwiID09PiBcImJhY2tncm91bmRDb2xvclwiKS5cclxuXHRcdFx0XHQgQ2FtZWxjYXNpbmcgaXMgdXNlZCB0byBub3JtYWxpemUgcHJvcGVydHkgbmFtZXMgYmV0d2VlbiBhbmQgYWNyb3NzIGNhbGxzLiAqL1xyXG5cdFx0XHRcdGNhbWVsQ2FzZTogZnVuY3Rpb24ocHJvcGVydHkpIHtcclxuXHRcdFx0XHRcdHJldHVybiBwcm9wZXJ0eS5yZXBsYWNlKC8tKFxcdykvZywgZnVuY3Rpb24obWF0Y2gsIHN1Yk1hdGNoKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBzdWJNYXRjaC50b1VwcGVyQ2FzZSgpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKiBGb3IgU1ZHIGVsZW1lbnRzLCBzb21lIHByb3BlcnRpZXMgKG5hbWVseSwgZGltZW5zaW9uYWwgb25lcykgYXJlIEdFVC9TRVQgdmlhIHRoZSBlbGVtZW50J3MgSFRNTCBhdHRyaWJ1dGVzIChpbnN0ZWFkIG9mIHZpYSBDU1Mgc3R5bGVzKS4gKi9cclxuXHRcdFx0XHRTVkdBdHRyaWJ1dGU6IGZ1bmN0aW9uKHByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHR2YXIgU1ZHQXR0cmlidXRlcyA9IFwid2lkdGh8aGVpZ2h0fHh8eXxjeHxjeXxyfHJ4fHJ5fHgxfHgyfHkxfHkyXCI7XHJcblxyXG5cdFx0XHRcdFx0LyogQ2VydGFpbiBicm93c2VycyByZXF1aXJlIGFuIFNWRyB0cmFuc2Zvcm0gdG8gYmUgYXBwbGllZCBhcyBhbiBhdHRyaWJ1dGUuIChPdGhlcndpc2UsIGFwcGxpY2F0aW9uIHZpYSBDU1MgaXMgcHJlZmVyYWJsZSBkdWUgdG8gM0Qgc3VwcG9ydC4pICovXHJcblx0XHRcdFx0XHRpZiAoSUUgfHwgKFZlbG9jaXR5LlN0YXRlLmlzQW5kcm9pZCAmJiAhVmVsb2NpdHkuU3RhdGUuaXNDaHJvbWUpKSB7XHJcblx0XHRcdFx0XHRcdFNWR0F0dHJpYnV0ZXMgKz0gXCJ8dHJhbnNmb3JtXCI7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBSZWdFeHAoXCJeKFwiICsgU1ZHQXR0cmlidXRlcyArIFwiKSRcIiwgXCJpXCIpLnRlc3QocHJvcGVydHkpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBwcm9wZXJ0eSBzaG91bGQgYmUgc2V0IHdpdGggYSB2ZW5kb3IgcHJlZml4LiAqL1xyXG5cdFx0XHRcdC8qIElmIGEgcHJlZml4ZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgZXhpc3RzLCByZXR1cm4gaXQuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSBuYW1lLlxyXG5cdFx0XHRcdCBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGF0IGFsbCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIsIHJldHVybiBhIGZhbHNlIGZsYWcuICovXHJcblx0XHRcdFx0cHJlZml4Q2hlY2s6IGZ1bmN0aW9uKHByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHQvKiBJZiB0aGlzIHByb3BlcnR5IGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZCwgcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUuICovXHJcblx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuU3RhdGUucHJlZml4TWF0Y2hlc1twcm9wZXJ0eV0pIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIFtWZWxvY2l0eS5TdGF0ZS5wcmVmaXhNYXRjaGVzW3Byb3BlcnR5XSwgdHJ1ZV07XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR2YXIgdmVuZG9ycyA9IFtcIlwiLCBcIldlYmtpdFwiLCBcIk1velwiLCBcIm1zXCIsIFwiT1wiXTtcclxuXHJcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgPSAwLCB2ZW5kb3JzTGVuZ3RoID0gdmVuZG9ycy5sZW5ndGg7IGkgPCB2ZW5kb3JzTGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgcHJvcGVydHlQcmVmaXhlZDtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKGkgPT09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5UHJlZml4ZWQgPSBwcm9wZXJ0eTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogQ2FwaXRhbGl6ZSB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBwcm9wZXJ0eSB0byBjb25mb3JtIHRvIEphdmFTY3JpcHQgdmVuZG9yIHByZWZpeCBub3RhdGlvbiAoZS5nLiB3ZWJraXRGaWx0ZXIpLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlQcmVmaXhlZCA9IHZlbmRvcnNbaV0gKyBwcm9wZXJ0eS5yZXBsYWNlKC9eXFx3LywgZnVuY3Rpb24obWF0Y2gpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG1hdGNoLnRvVXBwZXJDYXNlKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIENoZWNrIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIHRoaXMgcHJvcGVydHkgYXMgcHJlZml4ZWQuICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKFR5cGUuaXNTdHJpbmcoVmVsb2NpdHkuU3RhdGUucHJlZml4RWxlbWVudC5zdHlsZVtwcm9wZXJ0eVByZWZpeGVkXSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIENhY2hlIHRoZSBtYXRjaC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFZlbG9jaXR5LlN0YXRlLnByZWZpeE1hdGNoZXNbcHJvcGVydHldID0gcHJvcGVydHlQcmVmaXhlZDtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gW3Byb3BlcnR5UHJlZml4ZWQsIHRydWVdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogSWYgdGhlIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHRoaXMgcHJvcGVydHkgaW4gYW55IGZvcm0sIGluY2x1ZGUgYSBmYWxzZSBmbGFnIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gZGVjaWRlIGhvdyB0byBwcm9jZWVkLiAqL1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gW3Byb3BlcnR5LCBmYWxzZV07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdCBDU1MgUHJvcGVydHkgVmFsdWVzXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRWYWx1ZXM6IHtcclxuXHRcdFx0XHQvKiBIZXggdG8gUkdCIGNvbnZlcnNpb24uIENvcHlyaWdodCBUaW0gRG93bjogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NjIzODM4L3JnYi10by1oZXgtYW5kLWhleC10by1yZ2IgKi9cclxuXHRcdFx0XHRoZXhUb1JnYjogZnVuY3Rpb24oaGV4KSB7XHJcblx0XHRcdFx0XHR2YXIgc2hvcnRmb3JtUmVnZXggPSAvXiM/KFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pJC9pLFxyXG5cdFx0XHRcdFx0XHRcdGxvbmdmb3JtUmVnZXggPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLFxyXG5cdFx0XHRcdFx0XHRcdHJnYlBhcnRzO1xyXG5cclxuXHRcdFx0XHRcdGhleCA9IGhleC5yZXBsYWNlKHNob3J0Zm9ybVJlZ2V4LCBmdW5jdGlvbihtLCByLCBnLCBiKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiByICsgciArIGcgKyBnICsgYiArIGI7XHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRyZ2JQYXJ0cyA9IGxvbmdmb3JtUmVnZXguZXhlYyhoZXgpO1xyXG5cclxuXHRcdFx0XHRcdHJldHVybiByZ2JQYXJ0cyA/IFtwYXJzZUludChyZ2JQYXJ0c1sxXSwgMTYpLCBwYXJzZUludChyZ2JQYXJ0c1syXSwgMTYpLCBwYXJzZUludChyZ2JQYXJ0c1szXSwgMTYpXSA6IFswLCAwLCAwXTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGlzQ1NTTnVsbFZhbHVlOiBmdW5jdGlvbih2YWx1ZSkge1xyXG5cdFx0XHRcdFx0LyogVGhlIGJyb3dzZXIgZGVmYXVsdHMgQ1NTIHZhbHVlcyB0aGF0IGhhdmUgbm90IGJlZW4gc2V0IHRvIGVpdGhlciAwIG9yIG9uZSBvZiBzZXZlcmFsIHBvc3NpYmxlIG51bGwtdmFsdWUgc3RyaW5ncy5cclxuXHRcdFx0XHRcdCBUaHVzLCB3ZSBjaGVjayBmb3IgYm90aCBmYWxzaW5lc3MgYW5kIHRoZXNlIHNwZWNpYWwgc3RyaW5ncy4gKi9cclxuXHRcdFx0XHRcdC8qIE51bGwtdmFsdWUgY2hlY2tpbmcgaXMgcGVyZm9ybWVkIHRvIGRlZmF1bHQgdGhlIHNwZWNpYWwgc3RyaW5ncyB0byAwIChmb3IgdGhlIHNha2Ugb2YgdHdlZW5pbmcpIG9yIHRoZWlyIGhvb2tcclxuXHRcdFx0XHRcdCB0ZW1wbGF0ZXMgYXMgZGVmaW5lZCBhcyBDU1MuSG9va3MgKGZvciB0aGUgc2FrZSBvZiBob29rIGluamVjdGlvbi9leHRyYWN0aW9uKS4gKi9cclxuXHRcdFx0XHRcdC8qIE5vdGU6IENocm9tZSByZXR1cm5zIFwicmdiYSgwLCAwLCAwLCAwKVwiIGZvciBhbiB1bmRlZmluZWQgY29sb3Igd2hlcmVhcyBJRSByZXR1cm5zIFwidHJhbnNwYXJlbnRcIi4gKi9cclxuXHRcdFx0XHRcdHJldHVybiAoIXZhbHVlIHx8IC9eKG5vbmV8YXV0b3x0cmFuc3BhcmVudHwocmdiYVxcKDAsID8wLCA/MCwgPzBcXCkpKSQvaS50ZXN0KHZhbHVlKSk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKiBSZXRyaWV2ZSBhIHByb3BlcnR5J3MgZGVmYXVsdCB1bml0IHR5cGUuIFVzZWQgZm9yIGFzc2lnbmluZyBhIHVuaXQgdHlwZSB3aGVuIG9uZSBpcyBub3Qgc3VwcGxpZWQgYnkgdGhlIHVzZXIuICovXHJcblx0XHRcdFx0Z2V0VW5pdFR5cGU6IGZ1bmN0aW9uKHByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHRpZiAoL14ocm90YXRlfHNrZXcpL2kudGVzdChwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIFwiZGVnXCI7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKC8oXihzY2FsZXxzY2FsZVh8c2NhbGVZfHNjYWxlWnxhbHBoYXxmbGV4R3Jvd3xmbGV4SGVpZ2h0fHpJbmRleHxmb250V2VpZ2h0KSQpfCgob3BhY2l0eXxyZWR8Z3JlZW58Ymx1ZXxhbHBoYSkkKS9pLnRlc3QocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdC8qIFRoZSBhYm92ZSBwcm9wZXJ0aWVzIGFyZSB1bml0bGVzcy4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvKiBEZWZhdWx0IHRvIHB4IGZvciBhbGwgb3RoZXIgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIFwicHhcIjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8qIEhUTUwgZWxlbWVudHMgZGVmYXVsdCB0byBhbiBhc3NvY2lhdGVkIGRpc3BsYXkgdHlwZSB3aGVuIHRoZXkncmUgbm90IHNldCB0byBkaXNwbGF5Om5vbmUuICovXHJcblx0XHRcdFx0LyogTm90ZTogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciBjb3JyZWN0bHkgc2V0dGluZyB0aGUgbm9uLVwibm9uZVwiIGRpc3BsYXkgdmFsdWUgaW4gY2VydGFpbiBWZWxvY2l0eSByZWRpcmVjdHMsIHN1Y2ggYXMgZmFkZUluL091dC4gKi9cclxuXHRcdFx0XHRnZXREaXNwbGF5VHlwZTogZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0dmFyIHRhZ05hbWUgPSBlbGVtZW50ICYmIGVsZW1lbnQudGFnTmFtZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKC9eKGJ8YmlnfGl8c21hbGx8dHR8YWJicnxhY3JvbnltfGNpdGV8Y29kZXxkZm58ZW18a2JkfHN0cm9uZ3xzYW1wfHZhcnxhfGJkb3xicnxpbWd8bWFwfG9iamVjdHxxfHNjcmlwdHxzcGFufHN1YnxzdXB8YnV0dG9ufGlucHV0fGxhYmVsfHNlbGVjdHx0ZXh0YXJlYSkkL2kudGVzdCh0YWdOYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJpbmxpbmVcIjtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoL14obGkpJC9pLnRlc3QodGFnTmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIFwibGlzdC1pdGVtXCI7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKC9eKHRyKSQvaS50ZXN0KHRhZ05hbWUpKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBcInRhYmxlLXJvd1wiO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICgvXih0YWJsZSkkL2kudGVzdCh0YWdOYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJ0YWJsZVwiO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICgvXih0Ym9keSkkL2kudGVzdCh0YWdOYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJ0YWJsZS1yb3ctZ3JvdXBcIjtcclxuXHRcdFx0XHRcdFx0LyogRGVmYXVsdCB0byBcImJsb2NrXCIgd2hlbiBubyBtYXRjaCBpcyBmb3VuZC4gKi9cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBcImJsb2NrXCI7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvKiBUaGUgY2xhc3MgYWRkL3JlbW92ZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gdGVtcG9yYXJpbHkgYXBwbHkgYSBcInZlbG9jaXR5LWFuaW1hdGluZ1wiIGNsYXNzIHRvIGVsZW1lbnRzIHdoaWxlIHRoZXkncmUgYW5pbWF0aW5nLiAqL1xyXG5cdFx0XHRcdGFkZENsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHtcclxuXHRcdFx0XHRcdGlmIChlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFR5cGUuaXNTdHJpbmcoZWxlbWVudC5jbGFzc05hbWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gRWxlbWVudC5jbGFzc05hbWUgaXMgYXJvdW5kIDE1JSBmYXN0ZXIgdGhlbiBzZXQvZ2V0QXR0cmlidXRlXHJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5jbGFzc05hbWUgKz0gKGVsZW1lbnQuY2xhc3NOYW1lLmxlbmd0aCA/IFwiIFwiIDogXCJcIikgKyBjbGFzc05hbWU7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gV29yayBhcm91bmQgZm9yIElFIHN0cmljdCBtb2RlIGFuaW1hdGluZyBTVkcgLSBhbmQgYW55dGhpbmcgZWxzZSB0aGF0IGRvZXNuJ3QgYmVoYXZlIGNvcnJlY3RseSAtIHRoZSBzYW1lIHdheSBqUXVlcnkgZG9lcyBpdFxyXG5cdFx0XHRcdFx0XHRcdHZhciBjdXJyZW50Q2xhc3MgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShJRSA8PSA3ID8gXCJjbGFzc05hbWVcIiA6IFwiY2xhc3NcIikgfHwgXCJcIjtcclxuXHJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBjdXJyZW50Q2xhc3MgKyAoY3VycmVudENsYXNzID8gXCIgXCIgOiBcIlwiKSArIGNsYXNzTmFtZSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHJlbW92ZUNsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHtcclxuXHRcdFx0XHRcdGlmIChlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFR5cGUuaXNTdHJpbmcoZWxlbWVudC5jbGFzc05hbWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gRWxlbWVudC5jbGFzc05hbWUgaXMgYXJvdW5kIDE1JSBmYXN0ZXIgdGhlbiBzZXQvZ2V0QXR0cmlidXRlXHJcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogTmVlZCBzb21lIGpzcGVyZiB0ZXN0cyBvbiBwZXJmb3JtYW5jZSAtIGNhbiB3ZSBnZXQgcmlkIG9mIHRoZSByZWdleCBhbmQgbWF5YmUgdXNlIHNwbGl0IC8gYXJyYXkgbWFuaXB1bGF0aW9uP1xyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUudG9TdHJpbmcoKS5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIGNsYXNzTmFtZS5zcGxpdChcIiBcIikuam9pbihcInxcIikgKyBcIihcXFxcc3wkKVwiLCBcImdpXCIpLCBcIiBcIik7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gV29yayBhcm91bmQgZm9yIElFIHN0cmljdCBtb2RlIGFuaW1hdGluZyBTVkcgLSBhbmQgYW55dGhpbmcgZWxzZSB0aGF0IGRvZXNuJ3QgYmVoYXZlIGNvcnJlY3RseSAtIHRoZSBzYW1lIHdheSBqUXVlcnkgZG9lcyBpdFxyXG5cdFx0XHRcdFx0XHRcdHZhciBjdXJyZW50Q2xhc3MgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShJRSA8PSA3ID8gXCJjbGFzc05hbWVcIiA6IFwiY2xhc3NcIikgfHwgXCJcIjtcclxuXHJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBjdXJyZW50Q2xhc3MucmVwbGFjZShuZXcgUmVnRXhwKFwiKF58XFxzKVwiICsgY2xhc3NOYW1lLnNwbGl0KFwiIFwiKS5qb2luKFwifFwiKSArIFwiKFxcc3wkKVwiLCBcImdpXCIpLCBcIiBcIikpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgU3R5bGUgR2V0dGluZyAmIFNldHRpbmdcclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHQvKiBUaGUgc2luZ3VsYXIgZ2V0UHJvcGVydHlWYWx1ZSwgd2hpY2ggcm91dGVzIHRoZSBsb2dpYyBmb3IgYWxsIG5vcm1hbGl6YXRpb25zLCBob29rcywgYW5kIHN0YW5kYXJkIENTUyBwcm9wZXJ0aWVzLiAqL1xyXG5cdFx0XHRnZXRQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgcm9vdFByb3BlcnR5VmFsdWUsIGZvcmNlU3R5bGVMb29rdXApIHtcclxuXHRcdFx0XHQvKiBHZXQgYW4gZWxlbWVudCdzIGNvbXB1dGVkIHByb3BlcnR5IHZhbHVlLiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IFJldHJpZXZpbmcgdGhlIHZhbHVlIG9mIGEgQ1NTIHByb3BlcnR5IGNhbm5vdCBzaW1wbHkgYmUgcGVyZm9ybWVkIGJ5IGNoZWNraW5nIGFuIGVsZW1lbnQnc1xyXG5cdFx0XHRcdCBzdHlsZSBhdHRyaWJ1dGUgKHdoaWNoIG9ubHkgcmVmbGVjdHMgdXNlci1kZWZpbmVkIHZhbHVlcykuIEluc3RlYWQsIHRoZSBicm93c2VyIG11c3QgYmUgcXVlcmllZCBmb3IgYSBwcm9wZXJ0eSdzXHJcblx0XHRcdFx0ICpjb21wdXRlZCogdmFsdWUuIFlvdSBjYW4gcmVhZCBtb3JlIGFib3V0IGdldENvbXB1dGVkU3R5bGUgaGVyZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvQVBJL3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlICovXHJcblx0XHRcdFx0ZnVuY3Rpb24gY29tcHV0ZVByb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHkpIHtcclxuXHRcdFx0XHRcdC8qIFdoZW4gYm94LXNpemluZyBpc24ndCBzZXQgdG8gYm9yZGVyLWJveCwgaGVpZ2h0IGFuZCB3aWR0aCBzdHlsZSB2YWx1ZXMgYXJlIGluY29ycmVjdGx5IGNvbXB1dGVkIHdoZW4gYW5cclxuXHRcdFx0XHRcdCBlbGVtZW50J3Mgc2Nyb2xsYmFycyBhcmUgdmlzaWJsZSAod2hpY2ggZXhwYW5kcyB0aGUgZWxlbWVudCdzIGRpbWVuc2lvbnMpLiBUaHVzLCB3ZSBkZWZlciB0byB0aGUgbW9yZSBhY2N1cmF0ZVxyXG5cdFx0XHRcdFx0IG9mZnNldEhlaWdodC9XaWR0aCBwcm9wZXJ0eSwgd2hpY2ggaW5jbHVkZXMgdGhlIHRvdGFsIGRpbWVuc2lvbnMgZm9yIGludGVyaW9yLCBib3JkZXIsIHBhZGRpbmcsIGFuZCBzY3JvbGxiYXIuXHJcblx0XHRcdFx0XHQgV2Ugc3VidHJhY3QgYm9yZGVyIGFuZCBwYWRkaW5nIHRvIGdldCB0aGUgc3VtIG9mIGludGVyaW9yICsgc2Nyb2xsYmFyLiAqL1xyXG5cdFx0XHRcdFx0dmFyIGNvbXB1dGVkVmFsdWUgPSAwO1xyXG5cclxuXHRcdFx0XHRcdC8qIElFPD04IGRvZXNuJ3Qgc3VwcG9ydCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSwgdGh1cyB3ZSBkZWZlciB0byBqUXVlcnksIHdoaWNoIGhhcyBhbiBleHRlbnNpdmUgYXJyYXlcclxuXHRcdFx0XHRcdCBvZiBoYWNrcyB0byBhY2N1cmF0ZWx5IHJldHJpZXZlIElFOCBwcm9wZXJ0eSB2YWx1ZXMuIFJlLWltcGxlbWVudGluZyB0aGF0IGxvZ2ljIGhlcmUgaXMgbm90IHdvcnRoIGJsb2F0aW5nIHRoZVxyXG5cdFx0XHRcdFx0IGNvZGViYXNlIGZvciBhIGR5aW5nIGJyb3dzZXIuIFRoZSBwZXJmb3JtYW5jZSByZXBlcmN1c3Npb25zIG9mIHVzaW5nIGpRdWVyeSBoZXJlIGFyZSBtaW5pbWFsIHNpbmNlXHJcblx0XHRcdFx0XHQgVmVsb2NpdHkgaXMgb3B0aW1pemVkIHRvIHJhcmVseSAoYW5kIHNvbWV0aW1lcyBuZXZlcikgcXVlcnkgdGhlIERPTS4gRnVydGhlciwgdGhlICQuY3NzKCkgY29kZXBhdGggaXNuJ3QgdGhhdCBzbG93LiAqL1xyXG5cdFx0XHRcdFx0aWYgKElFIDw9IDgpIHtcclxuXHRcdFx0XHRcdFx0Y29tcHV0ZWRWYWx1ZSA9ICQuY3NzKGVsZW1lbnQsIHByb3BlcnR5KTsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdC8qIEFsbCBvdGhlciBicm93c2VycyBzdXBwb3J0IGdldENvbXB1dGVkU3R5bGUuIFRoZSByZXR1cm5lZCBsaXZlIG9iamVjdCByZWZlcmVuY2UgaXMgY2FjaGVkIG9udG8gaXRzXHJcblx0XHRcdFx0XHRcdCBhc3NvY2lhdGVkIGVsZW1lbnQgc28gdGhhdCBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlZmV0Y2hlZCB1cG9uIGV2ZXJ5IEdFVC4gKi9cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdC8qIEJyb3dzZXJzIGRvIG5vdCByZXR1cm4gaGVpZ2h0IGFuZCB3aWR0aCB2YWx1ZXMgZm9yIGVsZW1lbnRzIHRoYXQgYXJlIHNldCB0byBkaXNwbGF5Olwibm9uZVwiLiBUaHVzLCB3ZSB0ZW1wb3JhcmlseVxyXG5cdFx0XHRcdFx0XHQgdG9nZ2xlIGRpc3BsYXkgdG8gdGhlIGVsZW1lbnQgdHlwZSdzIGRlZmF1bHQgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdHZhciB0b2dnbGVEaXNwbGF5ID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoL14od2lkdGh8aGVpZ2h0KSQvLnRlc3QocHJvcGVydHkpICYmIENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiZGlzcGxheVwiKSA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdHRvZ2dsZURpc3BsYXkgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdENTUy5zZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiZGlzcGxheVwiLCBDU1MuVmFsdWVzLmdldERpc3BsYXlUeXBlKGVsZW1lbnQpKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dmFyIHJldmVydERpc3BsYXkgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAodG9nZ2xlRGlzcGxheSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Q1NTLnNldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIWZvcmNlU3R5bGVMb29rdXApIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPT09IFwiaGVpZ2h0XCIgJiYgQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJib3hTaXppbmdcIikudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpICE9PSBcImJvcmRlci1ib3hcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGNvbnRlbnRCb3hIZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodCAtIChwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiYm9yZGVyVG9wV2lkdGhcIikpIHx8IDApIC0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJib3JkZXJCb3R0b21XaWR0aFwiKSkgfHwgMCkgLSAocGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcInBhZGRpbmdUb3BcIikpIHx8IDApIC0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJwYWRkaW5nQm90dG9tXCIpKSB8fCAwKTtcclxuXHRcdFx0XHRcdFx0XHRcdHJldmVydERpc3BsYXkoKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gY29udGVudEJveEhlaWdodDtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5ID09PSBcIndpZHRoXCIgJiYgQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJib3hTaXppbmdcIikudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpICE9PSBcImJvcmRlci1ib3hcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGNvbnRlbnRCb3hXaWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGggLSAocGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImJvcmRlckxlZnRXaWR0aFwiKSkgfHwgMCkgLSAocGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImJvcmRlclJpZ2h0V2lkdGhcIikpIHx8IDApIC0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJwYWRkaW5nTGVmdFwiKSkgfHwgMCkgLSAocGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcInBhZGRpbmdSaWdodFwiKSkgfHwgMCk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXZlcnREaXNwbGF5KCk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGNvbnRlbnRCb3hXaWR0aDtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHZhciBjb21wdXRlZFN0eWxlO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogRm9yIGVsZW1lbnRzIHRoYXQgVmVsb2NpdHkgaGFzbid0IGJlZW4gY2FsbGVkIG9uIGRpcmVjdGx5IChlLmcuIHdoZW4gVmVsb2NpdHkgcXVlcmllcyB0aGUgRE9NIG9uIGJlaGFsZlxyXG5cdFx0XHRcdFx0XHQgb2YgYSBwYXJlbnQgb2YgYW4gZWxlbWVudCBpdHMgYW5pbWF0aW5nKSwgcGVyZm9ybSBhIGRpcmVjdCBnZXRDb21wdXRlZFN0eWxlIGxvb2t1cCBzaW5jZSB0aGUgb2JqZWN0IGlzbid0IGNhY2hlZC4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKERhdGEoZWxlbWVudCkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0LyogSWYgdGhlIGNvbXB1dGVkU3R5bGUgb2JqZWN0IGhhcyB5ZXQgdG8gYmUgY2FjaGVkLCBkbyBzbyBub3cuICovXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIURhdGEoZWxlbWVudCkuY29tcHV0ZWRTdHlsZSkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbXB1dGVkU3R5bGUgPSBEYXRhKGVsZW1lbnQpLmNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0LyogSWYgY29tcHV0ZWRTdHlsZSBpcyBjYWNoZWQsIHVzZSBpdC4gKi9cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRjb21wdXRlZFN0eWxlID0gRGF0YShlbGVtZW50KS5jb21wdXRlZFN0eWxlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJRSBhbmQgRmlyZWZveCBkbyBub3QgcmV0dXJuIGEgdmFsdWUgZm9yIHRoZSBnZW5lcmljIGJvcmRlckNvbG9yIC0tIHRoZXkgb25seSByZXR1cm4gaW5kaXZpZHVhbCB2YWx1ZXMgZm9yIGVhY2ggYm9yZGVyIHNpZGUncyBjb2xvci5cclxuXHRcdFx0XHRcdFx0IEFsc28sIGluIGFsbCBicm93c2Vycywgd2hlbiBib3JkZXIgY29sb3JzIGFyZW4ndCBhbGwgdGhlIHNhbWUsIGEgY29tcG91bmQgdmFsdWUgaXMgcmV0dXJuZWQgdGhhdCBWZWxvY2l0eSBpc24ndCBzZXR1cCB0byBwYXJzZS5cclxuXHRcdFx0XHRcdFx0IFNvLCBhcyBhIHBvbHlmaWxsIGZvciBxdWVyeWluZyBpbmRpdmlkdWFsIGJvcmRlciBzaWRlIGNvbG9ycywgd2UganVzdCByZXR1cm4gdGhlIHRvcCBib3JkZXIncyBjb2xvciBhbmQgYW5pbWF0ZSBhbGwgYm9yZGVycyBmcm9tIHRoYXQgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eSA9PT0gXCJib3JkZXJDb2xvclwiKSB7XHJcblx0XHRcdFx0XHRcdFx0cHJvcGVydHkgPSBcImJvcmRlclRvcENvbG9yXCI7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIElFOSBoYXMgYSBidWcgaW4gd2hpY2ggdGhlIFwiZmlsdGVyXCIgcHJvcGVydHkgbXVzdCBiZSBhY2Nlc3NlZCBmcm9tIGNvbXB1dGVkU3R5bGUgdXNpbmcgdGhlIGdldFByb3BlcnR5VmFsdWUgbWV0aG9kXHJcblx0XHRcdFx0XHRcdCBpbnN0ZWFkIG9mIGEgZGlyZWN0IHByb3BlcnR5IGxvb2t1cC4gVGhlIGdldFByb3BlcnR5VmFsdWUgbWV0aG9kIGlzIHNsb3dlciB0aGFuIGEgZGlyZWN0IGxvb2t1cCwgd2hpY2ggaXMgd2h5IHdlIGF2b2lkIGl0IGJ5IGRlZmF1bHQuICovXHJcblx0XHRcdFx0XHRcdGlmIChJRSA9PT0gOSAmJiBwcm9wZXJ0eSA9PT0gXCJmaWx0ZXJcIikge1xyXG5cdFx0XHRcdFx0XHRcdGNvbXB1dGVkVmFsdWUgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpOyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRjb21wdXRlZFZhbHVlID0gY29tcHV0ZWRTdHlsZVtwcm9wZXJ0eV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIEZhbGwgYmFjayB0byB0aGUgcHJvcGVydHkncyBzdHlsZSB2YWx1ZSAoaWYgZGVmaW5lZCkgd2hlbiBjb21wdXRlZFZhbHVlIHJldHVybnMgbm90aGluZyxcclxuXHRcdFx0XHRcdFx0IHdoaWNoIGNhbiBoYXBwZW4gd2hlbiB0aGUgZWxlbWVudCBoYXNuJ3QgYmVlbiBwYWludGVkLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoY29tcHV0ZWRWYWx1ZSA9PT0gXCJcIiB8fCBjb21wdXRlZFZhbHVlID09PSBudWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tcHV0ZWRWYWx1ZSA9IGVsZW1lbnQuc3R5bGVbcHJvcGVydHldO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRyZXZlcnREaXNwbGF5KCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogRm9yIHRvcCwgcmlnaHQsIGJvdHRvbSwgYW5kIGxlZnQgKFRSQkwpIHZhbHVlcyB0aGF0IGFyZSBzZXQgdG8gXCJhdXRvXCIgb24gZWxlbWVudHMgb2YgXCJmaXhlZFwiIG9yIFwiYWJzb2x1dGVcIiBwb3NpdGlvbixcclxuXHRcdFx0XHRcdCBkZWZlciB0byBqUXVlcnkgZm9yIGNvbnZlcnRpbmcgXCJhdXRvXCIgdG8gYSBudW1lcmljIHZhbHVlLiAoRm9yIGVsZW1lbnRzIHdpdGggYSBcInN0YXRpY1wiIG9yIFwicmVsYXRpdmVcIiBwb3NpdGlvbiwgXCJhdXRvXCIgaGFzIHRoZSBzYW1lXHJcblx0XHRcdFx0XHQgZWZmZWN0IGFzIGJlaW5nIHNldCB0byAwLCBzbyBubyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeS4pICovXHJcblx0XHRcdFx0XHQvKiBBbiBleGFtcGxlIG9mIHdoeSBudW1lcmljIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5OiBXaGVuIGFuIGVsZW1lbnQgd2l0aCBcInBvc2l0aW9uOmFic29sdXRlXCIgaGFzIGFuIHVudG91Y2hlZCBcImxlZnRcIlxyXG5cdFx0XHRcdFx0IHByb3BlcnR5LCB3aGljaCByZXZlcnRzIHRvIFwiYXV0b1wiLCBsZWZ0J3MgdmFsdWUgaXMgMCByZWxhdGl2ZSB0byBpdHMgcGFyZW50IGVsZW1lbnQsIGJ1dCBpcyBvZnRlbiBub24temVybyByZWxhdGl2ZVxyXG5cdFx0XHRcdFx0IHRvIGl0cyAqY29udGFpbmluZyogKG5vdCBwYXJlbnQpIGVsZW1lbnQsIHdoaWNoIGlzIHRoZSBuZWFyZXN0IFwicG9zaXRpb246cmVsYXRpdmVcIiBhbmNlc3RvciBvciB0aGUgdmlld3BvcnQgKGFuZCBhbHdheXMgdGhlIHZpZXdwb3J0IGluIHRoZSBjYXNlIG9mIFwicG9zaXRpb246Zml4ZWRcIikuICovXHJcblx0XHRcdFx0XHRpZiAoY29tcHV0ZWRWYWx1ZSA9PT0gXCJhdXRvXCIgJiYgL14odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KSQvaS50ZXN0KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHR2YXIgcG9zaXRpb24gPSBjb21wdXRlUHJvcGVydHlWYWx1ZShlbGVtZW50LCBcInBvc2l0aW9uXCIpOyAvKiBHRVQgKi9cclxuXHJcblx0XHRcdFx0XHRcdC8qIEZvciBhYnNvbHV0ZSBwb3NpdGlvbmluZywgalF1ZXJ5J3MgJC5wb3NpdGlvbigpIG9ubHkgcmV0dXJucyB2YWx1ZXMgZm9yIHRvcCBhbmQgbGVmdDtcclxuXHRcdFx0XHRcdFx0IHJpZ2h0IGFuZCBib3R0b20gd2lsbCBoYXZlIHRoZWlyIFwiYXV0b1wiIHZhbHVlIHJldmVydGVkIHRvIDAuICovXHJcblx0XHRcdFx0XHRcdC8qIE5vdGU6IEEgalF1ZXJ5IG9iamVjdCBtdXN0IGJlIGNyZWF0ZWQgaGVyZSBzaW5jZSBqUXVlcnkgZG9lc24ndCBoYXZlIGEgbG93LWxldmVsIGFsaWFzIGZvciAkLnBvc2l0aW9uKCkuXHJcblx0XHRcdFx0XHRcdCBOb3QgYSBiaWcgZGVhbCBzaW5jZSB3ZSdyZSBjdXJyZW50bHkgaW4gYSBHRVQgYmF0Y2ggYW55d2F5LiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAocG9zaXRpb24gPT09IFwiZml4ZWRcIiB8fCAocG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiAmJiAvdG9wfGxlZnQvaS50ZXN0KHByb3BlcnR5KSkpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBqUXVlcnkgc3RyaXBzIHRoZSBwaXhlbCB1bml0IGZyb20gaXRzIHJldHVybmVkIHZhbHVlczsgd2UgcmUtYWRkIGl0IGhlcmUgdG8gY29uZm9ybSB3aXRoIGNvbXB1dGVQcm9wZXJ0eVZhbHVlJ3MgYmVoYXZpb3IuICovXHJcblx0XHRcdFx0XHRcdFx0Y29tcHV0ZWRWYWx1ZSA9ICQoZWxlbWVudCkucG9zaXRpb24oKVtwcm9wZXJ0eV0gKyBcInB4XCI7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIGNvbXB1dGVkVmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR2YXIgcHJvcGVydHlWYWx1ZTtcclxuXHJcblx0XHRcdFx0LyogSWYgdGhpcyBpcyBhIGhvb2tlZCBwcm9wZXJ0eSAoZS5nLiBcImNsaXBMZWZ0XCIgaW5zdGVhZCBvZiB0aGUgcm9vdCBwcm9wZXJ0eSBvZiBcImNsaXBcIiksXHJcblx0XHRcdFx0IGV4dHJhY3QgdGhlIGhvb2sncyB2YWx1ZSBmcm9tIGEgbm9ybWFsaXplZCByb290UHJvcGVydHlWYWx1ZSB1c2luZyBDU1MuSG9va3MuZXh0cmFjdFZhbHVlKCkuICovXHJcblx0XHRcdFx0aWYgKENTUy5Ib29rcy5yZWdpc3RlcmVkW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0dmFyIGhvb2sgPSBwcm9wZXJ0eSxcclxuXHRcdFx0XHRcdFx0XHRob29rUm9vdCA9IENTUy5Ib29rcy5nZXRSb290KGhvb2spO1xyXG5cclxuXHRcdFx0XHRcdC8qIElmIGEgY2FjaGVkIHJvb3RQcm9wZXJ0eVZhbHVlIHdhc24ndCBwYXNzZWQgaW4gKHdoaWNoIFZlbG9jaXR5IGFsd2F5cyBhdHRlbXB0cyB0byBkbyBpbiBvcmRlciB0byBhdm9pZCByZXF1ZXJ5aW5nIHRoZSBET00pLFxyXG5cdFx0XHRcdFx0IHF1ZXJ5IHRoZSBET00gZm9yIHRoZSByb290IHByb3BlcnR5J3MgdmFsdWUuICovXHJcblx0XHRcdFx0XHRpZiAocm9vdFByb3BlcnR5VmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHQvKiBTaW5jZSB0aGUgYnJvd3NlciBpcyBub3cgYmVpbmcgZGlyZWN0bHkgcXVlcmllZCwgdXNlIHRoZSBvZmZpY2lhbCBwb3N0LXByZWZpeGluZyBwcm9wZXJ0eSBuYW1lIGZvciB0aGlzIGxvb2t1cC4gKi9cclxuXHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWUgPSBDU1MuZ2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBDU1MuTmFtZXMucHJlZml4Q2hlY2soaG9va1Jvb3QpWzBdKTsgLyogR0VUICovXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgdGhpcyByb290IGhhcyBhIG5vcm1hbGl6YXRpb24gcmVnaXN0ZXJlZCwgcGVmb3JtIHRoZSBhc3NvY2lhdGVkIG5vcm1hbGl6YXRpb24gZXh0cmFjdGlvbi4gKi9cclxuXHRcdFx0XHRcdGlmIChDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFtob29rUm9vdF0pIHtcclxuXHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWUgPSBDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFtob29rUm9vdF0oXCJleHRyYWN0XCIsIGVsZW1lbnQsIHJvb3RQcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBFeHRyYWN0IHRoZSBob29rJ3MgdmFsdWUuICovXHJcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gQ1NTLkhvb2tzLmV4dHJhY3RWYWx1ZShob29rLCByb290UHJvcGVydHlWYWx1ZSk7XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgdGhpcyBpcyBhIG5vcm1hbGl6ZWQgcHJvcGVydHkgKGUuZy4gXCJvcGFjaXR5XCIgYmVjb21lcyBcImZpbHRlclwiIGluIDw9SUU4KSBvciBcInRyYW5zbGF0ZVhcIiBiZWNvbWVzIFwidHJhbnNmb3JtXCIpLFxyXG5cdFx0XHRcdFx0IG5vcm1hbGl6ZSB0aGUgcHJvcGVydHkncyBuYW1lIGFuZCB2YWx1ZSwgYW5kIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIHRyYW5zZm9ybXMuICovXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBOb3JtYWxpemluZyBhIHByb3BlcnR5IGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSBmcm9tIGhvb2tpbmcgYSBwcm9wZXJ0eSBzaW5jZSBob29rLWV4dHJhY3RlZCB2YWx1ZXMgYXJlIHN0cmljdGx5XHJcblx0XHRcdFx0XHQgbnVtZXJpY2FsIGFuZCB0aGVyZWZvcmUgZG8gbm90IHJlcXVpcmUgbm9ybWFsaXphdGlvbiBleHRyYWN0aW9uLiAqL1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHR2YXIgbm9ybWFsaXplZFByb3BlcnR5TmFtZSxcclxuXHRcdFx0XHRcdFx0XHRub3JtYWxpemVkUHJvcGVydHlWYWx1ZTtcclxuXHJcblx0XHRcdFx0XHRub3JtYWxpemVkUHJvcGVydHlOYW1lID0gQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbcHJvcGVydHldKFwibmFtZVwiLCBlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0XHQvKiBUcmFuc2Zvcm0gdmFsdWVzIGFyZSBjYWxjdWxhdGVkIHZpYSBub3JtYWxpemF0aW9uIGV4dHJhY3Rpb24gKHNlZSBiZWxvdyksIHdoaWNoIGNoZWNrcyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgdHJhbnNmb3JtQ2FjaGUuXHJcblx0XHRcdFx0XHQgQXQgbm8gcG9pbnQgZG8gdHJhbnNmb3JtIEdFVHMgZXZlciBhY3R1YWxseSBxdWVyeSB0aGUgRE9NOyBpbml0aWFsIHN0eWxlc2hlZXQgdmFsdWVzIGFyZSBuZXZlciBwcm9jZXNzZWQuXHJcblx0XHRcdFx0XHQgVGhpcyBpcyBiZWNhdXNlIHBhcnNpbmcgM0QgdHJhbnNmb3JtIG1hdHJpY2VzIGlzIG5vdCBhbHdheXMgYWNjdXJhdGUgYW5kIHdvdWxkIGJsb2F0IG91ciBjb2RlYmFzZTtcclxuXHRcdFx0XHRcdCB0aHVzLCBub3JtYWxpemF0aW9uIGV4dHJhY3Rpb24gZGVmYXVsdHMgaW5pdGlhbCB0cmFuc2Zvcm0gdmFsdWVzIHRvIHRoZWlyIHplcm8tdmFsdWVzIChlLmcuIDEgZm9yIHNjYWxlWCBhbmQgMCBmb3IgdHJhbnNsYXRlWCkuICovXHJcblx0XHRcdFx0XHRpZiAobm9ybWFsaXplZFByb3BlcnR5TmFtZSAhPT0gXCJ0cmFuc2Zvcm1cIikge1xyXG5cdFx0XHRcdFx0XHRub3JtYWxpemVkUHJvcGVydHlWYWx1ZSA9IGNvbXB1dGVQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIENTUy5OYW1lcy5wcmVmaXhDaGVjayhub3JtYWxpemVkUHJvcGVydHlOYW1lKVswXSk7IC8qIEdFVCAqL1xyXG5cclxuXHRcdFx0XHRcdFx0LyogSWYgdGhlIHZhbHVlIGlzIGEgQ1NTIG51bGwtdmFsdWUgYW5kIHRoaXMgcHJvcGVydHkgaGFzIGEgaG9vayB0ZW1wbGF0ZSwgdXNlIHRoYXQgemVyby12YWx1ZSB0ZW1wbGF0ZSBzbyB0aGF0IGhvb2tzIGNhbiBiZSBleHRyYWN0ZWQgZnJvbSBpdC4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKENTUy5WYWx1ZXMuaXNDU1NOdWxsVmFsdWUobm9ybWFsaXplZFByb3BlcnR5VmFsdWUpICYmIENTUy5Ib29rcy50ZW1wbGF0ZXNbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHRcdFx0bm9ybWFsaXplZFByb3BlcnR5VmFsdWUgPSBDU1MuSG9va3MudGVtcGxhdGVzW3Byb3BlcnR5XVsxXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFtwcm9wZXJ0eV0oXCJleHRyYWN0XCIsIGVsZW1lbnQsIG5vcm1hbGl6ZWRQcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIElmIGEgKG51bWVyaWMpIHZhbHVlIHdhc24ndCBwcm9kdWNlZCB2aWEgaG9vayBleHRyYWN0aW9uIG9yIG5vcm1hbGl6YXRpb24sIHF1ZXJ5IHRoZSBET00uICovXHJcblx0XHRcdFx0aWYgKCEvXltcXGQtXS8udGVzdChwcm9wZXJ0eVZhbHVlKSkge1xyXG5cdFx0XHRcdFx0LyogRm9yIFNWRyBlbGVtZW50cywgZGltZW5zaW9uYWwgcHJvcGVydGllcyAod2hpY2ggU1ZHQXR0cmlidXRlKCkgZGV0ZWN0cykgYXJlIHR3ZWVuZWQgdmlhXHJcblx0XHRcdFx0XHQgdGhlaXIgSFRNTCBhdHRyaWJ1dGUgdmFsdWVzIGluc3RlYWQgb2YgdGhlaXIgQ1NTIHN0eWxlIHZhbHVlcy4gKi9cclxuXHRcdFx0XHRcdHZhciBkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLmlzU1ZHICYmIENTUy5OYW1lcy5TVkdBdHRyaWJ1dGUocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdC8qIFNpbmNlIHRoZSBoZWlnaHQvd2lkdGggYXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIHNldCBtYW51YWxseSwgdGhleSBkb24ndCByZWZsZWN0IGNvbXB1dGVkIHZhbHVlcy5cclxuXHRcdFx0XHRcdFx0IFRodXMsIHdlIHVzZSB1c2UgZ2V0QkJveCgpIHRvIGVuc3VyZSB3ZSBhbHdheXMgZ2V0IHZhbHVlcyBmb3IgZWxlbWVudHMgd2l0aCB1bmRlZmluZWQgaGVpZ2h0L3dpZHRoIGF0dHJpYnV0ZXMuICovXHJcblx0XHRcdFx0XHRcdGlmICgvXihoZWlnaHR8d2lkdGgpJC9pLnRlc3QocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogRmlyZWZveCB0aHJvd3MgYW4gZXJyb3IgaWYgLmdldEJCb3goKSBpcyBjYWxsZWQgb24gYW4gU1ZHIHRoYXQgaXNuJ3QgYXR0YWNoZWQgdG8gdGhlIERPTS4gKi9cclxuXHRcdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IGVsZW1lbnQuZ2V0QkJveCgpW3Byb3BlcnR5XTtcclxuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IDA7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdC8qIE90aGVyd2lzZSwgYWNjZXNzIHRoZSBhdHRyaWJ1dGUgdmFsdWUgZGlyZWN0bHkuICovXHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKHByb3BlcnR5KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IGNvbXB1dGVQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIENTUy5OYW1lcy5wcmVmaXhDaGVjayhwcm9wZXJ0eSlbMF0pOyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIFNpbmNlIHByb3BlcnR5IGxvb2t1cHMgYXJlIGZvciBhbmltYXRpb24gcHVycG9zZXMgKHdoaWNoIGVudGFpbHMgY29tcHV0aW5nIHRoZSBudW1lcmljIGRlbHRhIGJldHdlZW4gc3RhcnQgYW5kIGVuZCB2YWx1ZXMpLFxyXG5cdFx0XHRcdCBjb252ZXJ0IENTUyBudWxsLXZhbHVlcyB0byBhbiBpbnRlZ2VyIG9mIHZhbHVlIDAuICovXHJcblx0XHRcdFx0aWYgKENTUy5WYWx1ZXMuaXNDU1NOdWxsVmFsdWUocHJvcGVydHlWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSAwO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKFZlbG9jaXR5LmRlYnVnID49IDIpIHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKFwiR2V0IFwiICsgcHJvcGVydHkgKyBcIjogXCIgKyBwcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiBwcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKiBUaGUgc2luZ3VsYXIgc2V0UHJvcGVydHlWYWx1ZSwgd2hpY2ggcm91dGVzIHRoZSBsb2dpYyBmb3IgYWxsIG5vcm1hbGl6YXRpb25zLCBob29rcywgYW5kIHN0YW5kYXJkIENTUyBwcm9wZXJ0aWVzLiAqL1xyXG5cdFx0XHRzZXRQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSwgcHJvcGVydHlWYWx1ZSwgcm9vdFByb3BlcnR5VmFsdWUsIHNjcm9sbERhdGEpIHtcclxuXHRcdFx0XHR2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHk7XHJcblxyXG5cdFx0XHRcdC8qIEluIG9yZGVyIHRvIGJlIHN1YmplY3RlZCB0byBjYWxsIG9wdGlvbnMgYW5kIGVsZW1lbnQgcXVldWVpbmcsIHNjcm9sbCBhbmltYXRpb24gaXMgcm91dGVkIHRocm91Z2ggVmVsb2NpdHkgYXMgaWYgaXQgd2VyZSBhIHN0YW5kYXJkIENTUyBwcm9wZXJ0eS4gKi9cclxuXHRcdFx0XHRpZiAocHJvcGVydHkgPT09IFwic2Nyb2xsXCIpIHtcclxuXHRcdFx0XHRcdC8qIElmIGEgY29udGFpbmVyIG9wdGlvbiBpcyBwcmVzZW50LCBzY3JvbGwgdGhlIGNvbnRhaW5lciBpbnN0ZWFkIG9mIHRoZSBicm93c2VyIHdpbmRvdy4gKi9cclxuXHRcdFx0XHRcdGlmIChzY3JvbGxEYXRhLmNvbnRhaW5lcikge1xyXG5cdFx0XHRcdFx0XHRzY3JvbGxEYXRhLmNvbnRhaW5lcltcInNjcm9sbFwiICsgc2Nyb2xsRGF0YS5kaXJlY3Rpb25dID0gcHJvcGVydHlWYWx1ZTtcclxuXHRcdFx0XHRcdFx0LyogT3RoZXJ3aXNlLCBWZWxvY2l0eSBkZWZhdWx0cyB0byBzY3JvbGxpbmcgdGhlIGJyb3dzZXIgd2luZG93LiAqL1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0aWYgKHNjcm9sbERhdGEuZGlyZWN0aW9uID09PSBcIkxlZnRcIikge1xyXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zY3JvbGxUbyhwcm9wZXJ0eVZhbHVlLCBzY3JvbGxEYXRhLmFsdGVybmF0ZVZhbHVlKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2Nyb2xsVG8oc2Nyb2xsRGF0YS5hbHRlcm5hdGVWYWx1ZSwgcHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0LyogVHJhbnNmb3JtcyAodHJhbnNsYXRlWCwgcm90YXRlWiwgZXRjLikgYXJlIGFwcGxpZWQgdG8gYSBwZXItZWxlbWVudCB0cmFuc2Zvcm1DYWNoZSBvYmplY3QsIHdoaWNoIGlzIG1hbnVhbGx5IGZsdXNoZWQgdmlhIGZsdXNoVHJhbnNmb3JtQ2FjaGUoKS5cclxuXHRcdFx0XHRcdCBUaHVzLCBmb3Igbm93LCB3ZSBtZXJlbHkgY2FjaGUgdHJhbnNmb3JtcyBiZWluZyBTRVQuICovXHJcblx0XHRcdFx0XHRpZiAoQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbcHJvcGVydHldICYmIENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XShcIm5hbWVcIiwgZWxlbWVudCkgPT09IFwidHJhbnNmb3JtXCIpIHtcclxuXHRcdFx0XHRcdFx0LyogUGVyZm9ybSBhIG5vcm1hbGl6YXRpb24gaW5qZWN0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHQvKiBOb3RlOiBUaGUgbm9ybWFsaXphdGlvbiBsb2dpYyBoYW5kbGVzIHRoZSB0cmFuc2Zvcm1DYWNoZSB1cGRhdGluZy4gKi9cclxuXHRcdFx0XHRcdFx0Q1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbcHJvcGVydHldKFwiaW5qZWN0XCIsIGVsZW1lbnQsIHByb3BlcnR5VmFsdWUpO1xyXG5cclxuXHRcdFx0XHRcdFx0cHJvcGVydHlOYW1lID0gXCJ0cmFuc2Zvcm1cIjtcclxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGVbcHJvcGVydHldO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0LyogSW5qZWN0IGhvb2tzLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoQ1NTLkhvb2tzLnJlZ2lzdGVyZWRbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGhvb2tOYW1lID0gcHJvcGVydHksXHJcblx0XHRcdFx0XHRcdFx0XHRcdGhvb2tSb290ID0gQ1NTLkhvb2tzLmdldFJvb3QocHJvcGVydHkpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiBhIGNhY2hlZCByb290UHJvcGVydHlWYWx1ZSB3YXMgbm90IHByb3ZpZGVkLCBxdWVyeSB0aGUgRE9NIGZvciB0aGUgaG9va1Jvb3QncyBjdXJyZW50IHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gcm9vdFByb3BlcnR5VmFsdWUgfHwgQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgaG9va1Jvb3QpOyAvKiBHRVQgKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IENTUy5Ib29rcy5pbmplY3RWYWx1ZShob29rTmFtZSwgcHJvcGVydHlWYWx1ZSwgcm9vdFByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5ID0gaG9va1Jvb3Q7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIE5vcm1hbGl6ZSBuYW1lcyBhbmQgdmFsdWVzLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XShcImluamVjdFwiLCBlbGVtZW50LCBwcm9wZXJ0eVZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eSA9IENTUy5Ob3JtYWxpemF0aW9ucy5yZWdpc3RlcmVkW3Byb3BlcnR5XShcIm5hbWVcIiwgZWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIEFzc2lnbiB0aGUgYXBwcm9wcmlhdGUgdmVuZG9yIHByZWZpeCBiZWZvcmUgcGVyZm9ybWluZyBhbiBvZmZpY2lhbCBzdHlsZSB1cGRhdGUuICovXHJcblx0XHRcdFx0XHRcdHByb3BlcnR5TmFtZSA9IENTUy5OYW1lcy5wcmVmaXhDaGVjayhwcm9wZXJ0eSlbMF07XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBBIHRyeS9jYXRjaCBpcyB1c2VkIGZvciBJRTw9OCwgd2hpY2ggdGhyb3dzIGFuIGVycm9yIHdoZW4gXCJpbnZhbGlkXCIgQ1NTIHZhbHVlcyBhcmUgc2V0LCBlLmcuIGEgbmVnYXRpdmUgd2lkdGguXHJcblx0XHRcdFx0XHRcdCBUcnkvY2F0Y2ggaXMgYXZvaWRlZCBmb3Igb3RoZXIgYnJvd3NlcnMgc2luY2UgaXQgaW5jdXJzIGEgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQuICovXHJcblx0XHRcdFx0XHRcdGlmIChJRSA8PSA4KSB7XHJcblx0XHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGVbcHJvcGVydHlOYW1lXSA9IHByb3BlcnR5VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1Zykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIkJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBbXCIgKyBwcm9wZXJ0eVZhbHVlICsgXCJdIGZvciBbXCIgKyBwcm9wZXJ0eU5hbWUgKyBcIl1cIik7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdC8qIFNWRyBlbGVtZW50cyBoYXZlIHRoZWlyIGRpbWVuc2lvbmFsIHByb3BlcnRpZXMgKHdpZHRoLCBoZWlnaHQsIHgsIHksIGN4LCBldGMuKSBhcHBsaWVkIGRpcmVjdGx5IGFzIGF0dHJpYnV0ZXMgaW5zdGVhZCBvZiBhcyBzdHlsZXMuICovXHJcblx0XHRcdFx0XHRcdFx0LyogTm90ZTogSUU4IGRvZXMgbm90IHN1cHBvcnQgU1ZHIGVsZW1lbnRzLCBzbyBpdCdzIG9rYXkgdGhhdCB3ZSBza2lwIGl0IGZvciBTVkcgYW5pbWF0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHZhciBkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5pc1NWRyAmJiBDU1MuTmFtZXMuU1ZHQXR0cmlidXRlKHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogRm9yIFNWRyBhdHRyaWJ1dGVzLCB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgbmFtZXMgYXJlIG5ldmVyIHVzZWQuICovXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBOb3QgYWxsIENTUyBwcm9wZXJ0aWVzIGNhbiBiZSBhbmltYXRlZCB2aWEgYXR0cmlidXRlcywgYnV0IHRoZSBicm93c2VyIHdvbid0IHRocm93IGFuIGVycm9yIGZvciB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUocHJvcGVydHksIHByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eVZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKFZlbG9jaXR5LmRlYnVnID49IDIpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIlNldCBcIiArIHByb3BlcnR5ICsgXCIgKFwiICsgcHJvcGVydHlOYW1lICsgXCIpOiBcIiArIHByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBSZXR1cm4gdGhlIG5vcm1hbGl6ZWQgcHJvcGVydHkgbmFtZSBhbmQgdmFsdWUgaW4gY2FzZSB0aGUgY2FsbGVyIHdhbnRzIHRvIGtub3cgaG93IHRoZXNlIHZhbHVlcyB3ZXJlIG1vZGlmaWVkIGJlZm9yZSBiZWluZyBhcHBsaWVkIHRvIHRoZSBET00uICovXHJcblx0XHRcdFx0cmV0dXJuIFtwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWVdO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvKiBUbyBpbmNyZWFzZSBwZXJmb3JtYW5jZSBieSBiYXRjaGluZyB0cmFuc2Zvcm0gdXBkYXRlcyBpbnRvIGEgc2luZ2xlIFNFVCwgdHJhbnNmb3JtcyBhcmUgbm90IGRpcmVjdGx5IGFwcGxpZWQgdG8gYW4gZWxlbWVudCB1bnRpbCBmbHVzaFRyYW5zZm9ybUNhY2hlKCkgaXMgY2FsbGVkLiAqL1xyXG5cdFx0XHQvKiBOb3RlOiBWZWxvY2l0eSBhcHBsaWVzIHRyYW5zZm9ybSBwcm9wZXJ0aWVzIGluIHRoZSBzYW1lIG9yZGVyIHRoYXQgdGhleSBhcmUgY2hyb25vZ2ljYWxseSBpbnRyb2R1Y2VkIHRvIHRoZSBlbGVtZW50J3MgQ1NTIHN0eWxlcy4gKi9cclxuXHRcdFx0Zmx1c2hUcmFuc2Zvcm1DYWNoZTogZnVuY3Rpb24oZWxlbWVudCkge1xyXG5cdFx0XHRcdHZhciB0cmFuc2Zvcm1TdHJpbmcgPSBcIlwiLFxyXG5cdFx0XHRcdFx0XHRkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0LyogQ2VydGFpbiBicm93c2VycyByZXF1aXJlIHRoYXQgU1ZHIHRyYW5zZm9ybXMgYmUgYXBwbGllZCBhcyBhbiBhdHRyaWJ1dGUuIEhvd2V2ZXIsIHRoZSBTVkcgdHJhbnNmb3JtIGF0dHJpYnV0ZSB0YWtlcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgQ1NTJ3MgdHJhbnNmb3JtIHN0cmluZ1xyXG5cdFx0XHRcdCAodW5pdHMgYXJlIGRyb3BwZWQgYW5kLCBleGNlcHQgZm9yIHNrZXdYL1ksIHN1YnByb3BlcnRpZXMgYXJlIG1lcmdlZCBpbnRvIHRoZWlyIG1hc3RlciBwcm9wZXJ0eSAtLSBlLmcuIHNjYWxlWCBhbmQgc2NhbGVZIGFyZSBtZXJnZWQgaW50byBzY2FsZShYIFkpLiAqL1xyXG5cdFx0XHRcdGlmICgoSUUgfHwgKFZlbG9jaXR5LlN0YXRlLmlzQW5kcm9pZCAmJiAhVmVsb2NpdHkuU3RhdGUuaXNDaHJvbWUpKSAmJiBkYXRhICYmIGRhdGEuaXNTVkcpIHtcclxuXHRcdFx0XHRcdC8qIFNpbmNlIHRyYW5zZm9ybSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGVpciBwYXJlbnRoZXNlcy13cmFwcGVkIGZvcm0sIHdlIHVzZSBhIGhlbHBlciBmdW5jdGlvbiB0byBzdHJpcCBvdXQgdGhlaXIgbnVtZXJpYyB2YWx1ZXMuXHJcblx0XHRcdFx0XHQgRnVydGhlciwgU1ZHIHRyYW5zZm9ybSBwcm9wZXJ0aWVzIG9ubHkgdGFrZSB1bml0bGVzcyAocmVwcmVzZW50aW5nIHBpeGVscykgdmFsdWVzLCBzbyBpdCdzIG9rYXkgdGhhdCBwYXJzZUZsb2F0KCkgc3RyaXBzIHRoZSB1bml0IHN1ZmZpeGVkIHRvIHRoZSBmbG9hdCB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdHZhciBnZXRUcmFuc2Zvcm1GbG9hdCA9IGZ1bmN0aW9uKHRyYW5zZm9ybVByb3BlcnR5KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHRyYW5zZm9ybVByb3BlcnR5KSk7XHJcblx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdC8qIENyZWF0ZSBhbiBvYmplY3QgdG8gb3JnYW5pemUgYWxsIHRoZSB0cmFuc2Zvcm1zIHRoYXQgd2UnbGwgYXBwbHkgdG8gdGhlIFNWRyBlbGVtZW50LiBUbyBrZWVwIHRoZSBsb2dpYyBzaW1wbGUsXHJcblx0XHRcdFx0XHQgd2UgcHJvY2VzcyAqYWxsKiB0cmFuc2Zvcm0gcHJvcGVydGllcyAtLSBldmVuIHRob3NlIHRoYXQgbWF5IG5vdCBiZSBleHBsaWNpdGx5IGFwcGxpZWQgKHNpbmNlIHRoZXkgZGVmYXVsdCB0byB0aGVpciB6ZXJvLXZhbHVlcyBhbnl3YXkpLiAqL1xyXG5cdFx0XHRcdFx0dmFyIFNWR1RyYW5zZm9ybXMgPSB7XHJcblx0XHRcdFx0XHRcdHRyYW5zbGF0ZTogW2dldFRyYW5zZm9ybUZsb2F0KFwidHJhbnNsYXRlWFwiKSwgZ2V0VHJhbnNmb3JtRmxvYXQoXCJ0cmFuc2xhdGVZXCIpXSxcclxuXHRcdFx0XHRcdFx0c2tld1g6IFtnZXRUcmFuc2Zvcm1GbG9hdChcInNrZXdYXCIpXSwgc2tld1k6IFtnZXRUcmFuc2Zvcm1GbG9hdChcInNrZXdZXCIpXSxcclxuXHRcdFx0XHRcdFx0LyogSWYgdGhlIHNjYWxlIHByb3BlcnR5IGlzIHNldCAobm9uLTEpLCB1c2UgdGhhdCB2YWx1ZSBmb3IgdGhlIHNjYWxlWCBhbmQgc2NhbGVZIHZhbHVlc1xyXG5cdFx0XHRcdFx0XHQgKHRoaXMgYmVoYXZpb3IgbWltaWNzIHRoZSByZXN1bHQgb2YgYW5pbWF0aW5nIGFsbCB0aGVzZSBwcm9wZXJ0aWVzIGF0IG9uY2Ugb24gSFRNTCBlbGVtZW50cykuICovXHJcblx0XHRcdFx0XHRcdHNjYWxlOiBnZXRUcmFuc2Zvcm1GbG9hdChcInNjYWxlXCIpICE9PSAxID8gW2dldFRyYW5zZm9ybUZsb2F0KFwic2NhbGVcIiksIGdldFRyYW5zZm9ybUZsb2F0KFwic2NhbGVcIildIDogW2dldFRyYW5zZm9ybUZsb2F0KFwic2NhbGVYXCIpLCBnZXRUcmFuc2Zvcm1GbG9hdChcInNjYWxlWVwiKV0sXHJcblx0XHRcdFx0XHRcdC8qIE5vdGU6IFNWRydzIHJvdGF0ZSB0cmFuc2Zvcm0gdGFrZXMgdGhyZWUgdmFsdWVzOiByb3RhdGlvbiBkZWdyZWVzIGZvbGxvd2VkIGJ5IHRoZSBYIGFuZCBZIHZhbHVlc1xyXG5cdFx0XHRcdFx0XHQgZGVmaW5pbmcgdGhlIHJvdGF0aW9uJ3Mgb3JpZ2luIHBvaW50LiBXZSBpZ25vcmUgdGhlIG9yaWdpbiB2YWx1ZXMgKGRlZmF1bHQgdGhlbSB0byAwKS4gKi9cclxuXHRcdFx0XHRcdFx0cm90YXRlOiBbZ2V0VHJhbnNmb3JtRmxvYXQoXCJyb3RhdGVaXCIpLCAwLCAwXVxyXG5cdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggdGhlIHRyYW5zZm9ybSBwcm9wZXJ0aWVzIGluIHRoZSB1c2VyLWRlZmluZWQgcHJvcGVydHkgbWFwIG9yZGVyLlxyXG5cdFx0XHRcdFx0IChUaGlzIG1pbWljcyB0aGUgYmVoYXZpb3Igb2Ygbm9uLVNWRyB0cmFuc2Zvcm0gYW5pbWF0aW9uLikgKi9cclxuXHRcdFx0XHRcdCQuZWFjaChEYXRhKGVsZW1lbnQpLnRyYW5zZm9ybUNhY2hlLCBmdW5jdGlvbih0cmFuc2Zvcm1OYW1lKSB7XHJcblx0XHRcdFx0XHRcdC8qIEV4Y2VwdCBmb3Igd2l0aCBza2V3WC9ZLCByZXZlcnQgdGhlIGF4aXMtc3BlY2lmaWMgdHJhbnNmb3JtIHN1YnByb3BlcnRpZXMgdG8gdGhlaXIgYXhpcy1mcmVlIG1hc3RlclxyXG5cdFx0XHRcdFx0XHQgcHJvcGVydGllcyBzbyB0aGF0IHRoZXkgbWF0Y2ggdXAgd2l0aCBTVkcncyBhY2NlcHRlZCB0cmFuc2Zvcm0gcHJvcGVydGllcy4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKC9edHJhbnNsYXRlL2kudGVzdCh0cmFuc2Zvcm1OYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRcdHRyYW5zZm9ybU5hbWUgPSBcInRyYW5zbGF0ZVwiO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKC9ec2NhbGUvaS50ZXN0KHRyYW5zZm9ybU5hbWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0dHJhbnNmb3JtTmFtZSA9IFwic2NhbGVcIjtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICgvXnJvdGF0ZS9pLnRlc3QodHJhbnNmb3JtTmFtZSkpIHtcclxuXHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1OYW1lID0gXCJyb3RhdGVcIjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogQ2hlY2sgdGhhdCB3ZSBoYXZlbid0IHlldCBkZWxldGVkIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZSBTVkdUcmFuc2Zvcm1zIGNvbnRhaW5lci4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKFNWR1RyYW5zZm9ybXNbdHJhbnNmb3JtTmFtZV0pIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBBcHBlbmQgdGhlIHRyYW5zZm9ybSBwcm9wZXJ0eSBpbiB0aGUgU1ZHLXN1cHBvcnRlZCB0cmFuc2Zvcm0gZm9ybWF0LiBBcyBwZXIgdGhlIHNwZWMsIHN1cnJvdW5kIHRoZSBzcGFjZS1kZWxpbWl0ZWQgdmFsdWVzIGluIHBhcmVudGhlc2VzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHRyYW5zZm9ybVN0cmluZyArPSB0cmFuc2Zvcm1OYW1lICsgXCIoXCIgKyBTVkdUcmFuc2Zvcm1zW3RyYW5zZm9ybU5hbWVdLmpvaW4oXCIgXCIpICsgXCIpXCIgKyBcIiBcIjtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogQWZ0ZXIgcHJvY2Vzc2luZyBhbiBTVkcgdHJhbnNmb3JtIHByb3BlcnR5LCBkZWxldGUgaXQgZnJvbSB0aGUgU1ZHVHJhbnNmb3JtcyBjb250YWluZXIgc28gd2UgZG9uJ3RcclxuXHRcdFx0XHRcdFx0XHQgcmUtaW5zZXJ0IHRoZSBzYW1lIG1hc3RlciBwcm9wZXJ0eSBpZiB3ZSBlbmNvdW50ZXIgYW5vdGhlciBvbmUgb2YgaXRzIGF4aXMtc3BlY2lmaWMgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRkZWxldGUgU1ZHVHJhbnNmb3Jtc1t0cmFuc2Zvcm1OYW1lXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHZhciB0cmFuc2Zvcm1WYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRwZXJzcGVjdGl2ZTtcclxuXHJcblx0XHRcdFx0XHQvKiBUcmFuc2Zvcm0gcHJvcGVydGllcyBhcmUgc3RvcmVkIGFzIG1lbWJlcnMgb2YgdGhlIHRyYW5zZm9ybUNhY2hlIG9iamVjdC4gQ29uY2F0ZW5hdGUgYWxsIHRoZSBtZW1iZXJzIGludG8gYSBzdHJpbmcuICovXHJcblx0XHRcdFx0XHQkLmVhY2goRGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZSwgZnVuY3Rpb24odHJhbnNmb3JtTmFtZSkge1xyXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm1WYWx1ZSA9IERhdGEoZWxlbWVudCkudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV07XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBUcmFuc2Zvcm0ncyBwZXJzcGVjdGl2ZSBzdWJwcm9wZXJ0eSBtdXN0IGJlIHNldCBmaXJzdCBpbiBvcmRlciB0byB0YWtlIGVmZmVjdC4gU3RvcmUgaXQgdGVtcG9yYXJpbHkuICovXHJcblx0XHRcdFx0XHRcdGlmICh0cmFuc2Zvcm1OYW1lID09PSBcInRyYW5zZm9ybVBlcnNwZWN0aXZlXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRwZXJzcGVjdGl2ZSA9IHRyYW5zZm9ybVZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJRTkgb25seSBzdXBwb3J0cyBvbmUgcm90YXRpb24gdHlwZSwgcm90YXRlWiwgd2hpY2ggaXQgcmVmZXJzIHRvIGFzIFwicm90YXRlXCIuICovXHJcblx0XHRcdFx0XHRcdGlmIChJRSA9PT0gOSAmJiB0cmFuc2Zvcm1OYW1lID09PSBcInJvdGF0ZVpcIikge1xyXG5cdFx0XHRcdFx0XHRcdHRyYW5zZm9ybU5hbWUgPSBcInJvdGF0ZVwiO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm1TdHJpbmcgKz0gdHJhbnNmb3JtTmFtZSArIHRyYW5zZm9ybVZhbHVlICsgXCIgXCI7XHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHQvKiBJZiBwcmVzZW50LCBzZXQgdGhlIHBlcnNwZWN0aXZlIHN1YnByb3BlcnR5IGZpcnN0LiAqL1xyXG5cdFx0XHRcdFx0aWYgKHBlcnNwZWN0aXZlKSB7XHJcblx0XHRcdFx0XHRcdHRyYW5zZm9ybVN0cmluZyA9IFwicGVyc3BlY3RpdmVcIiArIHBlcnNwZWN0aXZlICsgXCIgXCIgKyB0cmFuc2Zvcm1TdHJpbmc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcInRyYW5zZm9ybVwiLCB0cmFuc2Zvcm1TdHJpbmcpO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cclxuXHRcdC8qIFJlZ2lzdGVyIGhvb2tzIGFuZCBub3JtYWxpemF0aW9ucy4gKi9cclxuXHRcdENTUy5Ib29rcy5yZWdpc3RlcigpO1xyXG5cdFx0Q1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyKCk7XHJcblxyXG5cdFx0LyogQWxsb3cgaG9vayBzZXR0aW5nIGluIHRoZSBzYW1lIGZhc2hpb24gYXMgalF1ZXJ5J3MgJC5jc3MoKS4gKi9cclxuXHRcdFZlbG9jaXR5Lmhvb2sgPSBmdW5jdGlvbihlbGVtZW50cywgYXJnMiwgYXJnMykge1xyXG5cdFx0XHR2YXIgdmFsdWU7XHJcblxyXG5cdFx0XHRlbGVtZW50cyA9IHNhbml0aXplRWxlbWVudHMoZWxlbWVudHMpO1xyXG5cclxuXHRcdFx0JC5lYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihpLCBlbGVtZW50KSB7XHJcblx0XHRcdFx0LyogSW5pdGlhbGl6ZSBWZWxvY2l0eSdzIHBlci1lbGVtZW50IGRhdGEgY2FjaGUgaWYgdGhpcyBlbGVtZW50IGhhc24ndCBwcmV2aW91c2x5IGJlZW4gYW5pbWF0ZWQuICovXHJcblx0XHRcdFx0aWYgKERhdGEoZWxlbWVudCkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0VmVsb2NpdHkuaW5pdChlbGVtZW50KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIEdldCBwcm9wZXJ0eSB2YWx1ZS4gSWYgYW4gZWxlbWVudCBzZXQgd2FzIHBhc3NlZCBpbiwgb25seSByZXR1cm4gdGhlIHZhbHVlIGZvciB0aGUgZmlyc3QgZWxlbWVudC4gKi9cclxuXHRcdFx0XHRpZiAoYXJnMyA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIGFyZzIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0LyogU2V0IHByb3BlcnR5IHZhbHVlLiAqL1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQvKiBzUFYgcmV0dXJucyBhbiBhcnJheSBvZiB0aGUgbm9ybWFsaXplZCBwcm9wZXJ0eU5hbWUvcHJvcGVydHlWYWx1ZSBwYWlyIHVzZWQgdG8gdXBkYXRlIHRoZSBET00uICovXHJcblx0XHRcdFx0XHR2YXIgYWRqdXN0ZWRTZXQgPSBDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBhcmcyLCBhcmczKTtcclxuXHJcblx0XHRcdFx0XHQvKiBUcmFuc2Zvcm0gcHJvcGVydGllcyBkb24ndCBhdXRvbWF0aWNhbGx5IHNldC4gVGhleSBoYXZlIHRvIGJlIGZsdXNoZWQgdG8gdGhlIERPTS4gKi9cclxuXHRcdFx0XHRcdGlmIChhZGp1c3RlZFNldFswXSA9PT0gXCJ0cmFuc2Zvcm1cIikge1xyXG5cdFx0XHRcdFx0XHRWZWxvY2l0eS5DU1MuZmx1c2hUcmFuc2Zvcm1DYWNoZShlbGVtZW50KTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR2YWx1ZSA9IGFkanVzdGVkU2V0O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8qKioqKioqKioqKioqKioqKlxyXG5cdFx0IEFuaW1hdGlvblxyXG5cdFx0ICoqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdHZhciBhbmltYXRlID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBvcHRzO1xyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQ2FsbCBDaGFpblxyXG5cdFx0XHQgKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogTG9naWMgZm9yIGRldGVybWluaW5nIHdoYXQgdG8gcmV0dXJuIHRvIHRoZSBjYWxsIHN0YWNrIHdoZW4gZXhpdGluZyBvdXQgb2YgVmVsb2NpdHkuICovXHJcblx0XHRcdGZ1bmN0aW9uIGdldENoYWluKCkge1xyXG5cdFx0XHRcdC8qIElmIHdlIGFyZSB1c2luZyB0aGUgdXRpbGl0eSBmdW5jdGlvbiwgYXR0ZW1wdCB0byByZXR1cm4gdGhpcyBjYWxsJ3MgcHJvbWlzZS4gSWYgbm8gcHJvbWlzZSBsaWJyYXJ5IHdhcyBkZXRlY3RlZCxcclxuXHRcdFx0XHQgZGVmYXVsdCB0byBudWxsIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSB0YXJnZXRlZCBlbGVtZW50cyBzbyB0aGF0IHV0aWxpdHkgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUgaXMgc3RhbmRhcmRpemVkLiAqL1xyXG5cdFx0XHRcdGlmIChpc1V0aWxpdHkpIHtcclxuXHRcdFx0XHRcdHJldHVybiBwcm9taXNlRGF0YS5wcm9taXNlIHx8IG51bGw7XHJcblx0XHRcdFx0XHQvKiBPdGhlcndpc2UsIGlmIHdlJ3JlIHVzaW5nICQuZm4sIHJldHVybiB0aGUgalF1ZXJ5LS9aZXB0by13cmFwcGVkIGVsZW1lbnQgc2V0LiAqL1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudHNXcmFwcGVkO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0IEFyZ3VtZW50cyBBc3NpZ25tZW50XHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogVG8gYWxsb3cgZm9yIGV4cHJlc3NpdmUgQ29mZmVlU2NyaXB0IGNvZGUsIFZlbG9jaXR5IHN1cHBvcnRzIGFuIGFsdGVybmF0aXZlIHN5bnRheCBpbiB3aGljaCBcImVsZW1lbnRzXCIgKG9yIFwiZVwiKSwgXCJwcm9wZXJ0aWVzXCIgKG9yIFwicFwiKSwgYW5kIFwib3B0aW9uc1wiIChvciBcIm9cIilcclxuXHRcdFx0IG9iamVjdHMgYXJlIGRlZmluZWQgb24gYSBjb250YWluZXIgb2JqZWN0IHRoYXQncyBwYXNzZWQgaW4gYXMgVmVsb2NpdHkncyBzb2xlIGFyZ3VtZW50LiAqL1xyXG5cdFx0XHQvKiBOb3RlOiBTb21lIGJyb3dzZXJzIGF1dG9tYXRpY2FsbHkgcG9wdWxhdGUgYXJndW1lbnRzIHdpdGggYSBcInByb3BlcnRpZXNcIiBvYmplY3QuIFdlIGRldGVjdCBpdCBieSBjaGVja2luZyBmb3IgaXRzIGRlZmF1bHQgXCJuYW1lc1wiIHByb3BlcnR5LiAqL1xyXG5cdFx0XHR2YXIgc3ludGFjdGljU3VnYXIgPSAoYXJndW1lbnRzWzBdICYmIChhcmd1bWVudHNbMF0ucCB8fCAoKCQuaXNQbGFpbk9iamVjdChhcmd1bWVudHNbMF0ucHJvcGVydGllcykgJiYgIWFyZ3VtZW50c1swXS5wcm9wZXJ0aWVzLm5hbWVzKSB8fCBUeXBlLmlzU3RyaW5nKGFyZ3VtZW50c1swXS5wcm9wZXJ0aWVzKSkpKSxcclxuXHRcdFx0XHRcdC8qIFdoZXRoZXIgVmVsb2NpdHkgd2FzIGNhbGxlZCB2aWEgdGhlIHV0aWxpdHkgZnVuY3Rpb24gKGFzIG9wcG9zZWQgdG8gb24gYSBqUXVlcnkvWmVwdG8gb2JqZWN0KS4gKi9cclxuXHRcdFx0XHRcdGlzVXRpbGl0eSxcclxuXHRcdFx0XHRcdC8qIFdoZW4gVmVsb2NpdHkgaXMgY2FsbGVkIHZpYSB0aGUgdXRpbGl0eSBmdW5jdGlvbiAoJC5WZWxvY2l0eSgpL1ZlbG9jaXR5KCkpLCBlbGVtZW50cyBhcmUgZXhwbGljaXRseVxyXG5cdFx0XHRcdFx0IHBhc3NlZCBpbiBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyLiBUaHVzLCBhcmd1bWVudCBwb3NpdGlvbmluZyB2YXJpZXMuIFdlIG5vcm1hbGl6ZSB0aGVtIGhlcmUuICovXHJcblx0XHRcdFx0XHRlbGVtZW50c1dyYXBwZWQsXHJcblx0XHRcdFx0XHRhcmd1bWVudEluZGV4O1xyXG5cclxuXHRcdFx0dmFyIGVsZW1lbnRzLFxyXG5cdFx0XHRcdFx0cHJvcGVydGllc01hcCxcclxuXHRcdFx0XHRcdG9wdGlvbnM7XHJcblxyXG5cdFx0XHQvKiBEZXRlY3QgalF1ZXJ5L1plcHRvIGVsZW1lbnRzIGJlaW5nIGFuaW1hdGVkIHZpYSB0aGUgJC5mbiBtZXRob2QuICovXHJcblx0XHRcdGlmIChUeXBlLmlzV3JhcHBlZCh0aGlzKSkge1xyXG5cdFx0XHRcdGlzVXRpbGl0eSA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRhcmd1bWVudEluZGV4ID0gMDtcclxuXHRcdFx0XHRlbGVtZW50cyA9IHRoaXM7XHJcblx0XHRcdFx0ZWxlbWVudHNXcmFwcGVkID0gdGhpcztcclxuXHRcdFx0XHQvKiBPdGhlcndpc2UsIHJhdyBlbGVtZW50cyBhcmUgYmVpbmcgYW5pbWF0ZWQgdmlhIHRoZSB1dGlsaXR5IGZ1bmN0aW9uLiAqL1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlzVXRpbGl0eSA9IHRydWU7XHJcblxyXG5cdFx0XHRcdGFyZ3VtZW50SW5kZXggPSAxO1xyXG5cdFx0XHRcdGVsZW1lbnRzID0gc3ludGFjdGljU3VnYXIgPyAoYXJndW1lbnRzWzBdLmVsZW1lbnRzIHx8IGFyZ3VtZW50c1swXS5lKSA6IGFyZ3VtZW50c1swXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKlxyXG5cdFx0XHQgUHJvbWlzZXNcclxuXHRcdFx0ICoqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdHZhciBwcm9taXNlRGF0YSA9IHtcclxuXHRcdFx0XHRwcm9taXNlOiBudWxsLFxyXG5cdFx0XHRcdHJlc29sdmVyOiBudWxsLFxyXG5cdFx0XHRcdHJlamVjdGVyOiBudWxsXHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHQvKiBJZiB0aGlzIGNhbGwgd2FzIG1hZGUgdmlhIHRoZSB1dGlsaXR5IGZ1bmN0aW9uICh3aGljaCBpcyB0aGUgZGVmYXVsdCBtZXRob2Qgb2YgaW52b2NhdGlvbiB3aGVuIGpRdWVyeS9aZXB0byBhcmUgbm90IGJlaW5nIHVzZWQpLCBhbmQgaWZcclxuXHRcdFx0IHByb21pc2Ugc3VwcG9ydCB3YXMgZGV0ZWN0ZWQsIGNyZWF0ZSBhIHByb21pc2Ugb2JqZWN0IGZvciB0aGlzIGNhbGwgYW5kIHN0b3JlIHJlZmVyZW5jZXMgdG8gaXRzIHJlc29sdmVyIGFuZCByZWplY3RlciBtZXRob2RzLiBUaGUgcmVzb2x2ZVxyXG5cdFx0XHQgbWV0aG9kIGlzIHVzZWQgd2hlbiBhIGNhbGwgY29tcGxldGVzIG5hdHVyYWxseSBvciBpcyBwcmVtYXR1cmVseSBzdG9wcGVkIGJ5IHRoZSB1c2VyLiBJbiBib3RoIGNhc2VzLCBjb21wbGV0ZUNhbGwoKSBoYW5kbGVzIHRoZSBhc3NvY2lhdGVkXHJcblx0XHRcdCBjYWxsIGNsZWFudXAgYW5kIHByb21pc2UgcmVzb2x2aW5nIGxvZ2ljLiBUaGUgcmVqZWN0IG1ldGhvZCBpcyB1c2VkIHdoZW4gYW4gaW52YWxpZCBzZXQgb2YgYXJndW1lbnRzIGlzIHBhc3NlZCBpbnRvIGEgVmVsb2NpdHkgY2FsbC4gKi9cclxuXHRcdFx0LyogTm90ZTogVmVsb2NpdHkgZW1wbG95cyBhIGNhbGwtYmFzZWQgcXVldWVpbmcgYXJjaGl0ZWN0dXJlLCB3aGljaCBtZWFucyB0aGF0IHN0b3BwaW5nIGFuIGFuaW1hdGluZyBlbGVtZW50IGFjdHVhbGx5IHN0b3BzIHRoZSBmdWxsIGNhbGwgdGhhdFxyXG5cdFx0XHQgdHJpZ2dlcmVkIGl0IC0tIG5vdCB0aGF0IG9uZSBlbGVtZW50IGV4Y2x1c2l2ZWx5LiBTaW1pbGFybHksIHRoZXJlIGlzIG9uZSBwcm9taXNlIHBlciBjYWxsLCBhbmQgYWxsIGVsZW1lbnRzIHRhcmdldGVkIGJ5IGEgVmVsb2NpdHkgY2FsbCBhcmVcclxuXHRcdFx0IGdyb3VwZWQgdG9nZXRoZXIgZm9yIHRoZSBwdXJwb3NlcyBvZiByZXNvbHZpbmcgYW5kIHJlamVjdGluZyBhIHByb21pc2UuICovXHJcblx0XHRcdGlmIChpc1V0aWxpdHkgJiYgVmVsb2NpdHkuUHJvbWlzZSkge1xyXG5cdFx0XHRcdHByb21pc2VEYXRhLnByb21pc2UgPSBuZXcgVmVsb2NpdHkuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuXHRcdFx0XHRcdHByb21pc2VEYXRhLnJlc29sdmVyID0gcmVzb2x2ZTtcclxuXHRcdFx0XHRcdHByb21pc2VEYXRhLnJlamVjdGVyID0gcmVqZWN0O1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoc3ludGFjdGljU3VnYXIpIHtcclxuXHRcdFx0XHRwcm9wZXJ0aWVzTWFwID0gYXJndW1lbnRzWzBdLnByb3BlcnRpZXMgfHwgYXJndW1lbnRzWzBdLnA7XHJcblx0XHRcdFx0b3B0aW9ucyA9IGFyZ3VtZW50c1swXS5vcHRpb25zIHx8IGFyZ3VtZW50c1swXS5vO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHByb3BlcnRpZXNNYXAgPSBhcmd1bWVudHNbYXJndW1lbnRJbmRleF07XHJcblx0XHRcdFx0b3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudEluZGV4ICsgMV07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGVsZW1lbnRzID0gc2FuaXRpemVFbGVtZW50cyhlbGVtZW50cyk7XHJcblxyXG5cdFx0XHRpZiAoIWVsZW1lbnRzKSB7XHJcblx0XHRcdFx0aWYgKHByb21pc2VEYXRhLnByb21pc2UpIHtcclxuXHRcdFx0XHRcdGlmICghcHJvcGVydGllc01hcCB8fCAhb3B0aW9ucyB8fCBvcHRpb25zLnByb21pc2VSZWplY3RFbXB0eSAhPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0cHJvbWlzZURhdGEucmVqZWN0ZXIoKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHByb21pc2VEYXRhLnJlc29sdmVyKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogVGhlIGxlbmd0aCBvZiB0aGUgZWxlbWVudCBzZXQgKGluIHRoZSBmb3JtIG9mIGEgbm9kZUxpc3Qgb3IgYW4gYXJyYXkgb2YgZWxlbWVudHMpIGlzIGRlZmF1bHRlZCB0byAxIGluIGNhc2UgYVxyXG5cdFx0XHQgc2luZ2xlIHJhdyBET00gZWxlbWVudCBpcyBwYXNzZWQgaW4gKHdoaWNoIGRvZXNuJ3QgY29udGFpbiBhIGxlbmd0aCBwcm9wZXJ0eSkuICovXHJcblx0XHRcdHZhciBlbGVtZW50c0xlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aCxcclxuXHRcdFx0XHRcdGVsZW1lbnRzSW5kZXggPSAwO1xyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQXJndW1lbnQgT3ZlcmxvYWRpbmdcclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIFN1cHBvcnQgaXMgaW5jbHVkZWQgZm9yIGpRdWVyeSdzIGFyZ3VtZW50IG92ZXJsb2FkaW5nOiAkLmFuaW1hdGUocHJvcGVydHlNYXAgWywgZHVyYXRpb25dIFssIGVhc2luZ10gWywgY29tcGxldGVdKS5cclxuXHRcdFx0IE92ZXJsb2FkaW5nIGlzIGRldGVjdGVkIGJ5IGNoZWNraW5nIGZvciB0aGUgYWJzZW5jZSBvZiBhbiBvYmplY3QgYmVpbmcgcGFzc2VkIGludG8gb3B0aW9ucy4gKi9cclxuXHRcdFx0LyogTm90ZTogVGhlIHN0b3AvZmluaXNoL3BhdXNlL3Jlc3VtZSBhY3Rpb25zIGRvIG5vdCBhY2NlcHQgYW5pbWF0aW9uIG9wdGlvbnMsIGFuZCBhcmUgdGhlcmVmb3JlIGV4Y2x1ZGVkIGZyb20gdGhpcyBjaGVjay4gKi9cclxuXHRcdFx0aWYgKCEvXihzdG9wfGZpbmlzaHxmaW5pc2hBbGx8cGF1c2V8cmVzdW1lKSQvaS50ZXN0KHByb3BlcnRpZXNNYXApICYmICEkLmlzUGxhaW5PYmplY3Qob3B0aW9ucykpIHtcclxuXHRcdFx0XHQvKiBUaGUgdXRpbGl0eSBmdW5jdGlvbiBzaGlmdHMgYWxsIGFyZ3VtZW50cyBvbmUgcG9zaXRpb24gdG8gdGhlIHJpZ2h0LCBzbyB3ZSBhZGp1c3QgZm9yIHRoYXQgb2Zmc2V0LiAqL1xyXG5cdFx0XHRcdHZhciBzdGFydGluZ0FyZ3VtZW50UG9zaXRpb24gPSBhcmd1bWVudEluZGV4ICsgMTtcclxuXHJcblx0XHRcdFx0b3B0aW9ucyA9IHt9O1xyXG5cclxuXHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggYWxsIG9wdGlvbnMgYXJndW1lbnRzICovXHJcblx0XHRcdFx0Zm9yICh2YXIgaSA9IHN0YXJ0aW5nQXJndW1lbnRQb3NpdGlvbjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0LyogVHJlYXQgYSBudW1iZXIgYXMgYSBkdXJhdGlvbi4gUGFyc2UgaXQgb3V0LiAqL1xyXG5cdFx0XHRcdFx0LyogTm90ZTogVGhlIGZvbGxvd2luZyBSZWdFeCB3aWxsIHJldHVybiB0cnVlIGlmIHBhc3NlZCBhbiBhcnJheSB3aXRoIGEgbnVtYmVyIGFzIGl0cyBmaXJzdCBpdGVtLlxyXG5cdFx0XHRcdFx0IFRodXMsIGFycmF5cyBhcmUgc2tpcHBlZCBmcm9tIHRoaXMgY2hlY2suICovXHJcblx0XHRcdFx0XHRpZiAoIVR5cGUuaXNBcnJheShhcmd1bWVudHNbaV0pICYmICgvXihmYXN0fG5vcm1hbHxzbG93KSQvaS50ZXN0KGFyZ3VtZW50c1tpXSkgfHwgL15cXGQvLnRlc3QoYXJndW1lbnRzW2ldKSkpIHtcclxuXHRcdFx0XHRcdFx0b3B0aW9ucy5kdXJhdGlvbiA9IGFyZ3VtZW50c1tpXTtcclxuXHRcdFx0XHRcdFx0LyogVHJlYXQgc3RyaW5ncyBhbmQgYXJyYXlzIGFzIGVhc2luZ3MuICovXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKFR5cGUuaXNTdHJpbmcoYXJndW1lbnRzW2ldKSB8fCBUeXBlLmlzQXJyYXkoYXJndW1lbnRzW2ldKSkge1xyXG5cdFx0XHRcdFx0XHRvcHRpb25zLmVhc2luZyA9IGFyZ3VtZW50c1tpXTtcclxuXHRcdFx0XHRcdFx0LyogVHJlYXQgYSBmdW5jdGlvbiBhcyBhIGNvbXBsZXRlIGNhbGxiYWNrLiAqL1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzRnVuY3Rpb24oYXJndW1lbnRzW2ldKSkge1xyXG5cdFx0XHRcdFx0XHRvcHRpb25zLmNvbXBsZXRlID0gYXJndW1lbnRzW2ldO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQWN0aW9uIERldGVjdGlvblxyXG5cdFx0XHQgKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogVmVsb2NpdHkncyBiZWhhdmlvciBpcyBjYXRlZ29yaXplZCBpbnRvIFwiYWN0aW9uc1wiOiBFbGVtZW50cyBjYW4gZWl0aGVyIGJlIHNwZWNpYWxseSBzY3JvbGxlZCBpbnRvIHZpZXcsXHJcblx0XHRcdCBvciB0aGV5IGNhbiBiZSBzdGFydGVkLCBzdG9wcGVkLCBwYXVzZWQsIHJlc3VtZWQsIG9yIHJldmVyc2VkIC4gSWYgYSBsaXRlcmFsIG9yIHJlZmVyZW5jZWQgcHJvcGVydGllcyBtYXAgaXMgcGFzc2VkIGluIGFzIFZlbG9jaXR5J3NcclxuXHRcdFx0IGZpcnN0IGFyZ3VtZW50LCB0aGUgYXNzb2NpYXRlZCBhY3Rpb24gaXMgXCJzdGFydFwiLiBBbHRlcm5hdGl2ZWx5LCBcInNjcm9sbFwiLCBcInJldmVyc2VcIiwgXCJwYXVzZVwiLCBcInJlc3VtZVwiIG9yIFwic3RvcFwiIGNhbiBiZSBwYXNzZWQgaW4gXHJcblx0XHRcdCBpbnN0ZWFkIG9mIGEgcHJvcGVydGllcyBtYXAuICovXHJcblx0XHRcdHZhciBhY3Rpb247XHJcblxyXG5cdFx0XHRzd2l0Y2ggKHByb3BlcnRpZXNNYXApIHtcclxuXHRcdFx0XHRjYXNlIFwic2Nyb2xsXCI6XHJcblx0XHRcdFx0XHRhY3Rpb24gPSBcInNjcm9sbFwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdGNhc2UgXCJyZXZlcnNlXCI6XHJcblx0XHRcdFx0XHRhY3Rpb24gPSBcInJldmVyc2VcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRjYXNlIFwicGF1c2VcIjpcclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0IEFjdGlvbjogUGF1c2VcclxuXHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdHZhciBjdXJyZW50VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcblxyXG5cdFx0XHRcdFx0LyogSGFuZGxlIGRlbGF5IHRpbWVycyAqL1xyXG5cdFx0XHRcdFx0JC5lYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihpLCBlbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdHBhdXNlRGVsYXlPbkVsZW1lbnQoZWxlbWVudCwgY3VycmVudFRpbWUpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0LyogUGF1c2UgYW5kIFJlc3VtZSBhcmUgY2FsbC13aWRlIChub3Qgb24gYSBwZXIgZWxlbWVudCBiYXNpcykuIFRodXMsIGNhbGxpbmcgcGF1c2Ugb3IgcmVzdW1lIG9uIGEgXHJcblx0XHRcdFx0XHQgc2luZ2xlIGVsZW1lbnQgd2lsbCBjYXVzZSBhbnkgY2FsbHMgdGhhdCBjb250YWludCB0d2VlbnMgZm9yIHRoYXQgZWxlbWVudCB0byBiZSBwYXVzZWQvcmVzdW1lZFxyXG5cdFx0XHRcdFx0IGFzIHdlbGwuICovXHJcblxyXG5cdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIGFsbCBjYWxscyBhbmQgcGF1c2UgYW55IHRoYXQgY29udGFpbiBhbnkgb2Ygb3VyIGVsZW1lbnRzICovXHJcblx0XHRcdFx0XHQkLmVhY2goVmVsb2NpdHkuU3RhdGUuY2FsbHMsIGZ1bmN0aW9uKGksIGFjdGl2ZUNhbGwpIHtcclxuXHJcblx0XHRcdFx0XHRcdHZhciBmb3VuZCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHQvKiBJbmFjdGl2ZSBjYWxscyBhcmUgc2V0IHRvIGZhbHNlIGJ5IHRoZSBsb2dpYyBpbnNpZGUgY29tcGxldGVDYWxsKCkuIFNraXAgdGhlbS4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKGFjdGl2ZUNhbGwpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGFjdGl2ZSBjYWxsJ3MgdGFyZ2V0ZWQgZWxlbWVudHMuICovXHJcblx0XHRcdFx0XHRcdFx0JC5lYWNoKGFjdGl2ZUNhbGxbMV0sIGZ1bmN0aW9uKGssIGFjdGl2ZUVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhciBxdWV1ZU5hbWUgPSAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSA/IFwiXCIgOiBvcHRpb25zO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChxdWV1ZU5hbWUgIT09IHRydWUgJiYgKGFjdGl2ZUNhbGxbMl0ucXVldWUgIT09IHF1ZXVlTmFtZSkgJiYgIShvcHRpb25zID09PSB1bmRlZmluZWQgJiYgYWN0aXZlQ2FsbFsyXS5xdWV1ZSA9PT0gZmFsc2UpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgY2FsbHMgdGFyZ2V0ZWQgYnkgdGhlIHN0b3AgY29tbWFuZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdCQuZWFjaChlbGVtZW50cywgZnVuY3Rpb24obCwgZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBDaGVjayB0aGF0IHRoaXMgY2FsbCB3YXMgYXBwbGllZCB0byB0aGUgdGFyZ2V0IGVsZW1lbnQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50ID09PSBhY3RpdmVFbGVtZW50KSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFNldCBjYWxsIHRvIHBhdXNlZCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGl2ZUNhbGxbNV0gPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bWU6IGZhbHNlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogT25jZSB3ZSBtYXRjaCBhbiBlbGVtZW50LCB3ZSBjYW4gYm91bmNlIG91dCB0byB0aGUgbmV4dCBjYWxsIGVudGlyZWx5ICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogUHJvY2VlZCB0byBjaGVjayBuZXh0IGNhbGwgaWYgd2UgaGF2ZSBhbHJlYWR5IG1hdGNoZWQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChmb3VuZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHQvKiBTaW5jZSBwYXVzZSBjcmVhdGVzIG5vIG5ldyB0d2VlbnMsIGV4aXQgb3V0IG9mIFZlbG9jaXR5LiAqL1xyXG5cdFx0XHRcdFx0cmV0dXJuIGdldENoYWluKCk7XHJcblxyXG5cdFx0XHRcdGNhc2UgXCJyZXN1bWVcIjpcclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0IEFjdGlvbjogUmVzdW1lXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHQvKiBIYW5kbGUgZGVsYXkgdGltZXJzICovXHJcblx0XHRcdFx0XHQkLmVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGksIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0cmVzdW1lRGVsYXlPbkVsZW1lbnQoZWxlbWVudCwgY3VycmVudFRpbWUpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0LyogUGF1c2UgYW5kIFJlc3VtZSBhcmUgY2FsbC13aWRlIChub3Qgb24gYSBwZXIgZWxlbW50IGJhc2lzKS4gVGh1cywgY2FsbGluZyBwYXVzZSBvciByZXN1bWUgb24gYSBcclxuXHRcdFx0XHRcdCBzaW5nbGUgZWxlbWVudCB3aWxsIGNhdXNlIGFueSBjYWxscyB0aGF0IGNvbnRhaW50IHR3ZWVucyBmb3IgdGhhdCBlbGVtZW50IHRvIGJlIHBhdXNlZC9yZXN1bWVkXHJcblx0XHRcdFx0XHQgYXMgd2VsbC4gKi9cclxuXHJcblx0XHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggYWxsIGNhbGxzIGFuZCBwYXVzZSBhbnkgdGhhdCBjb250YWluIGFueSBvZiBvdXIgZWxlbWVudHMgKi9cclxuXHRcdFx0XHRcdCQuZWFjaChWZWxvY2l0eS5TdGF0ZS5jYWxscywgZnVuY3Rpb24oaSwgYWN0aXZlQ2FsbCkge1xyXG5cdFx0XHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0LyogSW5hY3RpdmUgY2FsbHMgYXJlIHNldCB0byBmYWxzZSBieSB0aGUgbG9naWMgaW5zaWRlIGNvbXBsZXRlQ2FsbCgpLiBTa2lwIHRoZW0uICovXHJcblx0XHRcdFx0XHRcdGlmIChhY3RpdmVDYWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBhY3RpdmUgY2FsbCdzIHRhcmdldGVkIGVsZW1lbnRzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdCQuZWFjaChhY3RpdmVDYWxsWzFdLCBmdW5jdGlvbihrLCBhY3RpdmVFbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcXVldWVOYW1lID0gKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgPyBcIlwiIDogb3B0aW9ucztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAocXVldWVOYW1lICE9PSB0cnVlICYmIChhY3RpdmVDYWxsWzJdLnF1ZXVlICE9PSBxdWV1ZU5hbWUpICYmICEob3B0aW9ucyA9PT0gdW5kZWZpbmVkICYmIGFjdGl2ZUNhbGxbMl0ucXVldWUgPT09IGZhbHNlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBTa2lwIGFueSBjYWxscyB0aGF0IGhhdmUgbmV2ZXIgYmVlbiBwYXVzZWQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmICghYWN0aXZlQ2FsbFs1XSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGNhbGxzIHRhcmdldGVkIGJ5IHRoZSBzdG9wIGNvbW1hbmQuICovXHJcblx0XHRcdFx0XHRcdFx0XHQkLmVhY2goZWxlbWVudHMsIGZ1bmN0aW9uKGwsIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogQ2hlY2sgdGhhdCB0aGlzIGNhbGwgd2FzIGFwcGxpZWQgdG8gdGhlIHRhcmdldCBlbGVtZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbWVudCA9PT0gYWN0aXZlRWxlbWVudCkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBGbGFnIGEgcGF1c2Ugb2JqZWN0IHRvIGJlIHJlc3VtZWQsIHdoaWNoIHdpbGwgb2NjdXIgZHVyaW5nIHRoZSBuZXh0IHRpY2suIEluXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IGFkZGl0aW9uLCB0aGUgcGF1c2Ugb2JqZWN0IHdpbGwgYXQgdGhhdCB0aW1lIGJlIGRlbGV0ZWQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhY3RpdmVDYWxsWzVdLnJlc3VtZSA9IHRydWU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIE9uY2Ugd2UgbWF0Y2ggYW4gZWxlbWVudCwgd2UgY2FuIGJvdW5jZSBvdXQgdG8gdGhlIG5leHQgY2FsbCBlbnRpcmVseSAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFByb2NlZWQgdG8gY2hlY2sgbmV4dCBjYWxsIGlmIHdlIGhhdmUgYWxyZWFkeSBtYXRjaGVkICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoZm91bmQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0LyogU2luY2UgcmVzdW1lIGNyZWF0ZXMgbm8gbmV3IHR3ZWVucywgZXhpdCBvdXQgb2YgVmVsb2NpdHkuICovXHJcblx0XHRcdFx0XHRyZXR1cm4gZ2V0Q2hhaW4oKTtcclxuXHJcblx0XHRcdFx0Y2FzZSBcImZpbmlzaFwiOlxyXG5cdFx0XHRcdGNhc2UgXCJmaW5pc2hBbGxcIjpcclxuXHRcdFx0XHRjYXNlIFwic3RvcFwiOlxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBBY3Rpb246IFN0b3BcclxuXHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdC8qIENsZWFyIHRoZSBjdXJyZW50bHktYWN0aXZlIGRlbGF5IG9uIGVhY2ggdGFyZ2V0ZWQgZWxlbWVudC4gKi9cclxuXHRcdFx0XHRcdCQuZWFjaChlbGVtZW50cywgZnVuY3Rpb24oaSwgZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoRGF0YShlbGVtZW50KSAmJiBEYXRhKGVsZW1lbnQpLmRlbGF5VGltZXIpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBTdG9wIHRoZSB0aW1lciBmcm9tIHRyaWdnZXJpbmcgaXRzIGNhY2hlZCBuZXh0KCkgZnVuY3Rpb24uICovXHJcblx0XHRcdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KERhdGEoZWxlbWVudCkuZGVsYXlUaW1lci5zZXRUaW1lb3V0KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogTWFudWFsbHkgY2FsbCB0aGUgbmV4dCgpIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIHN1YnNlcXVlbnQgcXVldWUgaXRlbXMgY2FuIHByb2dyZXNzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChEYXRhKGVsZW1lbnQpLmRlbGF5VGltZXIubmV4dCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0RGF0YShlbGVtZW50KS5kZWxheVRpbWVyLm5leHQoKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBEYXRhKGVsZW1lbnQpLmRlbGF5VGltZXI7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHdlIHdhbnQgdG8gZmluaXNoIGV2ZXJ5dGhpbmcgaW4gdGhlIHF1ZXVlLCB3ZSBoYXZlIHRvIGl0ZXJhdGUgdGhyb3VnaCBpdFxyXG5cdFx0XHRcdFx0XHQgYW5kIGNhbGwgZWFjaCBmdW5jdGlvbi4gVGhpcyB3aWxsIG1ha2UgdGhlbSBhY3RpdmUgY2FsbHMgYmVsb3csIHdoaWNoIHdpbGxcclxuXHRcdFx0XHRcdFx0IGNhdXNlIHRoZW0gdG8gYmUgYXBwbGllZCB2aWEgdGhlIGR1cmF0aW9uIHNldHRpbmcuICovXHJcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0aWVzTWFwID09PSBcImZpbmlzaEFsbFwiICYmIChvcHRpb25zID09PSB0cnVlIHx8IFR5cGUuaXNTdHJpbmcob3B0aW9ucykpKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBpdGVtcyBpbiB0aGUgZWxlbWVudCdzIHF1ZXVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdCQuZWFjaCgkLnF1ZXVlKGVsZW1lbnQsIFR5cGUuaXNTdHJpbmcob3B0aW9ucykgPyBvcHRpb25zIDogXCJcIiksIGZ1bmN0aW9uKF8sIGl0ZW0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIFRoZSBxdWV1ZSBhcnJheSBjYW4gY29udGFpbiBhbiBcImlucHJvZ3Jlc3NcIiBzdHJpbmcsIHdoaWNoIHdlIHNraXAuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoVHlwZS5pc0Z1bmN0aW9uKGl0ZW0pKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW0oKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogQ2xlYXJpbmcgdGhlICQucXVldWUoKSBhcnJheSBpcyBhY2hpZXZlZCBieSByZXNldHRpbmcgaXQgdG8gW10uICovXHJcblx0XHRcdFx0XHRcdFx0JC5xdWV1ZShlbGVtZW50LCBUeXBlLmlzU3RyaW5nKG9wdGlvbnMpID8gb3B0aW9ucyA6IFwiXCIsIFtdKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0dmFyIGNhbGxzVG9TdG9wID0gW107XHJcblxyXG5cdFx0XHRcdFx0LyogV2hlbiB0aGUgc3RvcCBhY3Rpb24gaXMgdHJpZ2dlcmVkLCB0aGUgZWxlbWVudHMnIGN1cnJlbnRseSBhY3RpdmUgY2FsbCBpcyBpbW1lZGlhdGVseSBzdG9wcGVkLiBUaGUgYWN0aXZlIGNhbGwgbWlnaHQgaGF2ZVxyXG5cdFx0XHRcdFx0IGJlZW4gYXBwbGllZCB0byBtdWx0aXBsZSBlbGVtZW50cywgaW4gd2hpY2ggY2FzZSBhbGwgb2YgdGhlIGNhbGwncyBlbGVtZW50cyB3aWxsIGJlIHN0b3BwZWQuIFdoZW4gYW4gZWxlbWVudFxyXG5cdFx0XHRcdFx0IGlzIHN0b3BwZWQsIHRoZSBuZXh0IGl0ZW0gaW4gaXRzIGFuaW1hdGlvbiBxdWV1ZSBpcyBpbW1lZGlhdGVseSB0cmlnZ2VyZWQuICovXHJcblx0XHRcdFx0XHQvKiBBbiBhZGRpdGlvbmFsIGFyZ3VtZW50IG1heSBiZSBwYXNzZWQgaW4gdG8gY2xlYXIgYW4gZWxlbWVudCdzIHJlbWFpbmluZyBxdWV1ZWQgY2FsbHMuIEVpdGhlciB0cnVlICh3aGljaCBkZWZhdWx0cyB0byB0aGUgXCJmeFwiIHF1ZXVlKVxyXG5cdFx0XHRcdFx0IG9yIGEgY3VzdG9tIHF1ZXVlIHN0cmluZyBjYW4gYmUgcGFzc2VkIGluLiAqL1xyXG5cdFx0XHRcdFx0LyogTm90ZTogVGhlIHN0b3AgY29tbWFuZCBydW5zIHByaW9yIHRvIFZlbG9jaXR5J3MgUXVldWVpbmcgcGhhc2Ugc2luY2UgaXRzIGJlaGF2aW9yIGlzIGludGVuZGVkIHRvIHRha2UgZWZmZWN0ICppbW1lZGlhdGVseSosXHJcblx0XHRcdFx0XHQgcmVnYXJkbGVzcyBvZiB0aGUgZWxlbWVudCdzIGN1cnJlbnQgcXVldWUgc3RhdGUuICovXHJcblxyXG5cdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIGV2ZXJ5IGFjdGl2ZSBjYWxsLiAqL1xyXG5cdFx0XHRcdFx0JC5lYWNoKFZlbG9jaXR5LlN0YXRlLmNhbGxzLCBmdW5jdGlvbihpLCBhY3RpdmVDYWxsKSB7XHJcblx0XHRcdFx0XHRcdC8qIEluYWN0aXZlIGNhbGxzIGFyZSBzZXQgdG8gZmFsc2UgYnkgdGhlIGxvZ2ljIGluc2lkZSBjb21wbGV0ZUNhbGwoKS4gU2tpcCB0aGVtLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoYWN0aXZlQ2FsbCkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgYWN0aXZlIGNhbGwncyB0YXJnZXRlZCBlbGVtZW50cy4gKi9cclxuXHRcdFx0XHRcdFx0XHQkLmVhY2goYWN0aXZlQ2FsbFsxXSwgZnVuY3Rpb24oaywgYWN0aXZlRWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogSWYgdHJ1ZSB3YXMgcGFzc2VkIGluIGFzIGEgc2Vjb25kYXJ5IGFyZ3VtZW50LCBjbGVhciBhYnNvbHV0ZWx5IGFsbCBjYWxscyBvbiB0aGlzIGVsZW1lbnQuIE90aGVyd2lzZSwgb25seVxyXG5cdFx0XHRcdFx0XHRcdFx0IGNsZWFyIGNhbGxzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVsZXZhbnQgcXVldWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBDYWxsIHN0b3BwaW5nIGxvZ2ljIHdvcmtzIGFzIGZvbGxvd3M6XHJcblx0XHRcdFx0XHRcdFx0XHQgLSBvcHRpb25zID09PSB0cnVlIC0tPiBzdG9wIGN1cnJlbnQgZGVmYXVsdCBxdWV1ZSBjYWxscyAoYW5kIHF1ZXVlOmZhbHNlIGNhbGxzKSwgaW5jbHVkaW5nIHJlbWFpbmluZyBxdWV1ZWQgb25lcy5cclxuXHRcdFx0XHRcdFx0XHRcdCAtIG9wdGlvbnMgPT09IHVuZGVmaW5lZCAtLT4gc3RvcCBjdXJyZW50IHF1ZXVlOlwiXCIgY2FsbCBhbmQgYWxsIHF1ZXVlOmZhbHNlIGNhbGxzLlxyXG5cdFx0XHRcdFx0XHRcdFx0IC0gb3B0aW9ucyA9PT0gZmFsc2UgLS0+IHN0b3Agb25seSBxdWV1ZTpmYWxzZSBjYWxscy5cclxuXHRcdFx0XHRcdFx0XHRcdCAtIG9wdGlvbnMgPT09IFwiY3VzdG9tXCIgLS0+IHN0b3AgY3VycmVudCBxdWV1ZTpcImN1c3RvbVwiIGNhbGwsIGluY2x1ZGluZyByZW1haW5pbmcgcXVldWVkIG9uZXMgKHRoZXJlIGlzIG5vIGZ1bmN0aW9uYWxpdHkgdG8gb25seSBjbGVhciB0aGUgY3VycmVudGx5LXJ1bm5pbmcgcXVldWU6XCJjdXN0b21cIiBjYWxsKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHZhciBxdWV1ZU5hbWUgPSAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSA/IFwiXCIgOiBvcHRpb25zO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChxdWV1ZU5hbWUgIT09IHRydWUgJiYgKGFjdGl2ZUNhbGxbMl0ucXVldWUgIT09IHF1ZXVlTmFtZSkgJiYgIShvcHRpb25zID09PSB1bmRlZmluZWQgJiYgYWN0aXZlQ2FsbFsyXS5xdWV1ZSA9PT0gZmFsc2UpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgY2FsbHMgdGFyZ2V0ZWQgYnkgdGhlIHN0b3AgY29tbWFuZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdCQuZWFjaChlbGVtZW50cywgZnVuY3Rpb24obCwgZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBDaGVjayB0aGF0IHRoaXMgY2FsbCB3YXMgYXBwbGllZCB0byB0aGUgdGFyZ2V0IGVsZW1lbnQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50ID09PSBhY3RpdmVFbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogT3B0aW9uYWxseSBjbGVhciB0aGUgcmVtYWluaW5nIHF1ZXVlZCBjYWxscy4gSWYgd2UncmUgZG9pbmcgXCJmaW5pc2hBbGxcIiB0aGlzIHdvbid0IGZpbmQgYW55dGhpbmcsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IGR1ZSB0byB0aGUgcXVldWUtY2xlYXJpbmcgYWJvdmUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMgPT09IHRydWUgfHwgVHlwZS5pc1N0cmluZyhvcHRpb25zKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBpdGVtcyBpbiB0aGUgZWxlbWVudCdzIHF1ZXVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0JC5lYWNoKCQucXVldWUoZWxlbWVudCwgVHlwZS5pc1N0cmluZyhvcHRpb25zKSA/IG9wdGlvbnMgOiBcIlwiKSwgZnVuY3Rpb24oXywgaXRlbSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBUaGUgcXVldWUgYXJyYXkgY2FuIGNvbnRhaW4gYW4gXCJpbnByb2dyZXNzXCIgc3RyaW5nLCB3aGljaCB3ZSBza2lwLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoVHlwZS5pc0Z1bmN0aW9uKGl0ZW0pKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogUGFzcyB0aGUgaXRlbSdzIGNhbGxiYWNrIGEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgd2Ugd2FudCB0byBhYm9ydCBmcm9tIHRoZSBxdWV1ZSBjYWxsLlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAoU3BlY2lmaWNhbGx5LCB0aGUgcXVldWUgd2lsbCByZXNvbHZlIHRoZSBjYWxsJ3MgYXNzb2NpYXRlZCBwcm9taXNlIHRoZW4gYWJvcnQuKSAgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtKG51bGwsIHRydWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBDbGVhcmluZyB0aGUgJC5xdWV1ZSgpIGFycmF5IGlzIGFjaGlldmVkIGJ5IHJlc2V0dGluZyBpdCB0byBbXS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCQucXVldWUoZWxlbWVudCwgVHlwZS5pc1N0cmluZyhvcHRpb25zKSA/IG9wdGlvbnMgOiBcIlwiLCBbXSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocHJvcGVydGllc01hcCA9PT0gXCJzdG9wXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFNpbmNlIFwicmV2ZXJzZVwiIHVzZXMgY2FjaGVkIHN0YXJ0IHZhbHVlcyAodGhlIHByZXZpb3VzIGNhbGwncyBlbmRWYWx1ZXMpLCB0aGVzZSB2YWx1ZXMgbXVzdCBiZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0IGNoYW5nZWQgdG8gcmVmbGVjdCB0aGUgZmluYWwgdmFsdWUgdGhhdCB0aGUgZWxlbWVudHMgd2VyZSBhY3R1YWxseSB0d2VlbmVkIHRvLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogSWYgb25seSBxdWV1ZTpmYWxzZS9xdWV1ZTpcImN1c3RvbVwiIGFuaW1hdGlvbnMgYXJlIGN1cnJlbnRseSBydW5uaW5nIG9uIGFuIGVsZW1lbnQsIGl0IHdvbid0IGhhdmUgYSB0d2VlbnNDb250YWluZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBvYmplY3QuIEFsc28sIHF1ZXVlOmZhbHNlL3F1ZXVlOlwiY3VzdG9tXCIgYW5pbWF0aW9ucyBjYW4ndCBiZSByZXZlcnNlZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChkYXRhICYmIGRhdGEudHdlZW5zQ29udGFpbmVyICYmIChxdWV1ZU5hbWUgPT09IHRydWUgfHwgcXVldWVOYW1lID09PSBcIlwiKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQkLmVhY2goZGF0YS50d2VlbnNDb250YWluZXIsIGZ1bmN0aW9uKG0sIGFjdGl2ZVR3ZWVuKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWN0aXZlVHdlZW4uZW5kVmFsdWUgPSBhY3RpdmVUd2Vlbi5jdXJyZW50VmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhbGxzVG9TdG9wLnB1c2goaSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0aWVzTWFwID09PSBcImZpbmlzaFwiIHx8IHByb3BlcnRpZXNNYXAgPT09IFwiZmluaXNoQWxsXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIFRvIGdldCBhY3RpdmUgdHdlZW5zIHRvIGZpbmlzaCBpbW1lZGlhdGVseSwgd2UgZm9yY2VmdWxseSBzaG9ydGVuIHRoZWlyIGR1cmF0aW9ucyB0byAxbXMgc28gdGhhdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0IHRoZXkgZmluaXNoIHVwb24gdGhlIG5leHQgckFmIHRpY2sgdGhlbiBwcm9jZWVkIHdpdGggbm9ybWFsIGNhbGwgY29tcGxldGlvbiBsb2dpYy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGl2ZUNhbGxbMl0uZHVyYXRpb24gPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdC8qIFByZW1hdHVyZWx5IGNhbGwgY29tcGxldGVDYWxsKCkgb24gZWFjaCBtYXRjaGVkIGFjdGl2ZSBjYWxsLiBQYXNzIGFuIGFkZGl0aW9uYWwgZmxhZyBmb3IgXCJzdG9wXCIgdG8gaW5kaWNhdGVcclxuXHRcdFx0XHRcdCB0aGF0IHRoZSBjb21wbGV0ZSBjYWxsYmFjayBhbmQgZGlzcGxheTpub25lIHNldHRpbmcgc2hvdWxkIGJlIHNraXBwZWQgc2luY2Ugd2UncmUgY29tcGxldGluZyBwcmVtYXR1cmVseS4gKi9cclxuXHRcdFx0XHRcdGlmIChwcm9wZXJ0aWVzTWFwID09PSBcInN0b3BcIikge1xyXG5cdFx0XHRcdFx0XHQkLmVhY2goY2FsbHNUb1N0b3AsIGZ1bmN0aW9uKGksIGopIHtcclxuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZUNhbGwoaiwgdHJ1ZSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHByb21pc2VEYXRhLnByb21pc2UpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBJbW1lZGlhdGVseSByZXNvbHZlIHRoZSBwcm9taXNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN0b3AgY2FsbCBzaW5jZSBzdG9wIHJ1bnMgc3luY2hyb25vdXNseS4gKi9cclxuXHRcdFx0XHRcdFx0XHRwcm9taXNlRGF0YS5yZXNvbHZlcihlbGVtZW50cyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBTaW5jZSB3ZSdyZSBzdG9wcGluZywgYW5kIG5vdCBwcm9jZWVkaW5nIHdpdGggcXVldWVpbmcsIGV4aXQgb3V0IG9mIFZlbG9jaXR5LiAqL1xyXG5cdFx0XHRcdFx0cmV0dXJuIGdldENoYWluKCk7XHJcblxyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHQvKiBUcmVhdCBhIG5vbi1lbXB0eSBwbGFpbiBvYmplY3QgYXMgYSBsaXRlcmFsIHByb3BlcnRpZXMgbWFwLiAqL1xyXG5cdFx0XHRcdFx0aWYgKCQuaXNQbGFpbk9iamVjdChwcm9wZXJ0aWVzTWFwKSAmJiAhVHlwZS5pc0VtcHR5T2JqZWN0KHByb3BlcnRpZXNNYXApKSB7XHJcblx0XHRcdFx0XHRcdGFjdGlvbiA9IFwic3RhcnRcIjtcclxuXHJcblx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdCBSZWRpcmVjdHNcclxuXHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBDaGVjayBpZiBhIHN0cmluZyBtYXRjaGVzIGEgcmVnaXN0ZXJlZCByZWRpcmVjdCAoc2VlIFJlZGlyZWN0cyBhYm92ZSkuICovXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKFR5cGUuaXNTdHJpbmcocHJvcGVydGllc01hcCkgJiYgVmVsb2NpdHkuUmVkaXJlY3RzW3Byb3BlcnRpZXNNYXBdKSB7XHJcblx0XHRcdFx0XHRcdG9wdHMgPSAkLmV4dGVuZCh7fSwgb3B0aW9ucyk7XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgZHVyYXRpb25PcmlnaW5hbCA9IG9wdHMuZHVyYXRpb24sXHJcblx0XHRcdFx0XHRcdFx0XHRkZWxheU9yaWdpbmFsID0gb3B0cy5kZWxheSB8fCAwO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogSWYgdGhlIGJhY2t3YXJkcyBvcHRpb24gd2FzIHBhc3NlZCBpbiwgcmV2ZXJzZSB0aGUgZWxlbWVudCBzZXQgc28gdGhhdCBlbGVtZW50cyBhbmltYXRlIGZyb20gdGhlIGxhc3QgdG8gdGhlIGZpcnN0LiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAob3B0cy5iYWNrd2FyZHMgPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50cyA9ICQuZXh0ZW5kKHRydWUsIFtdLCBlbGVtZW50cykucmV2ZXJzZSgpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJbmRpdmlkdWFsbHkgdHJpZ2dlciB0aGUgcmVkaXJlY3QgZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgc2V0IHRvIHByZXZlbnQgdXNlcnMgZnJvbSBoYXZpbmcgdG8gaGFuZGxlIGl0ZXJhdGlvbiBsb2dpYyBpbiB0aGVpciByZWRpcmVjdC4gKi9cclxuXHRcdFx0XHRcdFx0JC5lYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50SW5kZXgsIGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgc3RhZ2dlciBvcHRpb24gd2FzIHBhc3NlZCBpbiwgc3VjY2Vzc2l2ZWx5IGRlbGF5IGVhY2ggZWxlbWVudCBieSB0aGUgc3RhZ2dlciB2YWx1ZSAoaW4gbXMpLiBSZXRhaW4gdGhlIG9yaWdpbmFsIGRlbGF5IHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChwYXJzZUZsb2F0KG9wdHMuc3RhZ2dlcikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG9wdHMuZGVsYXkgPSBkZWxheU9yaWdpbmFsICsgKHBhcnNlRmxvYXQob3B0cy5zdGFnZ2VyKSAqIGVsZW1lbnRJbmRleCk7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChUeXBlLmlzRnVuY3Rpb24ob3B0cy5zdGFnZ2VyKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0b3B0cy5kZWxheSA9IGRlbGF5T3JpZ2luYWwgKyBvcHRzLnN0YWdnZXIuY2FsbChlbGVtZW50LCBlbGVtZW50SW5kZXgsIGVsZW1lbnRzTGVuZ3RoKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIElmIHRoZSBkcmFnIG9wdGlvbiB3YXMgcGFzc2VkIGluLCBzdWNjZXNzaXZlbHkgaW5jcmVhc2UvZGVjcmVhc2UgKGRlcGVuZGluZyBvbiB0aGUgcHJlc2Vuc2Ugb2Ygb3B0cy5iYWNrd2FyZHMpXHJcblx0XHRcdFx0XHRcdFx0IHRoZSBkdXJhdGlvbiBvZiBlYWNoIGVsZW1lbnQncyBhbmltYXRpb24sIHVzaW5nIGZsb29ycyB0byBwcmV2ZW50IHByb2R1Y2luZyB2ZXJ5IHNob3J0IGR1cmF0aW9ucy4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAob3B0cy5kcmFnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBEZWZhdWx0IHRoZSBkdXJhdGlvbiBvZiBVSSBwYWNrIGVmZmVjdHMgKGNhbGxvdXRzIGFuZCB0cmFuc2l0aW9ucykgdG8gMTAwMG1zIGluc3RlYWQgb2YgdGhlIHVzdWFsIGRlZmF1bHQgZHVyYXRpb24gb2YgNDAwbXMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRvcHRzLmR1cmF0aW9uID0gcGFyc2VGbG9hdChkdXJhdGlvbk9yaWdpbmFsKSB8fCAoL14oY2FsbG91dHx0cmFuc2l0aW9uKS8udGVzdChwcm9wZXJ0aWVzTWFwKSA/IDEwMDAgOiBEVVJBVElPTl9ERUZBVUxUKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBGb3IgZWFjaCBlbGVtZW50LCB0YWtlIHRoZSBncmVhdGVyIGR1cmF0aW9uIG9mOiBBKSBhbmltYXRpb24gY29tcGxldGlvbiBwZXJjZW50YWdlIHJlbGF0aXZlIHRvIHRoZSBvcmlnaW5hbCBkdXJhdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdCBCKSA3NSUgb2YgdGhlIG9yaWdpbmFsIGR1cmF0aW9uLCBvciBDKSBhIDIwMG1zIGZhbGxiYWNrIChpbiBjYXNlIGR1cmF0aW9uIGlzIGFscmVhZHkgc2V0IHRvIGEgbG93IHZhbHVlKS5cclxuXHRcdFx0XHRcdFx0XHRcdCBUaGUgZW5kIHJlc3VsdCBpcyBhIGJhc2VsaW5lIG9mIDc1JSBvZiB0aGUgcmVkaXJlY3QncyBkdXJhdGlvbiB0aGF0IGluY3JlYXNlcy9kZWNyZWFzZXMgYXMgdGhlIGVuZCBvZiB0aGUgZWxlbWVudCBzZXQgaXMgYXBwcm9hY2hlZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdG9wdHMuZHVyYXRpb24gPSBNYXRoLm1heChvcHRzLmR1cmF0aW9uICogKG9wdHMuYmFja3dhcmRzID8gMSAtIGVsZW1lbnRJbmRleCAvIGVsZW1lbnRzTGVuZ3RoIDogKGVsZW1lbnRJbmRleCArIDEpIC8gZWxlbWVudHNMZW5ndGgpLCBvcHRzLmR1cmF0aW9uICogMC43NSwgMjAwKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIFBhc3MgaW4gdGhlIGNhbGwncyBvcHRzIG9iamVjdCBzbyB0aGF0IHRoZSByZWRpcmVjdCBjYW4gb3B0aW9uYWxseSBleHRlbmQgaXQuIEl0IGRlZmF1bHRzIHRvIGFuIGVtcHR5IG9iamVjdCBpbnN0ZWFkIG9mIG51bGwgdG9cclxuXHRcdFx0XHRcdFx0XHQgcmVkdWNlIHRoZSBvcHRzIGNoZWNraW5nIGxvZ2ljIHJlcXVpcmVkIGluc2lkZSB0aGUgcmVkaXJlY3QuICovXHJcblx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuUmVkaXJlY3RzW3Byb3BlcnRpZXNNYXBdLmNhbGwoZWxlbWVudCwgZWxlbWVudCwgb3B0cyB8fCB7fSwgZWxlbWVudEluZGV4LCBlbGVtZW50c0xlbmd0aCwgZWxlbWVudHMsIHByb21pc2VEYXRhLnByb21pc2UgPyBwcm9taXNlRGF0YSA6IHVuZGVmaW5lZCk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogU2luY2UgdGhlIGFuaW1hdGlvbiBsb2dpYyByZXNpZGVzIHdpdGhpbiB0aGUgcmVkaXJlY3QncyBvd24gY29kZSwgYWJvcnQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIGNhbGwuXHJcblx0XHRcdFx0XHRcdCAoVGhlIHBlcmZvcm1hbmNlIG92ZXJoZWFkIHVwIHRvIHRoaXMgcG9pbnQgaXMgdmlydHVhbGx5IG5vbi1leGlzdGFudC4pICovXHJcblx0XHRcdFx0XHRcdC8qIE5vdGU6IFRoZSBqUXVlcnkgY2FsbCBjaGFpbiBpcyBrZXB0IGludGFjdCBieSByZXR1cm5pbmcgdGhlIGNvbXBsZXRlIGVsZW1lbnQgc2V0LiAqL1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZ2V0Q2hhaW4oKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHZhciBhYm9ydEVycm9yID0gXCJWZWxvY2l0eTogRmlyc3QgYXJndW1lbnQgKFwiICsgcHJvcGVydGllc01hcCArIFwiKSB3YXMgbm90IGEgcHJvcGVydHkgbWFwLCBhIGtub3duIGFjdGlvbiwgb3IgYSByZWdpc3RlcmVkIHJlZGlyZWN0LiBBYm9ydGluZy5cIjtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChwcm9taXNlRGF0YS5wcm9taXNlKSB7XHJcblx0XHRcdFx0XHRcdFx0cHJvbWlzZURhdGEucmVqZWN0ZXIobmV3IEVycm9yKGFib3J0RXJyb3IpKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICh3aW5kb3cuY29uc29sZSkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGFib3J0RXJyb3IpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZ2V0Q2hhaW4oKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdCBDYWxsLVdpZGUgVmFyaWFibGVzXHJcblx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIEEgY29udGFpbmVyIGZvciBDU1MgdW5pdCBjb252ZXJzaW9uIHJhdGlvcyAoZS5nLiAlLCByZW0sIGFuZCBlbSA9PT4gcHgpIHRoYXQgaXMgdXNlZCB0byBjYWNoZSByYXRpb3MgYWNyb3NzIGFsbCBlbGVtZW50c1xyXG5cdFx0XHQgYmVpbmcgYW5pbWF0ZWQgaW4gYSBzaW5nbGUgVmVsb2NpdHkgY2FsbC4gQ2FsY3VsYXRpbmcgdW5pdCByYXRpb3MgbmVjZXNzaXRhdGVzIERPTSBxdWVyeWluZyBhbmQgdXBkYXRpbmcsIGFuZCBpcyB0aGVyZWZvcmVcclxuXHRcdFx0IGF2b2lkZWQgKHZpYSBjYWNoaW5nKSB3aGVyZXZlciBwb3NzaWJsZS4gVGhpcyBjb250YWluZXIgaXMgY2FsbC13aWRlIGluc3RlYWQgb2YgcGFnZS13aWRlIHRvIGF2b2lkIHRoZSByaXNrIG9mIHVzaW5nIHN0YWxlXHJcblx0XHRcdCBjb252ZXJzaW9uIG1ldHJpY3MgYWNyb3NzIFZlbG9jaXR5IGFuaW1hdGlvbnMgdGhhdCBhcmUgbm90IGltbWVkaWF0ZWx5IGNvbnNlY3V0aXZlbHkgY2hhaW5lZC4gKi9cclxuXHRcdFx0dmFyIGNhbGxVbml0Q29udmVyc2lvbkRhdGEgPSB7XHJcblx0XHRcdFx0bGFzdFBhcmVudDogbnVsbCxcclxuXHRcdFx0XHRsYXN0UG9zaXRpb246IG51bGwsXHJcblx0XHRcdFx0bGFzdEZvbnRTaXplOiBudWxsLFxyXG5cdFx0XHRcdGxhc3RQZXJjZW50VG9QeFdpZHRoOiBudWxsLFxyXG5cdFx0XHRcdGxhc3RQZXJjZW50VG9QeEhlaWdodDogbnVsbCxcclxuXHRcdFx0XHRsYXN0RW1Ub1B4OiBudWxsLFxyXG5cdFx0XHRcdHJlbVRvUHg6IG51bGwsXHJcblx0XHRcdFx0dndUb1B4OiBudWxsLFxyXG5cdFx0XHRcdHZoVG9QeDogbnVsbFxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0LyogQSBjb250YWluZXIgZm9yIGFsbCB0aGUgZW5zdWluZyB0d2VlbiBkYXRhIGFuZCBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWxsLiBUaGlzIGNvbnRhaW5lciBnZXRzIHB1c2hlZCB0byB0aGUgcGFnZS13aWRlXHJcblx0XHRcdCBWZWxvY2l0eS5TdGF0ZS5jYWxscyBhcnJheSB0aGF0IGlzIHByb2Nlc3NlZCBkdXJpbmcgYW5pbWF0aW9uIHRpY2tpbmcuICovXHJcblx0XHRcdHZhciBjYWxsID0gW107XHJcblxyXG5cdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdCBFbGVtZW50IFByb2Nlc3NpbmdcclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIEVsZW1lbnQgcHJvY2Vzc2luZyBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0cyAtLSBkYXRhIHByb2Nlc3NpbmcgdGhhdCBjYW5ub3QgZ28gc3RhbGUgYW5kIGRhdGEgcHJvY2Vzc2luZyB0aGF0ICpjYW4qIGdvIHN0YWxlIChpLmUuIHRoaXJkLXBhcnR5IHN0eWxlIG1vZGlmaWNhdGlvbnMpOlxyXG5cdFx0XHQgMSkgUHJlLVF1ZXVlaW5nOiBFbGVtZW50LXdpZGUgdmFyaWFibGVzLCBpbmNsdWRpbmcgdGhlIGVsZW1lbnQncyBkYXRhIHN0b3JhZ2UsIGFyZSBpbnN0YW50aWF0ZWQuIENhbGwgb3B0aW9ucyBhcmUgcHJlcGFyZWQuIElmIHRyaWdnZXJlZCwgdGhlIFN0b3AgYWN0aW9uIGlzIGV4ZWN1dGVkLlxyXG5cdFx0XHQgMikgUXVldWVpbmc6IFRoZSBsb2dpYyB0aGF0IHJ1bnMgb25jZSB0aGlzIGNhbGwgaGFzIHJlYWNoZWQgaXRzIHBvaW50IG9mIGV4ZWN1dGlvbiBpbiB0aGUgZWxlbWVudCdzICQucXVldWUoKSBzdGFjay4gTW9zdCBsb2dpYyBpcyBwbGFjZWQgaGVyZSB0byBhdm9pZCByaXNraW5nIGl0IGJlY29taW5nIHN0YWxlLlxyXG5cdFx0XHQgMykgUHVzaGluZzogQ29uc29saWRhdGlvbiBvZiB0aGUgdHdlZW4gZGF0YSBmb2xsb3dlZCBieSBpdHMgcHVzaCBvbnRvIHRoZSBnbG9iYWwgaW4tcHJvZ3Jlc3MgY2FsbHMgY29udGFpbmVyLlxyXG5cdFx0XHQgYGVsZW1lbnRBcnJheUluZGV4YCBhbGxvd3MgcGFzc2luZyBpbmRleCBvZiB0aGUgZWxlbWVudCBpbiB0aGUgb3JpZ2luYWwgYXJyYXkgdG8gdmFsdWUgZnVuY3Rpb25zLlxyXG5cdFx0XHQgSWYgYGVsZW1lbnRzSW5kZXhgIHdlcmUgdXNlZCBpbnN0ZWFkIHRoZSBpbmRleCB3b3VsZCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBlbGVtZW50cycgcGVyLWVsZW1lbnQgcXVldWUuXHJcblx0XHRcdCAqL1xyXG5cdFx0XHRmdW5jdGlvbiBwcm9jZXNzRWxlbWVudChlbGVtZW50LCBlbGVtZW50QXJyYXlJbmRleCkge1xyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBQYXJ0IEk6IFByZS1RdWV1ZWluZ1xyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0IEVsZW1lbnQtV2lkZSBWYXJpYWJsZXNcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHR2YXIgLyogVGhlIHJ1bnRpbWUgb3B0cyBvYmplY3QgaXMgdGhlIGV4dGVuc2lvbiBvZiB0aGUgY3VycmVudCBjYWxsJ3Mgb3B0aW9ucyBhbmQgVmVsb2NpdHkncyBwYWdlLXdpZGUgb3B0aW9uIGRlZmF1bHRzLiAqL1xyXG5cdFx0XHRcdFx0XHRvcHRzID0gJC5leHRlbmQoe30sIFZlbG9jaXR5LmRlZmF1bHRzLCBvcHRpb25zKSxcclxuXHRcdFx0XHRcdFx0LyogQSBjb250YWluZXIgZm9yIHRoZSBwcm9jZXNzZWQgZGF0YSBhc3NvY2lhdGVkIHdpdGggZWFjaCBwcm9wZXJ0eSBpbiB0aGUgcHJvcGVydHlNYXAuXHJcblx0XHRcdFx0XHRcdCAoRWFjaCBwcm9wZXJ0eSBpbiB0aGUgbWFwIHByb2R1Y2VzIGl0cyBvd24gXCJ0d2VlblwiLikgKi9cclxuXHRcdFx0XHRcdFx0dHdlZW5zQ29udGFpbmVyID0ge30sXHJcblx0XHRcdFx0XHRcdGVsZW1lbnRVbml0Q29udmVyc2lvbkRhdGE7XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgRWxlbWVudCBJbml0XHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0aWYgKERhdGEoZWxlbWVudCkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0VmVsb2NpdHkuaW5pdChlbGVtZW50KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBEZWxheVxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIFNpbmNlIHF1ZXVlOmZhbHNlIGRvZXNuJ3QgcmVzcGVjdCB0aGUgaXRlbSdzIGV4aXN0aW5nIHF1ZXVlLCB3ZSBhdm9pZCBpbmplY3RpbmcgaXRzIGRlbGF5IGhlcmUgKGl0J3Mgc2V0IGxhdGVyIG9uKS4gKi9cclxuXHRcdFx0XHQvKiBOb3RlOiBWZWxvY2l0eSByb2xscyBpdHMgb3duIGRlbGF5IGZ1bmN0aW9uIHNpbmNlIGpRdWVyeSBkb2Vzbid0IGhhdmUgYSB1dGlsaXR5IGFsaWFzIGZvciAkLmZuLmRlbGF5KClcclxuXHRcdFx0XHQgKGFuZCB0aHVzIHJlcXVpcmVzIGpRdWVyeSBlbGVtZW50IGNyZWF0aW9uLCB3aGljaCB3ZSBhdm9pZCBzaW5jZSBpdHMgb3ZlcmhlYWQgaW5jbHVkZXMgRE9NIHF1ZXJ5aW5nKS4gKi9cclxuXHRcdFx0XHRpZiAocGFyc2VGbG9hdChvcHRzLmRlbGF5KSAmJiBvcHRzLnF1ZXVlICE9PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0JC5xdWV1ZShlbGVtZW50LCBvcHRzLnF1ZXVlLCBmdW5jdGlvbihuZXh0LCBjbGVhclF1ZXVlKSB7XHJcblx0XHRcdFx0XHRcdGlmIChjbGVhclF1ZXVlID09PSB0cnVlKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogRG8gbm90IGNvbnRpbnVlIHdpdGggYW5pbWF0aW9uIHF1ZXVlaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBUaGlzIGlzIGEgZmxhZyB1c2VkIHRvIGluZGljYXRlIHRvIHRoZSB1cGNvbWluZyBjb21wbGV0ZUNhbGwoKSBmdW5jdGlvbiB0aGF0IHRoaXMgcXVldWUgZW50cnkgd2FzIGluaXRpYXRlZCBieSBWZWxvY2l0eS4gU2VlIGNvbXBsZXRlQ2FsbCgpIGZvciBmdXJ0aGVyIGRldGFpbHMuICovXHJcblx0XHRcdFx0XHRcdFZlbG9jaXR5LnZlbG9jaXR5UXVldWVFbnRyeUZsYWcgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogVGhlIGVuc3VpbmcgcXVldWUgaXRlbSAod2hpY2ggaXMgYXNzaWduZWQgdG8gdGhlIFwibmV4dFwiIGFyZ3VtZW50IHRoYXQgJC5xdWV1ZSgpIGF1dG9tYXRpY2FsbHkgcGFzc2VzIGluKSB3aWxsIGJlIHRyaWdnZXJlZCBhZnRlciBhIHNldFRpbWVvdXQgZGVsYXkuXHJcblx0XHRcdFx0XHRcdCBUaGUgc2V0VGltZW91dCBpcyBzdG9yZWQgc28gdGhhdCBpdCBjYW4gYmUgc3ViamVjdGVkIHRvIGNsZWFyVGltZW91dCgpIGlmIHRoaXMgYW5pbWF0aW9uIGlzIHByZW1hdHVyZWx5IHN0b3BwZWQgdmlhIFZlbG9jaXR5J3MgXCJzdG9wXCIgY29tbWFuZCwgYW5kXHJcblx0XHRcdFx0XHRcdCBkZWxheUJlZ2luL2RlbGF5VGltZSBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBjYW4gXCJwYXVzZVwiIGFuZCBcInJlc3VtZVwiIGEgdHdlZW4gdGhhdCBpcyBzdGlsbCBtaWQtZGVsYXkuICovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBUZW1wb3JhcmlseSBzdG9yZSBkZWxheWVkIGVsZW1lbnRzIHRvIGZhY2lsaXRlIGFjY2VzcyBmb3IgZ2xvYmFsIHBhdXNlL3Jlc3VtZSAqL1xyXG5cdFx0XHRcdFx0XHR2YXIgY2FsbEluZGV4ID0gVmVsb2NpdHkuU3RhdGUuZGVsYXllZEVsZW1lbnRzLmNvdW50Kys7XHJcblx0XHRcdFx0XHRcdFZlbG9jaXR5LlN0YXRlLmRlbGF5ZWRFbGVtZW50c1tjYWxsSW5kZXhdID0gZWxlbWVudDtcclxuXHJcblx0XHRcdFx0XHRcdHZhciBkZWxheUNvbXBsZXRlID0gKGZ1bmN0aW9uKGluZGV4KSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogQ2xlYXIgdGhlIHRlbXBvcmFyeSBlbGVtZW50ICovXHJcblx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5kZWxheWVkRWxlbWVudHNbaW5kZXhdID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogRmluYWxseSwgaXNzdWUgdGhlIGNhbGwgKi9cclxuXHRcdFx0XHRcdFx0XHRcdG5leHQoKTtcclxuXHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHR9KShjYWxsSW5kZXgpO1xyXG5cclxuXHJcblx0XHRcdFx0XHRcdERhdGEoZWxlbWVudCkuZGVsYXlCZWdpbiA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcblx0XHRcdFx0XHRcdERhdGEoZWxlbWVudCkuZGVsYXkgPSBwYXJzZUZsb2F0KG9wdHMuZGVsYXkpO1xyXG5cdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLmRlbGF5VGltZXIgPSB7XHJcblx0XHRcdFx0XHRcdFx0c2V0VGltZW91dDogc2V0VGltZW91dChuZXh0LCBwYXJzZUZsb2F0KG9wdHMuZGVsYXkpKSxcclxuXHRcdFx0XHRcdFx0XHRuZXh0OiBkZWxheUNvbXBsZXRlXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBEdXJhdGlvblxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIFN1cHBvcnQgZm9yIGpRdWVyeSdzIG5hbWVkIGR1cmF0aW9ucy4gKi9cclxuXHRcdFx0XHRzd2l0Y2ggKG9wdHMuZHVyYXRpb24udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSB7XHJcblx0XHRcdFx0XHRjYXNlIFwiZmFzdFwiOlxyXG5cdFx0XHRcdFx0XHRvcHRzLmR1cmF0aW9uID0gMjAwO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRjYXNlIFwibm9ybWFsXCI6XHJcblx0XHRcdFx0XHRcdG9wdHMuZHVyYXRpb24gPSBEVVJBVElPTl9ERUZBVUxUO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRjYXNlIFwic2xvd1wiOlxyXG5cdFx0XHRcdFx0XHRvcHRzLmR1cmF0aW9uID0gNjAwO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0XHQvKiBSZW1vdmUgdGhlIHBvdGVudGlhbCBcIm1zXCIgc3VmZml4IGFuZCBkZWZhdWx0IHRvIDEgaWYgdGhlIHVzZXIgaXMgYXR0ZW1wdGluZyB0byBzZXQgYSBkdXJhdGlvbiBvZiAwIChpbiBvcmRlciB0byBwcm9kdWNlIGFuIGltbWVkaWF0ZSBzdHlsZSBjaGFuZ2UpLiAqL1xyXG5cdFx0XHRcdFx0XHRvcHRzLmR1cmF0aW9uID0gcGFyc2VGbG9hdChvcHRzLmR1cmF0aW9uKSB8fCAxO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBHbG9iYWwgT3B0aW9uOiBNb2NrXHJcblx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0aWYgKFZlbG9jaXR5Lm1vY2sgIT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHQvKiBJbiBtb2NrIG1vZGUsIGFsbCBhbmltYXRpb25zIGFyZSBmb3JjZWQgdG8gMW1zIHNvIHRoYXQgdGhleSBvY2N1ciBpbW1lZGlhdGVseSB1cG9uIHRoZSBuZXh0IHJBRiB0aWNrLlxyXG5cdFx0XHRcdFx0IEFsdGVybmF0aXZlbHksIGEgbXVsdGlwbGllciBjYW4gYmUgcGFzc2VkIGluIHRvIHRpbWUgcmVtYXAgYWxsIGRlbGF5cyBhbmQgZHVyYXRpb25zLiAqL1xyXG5cdFx0XHRcdFx0aWYgKFZlbG9jaXR5Lm1vY2sgPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdFx0b3B0cy5kdXJhdGlvbiA9IG9wdHMuZGVsYXkgPSAxO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0b3B0cy5kdXJhdGlvbiAqPSBwYXJzZUZsb2F0KFZlbG9jaXR5Lm1vY2spIHx8IDE7XHJcblx0XHRcdFx0XHRcdG9wdHMuZGVsYXkgKj0gcGFyc2VGbG9hdChWZWxvY2l0eS5tb2NrKSB8fCAxO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBFYXNpbmdcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0b3B0cy5lYXNpbmcgPSBnZXRFYXNpbmcob3B0cy5lYXNpbmcsIG9wdHMuZHVyYXRpb24pO1xyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBPcHRpb246IENhbGxiYWNrc1xyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBDYWxsYmFja3MgbXVzdCBmdW5jdGlvbnMuIE90aGVyd2lzZSwgZGVmYXVsdCB0byBudWxsLiAqL1xyXG5cdFx0XHRcdGlmIChvcHRzLmJlZ2luICYmICFUeXBlLmlzRnVuY3Rpb24ob3B0cy5iZWdpbikpIHtcclxuXHRcdFx0XHRcdG9wdHMuYmVnaW4gPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKG9wdHMucHJvZ3Jlc3MgJiYgIVR5cGUuaXNGdW5jdGlvbihvcHRzLnByb2dyZXNzKSkge1xyXG5cdFx0XHRcdFx0b3B0cy5wcm9ncmVzcyA9IG51bGw7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAob3B0cy5jb21wbGV0ZSAmJiAhVHlwZS5pc0Z1bmN0aW9uKG9wdHMuY29tcGxldGUpKSB7XHJcblx0XHRcdFx0XHRvcHRzLmNvbXBsZXRlID0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBEaXNwbGF5ICYgVmlzaWJpbGl0eVxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIFJlZmVyIHRvIFZlbG9jaXR5J3MgZG9jdW1lbnRhdGlvbiAoVmVsb2NpdHlKUy5vcmcvI2Rpc3BsYXlBbmRWaXNpYmlsaXR5KSBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZGlzcGxheSBhbmQgdmlzaWJpbGl0eSBvcHRpb25zJyBiZWhhdmlvci4gKi9cclxuXHRcdFx0XHQvKiBOb3RlOiBXZSBzdHJpY3RseSBjaGVjayBmb3IgdW5kZWZpbmVkIGluc3RlYWQgb2YgZmFsc2luZXNzIGJlY2F1c2UgZGlzcGxheSBhY2NlcHRzIGFuIGVtcHR5IHN0cmluZyB2YWx1ZS4gKi9cclxuXHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ICE9PSB1bmRlZmluZWQgJiYgb3B0cy5kaXNwbGF5ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRvcHRzLmRpc3BsYXkgPSBvcHRzLmRpc3BsYXkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHRcdFx0XHRcdC8qIFVzZXJzIGNhbiBwYXNzIGluIGEgc3BlY2lhbCBcImF1dG9cIiB2YWx1ZSB0byBpbnN0cnVjdCBWZWxvY2l0eSB0byBzZXQgdGhlIGVsZW1lbnQgdG8gaXRzIGRlZmF1bHQgZGlzcGxheSB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdGlmIChvcHRzLmRpc3BsYXkgPT09IFwiYXV0b1wiKSB7XHJcblx0XHRcdFx0XHRcdG9wdHMuZGlzcGxheSA9IFZlbG9jaXR5LkNTUy5WYWx1ZXMuZ2V0RGlzcGxheVR5cGUoZWxlbWVudCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAob3B0cy52aXNpYmlsaXR5ICE9PSB1bmRlZmluZWQgJiYgb3B0cy52aXNpYmlsaXR5ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRvcHRzLnZpc2liaWxpdHkgPSBvcHRzLnZpc2liaWxpdHkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBtb2JpbGVIQVxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBXaGVuIHNldCB0byB0cnVlLCBhbmQgaWYgdGhpcyBpcyBhIG1vYmlsZSBkZXZpY2UsIG1vYmlsZUhBIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gKHZpYSBhIG51bGwgdHJhbnNmb3JtIGhhY2spXHJcblx0XHRcdFx0IG9uIGFuaW1hdGluZyBlbGVtZW50cy4gSEEgaXMgcmVtb3ZlZCBmcm9tIHRoZSBlbGVtZW50IGF0IHRoZSBjb21wbGV0aW9uIG9mIGl0cyBhbmltYXRpb24uICovXHJcblx0XHRcdFx0LyogTm90ZTogQW5kcm9pZCBHaW5nZXJicmVhZCBkb2Vzbid0IHN1cHBvcnQgSEEuIElmIGEgbnVsbCB0cmFuc2Zvcm0gaGFjayAobW9iaWxlSEEpIGlzIGluIGZhY3Qgc2V0LCBpdCB3aWxsIHByZXZlbnQgb3RoZXIgdHJhbmZvcm0gc3VicHJvcGVydGllcyBmcm9tIHRha2luZyBlZmZlY3QuICovXHJcblx0XHRcdFx0LyogTm90ZTogWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhlIHVzZSBvZiBtb2JpbGVIQSBpbiBWZWxvY2l0eSdzIGRvY3VtZW50YXRpb246IFZlbG9jaXR5SlMub3JnLyNtb2JpbGVIQS4gKi9cclxuXHRcdFx0XHRvcHRzLm1vYmlsZUhBID0gKG9wdHMubW9iaWxlSEEgJiYgVmVsb2NpdHkuU3RhdGUuaXNNb2JpbGUgJiYgIVZlbG9jaXR5LlN0YXRlLmlzR2luZ2VyYnJlYWQpO1xyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgUGFydCBJSTogUXVldWVpbmdcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIFdoZW4gYSBzZXQgb2YgZWxlbWVudHMgaXMgdGFyZ2V0ZWQgYnkgYSBWZWxvY2l0eSBjYWxsLCB0aGUgc2V0IGlzIGJyb2tlbiB1cCBhbmQgZWFjaCBlbGVtZW50IGhhcyB0aGUgY3VycmVudCBWZWxvY2l0eSBjYWxsIGluZGl2aWR1YWxseSBxdWV1ZWQgb250byBpdC5cclxuXHRcdFx0XHQgSW4gdGhpcyB3YXksIGVhY2ggZWxlbWVudCdzIGV4aXN0aW5nIHF1ZXVlIGlzIHJlc3BlY3RlZDsgc29tZSBlbGVtZW50cyBtYXkgYWxyZWFkeSBiZSBhbmltYXRpbmcgYW5kIGFjY29yZGluZ2x5IHNob3VsZCBub3QgaGF2ZSB0aGlzIGN1cnJlbnQgVmVsb2NpdHkgY2FsbCB0cmlnZ2VyZWQgaW1tZWRpYXRlbHkuICovXHJcblx0XHRcdFx0LyogSW4gZWFjaCBxdWV1ZSwgdHdlZW4gZGF0YSBpcyBwcm9jZXNzZWQgZm9yIGVhY2ggYW5pbWF0aW5nIHByb3BlcnR5IHRoZW4gcHVzaGVkIG9udG8gdGhlIGNhbGwtd2lkZSBjYWxscyBhcnJheS4gV2hlbiB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBzZXQgaGFzIGhhZCBpdHMgdHdlZW5zIHByb2Nlc3NlZCxcclxuXHRcdFx0XHQgdGhlIGNhbGwgYXJyYXkgaXMgcHVzaGVkIHRvIFZlbG9jaXR5LlN0YXRlLmNhbGxzIGZvciBsaXZlIHByb2Nlc3NpbmcgYnkgdGhlIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0aWNrLiAqL1xyXG5cdFx0XHRcdGZ1bmN0aW9uIGJ1aWxkUXVldWUobmV4dCkge1xyXG5cdFx0XHRcdFx0dmFyIGRhdGEsIGxhc3RUd2VlbnNDb250YWluZXI7XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBPcHRpb246IEJlZ2luXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHQvKiBUaGUgYmVnaW4gY2FsbGJhY2sgaXMgZmlyZWQgb25jZSBwZXIgY2FsbCAtLSBub3Qgb25jZSBwZXIgZWxlbWVuZXQgLS0gYW5kIGlzIHBhc3NlZCB0aGUgZnVsbCByYXcgRE9NIGVsZW1lbnQgc2V0IGFzIGJvdGggaXRzIGNvbnRleHQgYW5kIGl0cyBmaXJzdCBhcmd1bWVudC4gKi9cclxuXHRcdFx0XHRcdGlmIChvcHRzLmJlZ2luICYmIGVsZW1lbnRzSW5kZXggPT09IDApIHtcclxuXHRcdFx0XHRcdFx0LyogV2UgdGhyb3cgY2FsbGJhY2tzIGluIGEgc2V0VGltZW91dCBzbyB0aGF0IHRocm93biBlcnJvcnMgZG9uJ3QgaGFsdCB0aGUgZXhlY3V0aW9uIG9mIFZlbG9jaXR5IGl0c2VsZi4gKi9cclxuXHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRvcHRzLmJlZ2luLmNhbGwoZWxlbWVudHMsIGVsZW1lbnRzKTtcclxuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhyb3cgZXJyb3I7XHJcblx0XHRcdFx0XHRcdFx0fSwgMSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdCBUd2VlbiBEYXRhIENvbnN0cnVjdGlvbiAoZm9yIFNjcm9sbClcclxuXHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBJbiBvcmRlciB0byBiZSBzdWJqZWN0ZWQgdG8gY2hhaW5pbmcgYW5kIGFuaW1hdGlvbiBvcHRpb25zLCBzY3JvbGwncyB0d2VlbmluZyBpcyByb3V0ZWQgdGhyb3VnaCBWZWxvY2l0eSBhcyBpZiBpdCB3ZXJlIGEgc3RhbmRhcmQgQ1NTIHByb3BlcnR5IGFuaW1hdGlvbi4gKi9cclxuXHRcdFx0XHRcdGlmIChhY3Rpb24gPT09IFwic2Nyb2xsXCIpIHtcclxuXHRcdFx0XHRcdFx0LyogVGhlIHNjcm9sbCBhY3Rpb24gdW5pcXVlbHkgdGFrZXMgYW4gb3B0aW9uYWwgXCJvZmZzZXRcIiBvcHRpb24gLS0gc3BlY2lmaWVkIGluIHBpeGVscyAtLSB0aGF0IG9mZnNldHMgdGhlIHRhcmdldGVkIHNjcm9sbCBwb3NpdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0dmFyIHNjcm9sbERpcmVjdGlvbiA9ICgvXngkL2kudGVzdChvcHRzLmF4aXMpID8gXCJMZWZ0XCIgOiBcIlRvcFwiKSxcclxuXHRcdFx0XHRcdFx0XHRcdHNjcm9sbE9mZnNldCA9IHBhcnNlRmxvYXQob3B0cy5vZmZzZXQpIHx8IDAsXHJcblx0XHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkN1cnJlbnQsXHJcblx0XHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkN1cnJlbnRBbHRlcm5hdGUsXHJcblx0XHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkVuZDtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFNjcm9sbCBhbHNvIHVuaXF1ZWx5IHRha2VzIGFuIG9wdGlvbmFsIFwiY29udGFpbmVyXCIgb3B0aW9uLCB3aGljaCBpbmRpY2F0ZXMgdGhlIHBhcmVudCBlbGVtZW50IHRoYXQgc2hvdWxkIGJlIHNjcm9sbGVkIC0tXHJcblx0XHRcdFx0XHRcdCBhcyBvcHBvc2VkIHRvIHRoZSBicm93c2VyIHdpbmRvdyBpdHNlbGYuIFRoaXMgaXMgdXNlZnVsIGZvciBzY3JvbGxpbmcgdG93YXJkIGFuIGVsZW1lbnQgdGhhdCdzIGluc2lkZSBhbiBvdmVyZmxvd2luZyBwYXJlbnQgZWxlbWVudC4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKG9wdHMuY29udGFpbmVyKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogRW5zdXJlIHRoYXQgZWl0aGVyIGEgalF1ZXJ5IG9iamVjdCBvciBhIHJhdyBET00gZWxlbWVudCB3YXMgcGFzc2VkIGluLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChUeXBlLmlzV3JhcHBlZChvcHRzLmNvbnRhaW5lcikgfHwgVHlwZS5pc05vZGUob3B0cy5jb250YWluZXIpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBFeHRyYWN0IHRoZSByYXcgRE9NIGVsZW1lbnQgZnJvbSB0aGUgalF1ZXJ5IHdyYXBwZXIuICovXHJcblx0XHRcdFx0XHRcdFx0XHRvcHRzLmNvbnRhaW5lciA9IG9wdHMuY29udGFpbmVyWzBdIHx8IG9wdHMuY29udGFpbmVyO1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogVW5saWtlIG90aGVyIHByb3BlcnRpZXMgaW4gVmVsb2NpdHksIHRoZSBicm93c2VyJ3Mgc2Nyb2xsIHBvc2l0aW9uIGlzIG5ldmVyIGNhY2hlZCBzaW5jZSBpdCBzbyBmcmVxdWVudGx5IGNoYW5nZXNcclxuXHRcdFx0XHRcdFx0XHRcdCAoZHVlIHRvIHRoZSB1c2VyJ3MgbmF0dXJhbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBwYWdlKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHNjcm9sbFBvc2l0aW9uQ3VycmVudCA9IG9wdHMuY29udGFpbmVyW1wic2Nyb2xsXCIgKyBzY3JvbGxEaXJlY3Rpb25dOyAvKiBHRVQgKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiAkLnBvc2l0aW9uKCkgdmFsdWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyJ3MgY3VycmVudGx5IHZpZXdhYmxlIGFyZWEgKHdpdGhvdXQgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY29udGFpbmVyJ3MgdHJ1ZSBkaW1lbnNpb25zXHJcblx0XHRcdFx0XHRcdFx0XHQgLS0gc2F5LCBmb3IgZXhhbXBsZSwgaWYgdGhlIGNvbnRhaW5lciB3YXMgbm90IG92ZXJmbG93aW5nKS4gVGh1cywgdGhlIHNjcm9sbCBlbmQgdmFsdWUgaXMgdGhlIHN1bSBvZiB0aGUgY2hpbGQgZWxlbWVudCdzIHBvc2l0aW9uICphbmQqXHJcblx0XHRcdFx0XHRcdFx0XHQgdGhlIHNjcm9sbCBjb250YWluZXIncyBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHNjcm9sbFBvc2l0aW9uRW5kID0gKHNjcm9sbFBvc2l0aW9uQ3VycmVudCArICQoZWxlbWVudCkucG9zaXRpb24oKVtzY3JvbGxEaXJlY3Rpb24udG9Mb3dlckNhc2UoKV0pICsgc2Nyb2xsT2Zmc2V0OyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdC8qIElmIGEgdmFsdWUgb3RoZXIgdGhhbiBhIGpRdWVyeSBvYmplY3Qgb3IgYSByYXcgRE9NIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiwgZGVmYXVsdCB0byBudWxsIHNvIHRoYXQgdGhpcyBvcHRpb24gaXMgaWdub3JlZC4gKi9cclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0b3B0cy5jb250YWluZXIgPSBudWxsO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgd2luZG93IGl0c2VsZiBpcyBiZWluZyBzY3JvbGxlZCAtLSBub3QgYSBjb250YWluaW5nIGVsZW1lbnQgLS0gcGVyZm9ybSBhIGxpdmUgc2Nyb2xsIHBvc2l0aW9uIGxvb2t1cCB1c2luZ1xyXG5cdFx0XHRcdFx0XHRcdCB0aGUgYXBwcm9wcmlhdGUgY2FjaGVkIHByb3BlcnR5IG5hbWVzICh3aGljaCBkaWZmZXIgYmFzZWQgb24gYnJvd3NlciB0eXBlKS4gKi9cclxuXHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkN1cnJlbnQgPSBWZWxvY2l0eS5TdGF0ZS5zY3JvbGxBbmNob3JbVmVsb2NpdHkuU3RhdGVbXCJzY3JvbGxQcm9wZXJ0eVwiICsgc2Nyb2xsRGlyZWN0aW9uXV07IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIFdoZW4gc2Nyb2xsaW5nIHRoZSBicm93c2VyIHdpbmRvdywgY2FjaGUgdGhlIGFsdGVybmF0ZSBheGlzJ3MgY3VycmVudCB2YWx1ZSBzaW5jZSB3aW5kb3cuc2Nyb2xsVG8oKSBkb2Vzbid0IGxldCB1cyBjaGFuZ2Ugb25seSBvbmUgdmFsdWUgYXQgYSB0aW1lLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHNjcm9sbFBvc2l0aW9uQ3VycmVudEFsdGVybmF0ZSA9IFZlbG9jaXR5LlN0YXRlLnNjcm9sbEFuY2hvcltWZWxvY2l0eS5TdGF0ZVtcInNjcm9sbFByb3BlcnR5XCIgKyAoc2Nyb2xsRGlyZWN0aW9uID09PSBcIkxlZnRcIiA/IFwiVG9wXCIgOiBcIkxlZnRcIildXTsgLyogR0VUICovXHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIFVubGlrZSAkLnBvc2l0aW9uKCksICQub2Zmc2V0KCkgdmFsdWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgYnJvd3NlciB3aW5kb3cncyB0cnVlIGRpbWVuc2lvbnMgLS0gbm90IG1lcmVseSBpdHMgY3VycmVudGx5IHZpZXdhYmxlIGFyZWEgLS1cclxuXHRcdFx0XHRcdFx0XHQgYW5kIHRoZXJlZm9yZSBlbmQgdmFsdWVzIGRvIG5vdCBuZWVkIHRvIGJlIGNvbXBvdW5kZWQgb250byBjdXJyZW50IHZhbHVlcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRzY3JvbGxQb3NpdGlvbkVuZCA9ICQoZWxlbWVudCkub2Zmc2V0KClbc2Nyb2xsRGlyZWN0aW9uLnRvTG93ZXJDYXNlKCldICsgc2Nyb2xsT2Zmc2V0OyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogU2luY2UgdGhlcmUncyBvbmx5IG9uZSBmb3JtYXQgdGhhdCBzY3JvbGwncyBhc3NvY2lhdGVkIHR3ZWVuc0NvbnRhaW5lciBjYW4gdGFrZSwgd2UgY3JlYXRlIGl0IG1hbnVhbGx5LiAqL1xyXG5cdFx0XHRcdFx0XHR0d2VlbnNDb250YWluZXIgPSB7XHJcblx0XHRcdFx0XHRcdFx0c2Nyb2xsOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRyb290UHJvcGVydHlWYWx1ZTogZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlOiBzY3JvbGxQb3NpdGlvbkN1cnJlbnQsXHJcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWU6IHNjcm9sbFBvc2l0aW9uQ3VycmVudCxcclxuXHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlOiBzY3JvbGxQb3NpdGlvbkVuZCxcclxuXHRcdFx0XHRcdFx0XHRcdHVuaXRUeXBlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZWFzaW5nOiBvcHRzLmVhc2luZyxcclxuXHRcdFx0XHRcdFx0XHRcdHNjcm9sbERhdGE6IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGFpbmVyOiBvcHRzLmNvbnRhaW5lcixcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uOiBzY3JvbGxEaXJlY3Rpb24sXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFsdGVybmF0ZVZhbHVlOiBzY3JvbGxQb3NpdGlvbkN1cnJlbnRBbHRlcm5hdGVcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQ6IGVsZW1lbnRcclxuXHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1Zykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKFwidHdlZW5zQ29udGFpbmVyIChzY3JvbGwpOiBcIiwgdHdlZW5zQ29udGFpbmVyLnNjcm9sbCwgZWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0IFR3ZWVuIERhdGEgQ29uc3RydWN0aW9uIChmb3IgUmV2ZXJzZSlcclxuXHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdC8qIFJldmVyc2UgYWN0cyBsaWtlIGEgXCJzdGFydFwiIGFjdGlvbiBpbiB0aGF0IGEgcHJvcGVydHkgbWFwIGlzIGFuaW1hdGVkIHRvd2FyZC4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpc1xyXG5cdFx0XHRcdFx0XHQgdGhhdCB0aGUgcHJvcGVydHkgbWFwIHVzZWQgZm9yIHJldmVyc2UgaXMgdGhlIGludmVyc2Ugb2YgdGhlIG1hcCB1c2VkIGluIHRoZSBwcmV2aW91cyBjYWxsLiBUaHVzLCB3ZSBtYW5pcHVsYXRlXHJcblx0XHRcdFx0XHRcdCB0aGUgcHJldmlvdXMgY2FsbCB0byBjb25zdHJ1Y3Qgb3VyIG5ldyBtYXA6IHVzZSB0aGUgcHJldmlvdXMgbWFwJ3MgZW5kIHZhbHVlcyBhcyBvdXIgbmV3IG1hcCdzIHN0YXJ0IHZhbHVlcy4gQ29weSBvdmVyIGFsbCBvdGhlciBkYXRhLiAqL1xyXG5cdFx0XHRcdFx0XHQvKiBOb3RlOiBSZXZlcnNlIGNhbiBiZSBkaXJlY3RseSBjYWxsZWQgdmlhIHRoZSBcInJldmVyc2VcIiBwYXJhbWV0ZXIsIG9yIGl0IGNhbiBiZSBpbmRpcmVjdGx5IHRyaWdnZXJlZCB2aWEgdGhlIGxvb3Agb3B0aW9uLiAoTG9vcHMgYXJlIGNvbXBvc2VkIG9mIG11bHRpcGxlIHJldmVyc2VzLikgKi9cclxuXHRcdFx0XHRcdFx0LyogTm90ZTogUmV2ZXJzZSBjYWxscyBkbyBub3QgbmVlZCB0byBiZSBjb25zZWN1dGl2ZWx5IGNoYWluZWQgb250byBhIGN1cnJlbnRseS1hbmltYXRpbmcgZWxlbWVudCBpbiBvcmRlciB0byBvcGVyYXRlIG9uIGNhY2hlZCB2YWx1ZXM7XHJcblx0XHRcdFx0XHRcdCB0aGVyZSBpcyBubyBoYXJtIHRvIHJldmVyc2UgYmVpbmcgY2FsbGVkIG9uIGEgcG90ZW50aWFsbHkgc3RhbGUgZGF0YSBjYWNoZSBzaW5jZSByZXZlcnNlJ3MgYmVoYXZpb3IgaXMgc2ltcGx5IGRlZmluZWRcclxuXHRcdFx0XHRcdFx0IGFzIHJldmVydGluZyB0byB0aGUgZWxlbWVudCdzIHZhbHVlcyBhcyB0aGV5IHdlcmUgcHJpb3IgdG8gdGhlIHByZXZpb3VzICpWZWxvY2l0eSogY2FsbC4gKi9cclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcInJldmVyc2VcIikge1xyXG5cdFx0XHRcdFx0XHRkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIEFib3J0IGlmIHRoZXJlIGlzIG5vIHByaW9yIGFuaW1hdGlvbiBkYXRhIHRvIHJldmVyc2UgdG8uICovXHJcblx0XHRcdFx0XHRcdGlmICghZGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKCFkYXRhLnR3ZWVuc0NvbnRhaW5lcikge1xyXG5cdFx0XHRcdFx0XHRcdC8qIERlcXVldWUgdGhlIGVsZW1lbnQgc28gdGhhdCB0aGlzIHF1ZXVlIGVudHJ5IHJlbGVhc2VzIGl0c2VsZiBpbW1lZGlhdGVseSwgYWxsb3dpbmcgc3Vic2VxdWVudCBxdWV1ZSBlbnRyaWVzIHRvIHJ1bi4gKi9cclxuXHRcdFx0XHRcdFx0XHQkLmRlcXVldWUoZWxlbWVudCwgb3B0cy5xdWV1ZSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0IE9wdGlvbnMgUGFyc2luZ1xyXG5cdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIElmIHRoZSBlbGVtZW50IHdhcyBoaWRkZW4gdmlhIHRoZSBkaXNwbGF5IG9wdGlvbiBpbiB0aGUgcHJldmlvdXMgY2FsbCxcclxuXHRcdFx0XHRcdFx0XHQgcmV2ZXJ0IGRpc3BsYXkgdG8gXCJhdXRvXCIgcHJpb3IgdG8gcmV2ZXJzYWwgc28gdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGFnYWluLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChkYXRhLm9wdHMuZGlzcGxheSA9PT0gXCJub25lXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGRhdGEub3B0cy5kaXNwbGF5ID0gXCJhdXRvXCI7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5vcHRzLnZpc2liaWxpdHkgPT09IFwiaGlkZGVuXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGRhdGEub3B0cy52aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgbG9vcCBvcHRpb24gd2FzIHNldCBpbiB0aGUgcHJldmlvdXMgY2FsbCwgZGlzYWJsZSBpdCBzbyB0aGF0IFwicmV2ZXJzZVwiIGNhbGxzIGFyZW4ndCByZWN1cnNpdmVseSBnZW5lcmF0ZWQuXHJcblx0XHRcdFx0XHRcdFx0IEZ1cnRoZXIsIHJlbW92ZSB0aGUgcHJldmlvdXMgY2FsbCdzIGNhbGxiYWNrIG9wdGlvbnM7IHR5cGljYWxseSwgdXNlcnMgZG8gbm90IHdhbnQgdGhlc2UgdG8gYmUgcmVmaXJlZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRkYXRhLm9wdHMubG9vcCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdGRhdGEub3B0cy5iZWdpbiA9IG51bGw7XHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5vcHRzLmNvbXBsZXRlID0gbnVsbDtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogU2luY2Ugd2UncmUgZXh0ZW5kaW5nIGFuIG9wdHMgb2JqZWN0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBleHRlbmRlZCB3aXRoIHRoZSBkZWZhdWx0cyBvcHRpb25zIG9iamVjdCxcclxuXHRcdFx0XHRcdFx0XHQgd2UgcmVtb3ZlIG5vbi1leHBsaWNpdGx5LWRlZmluZWQgcHJvcGVydGllcyB0aGF0IGFyZSBhdXRvLWFzc2lnbmVkIHZhbHVlcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuZWFzaW5nKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb3B0cy5lYXNpbmc7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuZHVyYXRpb24pIHtcclxuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvcHRzLmR1cmF0aW9uO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogVGhlIG9wdHMgb2JqZWN0IHVzZWQgZm9yIHJldmVyc2FsIGlzIGFuIGV4dGVuc2lvbiBvZiB0aGUgb3B0aW9ucyBvYmplY3Qgb3B0aW9uYWxseSBwYXNzZWQgaW50byB0aGlzXHJcblx0XHRcdFx0XHRcdFx0IHJldmVyc2UgY2FsbCBwbHVzIHRoZSBvcHRpb25zIHVzZWQgaW4gdGhlIHByZXZpb3VzIFZlbG9jaXR5IGNhbGwuICovXHJcblx0XHRcdFx0XHRcdFx0b3B0cyA9ICQuZXh0ZW5kKHt9LCBkYXRhLm9wdHMsIG9wdHMpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCBUd2VlbnMgQ29udGFpbmVyIFJlY29uc3RydWN0aW9uXHJcblx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIENyZWF0ZSBhIGRlZXB5IGNvcHkgKGluZGljYXRlZCB2aWEgdGhlIHRydWUgZmxhZykgb2YgdGhlIHByZXZpb3VzIGNhbGwncyB0d2VlbnNDb250YWluZXIuICovXHJcblx0XHRcdFx0XHRcdFx0bGFzdFR3ZWVuc0NvbnRhaW5lciA9ICQuZXh0ZW5kKHRydWUsIHt9LCBkYXRhID8gZGF0YS50d2VlbnNDb250YWluZXIgOiBudWxsKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogTWFuaXB1bGF0ZSB0aGUgcHJldmlvdXMgdHdlZW5zQ29udGFpbmVyIGJ5IHJlcGxhY2luZyBpdHMgZW5kIHZhbHVlcyBhbmQgY3VycmVudFZhbHVlcyB3aXRoIGl0cyBzdGFydCB2YWx1ZXMuICovXHJcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbGFzdFR3ZWVuIGluIGxhc3RUd2VlbnNDb250YWluZXIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIEluIGFkZGl0aW9uIHRvIHR3ZWVuIGRhdGEsIHR3ZWVuc0NvbnRhaW5lcnMgY29udGFpbiBhbiBlbGVtZW50IHByb3BlcnR5IHRoYXQgd2UgaWdub3JlIGhlcmUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAobGFzdFR3ZWVuc0NvbnRhaW5lci5oYXNPd25Qcm9wZXJ0eShsYXN0VHdlZW4pICYmIGxhc3RUd2VlbiAhPT0gXCJlbGVtZW50XCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGxhc3RTdGFydFZhbHVlID0gbGFzdFR3ZWVuc0NvbnRhaW5lcltsYXN0VHdlZW5dLnN0YXJ0VmFsdWU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsYXN0VHdlZW5zQ29udGFpbmVyW2xhc3RUd2Vlbl0uc3RhcnRWYWx1ZSA9IGxhc3RUd2VlbnNDb250YWluZXJbbGFzdFR3ZWVuXS5jdXJyZW50VmFsdWUgPSBsYXN0VHdlZW5zQ29udGFpbmVyW2xhc3RUd2Vlbl0uZW5kVmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxhc3RUd2VlbnNDb250YWluZXJbbGFzdFR3ZWVuXS5lbmRWYWx1ZSA9IGxhc3RTdGFydFZhbHVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogRWFzaW5nIGlzIHRoZSBvbmx5IG9wdGlvbiB0aGF0IGVtYmVkcyBpbnRvIHRoZSBpbmRpdmlkdWFsIHR3ZWVuIGRhdGEgKHNpbmNlIGl0IGNhbiBiZSBkZWZpbmVkIG9uIGEgcGVyLXByb3BlcnR5IGJhc2lzKS5cclxuXHRcdFx0XHRcdFx0XHRcdFx0IEFjY29yZGluZ2x5LCBldmVyeSBwcm9wZXJ0eSdzIGVhc2luZyB2YWx1ZSBtdXN0IGJlIHVwZGF0ZWQgd2hlbiBhbiBvcHRpb25zIG9iamVjdCBpcyBwYXNzZWQgaW4gd2l0aCBhIHJldmVyc2UgY2FsbC5cclxuXHRcdFx0XHRcdFx0XHRcdFx0IFRoZSBzaWRlIGVmZmVjdCBvZiB0aGlzIGV4dGVuc2liaWxpdHkgaXMgdGhhdCBhbGwgcGVyLXByb3BlcnR5IGVhc2luZyB2YWx1ZXMgYXJlIGZvcmNlZnVsbHkgcmVzZXQgdG8gdGhlIG5ldyB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFUeXBlLmlzRW1wdHlPYmplY3Qob3B0aW9ucykpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsYXN0VHdlZW5zQ29udGFpbmVyW2xhc3RUd2Vlbl0uZWFzaW5nID0gb3B0cy5lYXNpbmc7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1Zykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKFwicmV2ZXJzZSB0d2VlbnNDb250YWluZXIgKFwiICsgbGFzdFR3ZWVuICsgXCIpOiBcIiArIEpTT04uc3RyaW5naWZ5KGxhc3RUd2VlbnNDb250YWluZXJbbGFzdFR3ZWVuXSksIGVsZW1lbnQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHR0d2VlbnNDb250YWluZXIgPSBsYXN0VHdlZW5zQ29udGFpbmVyO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0IFR3ZWVuIERhdGEgQ29uc3RydWN0aW9uIChmb3IgU3RhcnQpXHJcblx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJzdGFydFwiKSB7XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHQgVmFsdWUgVHJhbnNmZXJyaW5nXHJcblx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0LyogSWYgdGhpcyBxdWV1ZSBlbnRyeSBmb2xsb3dzIGEgcHJldmlvdXMgVmVsb2NpdHktaW5pdGlhdGVkIHF1ZXVlIGVudHJ5ICphbmQqIGlmIHRoaXMgZW50cnkgd2FzIGNyZWF0ZWRcclxuXHRcdFx0XHRcdFx0IHdoaWxlIHRoZSBlbGVtZW50IHdhcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBhbmltYXRlZCBieSBWZWxvY2l0eSwgdGhlbiB0aGlzIGN1cnJlbnQgY2FsbCBpcyBzYWZlIHRvIHVzZVxyXG5cdFx0XHRcdFx0XHQgdGhlIGVuZCB2YWx1ZXMgZnJvbSB0aGUgcHJpb3IgY2FsbCBhcyBpdHMgc3RhcnQgdmFsdWVzLiBWZWxvY2l0eSBhdHRlbXB0cyB0byBwZXJmb3JtIHRoaXMgdmFsdWUgdHJhbnNmZXJcclxuXHRcdFx0XHRcdFx0IHByb2Nlc3Mgd2hlbmV2ZXIgcG9zc2libGUgaW4gb3JkZXIgdG8gYXZvaWQgcmVxdWVyeWluZyB0aGUgRE9NLiAqL1xyXG5cdFx0XHRcdFx0XHQvKiBJZiB2YWx1ZXMgYXJlbid0IHRyYW5zZmVycmVkIGZyb20gYSBwcmlvciBjYWxsIGFuZCBzdGFydCB2YWx1ZXMgd2VyZSBub3QgZm9yY2VmZWQgYnkgdGhlIHVzZXIgKG1vcmUgb24gdGhpcyBiZWxvdyksXHJcblx0XHRcdFx0XHRcdCB0aGVuIHRoZSBET00gaXMgcXVlcmllZCBmb3IgdGhlIGVsZW1lbnQncyBjdXJyZW50IHZhbHVlcyBhcyBhIGxhc3QgcmVzb3J0LiAqL1xyXG5cdFx0XHRcdFx0XHQvKiBOb3RlOiBDb252ZXJzZWx5LCBhbmltYXRpb24gcmV2ZXJzYWwgKGFuZCBsb29waW5nKSAqYWx3YXlzKiBwZXJmb3JtIGludGVyLWNhbGwgdmFsdWUgdHJhbnNmZXJzOyB0aGV5IG5ldmVyIHJlcXVlcnkgdGhlIERPTS4gKi9cclxuXHJcblx0XHRcdFx0XHRcdGRhdGEgPSBEYXRhKGVsZW1lbnQpO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogVGhlIHBlci1lbGVtZW50IGlzQW5pbWF0aW5nIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIGl0J3Mgc2FmZSAoaS5lLiB0aGUgZGF0YSBpc24ndCBzdGFsZSlcclxuXHRcdFx0XHRcdFx0IHRvIHRyYW5zZmVyIG92ZXIgZW5kIHZhbHVlcyB0byB1c2UgYXMgc3RhcnQgdmFsdWVzLiBJZiBpdCdzIHNldCB0byB0cnVlIGFuZCB0aGVyZSBpcyBhIHByZXZpb3VzXHJcblx0XHRcdFx0XHRcdCBWZWxvY2l0eSBjYWxsIHRvIHB1bGwgdmFsdWVzIGZyb20sIGRvIHNvLiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLnR3ZWVuc0NvbnRhaW5lciAmJiBkYXRhLmlzQW5pbWF0aW5nID09PSB0cnVlKSB7XHJcblx0XHRcdFx0XHRcdFx0bGFzdFR3ZWVuc0NvbnRhaW5lciA9IGRhdGEudHdlZW5zQ29udGFpbmVyO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdCBUd2VlbiBEYXRhIENhbGN1bGF0aW9uXHJcblx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHQvKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBwcm9wZXJ0eSBkYXRhIGFuZCBkZWZhdWx0cyBlbmRWYWx1ZSwgZWFzaW5nLCBhbmQgc3RhcnRWYWx1ZSBhcyBhcHByb3ByaWF0ZS4gKi9cclxuXHRcdFx0XHRcdFx0LyogUHJvcGVydHkgbWFwIHZhbHVlcyBjYW4gZWl0aGVyIHRha2UgdGhlIGZvcm0gb2YgMSkgYSBzaW5nbGUgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBlbmQgdmFsdWUsXHJcblx0XHRcdFx0XHRcdCBvciAyKSBhbiBhcnJheSBpbiB0aGUgZm9ybSBvZiBbIGVuZFZhbHVlLCBbLCBlYXNpbmddIFssIHN0YXJ0VmFsdWVdIF0uXHJcblx0XHRcdFx0XHRcdCBUaGUgb3B0aW9uYWwgdGhpcmQgcGFyYW1ldGVyIGlzIGEgZm9yY2VmZWQgc3RhcnRWYWx1ZSB0byBiZSB1c2VkIGluc3RlYWQgb2YgcXVlcnlpbmcgdGhlIERPTSBmb3JcclxuXHRcdFx0XHRcdFx0IHRoZSBlbGVtZW50J3MgY3VycmVudCB2YWx1ZS4gUmVhZCBWZWxvY2l0eSdzIGRvY21lbnRhdGlvbiB0byBsZWFybiBtb3JlIGFib3V0IGZvcmNlZmVlZGluZzogVmVsb2NpdHlKUy5vcmcvI2ZvcmNlZmVlZGluZyAqL1xyXG5cdFx0XHRcdFx0XHR2YXIgcGFyc2VQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24odmFsdWVEYXRhLCBza2lwUmVzb2x2aW5nRWFzaW5nKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGVuZFZhbHVlLCBlYXNpbmcsIHN0YXJ0VmFsdWU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIElmIHdlIGhhdmUgYSBmdW5jdGlvbiBhcyB0aGUgbWFpbiBhcmd1bWVudCB0aGVuIHJlc29sdmUgaXQgZmlyc3QsIGluIGNhc2UgaXQgcmV0dXJucyBhbiBhcnJheSB0aGF0IG5lZWRzIHRvIGJlIHNwbGl0ICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKFR5cGUuaXNGdW5jdGlvbih2YWx1ZURhdGEpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZURhdGEgPSB2YWx1ZURhdGEuY2FsbChlbGVtZW50LCBlbGVtZW50QXJyYXlJbmRleCwgZWxlbWVudHNMZW5ndGgpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogSGFuZGxlIHRoZSBhcnJheSBmb3JtYXQsIHdoaWNoIGNhbiBiZSBzdHJ1Y3R1cmVkIGFzIG9uZSBvZiB0aHJlZSBwb3RlbnRpYWwgb3ZlcmxvYWRzOlxyXG5cdFx0XHRcdFx0XHRcdCBBKSBbIGVuZFZhbHVlLCBlYXNpbmcsIHN0YXJ0VmFsdWUgXSwgQikgWyBlbmRWYWx1ZSwgZWFzaW5nIF0sIG9yIEMpIFsgZW5kVmFsdWUsIHN0YXJ0VmFsdWUgXSAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChUeXBlLmlzQXJyYXkodmFsdWVEYXRhKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogZW5kVmFsdWUgaXMgYWx3YXlzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheS4gRG9uJ3QgYm90aGVyIHZhbGlkYXRpbmcgZW5kVmFsdWUncyB2YWx1ZSBub3dcclxuXHRcdFx0XHRcdFx0XHRcdCBzaW5jZSB0aGUgZW5zdWluZyBwcm9wZXJ0eSBjeWNsaW5nIGxvZ2ljIGRvZXMgdGhhdC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gdmFsdWVEYXRhWzBdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFR3by1pdGVtIGFycmF5IGZvcm1hdDogSWYgdGhlIHNlY29uZCBpdGVtIGlzIGEgbnVtYmVyLCBmdW5jdGlvbiwgb3IgaGV4IHN0cmluZywgdHJlYXQgaXQgYXMgYVxyXG5cdFx0XHRcdFx0XHRcdFx0IHN0YXJ0IHZhbHVlIHNpbmNlIGVhc2luZ3MgY2FuIG9ubHkgYmUgbm9uLWhleCBzdHJpbmdzIG9yIGFycmF5cy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmICgoIVR5cGUuaXNBcnJheSh2YWx1ZURhdGFbMV0pICYmIC9eW1xcZC1dLy50ZXN0KHZhbHVlRGF0YVsxXSkpIHx8IFR5cGUuaXNGdW5jdGlvbih2YWx1ZURhdGFbMV0pIHx8IENTUy5SZWdFeC5pc0hleC50ZXN0KHZhbHVlRGF0YVsxXSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IHZhbHVlRGF0YVsxXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogVHdvIG9yIHRocmVlLWl0ZW0gYXJyYXk6IElmIHRoZSBzZWNvbmQgaXRlbSBpcyBhIG5vbi1oZXggc3RyaW5nIGVhc2luZyBuYW1lIG9yIGFuIGFycmF5LCB0cmVhdCBpdCBhcyBhbiBlYXNpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKChUeXBlLmlzU3RyaW5nKHZhbHVlRGF0YVsxXSkgJiYgIUNTUy5SZWdFeC5pc0hleC50ZXN0KHZhbHVlRGF0YVsxXSkgJiYgVmVsb2NpdHkuRWFzaW5nc1t2YWx1ZURhdGFbMV1dKSB8fCBUeXBlLmlzQXJyYXkodmFsdWVEYXRhWzFdKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRlYXNpbmcgPSBza2lwUmVzb2x2aW5nRWFzaW5nID8gdmFsdWVEYXRhWzFdIDogZ2V0RWFzaW5nKHZhbHVlRGF0YVsxXSwgb3B0cy5kdXJhdGlvbik7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBEb24ndCBib3RoZXIgdmFsaWRhdGluZyBzdGFydFZhbHVlJ3MgdmFsdWUgbm93IHNpbmNlIHRoZSBlbnN1aW5nIHByb3BlcnR5IGN5Y2xpbmcgbG9naWMgaW5oZXJlbnRseSBkb2VzIHRoYXQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSB2YWx1ZURhdGFbMl07XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gdmFsdWVEYXRhWzFdIHx8IHZhbHVlRGF0YVsyXTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdC8qIEhhbmRsZSB0aGUgc2luZ2xlLXZhbHVlIGZvcm1hdC4gKi9cclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSB2YWx1ZURhdGE7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBEZWZhdWx0IHRvIHRoZSBjYWxsJ3MgZWFzaW5nIGlmIGEgcGVyLXByb3BlcnR5IGVhc2luZyB0eXBlIHdhcyBub3QgZGVmaW5lZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoIXNraXBSZXNvbHZpbmdFYXNpbmcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGVhc2luZyA9IGVhc2luZyB8fCBvcHRzLmVhc2luZztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIElmIGZ1bmN0aW9ucyB3ZXJlIHBhc3NlZCBpbiBhcyB2YWx1ZXMsIHBhc3MgdGhlIGZ1bmN0aW9uIHRoZSBjdXJyZW50IGVsZW1lbnQgYXMgaXRzIGNvbnRleHQsXHJcblx0XHRcdFx0XHRcdFx0IHBsdXMgdGhlIGVsZW1lbnQncyBpbmRleCBhbmQgdGhlIGVsZW1lbnQgc2V0J3Mgc2l6ZSBhcyBhcmd1bWVudHMuIFRoZW4sIGFzc2lnbiB0aGUgcmV0dXJuZWQgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKFR5cGUuaXNGdW5jdGlvbihlbmRWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gZW5kVmFsdWUuY2FsbChlbGVtZW50LCBlbGVtZW50QXJyYXlJbmRleCwgZWxlbWVudHNMZW5ndGgpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKFR5cGUuaXNGdW5jdGlvbihzdGFydFZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IHN0YXJ0VmFsdWUuY2FsbChlbGVtZW50LCBlbGVtZW50QXJyYXlJbmRleCwgZWxlbWVudHNMZW5ndGgpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogQWxsb3cgc3RhcnRWYWx1ZSB0byBiZSBsZWZ0IGFzIHVuZGVmaW5lZCB0byBpbmRpY2F0ZSB0byB0aGUgZW5zdWluZyBjb2RlIHRoYXQgaXRzIHZhbHVlIHdhcyBub3QgZm9yY2VmZWQuICovXHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFtlbmRWYWx1ZSB8fCAwLCBlYXNpbmcsIHN0YXJ0VmFsdWVdO1xyXG5cdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIGZpeFByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWVEYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogSW4gY2FzZSB0aGlzIHByb3BlcnR5IGlzIGEgaG9vaywgdGhlcmUgYXJlIGNpcmN1bXN0YW5jZXMgd2hlcmUgd2Ugd2lsbCBpbnRlbmQgdG8gd29yayBvbiB0aGUgaG9vaydzIHJvb3QgcHJvcGVydHkgYW5kIG5vdCB0aGUgaG9va2VkIHN1YnByb3BlcnR5LiAqL1xyXG5cdFx0XHRcdFx0XHRcdHZhciByb290UHJvcGVydHkgPSBDU1MuSG9va3MuZ2V0Um9vdChwcm9wZXJ0eSksXHJcblx0XHRcdFx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIFBhcnNlIG91dCBlbmRWYWx1ZSwgZWFzaW5nLCBhbmQgc3RhcnRWYWx1ZSBmcm9tIHRoZSBwcm9wZXJ0eSdzIGRhdGEuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gdmFsdWVEYXRhWzBdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlYXNpbmcgPSB2YWx1ZURhdGFbMV0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSB2YWx1ZURhdGFbMl0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm47XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCBTdGFydCBWYWx1ZSBTb3VyY2luZ1xyXG5cdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogT3RoZXIgdGhhbiBmb3IgdGhlIGR1bW15IHR3ZWVuIHByb3BlcnR5LCBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIgKGFuZCBkbyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIG5vcm1hbGl6YXRpb24pIHdpbGxcclxuXHRcdFx0XHRcdFx0XHQgaW5oZXJlbnRseSBwcm9kdWNlIG5vIHN0eWxlIGNoYW5nZXMgd2hlbiBzZXQsIHNvIHRoZXkgYXJlIHNraXBwZWQgaW4gb3JkZXIgdG8gZGVjcmVhc2UgYW5pbWF0aW9uIHRpY2sgb3ZlcmhlYWQuXHJcblx0XHRcdFx0XHRcdFx0IFByb3BlcnR5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZCB2aWEgcHJlZml4Q2hlY2soKSwgd2hpY2ggcmV0dXJucyBhIGZhbHNlIGZsYWcgd2hlbiBubyBzdXBwb3J0ZWQgaXMgZGV0ZWN0ZWQuICovXHJcblx0XHRcdFx0XHRcdFx0LyogTm90ZTogU2luY2UgU1ZHIGVsZW1lbnRzIGhhdmUgc29tZSBvZiB0aGVpciBwcm9wZXJ0aWVzIGRpcmVjdGx5IGFwcGxpZWQgYXMgSFRNTCBhdHRyaWJ1dGVzLFxyXG5cdFx0XHRcdFx0XHRcdCB0aGVyZSBpcyBubyB3YXkgdG8gY2hlY2sgZm9yIHRoZWlyIGV4cGxpY2l0IGJyb3dzZXIgc3VwcG9ydCwgYW5kIHNvIHdlIHNraXAgc2tpcCB0aGlzIGNoZWNrIGZvciB0aGVtLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmICgoIWRhdGEgfHwgIWRhdGEuaXNTVkcpICYmIHJvb3RQcm9wZXJ0eSAhPT0gXCJ0d2VlblwiICYmIENTUy5OYW1lcy5wcmVmaXhDaGVjayhyb290UHJvcGVydHkpWzFdID09PSBmYWxzZSAmJiBDU1MuTm9ybWFsaXphdGlvbnMucmVnaXN0ZXJlZFtyb290UHJvcGVydHldID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1Zykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIlNraXBwaW5nIFtcIiArIHJvb3RQcm9wZXJ0eSArIFwiXSBkdWUgdG8gYSBsYWNrIG9mIGJyb3dzZXIgc3VwcG9ydC5cIik7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgZGlzcGxheSBvcHRpb24gaXMgYmVpbmcgc2V0IHRvIGEgbm9uLVwibm9uZVwiIChlLmcuIFwiYmxvY2tcIikgYW5kIG9wYWNpdHkgKGZpbHRlciBvbiBJRTw9OCkgaXMgYmVpbmdcclxuXHRcdFx0XHRcdFx0XHQgYW5pbWF0ZWQgdG8gYW4gZW5kVmFsdWUgb2Ygbm9uLXplcm8sIHRoZSB1c2VyJ3MgaW50ZW50aW9uIGlzIHRvIGZhZGUgaW4gZnJvbSBpbnZpc2libGUsIHRodXMgd2UgZm9yY2VmZWVkIG9wYWNpdHlcclxuXHRcdFx0XHRcdFx0XHQgYSBzdGFydFZhbHVlIG9mIDAgaWYgaXRzIHN0YXJ0VmFsdWUgaGFzbid0IGFscmVhZHkgYmVlbiBzb3VyY2VkIGJ5IHZhbHVlIHRyYW5zZmVycmluZyBvciBwcmlvciBmb3JjZWZlZWRpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKCgob3B0cy5kaXNwbGF5ICE9PSB1bmRlZmluZWQgJiYgb3B0cy5kaXNwbGF5ICE9PSBudWxsICYmIG9wdHMuZGlzcGxheSAhPT0gXCJub25lXCIpIHx8IChvcHRzLnZpc2liaWxpdHkgIT09IHVuZGVmaW5lZCAmJiBvcHRzLnZpc2liaWxpdHkgIT09IFwiaGlkZGVuXCIpKSAmJiAvb3BhY2l0eXxmaWx0ZXIvLnRlc3QocHJvcGVydHkpICYmICFzdGFydFZhbHVlICYmIGVuZFZhbHVlICE9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gMDtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIElmIHZhbHVlcyBoYXZlIGJlZW4gdHJhbnNmZXJyZWQgZnJvbSB0aGUgcHJldmlvdXMgVmVsb2NpdHkgY2FsbCwgZXh0cmFjdCB0aGUgZW5kVmFsdWUgYW5kIHJvb3RQcm9wZXJ0eVZhbHVlXHJcblx0XHRcdFx0XHRcdFx0IGZvciBhbGwgb2YgdGhlIGN1cnJlbnQgY2FsbCdzIHByb3BlcnRpZXMgdGhhdCB3ZXJlICphbHNvKiBhbmltYXRlZCBpbiB0aGUgcHJldmlvdXMgY2FsbC4gKi9cclxuXHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBWYWx1ZSB0cmFuc2ZlcnJpbmcgY2FuIG9wdGlvbmFsbHkgYmUgZGlzYWJsZWQgYnkgdGhlIHVzZXIgdmlhIHRoZSBfY2FjaGVWYWx1ZXMgb3B0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChvcHRzLl9jYWNoZVZhbHVlcyAmJiBsYXN0VHdlZW5zQ29udGFpbmVyICYmIGxhc3RUd2VlbnNDb250YWluZXJbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoc3RhcnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSBsYXN0VHdlZW5zQ29udGFpbmVyW3Byb3BlcnR5XS5lbmRWYWx1ZSArIGxhc3RUd2VlbnNDb250YWluZXJbcHJvcGVydHldLnVuaXRUeXBlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFRoZSBwcmV2aW91cyBjYWxsJ3Mgcm9vdFByb3BlcnR5VmFsdWUgaXMgZXh0cmFjdGVkIGZyb20gdGhlIGVsZW1lbnQncyBkYXRhIGNhY2hlIHNpbmNlIHRoYXQncyB0aGVcclxuXHRcdFx0XHRcdFx0XHRcdCBpbnN0YW5jZSBvZiByb290UHJvcGVydHlWYWx1ZSB0aGF0IGdldHMgZnJlc2hseSB1cGRhdGVkIGJ5IHRoZSB0d2VlbmluZyBwcm9jZXNzLCB3aGVyZWFzIHRoZSByb290UHJvcGVydHlWYWx1ZVxyXG5cdFx0XHRcdFx0XHRcdFx0IGF0dGFjaGVkIHRvIHRoZSBpbmNvbWluZyBsYXN0VHdlZW5zQ29udGFpbmVyIGlzIGVxdWFsIHRvIHRoZSByb290IHByb3BlcnR5J3MgdmFsdWUgcHJpb3IgdG8gYW55IHR3ZWVuaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWUgPSBkYXRhLnJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGVbcm9vdFByb3BlcnR5XTtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIElmIHZhbHVlcyB3ZXJlIG5vdCB0cmFuc2ZlcnJlZCBmcm9tIGEgcHJldmlvdXMgVmVsb2NpdHkgY2FsbCwgcXVlcnkgdGhlIERPTSBhcyBuZWVkZWQuICovXHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIEhhbmRsZSBob29rZWQgcHJvcGVydGllcy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChDU1MuSG9va3MucmVnaXN0ZXJlZFtwcm9wZXJ0eV0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHN0YXJ0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgcm9vdFByb3BlcnR5KTsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogVGhlIGZvbGxvd2luZyBnZXRQcm9wZXJ0eVZhbHVlKCkgY2FsbCBkb2VzIG5vdCBhY3R1YWxseSB0cmlnZ2VyIGEgRE9NIHF1ZXJ5O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBnZXRQcm9wZXJ0eVZhbHVlKCkgd2lsbCBleHRyYWN0IHRoZSBob29rIGZyb20gcm9vdFByb3BlcnR5VmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIHByb3BlcnR5LCByb290UHJvcGVydHlWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgc3RhcnRWYWx1ZSBpcyBhbHJlYWR5IGRlZmluZWQgdmlhIGZvcmNlZmVlZGluZywgZG8gbm90IHF1ZXJ5IHRoZSBET00gZm9yIHRoZSByb290IHByb3BlcnR5J3MgdmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IGp1c3QgZ3JhYiByb290UHJvcGVydHkncyB6ZXJvLXZhbHVlIHRlbXBsYXRlIGZyb20gQ1NTLkhvb2tzLiBUaGlzIG92ZXJ3cml0ZXMgdGhlIGVsZW1lbnQncyBhY3R1YWxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgcm9vdCBwcm9wZXJ0eSB2YWx1ZSAoaWYgb25lIGlzIHNldCksIGJ1dCB0aGlzIGlzIGFjY2VwdGFibGUgc2luY2UgdGhlIHByaW1hcnkgcmVhc29uIHVzZXJzIGZvcmNlZmVlZCBpc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCB0byBhdm9pZCBET00gcXVlcmllcywgYW5kIHRodXMgd2UgbGlrZXdpc2UgYXZvaWQgcXVlcnlpbmcgdGhlIERPTSBmb3IgdGhlIHJvb3QgcHJvcGVydHkncyB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBHcmFiIHRoaXMgaG9vaydzIHplcm8tdmFsdWUgdGVtcGxhdGUsIGUuZy4gXCIwcHggMHB4IDBweCBibGFja1wiLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJvb3RQcm9wZXJ0eVZhbHVlID0gQ1NTLkhvb2tzLnRlbXBsYXRlc1tyb290UHJvcGVydHldWzFdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIEhhbmRsZSBub24taG9va2VkIHByb3BlcnRpZXMgdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiBkZWZpbmVkIHZpYSBmb3JjZWZlZWRpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHN0YXJ0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHkpOyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCBWYWx1ZSBEYXRhIEV4dHJhY3Rpb25cclxuXHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdHZhciBzZXBhcmF0ZWRWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWVVbml0VHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZVVuaXRUeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRvcGVyYXRvciA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBTZXBhcmF0ZXMgYSBwcm9wZXJ0eSB2YWx1ZSBpbnRvIGl0cyBudW1lcmljIHZhbHVlIGFuZCBpdHMgdW5pdCB0eXBlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHZhciBzZXBhcmF0ZVZhbHVlID0gZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdW5pdFR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bnVtZXJpY1ZhbHVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdG51bWVyaWNWYWx1ZSA9ICh2YWx1ZSB8fCBcIjBcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQudG9TdHJpbmcoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC50b0xvd2VyQ2FzZSgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogTWF0Y2ggdGhlIHVuaXQgdHlwZSBhdCB0aGUgZW5kIG9mIHRoZSB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZSgvWyVBLXpdKyQvLCBmdW5jdGlvbihtYXRjaCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LyogR3JhYiB0aGUgdW5pdCB0eXBlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pdFR5cGUgPSBtYXRjaDtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBTdHJpcCB0aGUgdW5pdCB0eXBlIG9mZiBvZiB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIElmIG5vIHVuaXQgdHlwZSB3YXMgc3VwcGxpZWQsIGFzc2lnbiBvbmUgdGhhdCBpcyBhcHByb3ByaWF0ZSBmb3IgdGhpcyBwcm9wZXJ0eSAoZS5nLiBcImRlZ1wiIGZvciByb3RhdGVaIG9yIFwicHhcIiBmb3Igd2lkdGgpLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCF1bml0VHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bml0VHlwZSA9IENTUy5WYWx1ZXMuZ2V0VW5pdFR5cGUocHJvcGVydHkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBbbnVtZXJpY1ZhbHVlLCB1bml0VHlwZV07XHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKHN0YXJ0VmFsdWUgIT09IGVuZFZhbHVlICYmIFR5cGUuaXNTdHJpbmcoc3RhcnRWYWx1ZSkgJiYgVHlwZS5pc1N0cmluZyhlbmRWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHBhdHRlcm4gPSBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGlTdGFydCA9IDAsIC8vIGluZGV4IGluIHN0YXJ0VmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpRW5kID0gMCwgLy8gaW5kZXggaW4gZW5kVmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhU3RhcnQgPSBbXSwgLy8gYXJyYXkgb2Ygc3RhcnRWYWx1ZSBudW1iZXJzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YUVuZCA9IFtdLCAvLyBhcnJheSBvZiBlbmRWYWx1ZSBudW1iZXJzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aW5DYWxjID0gMCwgLy8gS2VlcCB0cmFjayBvZiBiZWluZyBpbnNpZGUgYSBcImNhbGMoKVwiIHNvIHdlIGRvbid0IGR1cGxpY2F0ZSBpdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGluUkdCID0gMCwgLy8gS2VlcCB0cmFjayBvZiBiZWluZyBpbnNpZGUgYW4gUkdCIGFzIHdlIGNhbid0IHVzZSBmcmFjdGlvbmFsIHZhbHVlc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGluUkdCQSA9IDA7IC8vIEtlZXAgdHJhY2sgb2YgYmVpbmcgaW5zaWRlIGFuIFJHQkEgYXMgd2UgbXVzdCBwYXNzIGZyYWN0aW9uYWwgZm9yIHRoZSBhbHBoYSBjaGFubmVsXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IENTUy5Ib29rcy5maXhDb2xvcnMoc3RhcnRWYWx1ZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IENTUy5Ib29rcy5maXhDb2xvcnMoZW5kVmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKGlTdGFydCA8IHN0YXJ0VmFsdWUubGVuZ3RoICYmIGlFbmQgPCBlbmRWYWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNTdGFydCA9IHN0YXJ0VmFsdWVbaVN0YXJ0XSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNFbmQgPSBlbmRWYWx1ZVtpRW5kXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICgvW1xcZFxcLi1dLy50ZXN0KGNTdGFydCkgJiYgL1tcXGRcXC4tXS8udGVzdChjRW5kKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB0U3RhcnQgPSBjU3RhcnQsIC8vIHRlbXBvcmFyeSBjaGFyYWN0ZXIgYnVmZmVyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRFbmQgPSBjRW5kLCAvLyB0ZW1wb3JhcnkgY2hhcmFjdGVyIGJ1ZmZlclxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkb3RTdGFydCA9IFwiLlwiLCAvLyBNYWtlIHN1cmUgd2UgY2FuIG9ubHkgZXZlciBtYXRjaCBhIHNpbmdsZSBkb3QgaW4gYSBkZWNpbWFsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRvdEVuZCA9IFwiLlwiOyAvLyBNYWtlIHN1cmUgd2UgY2FuIG9ubHkgZXZlciBtYXRjaCBhIHNpbmdsZSBkb3QgaW4gYSBkZWNpbWFsXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdoaWxlICgrK2lTdGFydCA8IHN0YXJ0VmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjU3RhcnQgPSBzdGFydFZhbHVlW2lTdGFydF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY1N0YXJ0ID09PSBkb3RTdGFydCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkb3RTdGFydCA9IFwiLi5cIjsgLy8gQ2FuIG5ldmVyIG1hdGNoIHR3byBjaGFyYWN0ZXJzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCEvXFxkLy50ZXN0KGNTdGFydCkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0U3RhcnQgKz0gY1N0YXJ0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoKytpRW5kIDwgZW5kVmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjRW5kID0gZW5kVmFsdWVbaUVuZF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoY0VuZCA9PT0gZG90RW5kKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRvdEVuZCA9IFwiLi5cIjsgLy8gQ2FuIG5ldmVyIG1hdGNoIHR3byBjaGFyYWN0ZXJzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCEvXFxkLy50ZXN0KGNFbmQpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dEVuZCArPSBjRW5kO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdVN0YXJ0ID0gQ1NTLkhvb2tzLmdldFVuaXQoc3RhcnRWYWx1ZSwgaVN0YXJ0KSwgLy8gdGVtcG9yYXJ5IHVuaXQgdHlwZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1RW5kID0gQ1NTLkhvb2tzLmdldFVuaXQoZW5kVmFsdWUsIGlFbmQpOyAvLyB0ZW1wb3JhcnkgdW5pdCB0eXBlXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlTdGFydCArPSB1U3RhcnQubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlFbmQgKz0gdUVuZC5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHVTdGFydCA9PT0gdUVuZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU2FtZSB1bml0c1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRTdGFydCA9PT0gdEVuZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTYW1lIG51bWJlcnMsIHNvIGp1c3QgY29weSBvdmVyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm4gKz0gdFN0YXJ0ICsgdVN0YXJ0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGlmZmVyZW50IG51bWJlcnMsIHNvIHN0b3JlIHRoZW1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybiArPSBcIntcIiArIGFTdGFydC5sZW5ndGggKyAoaW5SR0IgPyBcIiFcIiA6IFwiXCIpICsgXCJ9XCIgKyB1U3RhcnQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFTdGFydC5wdXNoKHBhcnNlRmxvYXQodFN0YXJ0KSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFFbmQucHVzaChwYXJzZUZsb2F0KHRFbmQpKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGlmZmVyZW50IHVuaXRzLCBzbyBwdXQgaW50byBhIFwiY2FsYyhmcm9tICsgdG8pXCIgYW5kIGFuaW1hdGUgZWFjaCBzaWRlIHRvL2Zyb20gemVyb1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5TdGFydCA9IHBhcnNlRmxvYXQodFN0YXJ0KSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuRW5kID0gcGFyc2VGbG9hdCh0RW5kKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuICs9IChpbkNhbGMgPCA1ID8gXCJjYWxjXCIgOiBcIlwiKSArIFwiKFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KyAoblN0YXJ0ID8gXCJ7XCIgKyBhU3RhcnQubGVuZ3RoICsgKGluUkdCID8gXCIhXCIgOiBcIlwiKSArIFwifVwiIDogXCIwXCIpICsgdVN0YXJ0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KyBcIiArIFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KyAobkVuZCA/IFwie1wiICsgKGFTdGFydC5sZW5ndGggKyAoblN0YXJ0ID8gMSA6IDApKSArIChpblJHQiA/IFwiIVwiIDogXCJcIikgKyBcIn1cIiA6IFwiMFwiKSArIHVFbmRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQrIFwiKVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG5TdGFydCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhU3RhcnQucHVzaChuU3RhcnQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhRW5kLnB1c2goMCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobkVuZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhU3RhcnQucHVzaCgwKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUVuZC5wdXNoKG5FbmQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChjU3RhcnQgPT09IGNFbmQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuICs9IGNTdGFydDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpU3RhcnQrKztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpRW5kKys7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gS2VlcCB0cmFjayBvZiBiZWluZyBpbnNpZGUgYSBjYWxjKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaW5DYWxjID09PSAwICYmIGNTdGFydCA9PT0gXCJjXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5DYWxjID09PSAxICYmIGNTdGFydCA9PT0gXCJhXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5DYWxjID09PSAyICYmIGNTdGFydCA9PT0gXCJsXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5DYWxjID09PSAzICYmIGNTdGFydCA9PT0gXCJjXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5DYWxjID49IDQgJiYgY1N0YXJ0ID09PSBcIihcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluQ2FsYysrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoKGluQ2FsYyAmJiBpbkNhbGMgPCA1KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR8fCBpbkNhbGMgPj0gNCAmJiBjU3RhcnQgPT09IFwiKVwiICYmIC0taW5DYWxjIDwgNSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5DYWxjID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gS2VlcCB0cmFjayBvZiBiZWluZyBpbnNpZGUgYW4gcmdiKCkgLyByZ2JhKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaW5SR0IgPT09IDAgJiYgY1N0YXJ0ID09PSBcInJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR8fCBpblJHQiA9PT0gMSAmJiBjU3RhcnQgPT09IFwiZ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHx8IGluUkdCID09PSAyICYmIGNTdGFydCA9PT0gXCJiXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fHwgaW5SR0IgPT09IDMgJiYgY1N0YXJ0ID09PSBcImFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR8fCBpblJHQiA+PSAzICYmIGNTdGFydCA9PT0gXCIoXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaW5SR0IgPT09IDMgJiYgY1N0YXJ0ID09PSBcImFcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpblJHQkEgPSAxO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5SR0IrKztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGluUkdCQSAmJiBjU3RhcnQgPT09IFwiLFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoKytpblJHQkEgPiAzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluUkdCID0gaW5SR0JBID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKChpblJHQkEgJiYgaW5SR0IgPCAoaW5SR0JBID8gNSA6IDQpKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR8fCBpblJHQiA+PSAoaW5SR0JBID8gNCA6IDMpICYmIGNTdGFydCA9PT0gXCIpXCIgJiYgLS1pblJHQiA8IChpblJHQkEgPyA1IDogNCkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGluUkdCID0gaW5SR0JBID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aW5DYWxjID0gMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBjaGFuZ2luZyB1bml0cywgZml4aW5nIGNvbG91cnNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGlTdGFydCAhPT0gc3RhcnRWYWx1ZS5sZW5ndGggfHwgaUVuZCAhPT0gZW5kVmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5kZWJ1Zykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCJUcnlpbmcgdG8gcGF0dGVybiBtYXRjaCBtaXMtbWF0Y2hlZCBzdHJpbmdzIFtcXFwiXCIgKyBlbmRWYWx1ZSArIFwiXFxcIiwgXFxcIlwiICsgc3RhcnRWYWx1ZSArIFwiXFxcIl1cIik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybiA9IHVuZGVmaW5lZDtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChwYXR0ZXJuKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhU3RhcnQubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFZlbG9jaXR5LmRlYnVnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIlBhdHRlcm4gZm91bmQgXFxcIlwiICsgcGF0dGVybiArIFwiXFxcIiAtPiBcIiwgYVN0YXJ0LCBhRW5kLCBcIltcIiArIHN0YXJ0VmFsdWUgKyBcIixcIiArIGVuZFZhbHVlICsgXCJdXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gYVN0YXJ0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gYUVuZDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVVuaXRUeXBlID0gc3RhcnRWYWx1ZVVuaXRUeXBlID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuID0gdW5kZWZpbmVkO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRpZiAoIXBhdHRlcm4pIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIFNlcGFyYXRlIHN0YXJ0VmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRzZXBhcmF0ZWRWYWx1ZSA9IHNlcGFyYXRlVmFsdWUocHJvcGVydHksIHN0YXJ0VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSA9IHNlcGFyYXRlZFZhbHVlWzBdO1xyXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZVVuaXRUeXBlID0gc2VwYXJhdGVkVmFsdWVbMV07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogU2VwYXJhdGUgZW5kVmFsdWUsIGFuZCBleHRyYWN0IGEgdmFsdWUgb3BlcmF0b3IgKGUuZy4gXCIrPVwiLCBcIi09XCIpIGlmIG9uZSBleGlzdHMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRzZXBhcmF0ZWRWYWx1ZSA9IHNlcGFyYXRlVmFsdWUocHJvcGVydHksIGVuZFZhbHVlKTtcclxuXHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gc2VwYXJhdGVkVmFsdWVbMF0ucmVwbGFjZSgvXihbKy1cXC8qXSk9LywgZnVuY3Rpb24obWF0Y2gsIHN1Yk1hdGNoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG9wZXJhdG9yID0gc3ViTWF0Y2g7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBTdHJpcCB0aGUgb3BlcmF0b3Igb2ZmIG9mIHRoZSB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlVW5pdFR5cGUgPSBzZXBhcmF0ZWRWYWx1ZVsxXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBQYXJzZSBmbG9hdCB2YWx1ZXMgZnJvbSBlbmRWYWx1ZSBhbmQgc3RhcnRWYWx1ZS4gRGVmYXVsdCB0byAwIGlmIE5hTiBpcyByZXR1cm5lZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgPSBwYXJzZUZsb2F0KHN0YXJ0VmFsdWUpIHx8IDA7XHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IHBhcnNlRmxvYXQoZW5kVmFsdWUpIHx8IDA7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdFx0IFByb3BlcnR5LVNwZWNpZmljIFZhbHVlIENvbnZlcnNpb25cclxuXHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogQ3VzdG9tIHN1cHBvcnQgZm9yIHByb3BlcnRpZXMgdGhhdCBkb24ndCBhY3R1YWxseSBhY2NlcHQgdGhlICUgdW5pdCB0eXBlLCBidXQgd2hlcmUgcG9sbHlmaWxsaW5nIGlzIHRyaXZpYWwgYW5kIHJlbGF0aXZlbHkgZm9vbHByb29mLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVuZFZhbHVlVW5pdFR5cGUgPT09IFwiJVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIEEgJS12YWx1ZSBmb250U2l6ZS9saW5lSGVpZ2h0IGlzIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQncyBmb250U2l6ZSAoYXMgb3Bwb3NlZCB0byB0aGUgcGFyZW50J3MgZGltZW5zaW9ucyksXHJcblx0XHRcdFx0XHRcdFx0XHRcdCB3aGljaCBpcyBpZGVudGljYWwgdG8gdGhlIGVtIHVuaXQncyBiZWhhdmlvciwgc28gd2UgcGlnZ3liYWNrIG9mZiBvZiB0aGF0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoL14oZm9udFNpemV8bGluZUhlaWdodCkkLy50ZXN0KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIENvbnZlcnQgJSBpbnRvIGFuIGVtIGRlY2ltYWwgdmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSBlbmRWYWx1ZSAvIDEwMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVVuaXRUeXBlID0gXCJlbVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIEZvciBzY2FsZVggYW5kIHNjYWxlWSwgY29udmVydCB0aGUgdmFsdWUgaW50byBpdHMgZGVjaW1hbCBmb3JtYXQgYW5kIHN0cmlwIG9mZiB0aGUgdW5pdCB0eXBlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKC9ec2NhbGUvLnRlc3QocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSBlbmRWYWx1ZSAvIDEwMDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVVuaXRUeXBlID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBGb3IgUkdCIGNvbXBvbmVudHMsIHRha2UgdGhlIGRlZmluZWQgcGVyY2VudGFnZSBvZiAyNTUgYW5kIHN0cmlwIG9mZiB0aGUgdW5pdCB0eXBlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKC8oUmVkfEdyZWVufEJsdWUpJC9pLnRlc3QocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSAoZW5kVmFsdWUgLyAxMDApICogMjU1O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlVW5pdFR5cGUgPSBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0IFVuaXQgUmF0aW8gQ2FsY3VsYXRpb25cclxuXHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBXaGVuIHF1ZXJpZWQsIHRoZSBicm93c2VyIHJldHVybnMgKG1vc3QpIENTUyBwcm9wZXJ0eSB2YWx1ZXMgaW4gcGl4ZWxzLiBUaGVyZWZvcmUsIGlmIGFuIGVuZFZhbHVlIHdpdGggYSB1bml0IHR5cGUgb2ZcclxuXHRcdFx0XHRcdFx0XHQgJSwgZW0sIG9yIHJlbSBpcyBhbmltYXRlZCB0b3dhcmQsIHN0YXJ0VmFsdWUgbXVzdCBiZSBjb252ZXJ0ZWQgZnJvbSBwaXhlbHMgaW50byB0aGUgc2FtZSB1bml0IHR5cGUgYXMgZW5kVmFsdWUgaW4gb3JkZXJcclxuXHRcdFx0XHRcdFx0XHQgZm9yIHZhbHVlIG1hbmlwdWxhdGlvbiBsb2dpYyAoaW5jcmVtZW50L2RlY3JlbWVudCkgdG8gcHJvY2VlZC4gRnVydGhlciwgaWYgdGhlIHN0YXJ0VmFsdWUgd2FzIGZvcmNlZmVkIG9yIHRyYW5zZmVycmVkXHJcblx0XHRcdFx0XHRcdFx0IGZyb20gYSBwcmV2aW91cyBjYWxsLCBzdGFydFZhbHVlIG1heSBhbHNvIG5vdCBiZSBpbiBwaXhlbHMuIFVuaXQgY29udmVyc2lvbiBsb2dpYyB0aGVyZWZvcmUgY29uc2lzdHMgb2YgdHdvIHN0ZXBzOlxyXG5cdFx0XHRcdFx0XHRcdCAxKSBDYWxjdWxhdGluZyB0aGUgcmF0aW8gb2YgJS9lbS9yZW0vdmgvdncgcmVsYXRpdmUgdG8gcGl4ZWxzXHJcblx0XHRcdFx0XHRcdFx0IDIpIENvbnZlcnRpbmcgc3RhcnRWYWx1ZSBpbnRvIHRoZSBzYW1lIHVuaXQgb2YgbWVhc3VyZW1lbnQgYXMgZW5kVmFsdWUgYmFzZWQgb24gdGhlc2UgcmF0aW9zLiAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIFVuaXQgY29udmVyc2lvbiByYXRpb3MgYXJlIGNhbGN1bGF0ZWQgYnkgaW5zZXJ0aW5nIGEgc2libGluZyBub2RlIG5leHQgdG8gdGhlIHRhcmdldCBub2RlLCBjb3B5aW5nIG92ZXIgaXRzIHBvc2l0aW9uIHByb3BlcnR5LFxyXG5cdFx0XHRcdFx0XHRcdCBzZXR0aW5nIHZhbHVlcyB3aXRoIHRoZSB0YXJnZXQgdW5pdCB0eXBlIHRoZW4gY29tcGFyaW5nIHRoZSByZXR1cm5lZCBwaXhlbCB2YWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBFdmVuIGlmIG9ubHkgb25lIG9mIHRoZXNlIHVuaXQgdHlwZXMgaXMgYmVpbmcgYW5pbWF0ZWQsIGFsbCB1bml0IHJhdGlvcyBhcmUgY2FsY3VsYXRlZCBhdCBvbmNlIHNpbmNlIHRoZSBvdmVyaGVhZFxyXG5cdFx0XHRcdFx0XHRcdCBvZiBiYXRjaGluZyB0aGUgU0VUcyBhbmQgR0VUcyB0b2dldGhlciB1cGZyb250IG91dHdlaWdodHMgdGhlIHBvdGVudGlhbCBvdmVyaGVhZFxyXG5cdFx0XHRcdFx0XHRcdCBvZiBsYXlvdXQgdGhyYXNoaW5nIGNhdXNlZCBieSByZS1xdWVyeWluZyBmb3IgdW5jYWxjdWxhdGVkIHJhdGlvcyBmb3Igc3Vic2VxdWVudGx5LXByb2Nlc3NlZCBwcm9wZXJ0aWVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIFRvZG86IFNoaWZ0IHRoaXMgbG9naWMgaW50byB0aGUgY2FsbHMnIGZpcnN0IHRpY2sgaW5zdGFuY2Ugc28gdGhhdCBpdCdzIHN5bmNlZCB3aXRoIFJBRi4gKi9cclxuXHRcdFx0XHRcdFx0XHR2YXIgY2FsY3VsYXRlVW5pdFJhdGlvcyA9IGZ1bmN0aW9uKCkge1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHRcdCBTYW1lIFJhdGlvIENoZWNrc1xyXG5cdFx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBUaGUgcHJvcGVydGllcyBiZWxvdyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZWxlbWVudCBkaWZmZXJzIHN1ZmZpY2llbnRseSBmcm9tIHRoaXMgY2FsbCdzXHJcblx0XHRcdFx0XHRcdFx0XHQgcHJldmlvdXNseSBpdGVyYXRlZCBlbGVtZW50IHRvIGFsc28gZGlmZmVyIGluIGl0cyB1bml0IGNvbnZlcnNpb24gcmF0aW9zLiBJZiB0aGUgcHJvcGVydGllcyBtYXRjaCB1cCB3aXRoIHRob3NlXHJcblx0XHRcdFx0XHRcdFx0XHQgb2YgdGhlIHByaW9yIGVsZW1lbnQsIHRoZSBwcmlvciBlbGVtZW50J3MgY29udmVyc2lvbiByYXRpb3MgYXJlIHVzZWQuIExpa2UgbW9zdCBvcHRpbWl6YXRpb25zIGluIFZlbG9jaXR5LFxyXG5cdFx0XHRcdFx0XHRcdFx0IHRoaXMgaXMgZG9uZSB0byBtaW5pbWl6ZSBET00gcXVlcnlpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgc2FtZVJhdGlvSW5kaWNhdG9ycyA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bXlQYXJlbnQ6IGVsZW1lbnQucGFyZW50Tm9kZSB8fCBkb2N1bWVudC5ib2R5LCAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0cG9zaXRpb246IENTUy5nZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwicG9zaXRpb25cIiksIC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb250U2l6ZTogQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJmb250U2l6ZVwiKSAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogRGV0ZXJtaW5lIGlmIHRoZSBzYW1lICUgcmF0aW8gY2FuIGJlIHVzZWQuICUgaXMgYmFzZWQgb24gdGhlIGVsZW1lbnQncyBwb3NpdGlvbiB2YWx1ZSBhbmQgaXRzIHBhcmVudCdzIHdpZHRoIGFuZCBoZWlnaHQgZGltZW5zaW9ucy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzYW1lUGVyY2VudFJhdGlvID0gKChzYW1lUmF0aW9JbmRpY2F0b3JzLnBvc2l0aW9uID09PSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RQb3NpdGlvbikgJiYgKHNhbWVSYXRpb0luZGljYXRvcnMubXlQYXJlbnQgPT09IGNhbGxVbml0Q29udmVyc2lvbkRhdGEubGFzdFBhcmVudCkpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8qIERldGVybWluZSBpZiB0aGUgc2FtZSBlbSByYXRpbyBjYW4gYmUgdXNlZC4gZW0gaXMgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQncyBmb250U2l6ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzYW1lRW1SYXRpbyA9IChzYW1lUmF0aW9JbmRpY2F0b3JzLmZvbnRTaXplID09PSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RGb250U2l6ZSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogU3RvcmUgdGhlc2UgcmF0aW8gaW5kaWNhdG9ycyBjYWxsLXdpZGUgZm9yIHRoZSBuZXh0IGVsZW1lbnQgdG8gY29tcGFyZSBhZ2FpbnN0LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FsbFVuaXRDb252ZXJzaW9uRGF0YS5sYXN0UGFyZW50ID0gc2FtZVJhdGlvSW5kaWNhdG9ycy5teVBhcmVudDtcclxuXHRcdFx0XHRcdFx0XHRcdGNhbGxVbml0Q29udmVyc2lvbkRhdGEubGFzdFBvc2l0aW9uID0gc2FtZVJhdGlvSW5kaWNhdG9ycy5wb3NpdGlvbjtcclxuXHRcdFx0XHRcdFx0XHRcdGNhbGxVbml0Q29udmVyc2lvbkRhdGEubGFzdEZvbnRTaXplID0gc2FtZVJhdGlvSW5kaWNhdG9ycy5mb250U2l6ZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0XHQgRWxlbWVudC1TcGVjaWZpYyBVbml0c1xyXG5cdFx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBJRTggcm91bmRzIHRvIHRoZSBuZWFyZXN0IHBpeGVsIHdoZW4gcmV0dXJuaW5nIENTUyB2YWx1ZXMsIHRodXMgd2UgcGVyZm9ybSBjb252ZXJzaW9ucyB1c2luZyBhIG1lYXN1cmVtZW50XHJcblx0XHRcdFx0XHRcdFx0XHQgb2YgMTAwIChpbnN0ZWFkIG9mIDEpIHRvIGdpdmUgb3VyIHJhdGlvcyBhIHByZWNpc2lvbiBvZiBhdCBsZWFzdCAyIGRlY2ltYWwgdmFsdWVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIG1lYXN1cmVtZW50ID0gMTAwLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXRSYXRpb3MgPSB7fTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXNhbWVFbVJhdGlvIHx8ICFzYW1lUGVyY2VudFJhdGlvKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBkdW1teSA9IGRhdGEgJiYgZGF0YS5pc1NWRyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwicmVjdFwiKSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5pbml0KGR1bW15KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2FtZVJhdGlvSW5kaWNhdG9ycy5teVBhcmVudC5hcHBlbmRDaGlsZChkdW1teSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBUbyBhY2N1cmF0ZWx5IGFuZCBjb25zaXN0ZW50bHkgY2FsY3VsYXRlIGNvbnZlcnNpb24gcmF0aW9zLCB0aGUgZWxlbWVudCdzIGNhc2NhZGVkIG92ZXJmbG93IGFuZCBib3gtc2l6aW5nIGFyZSBzdHJpcHBlZC5cclxuXHRcdFx0XHRcdFx0XHRcdFx0IFNpbWlsYXJseSwgc2luY2Ugd2lkdGgvaGVpZ2h0IGNhbiBiZSBhcnRpZmljaWFsbHkgY29uc3RyYWluZWQgYnkgdGhlaXIgbWluLS9tYXgtIGVxdWl2YWxlbnRzLCB0aGVzZSBhcmUgY29udHJvbGxlZCBmb3IgYXMgd2VsbC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogT3ZlcmZsb3cgbXVzdCBiZSBhbHNvIGJlIGNvbnRyb2xsZWQgZm9yIHBlci1heGlzIHNpbmNlIHRoZSBvdmVyZmxvdyBwcm9wZXJ0eSBvdmVyd3JpdGVzIGl0cyBwZXItYXhpcyB2YWx1ZXMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdCQuZWFjaChbXCJvdmVyZmxvd1wiLCBcIm92ZXJmbG93WFwiLCBcIm92ZXJmbG93WVwiXSwgZnVuY3Rpb24oaSwgcHJvcGVydHkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5DU1Muc2V0UHJvcGVydHlWYWx1ZShkdW1teSwgcHJvcGVydHksIFwiaGlkZGVuXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuQ1NTLnNldFByb3BlcnR5VmFsdWUoZHVtbXksIFwicG9zaXRpb25cIiwgc2FtZVJhdGlvSW5kaWNhdG9ycy5wb3NpdGlvbik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFZlbG9jaXR5LkNTUy5zZXRQcm9wZXJ0eVZhbHVlKGR1bW15LCBcImZvbnRTaXplXCIsIHNhbWVSYXRpb0luZGljYXRvcnMuZm9udFNpemUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5DU1Muc2V0UHJvcGVydHlWYWx1ZShkdW1teSwgXCJib3hTaXppbmdcIiwgXCJjb250ZW50LWJveFwiKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIHdpZHRoIGFuZCBoZWlnaHQgYWN0IGFzIG91ciBwcm94eSBwcm9wZXJ0aWVzIGZvciBtZWFzdXJpbmcgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsICUgcmF0aW9zLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQkLmVhY2goW1wibWluV2lkdGhcIiwgXCJtYXhXaWR0aFwiLCBcIndpZHRoXCIsIFwibWluSGVpZ2h0XCIsIFwibWF4SGVpZ2h0XCIsIFwiaGVpZ2h0XCJdLCBmdW5jdGlvbihpLCBwcm9wZXJ0eSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFZlbG9jaXR5LkNTUy5zZXRQcm9wZXJ0eVZhbHVlKGR1bW15LCBwcm9wZXJ0eSwgbWVhc3VyZW1lbnQgKyBcIiVcIik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBwYWRkaW5nTGVmdCBhcmJpdHJhcmlseSBhY3RzIGFzIG91ciBwcm94eSBwcm9wZXJ0eSBmb3IgdGhlIGVtIHJhdGlvLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5DU1Muc2V0UHJvcGVydHlWYWx1ZShkdW1teSwgXCJwYWRkaW5nTGVmdFwiLCBtZWFzdXJlbWVudCArIFwiZW1cIik7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBEaXZpZGUgdGhlIHJldHVybmVkIHZhbHVlIGJ5IHRoZSBtZWFzdXJlbWVudCB0byBnZXQgdGhlIHJhdGlvIGJldHdlZW4gMSUgYW5kIDFweC4gRGVmYXVsdCB0byAxIHNpbmNlIHdvcmtpbmcgd2l0aCAwIGNhbiBwcm9kdWNlIEluZmluaXRlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zLnBlcmNlbnRUb1B4V2lkdGggPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RQZXJjZW50VG9QeFdpZHRoID0gKHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZHVtbXksIFwid2lkdGhcIiwgbnVsbCwgdHJ1ZSkpIHx8IDEpIC8gbWVhc3VyZW1lbnQ7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zLnBlcmNlbnRUb1B4SGVpZ2h0ID0gY2FsbFVuaXRDb252ZXJzaW9uRGF0YS5sYXN0UGVyY2VudFRvUHhIZWlnaHQgPSAocGFyc2VGbG9hdChDU1MuZ2V0UHJvcGVydHlWYWx1ZShkdW1teSwgXCJoZWlnaHRcIiwgbnVsbCwgdHJ1ZSkpIHx8IDEpIC8gbWVhc3VyZW1lbnQ7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zLmVtVG9QeCA9IGNhbGxVbml0Q29udmVyc2lvbkRhdGEubGFzdEVtVG9QeCA9IChwYXJzZUZsb2F0KENTUy5nZXRQcm9wZXJ0eVZhbHVlKGR1bW15LCBcInBhZGRpbmdMZWZ0XCIpKSB8fCAxKSAvIG1lYXN1cmVtZW50OyAvKiBHRVQgKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNhbWVSYXRpb0luZGljYXRvcnMubXlQYXJlbnQucmVtb3ZlQ2hpbGQoZHVtbXkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dW5pdFJhdGlvcy5lbVRvUHggPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RFbVRvUHg7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVuaXRSYXRpb3MucGVyY2VudFRvUHhXaWR0aCA9IGNhbGxVbml0Q29udmVyc2lvbkRhdGEubGFzdFBlcmNlbnRUb1B4V2lkdGg7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHVuaXRSYXRpb3MucGVyY2VudFRvUHhIZWlnaHQgPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLmxhc3RQZXJjZW50VG9QeEhlaWdodDtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0XHQgRWxlbWVudC1BZ25vc3RpYyBVbml0c1xyXG5cdFx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKiBXaGVyZWFzICUgYW5kIGVtIHJhdGlvcyBhcmUgZGV0ZXJtaW5lZCBvbiBhIHBlci1lbGVtZW50IGJhc2lzLCB0aGUgcmVtIHVuaXQgb25seSBuZWVkcyB0byBiZSBjaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHQgb25jZSBwZXIgY2FsbCBzaW5jZSBpdCdzIGV4Y2x1c2l2ZWx5IGRlcGVuZGFudCB1cG9uIGRvY3VtZW50LmJvZHkncyBmb250U2l6ZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZVxyXG5cdFx0XHRcdFx0XHRcdFx0IHRoYXQgY2FsY3VsYXRlVW5pdFJhdGlvcygpIGlzIGJlaW5nIHJ1biBkdXJpbmcgdGhpcyBjYWxsLCByZW1Ub1B4IHdpbGwgc3RpbGwgYmUgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlIG9mIG51bGwsXHJcblx0XHRcdFx0XHRcdFx0XHQgc28gd2UgY2FsY3VsYXRlIGl0IG5vdy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChjYWxsVW5pdENvbnZlcnNpb25EYXRhLnJlbVRvUHggPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogRGVmYXVsdCB0byBicm93c2VycycgZGVmYXVsdCBmb250U2l6ZSBvZiAxNnB4IGluIHRoZSBjYXNlIG9mIDAuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhbGxVbml0Q29udmVyc2lvbkRhdGEucmVtVG9QeCA9IHBhcnNlRmxvYXQoQ1NTLmdldFByb3BlcnR5VmFsdWUoZG9jdW1lbnQuYm9keSwgXCJmb250U2l6ZVwiKSkgfHwgMTY7IC8qIEdFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFNpbWlsYXJseSwgdmlld3BvcnQgdW5pdHMgYXJlICUtcmVsYXRpdmUgdG8gdGhlIHdpbmRvdydzIGlubmVyIGRpbWVuc2lvbnMuICovXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoY2FsbFVuaXRDb252ZXJzaW9uRGF0YS52d1RvUHggPT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FsbFVuaXRDb252ZXJzaW9uRGF0YS52d1RvUHggPSBwYXJzZUZsb2F0KHdpbmRvdy5pbm5lcldpZHRoKSAvIDEwMDsgLyogR0VUICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhbGxVbml0Q29udmVyc2lvbkRhdGEudmhUb1B4ID0gcGFyc2VGbG9hdCh3aW5kb3cuaW5uZXJIZWlnaHQpIC8gMTAwOyAvKiBHRVQgKi9cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zLnJlbVRvUHggPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLnJlbVRvUHg7XHJcblx0XHRcdFx0XHRcdFx0XHR1bml0UmF0aW9zLnZ3VG9QeCA9IGNhbGxVbml0Q29udmVyc2lvbkRhdGEudndUb1B4O1xyXG5cdFx0XHRcdFx0XHRcdFx0dW5pdFJhdGlvcy52aFRvUHggPSBjYWxsVW5pdENvbnZlcnNpb25EYXRhLnZoVG9QeDtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoVmVsb2NpdHkuZGVidWcgPj0gMSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIlVuaXQgcmF0aW9zOiBcIiArIEpTT04uc3RyaW5naWZ5KHVuaXRSYXRpb3MpLCBlbGVtZW50KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB1bml0UmF0aW9zO1xyXG5cdFx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCBVbml0IENvbnZlcnNpb25cclxuXHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIFRoZSAqIGFuZCAvIG9wZXJhdG9ycywgd2hpY2ggYXJlIG5vdCBwYXNzZWQgaW4gd2l0aCBhbiBhc3NvY2lhdGVkIHVuaXQsIGluaGVyZW50bHkgdXNlIHN0YXJ0VmFsdWUncyB1bml0LiBTa2lwIHZhbHVlIGFuZCB1bml0IGNvbnZlcnNpb24uICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKC9bXFwvKl0vLnRlc3Qob3BlcmF0b3IpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZVVuaXRUeXBlID0gc3RhcnRWYWx1ZVVuaXRUeXBlO1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogSWYgc3RhcnRWYWx1ZSBhbmQgZW5kVmFsdWUgZGlmZmVyIGluIHVuaXQgdHlwZSwgY29udmVydCBzdGFydFZhbHVlIGludG8gdGhlIHNhbWUgdW5pdCB0eXBlIGFzIGVuZFZhbHVlIHNvIHRoYXQgaWYgZW5kVmFsdWVVbml0VHlwZVxyXG5cdFx0XHRcdFx0XHRcdFx0IGlzIGEgcmVsYXRpdmUgdW5pdCAoJSwgZW0sIHJlbSksIHRoZSB2YWx1ZXMgc2V0IGR1cmluZyB0d2VlbmluZyB3aWxsIGNvbnRpbnVlIHRvIGJlIGFjY3VyYXRlbHkgcmVsYXRpdmUgZXZlbiBpZiB0aGUgbWV0cmljcyB0aGV5IGRlcGVuZFxyXG5cdFx0XHRcdFx0XHRcdFx0IG9uIGFyZSBkeW5hbWljYWxseSBjaGFuZ2luZyBkdXJpbmcgdGhlIGNvdXJzZSBvZiB0aGUgYW5pbWF0aW9uLiBDb252ZXJzZWx5LCBpZiB3ZSBhbHdheXMgbm9ybWFsaXplZCBpbnRvIHB4IGFuZCB1c2VkIHB4IGZvciBzZXR0aW5nIHZhbHVlcywgdGhlIHB4IHJhdGlvXHJcblx0XHRcdFx0XHRcdFx0XHQgd291bGQgYmVjb21lIHN0YWxlIGlmIHRoZSBvcmlnaW5hbCB1bml0IGJlaW5nIGFuaW1hdGVkIHRvd2FyZCB3YXMgcmVsYXRpdmUgYW5kIHRoZSB1bmRlcmx5aW5nIG1ldHJpY3MgY2hhbmdlIGR1cmluZyB0aGUgYW5pbWF0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogU2luY2UgMCBpcyAwIGluIGFueSB1bml0IHR5cGUsIG5vIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5IHdoZW4gc3RhcnRWYWx1ZSBpcyAwIC0tIHdlIGp1c3Qgc3RhcnQgYXQgMCB3aXRoIGVuZFZhbHVlVW5pdFR5cGUuICovXHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICgoc3RhcnRWYWx1ZVVuaXRUeXBlICE9PSBlbmRWYWx1ZVVuaXRUeXBlKSAmJiBzdGFydFZhbHVlICE9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBVbml0IGNvbnZlcnNpb24gaXMgYWxzbyBza2lwcGVkIHdoZW4gZW5kVmFsdWUgaXMgMCwgYnV0ICpzdGFydFZhbHVlVW5pdFR5cGUqIG11c3QgYmUgdXNlZCBmb3IgdHdlZW4gdmFsdWVzIHRvIHJlbWFpbiBhY2N1cmF0ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdC8qIE5vdGU6IFNraXBwaW5nIHVuaXQgY29udmVyc2lvbiBoZXJlIG1lYW5zIHRoYXQgaWYgZW5kVmFsdWVVbml0VHlwZSB3YXMgb3JpZ2luYWxseSBhIHJlbGF0aXZlIHVuaXQsIHRoZSBhbmltYXRpb24gd29uJ3QgcmVsYXRpdmVseVxyXG5cdFx0XHRcdFx0XHRcdFx0IG1hdGNoIHRoZSB1bmRlcmx5aW5nIG1ldHJpY3MgaWYgdGhleSBjaGFuZ2UsIGJ1dCB0aGlzIGlzIGFjY2VwdGFibGUgc2luY2Ugd2UncmUgYW5pbWF0aW5nIHRvd2FyZCBpbnZpc2liaWxpdHkgaW5zdGVhZCBvZiB0b3dhcmQgdmlzaWJpbGl0eSxcclxuXHRcdFx0XHRcdFx0XHRcdCB3aGljaCByZW1haW5zIHBhc3QgdGhlIHBvaW50IG9mIHRoZSBhbmltYXRpb24ncyBjb21wbGV0aW9uLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVuZFZhbHVlID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlVW5pdFR5cGUgPSBzdGFydFZhbHVlVW5pdFR5cGU7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBCeSB0aGlzIHBvaW50LCB3ZSBjYW5ub3QgYXZvaWQgdW5pdCBjb252ZXJzaW9uIChpdCdzIHVuZGVzaXJhYmxlIHNpbmNlIGl0IGNhdXNlcyBsYXlvdXQgdGhyYXNoaW5nKS5cclxuXHRcdFx0XHRcdFx0XHRcdFx0IElmIHdlIGhhdmVuJ3QgYWxyZWFkeSwgd2UgdHJpZ2dlciBjYWxjdWxhdGVVbml0UmF0aW9zKCksIHdoaWNoIHJ1bnMgb25jZSBwZXIgZWxlbWVudCBwZXIgY2FsbC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxlbWVudFVuaXRDb252ZXJzaW9uRGF0YSA9IGVsZW1lbnRVbml0Q29udmVyc2lvbkRhdGEgfHwgY2FsY3VsYXRlVW5pdFJhdGlvcygpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogVGhlIGZvbGxvd2luZyBSZWdFeCBtYXRjaGVzIENTUyBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSB0aGVpciAlIHZhbHVlcyBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgeC1heGlzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBOb3RlOiBXM0Mgc3BlYyBtYW5kYXRlcyB0aGF0IGFsbCBvZiBtYXJnaW4gYW5kIHBhZGRpbmcncyBwcm9wZXJ0aWVzIChldmVuIHRvcCBhbmQgYm90dG9tKSBhcmUgJS1yZWxhdGl2ZSB0byB0aGUgKndpZHRoKiBvZiB0aGUgcGFyZW50IGVsZW1lbnQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBheGlzID0gKC9tYXJnaW58cGFkZGluZ3xsZWZ0fHJpZ2h0fHdpZHRofHRleHR8d29yZHxsZXR0ZXIvaS50ZXN0KHByb3BlcnR5KSB8fCAvWCQvLnRlc3QocHJvcGVydHkpIHx8IHByb3BlcnR5ID09PSBcInhcIikgPyBcInhcIiA6IFwieVwiO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogSW4gb3JkZXIgdG8gYXZvaWQgZ2VuZXJhdGluZyBuXjIgYmVzcG9rZSBjb252ZXJzaW9uIGZ1bmN0aW9ucywgdW5pdCBjb252ZXJzaW9uIGlzIGEgdHdvLXN0ZXAgcHJvY2VzczpcclxuXHRcdFx0XHRcdFx0XHRcdFx0IDEpIENvbnZlcnQgc3RhcnRWYWx1ZSBpbnRvIHBpeGVscy4gMikgQ29udmVydCB0aGlzIG5ldyBwaXhlbCB2YWx1ZSBpbnRvIGVuZFZhbHVlJ3MgdW5pdCB0eXBlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKHN0YXJ0VmFsdWVVbml0VHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIlXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBOb3RlOiB0cmFuc2xhdGVYIGFuZCB0cmFuc2xhdGVZIGFyZSB0aGUgb25seSBwcm9wZXJ0aWVzIHRoYXQgYXJlICUtcmVsYXRpdmUgdG8gYW4gZWxlbWVudCdzIG93biBkaW1lbnNpb25zIC0tIG5vdCBpdHMgcGFyZW50J3MgZGltZW5zaW9ucy5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCBWZWxvY2l0eSBkb2VzIG5vdCBpbmNsdWRlIGEgc3BlY2lhbCBjb252ZXJzaW9uIHByb2Nlc3MgdG8gYWNjb3VudCBmb3IgdGhpcyBiZWhhdmlvci4gVGhlcmVmb3JlLCBhbmltYXRpbmcgdHJhbnNsYXRlWC9ZIGZyb20gYSAlIHZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgdG8gYSBub24tJSB2YWx1ZSB3aWxsIHByb2R1Y2UgYW4gaW5jb3JyZWN0IHN0YXJ0IHZhbHVlLiBGb3J0dW5hdGVseSwgdGhpcyBzb3J0IG9mIGNyb3NzLXVuaXQgY29udmVyc2lvbiBpcyByYXJlbHkgZG9uZSBieSB1c2VycyBpbiBwcmFjdGljZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgKj0gKGF4aXMgPT09IFwieFwiID8gZWxlbWVudFVuaXRDb252ZXJzaW9uRGF0YS5wZXJjZW50VG9QeFdpZHRoIDogZWxlbWVudFVuaXRDb252ZXJzaW9uRGF0YS5wZXJjZW50VG9QeEhlaWdodCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInB4XCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBweCBhY3RzIGFzIG91ciBtaWRwb2ludCBpbiB0aGUgdW5pdCBjb252ZXJzaW9uIHByb2Nlc3M7IGRvIG5vdGhpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0VmFsdWUgKj0gZWxlbWVudFVuaXRDb252ZXJzaW9uRGF0YVtzdGFydFZhbHVlVW5pdFR5cGUgKyBcIlRvUHhcIl07XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIEludmVydCB0aGUgcHggcmF0aW9zIHRvIGNvbnZlcnQgaW50byB0byB0aGUgdGFyZ2V0IHVuaXQuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoZW5kVmFsdWVVbml0VHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIlXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlICo9IDEgLyAoYXhpcyA9PT0gXCJ4XCIgPyBlbGVtZW50VW5pdENvbnZlcnNpb25EYXRhLnBlcmNlbnRUb1B4V2lkdGggOiBlbGVtZW50VW5pdENvbnZlcnNpb25EYXRhLnBlcmNlbnRUb1B4SGVpZ2h0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwicHhcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8qIHN0YXJ0VmFsdWUgaXMgYWxyZWFkeSBpbiBweCwgZG8gbm90aGluZzsgd2UncmUgZG9uZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZSAqPSAxIC8gZWxlbWVudFVuaXRDb252ZXJzaW9uRGF0YVtlbmRWYWx1ZVVuaXRUeXBlICsgXCJUb1B4XCJdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0IFJlbGF0aXZlIFZhbHVlc1xyXG5cdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIE9wZXJhdG9yIGxvZ2ljIG11c3QgYmUgcGVyZm9ybWVkIGxhc3Qgc2luY2UgaXQgcmVxdWlyZXMgdW5pdC1ub3JtYWxpemVkIHN0YXJ0IGFuZCBlbmQgdmFsdWVzLiAqL1xyXG5cdFx0XHRcdFx0XHRcdC8qIE5vdGU6IFJlbGF0aXZlICpwZXJjZW50IHZhbHVlcyogZG8gbm90IGJlaGF2ZSBob3cgbW9zdCBwZW9wbGUgdGhpbms7IHdoaWxlIG9uZSB3b3VsZCBleHBlY3QgXCIrPTUwJVwiXHJcblx0XHRcdFx0XHRcdFx0IHRvIGluY3JlYXNlIHRoZSBwcm9wZXJ0eSAxLjV4IGl0cyBjdXJyZW50IHZhbHVlLCBpdCBpbiBmYWN0IGluY3JlYXNlcyB0aGUgcGVyY2VudCB1bml0cyBpbiBhYnNvbHV0ZSB0ZXJtczpcclxuXHRcdFx0XHRcdFx0XHQgNTAgcG9pbnRzIGlzIGFkZGVkIG9uIHRvcCBvZiB0aGUgY3VycmVudCAlIHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAob3BlcmF0b3IpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIrXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gc3RhcnRWYWx1ZSArIGVuZFZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiLVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbmRWYWx1ZSA9IHN0YXJ0VmFsdWUgLSBlbmRWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIipcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZW5kVmFsdWUgPSBzdGFydFZhbHVlICogZW5kVmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCIvXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlID0gc3RhcnRWYWx1ZSAvIGVuZFZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdCB0d2VlbnNDb250YWluZXIgUHVzaFxyXG5cdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogQ29uc3RydWN0IHRoZSBwZXItcHJvcGVydHkgdHdlZW4gb2JqZWN0LCBhbmQgcHVzaCBpdCB0byB0aGUgZWxlbWVudCdzIHR3ZWVuc0NvbnRhaW5lci4gKi9cclxuXHRcdFx0XHRcdFx0XHR0d2VlbnNDb250YWluZXJbcHJvcGVydHldID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0cm9vdFByb3BlcnR5VmFsdWU6IHJvb3RQcm9wZXJ0eVZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnRWYWx1ZTogc3RhcnRWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZTogc3RhcnRWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlOiBlbmRWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdHVuaXRUeXBlOiBlbmRWYWx1ZVVuaXRUeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZWFzaW5nOiBlYXNpbmdcclxuXHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRcdGlmIChwYXR0ZXJuKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0d2VlbnNDb250YWluZXJbcHJvcGVydHldLnBhdHRlcm4gPSBwYXR0ZXJuO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKFZlbG9jaXR5LmRlYnVnKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcInR3ZWVuc0NvbnRhaW5lciAoXCIgKyBwcm9wZXJ0eSArIFwiKTogXCIgKyBKU09OLnN0cmluZ2lmeSh0d2VlbnNDb250YWluZXJbcHJvcGVydHldKSwgZWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0LyogQ3JlYXRlIGEgdHdlZW4gb3V0IG9mIGVhY2ggcHJvcGVydHksIGFuZCBhcHBlbmQgaXRzIGFzc29jaWF0ZWQgZGF0YSB0byB0d2VlbnNDb250YWluZXIuICovXHJcblx0XHRcdFx0XHRcdGZvciAodmFyIHByb3BlcnR5IGluIHByb3BlcnRpZXNNYXApIHtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKCFwcm9wZXJ0aWVzTWFwLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdC8qIFRoZSBvcmlnaW5hbCBwcm9wZXJ0eSBuYW1lJ3MgZm9ybWF0IG11c3QgYmUgdXNlZCBmb3IgdGhlIHBhcnNlUHJvcGVydHlWYWx1ZSgpIGxvb2t1cCxcclxuXHRcdFx0XHRcdFx0XHQgYnV0IHdlIHRoZW4gdXNlIGl0cyBjYW1lbENhc2Ugc3R5bGluZyB0byBub3JtYWxpemUgaXQgZm9yIG1hbmlwdWxhdGlvbi4gKi9cclxuXHRcdFx0XHRcdFx0XHR2YXIgcHJvcGVydHlOYW1lID0gQ1NTLk5hbWVzLmNhbWVsQ2FzZShwcm9wZXJ0eSksXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlRGF0YSA9IHBhcnNlUHJvcGVydHlWYWx1ZShwcm9wZXJ0aWVzTWFwW3Byb3BlcnR5XSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8qIEZpbmQgc2hvcnRoYW5kIGNvbG9yIHByb3BlcnRpZXMgdGhhdCBoYXZlIGJlZW4gcGFzc2VkIGEgaGV4IHN0cmluZy4gKi9cclxuXHRcdFx0XHRcdFx0XHQvKiBXb3VsZCBiZSBxdWlja2VyIHRvIHVzZSBDU1MuTGlzdHMuY29sb3JzLmluY2x1ZGVzKCkgaWYgcG9zc2libGUgKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoX2luQXJyYXkoQ1NTLkxpc3RzLmNvbG9ycywgcHJvcGVydHlOYW1lKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0LyogUGFyc2UgdGhlIHZhbHVlIGRhdGEgZm9yIGVhY2ggc2hvcnRoYW5kLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGVuZFZhbHVlID0gdmFsdWVEYXRhWzBdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVhc2luZyA9IHZhbHVlRGF0YVsxXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlID0gdmFsdWVEYXRhWzJdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChDU1MuUmVnRXguaXNIZXgudGVzdChlbmRWYWx1ZSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogQ29udmVydCB0aGUgaGV4IHN0cmluZ3MgaW50byB0aGVpciBSR0IgY29tcG9uZW50IGFycmF5cy4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNvbG9yQ29tcG9uZW50cyA9IFtcIlJlZFwiLCBcIkdyZWVuXCIsIFwiQmx1ZVwiXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVuZFZhbHVlUkdCID0gQ1NTLlZhbHVlcy5oZXhUb1JnYihlbmRWYWx1ZSksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFZhbHVlUkdCID0gc3RhcnRWYWx1ZSA/IENTUy5WYWx1ZXMuaGV4VG9SZ2Ioc3RhcnRWYWx1ZSkgOiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBJbmplY3QgdGhlIFJHQiBjb21wb25lbnQgdHdlZW5zIGludG8gcHJvcGVydGllc01hcC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvckNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZGF0YUFycmF5ID0gW2VuZFZhbHVlUkdCW2ldXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVhc2luZykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUFycmF5LnB1c2goZWFzaW5nKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChzdGFydFZhbHVlUkdCICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFBcnJheS5wdXNoKHN0YXJ0VmFsdWVSR0JbaV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zml4UHJvcGVydHlWYWx1ZShwcm9wZXJ0eU5hbWUgKyBjb2xvckNvbXBvbmVudHNbaV0sIGRhdGFBcnJheSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogSWYgd2UgaGF2ZSByZXBsYWNlZCBhIHNob3J0Y3V0IGNvbG9yIHZhbHVlIHRoZW4gZG9uJ3QgdXBkYXRlIHRoZSBzdGFuZGFyZCBwcm9wZXJ0eSBuYW1lICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRmaXhQcm9wZXJ0eVZhbHVlKHByb3BlcnR5TmFtZSwgdmFsdWVEYXRhKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogQWxvbmcgd2l0aCBpdHMgcHJvcGVydHkgZGF0YSwgc3RvcmUgYSByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgaXRzZWxmIG9udG8gdHdlZW5zQ29udGFpbmVyLiAqL1xyXG5cdFx0XHRcdFx0XHR0d2VlbnNDb250YWluZXIuZWxlbWVudCA9IGVsZW1lbnQ7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHQgQ2FsbCBQdXNoXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdFx0LyogTm90ZTogdHdlZW5zQ29udGFpbmVyIGNhbiBiZSBlbXB0eSBpZiBhbGwgb2YgdGhlIHByb3BlcnRpZXMgaW4gdGhpcyBjYWxsJ3MgcHJvcGVydHkgbWFwIHdlcmUgc2tpcHBlZCBkdWUgdG8gbm90XHJcblx0XHRcdFx0XHQgYmVpbmcgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLiBUaGUgZWxlbWVudCBwcm9wZXJ0eSBpcyB1c2VkIGZvciBjaGVja2luZyB0aGF0IHRoZSB0d2VlbnNDb250YWluZXIgaGFzIGJlZW4gYXBwZW5kZWQgdG8uICovXHJcblx0XHRcdFx0XHRpZiAodHdlZW5zQ29udGFpbmVyLmVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0LyogQXBwbHkgdGhlIFwidmVsb2NpdHktYW5pbWF0aW5nXCIgaW5kaWNhdG9yIGNsYXNzLiAqL1xyXG5cdFx0XHRcdFx0XHRDU1MuVmFsdWVzLmFkZENsYXNzKGVsZW1lbnQsIFwidmVsb2NpdHktYW5pbWF0aW5nXCIpO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogVGhlIGNhbGwgYXJyYXkgaG91c2VzIHRoZSB0d2VlbnNDb250YWluZXJzIGZvciBlYWNoIGVsZW1lbnQgYmVpbmcgYW5pbWF0ZWQgaW4gdGhlIGN1cnJlbnQgY2FsbC4gKi9cclxuXHRcdFx0XHRcdFx0Y2FsbC5wdXNoKHR3ZWVuc0NvbnRhaW5lcik7XHJcblxyXG5cdFx0XHRcdFx0XHRkYXRhID0gRGF0YShlbGVtZW50KTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChkYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogU3RvcmUgdGhlIHR3ZWVuc0NvbnRhaW5lciBhbmQgb3B0aW9ucyBpZiB3ZSdyZSB3b3JraW5nIG9uIHRoZSBkZWZhdWx0IGVmZmVjdHMgcXVldWUsIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBieSB0aGUgcmV2ZXJzZSBjb21tYW5kLiAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChvcHRzLnF1ZXVlID09PSBcIlwiKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS50d2VlbnNDb250YWluZXIgPSB0d2VlbnNDb250YWluZXI7XHJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLm9wdHMgPSBvcHRzO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0LyogU3dpdGNoIG9uIHRoZSBlbGVtZW50J3MgYW5pbWF0aW5nIGZsYWcuICovXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5pc0FuaW1hdGluZyA9IHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIE9uY2UgdGhlIGZpbmFsIGVsZW1lbnQgaW4gdGhpcyBjYWxsJ3MgZWxlbWVudCBzZXQgaGFzIGJlZW4gcHJvY2Vzc2VkLCBwdXNoIHRoZSBjYWxsIGFycmF5IG9udG9cclxuXHRcdFx0XHRcdFx0IFZlbG9jaXR5LlN0YXRlLmNhbGxzIGZvciB0aGUgYW5pbWF0aW9uIHRpY2sgdG8gaW1tZWRpYXRlbHkgYmVnaW4gcHJvY2Vzc2luZy4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKGVsZW1lbnRzSW5kZXggPT09IGVsZW1lbnRzTGVuZ3RoIC0gMSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIEFkZCB0aGUgY3VycmVudCBjYWxsIHBsdXMgaXRzIGFzc29jaWF0ZWQgbWV0YWRhdGEgKHRoZSBlbGVtZW50IHNldCBhbmQgdGhlIGNhbGwncyBvcHRpb25zKSBvbnRvIHRoZSBnbG9iYWwgY2FsbCBjb250YWluZXIuXHJcblx0XHRcdFx0XHRcdFx0IEFueXRoaW5nIG9uIHRoaXMgY2FsbCBjb250YWluZXIgaXMgc3ViamVjdGVkIHRvIHRpY2soKSBwcm9jZXNzaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFZlbG9jaXR5LlN0YXRlLmNhbGxzLnB1c2goW2NhbGwsIGVsZW1lbnRzLCBvcHRzLCBudWxsLCBwcm9taXNlRGF0YS5yZXNvbHZlciwgbnVsbCwgMF0pO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBJZiB0aGUgYW5pbWF0aW9uIHRpY2sgaXNuJ3QgcnVubmluZywgc3RhcnQgaXQuIChWZWxvY2l0eSBzaHV0cyBpdCBvZmYgd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIGNhbGxzIHRvIHByb2Nlc3MuKSAqL1xyXG5cdFx0XHRcdFx0XHRcdGlmIChWZWxvY2l0eS5TdGF0ZS5pc1RpY2tpbmcgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5pc1RpY2tpbmcgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIFN0YXJ0IHRoZSB0aWNrIGxvb3AuICovXHJcblx0XHRcdFx0XHRcdFx0XHR0aWNrKCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRzSW5kZXgrKztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyogV2hlbiB0aGUgcXVldWUgb3B0aW9uIGlzIHNldCB0byBmYWxzZSwgdGhlIGNhbGwgc2tpcHMgdGhlIGVsZW1lbnQncyBxdWV1ZSBhbmQgZmlyZXMgaW1tZWRpYXRlbHkuICovXHJcblx0XHRcdFx0aWYgKG9wdHMucXVldWUgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHQvKiBTaW5jZSB0aGlzIGJ1aWxkUXVldWUgY2FsbCBkb2Vzbid0IHJlc3BlY3QgdGhlIGVsZW1lbnQncyBleGlzdGluZyBxdWV1ZSAod2hpY2ggaXMgd2hlcmUgYSBkZWxheSBvcHRpb24gd291bGQgaGF2ZSBiZWVuIGFwcGVuZGVkKSxcclxuXHRcdFx0XHRcdCB3ZSBtYW51YWxseSBpbmplY3QgdGhlIGRlbGF5IHByb3BlcnR5IGhlcmUgd2l0aCBhbiBleHBsaWNpdCBzZXRUaW1lb3V0LiAqL1xyXG5cdFx0XHRcdFx0aWYgKG9wdHMuZGVsYXkpIHtcclxuXHJcblx0XHRcdFx0XHRcdC8qIFRlbXBvcmFyaWx5IHN0b3JlIGRlbGF5ZWQgZWxlbWVudHMgdG8gZmFjaWxpdGF0ZSBhY2Nlc3MgZm9yIGdsb2JhbCBwYXVzZS9yZXN1bWUgKi9cclxuXHRcdFx0XHRcdFx0dmFyIGNhbGxJbmRleCA9IFZlbG9jaXR5LlN0YXRlLmRlbGF5ZWRFbGVtZW50cy5jb3VudCsrO1xyXG5cdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5kZWxheWVkRWxlbWVudHNbY2FsbEluZGV4XSA9IGVsZW1lbnQ7XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgZGVsYXlDb21wbGV0ZSA9IChmdW5jdGlvbihpbmRleCkge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8qIENsZWFyIHRoZSB0ZW1wb3JhcnkgZWxlbWVudCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuZGVsYXllZEVsZW1lbnRzW2luZGV4XSA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdC8qIEZpbmFsbHksIGlzc3VlIHRoZSBjYWxsICovXHJcblx0XHRcdFx0XHRcdFx0XHRidWlsZFF1ZXVlKCk7XHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0fSkoY2FsbEluZGV4KTtcclxuXHJcblx0XHRcdFx0XHRcdERhdGEoZWxlbWVudCkuZGVsYXlCZWdpbiA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcblx0XHRcdFx0XHRcdERhdGEoZWxlbWVudCkuZGVsYXkgPSBwYXJzZUZsb2F0KG9wdHMuZGVsYXkpO1xyXG5cdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLmRlbGF5VGltZXIgPSB7XHJcblx0XHRcdFx0XHRcdFx0c2V0VGltZW91dDogc2V0VGltZW91dChidWlsZFF1ZXVlLCBwYXJzZUZsb2F0KG9wdHMuZGVsYXkpKSxcclxuXHRcdFx0XHRcdFx0XHRuZXh0OiBkZWxheUNvbXBsZXRlXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRidWlsZFF1ZXVlKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQvKiBPdGhlcndpc2UsIHRoZSBjYWxsIHVuZGVyZ29lcyBlbGVtZW50IHF1ZXVlaW5nIGFzIG5vcm1hbC4gKi9cclxuXHRcdFx0XHRcdC8qIE5vdGU6IFRvIGludGVyb3BlcmF0ZSB3aXRoIGpRdWVyeSwgVmVsb2NpdHkgdXNlcyBqUXVlcnkncyBvd24gJC5xdWV1ZSgpIHN0YWNrIGZvciBxdWV1aW5nIGxvZ2ljLiAqL1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQkLnF1ZXVlKGVsZW1lbnQsIG9wdHMucXVldWUsIGZ1bmN0aW9uKG5leHQsIGNsZWFyUXVldWUpIHtcclxuXHRcdFx0XHRcdFx0LyogSWYgdGhlIGNsZWFyUXVldWUgZmxhZyB3YXMgcGFzc2VkIGluIGJ5IHRoZSBzdG9wIGNvbW1hbmQsIHJlc29sdmUgdGhpcyBjYWxsJ3MgcHJvbWlzZS4gKFByb21pc2VzIGNhbiBvbmx5IGJlIHJlc29sdmVkIG9uY2UsXHJcblx0XHRcdFx0XHRcdCBzbyBpdCdzIGZpbmUgaWYgdGhpcyBpcyByZXBlYXRlZGx5IHRyaWdnZXJlZCBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBhc3NvY2lhdGVkIGNhbGwuKSAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoY2xlYXJRdWV1ZSA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChwcm9taXNlRGF0YS5wcm9taXNlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRwcm9taXNlRGF0YS5yZXNvbHZlcihlbGVtZW50cyk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHQvKiBEbyBub3QgY29udGludWUgd2l0aCBhbmltYXRpb24gcXVldWVpbmcuICovXHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIFRoaXMgZmxhZyBpbmRpY2F0ZXMgdG8gdGhlIHVwY29taW5nIGNvbXBsZXRlQ2FsbCgpIGZ1bmN0aW9uIHRoYXQgdGhpcyBxdWV1ZSBlbnRyeSB3YXMgaW5pdGlhdGVkIGJ5IFZlbG9jaXR5LlxyXG5cdFx0XHRcdFx0XHQgU2VlIGNvbXBsZXRlQ2FsbCgpIGZvciBmdXJ0aGVyIGRldGFpbHMuICovXHJcblx0XHRcdFx0XHRcdFZlbG9jaXR5LnZlbG9jaXR5UXVldWVFbnRyeUZsYWcgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdFx0YnVpbGRRdWV1ZShuZXh0KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBBdXRvLURlcXVldWluZ1xyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIEFzIHBlciBqUXVlcnkncyAkLnF1ZXVlKCkgYmVoYXZpb3IsIHRvIGZpcmUgdGhlIGZpcnN0IG5vbi1jdXN0b20tcXVldWUgZW50cnkgb24gYW4gZWxlbWVudCwgdGhlIGVsZW1lbnRcclxuXHRcdFx0XHQgbXVzdCBiZSBkZXF1ZXVlZCBpZiBpdHMgcXVldWUgc3RhY2sgY29uc2lzdHMgKnNvbGVseSogb2YgdGhlIGN1cnJlbnQgY2FsbC4gKFRoaXMgY2FuIGJlIGRldGVybWluZWQgYnkgY2hlY2tpbmdcclxuXHRcdFx0XHQgZm9yIHRoZSBcImlucHJvZ3Jlc3NcIiBpdGVtIHRoYXQgalF1ZXJ5IHByZXBlbmRzIHRvIGFjdGl2ZSBxdWV1ZSBzdGFjayBhcnJheXMuKSBSZWdhcmRsZXNzLCB3aGVuZXZlciB0aGUgZWxlbWVudCdzXHJcblx0XHRcdFx0IHF1ZXVlIGlzIGZ1cnRoZXIgYXBwZW5kZWQgd2l0aCBhZGRpdGlvbmFsIGl0ZW1zIC0tIGluY2x1ZGluZyAkLmRlbGF5KCkncyBvciBldmVuICQuYW5pbWF0ZSgpIGNhbGxzLCB0aGUgcXVldWUnc1xyXG5cdFx0XHRcdCBmaXJzdCBlbnRyeSBpcyBhdXRvbWF0aWNhbGx5IGZpcmVkLiBUaGlzIGJlaGF2aW9yIGNvbnRyYXN0cyB0aGF0IG9mIGN1c3RvbSBxdWV1ZXMsIHdoaWNoIG5ldmVyIGF1dG8tZmlyZS4gKi9cclxuXHRcdFx0XHQvKiBOb3RlOiBXaGVuIGFuIGVsZW1lbnQgc2V0IGlzIGJlaW5nIHN1YmplY3RlZCB0byBhIG5vbi1wYXJhbGxlbCBWZWxvY2l0eSBjYWxsLCB0aGUgYW5pbWF0aW9uIHdpbGwgbm90IGJlZ2luIHVudGlsXHJcblx0XHRcdFx0IGVhY2ggb25lIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc2V0IGhhcyByZWFjaGVkIHRoZSBlbmQgb2YgaXRzIGluZGl2aWR1YWxseSBwcmUtZXhpc3RpbmcgcXVldWUgY2hhaW4uICovXHJcblx0XHRcdFx0LyogTm90ZTogVW5mb3J0dW5hdGVseSwgbW9zdCBwZW9wbGUgZG9uJ3QgZnVsbHkgZ3Jhc3AgalF1ZXJ5J3MgcG93ZXJmdWwsIHlldCBxdWlya3ksICQucXVldWUoKSBmdW5jdGlvbi5cclxuXHRcdFx0XHQgTGVhbiBtb3JlIGhlcmU6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA1ODE1OC9jYW4tc29tZWJvZHktZXhwbGFpbi1qcXVlcnktcXVldWUtdG8tbWUgKi9cclxuXHRcdFx0XHRpZiAoKG9wdHMucXVldWUgPT09IFwiXCIgfHwgb3B0cy5xdWV1ZSA9PT0gXCJmeFwiKSAmJiAkLnF1ZXVlKGVsZW1lbnQpWzBdICE9PSBcImlucHJvZ3Jlc3NcIikge1xyXG5cdFx0XHRcdFx0JC5kZXF1ZXVlKGVsZW1lbnQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdCBFbGVtZW50IFNldCBJdGVyYXRpb25cclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogSWYgdGhlIFwibm9kZVR5cGVcIiBwcm9wZXJ0eSBleGlzdHMgb24gdGhlIGVsZW1lbnRzIHZhcmlhYmxlLCB3ZSdyZSBhbmltYXRpbmcgYSBzaW5nbGUgZWxlbWVudC5cclxuXHRcdFx0IFBsYWNlIGl0IGluIGFuIGFycmF5IHNvIHRoYXQgJC5lYWNoKCkgY2FuIGl0ZXJhdGUgb3ZlciBpdC4gKi9cclxuXHRcdFx0JC5lYWNoKGVsZW1lbnRzLCBmdW5jdGlvbihpLCBlbGVtZW50KSB7XHJcblx0XHRcdFx0LyogRW5zdXJlIGVhY2ggZWxlbWVudCBpbiBhIHNldCBoYXMgYSBub2RlVHlwZSAoaXMgYSByZWFsIGVsZW1lbnQpIHRvIGF2b2lkIHRocm93aW5nIGVycm9ycy4gKi9cclxuXHRcdFx0XHRpZiAoVHlwZS5pc05vZGUoZWxlbWVudCkpIHtcclxuXHRcdFx0XHRcdHByb2Nlc3NFbGVtZW50KGVsZW1lbnQsIGkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdCBPcHRpb246IExvb3BcclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIFRoZSBsb29wIG9wdGlvbiBhY2NlcHRzIGFuIGludGVnZXIgaW5kaWNhdGluZyBob3cgbWFueSB0aW1lcyB0aGUgZWxlbWVudCBzaG91bGQgbG9vcCBiZXR3ZWVuIHRoZSB2YWx1ZXMgaW4gdGhlXHJcblx0XHRcdCBjdXJyZW50IGNhbGwncyBwcm9wZXJ0aWVzIG1hcCBhbmQgdGhlIGVsZW1lbnQncyBwcm9wZXJ0eSB2YWx1ZXMgcHJpb3IgdG8gdGhpcyBjYWxsLiAqL1xyXG5cdFx0XHQvKiBOb3RlOiBUaGUgbG9vcCBvcHRpb24ncyBsb2dpYyBpcyBwZXJmb3JtZWQgaGVyZSAtLSBhZnRlciBlbGVtZW50IHByb2Nlc3NpbmcgLS0gYmVjYXVzZSB0aGUgY3VycmVudCBjYWxsIG5lZWRzXHJcblx0XHRcdCB0byB1bmRlcmdvIGl0cyBxdWV1ZSBpbnNlcnRpb24gcHJpb3IgdG8gdGhlIGxvb3Agb3B0aW9uIGdlbmVyYXRpbmcgaXRzIHNlcmllcyBvZiBjb25zdGl0dWVudCBcInJldmVyc2VcIiBjYWxscyxcclxuXHRcdFx0IHdoaWNoIGNoYWluIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwuIFR3byByZXZlcnNlIGNhbGxzICh0d28gXCJhbHRlcm5hdGlvbnNcIikgY29uc3RpdHV0ZSBvbmUgbG9vcC4gKi9cclxuXHRcdFx0b3B0cyA9ICQuZXh0ZW5kKHt9LCBWZWxvY2l0eS5kZWZhdWx0cywgb3B0aW9ucyk7XHJcblx0XHRcdG9wdHMubG9vcCA9IHBhcnNlSW50KG9wdHMubG9vcCwgMTApO1xyXG5cdFx0XHR2YXIgcmV2ZXJzZUNhbGxzQ291bnQgPSAob3B0cy5sb29wICogMikgLSAxO1xyXG5cclxuXHRcdFx0aWYgKG9wdHMubG9vcCkge1xyXG5cdFx0XHRcdC8qIERvdWJsZSB0aGUgbG9vcCBjb3VudCB0byBjb252ZXJ0IGl0IGludG8gaXRzIGFwcHJvcHJpYXRlIG51bWJlciBvZiBcInJldmVyc2VcIiBjYWxscy5cclxuXHRcdFx0XHQgU3VidHJhY3QgMSBmcm9tIHRoZSByZXN1bHRpbmcgdmFsdWUgc2luY2UgdGhlIGN1cnJlbnQgY2FsbCBpcyBpbmNsdWRlZCBpbiB0aGUgdG90YWwgYWx0ZXJuYXRpb24gY291bnQuICovXHJcblx0XHRcdFx0Zm9yICh2YXIgeCA9IDA7IHggPCByZXZlcnNlQ2FsbHNDb3VudDsgeCsrKSB7XHJcblx0XHRcdFx0XHQvKiBTaW5jZSB0aGUgbG9naWMgZm9yIHRoZSByZXZlcnNlIGFjdGlvbiBvY2N1cnMgaW5zaWRlIFF1ZXVlaW5nIGFuZCB0aGVyZWZvcmUgdGhpcyBjYWxsJ3Mgb3B0aW9ucyBvYmplY3RcclxuXHRcdFx0XHRcdCBpc24ndCBwYXJzZWQgdW50aWwgdGhlbiBhcyB3ZWxsLCB0aGUgY3VycmVudCBjYWxsJ3MgZGVsYXkgb3B0aW9uIG11c3QgYmUgZXhwbGljaXRseSBwYXNzZWQgaW50byB0aGUgcmV2ZXJzZVxyXG5cdFx0XHRcdFx0IGNhbGwgc28gdGhhdCB0aGUgZGVsYXkgbG9naWMgdGhhdCBvY2N1cnMgaW5zaWRlICpQcmUtUXVldWVpbmcqIGNhbiBwcm9jZXNzIGl0LiAqL1xyXG5cdFx0XHRcdFx0dmFyIHJldmVyc2VPcHRpb25zID0ge1xyXG5cdFx0XHRcdFx0XHRkZWxheTogb3B0cy5kZWxheSxcclxuXHRcdFx0XHRcdFx0cHJvZ3Jlc3M6IG9wdHMucHJvZ3Jlc3NcclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgYSBjb21wbGV0ZSBjYWxsYmFjayB3YXMgcGFzc2VkIGludG8gdGhpcyBjYWxsLCB0cmFuc2ZlciBpdCB0byB0aGUgbG9vcCByZWRpcmVjdCdzIGZpbmFsIFwicmV2ZXJzZVwiIGNhbGxcclxuXHRcdFx0XHRcdCBzbyB0aGF0IGl0J3MgdHJpZ2dlcmVkIHdoZW4gdGhlIGVudGlyZSByZWRpcmVjdCBpcyBjb21wbGV0ZSAoYW5kIG5vdCB3aGVuIHRoZSB2ZXJ5IGZpcnN0IGFuaW1hdGlvbiBpcyBjb21wbGV0ZSkuICovXHJcblx0XHRcdFx0XHRpZiAoeCA9PT0gcmV2ZXJzZUNhbGxzQ291bnQgLSAxKSB7XHJcblx0XHRcdFx0XHRcdHJldmVyc2VPcHRpb25zLmRpc3BsYXkgPSBvcHRzLmRpc3BsYXk7XHJcblx0XHRcdFx0XHRcdHJldmVyc2VPcHRpb25zLnZpc2liaWxpdHkgPSBvcHRzLnZpc2liaWxpdHk7XHJcblx0XHRcdFx0XHRcdHJldmVyc2VPcHRpb25zLmNvbXBsZXRlID0gb3B0cy5jb21wbGV0ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRhbmltYXRlKGVsZW1lbnRzLCBcInJldmVyc2VcIiwgcmV2ZXJzZU9wdGlvbnMpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQ2hhaW5pbmdcclxuXHRcdFx0ICoqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdC8qIFJldHVybiB0aGUgZWxlbWVudHMgYmFjayB0byB0aGUgY2FsbCBjaGFpbiwgd2l0aCB3cmFwcGVkIGVsZW1lbnRzIHRha2luZyBwcmVjZWRlbmNlIGluIGNhc2UgVmVsb2NpdHkgd2FzIGNhbGxlZCB2aWEgdGhlICQuZm4uIGV4dGVuc2lvbi4gKi9cclxuXHRcdFx0cmV0dXJuIGdldENoYWluKCk7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8qIFR1cm4gVmVsb2NpdHkgaW50byB0aGUgYW5pbWF0aW9uIGZ1bmN0aW9uLCBleHRlbmRlZCB3aXRoIHRoZSBwcmUtZXhpc3RpbmcgVmVsb2NpdHkgb2JqZWN0LiAqL1xyXG5cdFx0VmVsb2NpdHkgPSAkLmV4dGVuZChhbmltYXRlLCBWZWxvY2l0eSk7XHJcblx0XHQvKiBGb3IgbGVnYWN5IHN1cHBvcnQsIGFsc28gZXhwb3NlIHRoZSBsaXRlcmFsIGFuaW1hdGUgbWV0aG9kLiAqL1xyXG5cdFx0VmVsb2NpdHkuYW5pbWF0ZSA9IGFuaW1hdGU7XHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqXHJcblx0XHQgVGltaW5nXHJcblx0XHQgKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0LyogVGlja2VyIGZ1bmN0aW9uLiAqL1xyXG5cdFx0dmFyIHRpY2tlciA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgckFGU2hpbTtcclxuXHJcblx0XHQvKiBJbmFjdGl2ZSBicm93c2VyIHRhYnMgcGF1c2UgckFGLCB3aGljaCByZXN1bHRzIGluIGFsbCBhY3RpdmUgYW5pbWF0aW9ucyBpbW1lZGlhdGVseSBzcHJpbnRpbmcgdG8gdGhlaXIgY29tcGxldGlvbiBzdGF0ZXMgd2hlbiB0aGUgdGFiIHJlZm9jdXNlcy5cclxuXHRcdCBUbyBnZXQgYXJvdW5kIHRoaXMsIHdlIGR5bmFtaWNhbGx5IHN3aXRjaCByQUYgdG8gc2V0VGltZW91dCAod2hpY2ggdGhlIGJyb3dzZXIgKmRvZXNuJ3QqIHBhdXNlKSB3aGVuIHRoZSB0YWIgbG9zZXMgZm9jdXMuIFdlIHNraXAgdGhpcyBmb3IgbW9iaWxlXHJcblx0XHQgZGV2aWNlcyB0byBhdm9pZCB3YXN0aW5nIGJhdHRlcnkgcG93ZXIgb24gaW5hY3RpdmUgdGFicy4gKi9cclxuXHRcdC8qIE5vdGU6IFRhYiBmb2N1cyBkZXRlY3Rpb24gZG9lc24ndCB3b3JrIG9uIG9sZGVyIHZlcnNpb25zIG9mIElFLCBidXQgdGhhdCdzIG9rYXkgc2luY2UgdGhleSBkb24ndCBzdXBwb3J0IHJBRiB0byBiZWdpbiB3aXRoLiAqL1xyXG5cdFx0aWYgKCFWZWxvY2l0eS5TdGF0ZS5pc01vYmlsZSAmJiBkb2N1bWVudC5oaWRkZW4gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR2YXIgdXBkYXRlVGlja2VyID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0LyogUmVhc3NpZ24gdGhlIHJBRiBmdW5jdGlvbiAod2hpY2ggdGhlIGdsb2JhbCB0aWNrKCkgZnVuY3Rpb24gdXNlcykgYmFzZWQgb24gdGhlIHRhYidzIGZvY3VzIHN0YXRlLiAqL1xyXG5cdFx0XHRcdGlmIChkb2N1bWVudC5oaWRkZW4pIHtcclxuXHRcdFx0XHRcdHRpY2tlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcblx0XHRcdFx0XHRcdC8qIFRoZSB0aWNrIGZ1bmN0aW9uIG5lZWRzIGEgdHJ1dGh5IGZpcnN0IGFyZ3VtZW50IGluIG9yZGVyIHRvIHBhc3MgaXRzIGludGVybmFsIHRpbWVzdGFtcCBjaGVjay4gKi9cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sodHJ1ZSk7XHJcblx0XHRcdFx0XHRcdH0sIDE2KTtcclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0LyogVGhlIHJBRiBsb29wIGhhcyBiZWVuIHBhdXNlZCBieSB0aGUgYnJvd3Nlciwgc28gd2UgbWFudWFsbHkgcmVzdGFydCB0aGUgdGljay4gKi9cclxuXHRcdFx0XHRcdHRpY2soKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGlja2VyID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCByQUZTaGltO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8qIFBhZ2UgY291bGQgYmUgc2l0dGluZyBpbiB0aGUgYmFja2dyb3VuZCBhdCB0aGlzIHRpbWUgKGkuZS4gb3BlbmVkIGFzIG5ldyB0YWIpIHNvIG1ha2luZyBzdXJlIHdlIHVzZSBjb3JyZWN0IHRpY2tlciBmcm9tIHRoZSBzdGFydCAqL1xyXG5cdFx0XHR1cGRhdGVUaWNrZXIoKTtcclxuXHJcblx0XHRcdC8qIEFuZCB0aGVuIHJ1biBjaGVjayBhZ2FpbiBldmVyeSB0aW1lIHZpc2liaWxpdHkgY2hhbmdlcyAqL1xyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCB1cGRhdGVUaWNrZXIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qKioqKioqKioqKipcclxuXHRcdCBUaWNrXHJcblx0XHQgKioqKioqKioqKioqL1xyXG5cclxuXHRcdC8qIE5vdGU6IEFsbCBjYWxscyB0byBWZWxvY2l0eSBhcmUgcHVzaGVkIHRvIHRoZSBWZWxvY2l0eS5TdGF0ZS5jYWxscyBhcnJheSwgd2hpY2ggaXMgZnVsbHkgaXRlcmF0ZWQgdGhyb3VnaCB1cG9uIGVhY2ggdGljay4gKi9cclxuXHRcdGZ1bmN0aW9uIHRpY2sodGltZXN0YW1wKSB7XHJcblx0XHRcdC8qIEFuIGVtcHR5IHRpbWVzdGFtcCBhcmd1bWVudCBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBmaXJzdCB0aWNrIG9jY3VyZW5jZSBzaW5jZSB0aWNraW5nIHdhcyB0dXJuZWQgb24uXHJcblx0XHRcdCBXZSBsZXZlcmFnZSB0aGlzIG1ldGFkYXRhIHRvIGZ1bGx5IGlnbm9yZSB0aGUgZmlyc3QgdGljayBwYXNzIHNpbmNlIFJBRidzIGluaXRpYWwgcGFzcyBpcyBmaXJlZCB3aGVuZXZlclxyXG5cdFx0XHQgdGhlIGJyb3dzZXIncyBuZXh0IHRpY2sgc3luYyB0aW1lIG9jY3Vycywgd2hpY2ggcmVzdWx0cyBpbiB0aGUgZmlyc3QgZWxlbWVudHMgc3ViamVjdGVkIHRvIFZlbG9jaXR5XHJcblx0XHRcdCBjYWxscyBiZWluZyBhbmltYXRlZCBvdXQgb2Ygc3luYyB3aXRoIGFueSBlbGVtZW50cyBhbmltYXRlZCBpbW1lZGlhdGVseSB0aGVyZWFmdGVyLiBJbiBzaG9ydCwgd2UgaWdub3JlXHJcblx0XHRcdCB0aGUgZmlyc3QgUkFGIHRpY2sgcGFzcyBzbyB0aGF0IGVsZW1lbnRzIGJlaW5nIGltbWVkaWF0ZWx5IGNvbnNlY3V0aXZlbHkgYW5pbWF0ZWQgLS0gaW5zdGVhZCBvZiBzaW11bHRhbmVvdXNseSBhbmltYXRlZFxyXG5cdFx0XHQgYnkgdGhlIHNhbWUgVmVsb2NpdHkgY2FsbCAtLSBhcmUgcHJvcGVybHkgYmF0Y2hlZCBpbnRvIHRoZSBzYW1lIGluaXRpYWwgUkFGIHRpY2sgYW5kIGNvbnNlcXVlbnRseSByZW1haW4gaW4gc3luYyB0aGVyZWFmdGVyLiAqL1xyXG5cdFx0XHRpZiAodGltZXN0YW1wKSB7XHJcblx0XHRcdFx0LyogV2Ugbm9ybWFsbHkgdXNlIFJBRidzIGhpZ2ggcmVzb2x1dGlvbiB0aW1lc3RhbXAgYnV0IGFzIGl0IGNhbiBiZSBzaWduaWZpY2FudGx5IG9mZnNldCB3aGVuIHRoZSBicm93c2VyIGlzXHJcblx0XHRcdFx0IHVuZGVyIGhpZ2ggc3RyZXNzIHdlIGdpdmUgdGhlIG9wdGlvbiBmb3IgY2hvcHBpbmVzcyBvdmVyIGFsbG93aW5nIHRoZSBicm93c2VyIHRvIGRyb3AgaHVnZSBjaHVua3Mgb2YgZnJhbWVzLlxyXG5cdFx0XHRcdCBXZSB1c2UgcGVyZm9ybWFuY2Uubm93KCkgYW5kIHNoaW0gaXQgaWYgaXQgZG9lc24ndCBleGlzdCBmb3Igd2hlbiB0aGUgdGFiIGlzIGhpZGRlbi4gKi9cclxuXHRcdFx0XHR2YXIgdGltZUN1cnJlbnQgPSBWZWxvY2l0eS50aW1lc3RhbXAgJiYgdGltZXN0YW1wICE9PSB0cnVlID8gdGltZXN0YW1wIDogcGVyZm9ybWFuY2Uubm93KCk7XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBDYWxsIEl0ZXJhdGlvblxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0dmFyIGNhbGxzTGVuZ3RoID0gVmVsb2NpdHkuU3RhdGUuY2FsbHMubGVuZ3RoO1xyXG5cclxuXHRcdFx0XHQvKiBUbyBzcGVlZCB1cCBpdGVyYXRpbmcgb3ZlciB0aGlzIGFycmF5LCBpdCBpcyBjb21wYWN0ZWQgKGZhbHNleSBpdGVtcyAtLSBjYWxscyB0aGF0IGhhdmUgY29tcGxldGVkIC0tIGFyZSByZW1vdmVkKVxyXG5cdFx0XHRcdCB3aGVuIGl0cyBsZW5ndGggaGFzIGJhbGxvb25lZCB0byBhIHBvaW50IHRoYXQgY2FuIGltcGFjdCB0aWNrIHBlcmZvcm1hbmNlLiBUaGlzIG9ubHkgYmVjb21lcyBuZWNlc3Nhcnkgd2hlbiBhbmltYXRpb25cclxuXHRcdFx0XHQgaGFzIGJlZW4gY29udGludW91cyB3aXRoIG1hbnkgZWxlbWVudHMgb3ZlciBhIGxvbmcgcGVyaW9kIG9mIHRpbWU7IHdoZW5ldmVyIGFsbCBhY3RpdmUgY2FsbHMgYXJlIGNvbXBsZXRlZCwgY29tcGxldGVDYWxsKCkgY2xlYXJzIFZlbG9jaXR5LlN0YXRlLmNhbGxzLiAqL1xyXG5cdFx0XHRcdGlmIChjYWxsc0xlbmd0aCA+IDEwMDAwKSB7XHJcblx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5jYWxscyA9IGNvbXBhY3RTcGFyc2VBcnJheShWZWxvY2l0eS5TdGF0ZS5jYWxscyk7XHJcblx0XHRcdFx0XHRjYWxsc0xlbmd0aCA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzLmxlbmd0aDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIGFjdGl2ZSBjYWxsLiAqL1xyXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbHNMZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0LyogV2hlbiBhIFZlbG9jaXR5IGNhbGwgaXMgY29tcGxldGVkLCBpdHMgVmVsb2NpdHkuU3RhdGUuY2FsbHMgZW50cnkgaXMgc2V0IHRvIGZhbHNlLiBDb250aW51ZSBvbiB0byB0aGUgbmV4dCBjYWxsLiAqL1xyXG5cdFx0XHRcdFx0aWYgKCFWZWxvY2l0eS5TdGF0ZS5jYWxsc1tpXSkge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHQgQ2FsbC1XaWRlIFZhcmlhYmxlc1xyXG5cdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHR2YXIgY2FsbENvbnRhaW5lciA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzW2ldLFxyXG5cdFx0XHRcdFx0XHRcdGNhbGwgPSBjYWxsQ29udGFpbmVyWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG9wdHMgPSBjYWxsQ29udGFpbmVyWzJdLFxyXG5cdFx0XHRcdFx0XHRcdHRpbWVTdGFydCA9IGNhbGxDb250YWluZXJbM10sXHJcblx0XHRcdFx0XHRcdFx0Zmlyc3RUaWNrID0gIXRpbWVTdGFydCxcclxuXHRcdFx0XHRcdFx0XHR0d2VlbkR1bW15VmFsdWUgPSBudWxsLFxyXG5cdFx0XHRcdFx0XHRcdHBhdXNlT2JqZWN0ID0gY2FsbENvbnRhaW5lcls1XSxcclxuXHRcdFx0XHRcdFx0XHRtaWxsaXNlY29uZHNFbGxhcHNlZCA9IGNhbGxDb250YWluZXJbNl07XHJcblxyXG5cclxuXHJcblx0XHRcdFx0XHQvKiBJZiB0aW1lU3RhcnQgaXMgdW5kZWZpbmVkLCB0aGVuIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhhdCB0aGlzIGNhbGwgaGFzIGJlZW4gcHJvY2Vzc2VkIGJ5IHRpY2soKS5cclxuXHRcdFx0XHRcdCBXZSBhc3NpZ24gdGltZVN0YXJ0IG5vdyBzbyB0aGF0IGl0cyB2YWx1ZSBpcyBhcyBjbG9zZSB0byB0aGUgcmVhbCBhbmltYXRpb24gc3RhcnQgdGltZSBhcyBwb3NzaWJsZS5cclxuXHRcdFx0XHRcdCAoQ29udmVyc2VseSwgaGFkIHRpbWVTdGFydCBiZWVuIGRlZmluZWQgd2hlbiB0aGlzIGNhbGwgd2FzIGFkZGVkIHRvIFZlbG9jaXR5LlN0YXRlLmNhbGxzLCB0aGUgZGVsYXlcclxuXHRcdFx0XHRcdCBiZXR3ZWVuIHRoYXQgdGltZSBhbmQgbm93IHdvdWxkIGNhdXNlIHRoZSBmaXJzdCBmZXcgZnJhbWVzIG9mIHRoZSB0d2VlbiB0byBiZSBza2lwcGVkIHNpbmNlXHJcblx0XHRcdFx0XHQgcGVyY2VudENvbXBsZXRlIGlzIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8gdGltZVN0YXJ0LikgKi9cclxuXHRcdFx0XHRcdC8qIEZ1cnRoZXIsIHN1YnRyYWN0IDE2bXMgKHRoZSBhcHByb3hpbWF0ZSByZXNvbHV0aW9uIG9mIFJBRikgZnJvbSB0aGUgY3VycmVudCB0aW1lIHZhbHVlIHNvIHRoYXQgdGhlXHJcblx0XHRcdFx0XHQgZmlyc3QgdGljayBpdGVyYXRpb24gaXNuJ3Qgd2FzdGVkIGJ5IGFuaW1hdGluZyBhdCAwJSB0d2VlbiBjb21wbGV0aW9uLCB3aGljaCB3b3VsZCBwcm9kdWNlIHRoZVxyXG5cdFx0XHRcdFx0IHNhbWUgc3R5bGUgdmFsdWUgYXMgdGhlIGVsZW1lbnQncyBjdXJyZW50IHZhbHVlLiAqL1xyXG5cdFx0XHRcdFx0aWYgKCF0aW1lU3RhcnQpIHtcclxuXHRcdFx0XHRcdFx0dGltZVN0YXJ0ID0gVmVsb2NpdHkuU3RhdGUuY2FsbHNbaV1bM10gPSB0aW1lQ3VycmVudCAtIDE2O1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIElmIGEgcGF1c2Ugb2JqZWN0IGlzIHByZXNlbnQsIHNraXAgcHJvY2Vzc2luZyB1bmxlc3MgaXQgaGFzIGJlZW4gc2V0IHRvIHJlc3VtZSAqL1xyXG5cdFx0XHRcdFx0aWYgKHBhdXNlT2JqZWN0KSB7XHJcblx0XHRcdFx0XHRcdGlmIChwYXVzZU9iamVjdC5yZXN1bWUgPT09IHRydWUpIHtcclxuXHRcdFx0XHRcdFx0XHQvKiBVcGRhdGUgdGhlIHRpbWUgc3RhcnQgdG8gYWNjb21vZGF0ZSB0aGUgcGF1c2VkIGNvbXBsZXRpb24gYW1vdW50ICovXHJcblx0XHRcdFx0XHRcdFx0dGltZVN0YXJ0ID0gY2FsbENvbnRhaW5lclszXSA9IE1hdGgucm91bmQodGltZUN1cnJlbnQgLSBtaWxsaXNlY29uZHNFbGxhcHNlZCAtIDE2KTtcclxuXHJcblx0XHRcdFx0XHRcdFx0LyogUmVtb3ZlIHBhdXNlIG9iamVjdCBhZnRlciBwcm9jZXNzaW5nICovXHJcblx0XHRcdFx0XHRcdFx0Y2FsbENvbnRhaW5lcls1XSA9IG51bGw7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRtaWxsaXNlY29uZHNFbGxhcHNlZCA9IGNhbGxDb250YWluZXJbNl0gPSB0aW1lQ3VycmVudCAtIHRpbWVTdGFydDtcclxuXHJcblx0XHRcdFx0XHQvKiBUaGUgdHdlZW4ncyBjb21wbGV0aW9uIHBlcmNlbnRhZ2UgaXMgcmVsYXRpdmUgdG8gdGhlIHR3ZWVuJ3Mgc3RhcnQgdGltZSwgbm90IHRoZSB0d2VlbidzIHN0YXJ0IHZhbHVlXHJcblx0XHRcdFx0XHQgKHdoaWNoIHdvdWxkIHJlc3VsdCBpbiB1bnByZWRpY3RhYmxlIHR3ZWVuIGR1cmF0aW9ucyBzaW5jZSBKYXZhU2NyaXB0J3MgdGltZXJzIGFyZSBub3QgcGFydGljdWxhcmx5IGFjY3VyYXRlKS5cclxuXHRcdFx0XHRcdCBBY2NvcmRpbmdseSwgd2UgZW5zdXJlIHRoYXQgcGVyY2VudENvbXBsZXRlIGRvZXMgbm90IGV4Y2VlZCAxLiAqL1xyXG5cdFx0XHRcdFx0dmFyIHBlcmNlbnRDb21wbGV0ZSA9IE1hdGgubWluKChtaWxsaXNlY29uZHNFbGxhcHNlZCkgLyBvcHRzLmR1cmF0aW9uLCAxKTtcclxuXHJcblx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0IEVsZW1lbnQgSXRlcmF0aW9uXHJcblx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHQvKiBGb3IgZXZlcnkgY2FsbCwgaXRlcmF0ZSB0aHJvdWdoIGVhY2ggb2YgdGhlIGVsZW1lbnRzIGluIGl0cyBzZXQuICovXHJcblx0XHRcdFx0XHRmb3IgKHZhciBqID0gMCwgY2FsbExlbmd0aCA9IGNhbGwubGVuZ3RoOyBqIDwgY2FsbExlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdHZhciB0d2VlbnNDb250YWluZXIgPSBjYWxsW2pdLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZWxlbWVudCA9IHR3ZWVuc0NvbnRhaW5lci5lbGVtZW50O1xyXG5cclxuXHRcdFx0XHRcdFx0LyogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgZWxlbWVudCBoYXMgYmVlbiBkZWxldGVkIG1pZHdheSB0aHJvdWdoIHRoZSBhbmltYXRpb24gYnkgY2hlY2tpbmcgZm9yIHRoZVxyXG5cdFx0XHRcdFx0XHQgY29udGludWVkIGV4aXN0ZW5jZSBvZiBpdHMgZGF0YSBjYWNoZS4gSWYgaXQncyBnb25lLCBvciB0aGUgZWxlbWVudCBpcyBjdXJyZW50bHkgcGF1c2VkLCBza2lwIGFuaW1hdGluZyB0aGlzIGVsZW1lbnQuICovXHJcblx0XHRcdFx0XHRcdGlmICghRGF0YShlbGVtZW50KSkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR2YXIgdHJhbnNmb3JtUHJvcGVydHlFeGlzdHMgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdCBEaXNwbGF5ICYgVmlzaWJpbGl0eSBUb2dnbGluZ1xyXG5cdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBkaXNwbGF5IG9wdGlvbiBpcyBzZXQgdG8gbm9uLVwibm9uZVwiLCBzZXQgaXQgdXBmcm9udCBzbyB0aGF0IHRoZSBlbGVtZW50IGNhbiBiZWNvbWUgdmlzaWJsZSBiZWZvcmUgdHdlZW5pbmcgYmVnaW5zLlxyXG5cdFx0XHRcdFx0XHQgKE90aGVyd2lzZSwgZGlzcGxheSdzIFwibm9uZVwiIHZhbHVlIGlzIHNldCBpbiBjb21wbGV0ZUNhbGwoKSBvbmNlIHRoZSBhbmltYXRpb24gaGFzIGNvbXBsZXRlZC4pICovXHJcblx0XHRcdFx0XHRcdGlmIChvcHRzLmRpc3BsYXkgIT09IHVuZGVmaW5lZCAmJiBvcHRzLmRpc3BsYXkgIT09IG51bGwgJiYgb3B0cy5kaXNwbGF5ICE9PSBcIm5vbmVcIikge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChvcHRzLmRpc3BsYXkgPT09IFwiZmxleFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgZmxleFZhbHVlcyA9IFtcIi13ZWJraXQtYm94XCIsIFwiLW1vei1ib3hcIiwgXCItbXMtZmxleGJveFwiLCBcIi13ZWJraXQtZmxleFwiXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQkLmVhY2goZmxleFZhbHVlcywgZnVuY3Rpb24oaSwgZmxleFZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdENTUy5zZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiZGlzcGxheVwiLCBmbGV4VmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRDU1Muc2V0UHJvcGVydHlWYWx1ZShlbGVtZW50LCBcImRpc3BsYXlcIiwgb3B0cy5kaXNwbGF5KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogU2FtZSBnb2VzIHdpdGggdGhlIHZpc2liaWxpdHkgb3B0aW9uLCBidXQgaXRzIFwibm9uZVwiIGVxdWl2YWxlbnQgaXMgXCJoaWRkZW5cIi4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKG9wdHMudmlzaWJpbGl0eSAhPT0gdW5kZWZpbmVkICYmIG9wdHMudmlzaWJpbGl0eSAhPT0gXCJoaWRkZW5cIikge1xyXG5cdFx0XHRcdFx0XHRcdENTUy5zZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwidmlzaWJpbGl0eVwiLCBvcHRzLnZpc2liaWxpdHkpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdCBQcm9wZXJ0eSBJdGVyYXRpb25cclxuXHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdC8qIEZvciBldmVyeSBlbGVtZW50LCBpdGVyYXRlIHRocm91Z2ggZWFjaCBwcm9wZXJ0eS4gKi9cclxuXHRcdFx0XHRcdFx0Zm9yICh2YXIgcHJvcGVydHkgaW4gdHdlZW5zQ29udGFpbmVyKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogTm90ZTogSW4gYWRkaXRpb24gdG8gcHJvcGVydHkgdHdlZW4gZGF0YSwgdHdlZW5zQ29udGFpbmVyIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGl0cyBhc3NvY2lhdGVkIGVsZW1lbnQuICovXHJcblx0XHRcdFx0XHRcdFx0aWYgKHR3ZWVuc0NvbnRhaW5lci5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkgJiYgcHJvcGVydHkgIT09IFwiZWxlbWVudFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgdHdlZW4gPSB0d2VlbnNDb250YWluZXJbcHJvcGVydHldLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvKiBFYXNpbmcgY2FuIGVpdGhlciBiZSBhIHByZS1nZW5lcmVhdGVkIGZ1bmN0aW9uIG9yIGEgc3RyaW5nIHRoYXQgcmVmZXJlbmNlcyBhIHByZS1yZWdpc3RlcmVkIGVhc2luZ1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCBvbiB0aGUgVmVsb2NpdHkuRWFzaW5ncyBvYmplY3QuIEluIGVpdGhlciBjYXNlLCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIGVhc2luZyAqZnVuY3Rpb24qLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVhc2luZyA9IFR5cGUuaXNTdHJpbmcodHdlZW4uZWFzaW5nKSA/IFZlbG9jaXR5LkVhc2luZ3NbdHdlZW4uZWFzaW5nXSA6IHR3ZWVuLmVhc2luZztcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdFx0XHQgQ3VycmVudCBWYWx1ZSBDYWxjdWxhdGlvblxyXG5cdFx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoVHlwZS5pc1N0cmluZyh0d2Vlbi5wYXR0ZXJuKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGF0dGVyblJlcGxhY2UgPSBwZXJjZW50Q29tcGxldGUgPT09IDEgP1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oJDAsIGluZGV4LCByb3VuZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gdHdlZW4uZW5kVmFsdWVbaW5kZXhdO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJvdW5kID8gTWF0aC5yb3VuZChyZXN1bHQpIDogcmVzdWx0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSA6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigkMCwgaW5kZXgsIHJvdW5kKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBzdGFydFZhbHVlID0gdHdlZW4uc3RhcnRWYWx1ZVtpbmRleF0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0d2VlbkRlbHRhID0gdHdlZW4uZW5kVmFsdWVbaW5kZXhdIC0gc3RhcnRWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdCA9IHN0YXJ0VmFsdWUgKyAodHdlZW5EZWx0YSAqIGVhc2luZyhwZXJjZW50Q29tcGxldGUsIG9wdHMsIHR3ZWVuRGVsdGEpKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByb3VuZCA/IE1hdGgucm91bmQocmVzdWx0KSA6IHJlc3VsdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWUgPSB0d2Vlbi5wYXR0ZXJuLnJlcGxhY2UoL3soXFxkKykoISk/fS9nLCBwYXR0ZXJuUmVwbGFjZSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHBlcmNlbnRDb21wbGV0ZSA9PT0gMSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHRpY2sgcGFzcyAoaWYgd2UndmUgcmVhY2hlZCAxMDAlIGNvbXBsZXRpb24gZm9yIHRoaXMgdHdlZW4pLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgZW5zdXJlIHRoYXQgY3VycmVudFZhbHVlIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGl0cyB0YXJnZXQgZW5kVmFsdWUgc28gdGhhdCBpdCdzIG5vdCBzdWJqZWN0ZWQgdG8gYW55IHJvdW5kaW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWUgPSB0d2Vlbi5lbmRWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qIE90aGVyd2lzZSwgY2FsY3VsYXRlIGN1cnJlbnRWYWx1ZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkZWx0YSBmcm9tIHN0YXJ0VmFsdWUuICovXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhciB0d2VlbkRlbHRhID0gdHdlZW4uZW5kVmFsdWUgLSB0d2Vlbi5zdGFydFZhbHVlO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZhbHVlID0gdHdlZW4uc3RhcnRWYWx1ZSArICh0d2VlbkRlbHRhICogZWFzaW5nKHBlcmNlbnRDb21wbGV0ZSwgb3B0cywgdHdlZW5EZWx0YSkpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKiBJZiBubyB2YWx1ZSBjaGFuZ2UgaXMgb2NjdXJyaW5nLCBkb24ndCBwcm9jZWVkIHdpdGggRE9NIHVwZGF0aW5nLiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFmaXJzdFRpY2sgJiYgKGN1cnJlbnRWYWx1ZSA9PT0gdHdlZW4uY3VycmVudFZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdFx0XHR0d2Vlbi5jdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0LyogSWYgd2UncmUgdHdlZW5pbmcgYSBmYWtlICd0d2VlbicgcHJvcGVydHkgaW4gb3JkZXIgdG8gbG9nIHRyYW5zaXRpb24gdmFsdWVzLCB1cGRhdGUgdGhlIG9uZS1wZXItY2FsbCB2YXJpYWJsZSBzbyB0aGF0XHJcblx0XHRcdFx0XHRcdFx0XHQgaXQgY2FuIGJlIHBhc3NlZCBpbnRvIHRoZSBwcm9ncmVzcyBjYWxsYmFjay4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eSA9PT0gXCJ0d2VlblwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHR3ZWVuRHVtbXlWYWx1ZSA9IGN1cnJlbnRWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHRcdFx0IEhvb2tzOiBQYXJ0IElcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGhvb2tSb290O1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogRm9yIGhvb2tlZCBwcm9wZXJ0aWVzLCB0aGUgbmV3bHktdXBkYXRlZCByb290UHJvcGVydHlWYWx1ZUNhY2hlIGlzIGNhY2hlZCBvbnRvIHRoZSBlbGVtZW50IHNvIHRoYXQgaXQgY2FuIGJlIHVzZWRcclxuXHRcdFx0XHRcdFx0XHRcdFx0IGZvciBzdWJzZXF1ZW50IGhvb2tzIGluIHRoaXMgY2FsbCB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUgcm9vdCBwcm9wZXJ0eS4gSWYgd2UgZGlkbid0IGNhY2hlIHRoZSB1cGRhdGVkXHJcblx0XHRcdFx0XHRcdFx0XHRcdCByb290UHJvcGVydHlWYWx1ZSwgZWFjaCBzdWJzZXF1ZW50IHVwZGF0ZSB0byB0aGUgcm9vdCBwcm9wZXJ0eSBpbiB0aGlzIHRpY2sgcGFzcyB3b3VsZCByZXNldCB0aGUgcHJldmlvdXMgaG9vaydzXHJcblx0XHRcdFx0XHRcdFx0XHRcdCB1cGRhdGVzIHRvIHJvb3RQcm9wZXJ0eVZhbHVlIHByaW9yIHRvIGluamVjdGlvbi4gQSBuaWNlIHBlcmZvcm1hbmNlIGJ5cHJvZHVjdCBvZiByb290UHJvcGVydHlWYWx1ZSBjYWNoaW5nIGlzIHRoYXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0IHN1YnNlcXVlbnRseSBjaGFpbmVkIGFuaW1hdGlvbnMgdXNpbmcgdGhlIHNhbWUgaG9va1Jvb3QgYnV0IGEgZGlmZmVyZW50IGhvb2sgY2FuIHVzZSB0aGlzIGNhY2hlZCByb290UHJvcGVydHlWYWx1ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKENTUy5Ib29rcy5yZWdpc3RlcmVkW3Byb3BlcnR5XSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGhvb2tSb290ID0gQ1NTLkhvb2tzLmdldFJvb3QocHJvcGVydHkpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcm9vdFByb3BlcnR5VmFsdWVDYWNoZSA9IERhdGEoZWxlbWVudCkucm9vdFByb3BlcnR5VmFsdWVDYWNoZVtob29rUm9vdF07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChyb290UHJvcGVydHlWYWx1ZUNhY2hlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0d2Vlbi5yb290UHJvcGVydHlWYWx1ZSA9IHJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHRcdFx0IERPTSBVcGRhdGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICoqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0Lyogc2V0UHJvcGVydHlWYWx1ZSgpIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHByb3BlcnR5IG5hbWUgYW5kIHByb3BlcnR5IHZhbHVlIHBvc3QgYW55IG5vcm1hbGl6YXRpb24gdGhhdCBtYXkgaGF2ZSBiZWVuIHBlcmZvcm1lZC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogTm90ZTogVG8gc29sdmUgYW4gSUU8PTggcG9zaXRpb25pbmcgYnVnLCB0aGUgdW5pdCB0eXBlIGlzIGRyb3BwZWQgd2hlbiBzZXR0aW5nIGEgcHJvcGVydHkgdmFsdWUgb2YgMC4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFkanVzdGVkU2V0RGF0YSA9IENTUy5zZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIC8qIFNFVCAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0d2Vlbi5jdXJyZW50VmFsdWUgKyAoSUUgPCA5ICYmIHBhcnNlRmxvYXQoY3VycmVudFZhbHVlKSA9PT0gMCA/IFwiXCIgOiB0d2Vlbi51bml0VHlwZSksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0d2Vlbi5yb290UHJvcGVydHlWYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR3ZWVuLnNjcm9sbERhdGEpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHRcdFx0XHRcdFx0IEhvb2tzOiBQYXJ0IElJXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogTm93IHRoYXQgd2UgaGF2ZSB0aGUgaG9vaydzIHVwZGF0ZWQgcm9vdFByb3BlcnR5VmFsdWUgKHRoZSBwb3N0LXByb2Nlc3NlZCB2YWx1ZSBwcm92aWRlZCBieSBhZGp1c3RlZFNldERhdGEpLCBjYWNoZSBpdCBvbnRvIHRoZSBlbGVtZW50LiAqL1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoQ1NTLkhvb2tzLnJlZ2lzdGVyZWRbcHJvcGVydHldKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0LyogU2luY2UgYWRqdXN0ZWRTZXREYXRhIGNvbnRhaW5zIG5vcm1hbGl6ZWQgZGF0YSByZWFkeSBmb3IgRE9NIHVwZGF0aW5nLCB0aGUgcm9vdFByb3BlcnR5VmFsdWUgbmVlZHMgdG8gYmUgcmUtZXh0cmFjdGVkIGZyb20gaXRzIG5vcm1hbGl6ZWQgZm9ybS4gPz8gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbaG9va1Jvb3RdKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLnJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGVbaG9va1Jvb3RdID0gQ1NTLk5vcm1hbGl6YXRpb25zLnJlZ2lzdGVyZWRbaG9va1Jvb3RdKFwiZXh0cmFjdFwiLCBudWxsLCBhZGp1c3RlZFNldERhdGFbMV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLnJvb3RQcm9wZXJ0eVZhbHVlQ2FjaGVbaG9va1Jvb3RdID0gYWRqdXN0ZWRTZXREYXRhWzFdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyoqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgVHJhbnNmb3Jtc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0LyogRmxhZyB3aGV0aGVyIGEgdHJhbnNmb3JtIHByb3BlcnR5IGlzIGJlaW5nIGFuaW1hdGVkIHNvIHRoYXQgZmx1c2hUcmFuc2Zvcm1DYWNoZSgpIGNhbiBiZSB0cmlnZ2VyZWQgb25jZSB0aGlzIHRpY2sgcGFzcyBpcyBjb21wbGV0ZS4gKi9cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFkanVzdGVkU2V0RGF0YVswXSA9PT0gXCJ0cmFuc2Zvcm1cIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyYW5zZm9ybVByb3BlcnR5RXhpc3RzID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qKioqKioqKioqKioqKioqXHJcblx0XHRcdFx0XHRcdCBtb2JpbGVIQVxyXG5cdFx0XHRcdFx0XHQgKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIG1vYmlsZUhBIGlzIGVuYWJsZWQsIHNldCB0aGUgdHJhbnNsYXRlM2QgdHJhbnNmb3JtIHRvIG51bGwgdG8gZm9yY2UgaGFyZHdhcmUgYWNjZWxlcmF0aW9uLlxyXG5cdFx0XHRcdFx0XHQgSXQncyBzYWZlIHRvIG92ZXJyaWRlIHRoaXMgcHJvcGVydHkgc2luY2UgVmVsb2NpdHkgZG9lc24ndCBhY3R1YWxseSBzdXBwb3J0IGl0cyBhbmltYXRpb24gKGhvb2tzIGFyZSB1c2VkIGluIGl0cyBwbGFjZSkuICovXHJcblx0XHRcdFx0XHRcdGlmIChvcHRzLm1vYmlsZUhBKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogRG9uJ3Qgc2V0IHRoZSBudWxsIHRyYW5zZm9ybSBoYWNrIGlmIHdlJ3ZlIGFscmVhZHkgZG9uZSBzby4gKi9cclxuXHRcdFx0XHRcdFx0XHRpZiAoRGF0YShlbGVtZW50KS50cmFuc2Zvcm1DYWNoZS50cmFuc2xhdGUzZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvKiBBbGwgZW50cmllcyBvbiB0aGUgdHJhbnNmb3JtQ2FjaGUgb2JqZWN0IGFyZSBsYXRlciBjb25jYXRlbmF0ZWQgaW50byBhIHNpbmdsZSB0cmFuc2Zvcm0gc3RyaW5nIHZpYSBmbHVzaFRyYW5zZm9ybUNhY2hlKCkuICovXHJcblx0XHRcdFx0XHRcdFx0XHREYXRhKGVsZW1lbnQpLnRyYW5zZm9ybUNhY2hlLnRyYW5zbGF0ZTNkID0gXCIoMHB4LCAwcHgsIDBweClcIjtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1Qcm9wZXJ0eUV4aXN0cyA9IHRydWU7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAodHJhbnNmb3JtUHJvcGVydHlFeGlzdHMpIHtcclxuXHRcdFx0XHRcdFx0XHRDU1MuZmx1c2hUcmFuc2Zvcm1DYWNoZShlbGVtZW50KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIFRoZSBub24tXCJub25lXCIgZGlzcGxheSB2YWx1ZSBpcyBvbmx5IGFwcGxpZWQgdG8gYW4gZWxlbWVudCBvbmNlIC0tIHdoZW4gaXRzIGFzc29jaWF0ZWQgY2FsbCBpcyBmaXJzdCB0aWNrZWQgdGhyb3VnaC5cclxuXHRcdFx0XHRcdCBBY2NvcmRpbmdseSwgaXQncyBzZXQgdG8gZmFsc2Ugc28gdGhhdCBpdCBpc24ndCByZS1wcm9jZXNzZWQgYnkgdGhpcyBjYWxsIGluIHRoZSBuZXh0IHRpY2suICovXHJcblx0XHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ICE9PSB1bmRlZmluZWQgJiYgb3B0cy5kaXNwbGF5ICE9PSBcIm5vbmVcIikge1xyXG5cdFx0XHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5jYWxsc1tpXVsyXS5kaXNwbGF5ID0gZmFsc2U7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAob3B0cy52aXNpYmlsaXR5ICE9PSB1bmRlZmluZWQgJiYgb3B0cy52aXNpYmlsaXR5ICE9PSBcImhpZGRlblwiKSB7XHJcblx0XHRcdFx0XHRcdFZlbG9jaXR5LlN0YXRlLmNhbGxzW2ldWzJdLnZpc2liaWxpdHkgPSBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBQYXNzIHRoZSBlbGVtZW50cyBhbmQgdGhlIHRpbWluZyBkYXRhIChwZXJjZW50Q29tcGxldGUsIG1zUmVtYWluaW5nLCB0aW1lU3RhcnQsIHR3ZWVuRHVtbXlWYWx1ZSkgaW50byB0aGUgcHJvZ3Jlc3MgY2FsbGJhY2suICovXHJcblx0XHRcdFx0XHRpZiAob3B0cy5wcm9ncmVzcykge1xyXG5cdFx0XHRcdFx0XHRvcHRzLnByb2dyZXNzLmNhbGwoY2FsbENvbnRhaW5lclsxXSxcclxuXHRcdFx0XHRcdFx0XHRcdGNhbGxDb250YWluZXJbMV0sXHJcblx0XHRcdFx0XHRcdFx0XHRwZXJjZW50Q29tcGxldGUsXHJcblx0XHRcdFx0XHRcdFx0XHRNYXRoLm1heCgwLCAodGltZVN0YXJ0ICsgb3B0cy5kdXJhdGlvbikgLSB0aW1lQ3VycmVudCksXHJcblx0XHRcdFx0XHRcdFx0XHR0aW1lU3RhcnQsXHJcblx0XHRcdFx0XHRcdFx0XHR0d2VlbkR1bW15VmFsdWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIElmIHRoaXMgY2FsbCBoYXMgZmluaXNoZWQgdHdlZW5pbmcsIHBhc3MgaXRzIGluZGV4IHRvIGNvbXBsZXRlQ2FsbCgpIHRvIGhhbmRsZSBjYWxsIGNsZWFudXAuICovXHJcblx0XHRcdFx0XHRpZiAocGVyY2VudENvbXBsZXRlID09PSAxKSB7XHJcblx0XHRcdFx0XHRcdGNvbXBsZXRlQ2FsbChpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIE5vdGU6IGNvbXBsZXRlQ2FsbCgpIHNldHMgdGhlIGlzVGlja2luZyBmbGFnIHRvIGZhbHNlIHdoZW4gdGhlIGxhc3QgY2FsbCBvbiBWZWxvY2l0eS5TdGF0ZS5jYWxscyBoYXMgY29tcGxldGVkLiAqL1xyXG5cdFx0XHRpZiAoVmVsb2NpdHkuU3RhdGUuaXNUaWNraW5nKSB7XHJcblx0XHRcdFx0dGlja2VyKHRpY2spO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdCBDYWxsIENvbXBsZXRpb25cclxuXHRcdCAqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdC8qIE5vdGU6IFVubGlrZSB0aWNrKCksIHdoaWNoIHByb2Nlc3NlcyBhbGwgYWN0aXZlIGNhbGxzIGF0IG9uY2UsIGNhbGwgY29tcGxldGlvbiBpcyBoYW5kbGVkIG9uIGEgcGVyLWNhbGwgYmFzaXMuICovXHJcblx0XHRmdW5jdGlvbiBjb21wbGV0ZUNhbGwoY2FsbEluZGV4LCBpc1N0b3BwZWQpIHtcclxuXHRcdFx0LyogRW5zdXJlIHRoZSBjYWxsIGV4aXN0cy4gKi9cclxuXHRcdFx0aWYgKCFWZWxvY2l0eS5TdGF0ZS5jYWxsc1tjYWxsSW5kZXhdKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBQdWxsIHRoZSBtZXRhZGF0YSBmcm9tIHRoZSBjYWxsLiAqL1xyXG5cdFx0XHR2YXIgY2FsbCA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzW2NhbGxJbmRleF1bMF0sXHJcblx0XHRcdFx0XHRlbGVtZW50cyA9IFZlbG9jaXR5LlN0YXRlLmNhbGxzW2NhbGxJbmRleF1bMV0sXHJcblx0XHRcdFx0XHRvcHRzID0gVmVsb2NpdHkuU3RhdGUuY2FsbHNbY2FsbEluZGV4XVsyXSxcclxuXHRcdFx0XHRcdHJlc29sdmVyID0gVmVsb2NpdHkuU3RhdGUuY2FsbHNbY2FsbEluZGV4XVs0XTtcclxuXHJcblx0XHRcdHZhciByZW1haW5pbmdDYWxsc0V4aXN0ID0gZmFsc2U7XHJcblxyXG5cdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgRWxlbWVudCBGaW5hbGl6YXRpb25cclxuXHRcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRmb3IgKHZhciBpID0gMCwgY2FsbExlbmd0aCA9IGNhbGwubGVuZ3RoOyBpIDwgY2FsbExlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0dmFyIGVsZW1lbnQgPSBjYWxsW2ldLmVsZW1lbnQ7XHJcblxyXG5cdFx0XHRcdC8qIElmIHRoZSB1c2VyIHNldCBkaXNwbGF5IHRvIFwibm9uZVwiIChpbnRlbmRpbmcgdG8gaGlkZSB0aGUgZWxlbWVudCksIHNldCBpdCBub3cgdGhhdCB0aGUgYW5pbWF0aW9uIGhhcyBjb21wbGV0ZWQuICovXHJcblx0XHRcdFx0LyogTm90ZTogZGlzcGxheTpub25lIGlzbid0IHNldCB3aGVuIGNhbGxzIGFyZSBtYW51YWxseSBzdG9wcGVkICh2aWEgVmVsb2NpdHkoXCJzdG9wXCIpLiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IERpc3BsYXkgZ2V0cyBpZ25vcmVkIHdpdGggXCJyZXZlcnNlXCIgY2FsbHMgYW5kIGluZmluaXRlIGxvb3BzLCBzaW5jZSB0aGlzIGJlaGF2aW9yIHdvdWxkIGJlIHVuZGVzaXJhYmxlLiAqL1xyXG5cdFx0XHRcdGlmICghaXNTdG9wcGVkICYmICFvcHRzLmxvb3ApIHtcclxuXHRcdFx0XHRcdGlmIChvcHRzLmRpc3BsYXkgPT09IFwibm9uZVwiKSB7XHJcblx0XHRcdFx0XHRcdENTUy5zZXRQcm9wZXJ0eVZhbHVlKGVsZW1lbnQsIFwiZGlzcGxheVwiLCBvcHRzLmRpc3BsYXkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGlmIChvcHRzLnZpc2liaWxpdHkgPT09IFwiaGlkZGVuXCIpIHtcclxuXHRcdFx0XHRcdFx0Q1NTLnNldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgXCJ2aXNpYmlsaXR5XCIsIG9wdHMudmlzaWJpbGl0eSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKiBJZiB0aGUgZWxlbWVudCdzIHF1ZXVlIGlzIGVtcHR5IChpZiBvbmx5IHRoZSBcImlucHJvZ3Jlc3NcIiBpdGVtIGlzIGxlZnQgYXQgcG9zaXRpb24gMCkgb3IgaWYgaXRzIHF1ZXVlIGlzIGFib3V0IHRvIHJ1blxyXG5cdFx0XHRcdCBhIG5vbi1WZWxvY2l0eS1pbml0aWF0ZWQgZW50cnksIHR1cm4gb2ZmIHRoZSBpc0FuaW1hdGluZyBmbGFnLiBBIG5vbi1WZWxvY2l0eS1pbml0aWF0aWVkIHF1ZXVlIGVudHJ5J3MgbG9naWMgbWlnaHQgYWx0ZXJcclxuXHRcdFx0XHQgYW4gZWxlbWVudCdzIENTUyB2YWx1ZXMgYW5kIHRoZXJlYnkgY2F1c2UgVmVsb2NpdHkncyBjYWNoZWQgdmFsdWUgZGF0YSB0byBnbyBzdGFsZS4gVG8gZGV0ZWN0IGlmIGEgcXVldWUgZW50cnkgd2FzIGluaXRpYXRlZCBieSBWZWxvY2l0eSxcclxuXHRcdFx0XHQgd2UgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2Ygb3VyIHNwZWNpYWwgVmVsb2NpdHkucXVldWVFbnRyeUZsYWcgZGVjbGFyYXRpb24sIHdoaWNoIG1pbmlmaWVycyB3b24ndCByZW5hbWUgc2luY2UgdGhlIGZsYWdcclxuXHRcdFx0XHQgaXMgYXNzaWduZWQgdG8galF1ZXJ5J3MgZ2xvYmFsICQgb2JqZWN0IGFuZCB0aHVzIGV4aXN0cyBvdXQgb2YgVmVsb2NpdHkncyBvd24gc2NvcGUuICovXHJcblx0XHRcdFx0dmFyIGRhdGEgPSBEYXRhKGVsZW1lbnQpO1xyXG5cclxuXHRcdFx0XHRpZiAob3B0cy5sb29wICE9PSB0cnVlICYmICgkLnF1ZXVlKGVsZW1lbnQpWzFdID09PSB1bmRlZmluZWQgfHwgIS9cXC52ZWxvY2l0eVF1ZXVlRW50cnlGbGFnL2kudGVzdCgkLnF1ZXVlKGVsZW1lbnQpWzFdKSkpIHtcclxuXHRcdFx0XHRcdC8qIFRoZSBlbGVtZW50IG1heSBoYXZlIGJlZW4gZGVsZXRlZC4gRW5zdXJlIHRoYXQgaXRzIGRhdGEgY2FjaGUgc3RpbGwgZXhpc3RzIGJlZm9yZSBhY3Rpbmcgb24gaXQuICovXHJcblx0XHRcdFx0XHRpZiAoZGF0YSkge1xyXG5cdFx0XHRcdFx0XHRkYXRhLmlzQW5pbWF0aW5nID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdC8qIENsZWFyIHRoZSBlbGVtZW50J3Mgcm9vdFByb3BlcnR5VmFsdWVDYWNoZSwgd2hpY2ggd2lsbCBiZWNvbWUgc3RhbGUuICovXHJcblx0XHRcdFx0XHRcdGRhdGEucm9vdFByb3BlcnR5VmFsdWVDYWNoZSA9IHt9O1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIHRyYW5zZm9ybUhBUHJvcGVydHlFeGlzdHMgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0LyogSWYgYW55IDNEIHRyYW5zZm9ybSBzdWJwcm9wZXJ0eSBpcyBhdCBpdHMgZGVmYXVsdCB2YWx1ZSAocmVnYXJkbGVzcyBvZiB1bml0IHR5cGUpLCByZW1vdmUgaXQuICovXHJcblx0XHRcdFx0XHRcdCQuZWFjaChDU1MuTGlzdHMudHJhbnNmb3JtczNELCBmdW5jdGlvbihpLCB0cmFuc2Zvcm1OYW1lKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGRlZmF1bHRWYWx1ZSA9IC9ec2NhbGUvLnRlc3QodHJhbnNmb3JtTmFtZSkgPyAxIDogMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZhbHVlID0gZGF0YS50cmFuc2Zvcm1DYWNoZVt0cmFuc2Zvcm1OYW1lXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKGRhdGEudHJhbnNmb3JtQ2FjaGVbdHJhbnNmb3JtTmFtZV0gIT09IHVuZGVmaW5lZCAmJiBuZXcgUmVnRXhwKFwiXlxcXFwoXCIgKyBkZWZhdWx0VmFsdWUgKyBcIlteLl1cIikudGVzdChjdXJyZW50VmFsdWUpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1IQVByb3BlcnR5RXhpc3RzID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgZGF0YS50cmFuc2Zvcm1DYWNoZVt0cmFuc2Zvcm1OYW1lXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogTW9iaWxlIGRldmljZXMgaGF2ZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gcmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoZSBhbmltYXRpb24gaW4gb3JkZXIgdG8gYXZvaWQgaG9nZ2luZyB0aGUgR1BVJ3MgbWVtb3J5LiAqL1xyXG5cdFx0XHRcdFx0XHRpZiAob3B0cy5tb2JpbGVIQSkge1xyXG5cdFx0XHRcdFx0XHRcdHRyYW5zZm9ybUhBUHJvcGVydHlFeGlzdHMgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBkYXRhLnRyYW5zZm9ybUNhY2hlLnRyYW5zbGF0ZTNkO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBGbHVzaCB0aGUgc3VicHJvcGVydHkgcmVtb3ZhbHMgdG8gdGhlIERPTS4gKi9cclxuXHRcdFx0XHRcdFx0aWYgKHRyYW5zZm9ybUhBUHJvcGVydHlFeGlzdHMpIHtcclxuXHRcdFx0XHRcdFx0XHRDU1MuZmx1c2hUcmFuc2Zvcm1DYWNoZShlbGVtZW50KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogUmVtb3ZlIHRoZSBcInZlbG9jaXR5LWFuaW1hdGluZ1wiIGluZGljYXRvciBjbGFzcy4gKi9cclxuXHRcdFx0XHRcdFx0Q1NTLlZhbHVlcy5yZW1vdmVDbGFzcyhlbGVtZW50LCBcInZlbG9jaXR5LWFuaW1hdGluZ1wiKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBDb21wbGV0ZVxyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIENvbXBsZXRlIGlzIGZpcmVkIG9uY2UgcGVyIGNhbGwgKG5vdCBvbmNlIHBlciBlbGVtZW50KSBhbmQgaXMgcGFzc2VkIHRoZSBmdWxsIHJhdyBET00gZWxlbWVudCBzZXQgYXMgYm90aCBpdHMgY29udGV4dCBhbmQgaXRzIGZpcnN0IGFyZ3VtZW50LiAqL1xyXG5cdFx0XHRcdC8qIE5vdGU6IENhbGxiYWNrcyBhcmVuJ3QgZmlyZWQgd2hlbiBjYWxscyBhcmUgbWFudWFsbHkgc3RvcHBlZCAodmlhIFZlbG9jaXR5KFwic3RvcFwiKS4gKi9cclxuXHRcdFx0XHRpZiAoIWlzU3RvcHBlZCAmJiBvcHRzLmNvbXBsZXRlICYmICFvcHRzLmxvb3AgJiYgKGkgPT09IGNhbGxMZW5ndGggLSAxKSkge1xyXG5cdFx0XHRcdFx0LyogV2UgdGhyb3cgY2FsbGJhY2tzIGluIGEgc2V0VGltZW91dCBzbyB0aGF0IHRocm93biBlcnJvcnMgZG9uJ3QgaGFsdCB0aGUgZXhlY3V0aW9uIG9mIFZlbG9jaXR5IGl0c2VsZi4gKi9cclxuXHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdG9wdHMuY29tcGxldGUuY2FsbChlbGVtZW50cywgZWxlbWVudHMpO1xyXG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0XHR0aHJvdyBlcnJvcjtcclxuXHRcdFx0XHRcdFx0fSwgMSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHRcdCBQcm9taXNlIFJlc29sdmluZ1xyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0XHQvKiBOb3RlOiBJbmZpbml0ZSBsb29wcyBkb24ndCByZXR1cm4gcHJvbWlzZXMuICovXHJcblx0XHRcdFx0aWYgKHJlc29sdmVyICYmIG9wdHMubG9vcCAhPT0gdHJ1ZSkge1xyXG5cdFx0XHRcdFx0cmVzb2x2ZXIoZWxlbWVudHMpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgT3B0aW9uOiBMb29wIChJbmZpbml0ZSlcclxuXHRcdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcblx0XHRcdFx0aWYgKGRhdGEgJiYgb3B0cy5sb29wID09PSB0cnVlICYmICFpc1N0b3BwZWQpIHtcclxuXHRcdFx0XHRcdC8qIElmIGEgcm90YXRlWC9ZL1ogcHJvcGVydHkgaXMgYmVpbmcgYW5pbWF0ZWQgYnkgMzYwIGRlZyB3aXRoIGxvb3A6dHJ1ZSwgc3dhcCB0d2VlbiBzdGFydC9lbmQgdmFsdWVzIHRvIGVuYWJsZVxyXG5cdFx0XHRcdFx0IGNvbnRpbnVvdXMgaXRlcmF0aXZlIHJvdGF0aW9uIGxvb3BpbmcuIChPdGhlcmlzZSwgdGhlIGVsZW1lbnQgd291bGQganVzdCByb3RhdGUgYmFjayBhbmQgZm9ydGguKSAqL1xyXG5cdFx0XHRcdFx0JC5lYWNoKGRhdGEudHdlZW5zQ29udGFpbmVyLCBmdW5jdGlvbihwcm9wZXJ0eU5hbWUsIHR3ZWVuQ29udGFpbmVyKSB7XHJcblx0XHRcdFx0XHRcdGlmICgvXnJvdGF0ZS8udGVzdChwcm9wZXJ0eU5hbWUpICYmICgocGFyc2VGbG9hdCh0d2VlbkNvbnRhaW5lci5zdGFydFZhbHVlKSAtIHBhcnNlRmxvYXQodHdlZW5Db250YWluZXIuZW5kVmFsdWUpKSAlIDM2MCA9PT0gMCkpIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgb2xkU3RhcnRWYWx1ZSA9IHR3ZWVuQ29udGFpbmVyLnN0YXJ0VmFsdWU7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHR3ZWVuQ29udGFpbmVyLnN0YXJ0VmFsdWUgPSB0d2VlbkNvbnRhaW5lci5lbmRWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR0d2VlbkNvbnRhaW5lci5lbmRWYWx1ZSA9IG9sZFN0YXJ0VmFsdWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmICgvXmJhY2tncm91bmRQb3NpdGlvbi8udGVzdChwcm9wZXJ0eU5hbWUpICYmIHBhcnNlRmxvYXQodHdlZW5Db250YWluZXIuZW5kVmFsdWUpID09PSAxMDAgJiYgdHdlZW5Db250YWluZXIudW5pdFR5cGUgPT09IFwiJVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0dHdlZW5Db250YWluZXIuZW5kVmFsdWUgPSAwO1xyXG5cdFx0XHRcdFx0XHRcdHR3ZWVuQ29udGFpbmVyLnN0YXJ0VmFsdWUgPSAxMDA7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdFZlbG9jaXR5KGVsZW1lbnQsIFwicmV2ZXJzZVwiLCB7bG9vcDogdHJ1ZSwgZGVsYXk6IG9wdHMuZGVsYXl9KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qKioqKioqKioqKioqKipcclxuXHRcdFx0XHQgRGVxdWV1ZWluZ1xyXG5cdFx0XHRcdCAqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0XHRcdC8qIEZpcmUgdGhlIG5leHQgY2FsbCBpbiB0aGUgcXVldWUgc28gbG9uZyBhcyB0aGlzIGNhbGwncyBxdWV1ZSB3YXNuJ3Qgc2V0IHRvIGZhbHNlICh0byB0cmlnZ2VyIGEgcGFyYWxsZWwgYW5pbWF0aW9uKSxcclxuXHRcdFx0XHQgd2hpY2ggd291bGQgaGF2ZSBhbHJlYWR5IGNhdXNlZCB0aGUgbmV4dCBjYWxsIHRvIGZpcmUuIE5vdGU6IEV2ZW4gaWYgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uIHF1ZXVlIGhhcyBiZWVuIHJlYWNoZWQsXHJcblx0XHRcdFx0ICQuZGVxdWV1ZSgpIG11c3Qgc3RpbGwgYmUgY2FsbGVkIGluIG9yZGVyIHRvIGNvbXBsZXRlbHkgY2xlYXIgalF1ZXJ5J3MgYW5pbWF0aW9uIHF1ZXVlLiAqL1xyXG5cdFx0XHRcdGlmIChvcHRzLnF1ZXVlICE9PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0JC5kZXF1ZXVlKGVsZW1lbnQsIG9wdHMucXVldWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cdFx0XHQgQ2FsbHMgQXJyYXkgQ2xlYW51cFxyXG5cdFx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdFx0LyogU2luY2UgdGhpcyBjYWxsIGlzIGNvbXBsZXRlLCBzZXQgaXQgdG8gZmFsc2Ugc28gdGhhdCB0aGUgckFGIHRpY2sgc2tpcHMgaXQuIFRoaXMgYXJyYXkgaXMgbGF0ZXIgY29tcGFjdGVkIHZpYSBjb21wYWN0U3BhcnNlQXJyYXkoKS5cclxuXHRcdFx0IChGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgdGhlIGNhbGwgaXMgc2V0IHRvIGZhbHNlIGluc3RlYWQgb2YgYmVpbmcgZGVsZXRlZCBmcm9tIHRoZSBhcnJheTogaHR0cDovL3d3dy5odG1sNXJvY2tzLmNvbS9lbi90dXRvcmlhbHMvc3BlZWQvdjgvKSAqL1xyXG5cdFx0XHRWZWxvY2l0eS5TdGF0ZS5jYWxsc1tjYWxsSW5kZXhdID0gZmFsc2U7XHJcblxyXG5cdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGNhbGxzIGFycmF5IHRvIGRldGVybWluZSBpZiB0aGlzIHdhcyB0aGUgZmluYWwgaW4tcHJvZ3Jlc3MgYW5pbWF0aW9uLlxyXG5cdFx0XHQgSWYgc28sIHNldCBhIGZsYWcgdG8gZW5kIHRpY2tpbmcgYW5kIGNsZWFyIHRoZSBjYWxscyBhcnJheS4gKi9cclxuXHRcdFx0Zm9yICh2YXIgaiA9IDAsIGNhbGxzTGVuZ3RoID0gVmVsb2NpdHkuU3RhdGUuY2FsbHMubGVuZ3RoOyBqIDwgY2FsbHNMZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdGlmIChWZWxvY2l0eS5TdGF0ZS5jYWxsc1tqXSAhPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdHJlbWFpbmluZ0NhbGxzRXhpc3QgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHJlbWFpbmluZ0NhbGxzRXhpc3QgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0LyogdGljaygpIHdpbGwgZGV0ZWN0IHRoaXMgZmxhZyB1cG9uIGl0cyBuZXh0IGl0ZXJhdGlvbiBhbmQgc3Vic2VxdWVudGx5IHR1cm4gaXRzZWxmIG9mZi4gKi9cclxuXHRcdFx0XHRWZWxvY2l0eS5TdGF0ZS5pc1RpY2tpbmcgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0LyogQ2xlYXIgdGhlIGNhbGxzIGFycmF5IHNvIHRoYXQgaXRzIGxlbmd0aCBpcyByZXNldC4gKi9cclxuXHRcdFx0XHRkZWxldGUgVmVsb2NpdHkuU3RhdGUuY2FsbHM7XHJcblx0XHRcdFx0VmVsb2NpdHkuU3RhdGUuY2FsbHMgPSBbXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qKioqKioqKioqKioqKioqKipcclxuXHRcdCBGcmFtZXdvcmtzXHJcblx0XHQgKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHRcdC8qIEJvdGggalF1ZXJ5IGFuZCBaZXB0byBhbGxvdyB0aGVpciAkLmZuIG9iamVjdCB0byBiZSBleHRlbmRlZCB0byBhbGxvdyB3cmFwcGVkIGVsZW1lbnRzIHRvIGJlIHN1YmplY3RlZCB0byBwbHVnaW4gY2FsbHMuXHJcblx0XHQgSWYgZWl0aGVyIGZyYW1ld29yayBpcyBsb2FkZWQsIHJlZ2lzdGVyIGEgXCJ2ZWxvY2l0eVwiIGV4dGVuc2lvbiBwb2ludGluZyB0byBWZWxvY2l0eSdzIGNvcmUgYW5pbWF0ZSgpIG1ldGhvZC4gIFZlbG9jaXR5XHJcblx0XHQgYWxzbyByZWdpc3RlcnMgaXRzZWxmIG9udG8gYSBnbG9iYWwgY29udGFpbmVyICh3aW5kb3cualF1ZXJ5IHx8IHdpbmRvdy5aZXB0byB8fCB3aW5kb3cpIHNvIHRoYXQgY2VydGFpbiBmZWF0dXJlcyBhcmVcclxuXHRcdCBhY2Nlc3NpYmxlIGJleW9uZCBqdXN0IGEgcGVyLWVsZW1lbnQgc2NvcGUuIFRoaXMgbWFzdGVyIG9iamVjdCBjb250YWlucyBhbiAuYW5pbWF0ZSgpIG1ldGhvZCwgd2hpY2ggaXMgbGF0ZXIgYXNzaWduZWQgdG8gJC5mblxyXG5cdFx0IChpZiBqUXVlcnkgb3IgWmVwdG8gYXJlIHByZXNlbnQpLiBBY2NvcmRpbmdseSwgVmVsb2NpdHkgY2FuIGJvdGggYWN0IG9uIHdyYXBwZWQgRE9NIGVsZW1lbnRzIGFuZCBzdGFuZCBhbG9uZSBmb3IgdGFyZ2V0aW5nIHJhdyBET00gZWxlbWVudHMuICovXHJcblx0XHRnbG9iYWwuVmVsb2NpdHkgPSBWZWxvY2l0eTtcclxuXHJcblx0XHRpZiAoZ2xvYmFsICE9PSB3aW5kb3cpIHtcclxuXHRcdFx0LyogQXNzaWduIHRoZSBlbGVtZW50IGZ1bmN0aW9uIHRvIFZlbG9jaXR5J3MgY29yZSBhbmltYXRlKCkgbWV0aG9kLiAqL1xyXG5cdFx0XHRnbG9iYWwuZm4udmVsb2NpdHkgPSBhbmltYXRlO1xyXG5cdFx0XHQvKiBBc3NpZ24gdGhlIG9iamVjdCBmdW5jdGlvbidzIGRlZmF1bHRzIHRvIFZlbG9jaXR5J3MgZ2xvYmFsIGRlZmF1bHRzIG9iamVjdC4gKi9cclxuXHRcdFx0Z2xvYmFsLmZuLnZlbG9jaXR5LmRlZmF1bHRzID0gVmVsb2NpdHkuZGVmYXVsdHM7XHJcblx0XHR9XHJcblxyXG5cdFx0LyoqKioqKioqKioqKioqKioqKioqKioqXHJcblx0XHQgUGFja2FnZWQgUmVkaXJlY3RzXHJcblx0XHQgKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdFx0Lyogc2xpZGVVcCwgc2xpZGVEb3duICovXHJcblx0XHQkLmVhY2goW1wiRG93blwiLCBcIlVwXCJdLCBmdW5jdGlvbihpLCBkaXJlY3Rpb24pIHtcclxuXHRcdFx0VmVsb2NpdHkuUmVkaXJlY3RzW1wic2xpZGVcIiArIGRpcmVjdGlvbl0gPSBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zLCBlbGVtZW50c0luZGV4LCBlbGVtZW50c1NpemUsIGVsZW1lbnRzLCBwcm9taXNlRGF0YSkge1xyXG5cdFx0XHRcdHZhciBvcHRzID0gJC5leHRlbmQoe30sIG9wdGlvbnMpLFxyXG5cdFx0XHRcdFx0XHRiZWdpbiA9IG9wdHMuYmVnaW4sXHJcblx0XHRcdFx0XHRcdGNvbXBsZXRlID0gb3B0cy5jb21wbGV0ZSxcclxuXHRcdFx0XHRcdFx0aW5saW5lVmFsdWVzID0ge30sXHJcblx0XHRcdFx0XHRcdGNvbXB1dGVkVmFsdWVzID0ge2hlaWdodDogXCJcIiwgbWFyZ2luVG9wOiBcIlwiLCBtYXJnaW5Cb3R0b206IFwiXCIsIHBhZGRpbmdUb3A6IFwiXCIsIHBhZGRpbmdCb3R0b206IFwiXCJ9O1xyXG5cclxuXHRcdFx0XHRpZiAob3B0cy5kaXNwbGF5ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdC8qIFNob3cgdGhlIGVsZW1lbnQgYmVmb3JlIHNsaWRlRG93biBiZWdpbnMgYW5kIGhpZGUgdGhlIGVsZW1lbnQgYWZ0ZXIgc2xpZGVVcCBjb21wbGV0ZXMuICovXHJcblx0XHRcdFx0XHQvKiBOb3RlOiBJbmxpbmUgZWxlbWVudHMgY2Fubm90IGhhdmUgZGltZW5zaW9ucyBhbmltYXRlZCwgc28gdGhleSdyZSByZXZlcnRlZCB0byBpbmxpbmUtYmxvY2suICovXHJcblx0XHRcdFx0XHRvcHRzLmRpc3BsYXkgPSAoZGlyZWN0aW9uID09PSBcIkRvd25cIiA/IChWZWxvY2l0eS5DU1MuVmFsdWVzLmdldERpc3BsYXlUeXBlKGVsZW1lbnQpID09PSBcImlubGluZVwiID8gXCJpbmxpbmUtYmxvY2tcIiA6IFwiYmxvY2tcIikgOiBcIm5vbmVcIik7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRvcHRzLmJlZ2luID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHQvKiBJZiB0aGUgdXNlciBwYXNzZWQgaW4gYSBiZWdpbiBjYWxsYmFjaywgZmlyZSBpdCBub3cuICovXHJcblx0XHRcdFx0XHRpZiAoZWxlbWVudHNJbmRleCA9PT0gMCAmJiBiZWdpbikge1xyXG5cdFx0XHRcdFx0XHRiZWdpbi5jYWxsKGVsZW1lbnRzLCBlbGVtZW50cyk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogQ2FjaGUgdGhlIGVsZW1lbnRzJyBvcmlnaW5hbCB2ZXJ0aWNhbCBkaW1lbnNpb25hbCBwcm9wZXJ0eSB2YWx1ZXMgc28gdGhhdCB3ZSBjYW4gYW5pbWF0ZSBiYWNrIHRvIHRoZW0uICovXHJcblx0XHRcdFx0XHRmb3IgKHZhciBwcm9wZXJ0eSBpbiBjb21wdXRlZFZhbHVlcykge1xyXG5cdFx0XHRcdFx0XHRpZiAoIWNvbXB1dGVkVmFsdWVzLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlubGluZVZhbHVlc1twcm9wZXJ0eV0gPSBlbGVtZW50LnN0eWxlW3Byb3BlcnR5XTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIEZvciBzbGlkZURvd24sIHVzZSBmb3JjZWZlZWRpbmcgdG8gYW5pbWF0ZSBhbGwgdmVydGljYWwgcHJvcGVydGllcyBmcm9tIDAuIEZvciBzbGlkZVVwLFxyXG5cdFx0XHRcdFx0XHQgdXNlIGZvcmNlZmVlZGluZyB0byBzdGFydCBmcm9tIGNvbXB1dGVkIHZhbHVlcyBhbmQgYW5pbWF0ZSBkb3duIHRvIDAuICovXHJcblx0XHRcdFx0XHRcdHZhciBwcm9wZXJ0eVZhbHVlID0gQ1NTLmdldFByb3BlcnR5VmFsdWUoZWxlbWVudCwgcHJvcGVydHkpO1xyXG5cdFx0XHRcdFx0XHRjb21wdXRlZFZhbHVlc1twcm9wZXJ0eV0gPSAoZGlyZWN0aW9uID09PSBcIkRvd25cIikgPyBbcHJvcGVydHlWYWx1ZSwgMF0gOiBbMCwgcHJvcGVydHlWYWx1ZV07XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogRm9yY2UgdmVydGljYWwgb3ZlcmZsb3cgY29udGVudCB0byBjbGlwIHNvIHRoYXQgc2xpZGluZyB3b3JrcyBhcyBleHBlY3RlZC4gKi9cclxuXHRcdFx0XHRcdGlubGluZVZhbHVlcy5vdmVyZmxvdyA9IGVsZW1lbnQuc3R5bGUub3ZlcmZsb3c7XHJcblx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRvcHRzLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHQvKiBSZXNldCBlbGVtZW50IHRvIGl0cyBwcmUtc2xpZGUgaW5saW5lIHZhbHVlcyBvbmNlIGl0cyBzbGlkZSBhbmltYXRpb24gaXMgY29tcGxldGUuICovXHJcblx0XHRcdFx0XHRmb3IgKHZhciBwcm9wZXJ0eSBpbiBpbmxpbmVWYWx1ZXMpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGlubGluZVZhbHVlcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGlubGluZVZhbHVlc1twcm9wZXJ0eV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBJZiB0aGUgdXNlciBwYXNzZWQgaW4gYSBjb21wbGV0ZSBjYWxsYmFjaywgZmlyZSBpdCBub3cuICovXHJcblx0XHRcdFx0XHRpZiAoZWxlbWVudHNJbmRleCA9PT0gZWxlbWVudHNTaXplIC0gMSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoY29tcGxldGUpIHtcclxuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZS5jYWxsKGVsZW1lbnRzLCBlbGVtZW50cyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKHByb21pc2VEYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0cHJvbWlzZURhdGEucmVzb2x2ZXIoZWxlbWVudHMpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0VmVsb2NpdHkoZWxlbWVudCwgY29tcHV0ZWRWYWx1ZXMsIG9wdHMpO1xyXG5cdFx0XHR9O1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0LyogZmFkZUluLCBmYWRlT3V0ICovXHJcblx0XHQkLmVhY2goW1wiSW5cIiwgXCJPdXRcIl0sIGZ1bmN0aW9uKGksIGRpcmVjdGlvbikge1xyXG5cdFx0XHRWZWxvY2l0eS5SZWRpcmVjdHNbXCJmYWRlXCIgKyBkaXJlY3Rpb25dID0gZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucywgZWxlbWVudHNJbmRleCwgZWxlbWVudHNTaXplLCBlbGVtZW50cywgcHJvbWlzZURhdGEpIHtcclxuXHRcdFx0XHR2YXIgb3B0cyA9ICQuZXh0ZW5kKHt9LCBvcHRpb25zKSxcclxuXHRcdFx0XHRcdFx0Y29tcGxldGUgPSBvcHRzLmNvbXBsZXRlLFxyXG5cdFx0XHRcdFx0XHRwcm9wZXJ0aWVzTWFwID0ge29wYWNpdHk6IChkaXJlY3Rpb24gPT09IFwiSW5cIikgPyAxIDogMH07XHJcblxyXG5cdFx0XHRcdC8qIFNpbmNlIHJlZGlyZWN0cyBhcmUgdHJpZ2dlcmVkIGluZGl2aWR1YWxseSBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBhbmltYXRlZCBzZXQsIGF2b2lkIHJlcGVhdGVkbHkgdHJpZ2dlcmluZ1xyXG5cdFx0XHRcdCBjYWxsYmFja3MgYnkgZmlyaW5nIHRoZW0gb25seSB3aGVuIHRoZSBmaW5hbCBlbGVtZW50IGhhcyBiZWVuIHJlYWNoZWQuICovXHJcblx0XHRcdFx0aWYgKGVsZW1lbnRzSW5kZXggIT09IDApIHtcclxuXHRcdFx0XHRcdG9wdHMuYmVnaW4gPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoZWxlbWVudHNJbmRleCAhPT0gZWxlbWVudHNTaXplIC0gMSkge1xyXG5cdFx0XHRcdFx0b3B0cy5jb21wbGV0ZSA9IG51bGw7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdG9wdHMuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGNvbXBsZXRlKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUuY2FsbChlbGVtZW50cywgZWxlbWVudHMpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChwcm9taXNlRGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdHByb21pc2VEYXRhLnJlc29sdmVyKGVsZW1lbnRzKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8qIElmIGEgZGlzcGxheSB3YXMgcGFzc2VkIGluLCB1c2UgaXQuIE90aGVyd2lzZSwgZGVmYXVsdCB0byBcIm5vbmVcIiBmb3IgZmFkZU91dCBvciB0aGUgZWxlbWVudC1zcGVjaWZpYyBkZWZhdWx0IGZvciBmYWRlSW4uICovXHJcblx0XHRcdFx0LyogTm90ZTogV2UgYWxsb3cgdXNlcnMgdG8gcGFzcyBpbiBcIm51bGxcIiB0byBza2lwIGRpc3BsYXkgc2V0dGluZyBhbHRvZ2V0aGVyLiAqL1xyXG5cdFx0XHRcdGlmIChvcHRzLmRpc3BsYXkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0b3B0cy5kaXNwbGF5ID0gKGRpcmVjdGlvbiA9PT0gXCJJblwiID8gXCJhdXRvXCIgOiBcIm5vbmVcIik7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRWZWxvY2l0eSh0aGlzLCBwcm9wZXJ0aWVzTWFwLCBvcHRzKTtcclxuXHRcdFx0fTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiBWZWxvY2l0eTtcclxuXHR9KCh3aW5kb3cualF1ZXJ5IHx8IHdpbmRvdy5aZXB0byB8fCB3aW5kb3cpLCB3aW5kb3csICh3aW5kb3cgPyB3aW5kb3cuZG9jdW1lbnQgOiB1bmRlZmluZWQpKTtcclxufSkpO1xyXG5cclxuLyoqKioqKioqKioqKioqKioqKlxyXG4gS25vd24gSXNzdWVzXHJcbiAqKioqKioqKioqKioqKioqKiovXHJcblxyXG4vKiBUaGUgQ1NTIHNwZWMgbWFuZGF0ZXMgdGhhdCB0aGUgdHJhbnNsYXRlWC9ZL1ogdHJhbnNmb3JtcyBhcmUgJS1yZWxhdGl2ZSB0byB0aGUgZWxlbWVudCBpdHNlbGYgLS0gbm90IGl0cyBwYXJlbnQuXHJcbiBWZWxvY2l0eSwgaG93ZXZlciwgZG9lc24ndCBtYWtlIHRoaXMgZGlzdGluY3Rpb24uIFRodXMsIGNvbnZlcnRpbmcgdG8gb3IgZnJvbSB0aGUgJSB1bml0IHdpdGggdGhlc2Ugc3VicHJvcGVydGllc1xyXG4gd2lsbCBwcm9kdWNlIGFuIGluYWNjdXJhdGUgY29udmVyc2lvbiB2YWx1ZS4gVGhlIHNhbWUgaXNzdWUgZXhpc3RzIHdpdGggdGhlIGN4L2N5IGF0dHJpYnV0ZXMgb2YgU1ZHIGNpcmNsZXMgYW5kIGVsbGlwc2VzLiAqL1xyXG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKi9cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZVNvdXJjZXMoaW1nLCBzb3VyY2VzKSB7XG4gIGlmIChzb3VyY2VzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBHZXQgc291cmNlIHNpYmxpbmdzIG9mIHRoZSBpbWcgdGFnXG4gIGNvbnN0IGltZ1NpYmxpbmdXZWJwID0gJChpbWcpLnNpYmxpbmdzKCdzb3VyY2VbdHlwZT1cImltYWdlL3dlYnBcIl0nKTtcbiAgY29uc3QgaW1nU2libGluZ0F2aWYgPSAkKGltZykuc2libGluZ3MoJ3NvdXJjZVt0eXBlPVwiaW1hZ2UvYXZpZlwiXScpO1xuXG4gIC8vIFVwZGF0ZSB0aGVtIGlmIHRoZXkgZXhpc3QgYW5kIHdlIGhhdmUgYSBzb3VyY2UgZm9yIHRoZW1cbiAgaWYgKHNvdXJjZXMud2VicCAhPT0gdW5kZWZpbmVkICYmIGltZ1NpYmxpbmdXZWJwLmxlbmd0aCkge1xuICAgIGltZ1NpYmxpbmdXZWJwLmF0dHIoJ3NyY3NldCcsIHNvdXJjZXMud2VicCk7XG4gIH1cbiAgaWYgKHNvdXJjZXMuYXZpZiAhPT0gdW5kZWZpbmVkICYmIGltZ1NpYmxpbmdBdmlmLmxlbmd0aCkge1xuICAgIGltZ1NpYmxpbmdBdmlmLmF0dHIoJ3NyY3NldCcsIHNvdXJjZXMuYXZpZik7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvZHVjdE1pbml0YXR1cmUge1xuICBpbml0KCkge1xuICAgICQoJy5qcy1wcm9kdWN0LW1pbmlhdHVyZScpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XG4gICAgICAvLyBMaW1pdCBudW1iZXIgb2Ygc2hvd24gY29sb3JzXG4gICAgICBpZiAoJChlbGVtZW50KS5maW5kKCcuY29sb3InKS5sZW5ndGggPiA1KSB7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG5cbiAgICAgICAgJChlbGVtZW50KVxuICAgICAgICAgIC5maW5kKCcuY29sb3InKVxuICAgICAgICAgIC5lYWNoKChjb2xvckluZGV4LCBjb2xvckVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChjb2xvckluZGV4ID4gNCkge1xuICAgICAgICAgICAgICAkKGNvbG9yRWxlbWVudCkuaGlkZSgpO1xuICAgICAgICAgICAgICBjb3VudCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICQoZWxlbWVudCkuZmluZCgnLmpzLWNvdW50JykuYXBwZW5kKGArJHtjb3VudH1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgJCBmcm9tIFwianF1ZXJ5XCI7XG5pbXBvcnQgcHJlc3Rhc2hvcCBmcm9tIFwicHJlc3Rhc2hvcFwiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5pbXBvcnQgXCJ2ZWxvY2l0eS1hbmltYXRlXCI7XG5pbXBvcnQgdXBkYXRlU291cmNlcyBmcm9tIFwiLi9jb21wb25lbnRzL3VwZGF0ZS1zb3VyY2VzXCI7XG5pbXBvcnQgUHJvZHVjdE1pbml0YXR1cmUgZnJvbSBcIi4vY29tcG9uZW50cy9wcm9kdWN0LW1pbmlhdHVyZVwiO1xuXG5cblxuJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICBjb25zdCBtb3ZlID0gKGRpcmVjdGlvbikgPT4ge1xuICAgIGNvbnN0IFRIVU1CX01BUkdJTiA9IDIwO1xuICAgIGNvbnN0ICR0aHVtYm5haWxzID0gJChcIi5qcy1xdi1wcm9kdWN0LWltYWdlc1wiKTtcbiAgICBjb25zdCB0aHVtYkhlaWdodCA9XG4gICAgICAkKFwiLmpzLXF2LXByb2R1Y3QtaW1hZ2VzIGxpIGltZ1wiKS5oZWlnaHQoKSArIFRIVU1CX01BUkdJTjtcbiAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSAkdGh1bWJuYWlscy5wb3NpdGlvbigpLnRvcDtcbiAgICAkdGh1bWJuYWlscy52ZWxvY2l0eShcbiAgICAgIHtcbiAgICAgICAgdHJhbnNsYXRlWTpcbiAgICAgICAgICBkaXJlY3Rpb24gPT09IFwidXBcIlxuICAgICAgICAgICAgPyBjdXJyZW50UG9zaXRpb24gKyB0aHVtYkhlaWdodFxuICAgICAgICAgICAgOiBjdXJyZW50UG9zaXRpb24gLSB0aHVtYkhlaWdodCxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICgkdGh1bWJuYWlscy5wb3NpdGlvbigpLnRvcCA+PSAwKSB7XG4gICAgICAgICAgJChcIi5hcnJvdy11cFwiKS5jc3MoXCJvcGFjaXR5XCIsIFwiLjJcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgJHRodW1ibmFpbHMucG9zaXRpb24oKS50b3AgKyAkdGh1bWJuYWlscy5oZWlnaHQoKSA8PVxuICAgICAgICAgICQoXCIuanMtcXYtbWFza1wiKS5oZWlnaHQoKVxuICAgICAgICApIHtcbiAgICAgICAgICAkKFwiLmFycm93LWRvd25cIikuY3NzKFwib3BhY2l0eVwiLCBcIi4yXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgcHJvZHVjdENvbmZpZyA9IChxdikgPT4ge1xuICAgIGNvbnN0IE1BWF9USFVNQlMgPSA0O1xuICAgIGNvbnN0ICRhcnJvd3MgPSAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5hcnJvd3MpO1xuICAgIGNvbnN0ICR0aHVtYm5haWxzID0gcXYuZmluZChcIi5qcy1xdi1wcm9kdWN0LWltYWdlc1wiKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC50aHVtYikub24oXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFN3YXAgYWN0aXZlIGNsYXNzZXMgb24gdGh1bWJuYWlsXG4gICAgICBpZiAoJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGh1bWIpLmhhc0NsYXNzKFwic2VsZWN0ZWRcIikpIHtcbiAgICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QudGh1bWIpLnJlbW92ZUNsYXNzKFwic2VsZWN0ZWRcIik7XG4gICAgICB9XG4gICAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKFwic2VsZWN0ZWRcIik7XG5cbiAgICAgIC8vIEdldCBkYXRhIGZyb20gdGh1bWJuYWlsIGFuZCB1cGRhdGUgY292ZXIgc3JjLCBhbHQgYW5kIHRpdGxlXG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5jb3ZlcikuYXR0cihcbiAgICAgICAgXCJzcmNcIixcbiAgICAgICAgJChldmVudC50YXJnZXQpLmRhdGEoXCJpbWFnZS1sYXJnZS1zcmNcIiksXG4gICAgICApO1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QuY292ZXIpLmF0dHIoXG4gICAgICAgIFwiYWx0XCIsXG4gICAgICAgICQoZXZlbnQudGFyZ2V0KS5hdHRyKFwiYWx0XCIpLFxuICAgICAgKTtcbiAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmNvdmVyKS5hdHRyKFxuICAgICAgICBcInRpdGxlXCIsXG4gICAgICAgICQoZXZlbnQudGFyZ2V0KS5hdHRyKFwidGl0bGVcIiksXG4gICAgICApO1xuXG4gICAgICAvLyBHZXQgZGF0YSBmcm9tIHRodW1ibmFpbCBhbmQgdXBkYXRlIGNvdmVyIHNvdXJjZXNcbiAgICAgIHVwZGF0ZVNvdXJjZXMoXG4gICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmNvdmVyKSxcbiAgICAgICAgJChldmVudC50YXJnZXQpLmRhdGEoXCJpbWFnZS1sYXJnZS1zb3VyY2VzXCIpLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICBpZiAoJHRodW1ibmFpbHMuZmluZChcImxpXCIpLmxlbmd0aCA8PSBNQVhfVEhVTUJTKSB7XG4gICAgICAkYXJyb3dzLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGFycm93cy5vbihcImNsaWNrXCIsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgJChldmVudC50YXJnZXQpLmhhc0NsYXNzKFwiYXJyb3ctdXBcIikgJiZcbiAgICAgICAgICAkKFwiLmpzLXF2LXByb2R1Y3QtaW1hZ2VzXCIpLnBvc2l0aW9uKCkudG9wIDwgMFxuICAgICAgICApIHtcbiAgICAgICAgICBtb3ZlKFwidXBcIik7XG4gICAgICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmFycm93RG93bikuY3NzKFwib3BhY2l0eVwiLCBcIjFcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgJChldmVudC50YXJnZXQpLmhhc0NsYXNzKFwiYXJyb3ctZG93blwiKSAmJlxuICAgICAgICAgICR0aHVtYm5haWxzLnBvc2l0aW9uKCkudG9wICsgJHRodW1ibmFpbHMuaGVpZ2h0KCkgPlxuICAgICAgICAgICAgJChcIi5qcy1xdi1tYXNrXCIpLmhlaWdodCgpXG4gICAgICAgICkge1xuICAgICAgICAgIG1vdmUoXCJkb3duXCIpO1xuICAgICAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5hcnJvd1VwKS5jc3MoXCJvcGFjaXR5XCIsIFwiMVwiKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHF2LmZpbmQocHJlc3Rhc2hvcC5zZWxlY3RvcnMucXVhbnRpdHlXYW50ZWQpLlRvdWNoU3Bpbih7XG4gICAgICB2ZXJ0aWNhbGJ1dHRvbnM6IHRydWUsXG4gICAgICBtaW46IDEsXG4gICAgICBtYXg6IDEwMDAwMDAsXG4gICAgfSk7XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMudG91Y2hzcGluKS5vZmYoXCJ0b3VjaHN0YXJ0LnRvdWNoc3BpblwiKTtcbiAgfTtcblxuICBwcmVzdGFzaG9wLm9uKFwiY2xpY2tRdWlja1ZpZXdcIiwgKGVsbSkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb246IFwicXVpY2t2aWV3XCIsXG4gICAgICBpZF9wcm9kdWN0OiBlbG0uZGF0YXNldC5pZFByb2R1Y3QsXG4gICAgICBpZF9wcm9kdWN0X2F0dHJpYnV0ZTogZWxtLmRhdGFzZXQuaWRQcm9kdWN0QXR0cmlidXRlLFxuICAgIH07XG4gICAgJC5wb3N0KHByZXN0YXNob3AudXJscy5wYWdlcy5wcm9kdWN0LCBkYXRhLCBudWxsLCBcImpzb25cIilcbiAgICAgIC50aGVuKChyZXNwKSA9PiB7XG4gICAgICAgICQoXCJib2R5XCIpLmFwcGVuZChyZXNwLnF1aWNrdmlld19odG1sKTtcbiAgICAgICAgY29uc3QgcHJvZHVjdE1vZGFsID0gJChcbiAgICAgICAgICBgI3F1aWNrdmlldy1tb2RhbC0ke3Jlc3AucHJvZHVjdC5pZH0tJHtyZXNwLnByb2R1Y3QuaWRfcHJvZHVjdF9hdHRyaWJ1dGV9YCxcbiAgICAgICAgKTtcbiAgICAgICAgcHJvZHVjdE1vZGFsLm1vZGFsKFwic2hvd1wiKTtcbiAgICAgICAgcHJvZHVjdENvbmZpZyhwcm9kdWN0TW9kYWwpO1xuICAgICAgICBwcm9kdWN0TW9kYWwub24oXCJoaWRkZW4uYnMubW9kYWxcIiwgKCkgPT4ge1xuICAgICAgICAgIHByb2R1Y3RNb2RhbC5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmZhaWwoKHJlc3ApID0+IHtcbiAgICAgICAgcHJlc3Rhc2hvcC5lbWl0KFwiaGFuZGxlRXJyb3JcIiwge1xuICAgICAgICAgIGV2ZW50VHlwZTogXCJjbGlja1F1aWNrVmlld1wiLFxuICAgICAgICAgIHJlc3AsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gICQoXCJib2R5XCIpLm9uKFxuICAgIFwiY2xpY2tcIixcbiAgICBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3Rpbmcuc2VhcmNoRmlsdGVyVG9nZ2xlcixcbiAgICAoKSA9PiB7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzV3JhcHBlcikucmVtb3ZlQ2xhc3MoXG4gICAgICAgIFwiaGlkZGVuLXNtLWRvd25cIixcbiAgICAgICk7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY29udGVudFdyYXBwZXIpLmFkZENsYXNzKFwiaGlkZGVuLXNtLWRvd25cIik7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuZm9vdGVyKS5hZGRDbGFzcyhcImhpZGRlbi1zbS1kb3duXCIpO1xuICAgIH0sXG4gICk7XG4gICQoXG4gICAgYCR7cHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5saXN0aW5nLnNlYXJjaEZpbHRlckNvbnRyb2xzfSAke3ByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2xlYXJ9YCxcbiAgKS5vbihcImNsaWNrXCIsICgpID0+IHtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5zZWFyY2hGaWx0ZXJzV3JhcHBlcikuYWRkQ2xhc3MoXG4gICAgICBcImhpZGRlbi1zbS1kb3duXCIsXG4gICAgKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY29udGVudFdyYXBwZXIpLnJlbW92ZUNsYXNzKFwiaGlkZGVuLXNtLWRvd25cIik7XG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmZvb3RlcikucmVtb3ZlQ2xhc3MoXCJoaWRkZW4tc20tZG93blwiKTtcbiAgfSk7XG4gICQoYCR7cHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5saXN0aW5nLnNlYXJjaEZpbHRlckNvbnRyb2xzfSAub2tgKS5vbihcbiAgICBcImNsaWNrXCIsXG4gICAgKCkgPT4ge1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3Rpbmcuc2VhcmNoRmlsdGVyc1dyYXBwZXIpLmFkZENsYXNzKFxuICAgICAgICBcImhpZGRlbi1zbS1kb3duXCIsXG4gICAgICApO1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNvbnRlbnRXcmFwcGVyKS5yZW1vdmVDbGFzcyhcImhpZGRlbi1zbS1kb3duXCIpO1xuICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmZvb3RlcikucmVtb3ZlQ2xhc3MoXCJoaWRkZW4tc20tZG93blwiKTtcbiAgICB9LFxuICApO1xuXG4gIGNvbnN0IHBhcnNlU2VhcmNoVXJsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldC5kYXRhc2V0LnNlYXJjaFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZlbnQudGFyZ2V0LmRhdGFzZXQuc2VhcmNoVXJsO1xuICAgIH1cblxuICAgIGlmICgkKGV2ZW50LnRhcmdldCkucGFyZW50KClbMF0uZGF0YXNldC5zZWFyY2hVcmwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuIG5vdCBwYXJzZSBzZWFyY2ggVVJMXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAkKGV2ZW50LnRhcmdldCkucGFyZW50KClbMF0uZGF0YXNldC5zZWFyY2hVcmw7XG4gIH07XG5cbiAgZnVuY3Rpb24gdXBkYXRlUHJvZHVjdExpc3RET00oZGF0YSkge1xuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5saXN0aW5nLnNlYXJjaEZpbHRlcnMpLnJlcGxhY2VXaXRoKFxuICAgICAgZGF0YS5yZW5kZXJlZF9mYWNldHMsXG4gICAgKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5hY3RpdmVTZWFyY2hGaWx0ZXJzKS5yZXBsYWNlV2l0aChcbiAgICAgIGRhdGEucmVuZGVyZWRfYWN0aXZlX2ZpbHRlcnMsXG4gICAgKTtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5saXN0VG9wKS5yZXBsYWNlV2l0aChcbiAgICAgIGRhdGEucmVuZGVyZWRfcHJvZHVjdHNfdG9wLFxuICAgICk7XG5cbiAgICBjb25zdCByZW5kZXJlZFByb2R1Y3RzID0gJChkYXRhLnJlbmRlcmVkX3Byb2R1Y3RzKTtcbiAgICBjb25zdCBwcm9kdWN0U2VsZWN0b3JzID0gJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3RpbmcucHJvZHVjdCk7XG5cbiAgICBpZiAocHJvZHVjdFNlbGVjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBwcm9kdWN0U2VsZWN0b3JzXG4gICAgICAgIC5yZW1vdmVDbGFzcygpXG4gICAgICAgIC5hZGRDbGFzcyhwcm9kdWN0U2VsZWN0b3JzLmZpcnN0KCkuYXR0cihcImNsYXNzXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZHVjdFNlbGVjdG9yc1xuICAgICAgICAucmVtb3ZlQ2xhc3MoKVxuICAgICAgICAuYWRkQ2xhc3MocmVuZGVyZWRQcm9kdWN0cy5maXJzdCgpLmF0dHIoXCJjbGFzc1wiKSk7XG4gICAgfVxuXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3RpbmcubGlzdCkucmVwbGFjZVdpdGgocmVuZGVyZWRQcm9kdWN0cyk7XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5saXN0Qm90dG9tKS5yZXBsYWNlV2l0aChcbiAgICAgIGRhdGEucmVuZGVyZWRfcHJvZHVjdHNfYm90dG9tLFxuICAgICk7XG4gICAgaWYgKGRhdGEucmVuZGVyZWRfcHJvZHVjdHNfaGVhZGVyKSB7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubGlzdGluZy5saXN0SGVhZGVyKS5yZXBsYWNlV2l0aChcbiAgICAgICAgZGF0YS5yZW5kZXJlZF9wcm9kdWN0c19oZWFkZXIsXG4gICAgICApO1xuICAgIH1cblxuICAgICQoJyNzaG93LWZpbHRlcnMnKS5vbignY2xpY2sub2ZmY2FudmFzJywgKCkgPT4ge1xuICAgICAgJCgnI3Byb2R1Y3QtbGlzdC10b3AtZmlsdGVycycpLnNob3coKTtcbiAgICB9KTtcbiAgXG4gICAgJCgnI2hpZGUtZmlsdGVycycpLm9uKCdjbGljay5vZmZjYW52YXMnLCAoKSA9PiB7XG4gICAgICAkKCcjcHJvZHVjdC1saXN0LXRvcC1maWx0ZXJzJykuaGlkZSgpO1xuICAgICAgJCgnI292ZXJsYXknKS5oaWRlKCk7IFxuICAgIH0pO1xuXG4gICAgJCgnI3Nob3ctZmlsdGVycycpLmNsaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgJCgnI292ZXJsYXknKS5zaG93KCk7XG4gICAgfSk7XG5cbiAgICAkKCcjcHJvZHVjdC1saXN0LXRvcC1maWx0ZXJzJykuc2hvdygpO1xuICBcbiAgICBmdW5jdGlvbiBjaGVja0FuZFNob3dPdmVybGF5KCkge1xuICAgICAgaWYgKCQoJyNwcm9kdWN0LWxpc3QtdG9wLWZpbHRlcnMnKS5pcygnOnZpc2libGUnKSkgeyBcbiAgICAgICAgICAkKCcjb3ZlcmxheScpLnNob3coKTtcbiAgICAgIH0gZWxzZSB7IFxuICAgICAgICAgICQoJyNvdmVybGF5JykuaGlkZSgpO1xuICAgICAgfVxuICB9XG5cbiAgJCgnI3Byb2R1Y3QtbGlzdC10b3AtZmlsdGVycycpLnNob3coZnVuY3Rpb24oKSB7XG4gICAgY2hlY2tBbmRTaG93T3ZlcmxheSgpO1xuICAgIH0pO1xuXG4gICAgJCgnI292ZXJsYXknKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgICQoJyNwcm9kdWN0LWxpc3QtdG9wLWZpbHRlcnMnKS5oaWRlKCk7XG4gICAgICAkKCcjb3ZlcmxheScpLmhpZGUoKTsgIFxuICAgICBcbiAgfSk7XG5cbiAgICAkKCcudGgtYWNjb3JkaW9uJykudGhhY2NvcmRpb24oKTtcblxuICAgIGNvbnN0IHByb2R1Y3RNaW5pdGF0dXJlID0gbmV3IFByb2R1Y3RNaW5pdGF0dXJlKCk7XG4gICAgcHJvZHVjdE1pbml0YXR1cmUuaW5pdCgpO1xuICB9XG5cbiAgXG5cbiAgJChcImJvZHlcIikub24oXG4gICAgXCJjaGFuZ2VcIixcbiAgICBgJHtwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3Rpbmcuc2VhcmNoRmlsdGVyc30gaW5wdXRbZGF0YS1zZWFyY2gtdXJsXWAsXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBwcmVzdGFzaG9wLmVtaXQoXCJ1cGRhdGVGYWNldHNcIiwgcGFyc2VTZWFyY2hVcmwoZXZlbnQpKTtcbiAgICB9LFxuICApO1xuXG4gICQoXCJib2R5XCIpLm9uKFxuICAgIFwiY2xpY2tcIixcbiAgICBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3Rpbmcuc2VhcmNoRmlsdGVyc0NsZWFyQWxsLFxuICAgIChldmVudCkgPT4ge1xuICAgICAgcHJlc3Rhc2hvcC5lbWl0KFwidXBkYXRlRmFjZXRzXCIsIHBhcnNlU2VhcmNoVXJsKGV2ZW50KSk7XG4gICAgfSxcbiAgKTtcblxuICAkKFwiYm9keVwiKS5vbihcbiAgICBcImNsaWNrXCIsXG4gICAgcHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5saXN0aW5nLnNlYXJjaExpbmssXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcHJlc3Rhc2hvcC5lbWl0KFwidXBkYXRlRmFjZXRzXCIsICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiYVwiKS5nZXQoMCkuaHJlZik7XG4gICAgfSxcbiAgKTtcblxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIChlKSA9PiB7XG4gICAgaWYgKGUuc3RhdGUgJiYgZS5zdGF0ZS5jdXJyZW50X3VybCkge1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBlLnN0YXRlLmN1cnJlbnRfdXJsO1xuICAgIH1cbiAgfSk7XG5cbiAgJChcImJvZHlcIikub24oXG4gICAgXCJjaGFuZ2VcIixcbiAgICBgJHtwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmxpc3Rpbmcuc2VhcmNoRmlsdGVyc30gc2VsZWN0YCxcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGZvcm0gPSAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChcImZvcm1cIik7XG4gICAgICBwcmVzdGFzaG9wLmVtaXQoXCJ1cGRhdGVGYWNldHNcIiwgYD8ke2Zvcm0uc2VyaWFsaXplKCl9YCk7XG4gICAgfSxcbiAgKTtcblxuICBwcmVzdGFzaG9wLm9uKFwidXBkYXRlUHJvZHVjdExpc3RcIiwgKGRhdGEpID0+IHtcbiAgICB1cGRhdGVQcm9kdWN0TGlzdERPTShkYXRhKTtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH0pO1xufSk7XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKi9cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbmltcG9ydCAndmVsb2NpdHktYW5pbWF0ZSc7XG4vLyBpbXBvcnQgdXBkYXRlU291cmNlcyBmcm9tICd1cGRhdGUtc291cmNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb2R1Y3RTZWxlY3Qge1xuICBpbml0KCkge1xuICAgIGNvbnN0IE1BWF9USFVNQlMgPSA1O1xuICAgIGNvbnN0ICRhcnJvd3MgPSAkKCcuanMtbW9kYWwtYXJyb3dzJyk7XG4gICAgY29uc3QgJHRodW1ibmFpbHMgPSAkKCcuanMtbW9kYWwtcHJvZHVjdC1pbWFnZXMnKTtcblxuICAgICQoJ2JvZHknKVxuICAgICAgLm9uKCdjbGljaycsICcuanMtbW9kYWwtdGh1bWInLCAoZXZlbnQpID0+IHtcbiAgICAgICAgLy8gU3dhcCBhY3RpdmUgY2xhc3NlcyBvbiB0aHVtYm5haWxcbiAgICAgICAgaWYgKCQoJy5qcy1tb2RhbC10aHVtYicpLmhhc0NsYXNzKCdzZWxlY3RlZCcpKSB7XG4gICAgICAgICAgJCgnLmpzLW1vZGFsLXRodW1iJykucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgJChldmVudC5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcblxuICAgICAgICAvLyBHZXQgZGF0YSBmcm9tIHRodW1ibmFpbCBhbmQgdXBkYXRlIGNvdmVyIHNyYywgYWx0IGFuZCB0aXRsZVxuICAgICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5tb2RhbFByb2R1Y3RDb3ZlcikuYXR0cignc3JjJywgJChldmVudC50YXJnZXQpLmRhdGEoJ2ltYWdlLWxhcmdlLXNyYycpKTtcbiAgICAgICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QubW9kYWxQcm9kdWN0Q292ZXIpLmF0dHIoJ3RpdGxlJywgJChldmVudC50YXJnZXQpLmF0dHIoJ3RpdGxlJykpO1xuICAgICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5tb2RhbFByb2R1Y3RDb3ZlcikuYXR0cignYWx0JywgJChldmVudC50YXJnZXQpLmF0dHIoJ2FsdCcpKTtcblxuICAgICAgICAvLyBHZXQgZGF0YSBmcm9tIHRodW1ibmFpbCBhbmQgdXBkYXRlIGNvdmVyIHNvdXJjZXNcbiAgICAgICAgLy8gdXBkYXRlU291cmNlcyhcbiAgICAgICAgLy8gICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5tb2RhbFByb2R1Y3RDb3ZlciksXG4gICAgICAgIC8vICAgJChldmVudC50YXJnZXQpLmRhdGEoJ2ltYWdlLWxhcmdlLXNvdXJjZXMnKSxcbiAgICAgICAgLy8gKTtcbiAgICAgIH0pXG4gICAgICAub24oJ2NsaWNrJywgJ2FzaWRlI3RodW1ibmFpbHMnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5pZCA9PT0gJ3RodW1ibmFpbHMnKSB7XG4gICAgICAgICAgJCgnI3Byb2R1Y3QtbW9kYWwnKS5tb2RhbCgnaGlkZScpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGlmICgkKCcuanMtbW9kYWwtcHJvZHVjdC1pbWFnZXMgbGknKS5sZW5ndGggPD0gTUFYX1RIVU1CUykge1xuICAgICAgJGFycm93cy5jc3MoJ29wYWNpdHknLCAnLjInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGFycm93cy5vbignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCQoZXZlbnQudGFyZ2V0KS5oYXNDbGFzcygnYXJyb3ctdXAnKSAmJiAkdGh1bWJuYWlscy5wb3NpdGlvbigpLnRvcCA8IDApIHtcbiAgICAgICAgICB0aGlzLm1vdmUoJ3VwJyk7XG4gICAgICAgICAgJCgnLmpzLW1vZGFsLWFycm93LWRvd24nKS5jc3MoJ29wYWNpdHknLCAnMScpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICQoZXZlbnQudGFyZ2V0KS5oYXNDbGFzcygnYXJyb3ctZG93bicpXG4gICAgICAgICAgJiYgJHRodW1ibmFpbHMucG9zaXRpb24oKS50b3AgKyAkdGh1bWJuYWlscy5oZWlnaHQoKSA+ICQoJy5qcy1tb2RhbC1tYXNrJykuaGVpZ2h0KClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5tb3ZlKCdkb3duJyk7XG4gICAgICAgICAgJCgnLmpzLW1vZGFsLWFycm93LXVwJykuY3NzKCdvcGFjaXR5JywgJzEnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbW92ZShkaXJlY3Rpb24pIHtcbiAgICBjb25zdCBUSFVNQl9NQVJHSU4gPSAxMDtcbiAgICBjb25zdCAkdGh1bWJuYWlscyA9ICQoJy5qcy1tb2RhbC1wcm9kdWN0LWltYWdlcycpO1xuICAgIGNvbnN0IHRodW1iSGVpZ2h0ID0gJCgnLmpzLW1vZGFsLXByb2R1Y3QtaW1hZ2VzIGxpIGltZycpLmhlaWdodCgpICsgVEhVTUJfTUFSR0lOO1xuICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9ICR0aHVtYm5haWxzLnBvc2l0aW9uKCkudG9wO1xuICAgICR0aHVtYm5haWxzLnZlbG9jaXR5KFxuICAgICAge1xuICAgICAgICB0cmFuc2xhdGVZOiBkaXJlY3Rpb24gPT09ICd1cCcgPyBjdXJyZW50UG9zaXRpb24gKyB0aHVtYkhlaWdodCA6IGN1cnJlbnRQb3NpdGlvbiAtIHRodW1iSGVpZ2h0LFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKCR0aHVtYm5haWxzLnBvc2l0aW9uKCkudG9wID49IDApIHtcbiAgICAgICAgICAkKCcuanMtbW9kYWwtYXJyb3ctdXAnKS5jc3MoJ29wYWNpdHknLCAnLjInKTtcbiAgICAgICAgfSBlbHNlIGlmICgkdGh1bWJuYWlscy5wb3NpdGlvbigpLnRvcCArICR0aHVtYm5haWxzLmhlaWdodCgpIDw9ICQoJy5qcy1tb2RhbC1tYXNrJykuaGVpZ2h0KCkpIHtcbiAgICAgICAgICAkKCcuanMtbW9kYWwtYXJyb3ctZG93bicpLmNzcygnb3BhY2l0eScsICcuMicpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBwcmVzdGFzaG9wIGZyb20gJ3ByZXN0YXNob3AnO1xuaW1wb3J0IFByb2R1Y3RTZWxlY3QgZnJvbSAnLi9jb21wb25lbnRzL3Byb2R1Y3Qtc2VsZWN0JztcbmltcG9ydCB1cGRhdGVTb3VyY2VzIGZyb20gJy4vY29tcG9uZW50cy91cGRhdGUtc291cmNlcyc7XG5cbiQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcbiAgZnVuY3Rpb24gY292ZXJJbWFnZSgpIHtcbiAgICBjb25zdCBwcm9kdWN0Q292ZXIgPSAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5jb3Zlcik7XG4gICAgY29uc3QgbW9kYWxQcm9kdWN0Q292ZXIgPSAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5tb2RhbFByb2R1Y3RDb3Zlcik7XG4gICAgbGV0IHRodW1iU2VsZWN0ZWQgPSAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5zZWxlY3RlZCk7XG5cbiAgICBjb25zdCBzd2lwZSA9IChzZWxlY3RlZFRodW1iLCB0aHVtYlBhcmVudCkgPT4ge1xuICAgICAgY29uc3QgbmV3U2VsZWN0ZWRUaHVtYiA9IHRodW1iUGFyZW50LmZpbmQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LnRodW1iKTtcblxuICAgICAgLy8gU3dhcCBhY3RpdmUgY2xhc3NlcyBvbiB0aHVtYm5haWxcbiAgICAgIHNlbGVjdGVkVGh1bWIucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICBuZXdTZWxlY3RlZFRodW1iLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuXG4gICAgICAvLyBVcGRhdGUgc291cmNlcyBvZiBib3RoIGNvdmVyIGFuZCBtb2RhbCBjb3ZlclxuICAgICAgbW9kYWxQcm9kdWN0Q292ZXIucHJvcCgnc3JjJywgbmV3U2VsZWN0ZWRUaHVtYi5kYXRhKCdpbWFnZS1sYXJnZS1zcmMnKSk7XG4gICAgICBwcm9kdWN0Q292ZXIucHJvcCgnc3JjJywgbmV3U2VsZWN0ZWRUaHVtYi5kYXRhKCdpbWFnZS1tZWRpdW0tc3JjJykpO1xuICAgICAgJCgnLmVhc3l6b29tICNlYXN5em9vbS1sYXJnZS1pbWctYW5jaG9yJykuYXR0cignaHJlZicsIG5ld1NlbGVjdGVkVGh1bWIuZGF0YSgnaW1hZ2UtbGFyZ2Utc3JjJykpO1xuXG4gICAgICAvLyBHZXQgZGF0YSBmcm9tIHRodW1ibmFpbCBhbmQgdXBkYXRlIGNvdmVyIHNyYywgYWx0IGFuZCB0aXRsZVxuICAgICAgcHJvZHVjdENvdmVyLmF0dHIoJ3RpdGxlJywgbmV3U2VsZWN0ZWRUaHVtYi5hdHRyKCd0aXRsZScpKTtcbiAgICAgIG1vZGFsUHJvZHVjdENvdmVyLmF0dHIoJ3RpdGxlJywgbmV3U2VsZWN0ZWRUaHVtYi5hdHRyKCd0aXRsZScpKTtcbiAgICAgIHByb2R1Y3RDb3Zlci5hdHRyKCdhbHQnLCBuZXdTZWxlY3RlZFRodW1iLmF0dHIoJ2FsdCcpKTtcbiAgICAgIG1vZGFsUHJvZHVjdENvdmVyLmF0dHIoJ2FsdCcsIG5ld1NlbGVjdGVkVGh1bWIuYXR0cignYWx0JykpO1xuXG4gICAgICAvLyBHZXQgZGF0YSBmcm9tIHRodW1ibmFpbCBhbmQgdXBkYXRlIGNvdmVyIHNvdXJjZXNcbiAgICAgIHVwZGF0ZVNvdXJjZXMocHJvZHVjdENvdmVyLCBuZXdTZWxlY3RlZFRodW1iLmRhdGEoJ2ltYWdlLW1lZGl1bS1zb3VyY2VzJykpO1xuICAgICAgdXBkYXRlU291cmNlcyhtb2RhbFByb2R1Y3RDb3ZlciwgbmV3U2VsZWN0ZWRUaHVtYi5kYXRhKCdpbWFnZS1sYXJnZS1zb3VyY2VzJykpO1xuICAgIH07XG5cbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC50aHVtYikub24oJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICB0aHVtYlNlbGVjdGVkID0gJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3Quc2VsZWN0ZWQpO1xuICAgICAgc3dpcGUodGh1bWJTZWxlY3RlZCwgJChldmVudC50YXJnZXQpLmNsb3Nlc3QocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LnRodW1iQ29udGFpbmVyKSk7XG4gICAgfSk7XG5cbiAgICBwcm9kdWN0Q292ZXIuc3dpcGUoe1xuICAgICAgc3dpcGU6IChldmVudCwgZGlyZWN0aW9uKSA9PiB7XG4gICAgICAgIHRodW1iU2VsZWN0ZWQgPSAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5zZWxlY3RlZCk7XG4gICAgICAgIGNvbnN0IHBhcmVudFRodW1iID0gdGh1bWJTZWxlY3RlZC5jbG9zZXN0KHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC50aHVtYkNvbnRhaW5lcik7XG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmIChwYXJlbnRUaHVtYi5wcmV2KCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc3dpcGUodGh1bWJTZWxlY3RlZCwgcGFyZW50VGh1bWIucHJldigpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhcmVudFRodW1iLm5leHQoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzd2lwZSh0aHVtYlNlbGVjdGVkLCBwYXJlbnRUaHVtYi5uZXh0KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmIChwYXJlbnRUaHVtYi5uZXh0KCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc3dpcGUodGh1bWJTZWxlY3RlZCwgcGFyZW50VGh1bWIubmV4dCgpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhcmVudFRodW1iLnByZXYoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzd2lwZSh0aHVtYlNlbGVjdGVkLCBwYXJlbnRUaHVtYi5wcmV2KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFsbG93UGFnZVNjcm9sbDogJ3ZlcnRpY2FsJyxcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGltYWdlU2Nyb2xsQm94KCkge1xuICAgIGlmICgkKCcjbWFpbiAuanMtcXYtcHJvZHVjdC1pbWFnZXMgbGknKS5sZW5ndGggPiAyKSB7XG4gICAgICAkKCcjbWFpbiAuanMtcXYtbWFzaycpLmFkZENsYXNzKCdzY3JvbGwnKTtcbiAgICAgICQoJy5zY3JvbGwtYm94LWFycm93cycpLmFkZENsYXNzKCdzY3JvbGwnKTtcbiAgICAgICQoJyNtYWluIC5qcy1xdi1tYXNrJykuc2Nyb2xsYm94KHtcbiAgICAgICAgZGlyZWN0aW9uOiAnaCcsXG4gICAgICAgIGRpc3RhbmNlOiAxMTMsXG4gICAgICAgIGF1dG9QbGF5OiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgJCgnLnNjcm9sbC1ib3gtYXJyb3dzIC5sZWZ0JykuY2xpY2soKCkgPT4ge1xuICAgICAgICAkKCcjbWFpbiAuanMtcXYtbWFzaycpLnRyaWdnZXIoJ2JhY2t3YXJkJyk7XG4gICAgICB9KTtcbiAgICAgICQoJy5zY3JvbGwtYm94LWFycm93cyAucmlnaHQnKS5jbGljaygoKSA9PiB7XG4gICAgICAgICQoJyNtYWluIC5qcy1xdi1tYXNrJykudHJpZ2dlcignZm9yd2FyZCcpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICQoJyNtYWluIC5qcy1xdi1tYXNrJykucmVtb3ZlQ2xhc3MoJ3Njcm9sbCcpO1xuICAgICAgJCgnLnNjcm9sbC1ib3gtYXJyb3dzJykucmVtb3ZlQ2xhc3MoJ3Njcm9sbCcpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUlucHV0RmlsZSgpIHtcbiAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuZmlsZUlucHV0KS5vbignY2hhbmdlJywgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpWzBdO1xuICAgICAgY29uc3QgZmlsZSA9ICh0YXJnZXQpID8gdGFyZ2V0LmZpbGVzWzBdIDogbnVsbDtcblxuICAgICAgaWYgKHRhcmdldCAmJiBmaWxlKSB7XG4gICAgICAgICQodGFyZ2V0KS5wcmV2KCkudGV4dChmaWxlLm5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJvZHVjdFNwaW4oKSB7XG4gICAgY29uc3QgJHF1YW50aXR5SW5wdXQgPSAkKHByZXN0YXNob3Auc2VsZWN0b3JzLnF1YW50aXR5V2FudGVkKTtcblxuICAgICRxdWFudGl0eUlucHV0LlRvdWNoU3Bpbih7XG4gICAgICB2ZXJ0aWNhbGJ1dHRvbnM6IHRydWUsXG4gICAgICB2ZXJ0aWNhbHVwY2xhc3M6ICdtYXRlcmlhbC1pY29ucyB0b3VjaHNwaW4tdXAnLFxuICAgICAgdmVydGljYWxkb3duY2xhc3M6ICdtYXRlcmlhbC1pY29ucyB0b3VjaHNwaW4tZG93bicsXG4gICAgICBidXR0b25kb3duX2NsYXNzOiAnYnRuIGJ0bi10b3VjaHNwaW4ganMtdG91Y2hzcGluJyxcbiAgICAgIGJ1dHRvbnVwX2NsYXNzOiAnYnRuIGJ0bi10b3VjaHNwaW4ganMtdG91Y2hzcGluJyxcbiAgICAgIG1pbjogcGFyc2VJbnQoJHF1YW50aXR5SW5wdXQuYXR0cignbWluJyksIDEwKSxcbiAgICAgIG1heDogMTAwMDAwMCxcbiAgICB9KTtcblxuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy50b3VjaHNwaW4pLm9mZigndG91Y2hzdGFydC50b3VjaHNwaW4nKTtcblxuICAgICRxdWFudGl0eUlucHV0Lm9uKCdmb2N1c291dCcsICgpID0+IHtcbiAgICAgIGlmICgkcXVhbnRpdHlJbnB1dC52YWwoKSA9PT0gJycgfHwgJHF1YW50aXR5SW5wdXQudmFsKCkgPCAkcXVhbnRpdHlJbnB1dC5hdHRyKCdtaW4nKSkge1xuICAgICAgICAkcXVhbnRpdHlJbnB1dC52YWwoJHF1YW50aXR5SW5wdXQuYXR0cignbWluJykpO1xuICAgICAgICAkcXVhbnRpdHlJbnB1dC50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgICQoJ2JvZHknKS5vbignY2hhbmdlIGtleXVwJywgcHJlc3Rhc2hvcC5zZWxlY3RvcnMucXVhbnRpdHlXYW50ZWQsIChlKSA9PiB7XG4gICAgICBpZiAoJHF1YW50aXR5SW5wdXQudmFsKCkgIT09ICcnKSB7XG4gICAgICAgICQoZS5jdXJyZW50VGFyZ2V0KS50cmlnZ2VyKCd0b3VjaHNwaW4uc3RvcHNwaW4nKTtcbiAgICAgICAgcHJlc3Rhc2hvcC5lbWl0KCd1cGRhdGVQcm9kdWN0Jywge1xuICAgICAgICAgIGV2ZW50VHlwZTogJ3VwZGF0ZWRQcm9kdWN0UXVhbnRpdHknLFxuICAgICAgICAgIGV2ZW50OiBlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEpzUHJvZHVjdFRhYkFjdGl2ZVNlbGVjdG9yKCkge1xuICAgIGNvbnN0IG5hdiA9ICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LnRhYnMpO1xuICAgIG5hdi5vbignc2hvdy5icy50YWInLCAoZSkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gJChlLnRhcmdldCk7XG4gICAgICB0YXJnZXQuYWRkQ2xhc3MocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmFjdGl2ZU5hdkNsYXNzKTtcbiAgICAgICQodGFyZ2V0LmF0dHIoJ2hyZWYnKSkuYWRkQ2xhc3MocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmFjdGl2ZVRhYkNsYXNzKTtcbiAgICB9KTtcbiAgICBuYXYub24oJ2hpZGUuYnMudGFiJywgKGUpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9ICQoZS50YXJnZXQpO1xuICAgICAgdGFyZ2V0LnJlbW92ZUNsYXNzKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5hY3RpdmVOYXZDbGFzcyk7XG4gICAgICAkKHRhcmdldC5hdHRyKCdocmVmJykpLnJlbW92ZUNsYXNzKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5hY3RpdmVUYWJDbGFzcyk7XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVQcm9kdWN0U3BpbigpO1xuICBjcmVhdGVJbnB1dEZpbGUoKTtcbiAgY292ZXJJbWFnZSgpO1xuICBpbWFnZVNjcm9sbEJveCgpO1xuICBhZGRKc1Byb2R1Y3RUYWJBY3RpdmVTZWxlY3RvcigpO1xuXG4gIHByZXN0YXNob3Aub24oJ3VwZGF0ZWRQcm9kdWN0JywgKGV2ZW50KSA9PiB7XG4gICAgY3JlYXRlSW5wdXRGaWxlKCk7XG4gICAgY292ZXJJbWFnZSgpO1xuICAgIGlmIChldmVudCAmJiBldmVudC5wcm9kdWN0X21pbmltYWxfcXVhbnRpdHkpIHtcbiAgICAgIGNvbnN0IG1pbmltYWxQcm9kdWN0UXVhbnRpdHkgPSBwYXJzZUludChldmVudC5wcm9kdWN0X21pbmltYWxfcXVhbnRpdHksIDEwKTtcbiAgICAgIGNvbnN0IHF1YW50aXR5SW5wdXRTZWxlY3RvciA9IHByZXN0YXNob3Auc2VsZWN0b3JzLnF1YW50aXR5V2FudGVkO1xuICAgICAgY29uc3QgcXVhbnRpdHlJbnB1dCA9ICQocXVhbnRpdHlJbnB1dFNlbGVjdG9yKTtcblxuICAgICAgLy8gQHNlZSBodHRwOi8vd3d3LnZpcnR1b3NvZnQuZXUvY29kZS9ib290c3RyYXAtdG91Y2hzcGluLyBhYm91dCBCb290c3RyYXAgVG91Y2hTcGluXG4gICAgICBxdWFudGl0eUlucHV0LnRyaWdnZXIoJ3RvdWNoc3Bpbi51cGRhdGVzZXR0aW5ncycsIHtcbiAgICAgICAgbWluOiBtaW5pbWFsUHJvZHVjdFF1YW50aXR5LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGltYWdlU2Nyb2xsQm94KCk7XG4gICAgJCgkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5hY3RpdmVUYWJzKS5hdHRyKCdocmVmJykpLmFkZENsYXNzKCdhY3RpdmUnKS5yZW1vdmVDbGFzcygnZmFkZScpO1xuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5wcm9kdWN0LmltYWdlc01vZGFsKS5yZXBsYWNlV2l0aChldmVudC5wcm9kdWN0X2ltYWdlc19tb2RhbCk7XG5cbiAgICBjb25zdCBwcm9kdWN0U2VsZWN0ID0gbmV3IFByb2R1Y3RTZWxlY3QoKTtcbiAgICBwcm9kdWN0U2VsZWN0LmluaXQoKTtcbiAgfSk7XG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB0aW1lb3V0ID0gMzAwKSB7XG4gIGxldCB0aW1lcjtcblxuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7IH0sIHRpbWVvdXQpO1xuICB9O1xufVxuIiwiaW1wb3J0ICQgZnJvbSBcImpxdWVyeVwiO1xuaW1wb3J0IHByZXN0YXNob3AgZnJvbSBcInByZXN0YXNob3BcIjtcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiLi9jb21wb25lbnRzL2RlYm91bmNlXCI7XG5cbnByZXN0YXNob3AuY2FydCA9IHByZXN0YXNob3AuY2FydCB8fCB7fTtcblxucHJlc3Rhc2hvcC5jYXJ0LmFjdGl2ZV9pbnB1dHMgPSBudWxsO1xuXG5jb25zdCBzcGlubmVyU2VsZWN0b3IgPSAnaW5wdXRbbmFtZT1cInByb2R1Y3QtcXVhbnRpdHktc3BpblwiXSc7XG5sZXQgaGFzRXJyb3IgPSBmYWxzZTtcbmxldCBpc1VwZGF0ZU9wZXJhdGlvbiA9IGZhbHNlO1xubGV0IGVycm9yTXNnID0gXCJcIjtcblxuY29uc3QgQ2hlY2tVcGRhdGVRdWFudGl0eU9wZXJhdGlvbnMgPSB7XG4gIHN3aXRjaEVycm9yU3RhdDogKCkgPT4ge1xuICAgIC8qKlxuICAgICAqIGlmIGVycm9yTXNnIGlzIG5vdCBlbXB0eSBvciBpZiBub3RpZmljYXRpb25zIGFyZSBzaG93biwgd2UgaGF2ZSBlcnJvciB0byBkaXNwbGF5XG4gICAgICogaWYgaGFzRXJyb3IgaXMgdHJ1ZSwgcXVhbnRpdHkgd2FzIG5vdCB1cGRhdGVkIDogd2UgZG9uJ3QgZGlzYWJsZSBjaGVja291dCBidXR0b25cbiAgICAgKi9cbiAgICBjb25zdCAkY2hlY2tvdXRCdG4gPSAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2hlY2tvdXQuYnRuKTtcblxuICAgIGlmIChcbiAgICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5ub3RpZmljYXRpb25zLmRhbmdlckFsZXJ0KS5sZW5ndGggfHxcbiAgICAgIChlcnJvck1zZyAhPT0gXCJcIiAmJiAhaGFzRXJyb3IpXG4gICAgKSB7XG4gICAgICAkY2hlY2tvdXRCdG4uYWRkQ2xhc3MoXCJkaXNhYmxlZFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3JNc2cgIT09IFwiXCIpIHtcbiAgICAgIGNvbnN0IHN0ckVycm9yID0gYFxuICAgICAgICA8YXJ0aWNsZSBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiIHJvbGU9XCJhbGVydFwiIGRhdGEtYWxlcnQ9XCJkYW5nZXJcIj5cbiAgICAgICAgICA8dWw+XG4gICAgICAgICAgICA8bGk+JHtlcnJvck1zZ308L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgIGA7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubm90aWZpY2F0aW9ucy5jb250YWluZXIpLmh0bWwoc3RyRXJyb3IpO1xuICAgICAgZXJyb3JNc2cgPSBcIlwiO1xuICAgICAgaXNVcGRhdGVPcGVyYXRpb24gPSBmYWxzZTtcbiAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAvLyBpZiBoYXNFcnJvciBpcyB0cnVlLCBxdWFudGl0eSB3YXMgbm90IHVwZGF0ZWQgOiBhbGxvdyBjaGVja291dFxuICAgICAgICAkY2hlY2tvdXRCdG4ucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlZFwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFoYXNFcnJvciAmJiBpc1VwZGF0ZU9wZXJhdGlvbikge1xuICAgICAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgIGlzVXBkYXRlT3BlcmF0aW9uID0gZmFsc2U7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMubm90aWZpY2F0aW9ucy5jb250YWluZXIpLmh0bWwoXCJcIik7XG4gICAgICAkY2hlY2tvdXRCdG4ucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlZFwiKTtcbiAgICB9XG4gIH0sXG4gIGNoZWNrVXBkYXRlT3BlcmF0aW9uOiAocmVzcCkgPT4ge1xuICAgIC8qKlxuICAgICAqIHJlc3AuaGFzRXJyb3IgY2FuIGJlIG5vdCBkZWZpbmVkIGJ1dCByZXNwLmVycm9ycyBub3QgZW1wdHk6IHF1YW50aXR5IGlzIHVwZGF0ZWQgYnV0IG9yZGVyIGNhbm5vdCBiZSBwbGFjZWRcbiAgICAgKiB3aGVuIHJlc3AuaGFzRXJyb3I9dHJ1ZSwgcXVhbnRpdHkgaXMgbm90IHVwZGF0ZWRcbiAgICAgKi9cbiAgICBjb25zdCB7IGhhc0Vycm9yOiBoYXNFcnJvck9jY3VycmVkLCBlcnJvcnM6IGVycm9yRGF0YSB9ID0gcmVzcDtcbiAgICBoYXNFcnJvciA9IGhhc0Vycm9yT2NjdXJyZWQgPz8gZmFsc2U7XG4gICAgY29uc3QgZXJyb3JzID0gZXJyb3JEYXRhID8/IFwiXCI7XG5cbiAgICAvLyAxLjcuMi54IHJldHVybnMgZXJyb3JzIGFzIHN0cmluZywgMS43LjMueCByZXR1cm5zIGFycmF5XG4gICAgaWYgKGVycm9ycyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICBlcnJvck1zZyA9IGVycm9ycy5qb2luKFwiIFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3JNc2cgPSBlcnJvcnM7XG4gICAgfVxuXG4gICAgaXNVcGRhdGVPcGVyYXRpb24gPSB0cnVlO1xuICB9LFxufTtcblxuLyoqXG4gKiBBdHRhY2ggQm9vdHN0cmFwIFRvdWNoU3BpbiBldmVudCBoYW5kbGVyc1xuICovXG5mdW5jdGlvbiBjcmVhdGVTcGluKCkge1xuICAkLmVhY2goJChzcGlubmVyU2VsZWN0b3IpLCAoaW5kZXgsIHNwaW5uZXIpID0+IHtcbiAgICAkKHNwaW5uZXIpLlRvdWNoU3Bpbih7XG4gICAgICBtaW46IHBhcnNlSW50KCQoc3Bpbm5lcikuYXR0cihcIm1pblwiKSwgMTApLFxuICAgICAgbWF4OiAxMDAwMDAwLFxuICAgIH0pO1xuICB9KTtcblxuICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMudG91Y2hzcGluKS5vZmYoXCJ0b3VjaHN0YXJ0LnRvdWNoc3BpblwiKTtcblxuICBDaGVja1VwZGF0ZVF1YW50aXR5T3BlcmF0aW9ucy5zd2l0Y2hFcnJvclN0YXQoKTtcbn1cblxuY29uc3QgcHJldmVudEN1c3RvbU1vZGFsT3BlbiA9IChldmVudCkgPT4ge1xuICBpZiAod2luZG93LnNob3VsZFByZXZlbnRNb2RhbCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4kKGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgcHJvZHVjdExpbmVJbkNhcnRTZWxlY3RvciA9XG4gICAgcHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jYXJ0LnByb2R1Y3RMaW5lUXR5O1xuICBjb25zdCBwcm9taXNlcyA9IFtdO1xuXG4gIHByZXN0YXNob3Aub24oXCJ1cGRhdGVkQ2FydFwiLCAoKSA9PiB7XG4gICAgd2luZG93LnNob3VsZFByZXZlbnRNb2RhbCA9IGZhbHNlO1xuXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLnByb2R1Y3QuY3VzdG9taXphdGlvbk1vZGFsKS5vbihcbiAgICAgIFwic2hvdy5icy5tb2RhbFwiLFxuICAgICAgKG1vZGFsRXZlbnQpID0+IHtcbiAgICAgICAgcHJldmVudEN1c3RvbU1vZGFsT3Blbihtb2RhbEV2ZW50KTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNyZWF0ZVNwaW4oKTtcbiAgfSk7XG5cbiAgY3JlYXRlU3BpbigpO1xuXG4gIGNvbnN0ICRib2R5ID0gJChcImJvZHlcIik7XG5cbiAgZnVuY3Rpb24gaXNUb3VjaFNwaW4obmFtZXNwYWNlKSB7XG4gICAgcmV0dXJuIG5hbWVzcGFjZSA9PT0gXCJvbi5zdGFydHVwc3BpblwiIHx8IG5hbWVzcGFjZSA9PT0gXCJvbi5zdGFydGRvd25zcGluXCI7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRJbmNyZWFzZVByb2R1Y3RRdWFudGl0eShuYW1lc3BhY2UpIHtcbiAgICByZXR1cm4gbmFtZXNwYWNlID09PSBcIm9uLnN0YXJ0dXBzcGluXCI7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kQ2FydExpbmVQcm9kdWN0UXVhbnRpdHlJbnB1dCgkdGFyZ2V0KSB7XG4gICAgY29uc3QgJGlucHV0ID0gJHRhcmdldFxuICAgICAgLnBhcmVudHMocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jYXJ0LnRvdWNoc3BpbilcbiAgICAgIC5maW5kKHByb2R1Y3RMaW5lSW5DYXJ0U2VsZWN0b3IpO1xuXG4gICAgaWYgKCRpbnB1dC5pcyhcIjpmb2N1c1wiKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuICRpbnB1dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbWVsaXplKHN1YmplY3QpIHtcbiAgICBjb25zdCBhY3Rpb25UeXBlUGFydHMgPSBzdWJqZWN0LnNwbGl0KFwiLVwiKTtcbiAgICBsZXQgaTtcbiAgICBsZXQgcGFydDtcbiAgICBsZXQgY2FtZWxpemVkU3ViamVjdCA9IFwiXCI7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgYWN0aW9uVHlwZVBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBwYXJ0ID0gYWN0aW9uVHlwZVBhcnRzW2ldO1xuXG4gICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICBwYXJ0ID0gcGFydC5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIHBhcnQuc3Vic3RyaW5nKDEpO1xuICAgICAgfVxuXG4gICAgICBjYW1lbGl6ZWRTdWJqZWN0ICs9IHBhcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbWVsaXplZFN1YmplY3Q7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUNhcnRBY3Rpb24oJHRhcmdldCwgbmFtZXNwYWNlKSB7XG4gICAgaWYgKCFpc1RvdWNoU3BpbihuYW1lc3BhY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1cmw6ICR0YXJnZXQuYXR0cihcImhyZWZcIiksXG4gICAgICAgIHR5cGU6IGNhbWVsaXplKCR0YXJnZXQuZGF0YShcImxpbmstYWN0aW9uXCIpKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgJGlucHV0ID0gZmluZENhcnRMaW5lUHJvZHVjdFF1YW50aXR5SW5wdXQoJHRhcmdldCk7XG5cbiAgICBpZiAoISRpbnB1dCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBjYXJ0QWN0aW9uID0ge307XG5cbiAgICBpZiAoc2hvdWxkSW5jcmVhc2VQcm9kdWN0UXVhbnRpdHkobmFtZXNwYWNlKSkge1xuICAgICAgY2FydEFjdGlvbiA9IHtcbiAgICAgICAgdXJsOiAkaW5wdXQuZGF0YShcInVwLXVybFwiKSxcbiAgICAgICAgdHlwZTogXCJpbmNyZWFzZVByb2R1Y3RRdWFudGl0eVwiLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FydEFjdGlvbiA9IHtcbiAgICAgICAgdXJsOiAkaW5wdXQuZGF0YShcImRvd24tdXJsXCIpLFxuICAgICAgICB0eXBlOiBcImRlY3JlYXNlUHJvZHVjdFF1YW50aXR5XCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBjYXJ0QWN0aW9uO1xuICB9XG5cbiAgY29uc3QgYWJvcnRQcmV2aW91c1JlcXVlc3RzID0gKCkgPT4ge1xuICAgIGxldCBwcm9taXNlO1xuICAgIHdoaWxlIChwcm9taXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZXMucG9wKCk7XG4gICAgICBwcm9taXNlLmFib3J0KCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldFRvdWNoU3BpbklucHV0ID0gKCRidXR0b24pID0+XG4gICAgJCgkYnV0dG9uLnBhcmVudHMocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jYXJ0LnRvdWNoc3BpbikuZmluZChcImlucHV0XCIpKTtcblxuICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMucHJvZHVjdC5jdXN0b21pemF0aW9uTW9kYWwpLm9uKFxuICAgIFwic2hvdy5icy5tb2RhbFwiLFxuICAgIChtb2RhbEV2ZW50KSA9PiB7XG4gICAgICBwcmV2ZW50Q3VzdG9tTW9kYWxPcGVuKG1vZGFsRXZlbnQpO1xuICAgIH0sXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ2FydEFjdGlvbiA9IChldmVudCkgPT4ge1xuICAgIGFib3J0UHJldmlvdXNSZXF1ZXN0cygpO1xuICAgIHdpbmRvdy5zaG91bGRQcmV2ZW50TW9kYWwgPSB0cnVlO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCAkdGFyZ2V0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCB7IGRhdGFzZXQgfSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgY29uc3QgY2FydEFjdGlvbiA9IHBhcnNlQ2FydEFjdGlvbigkdGFyZ2V0LCBldmVudC5uYW1lc3BhY2UpO1xuICAgIGNvbnN0IHJlcXVlc3REYXRhID0ge1xuICAgICAgYWpheDogXCIxXCIsXG4gICAgICBhY3Rpb246IFwidXBkYXRlXCIsXG4gICAgfTtcblxuICAgIGlmICghY2FydEFjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICQuYWpheCh7XG4gICAgICB1cmw6IGNhcnRBY3Rpb24udXJsLFxuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIGRhdGE6IHJlcXVlc3REYXRhLFxuICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxuICAgICAgYmVmb3JlU2VuZChqcVhIUikge1xuICAgICAgICBwcm9taXNlcy5wdXNoKGpxWEhSKTtcbiAgICAgIH0sXG4gICAgfSlcbiAgICAgIC50aGVuKChyZXNwKSA9PiB7XG4gICAgICAgIGNvbnN0ICRxdWFudGl0eUlucHV0ID0gZ2V0VG91Y2hTcGluSW5wdXQoJHRhcmdldCk7XG4gICAgICAgIENoZWNrVXBkYXRlUXVhbnRpdHlPcGVyYXRpb25zLmNoZWNrVXBkYXRlT3BlcmF0aW9uKHJlc3ApO1xuICAgICAgICAkcXVhbnRpdHlJbnB1dC52YWwocmVzcC5xdWFudGl0eSk7XG5cbiAgICAgICAgLy8gUmVmcmVzaCBjYXJ0IHByZXZpZXdcbiAgICAgICAgcHJlc3Rhc2hvcC5lbWl0KFwidXBkYXRlQ2FydFwiLCB7XG4gICAgICAgICAgcmVhc29uOiBkYXRhc2V0LFxuICAgICAgICAgIHJlc3AsXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5mYWlsKChyZXNwKSA9PiB7XG4gICAgICAgIHByZXN0YXNob3AuZW1pdChcImhhbmRsZUVycm9yXCIsIHtcbiAgICAgICAgICBldmVudFR5cGU6IFwidXBkYXRlUHJvZHVjdEluQ2FydFwiLFxuICAgICAgICAgIHJlc3AsXG4gICAgICAgICAgY2FydEFjdGlvbjogY2FydEFjdGlvbi50eXBlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9O1xuXG4gICRib2R5Lm9uKFwiY2xpY2tcIiwgcHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jYXJ0LmFjdGlvbnMsIGhhbmRsZUNhcnRBY3Rpb24pO1xuXG4gIGZ1bmN0aW9uIHNlbmRVcGRhdGVRdWFudGl0eUluQ2FydFJlcXVlc3QoXG4gICAgdXBkYXRlUXVhbnRpdHlJbkNhcnRVcmwsXG4gICAgcmVxdWVzdERhdGEsXG4gICAgJHRhcmdldCxcbiAgKSB7XG4gICAgYWJvcnRQcmV2aW91c1JlcXVlc3RzKCk7XG4gICAgd2luZG93LnNob3VsZFByZXZlbnRNb2RhbCA9IHRydWU7XG5cbiAgICByZXR1cm4gJC5hamF4KHtcbiAgICAgIHVybDogdXBkYXRlUXVhbnRpdHlJbkNhcnRVcmwsXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgZGF0YTogcmVxdWVzdERhdGEsXG4gICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICBiZWZvcmVTZW5kKGpxWEhSKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2goanFYSFIpO1xuICAgICAgfSxcbiAgICB9KVxuICAgICAgLnRoZW4oKHJlc3ApID0+IHtcbiAgICAgICAgQ2hlY2tVcGRhdGVRdWFudGl0eU9wZXJhdGlvbnMuY2hlY2tVcGRhdGVPcGVyYXRpb24ocmVzcCk7XG5cbiAgICAgICAgJHRhcmdldC52YWwocmVzcC5xdWFudGl0eSk7XG4gICAgICAgIGNvbnN0IGRhdGFzZXQgPSAkdGFyZ2V0ICYmICR0YXJnZXQuZGF0YXNldCA/ICR0YXJnZXQuZGF0YXNldCA6IHJlc3A7XG5cbiAgICAgICAgLy8gUmVmcmVzaCBjYXJ0IHByZXZpZXdcbiAgICAgICAgcHJlc3Rhc2hvcC5lbWl0KFwidXBkYXRlQ2FydFwiLCB7XG4gICAgICAgICAgcmVhc29uOiBkYXRhc2V0LFxuICAgICAgICAgIHJlc3AsXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5mYWlsKChyZXNwKSA9PiB7XG4gICAgICAgIHByZXN0YXNob3AuZW1pdChcImhhbmRsZUVycm9yXCIsIHtcbiAgICAgICAgICBldmVudFR5cGU6IFwidXBkYXRlUHJvZHVjdFF1YW50aXR5SW5DYXJ0XCIsXG4gICAgICAgICAgcmVzcCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFF1YW50aXR5Q2hhbmdlVHlwZSgkcXVhbnRpdHkpIHtcbiAgICByZXR1cm4gJHF1YW50aXR5ID4gMCA/IFwidXBcIiA6IFwiZG93blwiO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmVxdWVzdERhdGEocXVhbnRpdHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWpheDogXCIxXCIsXG4gICAgICBxdHk6IE1hdGguYWJzKHF1YW50aXR5KSxcbiAgICAgIGFjdGlvbjogXCJ1cGRhdGVcIixcbiAgICAgIG9wOiBnZXRRdWFudGl0eUNoYW5nZVR5cGUocXVhbnRpdHkpLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVQcm9kdWN0UXVhbnRpdHlJbkNhcnQoZXZlbnQpIHtcbiAgICBjb25zdCAkdGFyZ2V0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCB1cGRhdGVRdWFudGl0eUluQ2FydFVybCA9ICR0YXJnZXQuZGF0YShcInVwZGF0ZS11cmxcIik7XG4gICAgY29uc3QgYmFzZVZhbHVlID0gJHRhcmdldC5hdHRyKFwidmFsdWVcIik7XG5cbiAgICAvLyBUaGVyZSBzaG91bGQgYmUgYSB2YWxpZCBwcm9kdWN0IHF1YW50aXR5IGluIGNhcnRcbiAgICBjb25zdCB0YXJnZXRWYWx1ZSA9ICR0YXJnZXQudmFsKCk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBpZiAoXG4gICAgICB0YXJnZXRWYWx1ZSAhPSBwYXJzZUludCh0YXJnZXRWYWx1ZSwgMTApIHx8XG4gICAgICB0YXJnZXRWYWx1ZSA8IDAgfHxcbiAgICAgIGlzTmFOKHRhcmdldFZhbHVlKVxuICAgICkge1xuICAgICAgd2luZG93LnNob3VsZFByZXZlbnRNb2RhbCA9IGZhbHNlO1xuICAgICAgJHRhcmdldC52YWwoYmFzZVZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgIC8vIFRoZXJlIHNob3VsZCBiZSBhIG5ldyBwcm9kdWN0IHF1YW50aXR5IGluIGNhcnRcbiAgICBjb25zdCBxdHkgPSB0YXJnZXRWYWx1ZSAtIGJhc2VWYWx1ZTtcblxuICAgIGlmIChxdHkgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0VmFsdWUgPT09IFwiMFwiKSB7XG4gICAgICAkdGFyZ2V0XG4gICAgICAgIC5jbG9zZXN0KFwiLnByb2R1Y3QtbGluZS1hY3Rpb25zXCIpXG4gICAgICAgIC5maW5kKCdbZGF0YS1saW5rLWFjdGlvbj1cImRlbGV0ZS1mcm9tLWNhcnRcIl0nKVxuICAgICAgICAuY2xpY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJHRhcmdldC5hdHRyKFwidmFsdWVcIiwgdGFyZ2V0VmFsdWUpO1xuICAgICAgc2VuZFVwZGF0ZVF1YW50aXR5SW5DYXJ0UmVxdWVzdChcbiAgICAgICAgdXBkYXRlUXVhbnRpdHlJbkNhcnRVcmwsXG4gICAgICAgIGdldFJlcXVlc3REYXRhKHF0eSksXG4gICAgICAgICR0YXJnZXQsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICRib2R5Lm9uKFxuICAgIFwidG91Y2hzcGluLm9uLnN0b3BzcGluXCIsXG4gICAgc3Bpbm5lclNlbGVjdG9yLFxuICAgIGRlYm91bmNlKHVwZGF0ZVByb2R1Y3RRdWFudGl0eUluQ2FydCksXG4gICk7XG5cbiAgJGJvZHkub24oXCJmb2N1c291dCBrZXl1cFwiLCBwcm9kdWN0TGluZUluQ2FydFNlbGVjdG9yLCAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXl1cFwiKSB7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgaXNVcGRhdGVPcGVyYXRpb24gPSB0cnVlO1xuICAgICAgICB1cGRhdGVQcm9kdWN0UXVhbnRpdHlJbkNhcnQoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFpc1VwZGF0ZU9wZXJhdGlvbikge1xuICAgICAgdXBkYXRlUHJvZHVjdFF1YW50aXR5SW5DYXJ0KGV2ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xuXG4gIGNvbnN0ICR0aW1lb3V0RWZmZWN0ID0gNDAwO1xuXG4gICRib2R5Lm9uKFxuICAgIFwiaGlkZGVuLmJzLmNvbGxhcHNlXCIsXG4gICAgcHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jYXJ0LnByb21vQ29kZSxcbiAgICAoKSA9PiB7XG4gICAgICAkKHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2FydC5kaXNwbGF5UHJvbW8pLnNob3coJHRpbWVvdXRFZmZlY3QpO1xuICAgIH0sXG4gICk7XG5cbiAgJGJvZHkub24oXCJjbGlja1wiLCBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQucHJvbW9Db2RlQnV0dG9uLCAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQucHJvbW9Db2RlKS5jb2xsYXBzZShcInRvZ2dsZVwiKTtcbiAgfSk7XG5cbiAgJGJvZHkub24oXCJjbGlja1wiLCBwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQuZGlzcGxheVByb21vLCAoZXZlbnQpID0+IHtcbiAgICAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmhpZGUoJHRpbWVvdXRFZmZlY3QpO1xuICB9KTtcblxuICAkYm9keS5vbihcImNsaWNrXCIsIHByZXN0YXNob3AudGhlbWVTZWxlY3RvcnMuY2FydC5kaXNjb3VudENvZGUsIChldmVudCkgPT4ge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgJGNvZGUgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0ICRkaXNjb3VudElucHV0ID0gJChwcmVzdGFzaG9wLnRoZW1lU2VsZWN0b3JzLmNhcnQuZGlzY291bnROYW1lKTtcblxuICAgICRkaXNjb3VudElucHV0LnZhbCgkY29kZS50ZXh0KCkpO1xuICAgIC8vIFNob3cgcHJvbW8gY29kZSBmaWVsZFxuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jYXJ0LnByb21vQ29kZSkuY29sbGFwc2UoXCJzaG93XCIpO1xuICAgICQocHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycy5jYXJ0LmRpc3BsYXlQcm9tbykuaGlkZSgkdGltZW91dEVmZmVjdCk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcm9wRG93biB7XG4gIGNvbnN0cnVjdG9yKGVsKSB7XG4gICAgdGhpcy5lbCA9IGVsO1xuICB9XG5cbiAgaW5pdCgpIHtcbiAgICB0aGlzLmVsLm9uKCdzaG93LmJzLmRyb3Bkb3duJywgKGUsIGVsKSA9PiB7XG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgJChgIyR7ZWx9YCkuZmluZCgnLmRyb3Bkb3duLW1lbnUnKS5maXJzdCgpLnN0b3AodHJ1ZSwgdHJ1ZSlcbiAgICAgICAgICAuc2xpZGVEb3duKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkKGUudGFyZ2V0KS5maW5kKCcuZHJvcGRvd24tbWVudScpLmZpcnN0KCkuc3RvcCh0cnVlLCB0cnVlKVxuICAgICAgICAgIC5zbGlkZURvd24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZWwub24oJ2hpZGUuYnMuZHJvcGRvd24nLCAoZSwgZWwpID0+IHtcbiAgICAgIGlmIChlbCkge1xuICAgICAgICAkKGAjJHtlbH1gKS5maW5kKCcuZHJvcGRvd24tbWVudScpLmZpcnN0KCkuc3RvcCh0cnVlLCB0cnVlKVxuICAgICAgICAgIC5zbGlkZVVwKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkKGUudGFyZ2V0KS5maW5kKCcuZHJvcGRvd24tbWVudScpLmZpcnN0KCkuc3RvcCh0cnVlLCB0cnVlKVxuICAgICAgICAgIC5zbGlkZVVwKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmVsLmZpbmQoJ3NlbGVjdC5saW5rJykuZWFjaCgoaWR4LCBlbCkgPT4ge1xuICAgICAgJChlbCkub24oJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uID0gJCh0aGlzKS52YWwoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKi9cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm0ge1xuICBpbml0KCkge1xuICAgIHRoaXMucGFyZW50Rm9jdXMoKTtcbiAgICB0aGlzLnRvZ2dsZVBhc3N3b3JkVmlzaWJpbGl0eSgpO1xuICB9XG5cbiAgcGFyZW50Rm9jdXMoKSB7XG4gICAgJCgnLmpzLWNoaWxkLWZvY3VzJykub24oJ2ZvY3VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuanMtcGFyZW50LWZvY3VzJykuYWRkQ2xhc3MoJ2ZvY3VzJyk7XG4gICAgfSk7XG4gICAgJCgnLmpzLWNoaWxkLWZvY3VzJykub24oJ2ZvY3Vzb3V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuanMtcGFyZW50LWZvY3VzJykucmVtb3ZlQ2xhc3MoJ2ZvY3VzJyk7XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVQYXNzd29yZFZpc2liaWxpdHkoKSB7XG4gICAgJCgnYnV0dG9uW2RhdGEtYWN0aW9uPVwic2hvdy1wYXNzd29yZFwiXScpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVsbSA9ICQodGhpcykuY2xvc2VzdCgnLmlucHV0LWdyb3VwJykuY2hpbGRyZW4oJ2lucHV0LmpzLXZpc2libGUtcGFzc3dvcmQnKTtcblxuICAgICAgaWYgKGVsbS5hdHRyKCd0eXBlJykgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgICAgZWxtLmF0dHIoJ3R5cGUnLCAndGV4dCcpO1xuICAgICAgICAkKHRoaXMpLnRleHQoJCh0aGlzKS5kYXRhKCd0ZXh0SGlkZScpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsbS5hdHRyKCd0eXBlJywgJ3Bhc3N3b3JkJyk7XG4gICAgICAgICQodGhpcykudGV4dCgkKHRoaXMpLmRhdGEoJ3RleHRTaG93JykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCIvKiBnbG9iYWwgd2luZG93LCBleHBvcnRzLCBkZWZpbmUgKi9cblxuIWZ1bmN0aW9uKCkge1xuICAgICd1c2Ugc3RyaWN0J1xuXG4gICAgdmFyIHJlID0ge1xuICAgICAgICBub3Rfc3RyaW5nOiAvW15zXS8sXG4gICAgICAgIG5vdF9ib29sOiAvW150XS8sXG4gICAgICAgIG5vdF90eXBlOiAvW15UXS8sXG4gICAgICAgIG5vdF9wcmltaXRpdmU6IC9bXnZdLyxcbiAgICAgICAgbnVtYmVyOiAvW2RpZWZnXS8sXG4gICAgICAgIG51bWVyaWNfYXJnOiAvW2JjZGllZmd1eFhdLyxcbiAgICAgICAganNvbjogL1tqXS8sXG4gICAgICAgIG5vdF9qc29uOiAvW15qXS8sXG4gICAgICAgIHRleHQ6IC9eW15cXHgyNV0rLyxcbiAgICAgICAgbW9kdWxvOiAvXlxceDI1ezJ9LyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IC9eXFx4MjUoPzooWzEtOV1cXGQqKVxcJHxcXCgoW14pXSspXFwpKT8oXFwrKT8oMHwnW14kXSk/KC0pPyhcXGQrKT8oPzpcXC4oXFxkKykpPyhbYi1naWpvc3RUdXZ4WF0pLyxcbiAgICAgICAga2V5OiAvXihbYS16X11bYS16X1xcZF0qKS9pLFxuICAgICAgICBrZXlfYWNjZXNzOiAvXlxcLihbYS16X11bYS16X1xcZF0qKS9pLFxuICAgICAgICBpbmRleF9hY2Nlc3M6IC9eXFxbKFxcZCspXFxdLyxcbiAgICAgICAgc2lnbjogL15bKy1dL1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNwcmludGYoa2V5KSB7XG4gICAgICAgIC8vIGBhcmd1bWVudHNgIGlzIG5vdCBhbiBhcnJheSwgYnV0IHNob3VsZCBiZSBmaW5lIGZvciB0aGlzIGNhbGxcbiAgICAgICAgcmV0dXJuIHNwcmludGZfZm9ybWF0KHNwcmludGZfcGFyc2Uoa2V5KSwgYXJndW1lbnRzKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZzcHJpbnRmKGZtdCwgYXJndikge1xuICAgICAgICByZXR1cm4gc3ByaW50Zi5hcHBseShudWxsLCBbZm10XS5jb25jYXQoYXJndiB8fCBbXSkpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3ByaW50Zl9mb3JtYXQocGFyc2VfdHJlZSwgYXJndikge1xuICAgICAgICB2YXIgY3Vyc29yID0gMSwgdHJlZV9sZW5ndGggPSBwYXJzZV90cmVlLmxlbmd0aCwgYXJnLCBvdXRwdXQgPSAnJywgaSwgaywgcGgsIHBhZCwgcGFkX2NoYXJhY3RlciwgcGFkX2xlbmd0aCwgaXNfcG9zaXRpdmUsIHNpZ25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRyZWVfbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyc2VfdHJlZVtpXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gcGFyc2VfdHJlZVtpXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhcnNlX3RyZWVbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgcGggPSBwYXJzZV90cmVlW2ldIC8vIGNvbnZlbmllbmNlIHB1cnBvc2VzIG9ubHlcbiAgICAgICAgICAgICAgICBpZiAocGgua2V5cykgeyAvLyBrZXl3b3JkIGFyZ3VtZW50XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3ZbY3Vyc29yXVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgcGgua2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZyA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignW3NwcmludGZdIENhbm5vdCBhY2Nlc3MgcHJvcGVydHkgXCIlc1wiIG9mIHVuZGVmaW5lZCB2YWx1ZSBcIiVzXCInLCBwaC5rZXlzW2tdLCBwaC5rZXlzW2stMV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnW3BoLmtleXNba11dXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocGgucGFyYW1fbm8pIHsgLy8gcG9zaXRpb25hbCBhcmd1bWVudCAoZXhwbGljaXQpXG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3ZbcGgucGFyYW1fbm9dXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBwb3NpdGlvbmFsIGFyZ3VtZW50IChpbXBsaWNpdClcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndltjdXJzb3IrK11cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmUubm90X3R5cGUudGVzdChwaC50eXBlKSAmJiByZS5ub3RfcHJpbWl0aXZlLnRlc3QocGgudHlwZSkgJiYgYXJnIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnKClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmUubnVtZXJpY19hcmcudGVzdChwaC50eXBlKSAmJiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgJiYgaXNOYU4oYXJnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzcHJpbnRmKCdbc3ByaW50Zl0gZXhwZWN0aW5nIG51bWJlciBidXQgZm91bmQgJVQnLCBhcmcpKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZS5udW1iZXIudGVzdChwaC50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBpc19wb3NpdGl2ZSA9IGFyZyA+PSAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChwaC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGFyc2VJbnQoYXJnLCAxMCkudG9TdHJpbmcoMilcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhcmcsIDEwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEpTT04uc3RyaW5naWZ5KGFyZywgbnVsbCwgcGgud2lkdGggPyBwYXJzZUludChwaC53aWR0aCkgOiAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwaC5wcmVjaXNpb24gPyBwYXJzZUZsb2F0KGFyZykudG9FeHBvbmVudGlhbChwaC5wcmVjaXNpb24pIDogcGFyc2VGbG9hdChhcmcpLnRvRXhwb25lbnRpYWwoKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwaC5wcmVjaXNpb24gPyBwYXJzZUZsb2F0KGFyZykudG9GaXhlZChwaC5wcmVjaXNpb24pIDogcGFyc2VGbG9hdChhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdnJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBoLnByZWNpc2lvbiA/IFN0cmluZyhOdW1iZXIoYXJnLnRvUHJlY2lzaW9uKHBoLnByZWNpc2lvbikpKSA6IHBhcnNlRmxvYXQoYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGFyc2VJbnQoYXJnLCAxMCkgPj4+IDApLnRvU3RyaW5nKDgpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IFN0cmluZyhhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGgucHJlY2lzaW9uID8gYXJnLnN1YnN0cmluZygwLCBwaC5wcmVjaXNpb24pIDogYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBTdHJpbmcoISFhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGgucHJlY2lzaW9uID8gYXJnLnN1YnN0cmluZygwLCBwaC5wcmVjaXNpb24pIDogYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBoLnByZWNpc2lvbiA/IGFyZy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGFyc2VJbnQoYXJnLCAxMCkgPj4+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3YnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBoLnByZWNpc2lvbiA/IGFyZy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBhcnNlSW50KGFyZywgMTApID4+PiAwKS50b1N0cmluZygxNilcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBhcnNlSW50KGFyZywgMTApID4+PiAwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlLmpzb24udGVzdChwaC50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYXJnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmUubnVtYmVyLnRlc3QocGgudHlwZSkgJiYgKCFpc19wb3NpdGl2ZSB8fCBwaC5zaWduKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9IGlzX3Bvc2l0aXZlID8gJysnIDogJy0nXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcudG9TdHJpbmcoKS5yZXBsYWNlKHJlLnNpZ24sICcnKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9ICcnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFkX2NoYXJhY3RlciA9IHBoLnBhZF9jaGFyID8gcGgucGFkX2NoYXIgPT09ICcwJyA/ICcwJyA6IHBoLnBhZF9jaGFyLmNoYXJBdCgxKSA6ICcgJ1xuICAgICAgICAgICAgICAgICAgICBwYWRfbGVuZ3RoID0gcGgud2lkdGggLSAoc2lnbiArIGFyZykubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIHBhZCA9IHBoLndpZHRoID8gKHBhZF9sZW5ndGggPiAwID8gcGFkX2NoYXJhY3Rlci5yZXBlYXQocGFkX2xlbmd0aCkgOiAnJykgOiAnJ1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gcGguYWxpZ24gPyBzaWduICsgYXJnICsgcGFkIDogKHBhZF9jaGFyYWN0ZXIgPT09ICcwJyA/IHNpZ24gKyBwYWQgKyBhcmcgOiBwYWQgKyBzaWduICsgYXJnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0XG4gICAgfVxuXG4gICAgdmFyIHNwcmludGZfY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgICBmdW5jdGlvbiBzcHJpbnRmX3BhcnNlKGZtdCkge1xuICAgICAgICBpZiAoc3ByaW50Zl9jYWNoZVtmbXRdKSB7XG4gICAgICAgICAgICByZXR1cm4gc3ByaW50Zl9jYWNoZVtmbXRdXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2ZtdCA9IGZtdCwgbWF0Y2gsIHBhcnNlX3RyZWUgPSBbXSwgYXJnX25hbWVzID0gMFxuICAgICAgICB3aGlsZSAoX2ZtdCkge1xuICAgICAgICAgICAgaWYgKChtYXRjaCA9IHJlLnRleHQuZXhlYyhfZm10KSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXJzZV90cmVlLnB1c2gobWF0Y2hbMF0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgobWF0Y2ggPSByZS5tb2R1bG8uZXhlYyhfZm10KSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXJzZV90cmVlLnB1c2goJyUnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gcmUucGxhY2Vob2xkZXIuZXhlYyhfZm10KSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnX25hbWVzIHw9IDFcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkX2xpc3QgPSBbXSwgcmVwbGFjZW1lbnRfZmllbGQgPSBtYXRjaFsyXSwgZmllbGRfbWF0Y2ggPSBbXVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGZpZWxkX21hdGNoID0gcmUua2V5LmV4ZWMocmVwbGFjZW1lbnRfZmllbGQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbGlzdC5wdXNoKGZpZWxkX21hdGNoWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChyZXBsYWNlbWVudF9maWVsZCA9IHJlcGxhY2VtZW50X2ZpZWxkLnN1YnN0cmluZyhmaWVsZF9tYXRjaFswXS5sZW5ndGgpKSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZpZWxkX21hdGNoID0gcmUua2V5X2FjY2Vzcy5leGVjKHJlcGxhY2VtZW50X2ZpZWxkKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbGlzdC5wdXNoKGZpZWxkX21hdGNoWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoZmllbGRfbWF0Y2ggPSByZS5pbmRleF9hY2Nlc3MuZXhlYyhyZXBsYWNlbWVudF9maWVsZCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3QucHVzaChmaWVsZF9tYXRjaFsxXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXknKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXknKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gZmllbGRfbGlzdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnX25hbWVzIHw9IDJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFyZ19uYW1lcyA9PT0gMykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tzcHJpbnRmXSBtaXhpbmcgcG9zaXRpb25hbCBhbmQgbmFtZWQgcGxhY2Vob2xkZXJzIGlzIG5vdCAoeWV0KSBzdXBwb3J0ZWQnKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHBhcnNlX3RyZWUucHVzaChcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IG1hdGNoWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fbm86ICAgIG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5czogICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbjogICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkX2NoYXI6ICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ246ICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAgIG1hdGNoWzddLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogICAgICAgIG1hdGNoWzhdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1tzcHJpbnRmXSB1bmV4cGVjdGVkIHBsYWNlaG9sZGVyJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9mbXQgPSBfZm10LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNwcmludGZfY2FjaGVbZm10XSA9IHBhcnNlX3RyZWVcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBleHBvcnQgdG8gZWl0aGVyIGJyb3dzZXIgb3Igbm9kZS5qc1xuICAgICAqL1xuICAgIC8qIGVzbGludC1kaXNhYmxlIHF1b3RlLXByb3BzICovXG4gICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBleHBvcnRzWydzcHJpbnRmJ10gPSBzcHJpbnRmXG4gICAgICAgIGV4cG9ydHNbJ3ZzcHJpbnRmJ10gPSB2c3ByaW50ZlxuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93WydzcHJpbnRmJ10gPSBzcHJpbnRmXG4gICAgICAgIHdpbmRvd1sndnNwcmludGYnXSA9IHZzcHJpbnRmXG5cbiAgICAgICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSkge1xuICAgICAgICAgICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICdzcHJpbnRmJzogc3ByaW50ZixcbiAgICAgICAgICAgICAgICAgICAgJ3ZzcHJpbnRmJzogdnNwcmludGZcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgcXVvdGUtcHJvcHMgKi9cbn0oKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQUZMLTMuMCBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgMy4wIChBRkwtMy4wKVxuICovXG5cbmltcG9ydCB7c3ByaW50Zn0gZnJvbSAnc3ByaW50Zi1qcyc7XG5cbmNvbnN0IHtwYXNzd29yZFBvbGljeTogUGFzc3dvcmRQb2xpY3lNYXB9ID0gcHJlc3Rhc2hvcC50aGVtZVNlbGVjdG9ycztcblxuY29uc3QgUEFTU1dPUkRfUE9MSUNZX0VSUk9SID0gJ1RoZSBwYXNzd29yZCBwb2xpY3kgZWxlbWVudHMgYXJlIHVuZGVmaW5lZC4nO1xuXG5jb25zdCBnZXRQYXNzd29yZFN0cmVuZ3RoRmVlZGJhY2sgPSAoXG4gIHN0cmVuZ3RoLFxuKSA9PiB7XG4gIHN3aXRjaCAoc3RyZW5ndGgpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogJ2JnLWRhbmdlcicsXG4gICAgICB9O1xuXG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6ICdiZy1kYW5nZXInLFxuICAgICAgfTtcblxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiAnYmctd2FybmluZycsXG4gICAgICB9O1xuXG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6ICdiZy1zdWNjZXNzJyxcbiAgICAgIH07XG5cbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogJ2JnLXN1Y2Nlc3MnLFxuICAgICAgfTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGFzc3dvcmQgc3RyZW5ndGggaW5kaWNhdG9yLicpO1xuICB9XG59O1xuXG5jb25zdCB3YXRjaFBhc3N3b3JkID0gYXN5bmMgKFxuICBlbGVtZW50SW5wdXQsXG4gIGZlZWRiYWNrQ29udGFpbmVyLFxuICBoaW50cyxcbikgPT4ge1xuICBjb25zdCB7cHJlc3Rhc2hvcH0gPSB3aW5kb3c7XG4gIGNvbnN0IHBhc3N3b3JkVmFsdWUgPSBlbGVtZW50SW5wdXQudmFsdWU7XG4gIGNvbnN0IGVsZW1lbnRJY29uID0gZmVlZGJhY2tDb250YWluZXIucXVlcnlTZWxlY3RvcihQYXNzd29yZFBvbGljeU1hcC5yZXF1aXJlbWVudFNjb3JlSWNvbik7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByZXN0YXNob3AuY2hlY2tQYXNzd29yZFNjb3JlKHBhc3N3b3JkVmFsdWUpO1xuICBjb25zdCBmZWVkYmFjayA9IGdldFBhc3N3b3JkU3RyZW5ndGhGZWVkYmFjayhyZXN1bHQuc2NvcmUpO1xuICBjb25zdCBwYXNzd29yZExlbmd0aCA9IHBhc3N3b3JkVmFsdWUubGVuZ3RoO1xuICBjb25zdCBwb3BvdmVyQ29udGVudCA9IFtdO1xuXG4gICQoZWxlbWVudElucHV0KS5wb3BvdmVyKCdkaXNwb3NlJyk7XG5cbiAgZmVlZGJhY2tDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IHBhc3N3b3JkVmFsdWUgPT09ICcnID8gJ25vbmUnIDogJ2Jsb2NrJztcblxuICBpZiAocmVzdWx0LmZlZWRiYWNrLndhcm5pbmcgIT09ICcnKSB7XG4gICAgaWYgKHJlc3VsdC5mZWVkYmFjay53YXJuaW5nIGluIGhpbnRzKSB7XG4gICAgICBwb3BvdmVyQ29udGVudC5wdXNoKGhpbnRzW3Jlc3VsdC5mZWVkYmFjay53YXJuaW5nXSk7XG4gICAgfVxuICB9XG5cbiAgcmVzdWx0LmZlZWRiYWNrLnN1Z2dlc3Rpb25zLmZvckVhY2goKHN1Z2dlc3Rpb24pID0+IHtcbiAgICBpZiAoc3VnZ2VzdGlvbiBpbiBoaW50cykge1xuICAgICAgcG9wb3ZlckNvbnRlbnQucHVzaChoaW50c1tzdWdnZXN0aW9uXSk7XG4gICAgfVxuICB9KTtcblxuICAkKGVsZW1lbnRJbnB1dCkucG9wb3Zlcih7XG4gICAgaHRtbDogdHJ1ZSxcbiAgICBwbGFjZW1lbnQ6ICd0b3AnLFxuICAgIGNvbnRlbnQ6IHBvcG92ZXJDb250ZW50LmpvaW4oJzxici8+JyksXG4gIH0pLnBvcG92ZXIoJ3Nob3cnKTtcblxuICBjb25zdCBwYXNzd29yZExlbmd0aFZhbGlkID0gcGFzc3dvcmRMZW5ndGggPj0gcGFyc2VJbnQoZWxlbWVudElucHV0LmRhdGFzZXQubWlubGVuZ3RoLCAxMClcbiAgICAmJiBwYXNzd29yZExlbmd0aCA8PSBwYXJzZUludChlbGVtZW50SW5wdXQuZGF0YXNldC5tYXhsZW5ndGgsIDEwKTtcbiAgY29uc3QgcGFzc3dvcmRTY29yZVZhbGlkID0gcGFyc2VJbnQoZWxlbWVudElucHV0LmRhdGFzZXQubWluc2NvcmUsIDEwKSA8PSByZXN1bHQuc2NvcmU7XG5cbiAgZmVlZGJhY2tDb250YWluZXIucXVlcnlTZWxlY3RvcihQYXNzd29yZFBvbGljeU1hcC5yZXF1aXJlbWVudExlbmd0aEljb24pLmNsYXNzTGlzdC50b2dnbGUoXG4gICAgJ3RleHQtc3VjY2VzcycsXG4gICAgcGFzc3dvcmRMZW5ndGhWYWxpZCxcbiAgKTtcblxuICBlbGVtZW50SWNvbi5jbGFzc0xpc3QudG9nZ2xlKFxuICAgICd0ZXh0LXN1Y2Nlc3MnLFxuICAgIHBhc3N3b3JkU2NvcmVWYWxpZCxcbiAgKTtcblxuICAvLyBDaGFuZ2UgaW5wdXQgYm9yZGVyIGNvbG9yIGRlcGVuZGluZyBvbiB0aGUgdmFsaWRpdHlcbiAgZWxlbWVudElucHV0XG4gICAgLmNsYXNzTGlzdC5yZW1vdmUoJ2JvcmRlci1zdWNjZXNzJywgJ2JvcmRlci1kYW5nZXInKTtcbiAgZWxlbWVudElucHV0XG4gICAgLmNsYXNzTGlzdC5hZGQocGFzc3dvcmRTY29yZVZhbGlkICYmIHBhc3N3b3JkTGVuZ3RoVmFsaWQgPyAnYm9yZGVyLXN1Y2Nlc3MnIDogJ2JvcmRlci1kYW5nZXInKTtcbiAgZWxlbWVudElucHV0XG4gICAgLmNsYXNzTGlzdC5hZGQoJ2Zvcm0tY29udHJvbCcsICdib3JkZXInKTtcblxuICBjb25zdCBwZXJjZW50YWdlID0gKHJlc3VsdC5zY29yZSAqIDIwKSArIDIwO1xuICBjb25zdCBwcm9ncmVzc0JhciA9IGZlZWRiYWNrQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoUGFzc3dvcmRQb2xpY3lNYXAucHJvZ3Jlc3NCYXIpO1xuXG4gIC8vIGluY3JlYXNlIGFuZCBkZWNyZWFzZSBwcm9ncmVzcyBiYXJcbiAgaWYgKHByb2dyZXNzQmFyKSB7XG4gICAgcHJvZ3Jlc3NCYXIuc3R5bGUud2lkdGggPSBgJHtwZXJjZW50YWdlfSVgO1xuICAgIHByb2dyZXNzQmFyLmNsYXNzTGlzdC5yZW1vdmUoJ2JnLXN1Y2Nlc3MnLCAnYmctZGFuZ2VyJywgJ2JnLXdhcm5pbmcnKTtcbiAgICBwcm9ncmVzc0Jhci5jbGFzc0xpc3QuYWRkKGZlZWRiYWNrLmNvbG9yKTtcbiAgfVxufTtcblxuLy8gTm90IHRlc3RhYmxlIGJlY2F1c2UgaXQgbWFuaXB1bGF0ZXMgU1ZHIGVsZW1lbnRzLCB1bnN1cHBvcnRlZCBieSBKU0RvbVxuY29uc3QgdXNlUGFzc3dvcmRQb2xpY3kgPSAoc2VsZWN0b3IpID0+IHtcbiAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGlucHV0Q29sdW1uID0gZWxlbWVudD8ucXVlcnlTZWxlY3RvcihQYXNzd29yZFBvbGljeU1hcC5pbnB1dENvbHVtbik7XG4gICAgY29uc3QgZWxlbWVudElucHV0ID0gZWxlbWVudD8ucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICBjb25zdCB0ZW1wbGF0ZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBmZWVkYmFja1RlbXBsYXRlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihQYXNzd29yZFBvbGljeU1hcC50ZW1wbGF0ZSk7XG4gICAgbGV0IGZlZWRiYWNrQ29udGFpbmVyO1xuXG4gICAgaWYgKGZlZWRiYWNrVGVtcGxhdGUgJiYgZWxlbWVudCAmJiBpbnB1dENvbHVtbiAmJiBlbGVtZW50SW5wdXQpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5pbm5lckhUTUwgPSBmZWVkYmFja1RlbXBsYXRlLmlubmVySFRNTDtcbiAgICAgIGlucHV0Q29sdW1uLmFwcGVuZCh0ZW1wbGF0ZUVsZW1lbnQpO1xuICAgICAgZmVlZGJhY2tDb250YWluZXIgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoUGFzc3dvcmRQb2xpY3lNYXAuY29udGFpbmVyKTtcblxuICAgICAgaWYgKGZlZWRiYWNrQ29udGFpbmVyKSB7XG4gICAgICAgIGNvbnN0IGhpbnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihQYXNzd29yZFBvbGljeU1hcC5oaW50KTtcblxuICAgICAgICBpZiAoaGludEVsZW1lbnQpIHtcbiAgICAgICAgICBjb25zdCBoaW50cyA9IEpTT04ucGFyc2UoaGludEVsZW1lbnQuaW5uZXJIVE1MKTtcblxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgY29uc3QgcGFzc3dvcmRSZXF1aXJlbWVudHNMZW5ndGggPSBmZWVkYmFja0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLnJlcXVpcmVtZW50TGVuZ3RoKTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgIGNvbnN0IHBhc3N3b3JkUmVxdWlyZW1lbnRzU2NvcmUgPSBmZWVkYmFja0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFBhc3N3b3JkUG9saWN5TWFwLnJlcXVpcmVtZW50U2NvcmUpO1xuICAgICAgICAgIGNvbnN0IHBhc3N3b3JkTGVuZ3RoVGV4dCA9IHBhc3N3b3JkUmVxdWlyZW1lbnRzTGVuZ3RoPy5xdWVyeVNlbGVjdG9yKCdzcGFuJyk7XG4gICAgICAgICAgY29uc3QgcGFzc3dvcmRSZXF1aXJlbWVudHNUZXh0ID0gcGFzc3dvcmRSZXF1aXJlbWVudHNTY29yZT8ucXVlcnlTZWxlY3Rvcignc3BhbicpO1xuXG4gICAgICAgICAgaWYgKHBhc3N3b3JkTGVuZ3RoVGV4dCAmJiBwYXNzd29yZFJlcXVpcmVtZW50c0xlbmd0aCAmJiBwYXNzd29yZFJlcXVpcmVtZW50c0xlbmd0aC5kYXRhc2V0LnRyYW5zbGF0aW9uKSB7XG4gICAgICAgICAgICBwYXNzd29yZExlbmd0aFRleHQuaW5uZXJUZXh0ID0gc3ByaW50ZihcbiAgICAgICAgICAgICAgcGFzc3dvcmRSZXF1aXJlbWVudHNMZW5ndGguZGF0YXNldC50cmFuc2xhdGlvbixcbiAgICAgICAgICAgICAgZWxlbWVudElucHV0LmRhdGFzZXQubWlubGVuZ3RoLFxuICAgICAgICAgICAgICBlbGVtZW50SW5wdXQuZGF0YXNldC5tYXhsZW5ndGgsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXNzd29yZFJlcXVpcmVtZW50c1RleHQgJiYgcGFzc3dvcmRSZXF1aXJlbWVudHNTY29yZSAmJiBwYXNzd29yZFJlcXVpcmVtZW50c1Njb3JlLmRhdGFzZXQudHJhbnNsYXRpb24pIHtcbiAgICAgICAgICAgIHBhc3N3b3JkUmVxdWlyZW1lbnRzVGV4dC5pbm5lclRleHQgPSBzcHJpbnRmKFxuICAgICAgICAgICAgICBwYXNzd29yZFJlcXVpcmVtZW50c1Njb3JlLmRhdGFzZXQudHJhbnNsYXRpb24sXG4gICAgICAgICAgICAgIGhpbnRzW2VsZW1lbnRJbnB1dC5kYXRhc2V0Lm1pbnNjb3JlXSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICBlbGVtZW50SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAoKSA9PiB3YXRjaFBhc3N3b3JkKGVsZW1lbnRJbnB1dCwgZmVlZGJhY2tDb250YWluZXIsIGhpbnRzKSk7XG4gICAgICAgICAgZWxlbWVudElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7XG4gICAgICAgICAgICAkKGVsZW1lbnRJbnB1dCkucG9wb3ZlcignZGlzcG9zZScpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZW1lbnQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogbmV3IEVycm9yKFBBU1NXT1JEX1BPTElDWV9FUlJPUiksXG4gICAgfTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1c2VQYXNzd29yZFBvbGljeTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBwcmVzdGFzaG9wIGZyb20gJ3ByZXN0YXNob3AnO1xuaW1wb3J0IERyb3BEb3duIGZyb20gJy4vZHJvcC1kb3duJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9wTWVudSBleHRlbmRzIERyb3BEb3duIHtcbiAgaW5pdCgpIHtcbiAgICBsZXQgZWxtdENsYXNzO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuZWwuZmluZCgnbGknKS5vbignbW91c2VlbnRlciBtb3VzZWxlYXZlJywgKGUpID0+IHtcbiAgICAgIGlmICh0aGlzLmVsLnBhcmVudCgpLmhhc0NsYXNzKCdtb2JpbGUnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50VGFyZ2V0Q2xhc3MgPSAkKGUuY3VycmVudFRhcmdldCkuYXR0cignY2xhc3MnKTtcblxuICAgICAgaWYgKGVsbXRDbGFzcyAhPT0gY3VycmVudFRhcmdldENsYXNzKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzZXNTZWxlY3RlZCA9IEFycmF5LnByb3RvdHlwZS5zbGljZVxuICAgICAgICAgIC5jYWxsKGUuY3VycmVudFRhcmdldC5jbGFzc0xpc3QpXG4gICAgICAgICAgLm1hcCgoZWxlbSkgPT4gKHR5cGVvZiBlbGVtID09PSAnc3RyaW5nJyA/IGAuJHtlbGVtfWAgOiBmYWxzZSkpO1xuXG4gICAgICAgIGVsbXRDbGFzcyA9IGNsYXNzZXNTZWxlY3RlZC5qb2luKCcnKTtcblxuICAgICAgICBpZiAoZWxtdENsYXNzICYmICQoZS50YXJnZXQpLmRhdGEoJ2RlcHRoJykgPT09IDApIHtcbiAgICAgICAgICAkKGAke2VsbXRDbGFzc30gLmpzLXN1Yi1tZW51YCkuY3NzKHtcbiAgICAgICAgICAgIHRvcDogJChgJHtlbG10Q2xhc3N9YCkuaGVpZ2h0KCkgKyAkKGAke2VsbXRDbGFzc31gKS5wb3NpdGlvbigpLnRvcCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgICQoJyNtZW51LWljb24nKS5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICAkKCcjbW9iaWxlX3RvcF9tZW51X3dyYXBwZXInKS50b2dnbGUoKTtcbiAgICAgIHNlbGYudG9nZ2xlTW9iaWxlTWVudSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5lbC5vbignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuZWwucGFyZW50KCkuaGFzQ2xhc3MoJ21vYmlsZScpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG5cbiAgICBwcmVzdGFzaG9wLm9uKCdyZXNwb25zaXZlIHVwZGF0ZScsICgpID0+IHtcbiAgICAgICQoJy5qcy1zdWItbWVudScpLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG4gICAgICBzZWxmLnRvZ2dsZU1vYmlsZU1lbnUoKTtcbiAgICB9KTtcbiAgICBzdXBlci5pbml0KCk7XG4gIH1cblxuICB0b2dnbGVNb2JpbGVNZW51KCkge1xuICAgICQoJyNoZWFkZXInKS50b2dnbGVDbGFzcygnaXMtb3BlbicpO1xuICAgIGlmICgkKCcjbW9iaWxlX3RvcF9tZW51X3dyYXBwZXInKS5pcygnOnZpc2libGUnKSkge1xuICAgICAgJCgnI25vdGlmaWNhdGlvbnMsICN3cmFwcGVyLCAjZm9vdGVyJykuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkKCcjbm90aWZpY2F0aW9ucywgI3dyYXBwZXIsICNmb290ZXInKS5zaG93KCk7XG4gICAgfVxuICB9XG59XG4iLCJcImZ1bmN0aW9uXCIhPXR5cGVvZiBPYmplY3QuY3JlYXRlJiYoT2JqZWN0LmNyZWF0ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBvKCl7fXJldHVybiBvLnByb3RvdHlwZT10LG5ldyBvfSksZnVuY3Rpb24odCxvLGkscyl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e19wb3NpdGlvbkNsYXNzZXM6W1wiYm90dG9tLWxlZnRcIixcImJvdHRvbS1yaWdodFwiLFwidG9wLXJpZ2h0XCIsXCJ0b3AtbGVmdFwiLFwiYm90dG9tLWNlbnRlclwiLFwidG9wLWNlbnRlclwiLFwibWlkLWNlbnRlclwiXSxfZGVmYXVsdEljb25zOltcInN1Y2Nlc3NcIixcImVycm9yXCIsXCJpbmZvXCIsXCJ3YXJuaW5nXCJdLGluaXQ6ZnVuY3Rpb24obyxpKXt0aGlzLnByZXBhcmVPcHRpb25zKG8sdC50b2FzdC5vcHRpb25zKSx0aGlzLnByb2Nlc3MoKX0scHJlcGFyZU9wdGlvbnM6ZnVuY3Rpb24obyxpKXt2YXIgcz17fTtcInN0cmluZ1wiPT10eXBlb2Ygb3x8byBpbnN0YW5jZW9mIEFycmF5P3MudGV4dD1vOnM9byx0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30saSxzKX0scHJvY2VzczpmdW5jdGlvbigpe3RoaXMuc2V0dXAoKSx0aGlzLmFkZFRvRG9tKCksdGhpcy5wb3NpdGlvbigpLHRoaXMuYmluZFRvYXN0KCksdGhpcy5hbmltYXRlKCl9LHNldHVwOmZ1bmN0aW9uKCl7dmFyIG89XCJcIjtpZih0aGlzLl90b2FzdEVsPXRoaXMuX3RvYXN0RWx8fHQoXCI8ZGl2PjwvZGl2PlwiLHtcImNsYXNzXCI6XCJqcS10b2FzdC1zaW5nbGVcIn0pLG8rPSc8c3BhbiBjbGFzcz1cImpxLXRvYXN0LWxvYWRlclwiPjwvc3Bhbj4nLHRoaXMub3B0aW9ucy5hbGxvd1RvYXN0Q2xvc2UmJihvKz0nPHNwYW4gY2xhc3M9XCJjbG9zZS1qcS10b2FzdC1zaW5nbGVcIj4mdGltZXM7PC9zcGFuPicpLHRoaXMub3B0aW9ucy50ZXh0IGluc3RhbmNlb2YgQXJyYXkpe3RoaXMub3B0aW9ucy5oZWFkaW5nJiYobys9JzxoMiBjbGFzcz1cImpxLXRvYXN0LWhlYWRpbmdcIj4nK3RoaXMub3B0aW9ucy5oZWFkaW5nK1wiPC9oMj5cIiksbys9Jzx1bCBjbGFzcz1cImpxLXRvYXN0LXVsXCI+Jztmb3IodmFyIGk9MDtpPHRoaXMub3B0aW9ucy50ZXh0Lmxlbmd0aDtpKyspbys9JzxsaSBjbGFzcz1cImpxLXRvYXN0LWxpXCIgaWQ9XCJqcS10b2FzdC1pdGVtLScraSsnXCI+Jyt0aGlzLm9wdGlvbnMudGV4dFtpXStcIjwvbGk+XCI7bys9XCI8L3VsPlwifWVsc2UgdGhpcy5vcHRpb25zLmhlYWRpbmcmJihvKz0nPGgyIGNsYXNzPVwianEtdG9hc3QtaGVhZGluZ1wiPicrdGhpcy5vcHRpb25zLmhlYWRpbmcrXCI8L2gyPlwiKSxvKz10aGlzLm9wdGlvbnMudGV4dDt0aGlzLl90b2FzdEVsLmh0bWwobyksdGhpcy5vcHRpb25zLmJnQ29sb3IhPT0hMSYmdGhpcy5fdG9hc3RFbC5jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yXCIsdGhpcy5vcHRpb25zLmJnQ29sb3IpLHRoaXMub3B0aW9ucy50ZXh0Q29sb3IhPT0hMSYmdGhpcy5fdG9hc3RFbC5jc3MoXCJjb2xvclwiLHRoaXMub3B0aW9ucy50ZXh0Q29sb3IpLHRoaXMub3B0aW9ucy50ZXh0QWxpZ24mJnRoaXMuX3RvYXN0RWwuY3NzKFwidGV4dC1hbGlnblwiLHRoaXMub3B0aW9ucy50ZXh0QWxpZ24pLHRoaXMub3B0aW9ucy5pY29uIT09ITEmJih0aGlzLl90b2FzdEVsLmFkZENsYXNzKFwianEtaGFzLWljb25cIiksLTEhPT10LmluQXJyYXkodGhpcy5vcHRpb25zLmljb24sdGhpcy5fZGVmYXVsdEljb25zKSYmdGhpcy5fdG9hc3RFbC5hZGRDbGFzcyhcImpxLWljb24tXCIrdGhpcy5vcHRpb25zLmljb24pKSx0aGlzLm9wdGlvbnNbXCJjbGFzc1wiXSE9PSExJiZ0aGlzLl90b2FzdEVsLmFkZENsYXNzKHRoaXMub3B0aW9uc1tcImNsYXNzXCJdKX0scG9zaXRpb246ZnVuY3Rpb24oKXtcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5vcHRpb25zLnBvc2l0aW9uJiYtMSE9PXQuaW5BcnJheSh0aGlzLm9wdGlvbnMucG9zaXRpb24sdGhpcy5fcG9zaXRpb25DbGFzc2VzKT9cImJvdHRvbS1jZW50ZXJcIj09PXRoaXMub3B0aW9ucy5wb3NpdGlvbj90aGlzLl9jb250YWluZXIuY3NzKHtsZWZ0OnQobykub3V0ZXJXaWR0aCgpLzItdGhpcy5fY29udGFpbmVyLm91dGVyV2lkdGgoKS8yLGJvdHRvbToyMH0pOlwidG9wLWNlbnRlclwiPT09dGhpcy5vcHRpb25zLnBvc2l0aW9uP3RoaXMuX2NvbnRhaW5lci5jc3Moe2xlZnQ6dChvKS5vdXRlcldpZHRoKCkvMi10aGlzLl9jb250YWluZXIub3V0ZXJXaWR0aCgpLzIsdG9wOjIwfSk6XCJtaWQtY2VudGVyXCI9PT10aGlzLm9wdGlvbnMucG9zaXRpb24/dGhpcy5fY29udGFpbmVyLmNzcyh7bGVmdDp0KG8pLm91dGVyV2lkdGgoKS8yLXRoaXMuX2NvbnRhaW5lci5vdXRlcldpZHRoKCkvMix0b3A6dChvKS5vdXRlckhlaWdodCgpLzItdGhpcy5fY29udGFpbmVyLm91dGVySGVpZ2h0KCkvMn0pOnRoaXMuX2NvbnRhaW5lci5hZGRDbGFzcyh0aGlzLm9wdGlvbnMucG9zaXRpb24pOlwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucG9zaXRpb24/dGhpcy5fY29udGFpbmVyLmNzcyh7dG9wOnRoaXMub3B0aW9ucy5wb3NpdGlvbi50b3A/dGhpcy5vcHRpb25zLnBvc2l0aW9uLnRvcDpcImF1dG9cIixib3R0b206dGhpcy5vcHRpb25zLnBvc2l0aW9uLmJvdHRvbT90aGlzLm9wdGlvbnMucG9zaXRpb24uYm90dG9tOlwiYXV0b1wiLGxlZnQ6dGhpcy5vcHRpb25zLnBvc2l0aW9uLmxlZnQ/dGhpcy5vcHRpb25zLnBvc2l0aW9uLmxlZnQ6XCJhdXRvXCIscmlnaHQ6dGhpcy5vcHRpb25zLnBvc2l0aW9uLnJpZ2h0P3RoaXMub3B0aW9ucy5wb3NpdGlvbi5yaWdodDpcImF1dG9cIn0pOnRoaXMuX2NvbnRhaW5lci5hZGRDbGFzcyhcImJvdHRvbS1sZWZ0XCIpfSxiaW5kVG9hc3Q6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3RvYXN0RWwub24oXCJhZnRlclNob3duXCIsZnVuY3Rpb24oKXt0LnByb2Nlc3NMb2FkZXIoKX0pLHRoaXMuX3RvYXN0RWwuZmluZChcIi5jbG9zZS1qcS10b2FzdC1zaW5nbGVcIikub24oXCJjbGlja1wiLGZ1bmN0aW9uKG8pe28ucHJldmVudERlZmF1bHQoKSxcImZhZGVcIj09PXQub3B0aW9ucy5zaG93SGlkZVRyYW5zaXRpb24/KHQuX3RvYXN0RWwudHJpZ2dlcihcImJlZm9yZUhpZGVcIiksdC5fdG9hc3RFbC5mYWRlT3V0KGZ1bmN0aW9uKCl7dC5fdG9hc3RFbC50cmlnZ2VyKFwiYWZ0ZXJIaWRkZW5cIil9KSk6XCJzbGlkZVwiPT09dC5vcHRpb25zLnNob3dIaWRlVHJhbnNpdGlvbj8odC5fdG9hc3RFbC50cmlnZ2VyKFwiYmVmb3JlSGlkZVwiKSx0Ll90b2FzdEVsLnNsaWRlVXAoZnVuY3Rpb24oKXt0Ll90b2FzdEVsLnRyaWdnZXIoXCJhZnRlckhpZGRlblwiKX0pKToodC5fdG9hc3RFbC50cmlnZ2VyKFwiYmVmb3JlSGlkZVwiKSx0Ll90b2FzdEVsLmhpZGUoZnVuY3Rpb24oKXt0Ll90b2FzdEVsLnRyaWdnZXIoXCJhZnRlckhpZGRlblwiKX0pKX0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3B0aW9ucy5iZWZvcmVTaG93JiZ0aGlzLl90b2FzdEVsLm9uKFwiYmVmb3JlU2hvd1wiLGZ1bmN0aW9uKCl7dC5vcHRpb25zLmJlZm9yZVNob3coKX0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3B0aW9ucy5hZnRlclNob3duJiZ0aGlzLl90b2FzdEVsLm9uKFwiYWZ0ZXJTaG93blwiLGZ1bmN0aW9uKCl7dC5vcHRpb25zLmFmdGVyU2hvd24oKX0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3B0aW9ucy5iZWZvcmVIaWRlJiZ0aGlzLl90b2FzdEVsLm9uKFwiYmVmb3JlSGlkZVwiLGZ1bmN0aW9uKCl7dC5vcHRpb25zLmJlZm9yZUhpZGUoKX0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3B0aW9ucy5hZnRlckhpZGRlbiYmdGhpcy5fdG9hc3RFbC5vbihcImFmdGVySGlkZGVuXCIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMuYWZ0ZXJIaWRkZW4oKX0pfSxhZGRUb0RvbTpmdW5jdGlvbigpe3ZhciBvPXQoXCIuanEtdG9hc3Qtd3JhcFwiKTtpZigwPT09by5sZW5ndGg/KG89dChcIjxkaXY+PC9kaXY+XCIse1wiY2xhc3NcIjpcImpxLXRvYXN0LXdyYXBcIn0pLHQoXCJib2R5XCIpLmFwcGVuZChvKSk6KCF0aGlzLm9wdGlvbnMuc3RhY2t8fGlzTmFOKHBhcnNlSW50KHRoaXMub3B0aW9ucy5zdGFjaywxMCkpKSYmby5lbXB0eSgpLG8uZmluZChcIi5qcS10b2FzdC1zaW5nbGU6aGlkZGVuXCIpLnJlbW92ZSgpLG8uYXBwZW5kKHRoaXMuX3RvYXN0RWwpLHRoaXMub3B0aW9ucy5zdGFjayYmIWlzTmFOKHBhcnNlSW50KHRoaXMub3B0aW9ucy5zdGFjayksMTApKXt2YXIgaT1vLmZpbmQoXCIuanEtdG9hc3Qtc2luZ2xlXCIpLmxlbmd0aCxzPWktdGhpcy5vcHRpb25zLnN0YWNrO3M+MCYmdChcIi5qcS10b2FzdC13cmFwXCIpLmZpbmQoXCIuanEtdG9hc3Qtc2luZ2xlXCIpLnNsaWNlKDAscykucmVtb3ZlKCl9dGhpcy5fY29udGFpbmVyPW99LGNhbkF1dG9IaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5oaWRlQWZ0ZXIhPT0hMSYmIWlzTmFOKHBhcnNlSW50KHRoaXMub3B0aW9ucy5oaWRlQWZ0ZXIsMTApKX0scHJvY2Vzc0xvYWRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLmNhbkF1dG9IaWRlKCl8fHRoaXMub3B0aW9ucy5sb2FkZXI9PT0hMSlyZXR1cm4hMTt2YXIgdD10aGlzLl90b2FzdEVsLmZpbmQoXCIuanEtdG9hc3QtbG9hZGVyXCIpLG89KHRoaXMub3B0aW9ucy5oaWRlQWZ0ZXItNDAwKS8xZTMrXCJzXCIsaT10aGlzLm9wdGlvbnMubG9hZGVyQmcscz10LmF0dHIoXCJzdHlsZVwiKXx8XCJcIjtzPXMuc3Vic3RyaW5nKDAscy5pbmRleE9mKFwiLXdlYmtpdC10cmFuc2l0aW9uXCIpKSxzKz1cIi13ZWJraXQtdHJhbnNpdGlvbjogd2lkdGggXCIrbytcIiBlYXNlLWluOyAgICAgICAgICAgICAgICAgICAgICAgLW8tdHJhbnNpdGlvbjogd2lkdGggXCIrbytcIiBlYXNlLWluOyAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggXCIrbytcIiBlYXNlLWluOyAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIraStcIjtcIix0LmF0dHIoXCJzdHlsZVwiLHMpLmFkZENsYXNzKFwianEtdG9hc3QtbG9hZGVkXCIpfSxhbmltYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLl90b2FzdEVsLmhpZGUoKSx0aGlzLl90b2FzdEVsLnRyaWdnZXIoXCJiZWZvcmVTaG93XCIpLFwiZmFkZVwiPT09dGhpcy5vcHRpb25zLnNob3dIaWRlVHJhbnNpdGlvbi50b0xvd2VyQ2FzZSgpP3RoaXMuX3RvYXN0RWwuZmFkZUluKGZ1bmN0aW9uKCl7dC5fdG9hc3RFbC50cmlnZ2VyKFwiYWZ0ZXJTaG93blwiKX0pOlwic2xpZGVcIj09PXRoaXMub3B0aW9ucy5zaG93SGlkZVRyYW5zaXRpb24udG9Mb3dlckNhc2UoKT90aGlzLl90b2FzdEVsLnNsaWRlRG93bihmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVyU2hvd25cIil9KTp0aGlzLl90b2FzdEVsLnNob3coZnVuY3Rpb24oKXt0Ll90b2FzdEVsLnRyaWdnZXIoXCJhZnRlclNob3duXCIpfSksdGhpcy5jYW5BdXRvSGlkZSgpKXt2YXIgdD10aGlzO28uc2V0VGltZW91dChmdW5jdGlvbigpe1wiZmFkZVwiPT09dC5vcHRpb25zLnNob3dIaWRlVHJhbnNpdGlvbi50b0xvd2VyQ2FzZSgpPyh0Ll90b2FzdEVsLnRyaWdnZXIoXCJiZWZvcmVIaWRlXCIpLHQuX3RvYXN0RWwuZmFkZU91dChmdW5jdGlvbigpe3QuX3RvYXN0RWwudHJpZ2dlcihcImFmdGVySGlkZGVuXCIpfSkpOlwic2xpZGVcIj09PXQub3B0aW9ucy5zaG93SGlkZVRyYW5zaXRpb24udG9Mb3dlckNhc2UoKT8odC5fdG9hc3RFbC50cmlnZ2VyKFwiYmVmb3JlSGlkZVwiKSx0Ll90b2FzdEVsLnNsaWRlVXAoZnVuY3Rpb24oKXt0Ll90b2FzdEVsLnRyaWdnZXIoXCJhZnRlckhpZGRlblwiKX0pKToodC5fdG9hc3RFbC50cmlnZ2VyKFwiYmVmb3JlSGlkZVwiKSx0Ll90b2FzdEVsLmhpZGUoZnVuY3Rpb24oKXt0Ll90b2FzdEVsLnRyaWdnZXIoXCJhZnRlckhpZGRlblwiKX0pKX0sdGhpcy5vcHRpb25zLmhpZGVBZnRlcil9fSxyZXNldDpmdW5jdGlvbihvKXtcImFsbFwiPT09bz90KFwiLmpxLXRvYXN0LXdyYXBcIikucmVtb3ZlKCk6dGhpcy5fdG9hc3RFbC5yZW1vdmUoKX0sdXBkYXRlOmZ1bmN0aW9uKHQpe3RoaXMucHJlcGFyZU9wdGlvbnModCx0aGlzLm9wdGlvbnMpLHRoaXMuc2V0dXAoKSx0aGlzLmJpbmRUb2FzdCgpfX07dC50b2FzdD1mdW5jdGlvbih0KXt2YXIgbz1PYmplY3QuY3JlYXRlKG4pO3JldHVybiBvLmluaXQodCx0aGlzKSx7cmVzZXQ6ZnVuY3Rpb24odCl7by5yZXNldCh0KX0sdXBkYXRlOmZ1bmN0aW9uKHQpe28udXBkYXRlKHQpfX19LHQudG9hc3Qub3B0aW9ucz17dGV4dDpcIlwiLGhlYWRpbmc6XCJcIixzaG93SGlkZVRyYW5zaXRpb246XCJmYWRlXCIsYWxsb3dUb2FzdENsb3NlOiEwLGhpZGVBZnRlcjozZTMsbG9hZGVyOiEwLGxvYWRlckJnOlwiIzlFQzYwMFwiLHN0YWNrOjUscG9zaXRpb246XCJib3R0b20tbGVmdFwiLGJnQ29sb3I6ITEsdGV4dENvbG9yOiExLHRleHRBbGlnbjpcImxlZnRcIixpY29uOiExLGJlZm9yZVNob3c6ZnVuY3Rpb24oKXt9LGFmdGVyU2hvd246ZnVuY3Rpb24oKXt9LGJlZm9yZUhpZGU6ZnVuY3Rpb24oKXt9LGFmdGVySGlkZGVuOmZ1bmN0aW9uKCl7fX19KGpRdWVyeSx3aW5kb3csZG9jdW1lbnQpOyIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuaW1wb3J0IHByZXN0YXNob3AgZnJvbSAncHJlc3Rhc2hvcCc7XG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICdqcXVlcnktdG9hc3QtcGx1Z2luJztcbmltcG9ydCAnanF1ZXJ5LXRvYXN0LXBsdWdpbi9kaXN0L2pxdWVyeS50b2FzdC5taW4uY3NzJztcblxuJCgoKSA9PiB7XG4gIHByZXN0YXNob3AuYmxvY2tjYXJ0ID0gcHJlc3Rhc2hvcC5ibG9ja2NhcnQgfHwge307XG4gIGNvbnN0IHNob3dNb2RhbCA9IHByZXN0YXNob3AuYmxvY2tjYXJ0LnNob3dNb2RhbFxuICAgIHx8IGZ1bmN0aW9uIChtb2RhbCkge1xuICAgICAgY29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgICAkYm9keS5hcHBlbmQobW9kYWwpO1xuICAgICAgJCgnI2Jsb2NrY2FydC1tb2RhbCcpLm1vZGFsKCk7XG4gICAgICBjb25zb2xlLmxvZygnY2FsbGVkJyk7XG4gICAgICAkYm9keS5vbmUoJ2NsaWNrJywgJyNibG9ja2NhcnQtbW9kYWwnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5pZCA9PT0gJ2Jsb2NrY2FydC1tb2RhbCcpIHtcbiAgICAgICAgICAkLm1vZGFsLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gIHByZXN0YXNob3Aub24oJ3VwZGF0ZUNhcnQnLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCByZWZyZXNoVVJMID0gJCgnLmJsb2NrY2FydCcpLmRhdGEoJ3JlZnJlc2gtdXJsJyk7XG4gICAgbGV0IHJlcXVlc3REYXRhID0ge307XG5cbiAgICBpZiAoXG4gICAgICBldmVudFxuICAgICAgJiYgZXZlbnQucmVhc29uXG4gICAgICAmJiB0eXBlb2YgZXZlbnQucmVzcCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICYmICFldmVudC5yZXNwLmhhc0Vycm9yXG4gICAgKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IHtcbiAgICAgICAgaWRfY3VzdG9taXphdGlvbjogZXZlbnQucmVhc29uLmlkQ3VzdG9taXphdGlvbixcbiAgICAgICAgaWRfcHJvZHVjdF9hdHRyaWJ1dGU6IGV2ZW50LnJlYXNvbi5pZFByb2R1Y3RBdHRyaWJ1dGUsXG4gICAgICAgIGlkX3Byb2R1Y3Q6IGV2ZW50LnJlYXNvbi5pZFByb2R1Y3QsXG4gICAgICAgIGFjdGlvbjogZXZlbnQucmVhc29uLmxpbmtBY3Rpb24sXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQucmVzcCAmJiBldmVudC5yZXNwLmhhc0Vycm9yKSB7XG4gICAgICBwcmVzdGFzaG9wLmVtaXQoJ3Nob3dFcnJvck5leHRUb0FkZHRvQ2FydEJ1dHRvbicsIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBldmVudC5yZXNwLmVycm9ycy5qb2luKCc8YnIvPicpLFxuICAgICAgfSk7XG4gICAgfVxuICAgICQucG9zdChyZWZyZXNoVVJMLCByZXF1ZXN0RGF0YSlcbiAgICAgIC50aGVuKChyZXNwKSA9PiB7XG4gICAgICAgICQoJy5ibG9ja2NhcnQnKS5yZXBsYWNlV2l0aCgkKHJlc3AucHJldmlldykuZmluZCgnLmJsb2NrY2FydCcpKTtcbiAgICAgICAgaWYgKHJlc3AubW9kYWwpIHtcbiAgICAgICAgICAkLnRvYXN0KHtcbiAgICAgICAgICAgIGhlYWRpbmc6ICdBZGRlZCB0byBDYXJ0JyxcbiAgICAgICAgICAgIHRleHQ6ICdZb3UgY2FuIGNoZWNrb3V0IG9yIGNvbnRpbnVlIHNob3BwaW5nLicsXG4gICAgICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgICAgICB0b3A6ICcxMDBweCcsXG4gICAgICAgICAgICAgIHJpZ2h0OiAnMjBweCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmdDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICAgICAgdGV4dENvbG9yOiAnIzExMTgyNycsXG4gICAgICAgICAgICBsb2FkZXJCZzogJyMxNzI1NTQnLFxuICAgICAgICAgICAgY2xhc3M6ICdyb3VuZGVkLW5vbmUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuZmFpbCgocmVzcCkgPT4ge1xuICAgICAgICBwcmVzdGFzaG9wLmVtaXQoJ2hhbmRsZUVycm9yJywge1xuICAgICAgICAgIGV2ZW50VHlwZTogJ3VwZGF0ZVNob3BwaW5nQ2FydCcsXG4gICAgICAgICAgcmVzcCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfSk7XG59KTtcbiIsIi8qKlxuICogalF1ZXJ5Lm9mZmNhbnZhcyB2My40LjcgLSBFYXN5IHRvIHVzZSBqUXVlcnkgb2ZmY2FudmFzIHBsdWdpbi5cbiAqIENvcHlyaWdodCAyMDE2IExhcnMgR3JhdWJuZXIgLSBodHRwOi8vbGdyYXVibmVyLmdpdGh1Yi5pby9qcXVlcnktb2ZmY2FudmFzL1xuICogTGljZW5zZTogTUlUXG4gKi9cbiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbih0LHMpe3JldHVybiB2b2lkIDA9PT1zJiYocz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3JlcXVpcmUoXCJqcXVlcnlcIik6cmVxdWlyZShcImpxdWVyeVwiKSh0KSksZShzKSxzfTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImpxdWVyeSBcIl0sZSk6ZShqUXVlcnkpfSh0aGlzLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUodCxlLHMpe3ZhciBpO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMsbz1hcmd1bWVudHMsaD1mdW5jdGlvbigpe2k9bnVsbCxzfHx0LmFwcGx5KG4sbyl9LGE9cyYmIWk7Y2xlYXJUaW1lb3V0KGkpLGk9c2V0VGltZW91dChoLGUpLGEmJnQuYXBwbHkobixvKX19ZnVuY3Rpb24gcyhlLHMpe3ZhciBuLG8saD10KGUpLmRhdGEoKTt0aGlzLiRlbD10KGUpO2ZvcihuIGluIGgpaC5oYXNPd25Qcm9wZXJ0eShuKSYmL15vZmZjYW52YXNbQS1aXSsvLnRlc3QobikmJihvPW5baS5sZW5ndGhdLnRvTG93ZXJDYXNlKCkrbi5zdWJzdHIoaS5sZW5ndGgrMSksaFtvXT1oW25dKTt0aGlzLnNldHRpbmdzPXQuZXh0ZW5kKCEwLHt9LHQuZm5baV0uZGVmYXVsdHMscyxoKSx0aGlzLm5hbWU9aSx0aGlzLiRlbC5kYXRhKHRoaXMubmFtZStcIi5vcHRzXCIsdGhpcy5zZXR0aW5ncyksdGhpcy5pbml0KCl9dmFyIGk9XCJvZmZjYW52YXNcIjt0LmV4dGVuZChzLnByb3RvdHlwZSx7c2V0SGVpZ2h0czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJG91dGVyV3JhcHBlci5oZWlnaHQoKTt0aGlzLiRlbC5kYXRhKHRoaXMubmFtZStcIi5vcHRzXCIpJiYodGhpcy4kZWxlbWVudC5jc3MoXCJoZWlnaHRcIix0KSx0aGlzLnNldHRpbmdzLm92ZXJsYXkmJnRoaXMuJG92ZXJsYXkuY3NzKFwiaGVpZ2h0XCIsdCkpfSxzaG93OmZ1bmN0aW9uKCl7dmFyIGU9e307dGhpcy52aXNpYmxlfHwodGhpcy4kY29udC5hZGRDbGFzcyh0aGlzLnNldHRpbmdzLmNsYXNzZXMub3BlbiksdGhpcy52aXNpYmxlPSEwLHRoaXMuJGVsLnRyaWdnZXIoXCJzaG93LlwiK3RoaXMubmFtZSksdGhpcy4kZWwudHJpZ2dlcihcInRvZ2dsZS5cIit0aGlzLm5hbWUsdGhpcy52aXNpYmxlKSx0aGlzLnNldEhlaWdodHMoKSxlW3RoaXMuc2V0dGluZ3Mub3JpZ2luXT10aGlzLmVmZmVjdHNbdGhpcy5zZXR0aW5ncy5lZmZlY3RdLnRvLHRoaXMuZWZmZWN0c1t0aGlzLnNldHRpbmdzLmVmZmVjdF0uJGVsLnZlbG9jaXR5KGUsdC5leHRlbmQoe2NvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy4kZWwudHJpZ2dlcihcInNob3duLlwiK3RoaXMubmFtZSksdGhpcy5zZXR0aW5ncy5vdmVybGF5JiZ0aGlzLiRvdmVybGF5Lm9uZShcImNsaWNrLlwiK3RoaXMubmFtZSxmdW5jdGlvbigpe3RoaXMuaGlkZSgpfS5iaW5kKHRoaXMpKX0uYmluZCh0aGlzKX0sdGhpcy5hbmltYXRpb25PcHRpb25zKSksdGhpcy5zZXR0aW5ncy5vdmVybGF5JiZ0aGlzLiRvdmVybGF5LnZlbG9jaXR5KHtvcGFjaXR5OjF9LHQuZXh0ZW5kKHtkaXNwbGF5OlwiYmxvY2tcIn0sdGhpcy5hbmltYXRpb25PcHRpb25zKSkpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy52aXNpYmxlJiYodGhpcy4kY29udC5yZW1vdmVDbGFzcyh0aGlzLnNldHRpbmdzLmNsYXNzZXMub3BlbiksdGhpcy52aXNpYmxlPSExLHRoaXMuJGVsLnRyaWdnZXIoXCJoaWRlLlwiK3RoaXMubmFtZSksdGhpcy4kZWwudHJpZ2dlcihcInRvZ2dsZS5cIit0aGlzLm5hbWUsdGhpcy52aXNpYmxlKSx0aGlzLmVmZmVjdHNbdGhpcy5zZXR0aW5ncy5lZmZlY3RdLiRlbC52ZWxvY2l0eShcInN0b3BcIikudmVsb2NpdHkoXCJyZXZlcnNlXCIsdC5leHRlbmQoe2NvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy4kZWwudHJpZ2dlcihcImhpZGRlbi5cIit0aGlzLm5hbWUpfS5iaW5kKHRoaXMpfSx0aGlzLmFuaW1hdGlvbk9wdGlvbnMpKSx0aGlzLnNldHRpbmdzLm92ZXJsYXkmJnRoaXMuJG92ZXJsYXkudmVsb2NpdHkoXCJzdG9wXCIpLnZlbG9jaXR5KFwicmV2ZXJzZVwiLHQuZXh0ZW5kKHtkaXNwbGF5Olwibm9uZVwifSx0aGlzLmFuaW1hdGlvbk9wdGlvbnMpKSl9LHRvZ2dsZTpmdW5jdGlvbigpe3JldHVybih0aGlzLnZpc2libGU/dGhpcy5oaWRlOnRoaXMuc2hvdykuY2FsbCh0aGlzKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuJGVsLmRhdGEodGhpcy5uYW1lK1wiLm9wdHNcIikmJih0aGlzLiRpbm5lcldyYXBwZXIudW53cmFwKCksdGhpcy4kaW5uZXJXcmFwcGVyLmNoaWxkcmVuKCkudW53cmFwKCksdGhpcy4kY29udC5yZW1vdmVDbGFzcyh0aGlzLnNldHRpbmdzLmNsYXNzZXMuY29udGFpbmVyKS5yZW1vdmVDbGFzcyh0aGlzLnNldHRpbmdzLmNsYXNzZXMub3BlbiksdGhpcy5zZXR0aW5ncy5vdmVybGF5JiZ0aGlzLiRvdmVybGF5Lm9mZihcImNsaWNrLlwiK3RoaXMubmFtZSkucmVtb3ZlKCksdGhpcy4kZWwudW53cmFwKCkucmVtb3ZlRGF0YSh0aGlzLm5hbWUrXCIub3B0c1wiKS5yZW1vdmVBdHRyKFwic3R5bGVcIiksdGhpcy4kd2luLm9mZihcInJlc2l6ZS5cIit0aGlzLm5hbWUpKX0saW5pdDpmdW5jdGlvbigpe3ZhciBzPXt9O3RoaXMuJHdpbj10KHdpbmRvdyksdGhpcy4kYm9keT10KFwiYm9keVwiKSx0aGlzLnZpc2libGU9ITEsdGhpcy4kY29udD10KHRoaXMuc2V0dGluZ3MuY29udGFpbmVyKSx0aGlzLiRjb250LmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5jb250YWluZXIpLmNoaWxkcmVuKFwiOm5vdChzY3JpcHQpXCIpLndyYXBBbGwodChcIjxkaXYvPlwiKS5hZGRDbGFzcyh0aGlzLnNldHRpbmdzLmNsYXNzZXMub3V0ZXIpKSx0aGlzLiRvdXRlcldyYXBwZXI9dChcIi5cIit0aGlzLnNldHRpbmdzLmNsYXNzZXMub3V0ZXIpLndyYXBJbm5lcih0KFwiPGRpdi8+XCIpLmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5pbm5lcikpLHRoaXMuJGlubmVyV3JhcHBlcj10KFwiLlwiK3RoaXMuc2V0dGluZ3MuY2xhc3Nlcy5pbm5lciksdGhpcy5zZXR0aW5ncy5vdmVybGF5JiYodGhpcy4kaW5uZXJXcmFwcGVyLmFwcGVuZCh0KFwiPGRpdi8+XCIpLmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuY2xhc3Nlcy5vdmVybGF5KS5jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yXCIsdGhpcy5zZXR0aW5ncy5vdmVybGF5Q29sb3IpKSx0aGlzLiRvdmVybGF5PXQoXCIuXCIrdGhpcy5zZXR0aW5ncy5jbGFzc2VzLm92ZXJsYXkpKSx0aGlzLiRlbC53cmFwKHQoXCI8ZGl2Lz5cIikuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5jbGFzc2VzLmVsZW1lbnQpKSx0aGlzLiRlbGVtZW50PXRoaXMuJGVsLnBhcmVudCgpLHNbdGhpcy5zZXR0aW5ncy5vcmlnaW5dPVwiLVwiK3RoaXMuc2V0dGluZ3MuY292ZXJhZ2Uscy53aWR0aD10aGlzLnNldHRpbmdzLmNvdmVyYWdlLHRoaXMuJGVsZW1lbnQuY3NzKHMpLHRoaXMuZWZmZWN0cz17cHVzaDp7JGVsOnRoaXMuJGlubmVyV3JhcHBlcixmcm9tOjAsdG86dGhpcy5zZXR0aW5ncy5jb3ZlcmFnZX0sXCJzbGlkZS1pbi1vdmVyXCI6eyRlbDp0aGlzLiRlbGVtZW50LGZyb206XCItXCIrdGhpcy5zZXR0aW5ncy5jb3ZlcmFnZSx0bzowfX0sdGhpcy5hbmltYXRpb25PcHRpb25zPXtlYXNpbmc6dGhpcy5zZXR0aW5ncy5lYXNpbmcsZHVyYXRpb246dGhpcy5zZXR0aW5ncy5kdXJhdGlvbn0sdGhpcy4kd2luLm9uKFwicmVzaXplLlwiK3RoaXMubmFtZSxlKHRoaXMuc2V0SGVpZ2h0cywzMDApLmJpbmQodGhpcykpLHRoaXMuc2V0SGVpZ2h0cygpLHRoaXMuJGVsLnRyaWdnZXIoXCJpbml0LlwiK3RoaXMubmFtZSl9fSksdC5mbltpXT1mdW5jdGlvbihlKXt2YXIgbixvPWFyZ3VtZW50cztyZXR1cm4gdm9pZCAwPT09ZXx8XCJvYmplY3RcIj09dHlwZW9mIGU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dC5kYXRhKHRoaXMsXCJwbHVnaW5fXCIraSl8fHQuZGF0YSh0aGlzLFwicGx1Z2luX1wiK2ksbmV3IHModGhpcyxlKSl9KTpcInN0cmluZ1wiPT10eXBlb2YgZSYmXCJfXCIhPT1lWzBdJiZcImluaXRcIiE9PWUmJih0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaD10LmRhdGEodGhpcyxcInBsdWdpbl9cIitpKTtoIGluc3RhbmNlb2YgcyYmXCJmdW5jdGlvblwiPT10eXBlb2YgaFtlXSYmKG49aFtlXS5hcHBseShoLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG8sMSkpKSxcImRlc3Ryb3lcIj09PWUmJnQuZGF0YSh0aGlzLFwicGx1Z2luX1wiK2ksbnVsbCl9KSx2b2lkIDAhPT1uP246dGhpcyl9LHQuZm5baV0uZGVmYXVsdHM9e2NsYXNzZXM6e2NvbnRhaW5lcjppLGVsZW1lbnQ6aStcIi1lbGVtZW50XCIsaW5uZXI6aStcIi1pbm5lclwiLG9wZW46aStcIi1vcGVuXCIsb3V0ZXI6aStcIi1vdXRlclwiLG92ZXJsYXk6aStcIi1vdmVybGF5XCJ9LGNvbnRhaW5lcjpcImJvZHlcIixjb3ZlcmFnZTpcIjIyMHB4XCIsb3JpZ2luOlwibGVmdFwiLGR1cmF0aW9uOjMwMCxlYXNpbmc6XCJlYXNlLWluLW91dFwiLGVmZmVjdDpcInB1c2hcIixvdmVybGF5OiExLG92ZXJsYXlDb2xvcjpcInJnYmEoMCwgMCwgMCwgMC43KVwifX0pOyIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAzLjAgKEFGTC0zLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9BRkwtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0FGTC0zLjAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIDMuMCAoQUZMLTMuMClcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIGltcG9ydCAnYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLm1pbic7XG5pbXBvcnQgXCJqcXVlcnktbW9kYWxcIjtcbi8vIGltcG9ydCBcImpxdWVyeS1vZmZjYW52YXMvZGlzdC9qcXVlcnkub2ZmY2FudmFzLm1pbi5jc3NcIjtcbmltcG9ydCBcInRvb2x0aXBzdGVyXCI7XG5pbXBvcnQgXCJ0b29sdGlwc3Rlci9kaXN0L2Nzcy90b29sdGlwc3Rlci5idW5kbGUubWluLmNzc1wiO1xuaW1wb3J0IFwidG9vbHRpcHN0ZXIvZGlzdC9jc3MvcGx1Z2lucy90b29sdGlwc3Rlci9zaWRlVGlwL3RoZW1lcy90b29sdGlwc3Rlci1zaWRlVGlwLXNoYWRvdy5taW4uY3NzXCI7XG5pbXBvcnQgdG91Y2hzcGluIGZyb20gXCJib290c3RyYXAtdG91Y2hzcGluXCI7XG5pbXBvcnQgXCJqcXVlcnktdG91Y2hzd2lwZVwiO1xuaW1wb3J0IFwiLi9zZWxlY3RvcnNcIjtcbmltcG9ydCBcIi4vdGFicy5qc1wiO1xuaW1wb3J0IFwiLi9lYXN5em9vbVwiO1xuXG5pbXBvcnQgXCIuL3Jlc3BvbnNpdmVcIjtcbmltcG9ydCBcIi4vY2hlY2tvdXRcIjtcbmltcG9ydCBcIi4vY3VzdG9tZXJcIjtcbmltcG9ydCBcIi4vbGlzdGluZ1wiO1xuaW1wb3J0IFwiLi9wcm9kdWN0XCI7XG5pbXBvcnQgXCIuL2NhcnRcIjtcbmltcG9ydCBcIi4vZmFjZXRzXCI7XG5cbmltcG9ydCBwcmVzdGFzaG9wIGZyb20gXCJwcmVzdGFzaG9wXCI7XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIjtcbmltcG9ydCBEcm9wRG93biBmcm9tIFwiLi9jb21wb25lbnRzL2Ryb3AtZG93blwiO1xuaW1wb3J0IEZvcm0gZnJvbSBcIi4vY29tcG9uZW50cy9mb3JtXCI7XG5pbXBvcnQgdXNlUGFzc3dvcmRQb2xpY3kgZnJvbSBcIi4vY29tcG9uZW50cy91c2VQYXNzd29yZFBvbGljeVwiO1xuaW1wb3J0IFByb2R1Y3RNaW5pdGF0dXJlIGZyb20gXCIuL2NvbXBvbmVudHMvcHJvZHVjdC1taW5pYXR1cmVcIjtcbmltcG9ydCBQcm9kdWN0U2VsZWN0IGZyb20gXCIuL2NvbXBvbmVudHMvcHJvZHVjdC1zZWxlY3RcIjtcbmltcG9ydCBUb3BNZW51IGZyb20gXCIuL2NvbXBvbmVudHMvdG9wLW1lbnVcIjtcblxuaW1wb3J0IFwiLi9jb21wb25lbnRzL2Jsb2NrLWNhcnRcIjtcbmltcG9ydCAkIGZyb20gXCJqcXVlcnlcIjtcbmltcG9ydCBqbyBmcm9tIFwianF1ZXJ5LW9mZmNhbnZhc1wiO1xuam8od2luZG93LCAkKTtcbnRvdWNoc3Bpbih3aW5kb3csICQpO1xuLyogZXNsaW50LWVuYWJsZSAqL1xuXG4vLyBcImluaGVyaXRcIiBFdmVudEVtaXR0ZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuZm9yIChjb25zdCBpIGluIEV2ZW50RW1pdHRlci5wcm90b3R5cGUpIHtcbiAgcHJlc3Rhc2hvcFtpXSA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGVbaV07XG59XG5cbiQoKCkgPT4ge1xuICBjb25zdCBkcm9wRG93bkVsID0gJCgnLmpzLWRyb3Bkb3duJyk7XG4gIGNvbnN0IGZvcm0gPSBuZXcgRm9ybSgpO1xuICBjb25zdCB0b3BNZW51RWwgPSAkKCcuanMtdG9wLW1lbnUgdWxbZGF0YS1kZXB0aD1cIjBcIl0nKTtcbiAgY29uc3QgZHJvcERvd24gPSBuZXcgRHJvcERvd24oZHJvcERvd25FbCk7XG4gIGNvbnN0IHRvcE1lbnUgPSBuZXcgVG9wTWVudSh0b3BNZW51RWwpO1xuICBjb25zdCBwcm9kdWN0TWluaXRhdHVyZSA9IG5ldyBQcm9kdWN0TWluaXRhdHVyZSgpO1xuICBjb25zdCBwcm9kdWN0U2VsZWN0ID0gbmV3IFByb2R1Y3RTZWxlY3QoKTtcbiAgZHJvcERvd24uaW5pdCgpO1xuICBmb3JtLmluaXQoKTtcbiAgdG9wTWVudS5pbml0KCk7XG4gIHByb2R1Y3RNaW5pdGF0dXJlLmluaXQoKTtcbiAgcHJvZHVjdFNlbGVjdC5pbml0KCk7XG4gIHVzZVBhc3N3b3JkUG9saWN5KCcuZmllbGQtcGFzc3dvcmQtcG9saWN5Jyk7XG5cblxuICAkKCcuZWFzeXpvb20nKS5lYXN5Wm9vbSh7XG4gIH0pO1xuXG4gICQoJy5jYXJvdXNlbFtkYXRhLXRvdWNoPVwidHJ1ZVwiXScpLnN3aXBlKHtcbiAgICBzd2lwZShldmVudCwgZGlyZWN0aW9uKSB7XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgJCh0aGlzKS5jYXJvdXNlbCgnbmV4dCcpO1xuICAgICAgfVxuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAkKHRoaXMpLmNhcm91c2VsKCdwcmV2Jyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBhbGxvd1BhZ2VTY3JvbGw6ICd2ZXJ0aWNhbCcsXG4gIH0pO1xuXG4gICQoJyNwcm9kdWN0LWxpc3QtdG9wLWZpbHRlcnMnKS5vZmZjYW52YXMoe1xuICAgIGR1cmF0aW9uOiAxMDAsXG4gICAgZWZmZWN0OiAnc2xpZGUtaW4tb3ZlcicsXG4gICAgY2xhc3Nlczoge1xuICAgICAgZWxlbWVudDogJ2Fic29sdXRlIHRvcC0wIHotNTAnLFxuICAgIH0sXG4gIH0pO1xuXG4gICQoJyNzaG93LWZpbHRlcnMnKS5vbignY2xpY2sub2ZmY2FudmFzJywgKCkgPT4ge1xuICAgICQoJyNvdmVybGF5Jykuc2hvdygpOyAgXG4gICAgJCgnI3Byb2R1Y3QtbGlzdC10b3AtZmlsdGVycycpLnNob3coKTsgIFxuICB9KTtcbiAgXG4gICQoJyNoaWRlLWZpbHRlcnMnKS5vbignY2xpY2sub2ZmY2FudmFzJywgKCkgPT4ge1xuICAgICQoJyNwcm9kdWN0LWxpc3QtdG9wLWZpbHRlcnMnKS5oaWRlKCk7IFxuICAgICQoJyNvdmVybGF5JykuaGlkZSgpO1xuICB9KTtcbiAgXG4gICQoJyNvdmVybGF5Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgJCgnI3Byb2R1Y3QtbGlzdC10b3AtZmlsdGVycycpLmhpZGUoKTsgIFxuICAgICQoJyNvdmVybGF5JykuaGlkZSgpOyAgXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIFRoQWNjb3JkaW9uKCkge31cblxuICAkLmV4dGVuZChUaEFjY29yZGlvbi5wcm90b3R5cGUsIHtcbiAgICBpbml0KCkge30sXG4gIH0pO1xuXG4gICQuZm4udGhhY2NvcmRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VsZWN0b3JzID0ge1xuICAgICAgcm9vdDogJy50aC1hY2NvcmRpb24nLFxuICAgICAgaXRlbTogJy50aC1hY2NvcmRpb24taXRlbScsXG4gICAgICB0cmlnZ2VyOiAnLnRoLWFjY29yZGlvbi1pdGVtLXRyaWdnZXInLFxuICAgICAgc3ZnOiAnLnRoLWFjY29yZGlvbi1pdGVtLXRyaWdnZXItc3ZnJyxcbiAgICAgIGNvbnRlbnQ6ICcudGgtYWNjb3JkaW9uLWl0ZW0tY29udGVudCcsXG4gICAgfTtcbiAgICBsZXQgc2VsZWN0aW9uID0gbnVsbDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZmluZChzZWxlY3RvcnMuaXRlbSk7XG4gICAgY29uc3Qgcm90YXRlQ2xhc3MgPSAncm90YXRlLTkwIGR1cmF0aW9uLTUwMCc7XG5cbiAgICBmdW5jdGlvbiBjb2xsYXBzZUFsbCgpIHtcbiAgICAgIGl0ZW1zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAkKHRoaXMpLmZpbmQoc2VsZWN0b3JzLmNvbnRlbnQpLmhpZGUoNTAwKTtcbiAgICAgICAgJCh0aGlzKS5maW5kKHNlbGVjdG9ycy5zdmcpLnJlbW92ZUNsYXNzKHJvdGF0ZUNsYXNzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgICQoc2VsZWN0aW9uKS5maW5kKHNlbGVjdG9ycy5jb250ZW50KS5oaWRlKDUwMCk7XG4gICAgICAkKHNlbGVjdGlvbikuZmluZChzZWxlY3RvcnMuc3ZnKS5yZW1vdmVDbGFzcygncm90YXRlLTkwJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb3BlbigpIHtcbiAgICAgIGNvbGxhcHNlQWxsKCk7XG4gICAgICAkKHNlbGVjdGlvbikuZmluZChzZWxlY3RvcnMuY29udGVudCkuc2hvdyg1MDApO1xuICAgICAgJChzZWxlY3Rpb24pLmZpbmQoc2VsZWN0b3JzLnN2ZykuYWRkQ2xhc3Mocm90YXRlQ2xhc3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT3BlbihpdGVtKSB7XG4gICAgICByZXR1cm4gJChpdGVtKS5maW5kKHNlbGVjdG9ycy5jb250ZW50KS5pcygnOnZpc2libGUnKTtcbiAgICB9XG5cbiAgICBjb2xsYXBzZUFsbCgpO1xuXG4gICAgaXRlbXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICQodGhpcylcbiAgICAgICAgLmZpbmQoc2VsZWN0b3JzLnRyaWdnZXIpXG4gICAgICAgIC5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbiA9PT0gc2VsZikge1xuICAgICAgICAgICAgaWYgKGlzT3BlbihzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgIGNsb3NlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbiA9IHNlbGY7XG4gICAgICAgICAgICBpZiAoIWlzT3BlbihzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgIG9wZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gICQoJy50aC1hY2NvcmRpb24nKS50aGFjY29yZGlvbigpO1xuICAkKCcudG9vbHRpcCcpLnRvb2x0aXBzdGVyKHtcbiAgICB0aGVtZTogJ3Rvb2x0aXBzdGVyLXNoYWRvdycsXG4gICAgdHJpZ2dlck9wZW46IHtcbiAgICAgIGNsaWNrOiB0cnVlLFxuICAgICAgbW91c2VlbnRlcjogdHJ1ZSxcbiAgICAgIHRvdWNoc3RhcnQ6IHRydWUsXG4gICAgfSxcbiAgICBkZWxheVRvdWNoOiBbMCwgMjAwMF0sXG4gIH0pO1xuXG4gICQoJy50b2dnbGUtbWFpbi1tZW51Jykub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICQoJy5tb2JpbGUtbWFpbi1tZW51JykudG9nZ2xlKCk7XG4gIH0pO1xuXHRcbn0pO1xuXG4iXSwibmFtZXMiOlsicmVxdWlyZSQkMCIsIiQiLCJ3aW5kb3ciLCJkb2N1bWVudCIsInVuZGVmaW5lZCIsIm1vZHVsZSIsInRoaXMiLCJhIiwiYiIsImMiLCJkIiwiZSIsImciLCJpIiwiZiIsImoiLCJrIiwiaCIsImwiLCJtIiwibiIsIm8iLCJwIiwib2JqIiwialF1ZXJ5IiwidmFsdWUiLCJwaGFzZSIsImRpcmVjdGlvbiIsImRpc3RhbmNlIiwicHJlc3Rhc2hvcCIsInNlbGYiLCJlbGVtIiwib2Zmc2V0UGFyZW50IiwiZ2xvYmFsIiwiJDIiLCJlbGVtZW50IiwicHJvcGVydHkiLCJvcHRzIiwiY2FsbEluZGV4IiwiZGVsYXlDb21wbGV0ZSIsInZhbHVlRGF0YSIsImVuZFZhbHVlIiwiZWFzaW5nIiwic3RhcnRWYWx1ZSIsInR3ZWVuRGVsdGEiLCJSZWZsZWN0QXBwbHkiLCJSZWZsZWN0T3duS2V5cyIsIk51bWJlcklzTmFOIiwiZXZlbnRzTW9kdWxlIiwiZXZlbnRzIiwib25jZSIsInNwcmludGYiLCJzIiwidCIsIkV2ZW50RW1pdHRlciJdLCJtYXBwaW5ncyI6Ijs7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UUFBTSxJQUFFLEdBQUVBLEdBQUUsT0FBTyxhQUFhLFFBQU0sR0FBRUEsR0FBRSxPQUFPLGFBQWEsT0FBSztBQUFFO0FBQUEsY0FBTSxLQUFJO0FBQU8seUJBQVEsSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUUsUUFBTyxJQUFFLEdBQUUsSUFBRSxFQUFFLFFBQU8sS0FBSTtBQUFDLHNCQUFJLElBQUUsRUFBRSxDQUFDO0FBQUUsNEJBQVEsS0FBRyxJQUFFLE1BQUksSUFBRSxHQUFFLE1BQUksTUFBSSxJQUFFLEtBQUksSUFBRSxNQUFJLElBQUUsSUFBRyxJQUFFLFVBQVEsSUFBRSxNQUFJLElBQUUsR0FBRSxLQUFHLE1BQUksSUFBRSxLQUFJLElBQUUsTUFBSSxJQUFFLElBQUcsSUFBRTtBQUFBLGdCQUFPO0FBQUMsZ0JBQUFBLEdBQUUsT0FBTyxLQUFLLFNBQU8sSUFBRSxHQUFFQSxHQUFFLE9BQU8sS0FBSyxRQUFNLElBQUUsR0FBRUEsR0FBRSxPQUFPLGFBQWEsUUFBTSxHQUFFQSxHQUFFLE9BQU8sYUFBYSxPQUFLO0FBQUEsWUFBQztBQUFBLFFBQUM7QUFBQyxZQUFJLElBQUUsU0FBU1QsSUFBRTtBQUFDLFVBQUFTLEdBQUUsT0FBTyxLQUFLLFNBQU9ULEdBQUUsUUFBT1MsR0FBRSxPQUFPLGFBQWEsT0FBS1QsR0FBRSxNQUFLUyxHQUFFLE9BQU8sYUFBYSxNQUFJVCxHQUFFLEtBQUlTLEdBQUUsT0FBTyxLQUFLLFFBQU1ULEdBQUU7QUFBQSxRQUFLO0FBQUUsYUFBSUMsR0FBRSxTQUFTLEVBQUMsTUFBSyxZQUFXLE1BQUssR0FBRSxVQUFTLEVBQUMsUUFBT1EsR0FBRSxPQUFPLEtBQUssUUFBTyxNQUFLQSxHQUFFLE9BQU8sYUFBYSxNQUFLLEtBQUlBLEdBQUUsT0FBTyxhQUFhLEtBQUksT0FBTUEsR0FBRSxPQUFPLEtBQUssTUFBSyxFQUFDLENBQUMsR0FBRUEsR0FBRSxPQUFPLGFBQWEsUUFBTUEsR0FBRSxPQUFPLGFBQWEsT0FBS0EsR0FBRSxPQUFPLEtBQUssT0FBTUEsR0FBRSxPQUFPLGFBQWEsU0FBT0EsR0FBRSxPQUFPLGFBQWEsTUFBSUEsR0FBRSxPQUFPLEtBQUssUUFBT0EsR0FBRSxPQUFPLE9BQU8sT0FBS0EsR0FBRSxPQUFPLGFBQWEsT0FBS0EsR0FBRSxPQUFPLE9BQU8sTUFBS0EsR0FBRSxPQUFPLE9BQU8sTUFBSUEsR0FBRSxPQUFPLGFBQWEsTUFBSUEsR0FBRSxPQUFPLE9BQU8sS0FBSUEsR0FBRSxPQUFPLE9BQU8sU0FBT0EsR0FBRSxPQUFPLE9BQU8sTUFBSUEsR0FBRSxPQUFPLEtBQUssUUFBT0EsR0FBRSxPQUFPLE9BQU8sUUFBTUEsR0FBRSxPQUFPLE9BQU8sT0FBS0EsR0FBRSxPQUFPLEtBQUssT0FBTUEsR0FBRSxVQUFVLFdBQVMsRUFBQyxRQUFPLEVBQUMsUUFBT0EsR0FBRSxTQUFTLEtBQUssU0FBT0EsR0FBRSxPQUFPLE9BQU8sUUFBTyxPQUFNQSxHQUFFLFNBQVMsS0FBSyxNQUFLLEdBQUUsTUFBSyxFQUFDLFFBQU9BLEdBQUUsU0FBUyxLQUFLLFFBQU8sT0FBTUEsR0FBRSxPQUFPLE9BQU8sS0FBSSxHQUFFLE9BQU0sRUFBQyxRQUFPQSxHQUFFLFNBQVMsS0FBSyxRQUFPLE9BQU1BLEdBQUUsU0FBUyxLQUFLLFFBQU1BLEdBQUUsT0FBTyxPQUFPLE1BQUssR0FBRSxLQUFJLEVBQUMsUUFBT0EsR0FBRSxPQUFPLE9BQU8sS0FBSSxPQUFNQSxHQUFFLFNBQVMsS0FBSyxNQUFLLEVBQUMsR0FBRUEsR0FBRSxVQUFVLFNBQU8sRUFBQyxRQUFPLEVBQUMsUUFBTyxLQUFLLElBQUlBLEdBQUUsT0FBTyxLQUFLLFNBQU8sS0FBSyxJQUFJQSxHQUFFLE9BQU8sYUFBYSxRQUFPLENBQUMsR0FBRSxDQUFDLEdBQUUsT0FBTUEsR0FBRSxPQUFPLEtBQUssTUFBSyxHQUFFLE1BQUssRUFBQyxRQUFPQSxHQUFFLE9BQU8sS0FBSyxRQUFPLE9BQU0sS0FBSyxJQUFJQSxHQUFFLE9BQU8sYUFBYSxNQUFLLENBQUMsRUFBQyxHQUFFLE9BQU0s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VSxTQUFTLFNBQU8sTUFBSSxXQUFTQSxHQUFFLFVBQVUsU0FBUyxDQUFDLE1BQUlBLEdBQUUsVUFBVSxTQUFTLENBQUMsSUFBRUEsR0FBRSxVQUFVLFNBQVMsQ0FBQyxJQUFHLFdBQVNBLEdBQUUsVUFBVSxTQUFTLENBQUMsTUFBSUEsR0FBRSxVQUFVLFNBQVMsQ0FBQyxJQUFFQSxHQUFFLFVBQVUsU0FBUyxDQUFDLElBQUcsV0FBU0EsR0FBRSxVQUFVLFNBQVMsQ0FBQyxNQUFJQSxHQUFFLFVBQVUsU0FBUyxDQUFDLElBQUVBLEdBQUUsVUFBVSxTQUFTLENBQUMsS0FBSUEsR0FBRSxVQUFVLFdBQVMsRUFBQyxLQUFJQSxHQUFFLFVBQVUsU0FBUyxDQUFDLEdBQUUsT0FBTUEsR0FBRSxVQUFVLFNBQVMsQ0FBQyxHQUFFLFFBQU9BLEdBQUUsVUFBVSxTQUFTLENBQUMsR0FBRSxNQUFLQSxHQUFFLFVBQVUsU0FBUyxDQUFDLEVBQUMsR0FBRSxZQUFVLE9BQU9BLEdBQUUsVUFBVSxNQUFLO0FBQUMsY0FBSUMsS0FBRSxFQUFDLEtBQUksVUFBUyxPQUFNLFFBQU8sUUFBTyxPQUFNLE1BQUssUUFBTztBQUFFLFVBQUFELEdBQUUsVUFBVSxPQUFLLENBQUNBLEdBQUUsVUFBVSxNQUFLQyxHQUFFRCxHQUFFLFVBQVUsSUFBSSxDQUFDLEdBQUUsVUFBUUEsR0FBRSxVQUFVLEtBQUssQ0FBQyxLQUFHLFdBQVNBLEdBQUUsVUFBVSxLQUFLLENBQUMsSUFBRUEsR0FBRSxVQUFVLEtBQUssS0FBSyxPQUFNLFFBQVEsSUFBRUEsR0FBRSxVQUFVLEtBQUssS0FBSyxTQUFRLE1BQU07QUFBQSxRQUFDO0FBQUMsY0FBSSxFQUFFLFlBQVksS0FBSyxNQUFJQSxHQUFFLFVBQVUsVUFBUSxTQUFLQSxHQUFFLFVBQVUsUUFBTTtBQUFBLE1BQUcsR0FBRSxjQUFhLFNBQVNBLElBQUVDLElBQUU7QUFBQyxZQUFJQyxJQUFFQyxLQUFFLE1BQUtHLEtBQUVILEdBQUUsYUFBYUYsRUFBQyxHQUFFRyxLQUFFLENBQUE7QUFBRyxRQUFB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SSxPQUFPLGFBQWEsUUFBTSxLQUFLLFVBQVUsbUJBQWlCLElBQUVDLEdBQUUsTUFBTSxPQUFLLElBQUVBLEdBQUUsTUFBTSxPQUFLRCxHQUFFLElBQUksT0FBTyxhQUFhLFFBQU0sS0FBSyxVQUFVLGtCQUFnQixJQUFFQyxHQUFFLE1BQU0sT0FBS0QsR0FBRSxJQUFJLE9BQU8sS0FBSyxRQUFNQyxHQUFFLEtBQUssVUFBUUQsR0FBRSxJQUFJLE9BQU8sYUFBYSxPQUFLLEtBQUssVUFBVSxtQkFBaUJBLEdBQUUsSUFBSSxPQUFPLEtBQUssUUFBTUMsR0FBRSxNQUFNLE9BQUtELEdBQUUsSUFBSSxPQUFPLEtBQUssUUFBTUMsR0FBRSxLQUFLLFFBQU1BLEdBQUUsTUFBTSxPQUFLRCxHQUFFLElBQUksT0FBTyxhQUFhLE9BQUssS0FBSyxVQUFVLGtCQUFnQixJQUFFQyxHQUFFLEtBQUssU0FBT0EsR0FBRSxNQUFNLE1BQUksSUFBRUQsR0FBRSxJQUFJLE9BQU8sYUFBYSxTQUFPLEtBQUssVUFBVSxtQkFBaUIsSUFBRUMsR0FBRSxNQUFNLE1BQUksSUFBRUEsR0FBRSxNQUFNLE1BQUlELEdBQUUsSUFBSSxPQUFPLGFBQWEsU0FBTyxLQUFLLFVBQVUsa0JBQWdCLElBQUVDLEdBQUUsTUFBTSxNQUFJRCxHQUFFLElBQUksT0FBTyxLQUFLLFNBQU9DLEdBQUUsS0FBSyxXQUFTRCxHQUFFLElBQUksT0FBTyxhQUFhLE1BQUksS0FBSyxVQUFVLG1CQUFpQkEsR0FBRSxJQUFJLE9BQU8sS0FBSyxTQUFPQyxHQUFFLE1BQU0sTUFBSUQsR0FBRSxJQUFJLE9BQU8sS0FBSyxTQUFPQyxHQUFFLEtBQUssU0FBT0EsR0FBRSxNQUFNLE1BQUlELEdBQUUsSUFBSSxPQUFPLGFBQWEsTUFBSSxLQUFLLFVBQVUsa0JBQWdCLElBQUVDLEdBQUUsS0FBSyxXQUFTQSxHQUFFLE1BQU0sT0FBS0QsR0FBRSxJQUFJLE9BQU8sS0FBSyxRQUFNQyxHQUFFLEtBQUssVUFBUUEsR0FBRSxNQUFNLE9BQUtELEdBQUUsSUFBSSxPQUFPLEtB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Y0FDbEIsY0FBYztBQUFBLGNBQ2QsY0FBYztBQUFBLGNBQ2QsV0FBVztBQUFBLGNBQ1gsY0FBYztBQUFBLGNBQ2QsZ0JBQWdCO0FBQUEsY0FDaEIsaUJBQWlCO0FBQUEsY0FDakIsaUJBQWlCO0FBQUEsY0FDakIsaUJBQWlCO0FBQUEsY0FDakIsY0FBYztBQUFBLGNBQ2QsWUFBWTtBQUFBLGNBQ1osZUFBZTtBQUFBLGNBQ2YsV0FBVztBQUFBLGNBQ1gsV0FBVztBQUFBLGNBQ1gsY0FBYztBQUFBLGNBQ2QsYUFBYTtBQUFBLGNBQ2IsZUFBZTtBQUFBLGNBQ2YsZUFBZTtBQUFBLGNBQ2YsV0FBVztBQUFBLGNBQ1gsYUFBYTtBQUFBLGNBQ2IsY0FBYztBQUFBLGNBQ2QsUUFBUTtBQUFBLGNBQ1IsYUFBYTtBQUFBLGNBQ2IsUUFBUTtBQUFBLGNBQ1IsUUFBUTtBQUFBLGNBQ1IsZUFBZTtBQUFBLGNBQ2YsU0FBUztBQUFBLGNBQ1QsWUFBWTtBQUFBLGNBQ1osV0FBVztBQUFBLGNBQ1gsYUFBYTtBQUFBLGNBQ2IsVUFBVTtBQUFBLGNBQ1YsU0FBUztBQUFBLGNBQ1QsU0FBUztBQUFBLGNBQ1QsaUJBQWlCO0FBQUEsY0FDakIsWUFBWTtBQUFBLGNBQ1osYUFBYTtBQUFBLGNBQ2IsZ0JBQWdCO0FBQUEsY0FDaEIsYUFBYTtBQUFBLGNBQ2IsY0FBYztBQUFBLGNBQ2QsYUFBYTtBQUFBLGNBQ2Isd0JBQXdCO0FBQUEsY0FDeEIsYUFBYTtBQUFBLGNBQ2IsYUFBYTtBQUFBLGNBQ2IsY0FBYztBQUFBLGNBQ2QsYUFBYTtBQUFBLGNBQ2IsZUFBZTtBQUFBLGNBQ2YsaUJBQWlCO0FBQUEsY0FDakIsZ0JBQWdCO0FBQUEsY0FDaEIsa0JBQWtCO0FBQUEsY0FDbEIsa0JBQWtCO0FBQUEsY0FDbEIsZUFBZTtBQUFBLGNBQ2YsYUFBYTtBQUFBLGNBQ2IsUUFBUTtBQUFBLGNBQ1IsU0FBUztBQUFBLGNBQ1QsV0FBVztBQUFBLGNBQ1gsVUFBVTtBQUFBLGNBQ1Ysb0JBQW9CO0FBQUEsY0FDcEIsY0FBYztBQUFBLGNBQ2QsZ0JBQWdCO0FBQUEsY0FDaEIsZ0JBQWdCO0FBQUEsY0FDaEIsa0JBQWtCO0FBQUEsY0FDbEIsbUJBQW1CO0FBQUEsY0FDbkIscUJBQXFCO0FBQUEsY0FDckIsbUJBQW1CO0FBQUEsY0FDbkIsbUJBQW1CO0FBQUEsY0FDbkIsZ0JBQWdCO0FBQUEsY0FDaEIsYUFBYTtBQUFBLGNBQ2IsYUFBYTtBQUFBLGNBQ2IsWUFBWTtBQUFBLGNBQ1osZUFBZTtBQUFBLGNBQ2YsUUFBUTtBQUFBLGNBQ1IsV0FBVztBQUFBLGNBQ1gsYUFBYTtBQUFBLGNBQ2IsU0FBUztBQUFBLGNBQ1QsYUFBYTtBQUFBLGNBQ2IsVUFBVTtBQUFBLGNBQ1YsVUFBVTtBQUFBLGNBQ1YsaUJBQWlCO0FBQUEsY0FDakIsYUFBYTtBQUFBLGNBQ2IsaUJBQWlCO0FBQUEsY0FDakIsaUJBQWlCO0FBQUEsY0FDakIsY0FBYztBQUFBLGNBQ2QsYUFBYTtBQUFBLGNBQ2IsUUFBUTtBQUFBLGNBQ1IsUUFBUTtBQUFBLGNBQ1IsUUFBUTtBQUFBLGNBQ1IsY0FBYztBQUFBLGNBQ2QsVUFBVTtBQUFBLGNBQ1YsT0FBTztBQUFBLGNBQ1AsYUFBYTtBQUFBLGNBQ2IsYUFBYTtBQUFBLGNBQ2IsZUFBZTtBQUFBLGNBQ2YsVUFBVTtBQUFBLGNBQ1YsY0FBYztBQUFBLGNBQ2QsWUFBWTtBQUFBLGNBQ1osWUFBWTtBQUFBLGNBQ1osVUFBVTtBQUFBLGNBQ1YsVUFBVTtBQUFBLGNBQ1YsV0FBVztBQUFBLGNBQ1gsYUFBYTtBQUFBLGNBQ2IsYUFBYTtBQUFBLGNBQ2IsUUFBUTtBQUFBLGNBQ1IsZUFBZTtBQUFBLGNBQ2YsYUFBYTtBQUFBLGNBQ2IsT0FBTztBQUFBLGNBQ1AsUUFBUTtBQUFBLGNBQ1IsV0FBVztBQUFBLGNBQ1gsVUFBVTtBQUFBLGNBQ1YsYUFBYTtBQUFBLGNBQ2IsVUFBVTtBQUFBLGNBQ1YsU0FBUztBQUFBLGNBQ1QsY0FBYztBQUFBLGNBQ2QsU0FBUztBQUFBLGNBQ1QsZUFBZTtBQUFBLGNBQ2YsVUFBVTtBQUFBLFlBQ1Y7QUFBQSxVQUNEO0FBQUE7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LGFBQUssSUFBSSxLQUFLLEtBQUssT0FBSyxPQUFPLE1BQUksS0FBSyxTQUFTLElBQUksVUFBU0EsRUFBQyxHQUFFLEtBQUssU0FBUyxXQUFTLEtBQUssU0FBUyxJQUFJLFVBQVNBLEVBQUM7QUFBQSxNQUFFLEdBQUUsTUFBSyxXQUFVO0FBQUMsWUFBSTFDLEtBQUUsQ0FBRTtBQUFDLGFBQUssWUFBVSxLQUFLLE1BQU0sU0FBUyxLQUFLLFNBQVMsUUFBUSxJQUFJLEdBQUUsS0FBSyxVQUFRLE1BQUcsS0FBSyxJQUFJLFFBQVEsVUFBUSxLQUFLLElBQUksR0FBRSxLQUFLLElBQUksUUFBUSxZQUFVLEtBQUssTUFBSyxLQUFLLE9BQU8sR0FBRSxLQUFLLFdBQVksR0FBQ0EsR0FBRSxLQUFLLFNBQVMsTUFBTSxJQUFFLEtBQUssUUFBUSxLQUFLLFNBQVMsTUFBTSxFQUFFLElBQUcsS0FBSyxRQUFRLEtBQUssU0FBUyxNQUFNLEVBQUUsSUFBSSxTQUFTQSxJQUFFLEVBQUUsT0FBTyxFQUFDLFdBQVMsV0FBVTtBQUFDLGVBQUssSUFBSSxRQUFRLFdBQVMsS0FBSyxJQUFJLEdBQUUsS0FBSyxTQUFTLFdBQVMsS0FBSyxTQUFTLElBQUksV0FBUyxLQUFLLE9BQUssV0FBVTtBQUFDLGlCQUFLLEtBQUk7QUFBQSxVQUFFLEdBQUUsS0FBSyxJQUFJLENBQUM7QUFBQSxRQUFDLEdBQUUsS0FBSyxJQUFJLEVBQUMsR0FBRSxLQUFLLGdCQUFnQixDQUFDLEdBQUUsS0FBSyxTQUFTLFdBQVMsS0FBSyxTQUFTLFNBQVMsRUFBQyxTQUFRLEVBQUMsR0FBRSxFQUFFLE9BQU8sRUFBQyxTQUFRLFFBQU8sR0FBRSxLQUFLLGdCQUFnQixDQUFDO0FBQUEsTUFBRSxHQUFFLE1BQUssV0FBVTtBQUFDLGFBQUssWUFBVSxLQUFLLE1BQU0sWUFBWSxLQUFLLFNBQVMsUUFBUSxJQUFJLEdBQUUsS0FBSyxVQUFRLE9BQUcsS0FBSyxJQUFJLFFBQVEsVUFBUSxLQUFLLElBQUksR0FBRSxLQUFLLElBQUksUUFBUSxZQUFVLEtBQUssTUFBSyxLQUFLLE9BQU8sR0FBRSxLQUFLLFFBQVEsS0FBSyxTQUFTLE1BQU0sRUFBRSxJQUFJLFNBQVMsTUFBTSxFQUFFLFNBQVMsV0FBVSxFQUFFLE9BQU8sRUFBQyxXQUFTLFdBQVU7QUFBQyxlQUFLLElBQUksUUFBUSxZQUFVLEtBQUssSUFBSTtBQUFBLFFBQUMsR0FBRSxLQUFLLElBQUksRUFBQyxHQUFFLEtBQUssZ0JBQWdCLENBQUMsR0FBRSxLQUFLLFNBQVMsV0FBUyxLQUFLLFNBQVMsU0FBUyxNQUFNLEVBQUUsU0FBUyxXQUFVLEVBQUUsT0FBTyxFQUFDLFNBQVEsT0FBTSxHQUFFLEtBQUssZ0JBQWdCLENBQUM7QUFBQSxNQUFFLEdBQUUsUUFBTyxXQUFVO0FBQUMsZ0JBQU8sS0FBSyxVQUFRLEtBQUssT0FBSyxLQUFLLE1BQU0sS0FBSyxJQUFJO0FBQUEsTUFBQyxHQUFFLFNBQVEsV0FBVTtBQUFDLGFBQUssSUFBSSxLQUFLLEtBQUssT0FBSyxPQUFPLE1BQUksS0FBSyxjQUFjLFVBQVMsS0FBSyxjQUFjLFNBQVUsRUFBQyxPQUFRLEdBQUMsS0FBSyxNQUFNLFlBQVksS0FBSyxTQUFTLFFBQVEsU0FBUyxFQUFFLFlBQVksS0FBSyxTQUFTLFFBQVEsSUFBSSxHQUFFLEtBQUssU0FBUyxXQUFTLEtBQUssU0FBUyxJQUFJLFdBQVMsS0FBSyxJQUFJLEVBQUUsVUFBUyxLQUFLLElBQUksT0FBUSxFQUFDLFdBQVcsS0FBSyxPQUFLLE9BQU8sRUFBRSxXQUFXLE9BQU8sR0FBRSxLQUFLLEtBQUssSUFBSSxZQUFVLEtBQUssSUFBSTtBQUFBLE1BQUUsR0FBRSxNQUFLLFdBQVU7QUFBQyxZQUFJeUMsS0FBRSxDQUFFO0FBQUMsYUFBSyxPQUFLLEVBQUUsTUFBTSxHQUFFLEtBQUssUUFBTSxFQUFFLE1BQU0sR0FBRSxLQUFLLFVBQVEsT0FBRyxLQUFLLFFBQU0sRUFBRSxLQUFLLFNBQVMsU0FBUyxHQUFFLEtBQUssTUFBTSxTQUFTLEtBQUssU0FBUyxRQUFRLFNBQVMsRUFBRSxTQUFTLGNBQWMsRUFBRSxR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