tiny-markdown-editor 0.2.13 → 0.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/tiny-mde.js CHANGED
@@ -5508,7 +5508,7 @@
5508
5508
  linkDetails.push("");
5509
5509
  }
5510
5510
  return {
5511
- output: "<span class=\"TMMark TMMark_".concat(type, "\">").concat(opener, "</span><span class=\"").concat(type, "\">").concat(this.processInlineStyles(linkText), "</span><span class=\"TMMark TMMark_").concat(type, "\">](").concat(linkDetails[0], "</span><span class=\"").concat(type, "Destination\">").concat(linkDetails[1], "</span><span class=\"TMMark TMMark_").concat(type, "\">").concat(linkDetails[2]).concat(linkDetails[3]).concat(linkDetails[4], "</span><span class=\"").concat(type, "Title\">").concat(linkDetails[5], "</span><span class=\"TMMark TMMark_").concat(type, "\">").concat(linkDetails[6], ")</span>"),
5511
+ output: "<span class=\"TMMark TMMark_".concat(type, "\">").concat(opener, "</span><span class=\"").concat(type, "\">").concat(this.processInlineStyles(linkText), "</span><span class=\"TMMark TMMark_").concat(type, "\">](").concat(linkDetails[0], "</span><span class=\"").concat(type, "Destination\">").concat(htmlescape(linkDetails[1]), "</span><span class=\"TMMark TMMark_").concat(type, "\">").concat(linkDetails[2]).concat(linkDetails[3]).concat(linkDetails[4], "</span><span class=\"").concat(type, "Title\">").concat(htmlescape(linkDetails[5]), "</span><span class=\"TMMark TMMark_").concat(type, "\">").concat(linkDetails[6], ")</span>"),
5512
5512
  charCount: currentOffset
5513
5513
  };
5514
5514
  }
@@ -5750,4 +5750,4 @@
5750
5750
  }));
5751
5751
  //# sourceMappingURL=index.js.map
5752
5752
 
5753
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtY2FsbGFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1uY2cuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9tLXRva2VuLWxpc3QtcHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsInNyYy9zdmcvc3ZnLnRzIiwic3JjL1RpbnlNREVDb21tYW5kQmFyLnRzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93aGl0ZXNwYWNlcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcmVnZXhwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuY29uc3RydWN0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qcyIsInNyYy9ncmFtbWFyLnRzIiwic3JjL1RpbnlNREUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiZcbiAgIVN5bWJvbC5zaGFtICYmXG4gIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuNDIuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuNDIuMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJ2EnLCAneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnYWJjZCcpICE9PSBudWxsO1xufSk7XG5cbi8vIFVDIEJyb3dzZXIgYnVnXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTAwOFxudmFyIE1JU1NFRF9TVElDS1kgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICEkUmVnRXhwKCdhJywgJ3knKS5zdGlja3k7XG59KTtcblxudmFyIEJST0tFTl9DQVJFVCA9IFVOU1VQUE9SVEVEX1kgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM2ODdcbiAgdmFyIHJlID0gJFJlZ0V4cCgnXnInLCAnZ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ3N0cicpICE9PSBudWxsO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCUk9LRU5fQ0FSRVQ6IEJST0tFTl9DQVJFVCxcbiAgTUlTU0VEX1NUSUNLWTogTUlTU0VEX1NUSUNLWSxcbiAgVU5TVVBQT1JURURfWTogVU5TVVBQT1JURURfWVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWFzc2lnbm1lbnQgLS0gYXZvaWQgbWVtb3J5IGxlYWtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnLicsICdzJykgLT4gLy4vcyBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnLicsICdzJyk7XG4gIHJldHVybiAhKHJlLmRvdEFsbCAmJiByZS50ZXN0KCdcXG4nKSAmJiByZS5mbGFncyA9PT0gJ3MnKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJyg/PGE+YiknLCAnZycpIC0+IC8oPzxhPmIpL2cgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCwgcmVnZXhwL25vLWxhenktZW5kcyAtLSB0ZXN0aW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tdXNlbGVzcy1xdWFudGlmaWVyIC0tIHRlc3RpbmcgKi9cbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5nZXQ7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCcpO1xudmFyIFVOU1VQUE9SVEVEX05DRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnJyk7XG5cbnZhciBuYXRpdmVSZXBsYWNlID0gc2hhcmVkKCduYXRpdmUtc3RyaW5nLXJlcGxhY2UnLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgaW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgY2FsbChuYXRpdmVFeGVjLCByZTEsICdhJyk7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWSB8fCBVTlNVUFBPUlRFRF9ET1RfQUxMIHx8IFVOU1VQUE9SVEVEX05DRztcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHJpbmcpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocmUpO1xuICAgIHZhciBzdHIgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgIHZhciByYXcgPSBzdGF0ZS5yYXc7XG4gICAgdmFyIHJlc3VsdCwgcmVDb3B5LCBsYXN0SW5kZXgsIG1hdGNoLCBpLCBvYmplY3QsIGdyb3VwO1xuXG4gICAgaWYgKHJhdykge1xuICAgICAgcmF3Lmxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgIHJlc3VsdCA9IGNhbGwocGF0Y2hlZEV4ZWMsIHJhdywgc3RyKTtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJhdy5sYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBncm91cHMgPSBzdGF0ZS5ncm91cHM7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IGNhbGwocmVnZXhwRmxhZ3MsIHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gcmVwbGFjZShmbGFncywgJ3knLCAnJyk7XG4gICAgICBpZiAoaW5kZXhPZihmbGFncywgJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gc3RyaW5nU2xpY2Uoc3RyLCByZS5sYXN0SW5kZXgpO1xuICAgICAgLy8gU3VwcG9ydCBhbmNob3JlZCBzdGlja3kgYmVoYXZpb3IuXG4gICAgICBpZiAocmUubGFzdEluZGV4ID4gMCAmJiAoIXJlLm11bHRpbGluZSB8fCByZS5tdWx0aWxpbmUgJiYgY2hhckF0KHN0ciwgcmUubGFzdEluZGV4IC0gMSkgIT09ICdcXG4nKSkge1xuICAgICAgICBzb3VyY2UgPSAnKD86ICcgKyBzb3VyY2UgKyAnKSc7XG4gICAgICAgIHN0ckNvcHkgPSAnICcgKyBzdHJDb3B5O1xuICAgICAgICBjaGFyc0FkZGVkKys7XG4gICAgICB9XG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgc3RyIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeKD86JyArIHNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgIH1cblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IGNhbGwobmF0aXZlRXhlYywgc3RpY2t5ID8gcmVDb3B5IDogcmUsIHN0ckNvcHkpO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmlucHV0ID0gc3RyaW5nU2xpY2UobWF0Y2guaW5wdXQsIGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IHN0cmluZ1NsaWNlKG1hdGNoWzBdLCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2guaW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIHJlLmxhc3RJbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgcmUubGFzdEluZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmUubGFzdEluZGV4ID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24ndCB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBjYWxsKG5hdGl2ZVJlcGxhY2UsIG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2ggJiYgZ3JvdXBzKSB7XG4gICAgICBtYXRjaC5ncm91cHMgPSBvYmplY3QgPSBjcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICBvYmplY3RbZ3JvdXBbMF1dID0gbWF0Y2hbZ3JvdXBbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZXhlY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUuZXhlY1xuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IC8uLy5leGVjICE9PSBleGVjIH0sIHtcbiAgZXhlYzogZXhlY1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGluIG9sZCBXZWJLaXQgdmVyc2lvbnMsIGBlbGVtZW50LmNsYXNzTGlzdGAgaXMgbm90IGFuIGluc3RhbmNlIG9mIGdsb2JhbCBgRE9NVG9rZW5MaXN0YFxudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG52YXIgY2xhc3NMaXN0ID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdzcGFuJykuY2xhc3NMaXN0O1xudmFyIERPTVRva2VuTGlzdFByb3RvdHlwZSA9IGNsYXNzTGlzdCAmJiBjbGFzc0xpc3QuY29uc3RydWN0b3IgJiYgY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBET01Ub2tlbkxpc3RQcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgPyB1bmRlZmluZWQgOiBET01Ub2tlbkxpc3RQcm90b3R5cGU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIFVOU0NPUEFCTEVTID0gd2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmlmIChBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU10gPT09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eShBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gJE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyAkT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzT3duKG9iamVjdCwgSUVfUFJPVE8pKSByZXR1cm4gb2JqZWN0W0lFX1BST1RPXTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBpZiAoaXNDYWxsYWJsZShjb25zdHJ1Y3RvcikgJiYgb2JqZWN0IGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiAkT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIFRBRywgU1RBVElDKSB7XG4gIGlmICh0YXJnZXQgJiYgIVNUQVRJQykgdGFyZ2V0ID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgaWYgKHRhcmdldCAmJiAhaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0LCBFTlVNRVJBQkxFX05FWFQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigrIUVOVU1FUkFCTEVfTkVYVCwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc09iamVjdChhcmd1bWVudCkgfHwgYXJndW1lbnQgPT09IG51bGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc1Bvc3NpYmxlUHJvdG90eXBlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIHJlcXVpcmVPYmplY3RDb2VyY2libGUoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gTztcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlcihPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG5cbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICBkZWZpbmVCdWlsdEluKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSBudWxsO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodGFyZ2V0W2luZGV4XSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgRE9NVG9rZW5MaXN0UHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS10b2tlbi1saXN0LXByb3RvdHlwZScpO1xudmFyIEFycmF5SXRlcmF0b3JNZXRob2RzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9yTWV0aG9kcy52YWx1ZXM7XG5cbnZhciBoYW5kbGVQcm90b3R5cGUgPSBmdW5jdGlvbiAoQ29sbGVjdGlvblByb3RvdHlwZSwgQ09MTEVDVElPTl9OQU1FKSB7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlKSB7XG4gICAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbSVRFUkFUT1JdICE9PSBBcnJheVZhbHVlcykgdHJ5IHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSA9IEFycmF5VmFsdWVzO1xuICAgIH1cbiAgICBzZXRUb1N0cmluZ1RhZyhDb2xsZWN0aW9uUHJvdG90eXBlLCBDT0xMRUNUSU9OX05BTUUsIHRydWUpO1xuICAgIGlmIChET01JdGVyYWJsZXNbQ09MTEVDVElPTl9OQU1FXSkgZm9yICh2YXIgTUVUSE9EX05BTUUgaW4gQXJyYXlJdGVyYXRvck1ldGhvZHMpIHtcbiAgICAgIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICAgICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdICE9PSBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV0pIHRyeSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBNRVRIT0RfTkFNRSwgQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdID0gQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICBoYW5kbGVQcm90b3R5cGUoZ2xvYmFsVGhpc1tDT0xMRUNUSU9OX05BTUVdICYmIGdsb2JhbFRoaXNbQ09MTEVDVElPTl9OQU1FXS5wcm90b3R5cGUsIENPTExFQ1RJT05fTkFNRSk7XG59XG5cbmhhbmRsZVByb3RvdHlwZShET01Ub2tlbkxpc3RQcm90b3R5cGUsICdET01Ub2tlbkxpc3QnKTtcbiIsImNvbnN0IHN2ZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgYmxvY2txdW90ZTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHJlY3Qgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiNVwiIHg9XCIzXCIgeT1cIjRcIiByeT1cIjFcIi8+PHJlY3Qgcnk9XCIxXCIgeT1cIjRcIiB4PVwiMTBcIiBoZWlnaHQ9XCI1XCIgd2lkdGg9XCI1XCIvPjxwYXRoIGQ9XCJNOCA2Ljk5OXYzYzAgMS0xIDMtMSAzcy0uMzMxIDEtMS4zMzEgMWgtMWMtMSAwLS42NjktMS0uNjY5LTFzMS0yIDEtM3YtM3ptNyAwdjNjMCAxLTEgMy0xIDNzLS4zMzEgMS0xLjMzMSAxaC0xYy0xIDAtLjY2OS0xLS42NjktMXMxLTIgMS0zdi0zelwiLz48L3N2Zz5gLFxuICBib2xkOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTQgMmExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoNmM0IDAgNS0yIDUtNCAwLTEuMzIyLS40MzQtMi42MzYtMS44ODUtMy4zODFDMTMuNzcyIDcuODg1IDE0IDYuOTQ1IDE0IDZjMC0yLTEtNC01LTR6bTEgMmg0YzEuNjY4IDAgMi4zMi4zOTMgMi42LjY3Mi4yOC4yNzkuNC42NjIuNCAxLjMyOHMtLjEyIDEuMDU3LS40IDEuMzM4Yy0uMjc1LjI3NC0xLjAxNC42NDYtMi42LjY2Mkg1em01IDZjMS42NjYuMDA1IDIuMzE4LjM4OCAyLjU5Ni42NjYuMjc3LjI3OC40MDQuNjY3LjQwNCAxLjMzNHMtLjEyNyAxLjA2LS40MDQgMS4zMzhjLS4yNzguMjc4LS45My42Ni0yLjU5Ni42NjJsLTQuOTkyLjAwNEw1IDEwelwiLz48L3N2Zz5gLFxuICBjbGVhcl9mb3JtYXR0aW5nOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTExLjAzIDFhMSAxIDAgMDAtLjc0LjNsLTkgOWExIDEgMCAwMDAgMS40bDQgNEExIDEgMCAwMDYgMTZoMmExIDEgMCAwMC43LS4zbDgtOGExIDEgMCAwMDAtMS40bC01LTVhMSAxIDAgMDAtLjY3LS4zek04LjcgNS43bDMuNTggMy42TDcuNiAxNEg2LjRsLTMtMyA1LjMtNS4zelwiLz48cmVjdCByeT1cIi44XCIgcng9XCIuOFwiIHk9XCIxNFwiIHg9XCIxNlwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjJcIi8+PHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHg9XCIxM1wiIHk9XCIxNFwiIHJ4PVwiLjhcIiByeT1cIi44XCIvPjxyZWN0IHJ5PVwiLjhcIiByeD1cIi44XCIgeT1cIjE0XCIgeD1cIjEwXCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMlwiLz48L3N2Zz5gLFxuICBjb2RlOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTEzLjUgMi45OTRhLjUuNSAwIDAwLS41LjUuNS41IDAgMDAwIC4wMzRWNC41M2E1Ljk5MyA1Ljk5MyAwIDAwLTcuNDUxLS40NDVBNiA2IDAgMTAxMi40NSAxMy45YTUuOTkgNS45OSAwIDAwMS4zNDYtMS4zMzQuNS41IDAgMDAuMDk2LS4xMDEuNS41IDAgMDAtLjEyLS42OTguNS41IDAgMDAtLjY5Ny4xMmwtLjAwNC0uMDA1YTUgNSAwIDAxLTEuMTk3IDEuMiA1IDUgMCAxMTEuMjE1LTYuOTY1LjUuNSAwIDAwLjY5Ny4xMi41LjUgMCAwMC4yMTEtLjQ0VjQuNzQ1SDE0VjMuNDkzYS41LjUgMCAwMC0uNS0uNXpcIi8+PC9zdmc+YCxcbiAgaDE6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMyAyczAtMSAxLTFoMWMxIDAgMSAxIDEgMXY2aDZWMnMwLTEgMS0xaDFjMSAwIDEgMSAxIDF2MTRzMCAxLTEgMWgtMWMtMSAwLTEtMS0xLTF2LTZINnY2czAgMS0xIDFINGMtMSAwLTEtMS0xLTF6XCIvPjwvc3ZnPmAsXG4gIGgyOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTQgMnMwLTEgMS0xIDEgMSAxIDF2NmMxLTEgMi0xIDQtMSAzIDAgNCAyIDQgNHY1czAgMS0xIDEtMS0xLTEtMXYtNWMwLTEuMDk0LTEtMi0yLTItMiAwLTMgMC00IDJ2NXMwIDEtMSAxLTEtMS0xLTF6XCIvPjwvc3ZnPmAsXG4gIGhyOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cmVjdCByeT1cIjFcIiB5PVwiOFwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjE4XCIgc3R5bGU9XCJmb250LXZhcmlhdGlvbi1zZXR0aW5nczpub3JtYWw7bWFya2VyOm5vbmVcIi8+PC9zdmc+YCxcbiAgaW1hZ2U6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMSAydjE0aDE2VjJIMXptMiAyaDEydjdsLTMtMy00IDQtMi0yLTMgM1Y0elwiLz48Y2lyY2xlIHI9XCIxLjVcIiBjeT1cIjYuNVwiIGN4PVwiNS41XCIvPjwvc3ZnPmAsXG4gIGl0YWxpYzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk05IDJhMSAxIDAgMDAwIDJMNyAxNGExIDEgMCAxMDAgMmgyYTEgMSAwIDAwMC0ybDItMTBhMSAxIDAgMTAwLTJ6XCIvPjwvc3ZnPmAsXG4gIGxpbms6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNOS4wNyA1LjE4YTMuOSAzLjkgMCAwMC0xLjUyLjQzQzYuMzEgNi4yMiA1LjMgNy4yOSA0LjMgOC4yOWMtMSAxLTIuMDcgMi4wMi0yLjY4IDMuMjYtLjMxLjYyLS41IDEuMzMtLjQxIDIuMDcuMDkuNzUuNDggMS40NyAxLjEgMi4wOS42MS42MSAxLjMzIDEgMi4wOCAxLjEuNzQuMDkgMS40NS0uMSAyLjA3LS40MiAxLjI0LS42MSAyLjI2LTEuNjggMy4yNi0yLjY4LjQ2LS40Ny45NC0uOTQgMS4zOS0xLjQ0bC0uNDMuMjZjLS42OC4zNC0xLjQ5LjU2LTIuMzYuNDYtLjItLjAzLS40LS4wOC0uNi0uMTQtLjc5Ljc2LTEuNTUgMS40NS0yLjE2IDEuNzYtLjM4LjE5LS42Ny4yNC0uOTIuMjEtLjI2LS4wMy0uNTQtLjE0LS45Mi0uNTMtLjM5LS4zOC0uNS0uNjYtLjUzLS45MS0uMDMtLjI2LjAyLS41NS4yMS0uOTMuMzktLjc2IDEuMzItMS43NCAyLjMyLTIuNzQgMS0xIDEuOTgtMS45MyAyLjc0LTIuMzIuMzgtLjE5LjY3LS4yNC45My0uMjEuMjUuMDMuNTMuMTQuOTEuNTMuMzkuMzguNS42Ni41My45MnYuMDZsMS4xMi0xLjA2LjQ0LS40N2MtLjE4LS4zLS40LS42LS42Ny0uODctLjYyLS42MS0xLjM0LTEtMi4wOS0xLjFhMy4wOCAzLjA4IDAgMDAtLjU1LS4wMXpcIi8+PHBhdGggZD1cIk0xMy4wNy44NmEzLjkgMy45IDAgMDAtMS41Mi40M2MtMS4yNC42Mi0yLjI2IDEuNjktMy4yNiAyLjY5LS40Ni40Ny0uOTQuOTQtMS4zOSAxLjQzLjE1LS4wOC4yOC0uMTguNDMtLjI1YTQuNCA0LjQgMCAwMTIuMzYtLjQ2Yy4yLjAyLjQuMDcuNi4xNC43OS0uNzcgMS41NS0xLjQ2IDIuMTYtMS43Ni4zOC0uMTkuNjctLjI1LjkzLS4yMS4yNS4wMy41My4xNC45MS41Mi4zOS4zOC41LjY2LjUzLjkyLjAzLjI2LS4wMi41NS0uMjEuOTMtLjM5Ljc2LTEuMzIgMS43NC0yLjMyIDIuNzQtMSAxLTEuOTggMS45My0yLjc0IDIuMzEtLjM4LjItLjY3LjI1LS45My4yMi0uMjUtLjA0LS41My0uMTUtLjkxLS41My0uMzktLjM4LS41LS42Ni0uNTMtLjkyVjljLS4zNi4zMy0uNzMuNjctMS4xMiAxLjA2bC0uNDMuNDZjLjE3LjMuNC42LjY2Ljg3LjYyLjYyIDEuMzQgMSAyLjA4IDEuMS43NS4xIDEuNDYtLjEgMi4wOC0uNDEgMS4yNC0uNjIgMi4yNi0xLjY5IDMuMjYtMi42OXMyLjA3LTIuMDIgMi42OC0zLjI2Yy4zMS0uNjIuNS0xLjMyLjQxLTIuMDdhMy42MyAzLjYzIDAgMDAtMS4xLTIuMDhjLS42MS0uNjItMS4zMy0xLTIuMDctMS4xYTMuMDggMy4wOCAwIDAwLS41Ni0uMDJ6XCIvPjwvc3ZnPmAsXG4gIG9sOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTEuNSA3YS41LjUgMCAxMDAgMWgxYS41LjUgMCAwMS41LjVjMCAuMTY0LS4wOC4zMS0uMTQuMzU1bC0xLjY1NSAxLjI1QS40OTIuNDkyIDAgMDAxIDEwLjVhLjUuNSAwIDAwLjUuNWgyYS41LjUgMCAwMDAtMUgzbC4zOTgtLjI5OUExLjUgMS41IDAgMDAyLjUgN3pcIi8+PHBhdGggZD1cIk0xLjUgMTJjLS42NjcgMC0uNjY3IDEgMCAxaDEuMjVjLjMzMyAwIC4zMzMuNSAwIC41SDIuNWMtLjY2NyAwLS42NjcgMSAwIDFoLjI1Yy4zMzMgMCAuMzMzLjUgMCAuNUgxLjVjLS42NjcgMC0uNjY3IDEgMCAxaDFjLjM5OCAwIC43OC0uMTMxIDEuMDYtLjM2NS4yODItLjIzNS40NC0uNTU0LjQ0LS44ODVhMS4xMjEgMS4xMjEgMCAwMC0uMzAzLS43NWMuMTkxLS4yMDQuMy0uNDcuMzAzLS43NSAwLS4zMzItLjE1OC0uNjUxLS40NC0uODg1LS4zLS4yNDEtLjY3NS0uMzctMS4wNi0uMzY1elwiLz48cmVjdCB5PVwiMTNcIiB4PVwiNlwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjEyXCIgcnk9XCIxXCIvPjxyZWN0IHJ5PVwiMVwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIyXCIgeD1cIjZcIiB5PVwiOFwiLz48cmVjdCB5PVwiM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PHBhdGggZD1cIk0xLjUgMmEuNS41IDAgMTAwIDFIMnYyaC0uNWEuNS41IDAgMTAwIDFoMmEuNS41IDAgMTAwLTFIM1YyLjVjMC0uMjc3LS4yMjMtLjUtLjUtLjV6XCIvPjwvc3ZnPmAsXG4gIHJlZG86IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNIDcuMjY5NTMwOCwyLjcwNTA3ODEgQyA4LjExMjg3NTUsMi43MDgxNTgxIDguOTUyOTg5NSwyLjg3MTIxNTYgOS43MzA0NjksMy4xMzQ3NjU2IDExLjQwODg3NCwzLjcwMzcxMjEgMTIuOTAxNDIsNC42ODQ3MTA0IDE0LDUuNjM2NzE4OCBWIDQgaCAyIFYgOSBIIDExIFYgNyBoIDEuNTA5NzY1IEMgMTEuNTkwNzUsNi4yNDg1MTczIDEwLjM0MDIwOCw1LjQ1MzgwOCA5LjA4Nzg5MDQsNS4wMjkyOTY5IDcuNDMwOTM5OCw0LjQ2NzYyMzEgNS45NDUzNDU4LDQuNDY4NzE3IDQuNzA3MDMwOCw1LjcwNzAzMTIgYyAtMS4yMjUwMTQsMS4yMjUwMTQyIC0xLjQwOTc2OSwyLjcyMDY5NTMgLTAuNzc5Mjk3LDQuMjk2ODc0OCAwLjYzMDQ3MiwxLjU3NjE4IDIuMTY3NDc1LDMuMTU4MDA2IDQuNDQzMzU5OCw0LjA2ODM2IGwgLTAuNzQyMTg3OCwxLjg1NTQ2OCBjIC0yLjcyNDExNSwtMS4wODk2NDYgLTQuNjg3MTEyLC0zLjAwNzgyIC01LjU1NjY0LC01LjE4MTY0IC0wLjg2OTUyOCwtMi4xNzM4MjA2IC0wLjU1NDI4MywtNC42NzgxMzkzIDEuMjIwNzAzLC02LjQ1MzEyNTIgMC45MjM4NTcsLTAuOTIzODU2OCAyLjAxNTM4OCwtMS4zODg4MjggMy4xMzQ3NjUsLTEuNTM1MTU2MyAwLjI3OTg0NSwtMC4wMzY1ODIgMC41NjA2ODIsLTAuMDUzNzYxIDAuODQxNzk3LC0wLjA1MjczNCB6XCIgLz48L3N2Zz5gLFxuICBzdHJpa2V0aHJvdWdoOiBgPHN2ZyB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIj48cGF0aCBkPVwiTTEwIDJDNiAyIDQgNCA0IDZjMCAuMzM4LjA4LjY3Mi4xOTMgMWgyLjM0QzYuMTEzIDYuNjI5IDYgNi4yOTUgNiA2YzAtLjMzNC4xMTctLjcyNS42OTEtMS4xNTRDNy4yNjUgNC40MTYgOC4zMzEgNCAxMCA0aDNhMSAxIDAgMDAwLTJ6bTEuNDc3IDljLjQxMy4zNjguNTIzLjcwNi41MjMgMSAwIC4zMzQtLjEyNy43MTItLjcwMSAxLjE0My0uNTc1LjQzLTEuNjMyLjg1LTMuMjk5Ljg1N2wtMS4wMDYuMDA3VjE0SDVhMSAxIDAgMDAwIDJoM2M0IDAgNi0yIDYtNCAwLS4zMzgtLjA4MS0uNjcyLS4xOTUtMXpcIi8+PHJlY3Qgcnk9XCIxXCIgeT1cIjhcIiB4PVwiMVwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjE2XCIvPjwvc3ZnPmAsXG4gIHVsOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48Y2lyY2xlIGN4PVwiMlwiIGN5PVwiOVwiIHI9XCIyXCIvPjxjaXJjbGUgY3k9XCI0XCIgY3g9XCIyXCIgcj1cIjJcIi8+PHJlY3QgeT1cIjNcIiB4PVwiNlwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjEyXCIgcnk9XCIxXCIvPjxjaXJjbGUgY3g9XCIyXCIgY3k9XCIxNFwiIHI9XCIyXCIvPjxyZWN0IHJ5PVwiMVwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIyXCIgeD1cIjZcIiB5PVwiOFwiLz48cmVjdCB5PVwiMTNcIiB4PVwiNlwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjEyXCIgcnk9XCIxXCIvPjwvc3ZnPmAsXG4gIHVuZG86IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNIDEwLjczMDQ2OSAyLjcwNTA3ODEgQyA5Ljg4NzEyNDMgMi43MDgxNTk0IDkuMDQ3MDEwMyAyLjg3MTIxNTYgOC4yNjk1MzEyIDMuMTM0NzY1NiBDIDYuNTkxMTI1NiAzLjcwMzcxMjEgNS4wOTg1Nzk3IDQuNjg0NzEwNCA0IDUuNjM2NzE4OCBMIDQgNCBMIDIgNCBMIDIgOSBMIDcgOSBMIDcgNyBMIDUuNDkwMjM0NCA3IEMgNi40MDkyNDk5IDYuMjQ4NTE3MyA3LjY1OTc5MTQgNS40NTM4MDggOC45MTIxMDk0IDUuMDI5Mjk2OSBDIDEwLjU2OTA2IDQuNDY3NjIzMSAxMi4wNTQ2NTQgNC40Njg3MTcgMTMuMjkyOTY5IDUuNzA3MDMxMiBDIDE0LjUxNzk4MyA2LjkzMjA0NTQgMTQuNzAyNzM4IDguNDI3NzI2NSAxNC4wNzIyNjYgMTAuMDAzOTA2IEMgMTMuNDQxNzk0IDExLjU4MDA4NiAxMS45MDQ3OTEgMTMuMTYxOTEyIDkuNjI4OTA2MiAxNC4wNzIyNjYgTCAxMC4zNzEwOTQgMTUuOTI3NzM0IEMgMTMuMDk1MjA5IDE0LjgzODA4OCAxNS4wNTgyMDYgMTIuOTE5OTE0IDE1LjkyNzczNCAxMC43NDYwOTQgQyAxNi43OTcyNjIgOC41NzIyNzM0IDE2LjQ4MjAxNyA2LjA2Nzk1NDcgMTQuNzA3MDMxIDQuMjkyOTY4OCBDIDEzLjc4MzE3NCAzLjM2OTExMiAxMi42OTE2NDMgMi45MDQxNDA4IDExLjU3MjI2NiAyLjc1NzgxMjUgQyAxMS4yOTI0MjEgMi43MjEyMzA0IDExLjAxMTU4NCAyLjcwNDA1MSAxMC43MzA0NjkgMi43MDUwNzgxIHogXCIgLz48L3N2Zz5cbmBcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHN2ZzsiLCJpbXBvcnQgc3ZnIGZyb20gXCIuL3N2Zy9zdmdcIjtcbmltcG9ydCB7IEVkaXRvciwgUG9zaXRpb24sIFNlbGVjdGlvbkV2ZW50IH0gZnJvbSBcIi4vVGlueU1ERVwiO1xuXG5jb25zdCBpc01hY0xpa2UgPSAvKE1hY3xpUGhvbmV8aVBvZHxpUGFkKS9pLnRlc3QoXG4gIHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgPyBuYXZpZ2F0b3IucGxhdGZvcm0gOiBcIlwiXG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRBY3Rpb24ge1xuICAoZWRpdG9yOiBFZGl0b3IpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRFbmFibGVkIHtcbiAgKGVkaXRvcjogRWRpdG9yLCBmb2N1cz86IFBvc2l0aW9uLCBhbmNob3I/OiBQb3NpdGlvbik6IGJvb2xlYW4gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmREZWZpbml0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBhY3Rpb24/OiBzdHJpbmcgfCBDb21tYW5kQWN0aW9uO1xuICBpbm5lckhUTUw/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBob3RrZXk/OiBzdHJpbmc7XG4gIGVuYWJsZWQ/OiBDb21tYW5kRW5hYmxlZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kQmFyUHJvcHMge1xuICBlbGVtZW50Pzogc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG4gIGVkaXRvcj86IEVkaXRvcjtcbiAgY29tbWFuZHM/OiAoc3RyaW5nIHwgQ29tbWFuZERlZmluaXRpb24pW107XG59XG5cbmludGVyZmFjZSBIb3RrZXkge1xuICBtb2RpZmllcnM6IHN0cmluZ1tdO1xuICBjb21tYW5kOiBzdHJpbmc7XG4gIGtleT86IHN0cmluZztcbiAgY29kZT86IHN0cmluZztcbn1cblxuY29uc3QgRGVmYXVsdENvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBDb21tYW5kRGVmaW5pdGlvbj4gPSB7XG4gIGJvbGQ6IHtcbiAgICBuYW1lOiBcImJvbGRcIixcbiAgICBhY3Rpb246IFwiYm9sZFwiLFxuICAgIGlubmVySFRNTDogc3ZnLmJvbGQsXG4gICAgdGl0bGU6IFwiQm9sZFwiLFxuICAgIGhvdGtleTogXCJNb2QtQlwiLFxuICB9LFxuICBpdGFsaWM6IHtcbiAgICBuYW1lOiBcIml0YWxpY1wiLFxuICAgIGFjdGlvbjogXCJpdGFsaWNcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5pdGFsaWMsXG4gICAgdGl0bGU6IFwiSXRhbGljXCIsXG4gICAgaG90a2V5OiBcIk1vZC1JXCIsXG4gIH0sXG4gIHN0cmlrZXRocm91Z2g6IHtcbiAgICBuYW1lOiBcInN0cmlrZXRocm91Z2hcIixcbiAgICBhY3Rpb246IFwic3RyaWtldGhyb3VnaFwiLFxuICAgIGlubmVySFRNTDogc3ZnLnN0cmlrZXRocm91Z2gsXG4gICAgdGl0bGU6IFwiU3RyaWtldGhyb3VnaFwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LTVcIixcbiAgfSxcbiAgY29kZToge1xuICAgIG5hbWU6IFwiY29kZVwiLFxuICAgIGFjdGlvbjogXCJjb2RlXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuY29kZSxcbiAgICB0aXRsZTogXCJGb3JtYXQgYXMgY29kZVwiLFxuICB9LFxuICBoMToge1xuICAgIG5hbWU6IFwiaDFcIixcbiAgICBhY3Rpb246IFwiaDFcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5oMSxcbiAgICB0aXRsZTogXCJMZXZlbCAxIGhlYWRpbmdcIixcbiAgICBob3RrZXk6IFwiTW9kLVNoaWZ0LTFcIixcbiAgfSxcbiAgaDI6IHtcbiAgICBuYW1lOiBcImgyXCIsXG4gICAgYWN0aW9uOiBcImgyXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuaDIsXG4gICAgdGl0bGU6IFwiTGV2ZWwgMiBoZWFkaW5nXCIsXG4gICAgaG90a2V5OiBcIk1vZC1TaGlmdC0yXCIsXG4gIH0sXG4gIHVsOiB7XG4gICAgbmFtZTogXCJ1bFwiLFxuICAgIGFjdGlvbjogXCJ1bFwiLFxuICAgIGlubmVySFRNTDogc3ZnLnVsLFxuICAgIHRpdGxlOiBcIkJ1bGxldGVkIGxpc3RcIixcbiAgfSxcbiAgb2w6IHtcbiAgICBuYW1lOiBcIm9sXCIsXG4gICAgYWN0aW9uOiBcIm9sXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcub2wsXG4gICAgdGl0bGU6IFwiTnVtYmVyZWQgbGlzdFwiLFxuICB9LFxuICBibG9ja3F1b3RlOiB7XG4gICAgbmFtZTogXCJibG9ja3F1b3RlXCIsXG4gICAgYWN0aW9uOiBcImJsb2NrcXVvdGVcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5ibG9ja3F1b3RlLFxuICAgIHRpdGxlOiBcIlF1b3RlXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtUVwiLFxuICB9LFxuICBpbnNlcnRMaW5rOiB7XG4gICAgbmFtZTogXCJpbnNlcnRMaW5rXCIsXG4gICAgYWN0aW9uOiAoZWRpdG9yOiBFZGl0b3IpID0+IHtcbiAgICAgIGlmIChlZGl0b3IuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpKSBlZGl0b3Iud3JhcFNlbGVjdGlvbihcIltcIiwgXCJdKClcIik7XG4gICAgfSxcbiAgICBlbmFibGVkOiAoZWRpdG9yOiBFZGl0b3IpID0+XG4gICAgICBlZGl0b3IuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpID8gZmFsc2UgOiBudWxsLFxuICAgIGlubmVySFRNTDogc3ZnLmxpbmssXG4gICAgdGl0bGU6IFwiSW5zZXJ0IGxpbmtcIixcbiAgICBob3RrZXk6IFwiTW9kLUtcIixcbiAgfSxcbiAgaW5zZXJ0SW1hZ2U6IHtcbiAgICBuYW1lOiBcImluc2VydEltYWdlXCIsXG4gICAgYWN0aW9uOiAoZWRpdG9yOiBFZGl0b3IpID0+IHtcbiAgICAgIGlmIChlZGl0b3IuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpKSBlZGl0b3Iud3JhcFNlbGVjdGlvbihcIiFbXCIsIFwiXSgpXCIpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogKGVkaXRvcjogRWRpdG9yKSA9PlxuICAgICAgZWRpdG9yLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5pbWFnZSxcbiAgICB0aXRsZTogXCJJbnNlcnQgaW1hZ2VcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1JXCIsXG4gIH0sXG4gIGhyOiB7XG4gICAgbmFtZTogXCJoclwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucGFzdGUoXCJcXG4qKipcXG5cIiksXG4gICAgZW5hYmxlZDogKCkgPT4gZmFsc2UsXG4gICAgaW5uZXJIVE1MOiBzdmcuaHIsXG4gICAgdGl0bGU6IFwiSW5zZXJ0IGhvcml6b250YWwgbGluZVwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LUxcIixcbiAgfSxcbiAgdW5kbzoge1xuICAgIG5hbWU6IFwidW5kb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IudW5kbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5VbmRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy51bmRvLFxuICAgIHRpdGxlOiBcIlVuZG9cIixcbiAgfSxcbiAgcmVkbzoge1xuICAgIG5hbWU6IFwicmVkb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucmVkbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5SZWRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy5yZWRvLFxuICAgIHRpdGxlOiBcIlJlZG9cIixcbiAgfSxcbn07XG5cbmV4cG9ydCBjbGFzcyBDb21tYW5kQmFyIHtcbiAgcHVibGljIGU6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBlZGl0b3I6IEVkaXRvciB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHt9O1xuICBwdWJsaWMgYnV0dG9uczogUmVjb3JkPHN0cmluZywgSFRNTERpdkVsZW1lbnQ+ID0ge307XG4gIHB1YmxpYyBzdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+ID0ge307XG4gIHByaXZhdGUgaG90a2V5czogSG90a2V5W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ29tbWFuZEJhclByb3BzKSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLmVkaXRvciA9IG51bGw7XG4gICAgdGhpcy5jb21tYW5kcyA9IHt9O1xuICAgIHRoaXMuYnV0dG9ucyA9IHt9O1xuICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICB0aGlzLmhvdGtleXMgPSBbXTtcblxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBwcm9wcy5lbGVtZW50O1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cblxuICAgIHRoaXMuY3JlYXRlQ29tbWFuZEJhckVsZW1lbnQoXG4gICAgICBlbGVtZW50LFxuICAgICAgcHJvcHMuY29tbWFuZHMgfHwgW1xuICAgICAgICBcImJvbGRcIixcbiAgICAgICAgXCJpdGFsaWNcIixcbiAgICAgICAgXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImNvZGVcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwiaDFcIixcbiAgICAgICAgXCJoMlwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bFwiLFxuICAgICAgICBcIm9sXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImJsb2NrcXVvdGVcIixcbiAgICAgICAgXCJoclwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bmRvXCIsXG4gICAgICAgIFwicmVkb1wiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJpbnNlcnRMaW5rXCIsXG4gICAgICAgIFwiaW5zZXJ0SW1hZ2VcIixcbiAgICAgIF1cbiAgICApO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB0aGlzLmhhbmRsZUtleWRvd24oZSkpO1xuICAgIGlmIChwcm9wcy5lZGl0b3IpIHRoaXMuc2V0RWRpdG9yKHByb3BzLmVkaXRvcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50KHBhcmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb21tYW5kczogKHN0cmluZyB8IENvbW1hbmREZWZpbml0aW9uKVtdKTogdm9pZCB7XG4gICAgdGhpcy5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmUuY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCYXJcIjtcblxuICAgIGZvciAobGV0IGNvbW1hbmQgb2YgY29tbWFuZHMpIHtcbiAgICAgIGlmIChjb21tYW5kID09PSBcInxcIikge1xuICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBlbC5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZERpdmlkZXJcIjtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb21tYW5kTmFtZTogc3RyaW5nO1xuICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBpZiAoRGVmYXVsdENvbW1hbmRzW2NvbW1hbmRdKSB7XG4gICAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQ7XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IERlZmF1bHRDb21tYW5kc1tjb21tYW5kTmFtZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gXCJvYmplY3RcIiAmJiBjb21tYW5kLm5hbWUpIHtcbiAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQubmFtZTtcbiAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IHt9IGFzIENvbW1hbmREZWZpbml0aW9uO1xuICAgICAgICAgIGlmIChEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLCBEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSwgY29tbWFuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS50aXRsZSB8fCBjb21tYW5kTmFtZTtcblxuICAgICAgICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uaG90a2V5KSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmhvdGtleSEuc3BsaXQoXCItXCIpO1xuICAgICAgICAgIGxldCBtb2RpZmllcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgbGV0IG1vZGlmaWVyZXhwbGFuYXRpb246IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgc3dpdGNoIChrZXlzW2ldKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJDdHJsXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJjdHJsS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIkN0cmxcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJDbWRcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcIm1ldGFLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQWx0XCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwiQWx0XCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiT3B0aW9uXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oylXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiV2luXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKKniBXaW5cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTaGlmdFwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwic2hpZnRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oenXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiTW9kXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFjTGlrZSkge1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImN0cmxLZXlcIik7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJDdHJsXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIk1vZDJcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImFsdEtleVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWNMaWtlKSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLijKVcIik7XG4gICAgICAgICAgICAgICAgZWxzZSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJBbHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChrZXlzW2tleXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgIGxldCBob3RrZXk6IEhvdGtleSA9IHtcbiAgICAgICAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzLFxuICAgICAgICAgICAgY29tbWFuZDogY29tbWFuZE5hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBsYXN0S2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0S2V5Lm1hdGNoKC9eWzAtOV0kLykpIHtcbiAgICAgICAgICAgIGhvdGtleS5jb2RlID0gYERpZ2l0JHtsYXN0S2V5fWA7XG4gICAgICAgICAgfSBlbHNlIGlmIChsYXN0S2V5Lm1hdGNoKC9eW2EtekEtWl0kLykpIHtcbiAgICAgICAgICAgIGhvdGtleS5jb2RlID0gYEtleSR7bGFzdEtleS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhvdGtleS5rZXkgPSBsYXN0S2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaG90a2V5cy5wdXNoKGhvdGtleSk7XG4gICAgICAgICAgdGl0bGUgPSB0aXRsZS5jb25jYXQoYCAoJHttb2RpZmllcmV4cGxhbmF0aW9uLmpvaW4oXCIrXCIpfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9EaXNhYmxlZFwiO1xuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLnRpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0uaW5uZXJIVE1MID0gdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uaW5uZXJIVE1MIHx8IFwiP1wiO1xuXG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCAoZSkgPT5cbiAgICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGNvbW1hbmROYW1lLCBlKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmUuYXBwZW5kQ2hpbGQodGhpcy5idXR0b25zW2NvbW1hbmROYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ2xpY2soY29tbWFuZE5hbWU6IHN0cmluZywgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRvcikgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBGb2N1cyB0aGUgZWRpdG9yIGlmIGl0J3Mgbm90IGFscmVhZHkgZm9jdXNlZFxuICAgIGlmICh0aGlzLmVkaXRvci5lKSB7XG4gICAgICBjb25zdCBlZGl0b3JIYWRGb2N1cyA9IHRoaXMuZWRpdG9yLmUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgICB0aGlzLmVkaXRvci5lLmZvY3VzKCk7XG4gICAgICAvLyBPbmx5IHJlc3RvcmUgdGhlIGxhc3Qgc2VsZWN0aW9uIGlmIHRoZSBlZGl0b3Igd2FzIG5vdCBmb2N1c2VkIGJlZm9yZVxuICAgICAgaWYgKCFlZGl0b3JIYWRGb2N1cykge1xuICAgICAgICB0aGlzLmVkaXRvci5yZXN0b3JlTGFzdFNlbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uYWN0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZVtjb21tYW5kTmFtZV0gPT09IGZhbHNlKVxuICAgICAgICAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIHRydWUpO1xuICAgICAgZWxzZSAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5hY3Rpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmFjdGlvbiBhcyBDb21tYW5kQWN0aW9uKSh0aGlzLmVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEVkaXRvcihlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yO1xuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uXCIsIChlKSA9PiB0aGlzLmhhbmRsZVNlbGVjdGlvbihlKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdGlvbihldmVudDogU2VsZWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuY29tbWFuZFN0YXRlKSB7XG4gICAgICBmb3IgKGxldCBjb21tYW5kIGluIHRoaXMuY29tbWFuZHMpIHtcbiAgICAgICAgaWYgKGV2ZW50LmNvbW1hbmRTdGF0ZVtjb21tYW5kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCEoXG4gICAgICAgICAgICAgIHRoaXMuZWRpdG9yISxcbiAgICAgICAgICAgICAgZXZlbnQuZm9jdXMsXG4gICAgICAgICAgICAgIGV2ZW50LmFuY2hvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IGV2ZW50LmZvY3VzID8gZmFsc2UgOiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXRlW2NvbW1hbmRdID0gZXZlbnQuY29tbWFuZFN0YXRlW2NvbW1hbmRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZF0uY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCdXR0b24gVE1Db21tYW5kQnV0dG9uX0FjdGl2ZVwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmRdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9JbmFjdGl2ZVwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fRGlzYWJsZWRcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIC8vIE9ubHkgaGFuZGxlIGtleWJvYXJkIHNob3J0Y3V0cyBpZiB0aGlzIGVkaXRvciBpcyBjdXJyZW50bHkgZm9jdXNlZFxuICAgIGlmICghdGhpcy5lZGl0b3IgfHwgIXRoaXMuZWRpdG9yLmUpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZWRpdG9yLmUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHJldHVybjtcblxuICAgIG91dGVyOiBmb3IgKGxldCBob3RrZXkgb2YgdGhpcy5ob3RrZXlzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChob3RrZXkua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSBob3RrZXkua2V5KSB8fFxuICAgICAgICAoaG90a2V5LmNvZGUgJiYgZXZlbnQuY29kZSA9PT0gaG90a2V5LmNvZGUpXG4gICAgICApIHtcbiAgICAgICAgZm9yIChsZXQgbW9kaWZpZXIgb2YgaG90a2V5Lm1vZGlmaWVycykge1xuICAgICAgICAgIGlmICghKGV2ZW50IGFzIGFueSlbbW9kaWZpZXJdKSBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGhvdGtleS5jb21tYW5kLCBldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWFuZEJhcjsiLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCwgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBGT1JDRUQsIFNIQU0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG5cbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgcmVhbCByZWdleCBoZXJlIHNpbmNlIGl0IGNhdXNlcyBkZW9wdGltaXphdGlvblxuICAgICAgLy8gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gVjhcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMDZcbiAgICAgIHJlID0ge307XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgICByZS5mbGFncyA9ICcnO1xuICAgICAgcmVbU1lNQk9MXSA9IC8uL1tTWU1CT0xdO1xuICAgIH1cblxuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIEZPUkNFRFxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIG1ldGhvZHMgPSBleGVjKFNZTUJPTCwgJydbS0VZXSwgZnVuY3Rpb24gKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICB2YXIgJGV4ZWMgPSByZWdleHAuZXhlYztcbiAgICAgIGlmICgkZXhlYyA9PT0gcmVnZXhwRXhlYyB8fCAkZXhlYyA9PT0gUmVnRXhwUHJvdG90eXBlLmV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IGNhbGwobmF0aXZlUmVnRXhwTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogY2FsbChuYXRpdmVNZXRob2QsIHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW4oU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBtZXRob2RzWzBdKTtcbiAgICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgU1lNQk9MLCBtZXRob2RzWzFdKTtcbiAgfVxuXG4gIGlmIChTSEFNKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUmVnRXhwUHJvdG90eXBlW1NZTUJPTF0sICdzaGFtJywgdHJ1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xuXG4vLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGNoYXJBdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZG9zL25vLXZ1bG5lcmFibGUgLS0gc2FmZVxudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCYnYF18XFxkezEsMn18PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmJ2BdfFxcZHsxLDJ9KS9nO1xuXG4vLyBgR2V0U3Vic3RpdHV0aW9uYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gIH1cbiAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICB2YXIgY2FwdHVyZTtcbiAgICBzd2l0Y2ggKGNoYXJBdChjaCwgMCkpIHtcbiAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHJpbmdTbGljZShzdHIsIDAsIHBvc2l0aW9uKTtcbiAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHJpbmdTbGljZShzdHIsIHRhaWxQb3MpO1xuICAgICAgY2FzZSAnPCc6XG4gICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW3N0cmluZ1NsaWNlKGNoLCAxLCAtMSldO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoYXJBdChjaCwgMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaGFyQXQoY2gsIDEpO1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmIChpc0NhbGxhYmxlKGV4ZWMpKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNhbGwoZXhlYywgUiwgUyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgYW5PYmplY3QocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpID09PSAnUmVnRXhwJykgcmV0dXJuIGNhbGwocmVnZXhwRXhlYywgUiwgUyk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBnZXRTdWJzdGl0dXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbicpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFJFUExBQ0UgPSB3ZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gSUUgPD0gMTEgcmVwbGFjZXMgJDAgd2l0aCB0aGUgd2hvbGUgbWF0Y2gsIGFzIGlmIGl0IHdhcyAkJlxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAyNDY2Ni9nZXR0aW5nLWllLXRvLXJlcGxhY2UtYS1yZWdleC13aXRoLXRoZS1saXRlcmFsLXN0cmluZy0wXG52YXIgUkVQTEFDRV9LRUVQU18kMCA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvcHJlZmVyLWVzY2FwZS1yZXBsYWNlbWVudC1kb2xsYXItY2hhciAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gJ2EnLnJlcGxhY2UoLy4vLCAnJDAnKSA9PT0gJyQwJztcbn0pKCk7XG5cbi8vIFNhZmFyaSA8PSAxMy4wLjMoPykgc3Vic3RpdHV0ZXMgbnRoIGNhcHR1cmUgd2hlcmUgbj5tIHdpdGggYW4gZW1wdHkgc3RyaW5nXG52YXIgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPSAoZnVuY3Rpb24gKCkge1xuICBpZiAoLy4vW1JFUExBQ0VdKSB7XG4gICAgcmV0dXJuIC8uL1tSRVBMQUNFXSgnYScsICckMCcpID09PSAnJztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KSgpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tdXNlbGVzcy1kb2xsYXItcmVwbGFjZW1lbnRzIC0tIGZhbHNlIHBvc2l0aXZlXG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygncmVwbGFjZScsIGZ1bmN0aW9uIChfLCBuYXRpdmVSZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIFVOU0FGRV9TVUJTVElUVVRFID0gUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPyAnJCcgOiAnJDAnO1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciByZXBsYWNlciA9IGlzT2JqZWN0KHNlYXJjaFZhbHVlKSA/IGdldE1ldGhvZChzZWFyY2hWYWx1ZSwgUkVQTEFDRSkgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gcmVwbGFjZXJcbiAgICAgICAgPyBjYWxsKHJlcGxhY2VyLCBzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IGNhbGwobmF0aXZlUmVwbGFjZSwgdG9TdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChzdHJpbmcsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QodGhpcyk7XG4gICAgICB2YXIgUyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PSAnc3RyaW5nJyAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgVU5TQUZFX1NVQlNUSVRVVEUpID09PSAtMSAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgJyQ8JykgPT09IC0xXG4gICAgICApIHtcbiAgICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVSZXBsYWNlLCByeCwgUywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSBpc0NhbGxhYmxlKHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSB0b1N0cmluZyhyZXBsYWNlVmFsdWUpO1xuXG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgdmFyIGZ1bGxVbmljb2RlO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHB1c2gocmVzdWx0cywgcmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuXG4gICAgICAgIHZhciBtYXRjaFN0ciA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgdmFyIHJlcGxhY2VtZW50O1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIHB1c2goY2FwdHVyZXMsIG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IGNvbmNhdChbbWF0Y2hlZF0sIGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcHVzaChyZXBsYWNlckFyZ3MsIG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gdG9TdHJpbmcoYXBwbHkocmVwbGFjZVZhbHVlLCB1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gc3RyaW5nU2xpY2UoUywgbmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIHN0cmluZ1NsaWNlKFMsIG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xufSwgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTIHx8ICFSRVBMQUNFX0tFRVBTXyQwIHx8IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXlsnICsgd2hpdGVzcGFjZXMgKyAnXSsnKTtcbnZhciBydHJpbSA9IFJlZ0V4cCgnKF58W14nICsgd2hpdGVzcGFjZXMgKyAnXSlbJyArIHdoaXRlc3BhY2VzICsgJ10rJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgbHRyaW0sICcnKTtcbiAgICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBydHJpbSwgJyQxJyk7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1MZWZ0LCB0cmltU3RhcnQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbXN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbVJpZ2h0LCB0cmltRW5kIH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuICB0cmltOiBjcmVhdGVNZXRob2QoMylcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBub24gPSAnXFx1MjAwQlxcdTAwODVcXHUxODBFJztcblxuLy8gY2hlY2sgdGhhdCBhIG1ldGhvZCB3b3JrcyB3aXRoIHRoZSBjb3JyZWN0IGxpc3Rcbi8vIG9mIHdoaXRlc3BhY2VzIGFuZCBoYXMgYSBjb3JyZWN0IG5hbWVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHJldHVybiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdKClcbiAgICAgIHx8IG5vbltNRVRIT0RfTkFNRV0oKSAhPT0gbm9uXG4gICAgICB8fCAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdLm5hbWUgIT09IE1FVEhPRF9OQU1FKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIGZvcmNlZFN0cmluZ1RyaW1NZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdUcmltTWV0aG9kKCd0cmltJykgfSwge1xuICB0cmltOiBmdW5jdGlvbiB0cmltKCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc3JlZ2V4cFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY2xhc3NvZihpdCkgPT09ICdSZWdFeHAnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcblxudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIpIHtcbiAgdmFyIGZsYWdzID0gUi5mbGFncztcbiAgcmV0dXJuIGZsYWdzID09PSB1bmRlZmluZWQgJiYgISgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZSkgJiYgIWhhc093bihSLCAnZmxhZ3MnKSAmJiBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgUilcbiAgICA/IGNhbGwocmVnRXhwRmxhZ3MsIFIpIDogZmxhZ3M7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUYXJnZXQsIFNvdXJjZSwga2V5KSB7XG4gIGtleSBpbiBUYXJnZXQgfHwgZGVmaW5lUHJvcGVydHkoVGFyZ2V0LCBrZXksIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTb3VyY2Vba2V5XTsgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBTb3VyY2Vba2V5XSA9IGl0OyB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuZ2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLmdldCwgbmFtZSwgeyBnZXR0ZXI6IHRydWUgfSk7XG4gIGlmIChkZXNjcmlwdG9yLnNldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5zZXQsIG5hbWUsIHsgc2V0dGVyOiB0cnVlIH0pO1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGdldFJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHByb3h5QWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3InKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmVuZm9yY2U7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFVOU1VQUE9SVEVEX0RPVF9BTEwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwnKTtcbnZhciBVTlNVUFBPUlRFRF9OQ0cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZycpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG52YXIgTmF0aXZlUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gTmF0aXZlUmVnRXhwLnByb3RvdHlwZTtcbnZhciBTeW50YXhFcnJvciA9IGdsb2JhbFRoaXMuU3ludGF4RXJyb3I7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKFJlZ0V4cFByb3RvdHlwZS5leGVjKTtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG4vLyBUT0RPOiBVc2Ugb25seSBwcm9wZXIgUmVnRXhwSWRlbnRpZmllck5hbWVcbnZhciBJU19OQ0cgPSAvXlxcPzxbXlxcc1xcZCEjJSYqKzw9PkBeXVteXFxzISMlJiorPD0+QF5dKj4vO1xudmFyIHJlMSA9IC9hL2c7XG52YXIgcmUyID0gL2EvZztcblxuLy8gXCJuZXdcIiBzaG91bGQgY3JlYXRlIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdcbnZhciBDT1JSRUNUX05FVyA9IG5ldyBOYXRpdmVSZWdFeHAocmUxKSAhPT0gcmUxO1xuXG52YXIgTUlTU0VEX1NUSUNLWSA9IHN0aWNreUhlbHBlcnMuTUlTU0VEX1NUSUNLWTtcbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5VTlNVUFBPUlRFRF9ZO1xuXG52YXIgQkFTRV9GT1JDRUQgPSBERVNDUklQVE9SUyAmJlxuICAoIUNPUlJFQ1RfTkVXIHx8IE1JU1NFRF9TVElDS1kgfHwgVU5TVVBQT1JURURfRE9UX0FMTCB8fCBVTlNVUFBPUlRFRF9OQ0cgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJlMltNQVRDSF0gPSBmYWxzZTtcbiAgICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2luY29uc2lzdGVudC1mdW5jdGlvbi1jYWxsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgcmV0dXJuIE5hdGl2ZVJlZ0V4cChyZTEpICE9PSByZTEgfHwgTmF0aXZlUmVnRXhwKHJlMikgPT09IHJlMiB8fCBTdHJpbmcoTmF0aXZlUmVnRXhwKHJlMSwgJ2knKSkgIT09ICcvYS9pJztcbiAgfSkpO1xuXG52YXIgaGFuZGxlRG90QWxsID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgYnJhY2tldHMgPSBmYWxzZTtcbiAgdmFyIGNocjtcbiAgZm9yICg7IGluZGV4IDw9IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgICBpZiAoY2hyID09PSAnXFxcXCcpIHtcbiAgICAgIHJlc3VsdCArPSBjaHIgKyBjaGFyQXQoc3RyaW5nLCArK2luZGV4KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIWJyYWNrZXRzICYmIGNociA9PT0gJy4nKSB7XG4gICAgICByZXN1bHQgKz0gJ1tcXFxcc1xcXFxTXSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaHIgPT09ICdbJykge1xuICAgICAgICBicmFja2V0cyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGNociA9PT0gJ10nKSB7XG4gICAgICAgIGJyYWNrZXRzID0gZmFsc2U7XG4gICAgICB9IHJlc3VsdCArPSBjaHI7XG4gICAgfVxuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgaGFuZGxlTkNHID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgbmFtZWQgPSBbXTtcbiAgdmFyIG5hbWVzID0gY3JlYXRlKG51bGwpO1xuICB2YXIgYnJhY2tldHMgPSBmYWxzZTtcbiAgdmFyIG5jZyA9IGZhbHNlO1xuICB2YXIgZ3JvdXBpZCA9IDA7XG4gIHZhciBncm91cG5hbWUgPSAnJztcbiAgdmFyIGNocjtcbiAgZm9yICg7IGluZGV4IDw9IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgICBpZiAoY2hyID09PSAnXFxcXCcpIHtcbiAgICAgIGNociArPSBjaGFyQXQoc3RyaW5nLCArK2luZGV4KTtcbiAgICB9IGVsc2UgaWYgKGNociA9PT0gJ10nKSB7XG4gICAgICBicmFja2V0cyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoIWJyYWNrZXRzKSBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgY2hyID09PSAnWyc6XG4gICAgICAgIGJyYWNrZXRzID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGNociA9PT0gJygnOlxuICAgICAgICByZXN1bHQgKz0gY2hyO1xuICAgICAgICAvLyBpZ25vcmUgbm9uLWNhcHR1cmluZyBncm91cHNcbiAgICAgICAgaWYgKHN0cmluZ1NsaWNlKHN0cmluZywgaW5kZXggKyAxLCBpbmRleCArIDMpID09PSAnPzonKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4ZWMoSVNfTkNHLCBzdHJpbmdTbGljZShzdHJpbmcsIGluZGV4ICsgMSkpKSB7XG4gICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICBuY2cgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGdyb3VwaWQrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICBjYXNlIGNociA9PT0gJz4nICYmIG5jZzpcbiAgICAgICAgaWYgKGdyb3VwbmFtZSA9PT0gJycgfHwgaGFzT3duKG5hbWVzLCBncm91cG5hbWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdJbnZhbGlkIGNhcHR1cmUgZ3JvdXAgbmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVzW2dyb3VwbmFtZV0gPSB0cnVlO1xuICAgICAgICBuYW1lZFtuYW1lZC5sZW5ndGhdID0gW2dyb3VwbmFtZSwgZ3JvdXBpZF07XG4gICAgICAgIG5jZyA9IGZhbHNlO1xuICAgICAgICBncm91cG5hbWUgPSAnJztcbiAgICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChuY2cpIGdyb3VwbmFtZSArPSBjaHI7XG4gICAgZWxzZSByZXN1bHQgKz0gY2hyO1xuICB9IHJldHVybiBbcmVzdWx0LCBuYW1lZF07XG59O1xuXG4vLyBgUmVnRXhwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAtY29uc3RydWN0b3JcbmlmIChpc0ZvcmNlZCgnUmVnRXhwJywgQkFTRV9GT1JDRUQpKSB7XG4gIHZhciBSZWdFeHBXcmFwcGVyID0gZnVuY3Rpb24gUmVnRXhwKHBhdHRlcm4sIGZsYWdzKSB7XG4gICAgdmFyIHRoaXNJc1JlZ0V4cCA9IGlzUHJvdG90eXBlT2YoUmVnRXhwUHJvdG90eXBlLCB0aGlzKTtcbiAgICB2YXIgcGF0dGVybklzUmVnRXhwID0gaXNSZWdFeHAocGF0dGVybik7XG4gICAgdmFyIGZsYWdzQXJlVW5kZWZpbmVkID0gZmxhZ3MgPT09IHVuZGVmaW5lZDtcbiAgICB2YXIgZ3JvdXBzID0gW107XG4gICAgdmFyIHJhd1BhdHRlcm4gPSBwYXR0ZXJuO1xuICAgIHZhciByYXdGbGFncywgZG90QWxsLCBzdGlja3ksIGhhbmRsZWQsIHJlc3VsdCwgc3RhdGU7XG5cbiAgICBpZiAoIXRoaXNJc1JlZ0V4cCAmJiBwYXR0ZXJuSXNSZWdFeHAgJiYgZmxhZ3NBcmVVbmRlZmluZWQgJiYgcGF0dGVybi5jb25zdHJ1Y3RvciA9PT0gUmVnRXhwV3JhcHBlcikge1xuICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgfVxuXG4gICAgaWYgKHBhdHRlcm5Jc1JlZ0V4cCB8fCBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgcGF0dGVybikpIHtcbiAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnNvdXJjZTtcbiAgICAgIGlmIChmbGFnc0FyZVVuZGVmaW5lZCkgZmxhZ3MgPSBnZXRSZWdFeHBGbGFncyhyYXdQYXR0ZXJuKTtcbiAgICB9XG5cbiAgICBwYXR0ZXJuID0gcGF0dGVybiA9PT0gdW5kZWZpbmVkID8gJycgOiB0b1N0cmluZyhwYXR0ZXJuKTtcbiAgICBmbGFncyA9IGZsYWdzID09PSB1bmRlZmluZWQgPyAnJyA6IHRvU3RyaW5nKGZsYWdzKTtcbiAgICByYXdQYXR0ZXJuID0gcGF0dGVybjtcblxuICAgIGlmIChVTlNVUFBPUlRFRF9ET1RfQUxMICYmICdkb3RBbGwnIGluIHJlMSkge1xuICAgICAgZG90QWxsID0gISFmbGFncyAmJiBzdHJpbmdJbmRleE9mKGZsYWdzLCAncycpID4gLTE7XG4gICAgICBpZiAoZG90QWxsKSBmbGFncyA9IHJlcGxhY2UoZmxhZ3MsIC9zL2csICcnKTtcbiAgICB9XG5cbiAgICByYXdGbGFncyA9IGZsYWdzO1xuXG4gICAgaWYgKE1JU1NFRF9TVElDS1kgJiYgJ3N0aWNreScgaW4gcmUxKSB7XG4gICAgICBzdGlja3kgPSAhIWZsYWdzICYmIHN0cmluZ0luZGV4T2YoZmxhZ3MsICd5JykgPiAtMTtcbiAgICAgIGlmIChzdGlja3kgJiYgVU5TVVBQT1JURURfWSkgZmxhZ3MgPSByZXBsYWNlKGZsYWdzLCAveS9nLCAnJyk7XG4gICAgfVxuXG4gICAgaWYgKFVOU1VQUE9SVEVEX05DRykge1xuICAgICAgaGFuZGxlZCA9IGhhbmRsZU5DRyhwYXR0ZXJuKTtcbiAgICAgIHBhdHRlcm4gPSBoYW5kbGVkWzBdO1xuICAgICAgZ3JvdXBzID0gaGFuZGxlZFsxXTtcbiAgICB9XG5cbiAgICByZXN1bHQgPSBpbmhlcml0SWZSZXF1aXJlZChOYXRpdmVSZWdFeHAocGF0dGVybiwgZmxhZ3MpLCB0aGlzSXNSZWdFeHAgPyB0aGlzIDogUmVnRXhwUHJvdG90eXBlLCBSZWdFeHBXcmFwcGVyKTtcblxuICAgIGlmIChkb3RBbGwgfHwgc3RpY2t5IHx8IGdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUocmVzdWx0KTtcbiAgICAgIGlmIChkb3RBbGwpIHtcbiAgICAgICAgc3RhdGUuZG90QWxsID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucmF3ID0gUmVnRXhwV3JhcHBlcihoYW5kbGVEb3RBbGwocGF0dGVybiksIHJhd0ZsYWdzKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGlja3kpIHN0YXRlLnN0aWNreSA9IHRydWU7XG4gICAgICBpZiAoZ3JvdXBzLmxlbmd0aCkgc3RhdGUuZ3JvdXBzID0gZ3JvdXBzO1xuICAgIH1cblxuICAgIGlmIChwYXR0ZXJuICE9PSByYXdQYXR0ZXJuKSB0cnkge1xuICAgICAgLy8gZmFpbHMgaW4gb2xkIGVuZ2luZXMsIGJ1dCB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlcyBmb3IgdW5zdXBwb3J0ZWQgcmVnZXggc3ludGF4XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0LCAnc291cmNlJywgcmF3UGF0dGVybiA9PT0gJycgPyAnKD86KScgOiByYXdQYXR0ZXJuKTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGZvciAodmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKE5hdGl2ZVJlZ0V4cCksIGluZGV4ID0gMDsga2V5cy5sZW5ndGggPiBpbmRleDspIHtcbiAgICBwcm94eUFjY2Vzc29yKFJlZ0V4cFdyYXBwZXIsIE5hdGl2ZVJlZ0V4cCwga2V5c1tpbmRleCsrXSk7XG4gIH1cblxuICBSZWdFeHBQcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWdFeHBXcmFwcGVyO1xuICBSZWdFeHBXcmFwcGVyLnByb3RvdHlwZSA9IFJlZ0V4cFByb3RvdHlwZTtcbiAgZGVmaW5lQnVpbHRJbihnbG9iYWxUaGlzLCAnUmVnRXhwJywgUmVnRXhwV3JhcHBlciwgeyBjb25zdHJ1Y3RvcjogdHJ1ZSB9KTtcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLUBAc3BlY2llc1xuc2V0U3BlY2llcygnUmVnRXhwJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnLicsICdkJykgLT4gLy4vZCBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyIEZPUkNFRCA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIElORElDRVNfU1VQUE9SVCA9IHRydWU7XG4gIHRyeSB7XG4gICAgUmVnRXhwKCcuJywgJ2QnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBJTkRJQ0VTX1NVUFBPUlQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBPID0ge307XG4gIC8vIG1vZGVybiBWOCBidWdcbiAgdmFyIGNhbGxzID0gJyc7XG4gIHZhciBleHBlY3RlZCA9IElORElDRVNfU1VQUE9SVCA/ICdkZ2ltc3knIDogJ2dpbXN5JztcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGtleSwgY2hyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxzICs9IGNocjtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gfSk7XG4gIH07XG5cbiAgdmFyIHBhaXJzID0ge1xuICAgIGRvdEFsbDogJ3MnLFxuICAgIGdsb2JhbDogJ2cnLFxuICAgIGlnbm9yZUNhc2U6ICdpJyxcbiAgICBtdWx0aWxpbmU6ICdtJyxcbiAgICBzdGlja3k6ICd5J1xuICB9O1xuXG4gIGlmIChJTkRJQ0VTX1NVUFBPUlQpIHBhaXJzLmhhc0luZGljZXMgPSAnZCc7XG5cbiAgZm9yICh2YXIga2V5IGluIHBhaXJzKSBhZGRHZXR0ZXIoa2V5LCBwYWlyc1trZXldKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJlZ0V4cFByb3RvdHlwZSwgJ2ZsYWdzJykuZ2V0LmNhbGwoTyk7XG5cbiAgcmV0dXJuIHJlc3VsdCAhPT0gZXhwZWN0ZWQgfHwgY2FsbHMgIT09IGV4cGVjdGVkO1xufSk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXJcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3NcbmlmIChGT1JDRUQpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihSZWdFeHBQcm90b3R5cGUsICdmbGFncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IHJlZ0V4cEZsYWdzXG59KTtcbiIsImV4cG9ydCBpbnRlcmZhY2UgR3JhbW1hclJ1bGUge1xuICByZWdleHA6IFJlZ0V4cDtcbiAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgbGFiZWxQbGFjZWhvbGRlcj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIVE1MQmxvY2tSdWxlIHtcbiAgc3RhcnQ6IFJlZ0V4cDtcbiAgZW5kOiBSZWdFeHAgfCBmYWxzZTtcbiAgcGFyYUludGVycnVwdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVDb21tYW5kIHtcbiAgdHlwZTogJ2lubGluZSc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBzZXQ6IHtcbiAgICBwcmU6IHN0cmluZztcbiAgICBwb3N0OiBzdHJpbmc7XG4gIH07XG4gIHVuc2V0OiB7XG4gICAgcHJlUGF0dGVybjogUmVnRXhwO1xuICAgIHBvc3RQYXR0ZXJuOiBSZWdFeHA7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGluZUNvbW1hbmQge1xuICB0eXBlOiAnbGluZSc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBzZXQ6IHtcbiAgICBwYXR0ZXJuOiBSZWdFeHA7XG4gICAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgfTtcbiAgdW5zZXQ6IHtcbiAgICBwYXR0ZXJuOiBSZWdFeHA7XG4gICAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ29tbWFuZCA9IElubGluZUNvbW1hbmQgfCBMaW5lQ29tbWFuZDtcblxuY29uc3QgcmVwbGFjZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBSZWdFeHA+ID0ge1xuICBBU0NJSVB1bmN0dWF0aW9uOiAvWyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXl9ge3x9flxcXFxdLywgIFxuICBOb3RUcmlnZ2VyQ2hhcjogL1teYF8qW1xcXSgpPD4hfl0vLFxuICBTY2hlbWU6IC9bQS1aYS16XVtBLVphLXowLTkrLi1dezEsMzF9LyxcbiAgRW1haWw6IC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKi8sIC8vIEZyb20gQ29tbW9uTWFyayBzcGVjXG4gIEhUTUxPcGVuVGFnOiAvPEhUTUxUYWdOYW1lKD86SFRNTEF0dHJpYnV0ZSkqXFxzKlxcLz8+LyxcbiAgSFRNTENsb3NlVGFnOiAvPFxcL0hUTUxUYWdOYW1lXFxzKj4vLFxuICBIVE1MVGFnTmFtZTogL1tBLVphLXpdW0EtWmEtejAtOS1dKi8sIFxuICBIVE1MQ29tbWVudDogLzwhLS0oPzpbXj4tXXwoPzpbXj4tXSg/OlteLV18LVteLV0pKlteLV0pKS0tPi8sXG4gIEhUTUxQSTogLzxcXD8oPzp8LnwoPzpbXj9dfFxcP1tePl0pKilcXD8+LyxcbiAgSFRNTERlY2xhcmF0aW9uOiAvPCFbQS1aXStcXHNbXj5dKj4vLFxuICBIVE1MQ0RBVEE6IC88IVxcW0NEQVRBXFxbLio/XFxdXFxdPi8sXG4gIEhUTUxBdHRyaWJ1dGU6IC9cXHMrW0EtWmEtel86XVtBLVphLXowLTlfLjotXSooPzpIVE1MQXR0VmFsdWUpPy8sXG4gIEhUTUxBdHRWYWx1ZTogL1xccyo9XFxzKig/Oig/OidbXiddKicpfCg/OlwiW15cIl0qXCIpfCg/OlteXFxzXCInPTw+YF0rKSkvLFxuICBLbm93blRhZzogL2FkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoMXxoMnxoM3xoNHxoNXxoNnxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlY3Rpb258c291cmNlfHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwvXG59O1xuXG4vLyBGcm9tIENvbW1vbk1hcmsuanMuIFxuZXhwb3J0IGNvbnN0IHB1bmN0dWF0aW9uTGVhZGluZyA9IG5ldyBSZWdFeHAoL14oPzpbIVwiIyQlJicoKSorLFxcLS4vOjs8PT4/QFtcXF1cXFxcXl9ge3x9flxceEExXFx4QTdcXHhBQlxceEI2XFx4QjdcXHhCQlxceEJGXFx1MDM3RVxcdTAzODdcXHUwNTVBLVxcdTA1NUZcXHUwNTg5XFx1MDU4QVxcdTA1QkVcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTBBRjBcXHUwREY0XFx1MEU0RlxcdTBFNUFcXHUwRTVCXFx1MEYwNC1cXHUwRjEyXFx1MEYxNFxcdTBGM0EtXFx1MEYzRFxcdTBGODVcXHUwRkQwLVxcdTBGRDRcXHUwRkQ5XFx1MEZEQVxcdTEwNEEtXFx1MTA0RlxcdTEwRkJcXHUxMzYwLVxcdTEzNjhcXHUxNDAwXFx1MTY2RFxcdTE2NkVcXHUxNjlCXFx1MTY5Q1xcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTAtXFx1MjAyN1xcdTIwMzAtXFx1MjA0M1xcdTIwNDUtXFx1MjA1MVxcdTIwNTMtXFx1MjA1RVxcdTIwN0RcXHUyMDdFXFx1MjA4RFxcdTIwOEVcXHUyMzA4LVxcdTIzMEJcXHUyMzI5XFx1MjMyQVxcdTI3NjgtXFx1Mjc3NVxcdTI3QzVcXHUyN0M2XFx1MjdFNi1cXHUyN0VGXFx1Mjk4My1cXHUyOTk4XFx1MjlEOC1cXHUyOURCXFx1MjlGQ1xcdTI5RkRcXHUyQ0Y5LVxcdTJDRkNcXHUyQ0ZFXFx1MkNGRlxcdTJENzBcXHUyRTAwLVxcdTJFMkVcXHUyRTMwLVxcdTJFNDJcXHUzMDAxLVxcdTMwMDNcXHUzMDA4LVxcdTMwMTFcXHUzMDE0LVxcdTMwMUZcXHUzMDMwXFx1MzAzRFxcdTMwQTBcXHUzMEZCXFx1QTRGRVxcdUE0RkZcXHVBNjBELVxcdUE2MEZcXHVBNjczXFx1QTY3RVxcdUE2RjItXFx1QTZGN1xcdUE4NzQtXFx1QTg3N1xcdUE4Q0VcXHVBOENGXFx1QThGOC1cXHVBOEZBXFx1QThGQ1xcdUE5MkVcXHVBOTJGXFx1QTk1RlxcdUE5QzEtXFx1QTlDRFxcdUE5REVcXHVBOURGXFx1QUE1Qy1cXHVBQTVGXFx1QUFERVxcdUFBREZcXHVBQUYwXFx1QUFGMVxcdUFCRUJcXHVGRDNFXFx1RkQzRlxcdUZFMTAtXFx1RkUxOVxcdUZFMzAtXFx1RkU1MlxcdUZFNTQtXFx1RkU2MVxcdUZFNjNcXHVGRTY4XFx1RkU2QVxcdUZFNkJcXHVGRjAxLVxcdUZGMDNcXHVGRjA1LVxcdUZGMEFcXHVGRjBDLVxcdUZGMEZcXHVGRjFBXFx1RkYxQlxcdUZGMUZcXHVGRjIwXFx1RkYzQi1cXHVGRjNEXFx1RkYzRlxcdUZGNUJcXHVGRjVEXFx1RkY1Ri1cXHVGRjY1XXxcXHVEODAwW1xcdUREMDAtXFx1REQwMlxcdURGOUZcXHVERkQwXXxcXHVEODAxXFx1REQ2RnxcXHVEODAyW1xcdURDNTdcXHVERDFGXFx1REQzRlxcdURFNTAtXFx1REU1OFxcdURFN0ZcXHVERUYwLVxcdURFRjZcXHVERjM5LVxcdURGM0ZcXHVERjk5LVxcdURGOUNdfFxcdUQ4MDRbXFx1REM0Ny1cXHVEQzREXFx1RENCQlxcdURDQkNcXHVEQ0JFLVxcdURDQzFcXHVERDQwLVxcdURENDNcXHVERDc0XFx1REQ3NVxcdUREQzUtXFx1RERDOVxcdUREQ0RcXHVERERCXFx1RERERC1cXHVERERGXFx1REUzOC1cXHVERTNEXFx1REVBOV18XFx1RDgwNVtcXHVEQ0M2XFx1RERDMS1cXHVEREQ3XFx1REU0MS1cXHVERTQzXFx1REYzQy1cXHVERjNFXXxcXHVEODA5W1xcdURDNzAtXFx1REM3NF18XFx1RDgxQVtcXHVERTZFXFx1REU2RlxcdURFRjVcXHVERjM3LVxcdURGM0JcXHVERjQ0XXxcXHVEODJGXFx1REM5RnxcXHVEODM2W1xcdURFODctXFx1REU4Ql0pLyk7XG5cbmV4cG9ydCBjb25zdCBwdW5jdHVhdGlvblRyYWlsaW5nID0gbmV3IFJlZ0V4cCgvKD86WyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXFxcXF5fYHt8fX5cXHhBMVxceEE3XFx4QUJcXHhCNlxceEI3XFx4QkJcXHhCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwQUYwXFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkRcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMjdcXHUyMDMwLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTQyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzlcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURGM0MtXFx1REYzRV18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdKSQvKTtcblxuLyoqXG4gKiBUaGlzIGlzIENvbW1vbk1hcmsncyBibG9jayBncmFtbWFyLCBidXQgd2UncmUgaWdub3JpbmcgbmVzdGVkIGJsb2NrcyBoZXJlLiAgXG4gKi8gXG5leHBvcnQgY29uc3QgbGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHsgXG4gIFRNSDE6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMVwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgxXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUgyOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgyXCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDJcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDM6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgzXCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDNcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDQ6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INFwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg0XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg1OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg1XCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDVcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDY6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyMjIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg2XCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDZcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNQmxvY2txdW90ZTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfT5bIF0/KSguKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1CbG9ja3F1b3RlXCI+JDE8L3NwYW4+JCQyJ1xuICB9LFxuICBUTUNvZGVGZW5jZUJhY2t0aWNrT3BlbjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5gYGBgKilcXHMqKShbXmBdKj8pKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlQmFja3RpY2tcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNSW5mb1N0cmluZ1wiPiQzPC9zcGFuPiQ0J1xuICB9LFxuICBUTUNvZGVGZW5jZVRpbGRlT3BlbjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5+fn5+KilcXHMqKSguKj8pKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlVGlsZGVcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNSW5mb1N0cmluZ1wiPiQzPC9zcGFuPiQ0J1xuICB9LFxuICBUTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2U6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+YGBgYCopKShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZUJhY2t0aWNrXCI+JDE8L3NwYW4+JDMnXG4gIH0sXG4gIFRNQ29kZUZlbmNlVGlsZGVDbG9zZTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5+fn5+KikpKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlVGlsZGVcIj4kMTwvc3Bhbj4kMydcbiAgfSxcbiAgVE1CbGFua0xpbmU6IHsgXG4gICAgcmVnZXhwOiAvXihbIFxcdF0qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJyQwJ1xuICB9LFxuICBUTVNldGV4dEgxTWFya2VyOiB7IFxuICAgIHJlZ2V4cDogL14gezAsM309K1xccyokLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1TZXRleHRIMU1hcmtlclwiPiQwPC9zcGFuPidcbiAgfSxcbiAgVE1TZXRleHRIMk1hcmtlcjogeyBcbiAgICByZWdleHA6IC9eIHswLDN9LStcXHMqJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNU2V0ZXh0SDFNYXJrZXJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNSFI6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oXFwqWyBcXHRdKlxcKlsgXFx0XSpcXCpbIFxcdCpdKil8KC1bIFxcdF0qLVsgXFx0XSotWyBcXHQtXSopfChfWyBcXHRdKl9bIFxcdF0qX1sgXFx0X10qKSkkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IUlwiPiQwPC9zcGFuPidcbiAgfSxcbiAgVE1VTDogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfVsrKi1dIHsxLDR9KSguKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1VTFwiPiQxPC9zcGFuPiQkMidcbiAgfSxcbiAgVE1PTDogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfVxcZHsxLDl9Wy4pXSB7MSw0fSkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNT0xcIj4kMTwvc3Bhbj4kJDInXG4gIH0sXG4gIC8vIFRPRE86IFRoaXMgaXMgY3VycmVudGx5IHByZXZlbnRpbmcgc3VibGlzdHMgKGFuZCBhbnkgY29udGVudCB3aXRoaW4gbGlzdCBpdGVtcywgcmVhbGx5KSBmcm9tIHdvcmtpbmdcbiAgVE1JbmRlbnRlZENvZGU6IHsgXG4gICAgcmVnZXhwOiAvXiggezR9fFxcdCkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSW5kZW50ZWRDb2RlXCI+JDE8L3NwYW4+JDInXG4gIH0sXG4gIFRNTGlua1JlZmVyZW5jZURlZmluaXRpb246IHtcbiAgICAvLyBUT0RPOiBMaW5rIGRlc3RpbmF0aW9uIGNhbid0IGluY2x1ZGUgdW5iYWxhbmNlZCBwYXJhbnRoZXNlcywgYnV0IHdlIGp1c3QgaWdub3JlIHRoYXQgaGVyZSBcbiAgICByZWdleHA6IC9eKCB7MCwzfVxcW1xccyopKFteXFxzXFxdXSg/OlteXFxdXXxcXFxcXFxdKSo/KShcXHMqXFxdOlxccyopKCg/OlteXFxzPD5dKyl8KD86PCg/OltePD5cXFxcXXxcXFxcLikqPikpPyhcXHMqKSgoPzpcXCgoPzpbXigpXFxcXF18XFxcXC4pKlxcKSl8KD86XCIoPzpbXlwiXFxcXF18XFxcXC4pKlwiKXwoPzonKD86W14nXFxcXF18XFxcXC4pKicpKT8oXFxzKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiPiQxPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1MaW5rTGFiZWwgVE1MaW5rTGFiZWxfRGVmaW5pdGlvblwiPiQyPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCI+JDM8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUxpbmtEZXN0aW5hdGlvblwiPiQ0PC9zcGFuPiQ1PHNwYW4gY2xhc3M9XCJUTUxpbmtUaXRsZVwiPiQ2PC9zcGFuPiQ3JyxcbiAgICBsYWJlbFBsYWNlaG9sZGVyOiAyLCAvLyB0aGlzIGRlZmluZXMgd2hpY2ggcGxhY2Vob2xkZXIgaW4gdGhlIGFib3ZlIHJlZ2V4IGlzIHRoZSBsaW5rIFwibGFiZWxcIlxuICB9LFxufTtcblxuLyoqXG4gKiBIVE1MIGJsb2NrcyBoYXZlIG11bHRpcGxlIGRpZmZlcmVudCBjbGFzc2VzIG9mIG9wZW5lciBhbmQgY2xvc2VyLiBUaGlzIGFycmF5IGRlZmluZXMgYWxsIHRoZSBjYXNlc1xuICovXG5leHBvcnQgY29uc3QgaHRtbEJsb2NrR3JhbW1hcjogSFRNTEJsb2NrUnVsZVtdID0gW1xuICB7IHN0YXJ0OiAvXiB7MCwzfTwoPzpzY3JpcHR8cHJlfHN0eWxlKSg/Olxcc3w+fCQpL2ksIGVuZDogLyg/OjxcXC9zY3JpcHQ+fDxcXC9wcmU+fDxcXC9zdHlsZT4pL2ksIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308IS0tLywgZW5kOiAvLS0+LywgcGFyYUludGVycnVwdDogdHJ1ZSB9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTxcXD8vLCBlbmQ6IC9cXD8+LywgcGFyYUludGVycnVwdDogdHJ1ZSB9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTwhW0EtWl0vLCBlbmQ6IC8+LywgcGFyYUludGVycnVwdCA6IHRydWV9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTwhXFxbQ0RBVEFcXFsvLCBlbmQ6IC9cXF1cXF0+LywgcGFyYUludGVycnVwdCA6IHRydWV9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfSg/Ojx8PFxcLykoPzpLbm93blRhZykoPzpcXHN8PnxcXC8+fCQpL2ksIGVuZDogZmFsc2UsIHBhcmFJbnRlcnJ1cHQ6IHRydWV9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfSg/OkhUTUxPcGVuVGFnfEhUTUxDbG9zZVRhZylcXHMqJC8sIGVuZDogZmFsc2UsIHBhcmFJbnRlcnJ1cHQ6IGZhbHNlfSxcbl07XG5cbi8qKlxuICogU3RydWN0dXJlIG9mIHRoZSBvYmplY3Q6XG4gKiBUb3AgbGV2ZWwgZW50cmllcyBhcmUgcnVsZXMsIGVhY2ggY29uc2lzdGluZyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGluIHN0cmluZyBmb3JtYXQpIGFzIHdlbGwgYXMgYSByZXBsYWNlbWVudC5cbiAqIEluIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zLCByZXBsYWNlbWVudHMgZnJvbSB0aGUgb2JqZWN0ICdyZXBsYWNlbWVudHMnIHdpbGwgYmUgcHJvY2Vzc2VkIGJlZm9yZSBjb21waWxpbmcgaW50byB0aGUgcHJvcGVydHkgcmVnZXhwLlxuICovXG5leHBvcnQgY29uc3QgaW5saW5lR3JhbW1hcjogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+ID0ge1xuICBlc2NhcGUgOiB7XG4gICAgcmVnZXhwOiAvXlxcXFwoQVNDSUlQdW5jdHVhdGlvbikvLFxuICAgIHJlcGxhY2VtZW50IDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUVzY2FwZVwiPlxcXFw8L3NwYW4+JDEnXG4gIH0sXG4gIGNvZGUgOiB7XG4gICAgcmVnZXhwOiAvXihgKykoKD86W15gXSl8KD86W15gXS4qP1teYF0pKShcXDEpLyxcbiAgICByZXBsYWNlbWVudCA6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlXCI+JDE8L3NwYW4+PGNvZGUgY2xhc3M9XCJUTUNvZGVcIj4kMjwvY29kZT48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlXCI+JDM8L3NwYW4+JyBcbiAgfSxcbiAgYXV0b2xpbmsgOiB7XG4gICAgcmVnZXhwOiAvXjwoKD86U2NoZW1lOlteXFxzPD5dKil8KD86RW1haWwpKT4vLFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQXV0b2xpbmtcIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1BdXRvbGlua1wiPiQxPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUF1dG9saW5rXCI+Jmd0Ozwvc3Bhbj4nXG4gIH0sXG4gIGh0bWwgOiB7XG4gICAgcmVnZXhwOiAvXigoPzpIVE1MT3BlblRhZyl8KD86SFRNTENsb3NlVGFnKXwoPzpIVE1MQ29tbWVudCl8KD86SFRNTFBJKXwoPzpIVE1MRGVjbGFyYXRpb24pfCg/OkhUTUxDREFUQSkpLyxcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1IVE1MXCI+JDE8L3NwYW4+JyxcbiAgfSxcbiAgbGlua09wZW4gOiB7XG4gICAgcmVnZXhwOiAvXlxcWy8sXG4gICAgcmVwbGFjZW1lbnQ6ICcnXG4gIH0sXG4gIGltYWdlT3BlbiA6IHtcbiAgICByZWdleHA6IC9eIVxcWy8sXG4gICAgcmVwbGFjZW1lbnQgOiAnJ1xuICB9LFxuICBsaW5rTGFiZWwgOiB7XG4gICAgcmVnZXhwOiAvXihcXFtcXHMqKShbXlxcXV0qPykoXFxzKlxcXSkvLFxuICAgIHJlcGxhY2VtZW50OiAnJyxcbiAgICBsYWJlbFBsYWNlaG9sZGVyOiAyXG4gIH0sXG4gIGRlZmF1bHQgOiB7XG4gICAgcmVnZXhwOiAvXigufCg/Ok5vdFRyaWdnZXJDaGFyKykpLyxcbiAgICByZXBsYWNlbWVudDogJyQxJ1xuICB9XG59O1xuXG4vLyBQcm9jZXNzIHJlcGxhY2VtZW50cyBpbiByZWdleHBzXG5jb25zdCByZXBsYWNlbWVudFJlZ2V4cCA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKS5qb2luKCd8JykpO1xuXG4vLyBJbmxpbmVcbmNvbnN0IGlubGluZVJ1bGVzID0gWy4uLk9iamVjdC5rZXlzKGlubGluZUdyYW1tYXIpXTtcbmZvciAobGV0IHJ1bGUgb2YgaW5saW5lUnVsZXMpIHtcbiAgbGV0IHJlID0gaW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuc291cmNlO1xuICAvLyBSZXBsYWNlIHdoaWxlIHRoZXJlIGlzIHNvbWV0aGluZyB0byByZXBsYWNlLiBUaGlzIG1lYW5zIGl0IGFsc28gd29ya3Mgb3ZlciBtdWx0aXBsZSBsZXZlbHMgKHJlcGxhY2VtZW50cyBjb250YWluaW5nIHJlcGxhY2VtZW50cylcbiAgd2hpbGUgKHJlLm1hdGNoKHJlcGxhY2VtZW50UmVnZXhwKSkge1xuICAgIHJlID0gcmUucmVwbGFjZShyZXBsYWNlbWVudFJlZ2V4cCwgKHN0cmluZykgPT4geyByZXR1cm4gcmVwbGFjZW1lbnRzW3N0cmluZ10uc291cmNlOyB9KTtcbiAgfVxuICBpbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmUsIGlubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLmZsYWdzKTtcbn1cblxuLy8gSFRNTCBCbG9jayAob25seSBvcGVuaW5nIHJ1bGUgaXMgcHJvY2Vzc2VkIGN1cnJlbnRseSlcbmZvciAobGV0IHJ1bGUgb2YgaHRtbEJsb2NrR3JhbW1hcikge1xuICBsZXQgcmUgPSBydWxlLnN0YXJ0LnNvdXJjZTtcbiAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZS4gVGhpcyBtZWFucyBpdCBhbHNvIHdvcmtzIG92ZXIgbXVsdGlwbGUgbGV2ZWxzIChyZXBsYWNlbWVudHMgY29udGFpbmluZyByZXBsYWNlbWVudHMpXG4gIHdoaWxlIChyZS5tYXRjaChyZXBsYWNlbWVudFJlZ2V4cCkpIHtcbiAgICByZSA9IHJlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChzdHJpbmcpID0+IHsgcmV0dXJuIHJlcGxhY2VtZW50c1tzdHJpbmddLnNvdXJjZTsgfSk7XG4gIH1cbiAgcnVsZS5zdGFydCA9IG5ldyBSZWdFeHAocmUsIHJ1bGUuc3RhcnQuZmxhZ3MpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtZXJnZWQgaW5saW5lIGdyYW1tYXIgYnkgY29tYmluaW5nIHRoZSBkZWZhdWx0IGlubGluZSBncmFtbWFyIHdpdGggY3VzdG9tIHJ1bGVzLlxuICogQ3VzdG9tIHJ1bGVzIGFyZSBwcm9jZXNzZWQgYW5kIHRoZWlyIHJlZ2V4cCBwYXR0ZXJucyBhcmUgZXhwYW5kZWQgd2l0aCByZXBsYWNlbWVudHMuXG4gKiBAcGFyYW0gY3VzdG9tUnVsZXMgLSBPYmplY3QgY29udGFpbmluZyBjdXN0b20gaW5saW5lIGdyYW1tYXIgcnVsZXNcbiAqIEByZXR1cm5zIE1lcmdlZCBpbmxpbmUgZ3JhbW1hciBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lcmdlZElubGluZUdyYW1tYXIoY3VzdG9tUnVsZXM6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHt9KTogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+IHtcbiAgY29uc3QgbWVyZ2VkID0geyAuLi5pbmxpbmVHcmFtbWFyIH07XG4gIFxuICAvLyBQcm9jZXNzIGN1c3RvbSBydWxlc1xuICBmb3IgKGNvbnN0IFtydWxlTmFtZSwgcnVsZV0gb2YgT2JqZWN0LmVudHJpZXMoY3VzdG9tUnVsZXMpKSB7XG4gICAgLy8gQ29weSB0aGUgcnVsZSB0byBhdm9pZCBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsXG4gICAgY29uc3QgcHJvY2Vzc2VkUnVsZSA9IHsgLi4ucnVsZSB9O1xuICAgIFxuICAgIC8vIFByb2Nlc3MgcmVwbGFjZW1lbnRzIGluIHRoZSByZWdleHBcbiAgICBsZXQgcmVnZXhwU291cmNlID0gcnVsZS5yZWdleHAuc291cmNlO1xuICAgIGNvbnN0IHJlcGxhY2VtZW50UmVnZXhwID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLmpvaW4oJ3wnKSk7XG4gICAgXG4gICAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZVxuICAgIHdoaWxlIChyZWdleHBTb3VyY2UubWF0Y2gocmVwbGFjZW1lbnRSZWdleHApKSB7XG4gICAgICByZWdleHBTb3VyY2UgPSByZWdleHBTb3VyY2UucmVwbGFjZShyZXBsYWNlbWVudFJlZ2V4cCwgKG1hdGNoKSA9PiB7XG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudHNbbWF0Y2hdLnNvdXJjZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICBwcm9jZXNzZWRSdWxlLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmVnZXhwU291cmNlLCBydWxlLnJlZ2V4cC5mbGFncyk7XG4gICAgbWVyZ2VkW3J1bGVOYW1lXSA9IHByb2Nlc3NlZFJ1bGU7XG4gIH1cbiAgXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogRXNjYXBlcyBIVE1MIHNwZWNpYWwgY2hhcmFjdGVycyAoPCwgPiwgYW5kICYpIGluIHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSByYXcgc3RyaW5nIHRvIGJlIGVzY2FwZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzdHJpbmcsIHJlYWR5IHRvIGJlIHVzZWQgaW4gSFRNTFxuICovXG5leHBvcnQgZnVuY3Rpb24gaHRtbGVzY2FwZShzdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAoc3RyaW5nID8gc3RyaW5nIDogJycpXG4gICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbn1cblxuLyoqXG4gKiBDb250YWlucyB0aGUgY29tbWFuZHMgdGhhdCBjYW4gYmUgc2VudCB0byB0aGUgZWRpdG9yLiBDb250YWlucyBvYmplY3RzIHdpdGggYSBuYW1lIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZC5cbiAqIEVhY2ggb2YgdGhlIG9iamVjdHMgY29udGFpbnMgdGhlIGZvbGxvd2luZyBrZXlzOlxuICogXG4gKiAgIC0gdHlwZTogQ2FuIGJlIGVpdGhlciBpbmxpbmUgKGZvciBpbmxpbmUgZm9ybWF0dGluZykgb3IgbGluZSAoZm9yIGJsb2NrIC8gbGluZSBmb3JtYXR0aW5nKS5cbiAqICAgLSBjbGFzc05hbWU6IFVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNvbW1hbmQgaXMgYWN0aXZlIGF0IGEgZ2l2ZW4gcG9zaXRpb24uIFxuICogICAgIEZvciBsaW5lIGZvcm1hdHRpbmcsIHRoaXMgbG9va3MgYXQgdGhlIGNsYXNzIG9mIHRoZSBsaW5lIGVsZW1lbnQuIEZvciBpbmxpbmUgZWxlbWVudHMsIHRyaWVzIHRvIGZpbmQgYW4gZW5jbG9zaW5nIGVsZW1lbnQgd2l0aCB0aGF0IGNsYXNzLlxuICogICAtIHNldCAvIHVuc2V0OiBDb250YWluIGluc3RydWN0aW9ucyBob3cgdG8gc2V0IGFuZCB1bnNldCB0aGUgY29tbWFuZC4gRm9yIGxpbmUgdHlwZSBjb21tYW5kcywgYm90aCBjb25zaXN0IG9mIGEgcGF0dGVybiBhbmQgcmVwbGFjZW1lbnQgdGhhdCBcbiAqICAgICB3aWxsIGJlIGFwcGxpZWQgdG8gZWFjaCBsaW5lICh1c2luZyBTdHJpbmcucmVwbGFjZSkuIEZvciBpbmxpbmUgdHlwZSBjb21tYW5kcywgdGhlIHNldCBvYmplY3QgY29udGFpbnMgYSBwcmUgYW5kIHBvc3Qgc3RyaW5nIHdoaWNoIHdpbGxcbiAqICAgICBiZSBpbnNlcnRlZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzZWxlY3Rpb24uIFRoZSB1bnNldCBvYmplY3QgY29udGFpbnMgYSBwcmVQYXR0ZXJuIGFuZCBhIHBvc3RQYXR0ZXJuLiBCb3RoIHNob3VsZCBiZSByZWd1bGFyIGV4cHJlc3Npb25zIGFuZCBcbiAqICAgICB0aGV5IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9ydGlvbiBvZiB0aGUgbGluZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzZWxlY3Rpb24gKHVzaW5nIFN0cmluZy5yZXBsYWNlLCB3aXRoIGFuIGVtcHR5IHJlcGxhY2VtZW50IHN0cmluZykuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21tYW5kczogUmVjb3JkPHN0cmluZywgQ29tbWFuZD4gPSB7XG4gIC8vIFJlcGxhY2VtZW50cyBmb3IgdW5zZXQgZm9yIGlubGluZSBjb21tYW5kcyBhcmUgJycgYnkgZGVmYXVsdFxuICBib2xkOiB7XG4gICAgdHlwZTogJ2lubGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNU3Ryb25nJywgXG4gICAgc2V0OiB7cHJlOiAnKionLCBwb3N0OiAnKionfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOiAvKD86XFwqXFwqfF9fKSQvLCBwb3N0UGF0dGVybjogL14oPzpcXCpcXCp8X18pL31cbiAgfSwgXG4gIGl0YWxpYzoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUVtJywgXG4gICAgc2V0OiB7cHJlOiAnKicsIHBvc3Q6ICcqJ30sIFxuICAgIHVuc2V0OiB7cHJlUGF0dGVybjogLyg/OlxcKnxfKSQvLCBwb3N0UGF0dGVybjogL14oPzpcXCp8XykvfVxuICB9LFxuICBjb2RlOiB7XG4gICAgdHlwZTogJ2lubGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNQ29kZScsIFxuICAgIHNldDoge3ByZTogJ2AnLCBwb3N0OiAnYCd9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46IC9gKyQvLCBwb3N0UGF0dGVybjogL15gKy99IC8vIEZJWE1FIHRoaXMgZG9lc24ndCBlbnN1cmUgYmFsYW5jZWQgYmFja3RpY2tzIHJpZ2h0IG5vd1xuICB9LCBcbiAgc3RyaWtldGhyb3VnaDoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVN0cmlrZXRocm91Z2gnLCBcbiAgICBzZXQ6IHtwcmU6ICd+ficsIHBvc3Q6ICd+fid9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46L35+JC8sIHBvc3RQYXR0ZXJuOiAvXn5+LyB9XG4gIH0sXG4gIGgxOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgxJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9I1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDI6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDInLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGgzOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgzJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg0OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg0JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjI1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDU6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDUnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg2OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg2JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jIyMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIHVsOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVVMJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICctICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9WysqLV0gezEsNH0pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgb2w6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNT0wnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyQjLiAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfVxcZHsxLDl9Wy4pXSB7MSw0fSkoLiopJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LCBcbiAgYmxvY2txdW90ZToge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1CbG9ja3F1b3RlJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICc+ICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9PlsgXT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbn07IiwiaW1wb3J0IHtcbiAgaW5saW5lR3JhbW1hcixcbiAgbGluZUdyYW1tYXIsXG4gIHB1bmN0dWF0aW9uTGVhZGluZyxcbiAgcHVuY3R1YXRpb25UcmFpbGluZyxcbiAgaHRtbGVzY2FwZSxcbiAgaHRtbEJsb2NrR3JhbW1hcixcbiAgY29tbWFuZHMsXG4gIEhUTUxCbG9ja1J1bGUsXG4gIENvbW1hbmQsXG4gIEdyYW1tYXJSdWxlLFxuICBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyLFxufSBmcm9tIFwiLi9ncmFtbWFyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yUHJvcHMge1xuICBlbGVtZW50Pzogc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG4gIGVkaXRvcj86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICBjb250ZW50Pzogc3RyaW5nO1xuICB0ZXh0YXJlYT86IHN0cmluZyB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gIGN1c3RvbUlubGluZUdyYW1tYXI/OiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb24ge1xuICByb3c6IG51bWJlcjtcbiAgY29sOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeVN0YXRlIHtcbiAgY29udGVudDogc3RyaW5nO1xuICBzZWxlY3Rpb246IFBvc2l0aW9uIHwgbnVsbDtcbiAgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlRXZlbnQge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGxpbmVzRGlydHk6IGJvb2xlYW5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25FdmVudCB7XG4gIGZvY3VzOiBQb3NpdGlvbjtcbiAgYW5jaG9yOiBQb3NpdGlvbjtcbiAgY29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcEV2ZW50IHtcbiAgZGF0YVRyYW5zZmVyOiBEYXRhVHJhbnNmZXI7XG59XG5cbnR5cGUgRXZlbnRUeXBlID0gJ2NoYW5nZScgfCAnc2VsZWN0aW9uJyB8ICdkcm9wJztcbnR5cGUgRXZlbnRIYW5kbGVyPFQ+ID0gKGV2ZW50OiBUKSA9PiB2b2lkO1xuXG5leHBvcnQgY2xhc3MgRWRpdG9yIHtcbiAgcHVibGljIGU6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyB0ZXh0YXJlYTogSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lRWxlbWVudHM6IE5vZGVMaXN0T2Y8Q2hpbGROb2RlPiB8IEhUTUxDb2xsZWN0aW9uIHwgQ2hpbGROb2RlW10gPSBbXTtcbiAgcHVibGljIGxpbmVUeXBlczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVDYXB0dXJlczogUmVnRXhwRXhlY0FycmF5W10gPSBbXTtcbiAgcHVibGljIGxpbmVSZXBsYWNlbWVudHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5rTGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZURpcnR5OiBib29sZWFuW10gPSBbXTtcbiAgcHVibGljIGxhc3RDb21tYW5kU3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1c3RvbUlubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHt9O1xuICBwcml2YXRlIG1lcmdlZElubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IGlubGluZUdyYW1tYXI7XG4gIHByaXZhdGUgaGFzRm9jdXM6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIGxhc3RTZWxlY3Rpb246IHsgZm9jdXM6IFBvc2l0aW9uIHwgbnVsbDsgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgfSB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBsaXN0ZW5lcnM6IHtcbiAgICBjaGFuZ2U6IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD5bXTtcbiAgICBzZWxlY3Rpb246IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD5bXTtcbiAgICBkcm9wOiBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PltdO1xuICB9ID0ge1xuICAgIGNoYW5nZTogW10sXG4gICAgc2VsZWN0aW9uOiBbXSxcbiAgICBkcm9wOiBbXSxcbiAgfTtcblxuICBwcml2YXRlIHVuZG9TdGFjazogSGlzdG9yeVN0YXRlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWRvU3RhY2s6IEhpc3RvcnlTdGF0ZVtdID0gW107XG4gIHByaXZhdGUgaXNSZXN0b3JpbmdIaXN0b3J5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgbWF4SGlzdG9yeTogbnVtYmVyID0gMTAwO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFZGl0b3JQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLnRleHRhcmVhID0gbnVsbDtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gICAgdGhpcy5saW5lRWxlbWVudHMgPSBbXSBhcyBDaGlsZE5vZGVbXTtcbiAgICB0aGlzLmxpbmVUeXBlcyA9IFtdO1xuICAgIHRoaXMubGluZUNhcHR1cmVzID0gW107XG4gICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzID0gW107XG4gICAgdGhpcy5saW5rTGFiZWxzID0gW107XG4gICAgdGhpcy5saW5lRGlydHkgPSBbXTtcbiAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuaGFzRm9jdXMgPSB0cnVlO1xuICAgIHRoaXMubGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgdGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyID0gcHJvcHMuY3VzdG9tSW5saW5lR3JhbW1hciB8fCB7fTtcbiAgICB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIgPSBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyKHRoaXMuY3VzdG9tSW5saW5lR3JhbW1hcik7XG5cbiAgICB0aGlzLmxpc3RlbmVycyA9IHtcbiAgICAgIGNoYW5nZTogW10sXG4gICAgICBzZWxlY3Rpb246IFtdLFxuICAgICAgZHJvcDogW10sXG4gICAgfTtcblxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBwcm9wcy5lbGVtZW50O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJvcHMudGV4dGFyZWEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMudGV4dGFyZWEpIGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgfSBlbHNlIGlmIChwcm9wcy50ZXh0YXJlYSkge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IHByb3BzLnRleHRhcmVhO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRleHRhcmVhKSB7XG4gICAgICBpZiAoIWVsZW1lbnQpIGVsZW1lbnQgPSB0aGlzLnRleHRhcmVhO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYm9keVwiKVswXTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC50YWdOYW1lID09PSBcIlRFWFRBUkVBXCIpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBlbGVtZW50IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgICBlbGVtZW50ID0gdGhpcy50ZXh0YXJlYS5wYXJlbnROb2RlIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRleHRhcmVhKSB7XG4gICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB9XG5cbiAgICB0aGlzLnVuZG9TdGFjayA9IFtdO1xuICAgIHRoaXMucmVkb1N0YWNrID0gW107XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgICB0aGlzLm1heEhpc3RvcnkgPSAxMDA7XG5cbiAgICB0aGlzLmNyZWF0ZUVkaXRvckVsZW1lbnQoZWxlbWVudCwgcHJvcHMpO1xuICAgIHRoaXMuc2V0Q29udGVudChcbiAgICAgIHR5cGVvZiBwcm9wcy5jb250ZW50ID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gcHJvcHMuY29udGVudFxuICAgICAgICA6IHRoaXMudGV4dGFyZWFcbiAgICAgICAgPyB0aGlzLnRleHRhcmVhLnZhbHVlXG4gICAgICAgIDogXCIjIEhlbGxvIFRpbnlNREUhXFxuRWRpdCAqKmhlcmUqKlwiXG4gICAgKTtcbiAgICBcbiAgICB0aGlzLmUhLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB0aGlzLmhhbmRsZVVuZG9SZWRvS2V5KGUpKTtcbiAgfVxuXG4gIGdldCBjYW5VbmRvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnVuZG9TdGFjay5sZW5ndGggPj0gMjtcbiAgfVxuXG4gIGdldCBjYW5SZWRvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlZG9TdGFjay5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoSGlzdG9yeSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHJldHVybjtcbiAgICB0aGlzLnB1c2hDdXJyZW50U3RhdGUoKTtcbiAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ3VycmVudFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMudW5kb1N0YWNrLnB1c2goe1xuICAgICAgY29udGVudDogdGhpcy5nZXRDb250ZW50KCksXG4gICAgICBzZWxlY3Rpb246IHRoaXMuZ2V0U2VsZWN0aW9uKCksXG4gICAgICBhbmNob3I6IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLnVuZG9TdGFjay5sZW5ndGggPiB0aGlzLm1heEhpc3RvcnkpIHRoaXMudW5kb1N0YWNrLnNoaWZ0KCk7XG4gIH1cblxuICBwdWJsaWMgdW5kbygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy51bmRvU3RhY2subGVuZ3RoIDwgMikgcmV0dXJuO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gdHJ1ZTtcbiAgICB0aGlzLnB1c2hDdXJyZW50U3RhdGUoKTtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy51bmRvU3RhY2sucG9wKCkhO1xuICAgIHRoaXMucmVkb1N0YWNrLnB1c2goY3VycmVudCk7XG4gICAgY29uc3QgcHJldiA9IHRoaXMudW5kb1N0YWNrW3RoaXMudW5kb1N0YWNrLmxlbmd0aCAtIDFdO1xuICAgIHRoaXMuc2V0Q29udGVudChwcmV2LmNvbnRlbnQpO1xuICAgIGlmIChwcmV2LnNlbGVjdGlvbikgdGhpcy5zZXRTZWxlY3Rpb24ocHJldi5zZWxlY3Rpb24sIHByZXYuYW5jaG9yKTtcbiAgICB0aGlzLnVuZG9TdGFjay5wb3AoKTtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlZG8oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlZG9TdGFjay5sZW5ndGgpIHJldHVybjtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IHRydWU7XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMucmVkb1N0YWNrLnBvcCgpITtcbiAgICB0aGlzLnNldENvbnRlbnQobmV4dC5jb250ZW50KTtcbiAgICBpZiAobmV4dC5zZWxlY3Rpb24pIHRoaXMuc2V0U2VsZWN0aW9uKG5leHQuc2VsZWN0aW9uLCBuZXh0LmFuY2hvcik7XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVW5kb1JlZG9LZXkoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlzTWFjID0gL01hY3xpUG9kfGlQaG9uZXxpUGFkLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7XG4gICAgY29uc3QgY3RybCA9IGlzTWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5O1xuICAgIGlmIChjdHJsICYmICFlLmFsdEtleSkge1xuICAgICAgaWYgKGUua2V5ID09PSBcInpcIiB8fCBlLmtleSA9PT0gXCJaXCIpIHtcbiAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICB0aGlzLnJlZG8oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVuZG8oKTtcbiAgICAgICAgfVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBcInlcIiB8fCBlLmtleSA9PT0gXCJZXCIpIHtcbiAgICAgICAgdGhpcy5yZWRvKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVkaXRvckVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3BzOiBFZGl0b3JQcm9wcyk6IHZvaWQge1xuICAgIGlmIChwcm9wcyAmJiBwcm9wcy5lZGl0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5lZGl0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmVkaXRvcikgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmUgPSBwcm9wcy5lZGl0b3IgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgfVxuXG4gICAgdGhpcy5lLmNsYXNzTGlzdC5hZGQoXCJUaW55TURFXCIpO1xuICAgIHRoaXMuZS5jb250ZW50RWRpdGFibGUgPSBcInRydWVcIjtcbiAgICB0aGlzLmUuc3R5bGUud2hpdGVTcGFjZSA9IFwicHJlLXdyYXBcIjtcbiAgICAodGhpcy5lLnN0eWxlIGFzIGFueSkud2Via2l0VXNlck1vZGlmeSA9IFwicmVhZC13cml0ZS1wbGFpbnRleHQtb25seVwiO1xuXG4gICAgaWYgKHByb3BzLmVkaXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudGV4dGFyZWEgJiZcbiAgICAgICAgdGhpcy50ZXh0YXJlYS5wYXJlbnROb2RlID09PSBlbGVtZW50ICYmXG4gICAgICAgIHRoaXMudGV4dGFyZWEubmV4dFNpYmxpbmdcbiAgICAgICkge1xuICAgICAgICBlbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmUsIHRoaXMudGV4dGFyZWEubmV4dFNpYmxpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgKGUpID0+IHRoaXMuaGFuZGxlSW5wdXRFdmVudChlKSk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmVpbnB1dFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVCZWZvcmVJbnB1dEV2ZW50KGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uZW5kXCIsIChlKSA9PiB0aGlzLmhhbmRsZUlucHV0RXZlbnQoZSkpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgIGlmICh0aGlzLmhhc0ZvY3VzKSB7IHRoaXMuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoZSk7IH1cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCAoKSA9PiB0aGlzLmhhc0ZvY3VzID0gZmFsc2UgKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsICgpID0+IHRoaXMuaGFzRm9jdXMgPSB0cnVlICk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJwYXN0ZVwiLCAoZSkgPT4gdGhpcy5oYW5kbGVQYXN0ZShlKSk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJkcm9wXCIsIChlKSA9PiB0aGlzLmhhbmRsZURyb3AoZSkpO1xuICAgIHRoaXMubGluZUVsZW1lbnRzID0gdGhpcy5lLmNoaWxkTm9kZXM7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29udGVudChjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aGlsZSAodGhpcy5lIS5maXJzdENoaWxkKSB7XG4gICAgICB0aGlzLmUhLnJlbW92ZUNoaWxkKHRoaXMuZSEuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMubGluZXMgPSBjb250ZW50LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcbiAgICB0aGlzLmxpbmVEaXJ0eSA9IFtdO1xuICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGg7IGxpbmVOdW0rKykge1xuICAgICAgbGV0IGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRoaXMuZSEuYXBwZW5kQ2hpbGQobGUpO1xuICAgICAgdGhpcy5saW5lRGlydHkucHVzaCh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5saW5lVHlwZXMgPSBuZXcgQXJyYXkodGhpcy5saW5lcy5sZW5ndGgpO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250ZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGluZXMuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9ybWF0dGluZygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUxpbmVUeXBlcygpO1xuICAgIHRoaXMudXBkYXRlTGlua0xhYmVscygpO1xuICAgIHRoaXMuYXBwbHlMaW5lVHlwZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGlua0xhYmVscygpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmtMYWJlbHMgPSBbXTtcbiAgICBmb3IgKGxldCBsID0gMDsgbCA8IHRoaXMubGluZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgIGlmICh0aGlzLmxpbmVUeXBlc1tsXSA9PT0gXCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5saW5rTGFiZWxzLnB1c2goXG4gICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbbF1bXG4gICAgICAgICAgICBsaW5lR3JhbW1hci5UTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uLmxhYmVsUGxhY2Vob2xkZXIhXG4gICAgICAgICAgXVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZShyZXBsYWNlbWVudDogc3RyaW5nLCBjYXB0dXJlOiBSZWdFeHBFeGVjQXJyYXkpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlbWVudC5yZXBsYWNlKC8oXFwkezEsMn0pKFswLTldKS9nLCAoc3RyLCBwMSwgcDIpID0+IHtcbiAgICAgIGlmIChwMSA9PT0gXCIkXCIpIHJldHVybiBodG1sZXNjYXBlKGNhcHR1cmVbcGFyc2VJbnQocDIpXSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJUTUlubGluZUZvcm1hdHRlZFwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKFxuICAgICAgICAgIGNhcHR1cmVbcGFyc2VJbnQocDIpXVxuICAgICAgICApfTwvc3Bhbj5gO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUxpbmVUeXBlcygpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGlmICh0aGlzLmxpbmVEaXJ0eVtsaW5lTnVtXSkge1xuICAgICAgICBsZXQgY29udGVudEhUTUwgPSB0aGlzLnJlcGxhY2UoXG4gICAgICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2xpbmVOdW1dLFxuICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xpbmVOdW1dXG4gICAgICAgICk7XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lID0gdGhpcy5saW5lVHlwZXNbbGluZU51bV07XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkucmVtb3ZlQXR0cmlidXRlKFwic3R5bGVcIik7XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MID1cbiAgICAgICAgICBjb250ZW50SFRNTCA9PT0gXCJcIiA/IFwiPGJyIC8+XCIgOiBjb250ZW50SFRNTDtcbiAgICAgIH1cbiAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldC5saW5lTnVtID0gbGluZU51bS50b1N0cmluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZVR5cGVzKCk6IHZvaWQge1xuICAgIGxldCBjb2RlQmxvY2tUeXBlOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBjb2RlQmxvY2tTZXFMZW5ndGggPSAwO1xuICAgIGxldCBodG1sQmxvY2s6IEhUTUxCbG9ja1J1bGUgfCBmYWxzZSA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgbGluZU51bSA9IDA7IGxpbmVOdW0gPCB0aGlzLmxpbmVzLmxlbmd0aDsgbGluZU51bSsrKSB7XG4gICAgICBsZXQgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgbGV0IGxpbmVDYXB0dXJlOiBSZWdFeHBFeGVjQXJyYXkgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgbGV0IGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG5cbiAgICAgIC8vIENoZWNrIG9uZ29pbmcgY29kZSBibG9ja3NcbiAgICAgIGlmIChjb2RlQmxvY2tUeXBlID09PSBcIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlICYmIGNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGggPj0gY29kZUJsb2NrU2VxTGVuZ3RoKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZS5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgY29kZUJsb2NrVHlwZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUZlbmNlZENvZGVCYWNrdGlja1wiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNRmVuY2VkQ29kZVwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvZGVCbG9ja1R5cGUgPT09IFwiVE1Db2RlRmVuY2VUaWxkZU9wZW5cIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlVGlsZGVDbG9zZS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUgJiYgY2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aCA+PSBjb2RlQmxvY2tTZXFMZW5ndGgpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1Db2RlRmVuY2VUaWxkZUNsb3NlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VUaWxkZUNsb3NlLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICBjb2RlQmxvY2tUeXBlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNRmVuY2VkQ29kZVRpbGRlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1GZW5jZWRDb2RlXCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgSFRNTCBibG9jayB0eXBlc1xuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNUGFyYVwiICYmIGh0bWxCbG9jayA9PT0gZmFsc2UpIHtcbiAgICAgICAgZm9yIChsZXQgaHRtbEJsb2NrVHlwZSBvZiBodG1sQmxvY2tHcmFtbWFyKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZU51bV0ubWF0Y2goaHRtbEJsb2NrVHlwZS5zdGFydCkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaHRtbEJsb2NrVHlwZS5wYXJhSW50ZXJydXB0IHx8XG4gICAgICAgICAgICAgIGxpbmVOdW0gPT09IDAgfHxcbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1QYXJhXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1VTFwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNT0xcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTUJsb2NrcXVvdGVcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaHRtbEJsb2NrID0gaHRtbEJsb2NrVHlwZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChodG1sQmxvY2sgIT09IGZhbHNlKSB7XG4gICAgICAgIGxpbmVUeXBlID0gXCJUTUhUTUxCbG9ja1wiO1xuICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUhUTUxDb250ZW50XCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuXG4gICAgICAgIGlmIChodG1sQmxvY2suZW5kKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZU51bV0ubWF0Y2goaHRtbEJsb2NrLmVuZCkpIHtcbiAgICAgICAgICAgIGh0bWxCbG9jayA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBsaW5lTnVtID09PSB0aGlzLmxpbmVzLmxlbmd0aCAtIDEgfHxcbiAgICAgICAgICAgIHRoaXMubGluZXNbbGluZU51bSArIDFdLm1hdGNoKGxpbmVHcmFtbWFyLlRNQmxhbmtMaW5lLnJlZ2V4cClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGh0bWxCbG9jayA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBhbGwgcmVnZXhwcyBpZiB3ZSBoYXZlbid0IGFwcGxpZWQgb25lIG9mIHRoZSBjb2RlIGJsb2NrIHR5cGVzXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1QYXJhXCIpIHtcbiAgICAgICAgZm9yIChsZXQgdHlwZSBpbiBsaW5lR3JhbW1hcikge1xuICAgICAgICAgIGlmIChsaW5lR3JhbW1hclt0eXBlXS5yZWdleHApIHtcbiAgICAgICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXJbdHlwZV0ucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgICAgICBsaW5lVHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyW3R5cGVdLnJlcGxhY2VtZW50O1xuICAgICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSd2ZSBvcGVuZWQgYSBjb2RlIGJsb2NrLCByZW1lbWJlciB0aGF0XG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW5cIiB8fCBsaW5lVHlwZSA9PT0gXCJUTUNvZGVGZW5jZVRpbGRlT3BlblwiKSB7XG4gICAgICAgIGNvZGVCbG9ja1R5cGUgPSBsaW5lVHlwZTtcbiAgICAgICAgY29kZUJsb2NrU2VxTGVuZ3RoID0gbGluZUNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIC8vIExpbmsgcmVmZXJlbmNlIGRlZmluaXRpb24gYW5kIGluZGVudGVkIGNvZGUgY2FuJ3QgaW50ZXJydXB0IGEgcGFyYWdyYXBoXG4gICAgICBpZiAoXG4gICAgICAgIChsaW5lVHlwZSA9PT0gXCJUTUluZGVudGVkQ29kZVwiIHx8IGxpbmVUeXBlID09PSBcIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIikgJiZcbiAgICAgICAgbGluZU51bSA+IDAgJiZcbiAgICAgICAgKHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVBhcmFcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVVMXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1PTFwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNQmxvY2txdW90ZVwiKVxuICAgICAgKSB7XG4gICAgICAgIGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXRleHQgSDIgbWFya2VycyB0aGF0IGNhbiBhbHNvIGJlIGludGVycHJldGVkIGFzIGFuIGVtcHR5IGxpc3QgaXRlbSBzaG91bGQgYmUgcmVnYXJkZWQgYXMgc3VjaFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDJNYXJrZXJcIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNVUwucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNVUxcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTVVMLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXRleHQgaGVhZGluZ3MgYXJlIG9ubHkgdmFsaWQgaWYgcHJlY2VkZWQgYnkgYSBwYXJhZ3JhcGhcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgxTWFya2VyXCIgfHwgbGluZVR5cGUgPT09IFwiVE1TZXRleHRIMk1hcmtlclwiKSB7XG4gICAgICAgIGlmIChsaW5lTnVtID09PSAwIHx8IHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSAhPT0gXCJUTVBhcmFcIikge1xuICAgICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1IUi5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgICAgbGluZVR5cGUgPSBcIlRNSFJcIjtcbiAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNSFIucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBoZWFkaW5nTGluZSA9IGxpbmVOdW0gLSAxO1xuICAgICAgICAgIGNvbnN0IGhlYWRpbmdMaW5lVHlwZSA9IGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDFNYXJrZXJcIiA/IFwiVE1TZXRleHRIMVwiIDogXCJUTVNldGV4dEgyXCI7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSAhPT0gaGVhZGluZ0xpbmVUeXBlKSB7XG4gICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSA9IGhlYWRpbmdMaW5lVHlwZTtcbiAgICAgICAgICAgICAgdGhpcy5saW5lRGlydHlbaGVhZGluZ0xpbmVdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1toZWFkaW5nTGluZV0gPSBcIiQkMFwiO1xuICAgICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbaGVhZGluZ0xpbmVdID0gW3RoaXMubGluZXNbaGVhZGluZ0xpbmVdXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgICAgICBoZWFkaW5nTGluZS0tO1xuICAgICAgICAgIH0gd2hpbGUgKGhlYWRpbmdMaW5lID49IDAgJiYgdGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdID09PSBcIlRNUGFyYVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5saW5lVHlwZXNbbGluZU51bV0gIT09IGxpbmVUeXBlKSB7XG4gICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW1dID0gbGluZVR5cGU7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVOdW1dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1tsaW5lTnVtXSA9IGxpbmVSZXBsYWNlbWVudDtcbiAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xpbmVOdW1dID0gbGluZUNhcHR1cmU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGlvbihnZXRBbmNob3I6IGJvb2xlYW4gPSBmYWxzZSk6IFBvc2l0aW9uIHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGxldCBzdGFydE5vZGUgPSBnZXRBbmNob3IgPyBzZWxlY3Rpb24hLmFuY2hvck5vZGUgOiBzZWxlY3Rpb24hLmZvY3VzTm9kZTtcbiAgICBpZiAoIXN0YXJ0Tm9kZSkgcmV0dXJuIG51bGw7XG4gICAgbGV0IG9mZnNldCA9IGdldEFuY2hvciA/IHNlbGVjdGlvbiEuYW5jaG9yT2Zmc2V0IDogc2VsZWN0aW9uIS5mb2N1c09mZnNldDtcbiAgICBpZiAoc3RhcnROb2RlID09PSB0aGlzLmUpIHtcbiAgICAgIGlmIChvZmZzZXQgPCB0aGlzLmxpbmVzLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3c6IG9mZnNldCxcbiAgICAgICAgICBjb2w6IDAsXG4gICAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb3c6IG9mZnNldCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1tvZmZzZXQgLSAxXS5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBjb2wgPSB0aGlzLmNvbXB1dGVDb2x1bW4oc3RhcnROb2RlLCBvZmZzZXQpO1xuICAgIGlmIChjb2wgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgbGV0IG5vZGUgPSBzdGFydE5vZGU7XG4gICAgd2hpbGUgKG5vZGUucGFyZW50RWxlbWVudCAhPT0gdGhpcy5lKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnRFbGVtZW50ITtcbiAgICB9XG5cbiAgICBsZXQgcm93ID0gMDtcbiAgICAvLyBJZiB0aGUgbm9kZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBzaWJsaW5nLCBpdCBtdXN0IGJlIHRoZSBmaXJzdCBsaW5lXG4gICAgaWYgKG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICBjb25zdCBjdXJyZW50TGluZU51bURhdGEgPSAobm9kZSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldD8ubGluZU51bTtcbiAgICAgIGNvbnN0IHByZXZpb3VzTGluZU51bURhdGEgPSAobm9kZS5wcmV2aW91c1NpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQ/LmxpbmVOdW07XG5cbiAgICAgIGlmIChjdXJyZW50TGluZU51bURhdGEgJiYgcHJldmlvdXNMaW5lTnVtRGF0YSkge1xuICAgICAgICBjb25zdCBjdXJyZW50TGluZU51bSA9IHBhcnNlSW50KGN1cnJlbnRMaW5lTnVtRGF0YSk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzTGluZU51bSA9IHBhcnNlSW50KHByZXZpb3VzTGluZU51bURhdGEpO1xuICAgICAgICBpZiAoY3VycmVudExpbmVOdW0gPT09IHByZXZpb3VzTGluZU51bSArIDEpIHtcbiAgICAgICAgICByb3cgPSBjdXJyZW50TGluZU51bTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBsaW5lIGlzIE5PVCB0aGUgcHJldmlvdXMgbGluZSArIDEsIHRoZW4gZWl0aGVyIFxuICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGxpbmUgZ290IHNwbGl0IGluIHR3byBvciBtZXJnZWQgd2l0aCB0aGUgcHJldmlvdXMgbGluZVxuICAgICAgICAgIC8vIEVpdGhlciB3YXksIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIHJvdyBudW1iZXJcbiAgICAgICAgICB3aGlsZSAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICAgIHJvdysrO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyByb3c6IHJvdywgY29sOiBjb2wgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWxlY3Rpb24oZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIWZvY3VzKSByZXR1cm47XG5cbiAgICBsZXQgeyBub2RlOiBmb2N1c05vZGUsIG9mZnNldDogZm9jdXNPZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICBmb2N1cy5yb3csXG4gICAgICBmb2N1cy5jb2wsXG4gICAgICBhbmNob3IgPyBhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA+IGZvY3VzLmNvbCA6IGZhbHNlXG4gICAgKTtcbiAgICBsZXQgYW5jaG9yTm9kZSA9IG51bGwsXG4gICAgICBhbmNob3JPZmZzZXQgPSBudWxsO1xuICAgIGlmIChhbmNob3IgJiYgKGFuY2hvci5yb3cgIT09IGZvY3VzLnJvdyB8fCBhbmNob3IuY29sICE9PSBmb2N1cy5jb2wpKSB7XG4gICAgICBsZXQgeyBub2RlLCBvZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICAgIGFuY2hvci5yb3csXG4gICAgICAgIGFuY2hvci5jb2wsXG4gICAgICAgIGZvY3VzLnJvdyA9PT0gYW5jaG9yLnJvdyAmJiBmb2N1cy5jb2wgPiBhbmNob3IuY29sXG4gICAgICApO1xuICAgICAgYW5jaG9yTm9kZSA9IG5vZGU7XG4gICAgICBhbmNob3JPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgbGV0IHdpbmRvd1NlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICB3aW5kb3dTZWxlY3Rpb24hLnNldEJhc2VBbmRFeHRlbnQoXG4gICAgICBmb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCxcbiAgICAgIGFuY2hvck5vZGUgfHwgZm9jdXNOb2RlLFxuICAgICAgYW5jaG9yTm9kZSA/IGFuY2hvck9mZnNldCEgOiBmb2N1c09mZnNldFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVzdG9yZUxhc3RTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubGFzdFNlbGVjdGlvbiAmJiB0aGlzLmxhc3RTZWxlY3Rpb24uZm9jdXMpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHRoaXMubGFzdFNlbGVjdGlvbi5mb2N1cywgdGhpcy5sYXN0U2VsZWN0aW9uLmFuY2hvcik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHBhc3RlKHRleHQ6IHN0cmluZywgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBmb2N1czogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBsZXQgYmVnaW5uaW5nOiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb2N1cyA9IHtcbiAgICAgICAgcm93OiB0aGlzLmxpbmVzLmxlbmd0aCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1t0aGlzLmxpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBhbmNob3IgPSBmb2N1cztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fFxuICAgICAgKGFuY2hvci5yb3cgPT09IGZvY3VzLnJvdyAmJiBhbmNob3IuY29sIDw9IGZvY3VzLmNvbClcbiAgICApIHtcbiAgICAgIGJlZ2lubmluZyA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBiZWdpbm5pbmcgPSBmb2N1cztcbiAgICAgIGVuZCA9IGFuY2hvcjtcbiAgICB9XG4gICAgbGV0IGluc2VydGVkTGluZXMgPSB0ZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcbiAgICBsZXQgbGluZUJlZm9yZSA9IHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10uc3Vic3RyKDAsIGJlZ2lubmluZy5jb2wpO1xuICAgIGxldCBsaW5lRW5kID0gdGhpcy5saW5lc1tlbmQucm93XS5zdWJzdHIoZW5kLmNvbCk7XG4gICAgaW5zZXJ0ZWRMaW5lc1swXSA9IGxpbmVCZWZvcmUuY29uY2F0KGluc2VydGVkTGluZXNbMF0pO1xuICAgIGxldCBlbmRDb2xQb3MgPSBpbnNlcnRlZExpbmVzW2luc2VydGVkTGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoO1xuICAgIGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXSA9IGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXS5jb25jYXQobGluZUVuZCk7XG4gICAgdGhpcy5zcGxpY2VMaW5lcyhiZWdpbm5pbmcucm93LCAxICsgZW5kLnJvdyAtIGJlZ2lubmluZy5yb3csIGluc2VydGVkTGluZXMpO1xuICAgIGZvY3VzLnJvdyA9IGJlZ2lubmluZy5yb3cgKyBpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDE7XG4gICAgZm9jdXMuY29sID0gZW5kQ29sUG9zO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cmFwU2VsZWN0aW9uKHByZTogc3RyaW5nLCBwb3N0OiBzdHJpbmcsIGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMgfHwgIWFuY2hvciB8fCBmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHJldHVybjtcbiAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcblxuICAgIGNvbnN0IHN0YXJ0Q29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2w7XG4gICAgY29uc3QgZW5kQ29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGFuY2hvci5jb2wgOiBmb2N1cy5jb2w7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoMCwgc3RhcnRDb2wpLmNvbmNhdChwcmUpO1xuICAgIGNvbnN0IG1pZCA9IGVuZENvbCA9PT0gc3RhcnRDb2wgPyBcIlwiIDogdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihzdGFydENvbCwgZW5kQ29sIC0gc3RhcnRDb2wpO1xuICAgIGNvbnN0IHJpZ2h0ID0gcG9zdC5jb25jYXQodGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihlbmRDb2wpKTtcbiAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSBsZWZ0LmNvbmNhdChtaWQsIHJpZ2h0KTtcbiAgICBhbmNob3IuY29sID0gbGVmdC5sZW5ndGg7XG4gICAgZm9jdXMuY29sID0gYW5jaG9yLmNvbCArIG1pZC5sZW5ndGg7XG5cbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cywgYW5jaG9yKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRFdmVudExpc3RlbmVyPFQgZXh0ZW5kcyBFdmVudFR5cGU+KFxuICAgIHR5cGU6IFQsXG4gICAgbGlzdGVuZXI6IFQgZXh0ZW5kcyAnY2hhbmdlJyA/IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnc2VsZWN0aW9uJyA/IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnZHJvcCcgPyBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PiA6IG5ldmVyXG4gICk6IHZvaWQge1xuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86Y2hhbmdlfGlucHV0KSQvaSkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNoYW5nZS5wdXNoKGxpc3RlbmVyIGFzIEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4pO1xuICAgIH1cbiAgICBpZiAodHlwZS5tYXRjaCgvXig/OnNlbGVjdGlvbnxzZWxlY3Rpb25jaGFuZ2UpJC9pKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPFNlbGVjdGlvbkV2ZW50Pik7XG4gICAgfVxuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86ZHJvcCkkL2kpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5kcm9wLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPERyb3BFdmVudD4pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlyZUNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGV4dGFyZWEgJiYgIXRoaXMubGlzdGVuZXJzLmNoYW5nZS5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHRoaXMudGV4dGFyZWEudmFsdWUgPSBjb250ZW50O1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLmNoYW5nZSkge1xuICAgICAgbGlzdGVuZXIoe1xuICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICBsaW5lc0RpcnR5OiBbLi4udGhpcy5saW5lRGlydHldLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGJlZm9yZWlucHV0IGhhbmRsZXIsIGV4Y2x1c2l2ZWx5IHRvIGhhbmRsZSBpbnNlcnRQYXJhZ3JhcGggYW5kXG4gICAqIGluc2VydExpbmVCcmVhayBldmVudHMuIFRoZXNlIHVzZWQgdG8gYmUgaGFuZGxlZCBpbiB0aGUgaW5wdXQgZXZlbnQsXG4gICAqIGJ1dCB0aGF0IGNhdXNlZCBpc3N1ZXMgd2l0aCBGaXJlZm94IHdoZXJlIHRoZSBpbnB1dCBldmVudCB3b3VsZCBiZVxuICAgKiBzb21ldGltZXMgbm90IGJlIGZpcmVkIGZvciB0aGVzZSBpbnB1dCB0eXBlcy5cbiAgICogQHBhcmFtIGV2ZW50IFRoZSBpbnB1dCBldmVudFxuICAgKiBAcmV0dXJucyBub3RoaW5nXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUJlZm9yZUlucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYmVmb3JlSW5wdXRFdmVudCA9IGV2ZW50IGFzIElucHV0RXZlbnQ7XG4gICAgaWYgKFxuICAgICAgYmVmb3JlSW5wdXRFdmVudC5pbnB1dFR5cGUgIT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgJiZcbiAgICAgIGJlZm9yZUlucHV0RXZlbnQuaW5wdXRUeXBlICE9PSBcImluc2VydExpbmVCcmVha1wiXG4gICAgKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuXG4gICAgY29uc3QgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuXG4gICAgaWYgKCFmb2N1cyB8fCAhYW5jaG9yKSByZXR1cm47XG4gICAgXG4gICAgLy8gSWYgZm9jdXMgYW5kIGFuY2hvciBhcmUgaW4gZGlmZmVyZW50IGxpbmVzLCBzaW1wbHkgcmVtb3ZlIGV2ZXJ5dGhpbmcgXG4gICAgLy8gYWZ0ZXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIGFuZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uXG4gICAgLy8gYW5kIHJlbW92ZSBhbnkgbGluZXMgaW4gYmV0d2VlblxuICAgIGlmIChmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHtcbiAgICAgIGNvbnN0IGJlZ2lubmluZyA9IGZvY3VzLnJvdyA8IGFuY2hvci5yb3cgPyBmb2N1cyA6IGFuY2hvcjtcbiAgICAgIGNvbnN0IGVuZCA9IGZvY3VzLnJvdyA8IGFuY2hvci5yb3cgPyBhbmNob3IgOiBmb2N1cztcbiAgICAgIHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10gPSB0aGlzLmxpbmVzW2JlZ2lubmluZy5yb3ddLnN1YnN0cmluZygwLCBiZWdpbm5pbmcuY29sKTtcbiAgICAgIHRoaXMubGluZXNbZW5kLnJvd10gPSB0aGlzLmxpbmVzW2VuZC5yb3ddLnN1YnN0cmluZyhlbmQuY29sKTtcbiAgICAgIHRoaXMuc3BsaWNlTGluZXMoYmVnaW5uaW5nLnJvdyArIDEsIGVuZC5yb3cgLSBiZWdpbm5pbmcucm93IC0gMSk7XG4gICAgICBmb2N1cy5yb3cgPSBiZWdpbm5pbmcucm93ICsgMTtcbiAgICAgIGZvY3VzLmNvbCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjb250aW51YWJsZVR5cGU6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgICBzd2l0Y2ggKHRoaXMubGluZVR5cGVzW2ZvY3VzLnJvd10pIHtcbiAgICAgICAgY2FzZSBcIlRNVUxcIjpcbiAgICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNVUxcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRNT0xcIjpcbiAgICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNT0xcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRNSW5kZW50ZWRDb2RlXCI6XG4gICAgICAgICAgY29udGludWFibGVUeXBlID0gXCJUTUluZGVudGVkQ29kZVwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuIFxuICAgICAgY29uc3QgbGluZUJlZm9yZUJyZWFrID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cmluZygwLCBmb2N1cy5jb2wgPD0gYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2wpO1xuICAgICAgY29uc3QgbGluZUFmdGVyQnJlYWsgPSB0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyaW5nKGZvY3VzLmNvbCA8PSBhbmNob3IuY29sID8gYW5jaG9yLmNvbCA6IGZvY3VzLmNvbCk7XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGZvY3VzLnJvdywgMSwgW2xpbmVCZWZvcmVCcmVhaywgbGluZUFmdGVyQnJlYWtdKTtcblxuICAgICAgZm9jdXMucm93ICs9IDE7XG4gICAgICBmb2N1cy5jb2wgPSAwO1xuXG4gICAgICBpZiAoY29udGludWFibGVUeXBlKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXJbY29udGludWFibGVUeXBlXS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdKTtcbiAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICBpZiAoY2FwdHVyZVsyXSkge1xuICAgICAgICAgICAgaWYgKGNvbnRpbnVhYmxlVHlwZSA9PT0gXCJUTU9MXCIpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZVsxXSA9IGNhcHR1cmVbMV0ucmVwbGFjZSgvXFxkezEsOX0vLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZUludChyZXN1bHQpICsgMSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSBgJHtjYXB0dXJlWzFdfSR7dGhpcy5saW5lc1tmb2N1cy5yb3ddfWA7XG4gICAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvY3VzLmNvbCA9IGNhcHR1cmVbMV0ubGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdID0gXCJcIjtcbiAgICAgICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzLnJvdyAtIDFdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMpO1xuXG4gICAgLy8gU2Nyb2xsIHRoZSBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBpbnRvIHZpZXdcbiAgICBpZiAoZm9jdXMgJiYgZm9jdXMucm93IDwgdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAodGhpcy5saW5lRWxlbWVudHNbZm9jdXMucm93XSBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICBibG9jazogJ25lYXJlc3QnLFxuICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUlucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFdmVudCA9IGV2ZW50IGFzIElucHV0RXZlbnQ7XG4gICAgaWYgKGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydENvbXBvc2l0aW9uVGV4dFwiKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuXG4gICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmICgoaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgfHwgaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0TGluZUJyZWFrXCIpICYmIGZvY3VzKSB7XG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gc2luY2UgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdGhlIGJlZm9yZWlucHV0IGhhbmRsZXJcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLmUhLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgdGhpcy5lIS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIlRNQmxhbmtMaW5lXCI+PGJyPjwvZGl2Pic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpeE5vZGVIaWVyYXJjaHkoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZygpO1xuICAgIH1cbiAgICBpZiAoZm9jdXMpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoX2U6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5maXJlU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgbGV0IHRleHQgPSAoZXZlbnQgYXMgYW55KS5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpO1xuICAgIHRoaXMucGFzdGUodGV4dCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5maXJlRHJvcChldmVudC5kYXRhVHJhbnNmZXIhKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0lubGluZVN0eWxlcyhvcmlnaW5hbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICBsZXQgc3RhY2s6IEFycmF5PHtkZWxpbWl0ZXI6IHN0cmluZywgZGVsaW1TdHJpbmc6IHN0cmluZywgY291bnQ6IG51bWJlciwgb3V0cHV0OiBzdHJpbmd9PiA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZztcblxuICAgIG91dGVyOiB3aGlsZSAoc3RyaW5nKSB7XG4gICAgICAvLyBQcm9jZXNzIHNpbXBsZSBydWxlcyAobm9uLWRlbGltaXRlcilcbiAgICAgIGZvciAobGV0IHJ1bGUgb2YgW1wiZXNjYXBlXCIsIFwiY29kZVwiLCBcImF1dG9saW5rXCIsIFwiaHRtbFwiXSkge1xuICAgICAgICBpZiAodGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdKSB7XG4gICAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVwbGFjZW1lbnQucmVwbGFjZSgvXFwkKFsxLTldKS9nLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUHJvY2VzcyBjdXN0b20gaW5saW5lIGdyYW1tYXIgcnVsZXNcbiAgICAgIGZvciAobGV0IHJ1bGUgaW4gdGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyKSB7XG4gICAgICAgIGlmIChydWxlICE9PSBcImVzY2FwZVwiICYmIHJ1bGUgIT09IFwiY29kZVwiICYmIHJ1bGUgIT09IFwiYXV0b2xpbmtcIiAmJiBydWxlICE9PSBcImh0bWxcIiAmJiBydWxlICE9PSBcImxpbmtPcGVuXCIgJiYgcnVsZSAhPT0gXCJpbWFnZU9wZW5cIiAmJiBydWxlICE9PSBcImxpbmtMYWJlbFwiICYmIHJ1bGUgIT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVwbGFjZW1lbnQucmVwbGFjZSgvXFwkKFsxLTldKS9nLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGxpbmtzIC8gaW1hZ2VzXG4gICAgICBsZXQgcG90ZW50aWFsTGluayA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua09wZW4ucmVnZXhwKTtcbiAgICAgIGxldCBwb3RlbnRpYWxJbWFnZSA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuaW1hZ2VPcGVuLnJlZ2V4cCk7XG4gICAgICBpZiAocG90ZW50aWFsSW1hZ2UgfHwgcG90ZW50aWFsTGluaykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5wYXJzZUxpbmtPckltYWdlKHN0cmluZywgISFwb3RlbnRpYWxJbWFnZSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtwcm9jZXNzZWR9JHtyZXN1bHQub3V0cHV0fWA7XG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihyZXN1bHQuY2hhckNvdW50KTtcbiAgICAgICAgICBvZmZzZXQgKz0gcmVzdWx0LmNoYXJDb3VudDtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgZW0gLyBzdHJvbmcgZGVsaW1pdGVyc1xuICAgICAgbGV0IGNhcCA9IC8oXlxcKispfCheXyspLy5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIGxldCBkZWxpbUNvdW50ID0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGVsaW1TdHJpbmcgPSBjYXBbMF07XG4gICAgICAgIGNvbnN0IGN1cnJlbnREZWxpbWl0ZXIgPSBjYXBbMF1bMF07XG5cbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgICBjb25zdCBwcmVjZWRpbmcgPSBvZmZzZXQgPiAwID8gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKDAsIG9mZnNldCkgOiBcIiBcIjtcbiAgICAgICAgY29uc3QgZm9sbG93aW5nID0gb2Zmc2V0ICsgY2FwWzBdLmxlbmd0aCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IHN0cmluZyA6IFwiIFwiO1xuXG4gICAgICAgIGNvbnN0IHB1bmN0dWF0aW9uRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaChwdW5jdHVhdGlvbkxlYWRpbmcpO1xuICAgICAgICBjb25zdCBwdW5jdHVhdGlvblByZWNlZGVzID0gcHJlY2VkaW5nLm1hdGNoKHB1bmN0dWF0aW9uVHJhaWxpbmcpO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaCgvXlxccy8pO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlUHJlY2VkZXMgPSBwcmVjZWRpbmcubWF0Y2goL1xccyQvKTtcblxuICAgICAgICBsZXQgY2FuT3BlbiA9ICF3aGl0ZXNwYWNlRm9sbG93cyAmJiAoIXB1bmN0dWF0aW9uRm9sbG93cyB8fCAhIXdoaXRlc3BhY2VQcmVjZWRlcyB8fCAhIXB1bmN0dWF0aW9uUHJlY2VkZXMpO1xuICAgICAgICBsZXQgY2FuQ2xvc2UgPSAhd2hpdGVzcGFjZVByZWNlZGVzICYmICghcHVuY3R1YXRpb25QcmVjZWRlcyB8fCAhIXdoaXRlc3BhY2VGb2xsb3dzIHx8ICEhcHVuY3R1YXRpb25Gb2xsb3dzKTtcblxuICAgICAgICBpZiAoY3VycmVudERlbGltaXRlciA9PT0gXCJfXCIgJiYgY2FuT3BlbiAmJiBjYW5DbG9zZSkge1xuICAgICAgICAgIGNhbk9wZW4gPSAhIXB1bmN0dWF0aW9uUHJlY2VkZXM7XG4gICAgICAgICAgY2FuQ2xvc2UgPSAhIXB1bmN0dWF0aW9uRm9sbG93cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYW5DbG9zZSkge1xuICAgICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChkZWxpbUNvdW50ICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgICBpZiAoc3RhY2tbc3RhY2tQb2ludGVyXS5kZWxpbWl0ZXIgPT09IGN1cnJlbnREZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZGVsaW1Db3VudCA+PSAyICYmIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgPj0gMikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn0ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPjxzdHJvbmcgY2xhc3M9XCJUTVN0cm9uZ1wiPiR7cHJvY2Vzc2VkfTwvc3Ryb25nPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfSR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBkZWxpbUNvdW50IC09IDI7XG4gICAgICAgICAgICAgICAgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCAtPSAyO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+PGVtIGNsYXNzPVwiVE1FbVwiPiR7cHJvY2Vzc2VkfTwvZW0+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgZGVsaW1Db3VudCAtPSAxO1xuICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgLT0gMTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCAmJiBjYW5PcGVuKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IGN1cnJlbnREZWxpbWl0ZXIsXG4gICAgICAgICAgICBkZWxpbVN0cmluZzogZGVsaW1TdHJpbmcsXG4gICAgICAgICAgICBjb3VudDogZGVsaW1Db3VudCxcbiAgICAgICAgICAgIG91dHB1dDogcHJvY2Vzc2VkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb2Nlc3NlZCA9IFwiXCI7XG4gICAgICAgICAgZGVsaW1Db3VudCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCkge1xuICAgICAgICAgIHByb2Nlc3NlZCA9IGAke3Byb2Nlc3NlZH0ke2RlbGltU3RyaW5nLnN1YnN0cigwLCBkZWxpbUNvdW50KX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igc3RyaWtldGhyb3VnaCBkZWxpbWl0ZXJcbiAgICAgIGNhcCA9IC9efn4vLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgbGV0IGNvbnN1bWVkID0gZmFsc2U7XG4gICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoIWNvbnN1bWVkICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgaWYgKHN0YWNrW3N0YWNrUG9pbnRlcl0uZGVsaW1pdGVyID09PSBcIn5cIikge1xuICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+PGRlbCBjbGFzcz1cIlRNU3RyaWtldGhyb3VnaFwiPiR7cHJvY2Vzc2VkfTwvZGVsPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+YDtcbiAgICAgICAgICAgIGxldCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgY29uc3VtZWQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbnN1bWVkKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IFwiflwiLFxuICAgICAgICAgICAgZGVsaW1TdHJpbmc6IFwifn5cIixcbiAgICAgICAgICAgIGNvdW50OiAyLFxuICAgICAgICAgICAgb3V0cHV0OiBwcm9jZXNzZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VzcyAnZGVmYXVsdCcgcnVsZVxuICAgICAgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmRlZmF1bHQucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZGVmYXVsdC5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG4gICAgICB0aHJvdyBcIkluZmluaXRlIGxvb3AhXCI7XG4gICAgfVxuXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUNvbHVtbihzdGFydE5vZGU6IE5vZGUsIG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgbGV0IG5vZGUgPSBzdGFydE5vZGU7XG4gICAgbGV0IGNvbDogbnVtYmVyO1xuICAgIHdoaWxlIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHN0YXJ0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgfHwgb2Zmc2V0ID09PSAwKSB7XG4gICAgICBjb2wgPSBvZmZzZXQ7XG4gICAgICBub2RlID0gc3RhcnROb2RlO1xuICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZS5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgY29sID0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2wgPSAwO1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICB9XG4gICAgd2hpbGUgKG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICBjb2wgKz0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSBhcyB1bmtub3duIGFzIENoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZU5vZGVBbmRPZmZzZXQocm93OiBudW1iZXIsIGNvbDogbnVtYmVyLCBiaW5kUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZSk6IHtub2RlOiBOb2RlLCBvZmZzZXQ6IG51bWJlcn0ge1xuICAgIGlmIChyb3cgPj0gdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByb3cgPSB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgY29sID0gdGhpcy5saW5lc1tyb3ddLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGNvbCA+IHRoaXMubGluZXNbcm93XS5sZW5ndGgpIHtcbiAgICAgIGNvbCA9IHRoaXMubGluZXNbcm93XS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmxpbmVFbGVtZW50c1tyb3ddIGFzIEhUTUxFbGVtZW50O1xuICAgIGxldCBub2RlID0gcGFyZW50Tm9kZS5maXJzdENoaWxkO1xuXG4gICAgbGV0IGNoaWxkcmVuQ29tcGxldGUgPSBmYWxzZTtcbiAgICBsZXQgcnYgPSB7XG4gICAgICBub2RlOiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPyBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgOiBwYXJlbnROb2RlLFxuICAgICAgb2Zmc2V0OiAwLFxuICAgIH07XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gcGFyZW50Tm9kZSkge1xuICAgICAgaWYgKCFjaGlsZHJlbkNvbXBsZXRlICYmIG5vZGUhLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICBpZiAobm9kZSEubm9kZVZhbHVlIS5sZW5ndGggPj0gY29sKSB7XG4gICAgICAgICAgaWYgKGJpbmRSaWdodCAmJiBub2RlIS5ub2RlVmFsdWUhLmxlbmd0aCA9PT0gY29sKSB7XG4gICAgICAgICAgICBydiA9IHsgbm9kZTogbm9kZSEsIG9mZnNldDogY29sIH07XG4gICAgICAgICAgICBjb2wgPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBub2RlISwgb2Zmc2V0OiBjb2wgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sIC09IG5vZGUhLm5vZGVWYWx1ZSEubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWNoaWxkcmVuQ29tcGxldGUgJiYgbm9kZSEuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlID0gbm9kZSEuZmlyc3RDaGlsZDtcbiAgICAgIH0gZWxzZSBpZiAobm9kZSEubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgY2hpbGRyZW5Db21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBub2RlID0gbm9kZSEubmV4dFNpYmxpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgbm9kZSA9IG5vZGUhLnBhcmVudE5vZGUgYXMgdW5rbm93biBhcyBDaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ2O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lQ29udGVudHNBbmRGb3JtYXR0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbmVDb250ZW50cygpO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckRpcnR5RmxhZygpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmVEaXJ0eSA9IG5ldyBBcnJheSh0aGlzLmxpbmVzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVEaXJ0eS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5saW5lRGlydHlbaV0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVDb250ZW50cygpOiB2b2lkIHtcbiAgICBsZXQgbGluZURlbHRhID0gdGhpcy5lIS5jaGlsZEVsZW1lbnRDb3VudCAtIHRoaXMubGluZXMubGVuZ3RoO1xuICAgIGlmIChsaW5lRGVsdGEpIHtcbiAgICAgIGxldCBmaXJzdENoYW5nZWRMaW5lID0gMDtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgZmlyc3RDaGFuZ2VkTGluZSA8PSB0aGlzLmxpbmVzLmxlbmd0aCAmJlxuICAgICAgICBmaXJzdENoYW5nZWRMaW5lIDw9IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSAmJlxuICAgICAgICB0aGlzLmxpbmVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLnRleHRDb250ZW50ICYmXG4gICAgICAgIHRoaXMubGluZVR5cGVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZVxuICAgICAgKSB7XG4gICAgICAgIGZpcnN0Q2hhbmdlZExpbmUrKztcbiAgICAgIH1cblxuICAgICAgbGV0IGxhc3RDaGFuZ2VkTGluZSA9IC0xO1xuICAgICAgd2hpbGUgKFxuICAgICAgICAtbGFzdENoYW5nZWRMaW5lIDwgdGhpcy5saW5lcy5sZW5ndGggJiZcbiAgICAgICAgLWxhc3RDaGFuZ2VkTGluZSA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVzW3RoaXMubGluZXMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSA9PT1cbiAgICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgJiZcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbdGhpcy5saW5lcy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdID09PVxuICAgICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1t0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWVcbiAgICAgICkge1xuICAgICAgICBsYXN0Q2hhbmdlZExpbmUtLTtcbiAgICAgIH1cblxuICAgICAgbGV0IGxpbmVzVG9EZWxldGUgPSB0aGlzLmxpbmVzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZSArIDEgLSBmaXJzdENoYW5nZWRMaW5lO1xuICAgICAgaWYgKGxpbmVzVG9EZWxldGUgPCAtbGluZURlbHRhKSBsaW5lc1RvRGVsZXRlID0gLWxpbmVEZWx0YTtcbiAgICAgIGlmIChsaW5lc1RvRGVsZXRlIDwgMCkgbGluZXNUb0RlbGV0ZSA9IDA7XG5cbiAgICAgIGxldCBsaW5lc1RvQWRkID0gW107XG4gICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGxpbmVzVG9EZWxldGUgKyBsaW5lRGVsdGE7IGwrKykge1xuICAgICAgICBsaW5lc1RvQWRkLnB1c2goKHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmUgKyBsXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgfHwgXCJcIik7XG4gICAgICB9XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGZpcnN0Q2hhbmdlZExpbmUsIGxpbmVzVG9EZWxldGUsIGxpbmVzVG9BZGQsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgbGluZSA9IDA7IGxpbmUgPCB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGg7IGxpbmUrKykge1xuICAgICAgICBsZXQgZSA9IHRoaXMubGluZUVsZW1lbnRzW2xpbmVdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBsZXQgY3QgPSBlLnRleHRDb250ZW50IHx8IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVdICE9PSBjdCB8fCB0aGlzLmxpbmVUeXBlc1tsaW5lXSAhPT0gZS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gY3Q7XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZV0gPSBlLmNsYXNzTmFtZTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNwbGljZUxpbmVzKFxuICAgIHN0YXJ0TGluZTogbnVtYmVyLFxuICAgIGxpbmVzVG9EZWxldGU6IG51bWJlciA9IDAsXG4gICAgbGluZXNUb0luc2VydDogc3RyaW5nW10gPSBbXSxcbiAgICBhZGp1c3RMaW5lRWxlbWVudHM6IGJvb2xlYW4gPSB0cnVlXG4gICk6IHZvaWQge1xuICAgIGlmIChhZGp1c3RMaW5lRWxlbWVudHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0RlbGV0ZTsgaSsrKSB7XG4gICAgICAgIHRoaXMuZSEucmVtb3ZlQ2hpbGQodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpbnNlcnRlZEJsYW5rID0gW107XG4gICAgbGV0IGluc2VydGVkRGlydHkgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0luc2VydC5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0ZWRCbGFuay5wdXNoKFwiXCIpO1xuICAgICAgaW5zZXJ0ZWREaXJ0eS5wdXNoKHRydWUpO1xuICAgICAgaWYgKGFkanVzdExpbmVFbGVtZW50cykge1xuICAgICAgICBpZiAodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pXG4gICAgICAgICAgdGhpcy5lIS5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgdGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgICBlbHNlIHRoaXMuZSEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5saW5lcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5saW5lc1RvSW5zZXJ0KTtcbiAgICB0aGlzLmxpbmVUeXBlcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZEJsYW5rKTtcbiAgICB0aGlzLmxpbmVEaXJ0eS5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZERpcnR5KTtcbiAgfVxuXG4gIHByaXZhdGUgZml4Tm9kZUhpZXJhcmNoeSgpOiB2b2lkIHtcbiAgICBjb25zdCBvcmlnaW5hbENoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLmUhLmNoaWxkTm9kZXMpO1xuXG4gICAgY29uc3QgcmVwbGFjZUNoaWxkID0gKGNoaWxkOiBOb2RlLCAuLi5uZXdDaGlsZHJlbjogTm9kZVtdKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBjaGlsZC5wYXJlbnRFbGVtZW50ITtcbiAgICAgIGNvbnN0IG5leHRTaWJsaW5nID0gY2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgbmV3Q2hpbGRyZW4uZm9yRWFjaCgobmV3Q2hpbGQpID0+XG4gICAgICAgIG5leHRTaWJsaW5nID8gcGFyZW50Lmluc2VydEJlZm9yZShuZXdDaGlsZCwgbmV4dFNpYmxpbmcpIDogcGFyZW50LmFwcGVuZENoaWxkKG5ld0NoaWxkKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgb3JpZ2luYWxDaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSB8fCAoY2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgIT09IFwiRElWXCIpIHtcbiAgICAgICAgY29uc3QgZGl2V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHJlcGxhY2VDaGlsZChjaGlsZCwgZGl2V3JhcHBlcik7XG4gICAgICAgIGRpdldyYXBwZXIuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZ3JhbmRDaGlsZHJlbiA9IEFycmF5LmZyb20oY2hpbGQuY2hpbGROb2Rlcyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBncmFuZENoaWxkcmVuLnNvbWUoXG4gICAgICAgICAgICAoZ3JhbmRDaGlsZCkgPT5cbiAgICAgICAgICAgICAgZ3JhbmRDaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgKGdyYW5kQ2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgPT09IFwiRElWXCJcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiByZXBsYWNlQ2hpbGQoY2hpbGQsIC4uLmdyYW5kQ2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGlua09ySW1hZ2Uob3JpZ2luYWxTdHJpbmc6IHN0cmluZywgaXNJbWFnZTogYm9vbGVhbik6IHtvdXRwdXQ6IHN0cmluZywgY2hhckNvdW50OiBudW1iZXJ9IHwgZmFsc2Uge1xuICAgIC8vIFNraXAgdGhlIG9wZW5pbmcgYnJhY2tldFxuICAgIGxldCB0ZXh0T2Zmc2V0ID0gaXNJbWFnZSA/IDIgOiAxO1xuICAgIGxldCBvcGVuZXIgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoMCwgdGV4dE9mZnNldCk7XG4gICAgbGV0IHR5cGUgPSBpc0ltYWdlID8gXCJUTUltYWdlXCIgOiBcIlRNTGlua1wiO1xuICAgIGxldCBjdXJyZW50T2Zmc2V0ID0gdGV4dE9mZnNldDtcblxuICAgIGxldCBicmFja2V0TGV2ZWwgPSAxO1xuICAgIGxldCBsaW5rVGV4dDogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbGlua1JlZjogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbGlua0xhYmVsOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBsaW5rRGV0YWlsczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRleHRPdXRlcjogd2hpbGUgKFxuICAgICAgY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCAmJlxuICAgICAgbGlua1RleHQgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICAvLyBDYXB0dXJlIGFueSBlc2NhcGVzIGFuZCBjb2RlIGJsb2NrcyBhdCBjdXJyZW50IHBvc2l0aW9uXG4gICAgICBmb3IgKGxldCBydWxlIG9mIFtcImVzY2FwZVwiLCBcImNvZGVcIiwgXCJhdXRvbGlua1wiLCBcImh0bWxcIl0pIHtcbiAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgaW1hZ2VcbiAgICAgIGlmIChzdHJpbmcubWF0Y2godGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmltYWdlT3Blbi5yZWdleHApKSB7XG4gICAgICAgIGJyYWNrZXRMZXZlbCsrO1xuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IDI7XG4gICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGxpbmtcbiAgICAgIGlmIChzdHJpbmcubWF0Y2godGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtPcGVuLnJlZ2V4cCkpIHtcbiAgICAgICAgYnJhY2tldExldmVsKys7XG4gICAgICAgIGlmICghaXNJbWFnZSkge1xuICAgICAgICAgIGlmICh0aGlzLnBhcnNlTGlua09ySW1hZ2Uoc3RyaW5nLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudE9mZnNldCArPSAxO1xuICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBjbG9zaW5nIGJyYWNrZXRcbiAgICAgIGlmIChzdHJpbmcubWF0Y2goL15cXF0vKSkge1xuICAgICAgICBicmFja2V0TGV2ZWwtLTtcbiAgICAgICAgaWYgKGJyYWNrZXRMZXZlbCA9PT0gMCkge1xuICAgICAgICAgIGxpbmtUZXh0ID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKHRleHRPZmZzZXQsIGN1cnJlbnRPZmZzZXQgLSB0ZXh0T2Zmc2V0KTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdGhpbmcgbWF0Y2hlcywgcHJvY2VlZCB0byBuZXh0IGNoYXJcbiAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICB9XG5cbiAgICAvLyBEaWQgd2UgZmluZCBhIGxpbmsgdGV4dD9cbiAgICBpZiAobGlua1RleHQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayB3aGF0IHR5cGUgb2YgbGluayB0aGlzIGlzXG4gICAgbGV0IG5leHRDaGFyID0gY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cihjdXJyZW50T2Zmc2V0LCAxKSA6IFwiXCI7XG5cbiAgICAvLyBSRUZFUkVOQ0UgTElOS1NcbiAgICBpZiAobmV4dENoYXIgPT09IFwiW1wiKSB7XG4gICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rTGFiZWwucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBsaW5rTGFiZWwucHVzaChjYXBbMV0sIGNhcFsyXSwgY2FwWzNdKTtcbiAgICAgICAgaWYgKGNhcFt0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua0xhYmVsLmxhYmVsUGxhY2Vob2xkZXIhXSkge1xuICAgICAgICAgIGxpbmtSZWYgPSBjYXBbdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtMYWJlbC5sYWJlbFBsYWNlaG9sZGVyIV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dENoYXIgIT09IFwiKFwiKSB7XG4gICAgICAvLyBTaG9ydGN1dCByZWYgbGlua1xuICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSU5MSU5FIExJTktTXG4gICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICBsZXQgcGFyZW50aGVzaXNMZXZlbCA9IDE7XG5cbiAgICAgIGlubGluZU91dGVyOiB3aGlsZSAoY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCAmJiBwYXJlbnRoZXNpc0xldmVsID4gMCkge1xuICAgICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICAgIC8vIFByb2Nlc3Mgd2hpdGVzcGFjZVxuICAgICAgICBsZXQgY2FwID0gL15cXHMrLy5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHNbMF0ubWF0Y2goLzwvKSkge1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgIT09IDEpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNl0gPSBsaW5rRGV0YWlsc1s2XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgYmFja3NsYXNoIGVzY2FwZXNcbiAgICAgICAgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmVzY2FwZS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBvcGVuaW5nIGFuZ2xlIGJyYWNrZXRcbiAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDIgJiYgc3RyaW5nLm1hdGNoKC9ePC8pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMCkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlsc1swXSA9IGxpbmtEZXRhaWxzWzBdLmNvbmNhdChcIjxcIik7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBjbG9zaW5nIGFuZ2xlIGJyYWNrZXRcbiAgICAgICAgaWYgKChsaW5rRGV0YWlscy5sZW5ndGggPT09IDEgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSAyKSAmJiBzdHJpbmcubWF0Y2goL14+LykpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSAxKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCI+XCIpO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgbm9uLXBhcmVudGhlc2lzIGRlbGltaXRlciBmb3IgdGl0bGVcbiAgICAgICAgY2FwID0gL15bXCInXS8uZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwICYmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDAgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSAxIHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNCkpIHtcbiAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgNCkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhcCAmJiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1IHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNikgJiYgbGlua0RldGFpbHNbNF0gPT09IGNhcFswXSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgb3BlbmluZyBwYXJlbnRoZXNpc1xuICAgICAgICBpZiAoc3RyaW5nLm1hdGNoKC9eXFwoLykpIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChcIihcIik7XG4gICAgICAgICAgICAgIGlmICghbGlua0RldGFpbHNbMF0ubWF0Y2goLzwkLykpIHBhcmVudGhlc2lzTGV2ZWwrKztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCIoXCIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzWzRdID09PSBcIihcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChcIihcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGNsb3NpbmcgcGFyZW50aGVzaXNcbiAgICAgICAgaWYgKHN0cmluZy5tYXRjaCgvXlxcKS8pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgMikgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGlmICghbGlua0RldGFpbHNbMF0ubWF0Y2goLzwkLykpIHBhcmVudGhlc2lzTGV2ZWwtLTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsID4gMCkge1xuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChcIilcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA2KSB7XG4gICAgICAgICAgICBpZiAobGlua0RldGFpbHNbNF0gPT09IFwiKFwiKSB7XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCIpXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIilcIik7XG4gICAgICAgICAgICAgIGVsc2UgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoXCIpXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnRoZXNpc0xldmVsLS07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPT09IDApIHtcbiAgICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA3KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFueSBvbGQgY2hhcmFjdGVyXG4gICAgICAgIGNhcCA9IC9eLi8uZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IFwiSW5maW5pdGUgbG9vcFwiO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPiAwKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGxpbmtSZWYgIT09IGZhbHNlKSB7XG4gICAgICAvLyBSZWZlcmVuY2UgbGluazsgY2hlY2sgdGhhdCBsaW5rUmVmIGlzIHZhbGlkXG4gICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IGxhYmVsIG9mIHRoaXMubGlua0xhYmVscykge1xuICAgICAgICBpZiAobGFiZWwgPT09IGxpbmtSZWYpIHtcbiAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBsYWJlbENsYXNzID0gdmFsaWQgPyBcIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX1ZhbGlkXCIgOiBcIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX0ludmFsaWRcIjtcbiAgICAgIGxldCBvdXRwdXQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke29wZW5lcn08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9ICR7XG4gICAgICAgIGxpbmtMYWJlbC5sZW5ndGggPCAzIHx8ICFsaW5rTGFiZWxbMV0gPyBsYWJlbENsYXNzIDogXCJcIlxuICAgICAgfVwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKGxpbmtUZXh0KX08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj5dPC9zcGFuPmA7XG5cbiAgICAgIGlmIChsaW5rTGFiZWwubGVuZ3RoID49IDMpIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtMYWJlbFswXX08L3NwYW4+YCxcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCIke2xhYmVsQ2xhc3N9XCI+JHtsaW5rTGFiZWxbMV19PC9zcGFuPmAsXG4gICAgICAgICAgYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rTGFiZWxbMl19PC9zcGFuPmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogb3V0cHV0LFxuICAgICAgICBjaGFyQ291bnQ6IGN1cnJlbnRPZmZzZXQsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobGlua0RldGFpbHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSW5saW5lIGxpbmtcbiAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA3KSB7XG4gICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtvcGVuZXJ9PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfVwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKFxuICAgICAgICAgIGxpbmtUZXh0XG4gICAgICAgICl9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+XSgke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzBdXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9RGVzdGluYXRpb25cIj4ke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzFdXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtEZXRhaWxzWzJdfSR7XG4gICAgICAgICAgbGlua0RldGFpbHNbM11cbiAgICAgICAgfSR7bGlua0RldGFpbHNbNF19PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfVRpdGxlXCI+JHtcbiAgICAgICAgICBsaW5rRGV0YWlsc1s1XVxuICAgICAgICB9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rRGV0YWlsc1s2XX0pPC9zcGFuPmAsXG4gICAgICAgIGNoYXJDb3VudDogY3VycmVudE9mZnNldCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlQ29tbW9uQW5jZXN0b3Iobm9kZTE6IE5vZGUgfCBudWxsLCBub2RlMjogTm9kZSB8IG51bGwpOiBOb2RlIHwgbnVsbCB7XG4gICAgaWYgKCFub2RlMSB8fCAhbm9kZTIpIHJldHVybiBudWxsO1xuICAgIGlmIChub2RlMSA9PT0gbm9kZTIpIHJldHVybiBub2RlMTtcbiAgICBjb25zdCBhbmNlc3RyeSA9IChub2RlOiBOb2RlKSA9PiB7XG4gICAgICBsZXQgYW5jZXN0cnkgPSBbXTtcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGFuY2VzdHJ5LnVuc2hpZnQobm9kZSk7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFuY2VzdHJ5O1xuICAgIH07XG5cbiAgICBjb25zdCBhbmNlc3RyeTEgPSBhbmNlc3RyeShub2RlMSk7XG4gICAgY29uc3QgYW5jZXN0cnkyID0gYW5jZXN0cnkobm9kZTIpO1xuXG4gICAgaWYgKGFuY2VzdHJ5MVswXSAhPT0gYW5jZXN0cnkyWzBdKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBhbmNlc3RyeTFbaV0gPT09IGFuY2VzdHJ5MltpXTsgaSsrKTtcbiAgICByZXR1cm4gYW5jZXN0cnkxW2kgLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCwgY2xhc3NOYW1lOiBzdHJpbmcpOiBOb2RlIHwgbnVsbCB7XG4gICAgbGV0IG5vZGUgPSBudWxsO1xuICAgIGlmICghZm9jdXMpIHJldHVybiBudWxsO1xuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSkgcmV0dXJuIG51bGw7XG4gICAgICBub2RlID0gc2VsLmZvY3VzTm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvY3VzLnJvdyAhPT0gYW5jaG9yLnJvdykgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoIXNlbCkgcmV0dXJuIG51bGw7XG4gICAgICBub2RlID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIH1cbiAgICBpZiAoIW5vZGUpIHJldHVybiBudWxsO1xuICAgIHdoaWxlIChub2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIGlmICgobm9kZSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmIChub2RlIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoY2xhc3NOYW1lKSkgcmV0dXJuIG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tbWFuZFN0YXRlKGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4ge1xuICAgIGxldCBjb21tYW5kU3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiA9IHt9O1xuICAgIGlmICghZm9jdXMpIGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb3IgKGxldCBjbWQgaW4gY29tbWFuZHMpIHtcbiAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbW1hbmRTdGF0ZTtcbiAgICB9XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuXG4gICAgbGV0IHN0YXJ0OiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fCAoYW5jaG9yLnJvdyA9PT0gZm9jdXMucm93ICYmIGFuY2hvci5jb2wgPCBmb2N1cy5jb2wpKSB7XG4gICAgICBzdGFydCA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IGZvY3VzO1xuICAgICAgZW5kID0gYW5jaG9yO1xuICAgIH1cbiAgICBpZiAoZW5kLnJvdyA+IHN0YXJ0LnJvdyAmJiBlbmQuY29sID09PSAwKSB7XG4gICAgICBlbmQucm93LS07XG4gICAgICBlbmQuY29sID0gdGhpcy5saW5lc1tlbmQucm93XS5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgY21kIGluIGNvbW1hbmRzKSB7XG4gICAgICBpZiAoY29tbWFuZHNbY21kXS50eXBlID09PSBcImlubGluZVwiKSB7XG4gICAgICAgIGlmICghZm9jdXMgfHwgZm9jdXMucm93ICE9PSBhbmNob3IhLnJvdyB8fCAhdGhpcy5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPVxuICAgICAgICAgICAgISF0aGlzLmNvbXB1dGVFbmNsb3NpbmdNYXJrdXBOb2RlKGZvY3VzLCBhbmNob3IsIGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lKSB8fFxuICAgICAgICAgICAgKGZvY3VzLmNvbCA9PT0gYW5jaG9yIS5jb2wgJiZcbiAgICAgICAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKDAsIGZvY3VzLmNvbCkubWF0Y2goY29tbWFuZHNbY21kXS51bnNldC5wcmVQYXR0ZXJuKSAmJlxuICAgICAgICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoZm9jdXMuY29sKS5tYXRjaChjb21tYW5kc1tjbWRdLnVuc2V0LnBvc3RQYXR0ZXJuKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb21tYW5kc1tjbWRdLnR5cGUgPT09IFwibGluZVwiKSB7XG4gICAgICAgIGlmICghZm9jdXMpIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHN0YXRlOiBib29sZWFuIHwgbnVsbCA9IHRoaXMubGluZVR5cGVzW3N0YXJ0LnJvd10gPT09IGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lO1xuICAgICAgICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMubGluZVR5cGVzW2xpbmVdID09PSBjb21tYW5kc1tjbWRdLmNsYXNzTmFtZSkgIT09IHN0YXRlKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmRTdGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBpZiAoY29tbWFuZHNbY29tbWFuZF0udHlwZSA9PT0gXCJpbmxpbmVcIikge1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuICAgICAgaWYgKCFhbmNob3IpIHJldHVybjtcbiAgICAgIGlmIChhbmNob3Iucm93ICE9PSBmb2N1cyEucm93KSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpKSByZXR1cm47XG4gICAgICBsZXQgbWFya3VwTm9kZSA9IHRoaXMuY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXMhLCBhbmNob3IsIGNvbW1hbmRzW2NvbW1hbmRdLmNsYXNzTmFtZSk7XG4gICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG5cbiAgICAgIGlmIChtYXJrdXBOb2RlKSB7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzIS5yb3ddID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb2wgPSB0aGlzLmNvbXB1dGVDb2x1bW4obWFya3VwTm9kZSwgMCkhO1xuICAgICAgICBjb25zdCBsZW4gPSBtYXJrdXBOb2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cigwLCBzdGFydENvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgY29uc3QgbWlkID0gdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoc3RhcnRDb2wsIGxlbik7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoc3RhcnRDb2wgKyBsZW4pXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4sIFwiXCIpO1xuICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddID0gbGVmdC5jb25jYXQobWlkLCByaWdodCk7XG4gICAgICAgIGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICAgICAgZm9jdXMhLmNvbCA9IGFuY2hvci5jb2wgKyBsZW47XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyEsIGFuY2hvcik7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9jdXMhLmNvbCA9PT0gYW5jaG9yLmNvbCAmJlxuICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMhLnJvd10uc3Vic3RyKDAsIGZvY3VzIS5jb2wpLm1hdGNoKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4pICYmXG4gICAgICAgICEhdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoZm9jdXMhLmNvbCkubWF0Y2goY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMhLnJvd10gPSB0cnVlO1xuICAgICAgICBjb25zdCBsZWZ0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoMCwgZm9jdXMhLmNvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cihmb2N1cyEuY29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBvc3RQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgdGhpcy5saW5lc1tmb2N1cyEucm93XSA9IGxlZnQuY29uY2F0KHJpZ2h0KTtcbiAgICAgICAgZm9jdXMhLmNvbCA9IGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzISwgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgeyBzdGFydENvbCwgZW5kQ29sIH0gPVxuICAgICAgICAgIGZvY3VzIS5jb2wgPCBhbmNob3IuY29sXG4gICAgICAgICAgICA/IHsgc3RhcnRDb2w6IGZvY3VzIS5jb2wsIGVuZENvbDogYW5jaG9yLmNvbCB9XG4gICAgICAgICAgICA6IHsgc3RhcnRDb2w6IGFuY2hvci5jb2wsIGVuZENvbDogZm9jdXMhLmNvbCB9O1xuXG4gICAgICAgIGxldCBtYXRjaCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKHN0YXJ0Q29sLCBlbmRDb2wgLSBzdGFydENvbClcbiAgICAgICAgICAubWF0Y2goL14oPzxsZWFkaW5nPlxccyopLipcXFMoPzx0cmFpbGluZz5cXHMqKSQvKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgc3RhcnRDb2wgKz0gbWF0Y2guZ3JvdXBzIS5sZWFkaW5nLmxlbmd0aDtcbiAgICAgICAgICBlbmRDb2wgLT0gbWF0Y2guZ3JvdXBzIS50cmFpbGluZy5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBmb2N1cyEuY29sID0gc3RhcnRDb2w7XG4gICAgICAgIGFuY2hvci5jb2wgPSBlbmRDb2w7XG5cbiAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wcmUsIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wb3N0LCBmb2N1cywgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb21tYW5kc1tjb21tYW5kXS50eXBlID09PSBcImxpbmVcIikge1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuICAgICAgaWYgKCFmb2N1cykgcmV0dXJuO1xuICAgICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgICAgbGV0IHN0YXJ0ID0gYW5jaG9yIS5yb3cgPiBmb2N1cyEucm93ID8gZm9jdXMhIDogYW5jaG9yITtcbiAgICAgIGxldCBlbmQgPSBhbmNob3IhLnJvdyA+IGZvY3VzIS5yb3cgPyBhbmNob3IhIDogZm9jdXMhO1xuICAgICAgaWYgKGVuZC5yb3cgPiBzdGFydC5yb3cgJiYgZW5kLmNvbCA9PT0gMCkge1xuICAgICAgICBlbmQucm93LS07XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICAgIGlmIChzdGF0ZSAmJiB0aGlzLmxpbmVUeXBlc1tsaW5lXSAhPT0gY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IHRoaXMubGluZXNbbGluZV0ucmVwbGFjZShcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wYXR0ZXJuLFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0uc2V0LnJlcGxhY2VtZW50LnJlcGxhY2UoXCIkI1wiLCAobGluZSAtIHN0YXJ0LnJvdyArIDEpLnRvU3RyaW5nKCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0ZSAmJiB0aGlzLmxpbmVUeXBlc1tsaW5lXSA9PT0gY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IHRoaXMubGluZXNbbGluZV0ucmVwbGFjZShcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBhdHRlcm4sXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS51bnNldC5yZXBsYWNlbWVudFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKFxuICAgICAgICB7IHJvdzogZW5kLnJvdywgY29sOiB0aGlzLmxpbmVzW2VuZC5yb3ddLmxlbmd0aCB9LFxuICAgICAgICB7IHJvdzogc3RhcnQucm93LCBjb2w6IDAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSB8fCAhc2VsLmFuY2hvck5vZGUpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChcbiAgICAgIHNlbC5pc0NvbGxhcHNlZCAmJlxuICAgICAgc2VsLmZvY3VzTm9kZS5ub2RlVHlwZSA9PT0gMyAmJlxuICAgICAgc2VsLmZvY3VzT2Zmc2V0ID09PSBzZWwuZm9jdXNOb2RlLm5vZGVWYWx1ZSEubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGZvciAobm9kZSA9IHNlbC5mb2N1c05vZGU7IG5vZGUgJiYgbm9kZS5uZXh0U2libGluZyA9PT0gbnVsbDsgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSEpO1xuICAgICAgaWYgKFxuICAgICAgICBub2RlICYmXG4gICAgICAgIG5vZGUubmV4dFNpYmxpbmcgJiZcbiAgICAgICAgKG5vZGUubmV4dFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSAmJlxuICAgICAgICAobm9kZS5uZXh0U2libGluZyBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzKFwiVE1JbmxpbmVGb3JtYXR0ZWRcIilcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGFuY2VzdG9yID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIGlmICghYW5jZXN0b3IpIHJldHVybiBmYWxzZTtcblxuICAgIHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3RvciAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmXG4gICAgICAgIHR5cGVvZiAoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICgoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRNSW5saW5lRm9ybWF0dGVkXCIpIHx8XG4gICAgICAgICAgKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoXCJUTUJsYW5rTGluZVwiKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUhO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHRoaXMubGFzdENvbW1hbmRTdGF0ZSA9IHRoaXMuZ2V0Q29tbWFuZFN0YXRlKCk7XG4gICAgdGhpcy5zZXRDb21tYW5kU3RhdGUoY29tbWFuZCwgIXRoaXMubGFzdENvbW1hbmRTdGF0ZVtjb21tYW5kXSk7XG4gIH1cblxuICBwcml2YXRlIGZpcmVEcm9wKGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyKTogdm9pZCB7XG4gICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuZHJvcCkge1xuICAgICAgbGlzdGVuZXIoeyBkYXRhVHJhbnNmZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaXJlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG5cbiAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBmb3IgcmVzdG9yYXRpb24gbGF0ZXJcbiAgICB0aGlzLmxhc3RTZWxlY3Rpb24gPSB7XG4gICAgICBmb2N1czogZm9jdXMsXG4gICAgICBhbmNob3I6IGFuY2hvclxuICAgIH07XG5cbiAgICBpZiAodGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uICYmIHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgIGxldCBjb21tYW5kU3RhdGUgPSB0aGlzLmdldENvbW1hbmRTdGF0ZShmb2N1cywgYW5jaG9yKTtcbiAgICAgIGlmICh0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmxhc3RDb21tYW5kU3RhdGUsIGNvbW1hbmRTdGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjb21tYW5kU3RhdGUpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uKSB7XG4gICAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgICBmb2N1czogZm9jdXMhLFxuICAgICAgICAgIGFuY2hvcjogYW5jaG9yISxcbiAgICAgICAgICBjb21tYW5kU3RhdGU6IHRoaXMubGFzdENvbW1hbmRTdGF0ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRvcjtcbiJdLCJuYW1lcyI6WyJnbG9iYWwiLCJ0aGlzIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwicmVxdWlyZSQkMyIsInNoYXJlZFN0b3JlTW9kdWxlIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsIm1ha2VCdWlsdEluIiwibWFrZUJ1aWx0SW5Nb2R1bGUiLCJvd25LZXlzIiwicmVxdWlyZSQkOCIsInJlcXVpcmUkJDkiLCJyZXF1aXJlJCQxMCIsInJlcXVpcmUkJDExIiwicmVxdWlyZSQkMTIiLCJyZXF1aXJlJCQxMyIsInN2ZyIsImJsb2NrcXVvdGUiLCJib2xkIiwiY2xlYXJfZm9ybWF0dGluZyIsImNvZGUiLCJoMSIsImgyIiwiaHIiLCJpbWFnZSIsIml0YWxpYyIsImxpbmsiLCJvbCIsInJlZG8iLCJzdHJpa2V0aHJvdWdoIiwidWwiLCJ1bmRvIiwiaXNNYWNMaWtlIiwidGVzdCIsIm5hdmlnYXRvciIsInBsYXRmb3JtIiwiRGVmYXVsdENvbW1hbmRzIiwibmFtZSIsImFjdGlvbiIsImlubmVySFRNTCIsInRpdGxlIiwiaG90a2V5IiwiaW5zZXJ0TGluayIsImVkaXRvciIsImlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQiLCJ3cmFwU2VsZWN0aW9uIiwiZW5hYmxlZCIsImluc2VydEltYWdlIiwicGFzdGUiLCJjYW5VbmRvIiwiY2FuUmVkbyIsIkNvbW1hbmRCYXIiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiZSIsImNvbW1hbmRzIiwiYnV0dG9ucyIsInN0YXRlIiwiaG90a2V5cyIsImVsZW1lbnQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiYm9keSIsImNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImhhbmRsZUtleWRvd24iLCJzZXRFZGl0b3IiLCJwYXJlbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImNvbW1hbmQiLCJlbCIsImFwcGVuZENoaWxkIiwiY29tbWFuZE5hbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJrZXlzIiwic3BsaXQiLCJtb2RpZmllcnMiLCJtb2RpZmllcmV4cGxhbmF0aW9uIiwiaSIsImxlbmd0aCIsInB1c2giLCJsYXN0S2V5IiwibWF0Y2giLCJjb25jYXQiLCJ0b1VwcGVyQ2FzZSIsImtleSIsInRvTG93ZXJDYXNlIiwiam9pbiIsImhhbmRsZUNsaWNrIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsImVkaXRvckhhZEZvY3VzIiwiY29udGFpbnMiLCJhY3RpdmVFbGVtZW50IiwiZm9jdXMiLCJyZXN0b3JlTGFzdFNlbGVjdGlvbiIsInNldENvbW1hbmRTdGF0ZSIsImhhbmRsZVNlbGVjdGlvbiIsImNvbW1hbmRTdGF0ZSIsInVuZGVmaW5lZCIsImFuY2hvciIsIm91dGVyIiwibW9kaWZpZXIiLCJyZXF1aXJlJCQxNCIsInJlcXVpcmUkJDE1IiwicmVxdWlyZSQkMTYiLCJyZXF1aXJlJCQxNyIsInJlcXVpcmUkJDE4IiwicmVxdWlyZSQkMTkiLCJyZXF1aXJlJCQyMCIsInJlcXVpcmUkJDIxIiwicmVwbGFjZW1lbnRzIiwiQVNDSUlQdW5jdHVhdGlvbiIsIk5vdFRyaWdnZXJDaGFyIiwiU2NoZW1lIiwiRW1haWwiLCJIVE1MT3BlblRhZyIsIkhUTUxDbG9zZVRhZyIsIkhUTUxUYWdOYW1lIiwiSFRNTENvbW1lbnQiLCJIVE1MUEkiLCJIVE1MRGVjbGFyYXRpb24iLCJIVE1MQ0RBVEEiLCJIVE1MQXR0cmlidXRlIiwiSFRNTEF0dFZhbHVlIiwiS25vd25UYWciLCJwdW5jdHVhdGlvbkxlYWRpbmciLCJSZWdFeHAiLCJwdW5jdHVhdGlvblRyYWlsaW5nIiwibGluZUdyYW1tYXIiLCJUTUgxIiwicmVnZXhwIiwicmVwbGFjZW1lbnQiLCJUTUgyIiwiVE1IMyIsIlRNSDQiLCJUTUg1IiwiVE1INiIsIlRNQmxvY2txdW90ZSIsIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuIiwiX3dyYXBSZWdFeHAiLCJzZXEiLCJUTUNvZGVGZW5jZVRpbGRlT3BlbiIsIlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZSIsIlRNQ29kZUZlbmNlVGlsZGVDbG9zZSIsIlRNQmxhbmtMaW5lIiwiVE1TZXRleHRIMU1hcmtlciIsIlRNU2V0ZXh0SDJNYXJrZXIiLCJUTUhSIiwiVE1VTCIsIlRNT0wiLCJUTUluZGVudGVkQ29kZSIsIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb24iLCJsYWJlbFBsYWNlaG9sZGVyIiwiaHRtbEJsb2NrR3JhbW1hciIsInN0YXJ0IiwiZW5kIiwicGFyYUludGVycnVwdCIsImlubGluZUdyYW1tYXIiLCJlc2NhcGUiLCJhdXRvbGluayIsImh0bWwiLCJsaW5rT3BlbiIsImltYWdlT3BlbiIsImxpbmtMYWJlbCIsImRlZmF1bHQiLCJyZXBsYWNlbWVudFJlZ2V4cCIsImlubGluZVJ1bGVzIiwicnVsZSIsInJlIiwic291cmNlIiwicmVwbGFjZSIsInN0cmluZyIsImZsYWdzIiwiY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hciIsImN1c3RvbVJ1bGVzIiwiYXJndW1lbnRzIiwibWVyZ2VkIiwiX29iamVjdFNwcmVhZCIsInJ1bGVOYW1lIiwiZW50cmllcyIsInByb2Nlc3NlZFJ1bGUiLCJyZWdleHBTb3VyY2UiLCJodG1sZXNjYXBlIiwidHlwZSIsInNldCIsInByZSIsInBvc3QiLCJ1bnNldCIsInByZVBhdHRlcm4iLCJwb3N0UGF0dGVybiIsInBhdHRlcm4iLCJoMyIsImg0IiwiaDUiLCJoNiIsIkVkaXRvciIsInRleHRhcmVhIiwibGluZXMiLCJsaW5lRWxlbWVudHMiLCJsaW5lVHlwZXMiLCJsaW5lQ2FwdHVyZXMiLCJsaW5lUmVwbGFjZW1lbnRzIiwibGlua0xhYmVscyIsImxpbmVEaXJ0eSIsImxhc3RDb21tYW5kU3RhdGUiLCJjdXN0b21JbmxpbmVHcmFtbWFyIiwibWVyZ2VkSW5saW5lR3JhbW1hciIsImhhc0ZvY3VzIiwibGFzdFNlbGVjdGlvbiIsImxpc3RlbmVycyIsImNoYW5nZSIsInNlbGVjdGlvbiIsImRyb3AiLCJ1bmRvU3RhY2siLCJyZWRvU3RhY2siLCJpc1Jlc3RvcmluZ0hpc3RvcnkiLCJtYXhIaXN0b3J5IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0YWdOYW1lIiwicGFyZW50Tm9kZSIsInN0eWxlIiwiZGlzcGxheSIsImNyZWF0ZUVkaXRvckVsZW1lbnQiLCJzZXRDb250ZW50IiwiY29udGVudCIsInZhbHVlIiwiaGFuZGxlVW5kb1JlZG9LZXkiLCJwdXNoSGlzdG9yeSIsInB1c2hDdXJyZW50U3RhdGUiLCJnZXRDb250ZW50IiwiZ2V0U2VsZWN0aW9uIiwic2hpZnQiLCJjdXJyZW50IiwicG9wIiwicHJldiIsInNldFNlbGVjdGlvbiIsIm5leHQiLCJpc01hYyIsImN0cmwiLCJtZXRhS2V5IiwiY3RybEtleSIsImFsdEtleSIsInNoaWZ0S2V5IiwiY2xhc3NMaXN0IiwiYWRkIiwiY29udGVudEVkaXRhYmxlIiwid2hpdGVTcGFjZSIsIndlYmtpdFVzZXJNb2RpZnkiLCJuZXh0U2libGluZyIsImluc2VydEJlZm9yZSIsImhhbmRsZUlucHV0RXZlbnQiLCJoYW5kbGVCZWZvcmVJbnB1dEV2ZW50IiwiaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQiLCJoYW5kbGVQYXN0ZSIsImhhbmRsZURyb3AiLCJjaGlsZE5vZGVzIiwiZmlyc3RDaGlsZCIsInJlbW92ZUNoaWxkIiwibGluZU51bSIsImxlIiwiQXJyYXkiLCJ1cGRhdGVGb3JtYXR0aW5nIiwiZmlyZUNoYW5nZSIsInVwZGF0ZUxpbmVUeXBlcyIsInVwZGF0ZUxpbmtMYWJlbHMiLCJhcHBseUxpbmVUeXBlcyIsImwiLCJjYXB0dXJlIiwic3RyIiwicDEiLCJwMiIsInBhcnNlSW50IiwicHJvY2Vzc0lubGluZVN0eWxlcyIsImNvbnRlbnRIVE1MIiwicmVtb3ZlQXR0cmlidXRlIiwiZGF0YXNldCIsInRvU3RyaW5nIiwiY29kZUJsb2NrVHlwZSIsImNvZGVCbG9ja1NlcUxlbmd0aCIsImh0bWxCbG9jayIsImxpbmVUeXBlIiwibGluZUNhcHR1cmUiLCJsaW5lUmVwbGFjZW1lbnQiLCJleGVjIiwiZ3JvdXBzIiwiaHRtbEJsb2NrVHlwZSIsImhlYWRpbmdMaW5lIiwiaGVhZGluZ0xpbmVUeXBlIiwiZ2V0QW5jaG9yIiwid2luZG93Iiwic3RhcnROb2RlIiwiYW5jaG9yTm9kZSIsImZvY3VzTm9kZSIsIm9mZnNldCIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0Iiwicm93IiwiY29sIiwiY29tcHV0ZUNvbHVtbiIsIm5vZGUiLCJwcmV2aW91c1NpYmxpbmciLCJjdXJyZW50TGluZU51bURhdGEiLCJfYSIsInByZXZpb3VzTGluZU51bURhdGEiLCJfYiIsImN1cnJlbnRMaW5lTnVtIiwicHJldmlvdXNMaW5lTnVtIiwiY29tcHV0ZU5vZGVBbmRPZmZzZXQiLCJ3aW5kb3dTZWxlY3Rpb24iLCJzZXRCYXNlQW5kRXh0ZW50IiwidGV4dCIsImJlZ2lubmluZyIsImluc2VydGVkTGluZXMiLCJsaW5lQmVmb3JlIiwic3Vic3RyIiwibGluZUVuZCIsImVuZENvbFBvcyIsInNwbGljZUxpbmVzIiwic3RhcnRDb2wiLCJlbmRDb2wiLCJsZWZ0IiwibWlkIiwicmlnaHQiLCJsaXN0ZW5lciIsImxpbmVzRGlydHkiLCJiZWZvcmVJbnB1dEV2ZW50IiwiaW5wdXRUeXBlIiwiY2xlYXJEaXJ0eUZsYWciLCJzdWJzdHJpbmciLCJjb250aW51YWJsZVR5cGUiLCJsaW5lQmVmb3JlQnJlYWsiLCJsaW5lQWZ0ZXJCcmVhayIsInJlc3VsdCIsInNjcm9sbEludG9WaWV3IiwiYmxvY2siLCJpbmxpbmUiLCJpbnB1dEV2ZW50IiwiZml4Tm9kZUhpZXJhcmNoeSIsInVwZGF0ZUxpbmVDb250ZW50c0FuZEZvcm1hdHRpbmciLCJfZSIsImZpcmVTZWxlY3Rpb24iLCJjbGlwYm9hcmREYXRhIiwiZ2V0RGF0YSIsImZpcmVEcm9wIiwiZGF0YVRyYW5zZmVyIiwib3JpZ2luYWxTdHJpbmciLCJwcm9jZXNzZWQiLCJzdGFjayIsImNhcCIsInBvdGVudGlhbExpbmsiLCJwb3RlbnRpYWxJbWFnZSIsInBhcnNlTGlua09ySW1hZ2UiLCJvdXRwdXQiLCJjaGFyQ291bnQiLCJkZWxpbUNvdW50IiwiZGVsaW1TdHJpbmciLCJjdXJyZW50RGVsaW1pdGVyIiwicHJlY2VkaW5nIiwiZm9sbG93aW5nIiwicHVuY3R1YXRpb25Gb2xsb3dzIiwicHVuY3R1YXRpb25QcmVjZWRlcyIsIndoaXRlc3BhY2VGb2xsb3dzIiwid2hpdGVzcGFjZVByZWNlZGVzIiwiY2FuT3BlbiIsImNhbkNsb3NlIiwic3RhY2tQb2ludGVyIiwiZGVsaW1pdGVyIiwiZW50cnkiLCJjb3VudCIsImNvbnN1bWVkIiwibm9kZVR5cGUiLCJOb2RlIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJiaW5kUmlnaHQiLCJjaGlsZHJlbkNvbXBsZXRlIiwicnYiLCJub2RlVmFsdWUiLCJ1cGRhdGVMaW5lQ29udGVudHMiLCJsaW5lRGVsdGEiLCJjaGlsZEVsZW1lbnRDb3VudCIsImZpcnN0Q2hhbmdlZExpbmUiLCJsYXN0Q2hhbmdlZExpbmUiLCJsaW5lc1RvRGVsZXRlIiwibGluZXNUb0FkZCIsImxpbmUiLCJjdCIsInN0YXJ0TGluZSIsImxpbmVzVG9JbnNlcnQiLCJhZGp1c3RMaW5lRWxlbWVudHMiLCJpbnNlcnRlZEJsYW5rIiwiaW5zZXJ0ZWREaXJ0eSIsInNwbGljZSIsIm9yaWdpbmFsQ2hpbGRyZW4iLCJmcm9tIiwicmVwbGFjZUNoaWxkIiwiY2hpbGQiLCJwYXJlbnQiLCJfbGVuIiwibmV3Q2hpbGRyZW4iLCJfa2V5IiwiZm9yRWFjaCIsIm5ld0NoaWxkIiwiRUxFTUVOVF9OT0RFIiwiZGl2V3JhcHBlciIsImdyYW5kQ2hpbGRyZW4iLCJzb21lIiwiZ3JhbmRDaGlsZCIsImlzSW1hZ2UiLCJ0ZXh0T2Zmc2V0Iiwib3BlbmVyIiwiY3VycmVudE9mZnNldCIsImJyYWNrZXRMZXZlbCIsImxpbmtUZXh0IiwibGlua1JlZiIsImxpbmtEZXRhaWxzIiwidGV4dE91dGVyIiwibmV4dENoYXIiLCJ0cmltIiwicGFyZW50aGVzaXNMZXZlbCIsImlubGluZU91dGVyIiwidmFsaWQiLCJsYWJlbCIsImxhYmVsQ2xhc3MiLCJjb21wdXRlQ29tbW9uQW5jZXN0b3IiLCJub2RlMSIsIm5vZGUyIiwiYW5jZXN0cnkiLCJ1bnNoaWZ0IiwiYW5jZXN0cnkxIiwiYW5jZXN0cnkyIiwiY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUiLCJzZWwiLCJpbmNsdWRlcyIsImdldENvbW1hbmRTdGF0ZSIsImNtZCIsIm1hcmt1cE5vZGUiLCJsZW4iLCJsZWFkaW5nIiwidHJhaWxpbmciLCJpc0NvbGxhcHNlZCIsImFuY2VzdG9yIiwidG9nZ2xlQ29tbWFuZFN0YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0NBQ0EsQ0FBQSxJQUFJLEtBQUssR0FBRyxVQUFVLEVBQUUsRUFBRTtJQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO0dBQ3BDOztDQUVEO0NBQ0EsQ0FBYyxZQUFBO0NBQ2Q7SUFDRSxLQUFLLENBQUMsT0FBTyxVQUFVLElBQUksUUFBUSxJQUFJLFVBQVUsQ0FBQztJQUNsRCxLQUFLLENBQUMsT0FBTyxNQUFNLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQztDQUM1QztJQUNFLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDO0lBQ3RDLEtBQUssQ0FBQyxPQUFPQSxjQUFNLElBQUksUUFBUSxJQUFJQSxjQUFNLENBQUM7SUFDMUMsS0FBSyxDQUFDLE9BQU9DLFlBQUksSUFBSSxRQUFRLElBQUlBLFlBQUksQ0FBQztDQUN4QztDQUNBLEdBQUUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFOzs7Ozs7Ozs7Ozs7Q0NkL0QsQ0FBYyxLQUFBLEdBQUcsVUFBVSxJQUFJLEVBQUU7Q0FDakMsR0FBRSxJQUFJO0NBQ04sS0FBSSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUU7S0FDaEIsQ0FBQyxPQUFPLEtBQUssRUFBRTtDQUNsQixLQUFJLE9BQU8sSUFBSTtDQUNmO0dBQ0M7Ozs7Ozs7Ozs7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QVMsQ0FBQ0UsU0FBUyxJQUFJLElBQUksQ0FBQ0YsU0FBUyxDQUFDRSxTQUFTLENBQUNySSxNQUFNLEVBQUU7T0FDL0QsSUFBSW1CLFlBQVksR0FBRyxJQUFJLENBQUNpVixlQUFlLENBQUNyVixLQUFLLEVBQUVNLE1BQU0sQ0FBQztPQUN0RCxJQUFJLElBQUksQ0FBQ3lHLGdCQUFnQixFQUFFO1NBQ3pCckksTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDb0ksZ0JBQWdCLEVBQUUzRyxZQUFZLENBQUM7Q0FDcEQsT0FBQyxNQUFNO1NBQ0wsSUFBSSxDQUFDMkcsZ0JBQWdCLEdBQUdySSxNQUFNLENBQUNDLE1BQU0sQ0FBQyxFQUFFLEVBQUV5QixZQUFZLENBQUM7Q0FDekQ7T0FDQSxLQUFLLElBQUlrTyxRQUFRLElBQUksSUFBSSxDQUFDbEgsU0FBUyxDQUFDRSxTQUFTLEVBQUU7Q0FDN0NnSCxRQUFBQSxRQUFRLENBQUM7Q0FDUHRPLFVBQUFBLEtBQUssRUFBRUEsS0FBTTtDQUNiTSxVQUFBQSxNQUFNLEVBQUVBLE1BQU87V0FDZkYsWUFBWSxFQUFFLElBQUksQ0FBQzJHO0NBQ3BCLFNBQUEsQ0FBQztDQUNKO0NBQ0Y7Q0FDRjtDQUNEOzs7Ozs7Ozs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1XX0={"version":3,"file":"index.js","sources":["node_modules/core-js/internals/global-this.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/function-bind-native.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/object-property-is-enumerable.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/classof-raw.js","node_modules/core-js/internals/indexed-object.js","node_modules/core-js/internals/is-null-or-undefined.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/to-indexed-object.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/environment-user-agent.js","node_modules/core-js/internals/environment-v8-version.js","node_modules/core-js/internals/symbol-constructor-detection.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/a-callable.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/is-pure.js","node_modules/core-js/internals/define-global-property.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/object-get-own-property-descriptor.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/weak-map-basic-detection.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/make-built-in.js","node_modules/core-js/internals/define-built-in.js","node_modules/core-js/internals/math-trunc.js","node_modules/core-js/internals/to-integer-or-infinity.js","node_modules/core-js/internals/to-absolute-index.js","node_modules/core-js/internals/to-length.js","node_modules/core-js/internals/length-of-array-like.js","node_modules/core-js/internals/array-includes.js","node_modules/core-js/internals/object-keys-internal.js","node_modules/core-js/internals/enum-bug-keys.js","node_modules/core-js/internals/object-get-own-property-names.js","node_modules/core-js/internals/object-get-own-property-symbols.js","node_modules/core-js/internals/own-keys.js","node_modules/core-js/internals/copy-constructor-properties.js","node_modules/core-js/internals/is-forced.js","node_modules/core-js/internals/export.js","node_modules/core-js/internals/to-string-tag-support.js","node_modules/core-js/internals/classof.js","node_modules/core-js/internals/to-string.js","node_modules/core-js/internals/regexp-flags.js","node_modules/core-js/internals/regexp-sticky-helpers.js","node_modules/core-js/internals/object-keys.js","node_modules/core-js/internals/object-define-properties.js","node_modules/core-js/internals/html.js","node_modules/core-js/internals/object-create.js","node_modules/core-js/internals/regexp-unsupported-dot-all.js","node_modules/core-js/internals/regexp-unsupported-ncg.js","node_modules/core-js/internals/regexp-exec.js","node_modules/core-js/modules/es.regexp.exec.js","node_modules/core-js/internals/dom-iterables.js","node_modules/core-js/internals/dom-token-list-prototype.js","node_modules/core-js/internals/add-to-unscopables.js","node_modules/core-js/internals/iterators.js","node_modules/core-js/internals/correct-prototype-getter.js","node_modules/core-js/internals/object-get-prototype-of.js","node_modules/core-js/internals/iterators-core.js","node_modules/core-js/internals/set-to-string-tag.js","node_modules/core-js/internals/iterator-create-constructor.js","node_modules/core-js/internals/function-uncurry-this-accessor.js","node_modules/core-js/internals/is-possible-prototype.js","node_modules/core-js/internals/a-possible-prototype.js","node_modules/core-js/internals/object-set-prototype-of.js","node_modules/core-js/internals/iterator-define.js","node_modules/core-js/internals/create-iter-result-object.js","node_modules/core-js/modules/es.array.iterator.js","node_modules/core-js/modules/web.dom-collections.iterator.js","src/svg/svg.ts","src/TinyMDECommandBar.ts","node_modules/core-js/internals/function-apply.js","node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","node_modules/core-js/internals/string-multibyte.js","node_modules/core-js/internals/advance-string-index.js","node_modules/core-js/internals/get-substitution.js","node_modules/core-js/internals/regexp-exec-abstract.js","node_modules/core-js/modules/es.string.replace.js","node_modules/core-js/internals/whitespaces.js","node_modules/core-js/internals/string-trim.js","node_modules/core-js/internals/string-trim-forced.js","node_modules/core-js/modules/es.string.trim.js","node_modules/core-js/internals/inherit-if-required.js","node_modules/core-js/internals/is-regexp.js","node_modules/core-js/internals/regexp-get-flags.js","node_modules/core-js/internals/proxy-accessor.js","node_modules/core-js/internals/define-built-in-accessor.js","node_modules/core-js/internals/set-species.js","node_modules/core-js/modules/es.regexp.constructor.js","node_modules/core-js/modules/es.regexp.flags.js","src/grammar.ts","src/TinyMDE.ts"],"sourcesContent":["'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n check(typeof this == 'object' && this) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) === 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL &&\n !Symbol.sham &&\n typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n globalThis[key] = value;\n } return value;\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n version: '3.42.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.42.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar definePropertyModule = require('../internals/object-define-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nmodule.exports = function (O, key, value, options) {\n if (!options) options = {};\n var simple = options.enumerable;\n var name = options.name !== undefined ? options.name : key;\n if (isCallable(value)) makeBuiltIn(value, name, options);\n if (options.global) {\n if (simple) O[key] = value;\n else defineGlobalProperty(key, value);\n } else {\n try {\n if (!options.unsafe) delete O[key];\n else if (O[key]) simple = true;\n } catch (error) { /* empty */ }\n if (simple) O[key] = value;\n else definePropertyModule.f(O, key, {\n value: value,\n enumerable: false,\n configurable: !options.nonConfigurable,\n writable: !options.nonWritable\n });\n } return O;\n};\n","'use strict';\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n","'use strict';\nvar trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number || number === 0 ? 0 : trunc(number);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n var len = toIntegerOrInfinity(argument);\n return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","'use strict';\nvar toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n if (length === 0) return !IS_INCLUDES && -1;\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el !== el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value !== value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","'use strict';\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value === POLYFILL ? true\n : value === NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.dontCallGetSet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = globalThis;\n } else if (STATIC) {\n target = globalThis[TARGET] || defineGlobalProperty(TARGET, {});\n } else {\n target = globalThis[TARGET] && globalThis[TARGET].prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.dontCallGetSet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n defineBuiltIn(target, key, sourceProperty, options);\n }\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","'use strict';\nvar classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n return $String(argument);\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = globalThis.RegExp;\n\nvar UNSUPPORTED_Y = fails(function () {\n var re = $RegExp('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') !== null;\n});\n\n// UC Browser bug\n// https://github.com/zloirock/core-js/issues/1008\nvar MISSED_STICKY = UNSUPPORTED_Y || fails(function () {\n return !$RegExp('a', 'y').sticky;\n});\n\nvar BROKEN_CARET = UNSUPPORTED_Y || fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = $RegExp('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') !== null;\n});\n\nmodule.exports = {\n BROKEN_CARET: BROKEN_CARET,\n MISSED_STICKY: MISSED_STICKY,\n UNSUPPORTED_Y: UNSUPPORTED_Y\n};\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","'use strict';\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n // eslint-disable-next-line no-useless-assignment -- avoid memory leak\n activeXDocument = null;\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = globalThis.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.test('\\n') && re.flags === 's');\n});\n","'use strict';\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = globalThis.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?<a>b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$<a>c') !== 'bc';\n});\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n call(nativeExec, re1, 'a');\n call(nativeExec, re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n patchedExec = function exec(string) {\n var re = this;\n var state = getInternalState(re);\n var str = toString(string);\n var raw = state.raw;\n var result, reCopy, lastIndex, match, i, object, group;\n\n if (raw) {\n raw.lastIndex = re.lastIndex;\n result = call(patchedExec, raw, str);\n re.lastIndex = raw.lastIndex;\n return result;\n }\n\n var groups = state.groups;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = call(regexpFlags, re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = replace(flags, 'y', '');\n if (indexOf(flags, 'g') === -1) {\n flags += 'g';\n }\n\n strCopy = stringSlice(str, re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = stringSlice(match.input, charsAdded);\n match[0] = stringSlice(match[0], charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn't work for /(.?)?/\n call(nativeReplace, match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (match && groups) {\n match.groups = object = create(null);\n for (i = 0; i < groups.length; i++) {\n group = groups[i];\n object[group[0]] = match[group[1]];\n }\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","'use strict';\n// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","'use strict';\n// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = require('../internals/document-create-element');\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] === undefined) {\n defineProperty(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof $Object ? ObjectPrototype : null;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (target, TAG, STATIC) {\n if (target && !STATIC) target = target.prototype;\n if (target && !hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nmodule.exports = function (object, key, method) {\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n } catch (error) { /* empty */ }\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nmodule.exports = function (argument) {\n return isObject(argument) || argument === null;\n};\n","'use strict';\nvar isPossiblePrototype = require('../internals/is-possible-prototype');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n if (isPossiblePrototype(argument)) return argument;\n throw new $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n","'use strict';\n/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar isObject = require('../internals/is-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n requireObjectCoercible(O);\n aPossiblePrototype(proto);\n if (!isObject(O)) return O;\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/iterator-create-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];\n\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n }\n\n return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\n// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports = function (value, done) {\n return { value: value, done: done };\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineProperty = require('../internals/object-define-property').f;\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = null;\n return createIterResultObject(undefined, true);\n }\n switch (state.kind) {\n case 'keys': return createIterResultObject(index, false);\n case 'values': return createIterResultObject(target[index], false);\n } return createIterResultObject([index, target[index]], false);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nvar values = Iterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n// V8 ~ Chrome 45- bug\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n defineProperty(values, 'name', { value: 'values' });\n} catch (error) { /* empty */ }\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n setToStringTag(CollectionPrototype, COLLECTION_NAME, true);\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n handlePrototype(globalThis[COLLECTION_NAME] && globalThis[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n","const svg: Record<string, string> = {\n blockquote: `<svg height=\"18\" width=\"18\"><rect width=\"5\" height=\"5\" x=\"3\" y=\"4\" ry=\"1\"/><rect ry=\"1\" y=\"4\" x=\"10\" height=\"5\" width=\"5\"/><path d=\"M8 6.999v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3zm7 0v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3z\"/></svg>`,\n bold: `<svg height=\"18\" width=\"18\"><path d=\"M4 2a1 1 0 00-1 1v12a1 1 0 001 1h6c4 0 5-2 5-4 0-1.322-.434-2.636-1.885-3.381C13.772 7.885 14 6.945 14 6c0-2-1-4-5-4zm1 2h4c1.668 0 2.32.393 2.6.672.28.279.4.662.4 1.328s-.12 1.057-.4 1.338c-.275.274-1.014.646-2.6.662H5zm5 6c1.666.005 2.318.388 2.596.666.277.278.404.667.404 1.334s-.127 1.06-.404 1.338c-.278.278-.93.66-2.596.662l-4.992.004L5 10z\"/></svg>`,\n clear_formatting: `<svg height=\"18\" width=\"18\"><path d=\"M11.03 1a1 1 0 00-.74.3l-9 9a1 1 0 000 1.4l4 4A1 1 0 006 16h2a1 1 0 00.7-.3l8-8a1 1 0 000-1.4l-5-5a1 1 0 00-.67-.3zM8.7 5.7l3.58 3.6L7.6 14H6.4l-3-3 5.3-5.3z\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"16\" height=\"2\" width=\"2\"/><rect width=\"2\" height=\"2\" x=\"13\" y=\"14\" rx=\".8\" ry=\".8\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"10\" height=\"2\" width=\"2\"/></svg>`,\n code: `<svg height=\"18\" width=\"18\"><path d=\"M13.5 2.994a.5.5 0 00-.5.5.5.5 0 000 .034V4.53a5.993 5.993 0 00-7.451-.445A6 6 0 1012.45 13.9a5.99 5.99 0 001.346-1.334.5.5 0 00.096-.101.5.5 0 00-.12-.698.5.5 0 00-.697.12l-.004-.005a5 5 0 01-1.197 1.2 5 5 0 111.215-6.965.5.5 0 00.697.12.5.5 0 00.211-.44V4.745H14V3.493a.5.5 0 00-.5-.5z\"/></svg>`,\n h1: `<svg height=\"18\" width=\"18\"><path d=\"M3 2s0-1 1-1h1c1 0 1 1 1 1v6h6V2s0-1 1-1h1c1 0 1 1 1 1v14s0 1-1 1h-1c-1 0-1-1-1-1v-6H6v6s0 1-1 1H4c-1 0-1-1-1-1z\"/></svg>`,\n h2: `<svg height=\"18\" width=\"18\"><path d=\"M4 2s0-1 1-1 1 1 1 1v6c1-1 2-1 4-1 3 0 4 2 4 4v5s0 1-1 1-1-1-1-1v-5c0-1.094-1-2-2-2-2 0-3 0-4 2v5s0 1-1 1-1-1-1-1z\"/></svg>`,\n hr: `<svg height=\"18\" width=\"18\"><rect ry=\"1\" y=\"8\" height=\"2\" width=\"18\" style=\"font-variation-settings:normal;marker:none\"/></svg>`,\n image: `<svg height=\"18\" width=\"18\"><path d=\"M1 2v14h16V2H1zm2 2h12v7l-3-3-4 4-2-2-3 3V4z\"/><circle r=\"1.5\" cy=\"6.5\" cx=\"5.5\"/></svg>`,\n italic: `<svg height=\"18\" width=\"18\"><path d=\"M9 2a1 1 0 000 2L7 14a1 1 0 100 2h2a1 1 0 000-2l2-10a1 1 0 100-2z\"/></svg>`,\n link: `<svg height=\"18\" width=\"18\"><path d=\"M9.07 5.18a3.9 3.9 0 00-1.52.43C6.31 6.22 5.3 7.29 4.3 8.29c-1 1-2.07 2.02-2.68 3.26-.31.62-.5 1.33-.41 2.07.09.75.48 1.47 1.1 2.09.61.61 1.33 1 2.08 1.1.74.09 1.45-.1 2.07-.42 1.24-.61 2.26-1.68 3.26-2.68.46-.47.94-.94 1.39-1.44l-.43.26c-.68.34-1.49.56-2.36.46-.2-.03-.4-.08-.6-.14-.79.76-1.55 1.45-2.16 1.76-.38.19-.67.24-.92.21-.26-.03-.54-.14-.92-.53-.39-.38-.5-.66-.53-.91-.03-.26.02-.55.21-.93.39-.76 1.32-1.74 2.32-2.74 1-1 1.98-1.93 2.74-2.32.38-.19.67-.24.93-.21.25.03.53.14.91.53.39.38.5.66.53.92v.06l1.12-1.06.44-.47c-.18-.3-.4-.6-.67-.87-.62-.61-1.34-1-2.09-1.1a3.08 3.08 0 00-.55-.01z\"/><path d=\"M13.07.86a3.9 3.9 0 00-1.52.43c-1.24.62-2.26 1.69-3.26 2.69-.46.47-.94.94-1.39 1.43.15-.08.28-.18.43-.25a4.4 4.4 0 012.36-.46c.2.02.4.07.6.14.79-.77 1.55-1.46 2.16-1.76.38-.19.67-.25.93-.21.25.03.53.14.91.52.39.38.5.66.53.92.03.26-.02.55-.21.93-.39.76-1.32 1.74-2.32 2.74-1 1-1.98 1.93-2.74 2.31-.38.2-.67.25-.93.22-.25-.04-.53-.15-.91-.53-.39-.38-.5-.66-.53-.92V9c-.36.33-.73.67-1.12 1.06l-.43.46c.17.3.4.6.66.87.62.62 1.34 1 2.08 1.1.75.1 1.46-.1 2.08-.41 1.24-.62 2.26-1.69 3.26-2.69s2.07-2.02 2.68-3.26c.31-.62.5-1.32.41-2.07a3.63 3.63 0 00-1.1-2.08c-.61-.62-1.33-1-2.07-1.1a3.08 3.08 0 00-.56-.02z\"/></svg>`,\n ol: `<svg height=\"18\" width=\"18\"><path d=\"M1.5 7a.5.5 0 100 1h1a.5.5 0 01.5.5c0 .164-.08.31-.14.355l-1.655 1.25A.492.492 0 001 10.5a.5.5 0 00.5.5h2a.5.5 0 000-1H3l.398-.299A1.5 1.5 0 002.5 7z\"/><path d=\"M1.5 12c-.667 0-.667 1 0 1h1.25c.333 0 .333.5 0 .5H2.5c-.667 0-.667 1 0 1h.25c.333 0 .333.5 0 .5H1.5c-.667 0-.667 1 0 1h1c.398 0 .78-.131 1.06-.365.282-.235.44-.554.44-.885a1.121 1.121 0 00-.303-.75c.191-.204.3-.47.303-.75 0-.332-.158-.651-.44-.885-.3-.241-.675-.37-1.06-.365z\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><path d=\"M1.5 2a.5.5 0 100 1H2v2h-.5a.5.5 0 100 1h2a.5.5 0 100-1H3V2.5c0-.277-.223-.5-.5-.5z\"/></svg>`,\n redo: `<svg height=\"18\" width=\"18\"><path d=\"M 7.2695308,2.7050781 C 8.1128755,2.7081581 8.9529895,2.8712156 9.730469,3.1347656 11.408874,3.7037121 12.90142,4.6847104 14,5.6367188 V 4 h 2 V 9 H 11 V 7 h 1.509765 C 11.59075,6.2485173 10.340208,5.453808 9.0878904,5.0292969 7.4309398,4.4676231 5.9453458,4.468717 4.7070308,5.7070312 c -1.225014,1.2250142 -1.409769,2.7206953 -0.779297,4.2968748 0.630472,1.57618 2.167475,3.158006 4.4433598,4.06836 l -0.7421878,1.855468 c -2.724115,-1.089646 -4.687112,-3.00782 -5.55664,-5.18164 -0.869528,-2.1738206 -0.554283,-4.6781393 1.220703,-6.4531252 0.923857,-0.9238568 2.015388,-1.388828 3.134765,-1.5351563 0.279845,-0.036582 0.560682,-0.053761 0.841797,-0.052734 z\" /></svg>`,\n strikethrough: `<svg width=\"18\" height=\"18\"><path d=\"M10 2C6 2 4 4 4 6c0 .338.08.672.193 1h2.34C6.113 6.629 6 6.295 6 6c0-.334.117-.725.691-1.154C7.265 4.416 8.331 4 10 4h3a1 1 0 000-2zm1.477 9c.413.368.523.706.523 1 0 .334-.127.712-.701 1.143-.575.43-1.632.85-3.299.857l-1.006.007V14H5a1 1 0 000 2h3c4 0 6-2 6-4 0-.338-.081-.672-.195-1z\"/><rect ry=\"1\" y=\"8\" x=\"1\" height=\"2\" width=\"16\"/></svg>`,\n ul: `<svg height=\"18\" width=\"18\"><circle cx=\"2\" cy=\"9\" r=\"2\"/><circle cy=\"4\" cx=\"2\" r=\"2\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><circle cx=\"2\" cy=\"14\" r=\"2\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/></svg>`,\n undo: `<svg height=\"18\" width=\"18\"><path d=\"M 10.730469 2.7050781 C 9.8871243 2.7081594 9.0470103 2.8712156 8.2695312 3.1347656 C 6.5911256 3.7037121 5.0985797 4.6847104 4 5.6367188 L 4 4 L 2 4 L 2 9 L 7 9 L 7 7 L 5.4902344 7 C 6.4092499 6.2485173 7.6597914 5.453808 8.9121094 5.0292969 C 10.56906 4.4676231 12.054654 4.468717 13.292969 5.7070312 C 14.517983 6.9320454 14.702738 8.4277265 14.072266 10.003906 C 13.441794 11.580086 11.904791 13.161912 9.6289062 14.072266 L 10.371094 15.927734 C 13.095209 14.838088 15.058206 12.919914 15.927734 10.746094 C 16.797262 8.5722734 16.482017 6.0679547 14.707031 4.2929688 C 13.783174 3.369112 12.691643 2.9041408 11.572266 2.7578125 C 11.292421 2.7212304 11.011584 2.704051 10.730469 2.7050781 z \" /></svg>\n`\n};\n\nexport default svg;","import svg from \"./svg/svg\";\nimport { Editor, Position, SelectionEvent } from \"./TinyMDE\";\n\nconst isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(\n typeof navigator !== \"undefined\" ? navigator.platform : \"\"\n);\n\nexport interface CommandAction {\n (editor: Editor): void;\n}\n\nexport interface CommandEnabled {\n (editor: Editor, focus?: Position, anchor?: Position): boolean | null;\n}\n\nexport interface CommandDefinition {\n name: string;\n action?: string | CommandAction;\n innerHTML?: string;\n title?: string;\n hotkey?: string;\n enabled?: CommandEnabled;\n}\n\nexport interface CommandBarProps {\n element?: string | HTMLElement;\n editor?: Editor;\n commands?: (string | CommandDefinition)[];\n}\n\ninterface Hotkey {\n modifiers: string[];\n command: string;\n key?: string;\n code?: string;\n}\n\nconst DefaultCommands: Record<string, CommandDefinition> = {\n bold: {\n name: \"bold\",\n action: \"bold\",\n innerHTML: svg.bold,\n title: \"Bold\",\n hotkey: \"Mod-B\",\n },\n italic: {\n name: \"italic\",\n action: \"italic\",\n innerHTML: svg.italic,\n title: \"Italic\",\n hotkey: \"Mod-I\",\n },\n strikethrough: {\n name: \"strikethrough\",\n action: \"strikethrough\",\n innerHTML: svg.strikethrough,\n title: \"Strikethrough\",\n hotkey: \"Mod2-Shift-5\",\n },\n code: {\n name: \"code\",\n action: \"code\",\n innerHTML: svg.code,\n title: \"Format as code\",\n },\n h1: {\n name: \"h1\",\n action: \"h1\",\n innerHTML: svg.h1,\n title: \"Level 1 heading\",\n hotkey: \"Mod-Shift-1\",\n },\n h2: {\n name: \"h2\",\n action: \"h2\",\n innerHTML: svg.h2,\n title: \"Level 2 heading\",\n hotkey: \"Mod-Shift-2\",\n },\n ul: {\n name: \"ul\",\n action: \"ul\",\n innerHTML: svg.ul,\n title: \"Bulleted list\",\n },\n ol: {\n name: \"ol\",\n action: \"ol\",\n innerHTML: svg.ol,\n title: \"Numbered list\",\n },\n blockquote: {\n name: \"blockquote\",\n action: \"blockquote\",\n innerHTML: svg.blockquote,\n title: \"Quote\",\n hotkey: \"Mod2-Shift-Q\",\n },\n insertLink: {\n name: \"insertLink\",\n action: (editor: Editor) => {\n if (editor.isInlineFormattingAllowed()) editor.wrapSelection(\"[\", \"]()\");\n },\n enabled: (editor: Editor) =>\n editor.isInlineFormattingAllowed() ? false : null,\n innerHTML: svg.link,\n title: \"Insert link\",\n hotkey: \"Mod-K\",\n },\n insertImage: {\n name: \"insertImage\",\n action: (editor: Editor) => {\n if (editor.isInlineFormattingAllowed()) editor.wrapSelection(\"![\", \"]()\");\n },\n enabled: (editor: Editor) =>\n editor.isInlineFormattingAllowed() ? false : null,\n innerHTML: svg.image,\n title: \"Insert image\",\n hotkey: \"Mod2-Shift-I\",\n },\n hr: {\n name: \"hr\",\n action: (editor: Editor) => editor.paste(\"\\n***\\n\"),\n enabled: () => false,\n innerHTML: svg.hr,\n title: \"Insert horizontal line\",\n hotkey: \"Mod2-Shift-L\",\n },\n undo: {\n name: \"undo\",\n action: (editor: Editor) => editor.undo(),\n enabled: (editor: Editor) => (editor.canUndo ? false : null),\n innerHTML: svg.undo,\n title: \"Undo\",\n },\n redo: {\n name: \"redo\",\n action: (editor: Editor) => editor.redo(),\n enabled: (editor: Editor) => (editor.canRedo ? false : null),\n innerHTML: svg.redo,\n title: \"Redo\",\n },\n};\n\nexport class CommandBar {\n public e: HTMLDivElement | null = null;\n public editor: Editor | null = null;\n public commands: Record<string, CommandDefinition> = {};\n public buttons: Record<string, HTMLDivElement> = {};\n public state: Record<string, boolean | null> = {};\n private hotkeys: Hotkey[] = [];\n\n constructor(props: CommandBarProps) {\n this.e = null;\n this.editor = null;\n this.commands = {};\n this.buttons = {};\n this.state = {};\n this.hotkeys = [];\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n \n if (!element) {\n element = document.body;\n }\n\n this.createCommandBarElement(\n element,\n props.commands || [\n \"bold\",\n \"italic\",\n \"strikethrough\",\n \"|\",\n \"code\",\n \"|\",\n \"h1\",\n \"h2\",\n \"|\",\n \"ul\",\n \"ol\",\n \"|\",\n \"blockquote\",\n \"hr\",\n \"|\",\n \"undo\",\n \"redo\",\n \"|\",\n \"insertLink\",\n \"insertImage\",\n ]\n );\n document.addEventListener(\"keydown\", (e) => this.handleKeydown(e));\n if (props.editor) this.setEditor(props.editor);\n }\n\n private createCommandBarElement(parentElement: HTMLElement, commands: (string | CommandDefinition)[]): void {\n this.e = document.createElement(\"div\");\n this.e.className = \"TMCommandBar\";\n\n for (let command of commands) {\n if (command === \"|\") {\n let el = document.createElement(\"div\");\n el.className = \"TMCommandDivider\";\n this.e.appendChild(el);\n } else {\n let commandName: string;\n if (typeof command === \"string\") {\n if (DefaultCommands[command]) {\n commandName = command;\n this.commands[commandName] = DefaultCommands[commandName];\n } else {\n continue;\n }\n } else if (typeof command === \"object\" && command.name) {\n commandName = command.name;\n this.commands[commandName] = {} as CommandDefinition;\n if (DefaultCommands[commandName]) {\n Object.assign(this.commands[commandName], DefaultCommands[commandName]);\n }\n Object.assign(this.commands[commandName], command);\n } else {\n continue;\n }\n\n let title = this.commands[commandName].title || commandName;\n\n if (this.commands[commandName].hotkey) {\n const keys = this.commands[commandName].hotkey!.split(\"-\");\n let modifiers: string[] = [];\n let modifierexplanation: string[] = [];\n \n for (let i = 0; i < keys.length - 1; i++) {\n switch (keys[i]) {\n case \"Ctrl\":\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n break;\n case \"Cmd\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n break;\n case \"Alt\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"Alt\");\n break;\n case \"Option\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"⌥\");\n break;\n case \"Win\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⊞ Win\");\n break;\n case \"Shift\":\n modifiers.push(\"shiftKey\");\n modifierexplanation.push(\"⇧\");\n break;\n case \"Mod\":\n if (isMacLike) {\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n } else {\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n }\n break;\n case \"Mod2\":\n modifiers.push(\"altKey\");\n if (isMacLike) modifierexplanation.push(\"⌥\");\n else modifierexplanation.push(\"Alt\");\n break;\n }\n }\n \n modifierexplanation.push(keys[keys.length - 1]);\n let hotkey: Hotkey = {\n modifiers: modifiers,\n command: commandName,\n };\n \n const lastKey = keys[keys.length - 1];\n if (lastKey.match(/^[0-9]$/)) {\n hotkey.code = `Digit${lastKey}`;\n } else if (lastKey.match(/^[a-zA-Z]$/)) {\n hotkey.code = `Key${lastKey.toUpperCase()}`;\n } else {\n hotkey.key = lastKey.toLowerCase();\n }\n this.hotkeys.push(hotkey);\n title = title.concat(` (${modifierexplanation.join(\"+\")})`);\n }\n\n this.buttons[commandName] = document.createElement(\"div\");\n this.buttons[commandName].className = \"TMCommandButton TMCommandButton_Disabled\";\n this.buttons[commandName].title = title;\n this.buttons[commandName].innerHTML = this.commands[commandName].innerHTML || \"?\";\n\n this.buttons[commandName].addEventListener(\"mousedown\", (e) =>\n this.handleClick(commandName, e)\n );\n this.e.appendChild(this.buttons[commandName]);\n }\n }\n parentElement.appendChild(this.e);\n }\n\n private handleClick(commandName: string, event: Event): void {\n if (!this.editor) return;\n event.preventDefault();\n\n // Focus the editor if it's not already focused\n if (this.editor.e) {\n const editorHadFocus = this.editor.e.contains(document.activeElement);\n this.editor.e.focus();\n // Only restore the last selection if the editor was not focused before\n if (!editorHadFocus) {\n this.editor.restoreLastSelection();\n }\n }\n\n if (typeof this.commands[commandName].action === \"string\") {\n if (this.state[commandName] === false)\n (this.editor as any).setCommandState(commandName, true);\n else (this.editor as any).setCommandState(commandName, false);\n } else if (typeof this.commands[commandName].action === \"function\") {\n (this.commands[commandName].action as CommandAction)(this.editor);\n }\n }\n\n public setEditor(editor: Editor): void {\n this.editor = editor;\n editor.addEventListener(\"selection\", (e) => this.handleSelection(e));\n }\n\n private handleSelection(event: SelectionEvent): void {\n if (event.commandState) {\n for (let command in this.commands) {\n if (event.commandState[command] === undefined) {\n if (this.commands[command].enabled) {\n this.state[command] = this.commands[command].enabled!(\n this.editor!,\n event.focus,\n event.anchor\n );\n } else {\n this.state[command] = event.focus ? false : null;\n }\n } else {\n this.state[command] = event.commandState[command];\n }\n\n if (this.state[command] === true) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Active\";\n } else if (this.state[command] === false) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Inactive\";\n } else {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Disabled\";\n }\n }\n }\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n // Only handle keyboard shortcuts if this editor is currently focused\n if (!this.editor || !this.editor.e) return;\n if (!this.editor.e.contains(document.activeElement)) return;\n\n outer: for (let hotkey of this.hotkeys) {\n if (\n (hotkey.key && event.key.toLowerCase() === hotkey.key) ||\n (hotkey.code && event.code === hotkey.code)\n ) {\n for (let modifier of hotkey.modifiers) {\n if (!(event as any)[modifier]) continue outer;\n }\n this.handleClick(hotkey.command, event);\n return;\n }\n }\n }\n}\n\nexport default CommandBar;","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-function-prototype-bind, es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar call = require('../internals/function-call');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegExp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) !== 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () {\n execCalled = true;\n return null;\n };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n FORCED\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: call(nativeRegExpMethod, regexp, str, arg2) };\n }\n return { done: true, value: call(nativeMethod, str, regexp, arg2) };\n }\n return { done: false };\n });\n\n defineBuiltIn(String.prototype, KEY, methods[0]);\n defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]);\n }\n\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n// eslint-disable-next-line redos/no-vulnerable -- safe\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace(replacement, symbols, function (match, ch) {\n var capture;\n switch (charAt(ch, 0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return stringSlice(str, 0, position);\n case \"'\": return stringSlice(str, tailPos);\n case '<':\n capture = namedCaptures[stringSlice(ch, 1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar regexpExec = require('../internals/regexp-exec');\n\nvar $TypeError = TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (isCallable(exec)) {\n var result = call(exec, R, S);\n if (result !== null) anObject(result);\n return result;\n }\n if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n throw new $TypeError('RegExp#exec called on incompatible receiver');\n};\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getMethod = require('../internals/get-method');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = isObject(searchValue) ? getMethod(searchValue, REPLACE) : undefined;\n return replacer\n ? call(replacer, searchValue, O, replaceValue)\n : call(nativeReplace, toString(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (string, replaceValue) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (\n typeof replaceValue == 'string' &&\n stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n stringIndexOf(replaceValue, '$<') === -1\n ) {\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n if (res.done) return res.value;\n }\n\n var functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n\n var global = rx.global;\n var fullUnicode;\n if (global) {\n fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n\n var results = [];\n var result;\n while (true) {\n result = regExpExec(rx, S);\n if (result === null) break;\n\n push(results, result);\n if (!global) break;\n\n var matchStr = toString(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = toString(result[0]);\n var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n var captures = [];\n var replacement;\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = concat([matched], captures, position, S);\n if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n replacement = toString(apply(replaceValue, undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n\n return accumulatedResult + stringSlice(S, nextSourcePosition);\n }\n ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","'use strict';\n// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar ltrim = RegExp('^[' + whitespaces + ']+');\nvar rtrim = RegExp('(^|[^' + whitespaces + '])[' + whitespaces + ']+$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '$1');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","'use strict';\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar hasOwn = require('../internals/has-own-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (R) {\n var flags = R.flags;\n return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R)\n ? call(regExpFlags, R) : flags;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (Target, Source, key) {\n key in Target || defineProperty(Target, key, {\n configurable: true,\n get: function () { return Source[key]; },\n set: function (it) { Source[key] = it; }\n });\n};\n","'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineBuiltInAccessor(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar globalThis = require('../internals/global-this');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar proxyAccessor = require('../internals/proxy-accessor');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = globalThis.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\nvar SyntaxError = globalThis.SyntaxError;\nvar exec = uncurryThis(RegExpPrototype.exec);\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n// TODO: Use only proper RegExpIdentifierName\nvar IS_NCG = /^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar MISSED_STICKY = stickyHelpers.MISSED_STICKY;\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar BASE_FORCED = DESCRIPTORS &&\n (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n // eslint-disable-next-line sonarjs/inconsistent-function-call -- required for testing\n return NativeRegExp(re1) !== re1 || NativeRegExp(re2) === re2 || String(NativeRegExp(re1, 'i')) !== '/a/i';\n }));\n\nvar handleDotAll = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var brackets = false;\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n result += chr + charAt(string, ++index);\n continue;\n }\n if (!brackets && chr === '.') {\n result += '[\\\\s\\\\S]';\n } else {\n if (chr === '[') {\n brackets = true;\n } else if (chr === ']') {\n brackets = false;\n } result += chr;\n }\n } return result;\n};\n\nvar handleNCG = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var named = [];\n var names = create(null);\n var brackets = false;\n var ncg = false;\n var groupid = 0;\n var groupname = '';\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n chr += charAt(string, ++index);\n } else if (chr === ']') {\n brackets = false;\n } else if (!brackets) switch (true) {\n case chr === '[':\n brackets = true;\n break;\n case chr === '(':\n result += chr;\n // ignore non-capturing groups\n if (stringSlice(string, index + 1, index + 3) === '?:') {\n continue;\n }\n if (exec(IS_NCG, stringSlice(string, index + 1))) {\n index += 2;\n ncg = true;\n }\n groupid++;\n continue;\n case chr === '>' && ncg:\n if (groupname === '' || hasOwn(names, groupname)) {\n throw new SyntaxError('Invalid capture group name');\n }\n names[groupname] = true;\n named[named.length] = [groupname, groupid];\n ncg = false;\n groupname = '';\n continue;\n }\n if (ncg) groupname += chr;\n else result += chr;\n } return [result, named];\n};\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (isForced('RegExp', BASE_FORCED)) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = isPrototypeOf(RegExpPrototype, this);\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var groups = [];\n var rawPattern = pattern;\n var rawFlags, dotAll, sticky, handled, result, state;\n\n if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {\n return pattern;\n }\n\n if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) {\n pattern = pattern.source;\n if (flagsAreUndefined) flags = getRegExpFlags(rawPattern);\n }\n\n pattern = pattern === undefined ? '' : toString(pattern);\n flags = flags === undefined ? '' : toString(flags);\n rawPattern = pattern;\n\n if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {\n dotAll = !!flags && stringIndexOf(flags, 's') > -1;\n if (dotAll) flags = replace(flags, /s/g, '');\n }\n\n rawFlags = flags;\n\n if (MISSED_STICKY && 'sticky' in re1) {\n sticky = !!flags && stringIndexOf(flags, 'y') > -1;\n if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, '');\n }\n\n if (UNSUPPORTED_NCG) {\n handled = handleNCG(pattern);\n pattern = handled[0];\n groups = handled[1];\n }\n\n result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);\n\n if (dotAll || sticky || groups.length) {\n state = enforceInternalState(result);\n if (dotAll) {\n state.dotAll = true;\n state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);\n }\n if (sticky) state.sticky = true;\n if (groups.length) state.groups = groups;\n }\n\n if (pattern !== rawPattern) try {\n // fails in old engines, but we have no alternatives for unsupported regex syntax\n createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);\n } catch (error) { /* empty */ }\n\n return result;\n };\n\n for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {\n proxyAccessor(RegExpWrapper, NativeRegExp, keys[index++]);\n }\n\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n defineBuiltIn(globalThis, 'RegExp', RegExpWrapper, { constructor: true });\n}\n\n// https://tc39.es/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = globalThis.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n var INDICES_SUPPORT = true;\n try {\n RegExp('.', 'd');\n } catch (error) {\n INDICES_SUPPORT = false;\n }\n\n var O = {};\n // modern V8 bug\n var calls = '';\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n var addGetter = function (key, chr) {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(O, key, { get: function () {\n calls += chr;\n return true;\n } });\n };\n\n var pairs = {\n dotAll: 's',\n global: 'g',\n ignoreCase: 'i',\n multiline: 'm',\n sticky: 'y'\n };\n\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n for (var key in pairs) addGetter(key, pairs[key]);\n\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n","export interface GrammarRule {\n regexp: RegExp;\n replacement: string;\n labelPlaceholder?: number;\n}\n\nexport interface HTMLBlockRule {\n start: RegExp;\n end: RegExp | false;\n paraInterrupt: boolean;\n}\n\nexport interface InlineCommand {\n type: 'inline';\n className: string;\n set: {\n pre: string;\n post: string;\n };\n unset: {\n prePattern: RegExp;\n postPattern: RegExp;\n };\n}\n\nexport interface LineCommand {\n type: 'line';\n className: string;\n set: {\n pattern: RegExp;\n replacement: string;\n };\n unset: {\n pattern: RegExp;\n replacement: string;\n };\n}\n\nexport type Command = InlineCommand | LineCommand;\n\nconst replacements: Record<string, RegExp> = {\n ASCIIPunctuation: /[!\"#$%&'()*+,\\-./:;<=>?@[\\]^_`{|}~\\\\]/, \n NotTriggerChar: /[^`_*[\\]()<>!~]/,\n Scheme: /[A-Za-z][A-Za-z0-9+.-]{1,31}/,\n Email: /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/, // From CommonMark spec\n HTMLOpenTag: /<HTMLTagName(?:HTMLAttribute)*\\s*\\/?>/,\n HTMLCloseTag: /<\\/HTMLTagName\\s*>/,\n HTMLTagName: /[A-Za-z][A-Za-z0-9-]*/, \n HTMLComment: /<!--(?:[^>-]|(?:[^>-](?:[^-]|-[^-])*[^-]))-->/,\n HTMLPI: /<\\?(?:|.|(?:[^?]|\\?[^>])*)\\?>/,\n HTMLDeclaration: /<![A-Z]+\\s[^>]*>/,\n HTMLCDATA: /<!\\[CDATA\\[.*?\\]\\]>/,\n HTMLAttribute: /\\s+[A-Za-z_:][A-Za-z0-9_.:-]*(?:HTMLAttValue)?/,\n HTMLAttValue: /\\s*=\\s*(?:(?:'[^']*')|(?:\"[^\"]*\")|(?:[^\\s\"'=<>`]+))/,\n KnownTag: /address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul/\n};\n\n// From CommonMark.js. \nexport const punctuationLeading = new RegExp(/^(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])/);\n\nexport const punctuationTrailing = new RegExp(/(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])$/);\n\n/**\n * This is CommonMark's block grammar, but we're ignoring nested blocks here. \n */ \nexport const lineGrammar: Record<string, GrammarRule> = { \n TMH1: { \n regexp: /^( {0,3}#\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH1\">$1</span>$$2<span class=\"TMMark TMMark_TMH1\">$3</span>'\n },\n TMH2: { \n regexp: /^( {0,3}##\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH2\">$1</span>$$2<span class=\"TMMark TMMark_TMH2\">$3</span>'\n },\n TMH3: { \n regexp: /^( {0,3}###\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH3\">$1</span>$$2<span class=\"TMMark TMMark_TMH3\">$3</span>'\n },\n TMH4: { \n regexp: /^( {0,3}####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH4\">$1</span>$$2<span class=\"TMMark TMMark_TMH4\">$3</span>'\n },\n TMH5: { \n regexp: /^( {0,3}#####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH5\">$1</span>$$2<span class=\"TMMark TMMark_TMH5\">$3</span>'\n },\n TMH6: { \n regexp: /^( {0,3}######\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH6\">$1</span>$$2<span class=\"TMMark TMMark_TMH6\">$3</span>'\n },\n TMBlockquote: { \n regexp: /^( {0,3}>[ ]?)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMBlockquote\">$1</span>$$2'\n },\n TMCodeFenceBacktickOpen: { \n regexp: /^( {0,3}(?<seq>````*)\\s*)([^`]*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceTildeOpen: { \n regexp: /^( {0,3}(?<seq>~~~~*)\\s*)(.*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceBacktickClose: { \n regexp: /^( {0,3}(?<seq>````*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span>$3'\n },\n TMCodeFenceTildeClose: { \n regexp: /^( {0,3}(?<seq>~~~~*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span>$3'\n },\n TMBlankLine: { \n regexp: /^([ \\t]*)$/, \n replacement: '$0'\n },\n TMSetextH1Marker: { \n regexp: /^ {0,3}=+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMSetextH2Marker: { \n regexp: /^ {0,3}-+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMHR: { \n regexp: /^( {0,3}(\\*[ \\t]*\\*[ \\t]*\\*[ \\t*]*)|(-[ \\t]*-[ \\t]*-[ \\t-]*)|(_[ \\t]*_[ \\t]*_[ \\t_]*))$/, \n replacement: '<span class=\"TMMark TMMark_TMHR\">$0</span>'\n },\n TMUL: { \n regexp: /^( {0,3}[+*-] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMUL\">$1</span>$$2'\n },\n TMOL: { \n regexp: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMOL\">$1</span>$$2'\n },\n // TODO: This is currently preventing sublists (and any content within list items, really) from working\n TMIndentedCode: { \n regexp: /^( {4}|\\t)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMIndentedCode\">$1</span>$2'\n },\n TMLinkReferenceDefinition: {\n // TODO: Link destination can't include unbalanced parantheses, but we just ignore that here \n regexp: /^( {0,3}\\[\\s*)([^\\s\\]](?:[^\\]]|\\\\\\])*?)(\\s*\\]:\\s*)((?:[^\\s<>]+)|(?:<(?:[^<>\\\\]|\\\\.)*>))?(\\s*)((?:\\((?:[^()\\\\]|\\\\.)*\\))|(?:\"(?:[^\"\\\\]|\\\\.)*\")|(?:'(?:[^'\\\\]|\\\\.)*'))?(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$1</span><span class=\"TMLinkLabel TMLinkLabel_Definition\">$2</span><span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$3</span><span class=\"TMLinkDestination\">$4</span>$5<span class=\"TMLinkTitle\">$6</span>$7',\n labelPlaceholder: 2, // this defines which placeholder in the above regex is the link \"label\"\n },\n};\n\n/**\n * HTML blocks have multiple different classes of opener and closer. This array defines all the cases\n */\nexport const htmlBlockGrammar: HTMLBlockRule[] = [\n { start: /^ {0,3}<(?:script|pre|style)(?:\\s|>|$)/i, end: /(?:<\\/script>|<\\/pre>|<\\/style>)/i, paraInterrupt: true },\n { start: /^ {0,3}<!--/, end: /-->/, paraInterrupt: true },\n { start: /^ {0,3}<\\?/, end: /\\?>/, paraInterrupt: true },\n { start: /^ {0,3}<![A-Z]/, end: />/, paraInterrupt : true},\n { start: /^ {0,3}<!\\[CDATA\\[/, end: /\\]\\]>/, paraInterrupt : true},\n { start: /^ {0,3}(?:<|<\\/)(?:KnownTag)(?:\\s|>|\\/>|$)/i, end: false, paraInterrupt: true},\n { start: /^ {0,3}(?:HTMLOpenTag|HTMLCloseTag)\\s*$/, end: false, paraInterrupt: false},\n];\n\n/**\n * Structure of the object:\n * Top level entries are rules, each consisting of a regular expressions (in string format) as well as a replacement.\n * In the regular expressions, replacements from the object 'replacements' will be processed before compiling into the property regexp.\n */\nexport const inlineGrammar: Record<string, GrammarRule> = {\n escape : {\n regexp: /^\\\\(ASCIIPunctuation)/,\n replacement : '<span class=\"TMMark TMMark_TMEscape\">\\\\</span>$1'\n },\n code : {\n regexp: /^(`+)((?:[^`])|(?:[^`].*?[^`]))(\\1)/,\n replacement : '<span class=\"TMMark TMMark_TMCode\">$1</span><code class=\"TMCode\">$2</code><span class=\"TMMark TMMark_TMCode\">$3</span>' \n },\n autolink : {\n regexp: /^<((?:Scheme:[^\\s<>]*)|(?:Email))>/,\n replacement: '<span class=\"TMMark TMMark_TMAutolink\">&lt;</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">&gt;</span>'\n },\n html : {\n regexp: /^((?:HTMLOpenTag)|(?:HTMLCloseTag)|(?:HTMLComment)|(?:HTMLPI)|(?:HTMLDeclaration)|(?:HTMLCDATA))/,\n replacement: '<span class=\"TMHTML\">$1</span>',\n },\n linkOpen : {\n regexp: /^\\[/,\n replacement: ''\n },\n imageOpen : {\n regexp: /^!\\[/,\n replacement : ''\n },\n linkLabel : {\n regexp: /^(\\[\\s*)([^\\]]*?)(\\s*\\])/,\n replacement: '',\n labelPlaceholder: 2\n },\n default : {\n regexp: /^(.|(?:NotTriggerChar+))/,\n replacement: '$1'\n }\n};\n\n// Process replacements in regexps\nconst replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n\n// Inline\nconst inlineRules = [...Object.keys(inlineGrammar)];\nfor (let rule of inlineRules) {\n let re = inlineGrammar[rule].regexp.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n inlineGrammar[rule].regexp = new RegExp(re, inlineGrammar[rule].regexp.flags);\n}\n\n// HTML Block (only opening rule is processed currently)\nfor (let rule of htmlBlockGrammar) {\n let re = rule.start.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n rule.start = new RegExp(re, rule.start.flags);\n}\n\n/**\n * Creates a merged inline grammar by combining the default inline grammar with custom rules.\n * Custom rules are processed and their regexp patterns are expanded with replacements.\n * @param customRules - Object containing custom inline grammar rules\n * @returns Merged inline grammar object\n */\nexport function createMergedInlineGrammar(customRules: Record<string, GrammarRule> = {}): Record<string, GrammarRule> {\n const merged = { ...inlineGrammar };\n \n // Process custom rules\n for (const [ruleName, rule] of Object.entries(customRules)) {\n // Copy the rule to avoid modifying the original\n const processedRule = { ...rule };\n \n // Process replacements in the regexp\n let regexpSource = rule.regexp.source;\n const replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n \n // Replace while there is something to replace\n while (regexpSource.match(replacementRegexp)) {\n regexpSource = regexpSource.replace(replacementRegexp, (match) => {\n return replacements[match].source;\n });\n }\n \n processedRule.regexp = new RegExp(regexpSource, rule.regexp.flags);\n merged[ruleName] = processedRule;\n }\n \n return merged;\n}\n\n/**\n * Escapes HTML special characters (<, >, and &) in the string.\n * @param {string} string The raw string to be escaped\n * @returns {string} The string, ready to be used in HTML\n */\nexport function htmlescape(string: string): string {\n return (string ? string : '')\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n\n/**\n * Contains the commands that can be sent to the editor. Contains objects with a name representing the name of the command.\n * Each of the objects contains the following keys:\n * \n * - type: Can be either inline (for inline formatting) or line (for block / line formatting).\n * - className: Used to determine whether the command is active at a given position. \n * For line formatting, this looks at the class of the line element. For inline elements, tries to find an enclosing element with that class.\n * - set / unset: Contain instructions how to set and unset the command. For line type commands, both consist of a pattern and replacement that \n * will be applied to each line (using String.replace). For inline type commands, the set object contains a pre and post string which will\n * be inserted before and after the selection. The unset object contains a prePattern and a postPattern. Both should be regular expressions and \n * they will be applied to the portion of the line before and after the selection (using String.replace, with an empty replacement string).\n */\nexport const commands: Record<string, Command> = {\n // Replacements for unset for inline commands are '' by default\n bold: {\n type: 'inline', \n className: 'TMStrong', \n set: {pre: '**', post: '**'}, \n unset: {prePattern: /(?:\\*\\*|__)$/, postPattern: /^(?:\\*\\*|__)/}\n }, \n italic: {\n type: 'inline', \n className: 'TMEm', \n set: {pre: '*', post: '*'}, \n unset: {prePattern: /(?:\\*|_)$/, postPattern: /^(?:\\*|_)/}\n },\n code: {\n type: 'inline', \n className: 'TMCode', \n set: {pre: '`', post: '`'}, \n unset: {prePattern: /`+$/, postPattern: /^`+/} // FIXME this doesn't ensure balanced backticks right now\n }, \n strikethrough: {\n type: 'inline', \n className: 'TMStrikethrough', \n set: {pre: '~~', post: '~~'}, \n unset: {prePattern:/~~$/, postPattern: /^~~/ }\n },\n h1: {\n type: 'line', \n className: 'TMH1', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '# $2'}, \n unset: {pattern: /^( {0,3}#\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h2: {\n type: 'line', \n className: 'TMH2', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '## $2'}, \n unset: {pattern: /^( {0,3}##\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h3: {\n type: 'line', \n className: 'TMH3', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '### $2'}, \n unset: {pattern: /^( {0,3}###\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h4: {\n type: 'line', \n className: 'TMH4', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '#### $2'}, \n unset: {pattern: /^( {0,3}####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h5: {\n type: 'line', \n className: 'TMH5', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '##### $2'}, \n unset: {pattern: /^( {0,3}#####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h6: {\n type: 'line', \n className: 'TMH6', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '###### $2'}, \n unset: {pattern: /^( {0,3}######\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n ul: {\n type: 'line', \n className: 'TMUL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '- $2'}, \n unset: {pattern: /^( {0,3}[+*-] {1,4})(.*)$/, replacement: '$2'}\n },\n ol: {\n type: 'line', \n className: 'TMOL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '$#. $2'}, \n unset: {pattern: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, replacement: '$2'}\n }, \n blockquote: {\n type: 'line', \n className: 'TMBlockquote', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '> $2'}, \n unset: {pattern: /^( {0,3}>[ ]?)(.*)$/, replacement: '$2'}\n },\n};","import {\n inlineGrammar,\n lineGrammar,\n punctuationLeading,\n punctuationTrailing,\n htmlescape,\n htmlBlockGrammar,\n commands,\n HTMLBlockRule,\n Command,\n GrammarRule,\n createMergedInlineGrammar,\n} from \"./grammar\";\n\nexport interface EditorProps {\n element?: string | HTMLElement;\n editor?: string | HTMLElement;\n content?: string;\n textarea?: string | HTMLTextAreaElement;\n customInlineGrammar?: Record<string, GrammarRule>;\n}\n\nexport interface Position {\n row: number;\n col: number;\n}\n\nexport interface HistoryState {\n content: string;\n selection: Position | null;\n anchor: Position | null;\n}\n\nexport interface ChangeEvent {\n content: string;\n linesDirty: boolean[];\n}\n\nexport interface SelectionEvent {\n focus: Position;\n anchor: Position;\n commandState: Record<string, boolean | null>;\n}\n\nexport interface DropEvent {\n dataTransfer: DataTransfer;\n}\n\ntype EventType = 'change' | 'selection' | 'drop';\ntype EventHandler<T> = (event: T) => void;\n\nexport class Editor {\n public e: HTMLDivElement | null = null;\n public textarea: HTMLTextAreaElement | null = null;\n public lines: string[] = [];\n public lineElements: NodeListOf<ChildNode> | HTMLCollection | ChildNode[] = [];\n public lineTypes: string[] = [];\n public lineCaptures: RegExpExecArray[] = [];\n public lineReplacements: string[] = [];\n public linkLabels: string[] = [];\n public lineDirty: boolean[] = [];\n public lastCommandState: Record<string, boolean | null> | null = null;\n private customInlineGrammar: Record<string, GrammarRule> = {};\n private mergedInlineGrammar: Record<string, GrammarRule> = inlineGrammar;\n private hasFocus: boolean = true;\n private lastSelection: { focus: Position | null; anchor: Position | null } | null = null;\n\n public listeners: {\n change: EventHandler<ChangeEvent>[];\n selection: EventHandler<SelectionEvent>[];\n drop: EventHandler<DropEvent>[];\n } = {\n change: [],\n selection: [],\n drop: [],\n };\n\n private undoStack: HistoryState[] = [];\n private redoStack: HistoryState[] = [];\n private isRestoringHistory: boolean = false;\n private maxHistory: number = 100;\n\n constructor(props: EditorProps = {}) {\n this.e = null;\n this.textarea = null;\n this.lines = [];\n this.lineElements = [] as ChildNode[];\n this.lineTypes = [];\n this.lineCaptures = [];\n this.lineReplacements = [];\n this.linkLabels = [];\n this.lineDirty = [];\n this.lastCommandState = null;\n this.hasFocus = true;\n this.lastSelection = null;\n this.customInlineGrammar = props.customInlineGrammar || {};\n this.mergedInlineGrammar = createMergedInlineGrammar(this.customInlineGrammar);\n\n this.listeners = {\n change: [],\n selection: [],\n drop: [],\n };\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n\n if (typeof props.textarea === 'string') {\n this.textarea = document.getElementById(props.textarea) as HTMLTextAreaElement;\n } else if (props.textarea) {\n this.textarea = props.textarea;\n }\n\n if (this.textarea) {\n if (!element) element = this.textarea;\n }\n\n if (!element) {\n element = document.getElementsByTagName(\"body\")[0];\n }\n if (element && element.tagName === \"TEXTAREA\") {\n this.textarea = element as HTMLTextAreaElement;\n element = this.textarea.parentNode as HTMLElement;\n }\n\n if (this.textarea) {\n this.textarea.style.display = \"none\";\n }\n\n this.undoStack = [];\n this.redoStack = [];\n this.isRestoringHistory = false;\n this.maxHistory = 100;\n\n this.createEditorElement(element, props);\n this.setContent(\n typeof props.content === \"string\"\n ? props.content\n : this.textarea\n ? this.textarea.value\n : \"# Hello TinyMDE!\\nEdit **here**\"\n );\n \n this.e!.addEventListener(\"keydown\", (e) => this.handleUndoRedoKey(e));\n }\n\n get canUndo(): boolean {\n return this.undoStack.length >= 2;\n }\n\n get canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n private pushHistory(): void {\n if (this.isRestoringHistory) return;\n this.pushCurrentState();\n this.redoStack = [];\n }\n\n private pushCurrentState(): void {\n this.undoStack.push({\n content: this.getContent(),\n selection: this.getSelection(),\n anchor: this.getSelection(true),\n });\n if (this.undoStack.length > this.maxHistory) this.undoStack.shift();\n }\n\n public undo(): void {\n if (this.undoStack.length < 2) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const current = this.undoStack.pop()!;\n this.redoStack.push(current);\n const prev = this.undoStack[this.undoStack.length - 1];\n this.setContent(prev.content);\n if (prev.selection) this.setSelection(prev.selection, prev.anchor);\n this.undoStack.pop();\n this.isRestoringHistory = false;\n }\n\n public redo(): void {\n if (!this.redoStack.length) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const next = this.redoStack.pop()!;\n this.setContent(next.content);\n if (next.selection) this.setSelection(next.selection, next.anchor);\n this.isRestoringHistory = false;\n }\n\n private handleUndoRedoKey(e: KeyboardEvent): void {\n const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.platform);\n const ctrl = isMac ? e.metaKey : e.ctrlKey;\n if (ctrl && !e.altKey) {\n if (e.key === \"z\" || e.key === \"Z\") {\n if (e.shiftKey) {\n this.redo();\n } else {\n this.undo();\n }\n e.preventDefault();\n } else if (e.key === \"y\" || e.key === \"Y\") {\n this.redo();\n e.preventDefault();\n }\n }\n }\n\n private createEditorElement(element: HTMLElement, props: EditorProps): void {\n if (props && props.editor !== undefined) {\n if (typeof props.editor === 'string') {\n this.e = document.getElementById(props.editor) as HTMLDivElement;\n } else {\n this.e = props.editor as HTMLDivElement;\n }\n } else {\n this.e = document.createElement(\"div\");\n }\n\n this.e.classList.add(\"TinyMDE\");\n this.e.contentEditable = \"true\";\n this.e.style.whiteSpace = \"pre-wrap\";\n (this.e.style as any).webkitUserModify = \"read-write-plaintext-only\";\n\n if (props.editor === undefined) {\n if (\n this.textarea &&\n this.textarea.parentNode === element &&\n this.textarea.nextSibling\n ) {\n element.insertBefore(this.e, this.textarea.nextSibling);\n } else {\n element.appendChild(this.e);\n }\n }\n\n this.e.addEventListener(\"input\", (e) => this.handleInputEvent(e));\n this.e.addEventListener(\"beforeinput\", (e) => this.handleBeforeInputEvent(e));\n this.e.addEventListener(\"compositionend\", (e) => this.handleInputEvent(e));\n document.addEventListener(\"selectionchange\", (e) => {\n if (this.hasFocus) { this.handleSelectionChangeEvent(e); }\n }\n );\n this.e.addEventListener(\"blur\", () => this.hasFocus = false );\n this.e.addEventListener(\"focus\", () => this.hasFocus = true );\n this.e.addEventListener(\"paste\", (e) => this.handlePaste(e));\n this.e.addEventListener(\"drop\", (e) => this.handleDrop(e));\n this.lineElements = this.e.childNodes;\n }\n\n public setContent(content: string): void {\n while (this.e!.firstChild) {\n this.e!.removeChild(this.e!.firstChild);\n }\n this.lines = content.split(/(?:\\r\\n|\\r|\\n)/);\n this.lineDirty = [];\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let le = document.createElement(\"div\");\n this.e!.appendChild(le);\n this.lineDirty.push(true);\n }\n this.lineTypes = new Array(this.lines.length);\n this.updateFormatting();\n this.fireChange();\n if (!this.isRestoringHistory) this.pushHistory();\n }\n\n public getContent(): string {\n return this.lines.join(\"\\n\");\n }\n\n private updateFormatting(): void {\n this.updateLineTypes();\n this.updateLinkLabels();\n this.applyLineTypes();\n }\n\n private updateLinkLabels(): void {\n this.linkLabels = [];\n for (let l = 0; l < this.lines.length; l++) {\n if (this.lineTypes[l] === \"TMLinkReferenceDefinition\") {\n this.linkLabels.push(\n this.lineCaptures[l][\n lineGrammar.TMLinkReferenceDefinition.labelPlaceholder!\n ]\n );\n }\n }\n }\n\n private replace(replacement: string, capture: RegExpExecArray): string {\n return replacement.replace(/(\\${1,2})([0-9])/g, (str, p1, p2) => {\n if (p1 === \"$\") return htmlescape(capture[parseInt(p2)]);\n else\n return `<span class=\"TMInlineFormatted\">${this.processInlineStyles(\n capture[parseInt(p2)]\n )}</span>`;\n });\n }\n\n private applyLineTypes(): void {\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n if (this.lineDirty[lineNum]) {\n let contentHTML = this.replace(\n this.lineReplacements[lineNum],\n this.lineCaptures[lineNum]\n );\n (this.lineElements[lineNum] as HTMLElement).className = this.lineTypes[lineNum];\n (this.lineElements[lineNum] as HTMLElement).removeAttribute(\"style\");\n (this.lineElements[lineNum] as HTMLElement).innerHTML =\n contentHTML === \"\" ? \"<br />\" : contentHTML;\n }\n (this.lineElements[lineNum] as HTMLElement).dataset.lineNum = lineNum.toString();\n }\n }\n\n private updateLineTypes(): void {\n let codeBlockType: string | false = false;\n let codeBlockSeqLength = 0;\n let htmlBlock: HTMLBlockRule | false = false;\n\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let lineType = \"TMPara\";\n let lineCapture: RegExpExecArray = [this.lines[lineNum]] as RegExpExecArray;\n let lineReplacement = \"$$0\";\n\n // Check ongoing code blocks\n if (codeBlockType === \"TMCodeFenceBacktickOpen\") {\n let capture = lineGrammar.TMCodeFenceBacktickClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceBacktickClose\";\n lineReplacement = lineGrammar.TMCodeFenceBacktickClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeBacktick\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n } else if (codeBlockType === \"TMCodeFenceTildeOpen\") {\n let capture = lineGrammar.TMCodeFenceTildeClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceTildeClose\";\n lineReplacement = lineGrammar.TMCodeFenceTildeClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeTilde\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n }\n\n // Check HTML block types\n if (lineType === \"TMPara\" && htmlBlock === false) {\n for (let htmlBlockType of htmlBlockGrammar) {\n if (this.lines[lineNum].match(htmlBlockType.start)) {\n if (\n htmlBlockType.paraInterrupt ||\n lineNum === 0 ||\n !(\n this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\"\n )\n ) {\n htmlBlock = htmlBlockType;\n break;\n }\n }\n }\n }\n\n if (htmlBlock !== false) {\n lineType = \"TMHTMLBlock\";\n lineReplacement = '<span class=\"TMHTMLContent\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n\n if (htmlBlock.end) {\n if (this.lines[lineNum].match(htmlBlock.end)) {\n htmlBlock = false;\n }\n } else {\n if (\n lineNum === this.lines.length - 1 ||\n this.lines[lineNum + 1].match(lineGrammar.TMBlankLine.regexp)\n ) {\n htmlBlock = false;\n }\n }\n }\n\n // Check all regexps if we haven't applied one of the code block types\n if (lineType === \"TMPara\") {\n for (let type in lineGrammar) {\n if (lineGrammar[type].regexp) {\n let capture = lineGrammar[type].regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = type;\n lineReplacement = lineGrammar[type].replacement;\n lineCapture = capture;\n break;\n }\n }\n }\n }\n\n // If we've opened a code block, remember that\n if (lineType === \"TMCodeFenceBacktickOpen\" || lineType === \"TMCodeFenceTildeOpen\") {\n codeBlockType = lineType;\n codeBlockSeqLength = lineCapture.groups![\"seq\"].length;\n }\n\n // Link reference definition and indented code can't interrupt a paragraph\n if (\n (lineType === \"TMIndentedCode\" || lineType === \"TMLinkReferenceDefinition\") &&\n lineNum > 0 &&\n (this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\")\n ) {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n\n // Setext H2 markers that can also be interpreted as an empty list item should be regarded as such\n if (lineType === \"TMSetextH2Marker\") {\n let capture = lineGrammar.TMUL.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMUL\";\n lineReplacement = lineGrammar.TMUL.replacement;\n lineCapture = capture;\n }\n }\n\n // Setext headings are only valid if preceded by a paragraph\n if (lineType === \"TMSetextH1Marker\" || lineType === \"TMSetextH2Marker\") {\n if (lineNum === 0 || this.lineTypes[lineNum - 1] !== \"TMPara\") {\n let capture = lineGrammar.TMHR.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMHR\";\n lineCapture = capture;\n lineReplacement = lineGrammar.TMHR.replacement;\n } else {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n } else {\n let headingLine = lineNum - 1;\n const headingLineType = lineType === \"TMSetextH1Marker\" ? \"TMSetextH1\" : \"TMSetextH2\";\n do {\n if (this.lineTypes[headingLine] !== headingLineType) {\n this.lineTypes[headingLine] = headingLineType;\n this.lineDirty[headingLine] = true;\n }\n this.lineReplacements[headingLine] = \"$$0\";\n this.lineCaptures[headingLine] = [this.lines[headingLine]] as RegExpExecArray;\n headingLine--;\n } while (headingLine >= 0 && this.lineTypes[headingLine] === \"TMPara\");\n }\n }\n\n if (this.lineTypes[lineNum] !== lineType) {\n this.lineTypes[lineNum] = lineType;\n this.lineDirty[lineNum] = true;\n }\n this.lineReplacements[lineNum] = lineReplacement;\n this.lineCaptures[lineNum] = lineCapture;\n }\n }\n\n public getSelection(getAnchor: boolean = false): Position | null {\n const selection = window.getSelection();\n let startNode = getAnchor ? selection!.anchorNode : selection!.focusNode;\n if (!startNode) return null;\n let offset = getAnchor ? selection!.anchorOffset : selection!.focusOffset;\n if (startNode === this.e) {\n if (offset < this.lines.length)\n return {\n row: offset,\n col: 0,\n };\n return {\n row: offset - 1,\n col: this.lines[offset - 1].length,\n };\n }\n\n let col = this.computeColumn(startNode, offset);\n if (col === null) return null;\n\n let node = startNode;\n while (node.parentElement !== this.e) {\n node = node.parentElement!;\n }\n\n let row = 0;\n // If the node doesn't have a previous sibling, it must be the first line\n if (node.previousSibling) {\n const currentLineNumData = (node as HTMLElement).dataset?.lineNum;\n const previousLineNumData = (node.previousSibling as HTMLElement).dataset?.lineNum;\n\n if (currentLineNumData && previousLineNumData) {\n const currentLineNum = parseInt(currentLineNumData);\n const previousLineNum = parseInt(previousLineNumData);\n if (currentLineNum === previousLineNum + 1) {\n row = currentLineNum;\n } else {\n // If the current line is NOT the previous line + 1, then either \n // the current line got split in two or merged with the previous line\n // Either way, we need to recalculate the row number\n while (node.previousSibling) {\n row++;\n node = node.previousSibling;\n }\n }\n }\n }\n \n return { row: row, col: col };\n }\n\n public setSelection(focus: Position, anchor: Position | null = null): void {\n if (!focus) return;\n\n let { node: focusNode, offset: focusOffset } = this.computeNodeAndOffset(\n focus.row,\n focus.col,\n anchor ? anchor.row === focus.row && anchor.col > focus.col : false\n );\n let anchorNode = null,\n anchorOffset = null;\n if (anchor && (anchor.row !== focus.row || anchor.col !== focus.col)) {\n let { node, offset } = this.computeNodeAndOffset(\n anchor.row,\n anchor.col,\n focus.row === anchor.row && focus.col > anchor.col\n );\n anchorNode = node;\n anchorOffset = offset;\n }\n\n let windowSelection = window.getSelection();\n windowSelection!.setBaseAndExtent(\n focusNode,\n focusOffset,\n anchorNode || focusNode,\n anchorNode ? anchorOffset! : focusOffset\n );\n }\n\n public restoreLastSelection(): boolean {\n if (this.lastSelection && this.lastSelection.focus) {\n this.setSelection(this.lastSelection.focus, this.lastSelection.anchor);\n return true;\n }\n return false;\n }\n\n public paste(text: string, anchor: Position | null = null, focus: Position | null = null): void {\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) focus = this.getSelection(false);\n let beginning: Position, end: Position;\n if (!focus) {\n focus = {\n row: this.lines.length - 1,\n col: this.lines[this.lines.length - 1].length,\n };\n }\n if (!anchor) {\n anchor = focus;\n }\n if (\n anchor.row < focus.row ||\n (anchor.row === focus.row && anchor.col <= focus.col)\n ) {\n beginning = anchor;\n end = focus;\n } else {\n beginning = focus;\n end = anchor;\n }\n let insertedLines = text.split(/(?:\\r\\n|\\r|\\n)/);\n let lineBefore = this.lines[beginning.row].substr(0, beginning.col);\n let lineEnd = this.lines[end.row].substr(end.col);\n insertedLines[0] = lineBefore.concat(insertedLines[0]);\n let endColPos = insertedLines[insertedLines.length - 1].length;\n insertedLines[insertedLines.length - 1] = insertedLines[insertedLines.length - 1].concat(lineEnd);\n this.spliceLines(beginning.row, 1 + end.row - beginning.row, insertedLines);\n focus.row = beginning.row + insertedLines.length - 1;\n focus.col = endColPos;\n this.updateFormatting();\n this.setSelection(focus);\n this.fireChange();\n }\n\n public wrapSelection(pre: string, post: string, focus: Position | null = null, anchor: Position | null = null): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus || !anchor || focus.row !== anchor.row) return;\n this.lineDirty[focus.row] = true;\n\n const startCol = focus.col < anchor.col ? focus.col : anchor.col;\n const endCol = focus.col < anchor.col ? anchor.col : focus.col;\n const left = this.lines[focus.row].substr(0, startCol).concat(pre);\n const mid = endCol === startCol ? \"\" : this.lines[focus.row].substr(startCol, endCol - startCol);\n const right = post.concat(this.lines[focus.row].substr(endCol));\n this.lines[focus.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus.col = anchor.col + mid.length;\n\n this.updateFormatting();\n this.setSelection(focus, anchor);\n }\n\n public addEventListener<T extends EventType>(\n type: T,\n listener: T extends 'change' ? EventHandler<ChangeEvent> :\n T extends 'selection' ? EventHandler<SelectionEvent> :\n T extends 'drop' ? EventHandler<DropEvent> : never\n ): void {\n if (type.match(/^(?:change|input)$/i)) {\n this.listeners.change.push(listener as EventHandler<ChangeEvent>);\n }\n if (type.match(/^(?:selection|selectionchange)$/i)) {\n this.listeners.selection.push(listener as EventHandler<SelectionEvent>);\n }\n if (type.match(/^(?:drop)$/i)) {\n this.listeners.drop.push(listener as EventHandler<DropEvent>);\n }\n }\n\n private fireChange(): void {\n if (!this.textarea && !this.listeners.change.length) return;\n const content = this.getContent();\n if (this.textarea) this.textarea.value = content;\n for (let listener of this.listeners.change) {\n listener({\n content: content,\n linesDirty: [...this.lineDirty],\n });\n }\n }\n\n /**\n * beforeinput handler, exclusively to handle insertParagraph and\n * insertLineBreak events. These used to be handled in the input event,\n * but that caused issues with Firefox where the input event would be\n * sometimes not be fired for these input types.\n * @param event The input event\n * @returns nothing\n */\n private handleBeforeInputEvent(event: Event): void {\n const beforeInputEvent = event as InputEvent;\n if (\n beforeInputEvent.inputType !== \"insertParagraph\" &&\n beforeInputEvent.inputType !== \"insertLineBreak\"\n ) return;\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n this.clearDirtyFlag();\n\n const focus = this.getSelection();\n const anchor = this.getSelection(true);\n\n if (!focus || !anchor) return;\n \n // If focus and anchor are in different lines, simply remove everything \n // after the beginning of the selection and before the end of the selection\n // and remove any lines in between\n if (focus.row !== anchor.row) {\n const beginning = focus.row < anchor.row ? focus : anchor;\n const end = focus.row < anchor.row ? anchor : focus;\n this.lines[beginning.row] = this.lines[beginning.row].substring(0, beginning.col);\n this.lines[end.row] = this.lines[end.row].substring(end.col);\n this.spliceLines(beginning.row + 1, end.row - beginning.row - 1);\n focus.row = beginning.row + 1;\n focus.col = 0;\n } else {\n let continuableType: string | false = false;\n switch (this.lineTypes[focus.row]) {\n case \"TMUL\":\n continuableType = \"TMUL\";\n break;\n case \"TMOL\":\n continuableType = \"TMOL\";\n break;\n case \"TMIndentedCode\":\n continuableType = \"TMIndentedCode\";\n break;\n }\n \n const lineBeforeBreak = this.lines[focus.row].substring(0, focus.col <= anchor.col ? focus.col : anchor.col);\n const lineAfterBreak = this.lines[focus.row].substring(focus.col <= anchor.col ? anchor.col : focus.col);\n this.spliceLines(focus.row, 1, [lineBeforeBreak, lineAfterBreak]);\n\n focus.row += 1;\n focus.col = 0;\n\n if (continuableType) {\n let capture = lineGrammar[continuableType].regexp.exec(this.lines[focus.row - 1]);\n if (capture) {\n if (capture[2]) {\n if (continuableType === \"TMOL\") {\n capture[1] = capture[1].replace(/\\d{1,9}/, (result) => {\n return (parseInt(result) + 1).toString();\n });\n }\n this.lines[focus.row] = `${capture[1]}${this.lines[focus.row]}`;\n this.lineDirty[focus.row] = true;\n focus.col = capture[1].length;\n } else {\n this.lines[focus.row - 1] = \"\";\n this.lineDirty[focus.row - 1] = true;\n }\n }\n }\n }\n this.updateFormatting();\n this.setSelection(focus);\n\n // Scroll the element containing the selection into view\n if (focus && focus.row < this.lineElements.length) {\n (this.lineElements[focus.row] as HTMLElement).scrollIntoView({\n block: 'nearest',\n inline: 'nearest'\n });\n }\n\n this.fireChange();\n }\n\n private handleInputEvent(event: Event): void {\n const inputEvent = event as InputEvent;\n if (inputEvent.inputType === \"insertCompositionText\") return;\n if (!this.isRestoringHistory) this.pushHistory();\n\n let focus = this.getSelection();\n\n if ((inputEvent.inputType === \"insertParagraph\" || inputEvent.inputType === \"insertLineBreak\") && focus) {\n // This should never happen since these are handled by the beforeinput handler\n return;\n } else {\n if (!this.e!.firstChild) {\n this.e!.innerHTML = '<div class=\"TMBlankLine\"><br></div>';\n } else {\n this.fixNodeHierarchy();\n }\n this.updateLineContentsAndFormatting();\n }\n if (focus) {\n this.setSelection(focus);\n }\n\n this.fireChange();\n }\n\n private handleSelectionChangeEvent(_e: Event): void {\n this.fireSelection();\n }\n\n private handlePaste(event: ClipboardEvent): void {\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n\n let text = (event as any).clipboardData.getData(\"text/plain\");\n this.paste(text);\n }\n\n private handleDrop(event: DragEvent): void {\n event.preventDefault();\n this.fireDrop(event.dataTransfer!);\n }\n\n private processInlineStyles(originalString: string): string {\n let processed = \"\";\n let stack: Array<{delimiter: string, delimString: string, count: number, output: string}> = [];\n let offset = 0;\n let string = originalString;\n\n outer: while (string) {\n // Process simple rules (non-delimiter)\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n if (this.mergedInlineGrammar[rule]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n \n // Process custom inline grammar rules\n for (let rule in this.customInlineGrammar) {\n if (rule !== \"escape\" && rule !== \"code\" && rule !== \"autolink\" && rule !== \"html\" && rule !== \"linkOpen\" && rule !== \"imageOpen\" && rule !== \"linkLabel\" && rule !== \"default\") {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n\n // Check for links / images\n let potentialLink = string.match(this.mergedInlineGrammar.linkOpen.regexp);\n let potentialImage = string.match(this.mergedInlineGrammar.imageOpen.regexp);\n if (potentialImage || potentialLink) {\n let result = this.parseLinkOrImage(string, !!potentialImage);\n if (result) {\n processed = `${processed}${result.output}`;\n string = string.substr(result.charCount);\n offset += result.charCount;\n continue outer;\n }\n }\n\n // Check for em / strong delimiters\n let cap = /(^\\*+)|(^_+)/.exec(string);\n if (cap) {\n let delimCount = cap[0].length;\n const delimString = cap[0];\n const currentDelimiter = cap[0][0];\n\n string = string.substr(cap[0].length);\n\n const preceding = offset > 0 ? originalString.substr(0, offset) : \" \";\n const following = offset + cap[0].length < originalString.length ? string : \" \";\n\n const punctuationFollows = following.match(punctuationLeading);\n const punctuationPrecedes = preceding.match(punctuationTrailing);\n const whitespaceFollows = following.match(/^\\s/);\n const whitespacePrecedes = preceding.match(/\\s$/);\n\n let canOpen = !whitespaceFollows && (!punctuationFollows || !!whitespacePrecedes || !!punctuationPrecedes);\n let canClose = !whitespacePrecedes && (!punctuationPrecedes || !!whitespaceFollows || !!punctuationFollows);\n\n if (currentDelimiter === \"_\" && canOpen && canClose) {\n canOpen = !!punctuationPrecedes;\n canClose = !!punctuationFollows;\n }\n\n if (canClose) {\n let stackPointer = stack.length - 1;\n while (delimCount && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === currentDelimiter) {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n if (delimCount >= 2 && stack[stackPointer].count >= 2) {\n processed = `<span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span><strong class=\"TMStrong\">${processed}</strong><span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span>`;\n delimCount -= 2;\n stack[stackPointer].count -= 2;\n } else {\n processed = `<span class=\"TMMark\">${currentDelimiter}</span><em class=\"TMEm\">${processed}</em><span class=\"TMMark\">${currentDelimiter}</span>`;\n delimCount -= 1;\n stack[stackPointer].count -= 1;\n }\n\n if (stack[stackPointer].count === 0) {\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n stackPointer--;\n }\n } else {\n stackPointer--;\n }\n }\n }\n\n if (delimCount && canOpen) {\n stack.push({\n delimiter: currentDelimiter,\n delimString: delimString,\n count: delimCount,\n output: processed,\n });\n processed = \"\";\n delimCount = 0;\n }\n\n if (delimCount) {\n processed = `${processed}${delimString.substr(0, delimCount)}`;\n }\n\n offset += cap[0].length;\n continue outer;\n }\n\n // Check for strikethrough delimiter\n cap = /^~~/.exec(string);\n if (cap) {\n let consumed = false;\n let stackPointer = stack.length - 1;\n while (!consumed && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === \"~\") {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n processed = `<span class=\"TMMark\">~~</span><del class=\"TMStrikethrough\">${processed}</del><span class=\"TMMark\">~~</span>`;\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n consumed = true;\n } else {\n stackPointer--;\n }\n }\n\n if (!consumed) {\n stack.push({\n delimiter: \"~\",\n delimString: \"~~\",\n count: 2,\n output: processed,\n });\n processed = \"\";\n }\n\n offset += cap[0].length;\n string = string.substr(cap[0].length);\n continue outer;\n }\n\n // Process 'default' rule\n cap = this.mergedInlineGrammar.default.regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar.default.replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n throw \"Infinite loop!\";\n }\n\n while (stack.length) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n return processed;\n }\n\n private computeColumn(startNode: Node, offset: number): number | null {\n let node = startNode;\n let col: number;\n while (node && node.parentNode !== this.e) {\n node = node.parentNode!;\n }\n if (node === null) return null;\n\n if (startNode.nodeType === Node.TEXT_NODE || offset === 0) {\n col = offset;\n node = startNode;\n } else if (offset > 0) {\n node = startNode.childNodes[offset - 1];\n col = node.textContent!.length;\n } else {\n col = 0;\n node = startNode;\n }\n while (node.parentNode !== this.e) {\n if (node.previousSibling) {\n node = node.previousSibling;\n col += node.textContent!.length;\n } else {\n node = node.parentNode as unknown as ChildNode;\n }\n }\n return col;\n }\n\n private computeNodeAndOffset(row: number, col: number, bindRight: boolean = false): {node: Node, offset: number} {\n if (row >= this.lineElements.length) {\n row = this.lineElements.length - 1;\n col = this.lines[row].length;\n }\n if (col > this.lines[row].length) {\n col = this.lines[row].length;\n }\n const parentNode = this.lineElements[row] as HTMLElement;\n let node = parentNode.firstChild;\n\n let childrenComplete = false;\n let rv = {\n node: parentNode.firstChild ? parentNode.firstChild : parentNode,\n offset: 0,\n };\n\n while (node !== parentNode) {\n if (!childrenComplete && node!.nodeType === Node.TEXT_NODE) {\n if (node!.nodeValue!.length >= col) {\n if (bindRight && node!.nodeValue!.length === col) {\n rv = { node: node!, offset: col };\n col = 0;\n } else {\n return { node: node!, offset: col };\n }\n } else {\n col -= node!.nodeValue!.length;\n }\n }\n if (!childrenComplete && node!.firstChild) {\n node = node!.firstChild;\n } else if (node!.nextSibling) {\n childrenComplete = false;\n node = node!.nextSibling;\n } else {\n childrenComplete = true;\n node = node!.parentNode as unknown as ChildNode;\n }\n }\n\n return rv;\n }\n\n private updateLineContentsAndFormatting(): void {\n this.clearDirtyFlag();\n this.updateLineContents();\n this.updateFormatting();\n }\n\n private clearDirtyFlag(): void {\n this.lineDirty = new Array(this.lines.length);\n for (let i = 0; i < this.lineDirty.length; i++) {\n this.lineDirty[i] = false;\n }\n }\n\n private updateLineContents(): void {\n let lineDelta = this.e!.childElementCount - this.lines.length;\n if (lineDelta) {\n let firstChangedLine = 0;\n while (\n firstChangedLine <= this.lines.length &&\n firstChangedLine <= this.lineElements.length &&\n this.lineElements[firstChangedLine] &&\n this.lines[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).textContent &&\n this.lineTypes[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).className\n ) {\n firstChangedLine++;\n }\n\n let lastChangedLine = -1;\n while (\n -lastChangedLine < this.lines.length &&\n -lastChangedLine < this.lineElements.length &&\n this.lines[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).textContent &&\n this.lineTypes[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).className\n ) {\n lastChangedLine--;\n }\n\n let linesToDelete = this.lines.length + lastChangedLine + 1 - firstChangedLine;\n if (linesToDelete < -lineDelta) linesToDelete = -lineDelta;\n if (linesToDelete < 0) linesToDelete = 0;\n\n let linesToAdd = [];\n for (let l = 0; l < linesToDelete + lineDelta; l++) {\n linesToAdd.push((this.lineElements[firstChangedLine + l] as HTMLElement).textContent || \"\");\n }\n this.spliceLines(firstChangedLine, linesToDelete, linesToAdd, false);\n } else {\n for (let line = 0; line < this.lineElements.length; line++) {\n let e = this.lineElements[line] as HTMLElement;\n let ct = e.textContent || \"\";\n if (this.lines[line] !== ct || this.lineTypes[line] !== e.className) {\n this.lines[line] = ct;\n this.lineTypes[line] = e.className;\n this.lineDirty[line] = true;\n }\n }\n }\n }\n\n private spliceLines(\n startLine: number,\n linesToDelete: number = 0,\n linesToInsert: string[] = [],\n adjustLineElements: boolean = true\n ): void {\n if (adjustLineElements) {\n for (let i = 0; i < linesToDelete; i++) {\n this.e!.removeChild(this.e!.childNodes[startLine]);\n }\n }\n\n let insertedBlank = [];\n let insertedDirty = [];\n\n for (let i = 0; i < linesToInsert.length; i++) {\n insertedBlank.push(\"\");\n insertedDirty.push(true);\n if (adjustLineElements) {\n if (this.e!.childNodes[startLine])\n this.e!.insertBefore(document.createElement(\"div\"), this.e!.childNodes[startLine]);\n else this.e!.appendChild(document.createElement(\"div\"));\n }\n }\n\n this.lines.splice(startLine, linesToDelete, ...linesToInsert);\n this.lineTypes.splice(startLine, linesToDelete, ...insertedBlank);\n this.lineDirty.splice(startLine, linesToDelete, ...insertedDirty);\n }\n\n private fixNodeHierarchy(): void {\n const originalChildren = Array.from(this.e!.childNodes);\n\n const replaceChild = (child: Node, ...newChildren: Node[]) => {\n const parent = child.parentElement!;\n const nextSibling = child.nextSibling;\n parent.removeChild(child);\n newChildren.forEach((newChild) =>\n nextSibling ? parent.insertBefore(newChild, nextSibling) : parent.appendChild(newChild)\n );\n };\n\n originalChildren.forEach((child) => {\n if (child.nodeType !== Node.ELEMENT_NODE || (child as HTMLElement).tagName !== \"DIV\") {\n const divWrapper = document.createElement(\"div\");\n replaceChild(child, divWrapper);\n divWrapper.appendChild(child);\n } else if (child.childNodes.length === 0) {\n child.appendChild(document.createElement(\"br\"));\n } else {\n const grandChildren = Array.from(child.childNodes);\n if (\n grandChildren.some(\n (grandChild) =>\n grandChild.nodeType === Node.ELEMENT_NODE && (grandChild as HTMLElement).tagName === \"DIV\"\n )\n ) {\n return replaceChild(child, ...grandChildren);\n }\n }\n });\n }\n\n private parseLinkOrImage(originalString: string, isImage: boolean): {output: string, charCount: number} | false {\n // Skip the opening bracket\n let textOffset = isImage ? 2 : 1;\n let opener = originalString.substr(0, textOffset);\n let type = isImage ? \"TMImage\" : \"TMLink\";\n let currentOffset = textOffset;\n\n let bracketLevel = 1;\n let linkText: string | false = false;\n let linkRef: string | false = false;\n let linkLabel: string[] = [];\n let linkDetails: string[] = [];\n\n textOuter: while (\n currentOffset < originalString.length &&\n linkText === false\n ) {\n let string = originalString.substr(currentOffset);\n\n // Capture any escapes and code blocks at current position\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n continue textOuter;\n }\n }\n\n // Check for image\n if (string.match(this.mergedInlineGrammar.imageOpen.regexp)) {\n bracketLevel++;\n currentOffset += 2;\n continue textOuter;\n }\n\n // Check for link\n if (string.match(this.mergedInlineGrammar.linkOpen.regexp)) {\n bracketLevel++;\n if (!isImage) {\n if (this.parseLinkOrImage(string, false)) {\n return false;\n }\n }\n currentOffset += 1;\n continue textOuter;\n }\n\n // Check for closing bracket\n if (string.match(/^\\]/)) {\n bracketLevel--;\n if (bracketLevel === 0) {\n linkText = originalString.substr(textOffset, currentOffset - textOffset);\n currentOffset++;\n continue textOuter;\n }\n }\n\n // Nothing matches, proceed to next char\n currentOffset++;\n }\n\n // Did we find a link text?\n if (linkText === false) return false;\n\n // Check what type of link this is\n let nextChar = currentOffset < originalString.length ? originalString.substr(currentOffset, 1) : \"\";\n\n // REFERENCE LINKS\n if (nextChar === \"[\") {\n let string = originalString.substr(currentOffset);\n let cap = this.mergedInlineGrammar.linkLabel.regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n linkLabel.push(cap[1], cap[2], cap[3]);\n if (cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!]) {\n linkRef = cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!];\n } else {\n linkRef = linkText.trim();\n }\n } else {\n return false;\n }\n } else if (nextChar !== \"(\") {\n // Shortcut ref link\n linkRef = linkText.trim();\n } else {\n // INLINE LINKS\n currentOffset++;\n let parenthesisLevel = 1;\n\n inlineOuter: while (currentOffset < originalString.length && parenthesisLevel > 0) {\n let string = originalString.substr(currentOffset);\n\n // Process whitespace\n let cap = /^\\s+/.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(cap[0]);\n break;\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n if (linkDetails[0].match(/</)) {\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n } else {\n if (parenthesisLevel !== 1) return false;\n linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n }\n break;\n case 3:\n linkDetails.push(cap[0]);\n break;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n case 7:\n linkDetails[6] = linkDetails[6].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process backslash escapes\n cap = this.mergedInlineGrammar.escape.regexp.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process opening angle bracket\n if (linkDetails.length < 2 && string.match(/^</)) {\n if (linkDetails.length === 0) linkDetails.push(\"\");\n linkDetails[0] = linkDetails[0].concat(\"<\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing angle bracket\n if ((linkDetails.length === 1 || linkDetails.length === 2) && string.match(/^>/)) {\n if (linkDetails.length === 1) linkDetails.push(\"\");\n linkDetails.push(\">\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process non-parenthesis delimiter for title\n cap = /^[\"']/.exec(string);\n if (cap && (linkDetails.length === 0 || linkDetails.length === 1 || linkDetails.length === 4)) {\n while (linkDetails.length < 4) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n if (cap && (linkDetails.length === 5 || linkDetails.length === 6) && linkDetails[4] === cap[0]) {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process opening parenthesis\n if (string.match(/^\\(/)) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(\"\");\n case 2:\n linkDetails[1] = linkDetails[1].concat(\"(\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel++;\n break;\n case 3:\n linkDetails.push(\"\");\n case 4:\n linkDetails.push(\"(\");\n break;\n case 5:\n linkDetails.push(\"\");\n case 6:\n if (linkDetails[4] === \"(\") return false;\n linkDetails[5] = linkDetails[5].concat(\"(\");\n break;\n default:\n return false;\n }\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing parenthesis\n if (string.match(/^\\)/)) {\n if (linkDetails.length <= 2) {\n while (linkDetails.length < 2) linkDetails.push(\"\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel--;\n if (parenthesisLevel > 0) {\n linkDetails[1] = linkDetails[1].concat(\")\");\n }\n } else if (linkDetails.length === 5 || linkDetails.length === 6) {\n if (linkDetails[4] === \"(\") {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(\")\");\n } else {\n if (linkDetails.length === 5) linkDetails.push(\")\");\n else linkDetails[5] = linkDetails[5].concat(\")\");\n }\n } else {\n parenthesisLevel--;\n }\n\n if (parenthesisLevel === 0) {\n while (linkDetails.length < 7) linkDetails.push(\"\");\n }\n\n currentOffset++;\n continue inlineOuter;\n }\n\n // Any old character\n cap = /^./.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n throw \"Infinite loop\";\n }\n if (parenthesisLevel > 0) return false;\n }\n\n if (linkRef !== false) {\n // Reference link; check that linkRef is valid\n let valid = false;\n for (let label of this.linkLabels) {\n if (label === linkRef) {\n valid = true;\n break;\n }\n }\n let labelClass = valid ? \"TMLinkLabel TMLinkLabel_Valid\" : \"TMLinkLabel TMLinkLabel_Invalid\";\n let output = `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type} ${\n linkLabel.length < 3 || !linkLabel[1] ? labelClass : \"\"\n }\">${this.processInlineStyles(linkText)}</span><span class=\"TMMark TMMark_${type}\">]</span>`;\n\n if (linkLabel.length >= 3) {\n output = output.concat(\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[0]}</span>`,\n `<span class=\"${labelClass}\">${linkLabel[1]}</span>`,\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[2]}</span>`\n );\n }\n return {\n output: output,\n charCount: currentOffset,\n };\n } else if (linkDetails.length > 0) {\n // Inline link\n while (linkDetails.length < 7) {\n linkDetails.push(\"\");\n }\n\n return {\n output: `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type}\">${this.processInlineStyles(\n linkText\n )}</span><span class=\"TMMark TMMark_${type}\">](${\n linkDetails[0]\n }</span><span class=\"${type}Destination\">${\n linkDetails[1]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[2]}${\n linkDetails[3]\n }${linkDetails[4]}</span><span class=\"${type}Title\">${\n linkDetails[5]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[6]})</span>`,\n charCount: currentOffset,\n };\n }\n\n return false;\n }\n\n private computeCommonAncestor(node1: Node | null, node2: Node | null): Node | null {\n if (!node1 || !node2) return null;\n if (node1 === node2) return node1;\n const ancestry = (node: Node) => {\n let ancestry = [];\n while (node) {\n ancestry.unshift(node);\n node = node.parentNode!;\n }\n return ancestry;\n };\n\n const ancestry1 = ancestry(node1);\n const ancestry2 = ancestry(node2);\n\n if (ancestry1[0] !== ancestry2[0]) return null;\n let i;\n for (i = 0; ancestry1[i] === ancestry2[i]; i++);\n return ancestry1[i - 1];\n }\n\n private computeEnclosingMarkupNode(focus: Position, anchor: Position | null, className: string): Node | null {\n let node = null;\n if (!focus) return null;\n if (!anchor) {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode) return null;\n node = sel.focusNode;\n } else {\n if (focus.row !== anchor.row) return null;\n const sel = window.getSelection();\n if (!sel) return null;\n node = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n }\n if (!node) return null;\n while (node !== this.e) {\n if ((node as HTMLElement).className && (node as HTMLElement).className.includes(className)) return node;\n node = node.parentNode!;\n }\n return null;\n }\n\n public getCommandState(focus: Position | null = null, anchor: Position | null = null): Record<string, boolean | null> {\n let commandState: Record<string, boolean | null> = {};\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) {\n for (let cmd in commands) {\n commandState[cmd] = null;\n }\n return commandState;\n }\n if (!anchor) anchor = focus;\n\n let start: Position, end: Position;\n if (anchor.row < focus.row || (anchor.row === focus.row && anchor.col < focus.col)) {\n start = anchor;\n end = focus;\n } else {\n start = focus;\n end = anchor;\n }\n if (end.row > start.row && end.col === 0) {\n end.row--;\n end.col = this.lines[end.row].length;\n }\n\n for (let cmd in commands) {\n if (commands[cmd].type === \"inline\") {\n if (!focus || focus.row !== anchor!.row || !this.isInlineFormattingAllowed()) {\n commandState[cmd] = null;\n } else {\n commandState[cmd] =\n !!this.computeEnclosingMarkupNode(focus, anchor, commands[cmd].className) ||\n (focus.col === anchor!.col &&\n !!this.lines[focus.row].substr(0, focus.col).match(commands[cmd].unset.prePattern) &&\n !!this.lines[focus.row].substr(focus.col).match(commands[cmd].unset.postPattern));\n }\n }\n if (commands[cmd].type === \"line\") {\n if (!focus) {\n commandState[cmd] = null;\n } else {\n let state: boolean | null = this.lineTypes[start.row] === commands[cmd].className;\n for (let line = start.row; line <= end.row; line++) {\n if ((this.lineTypes[line] === commands[cmd].className) !== state) {\n state = null;\n break;\n }\n }\n commandState[cmd] = state;\n }\n }\n }\n return commandState;\n }\n\n public setCommandState(command: string, state: boolean): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (commands[command].type === \"inline\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!anchor) return;\n if (anchor.row !== focus!.row) return;\n if (!this.isInlineFormattingAllowed()) return;\n let markupNode = this.computeEnclosingMarkupNode(focus!, anchor, commands[command].className);\n this.clearDirtyFlag();\n\n if (markupNode) {\n this.lineDirty[focus!.row] = true;\n const startCol = this.computeColumn(markupNode, 0)!;\n const len = markupNode.textContent!.length;\n const left = this.lines[focus!.row]\n .substr(0, startCol)\n .replace(commands[command].unset.prePattern, \"\");\n const mid = this.lines[focus!.row].substr(startCol, len);\n const right = this.lines[focus!.row]\n .substr(startCol + len)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus!.col = anchor.col + len;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else if (\n focus!.col === anchor.col &&\n !!this.lines[focus!.row].substr(0, focus!.col).match(commands[command].unset.prePattern) &&\n !!this.lines[focus!.row].substr(focus!.col).match(commands[command].unset.postPattern)\n ) {\n this.lineDirty[focus!.row] = true;\n const left = this.lines[focus!.row]\n .substr(0, focus!.col)\n .replace(commands[command].unset.prePattern, \"\");\n const right = this.lines[focus!.row]\n .substr(focus!.col)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(right);\n focus!.col = anchor.col = left.length;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else {\n let { startCol, endCol } =\n focus!.col < anchor.col\n ? { startCol: focus!.col, endCol: anchor.col }\n : { startCol: anchor.col, endCol: focus!.col };\n\n let match = this.lines[focus!.row]\n .substr(startCol, endCol - startCol)\n .match(/^(?<leading>\\s*).*\\S(?<trailing>\\s*)$/);\n if (match) {\n startCol += match.groups!.leading.length;\n endCol -= match.groups!.trailing.length;\n }\n\n focus!.col = startCol;\n anchor.col = endCol;\n\n this.wrapSelection(commands[command].set.pre, commands[command].set.post, focus, anchor);\n this.fireChange();\n }\n } else if (commands[command].type === \"line\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!focus) return;\n this.clearDirtyFlag();\n let start = anchor!.row > focus!.row ? focus! : anchor!;\n let end = anchor!.row > focus!.row ? anchor! : focus!;\n if (end.row > start.row && end.col === 0) {\n end.row--;\n }\n\n for (let line = start.row; line <= end.row; line++) {\n if (state && this.lineTypes[line] !== commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].set.pattern,\n commands[command].set.replacement.replace(\"$#\", (line - start.row + 1).toString())\n );\n this.lineDirty[line] = true;\n }\n if (!state && this.lineTypes[line] === commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].unset.pattern,\n commands[command].unset.replacement\n );\n this.lineDirty[line] = true;\n }\n }\n this.updateFormatting();\n this.setSelection(\n { row: end.row, col: this.lines[end.row].length },\n { row: start.row, col: 0 }\n );\n this.fireChange();\n }\n }\n\n public isInlineFormattingAllowed(): boolean {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode || !sel.anchorNode) return false;\n\n if (\n sel.isCollapsed &&\n sel.focusNode.nodeType === 3 &&\n sel.focusOffset === sel.focusNode.nodeValue!.length\n ) {\n let node;\n for (node = sel.focusNode; node && node.nextSibling === null; node = node.parentNode!);\n if (\n node &&\n node.nextSibling &&\n (node.nextSibling as HTMLElement).className &&\n (node.nextSibling as HTMLElement).className.includes(\"TMInlineFormatted\")\n )\n return true;\n }\n\n let ancestor = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n if (!ancestor) return false;\n\n while (ancestor && ancestor !== this.e) {\n if (\n (ancestor as HTMLElement).className &&\n typeof (ancestor as HTMLElement).className.includes === \"function\" &&\n ((ancestor as HTMLElement).className.includes(\"TMInlineFormatted\") ||\n (ancestor as HTMLElement).className.includes(\"TMBlankLine\"))\n )\n return true;\n ancestor = ancestor.parentNode!;\n }\n\n return false;\n }\n\n public toggleCommandState(command: string): void {\n if (!this.lastCommandState) this.lastCommandState = this.getCommandState();\n this.setCommandState(command, !this.lastCommandState[command]);\n }\n\n private fireDrop(dataTransfer: DataTransfer): void {\n for (let listener of this.listeners.drop) {\n listener({ dataTransfer });\n }\n }\n\n private fireSelection(): void {\n let focus = this.getSelection(false);\n let anchor = this.getSelection(true);\n\n // Save the current selection for restoration later\n this.lastSelection = {\n focus: focus,\n anchor: anchor\n };\n\n if (this.listeners.selection && this.listeners.selection.length) {\n let commandState = this.getCommandState(focus, anchor);\n if (this.lastCommandState) {\n Object.assign(this.lastCommandState, commandState);\n } else {\n this.lastCommandState = Object.assign({}, commandState);\n }\n for (let listener of this.listeners.selection) {\n listener({\n focus: focus!,\n anchor: anchor!,\n commandState: this.lastCommandState,\n });\n }\n }\n }\n}\n\nexport default Editor;\n"],"names":["global","this","require$$0","require$$1","require$$2","require$$3","sharedStoreModule","require$$4","require$$5","require$$6","require$$7","makeBuiltIn","makeBuiltInModule","ownKeys","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","svg","blockquote","bold","clear_formatting","code","h1","h2","hr","image","italic","link","ol","redo","strikethrough","ul","undo","isMacLike","test","navigator","platform","DefaultCommands","name","action","innerHTML","title","hotkey","insertLink","editor","isInlineFormattingAllowed","wrapSelection","enabled","insertImage","paste","canUndo","canRedo","CommandBar","constructor","props","e","commands","buttons","state","hotkeys","element","document","getElementById","body","createCommandBarElement","addEventListener","handleKeydown","setEditor","parentElement","createElement","className","command","el","appendChild","commandName","Object","assign","keys","split","modifiers","modifierexplanation","i","length","push","lastKey","match","concat","toUpperCase","key","toLowerCase","join","handleClick","event","preventDefault","editorHadFocus","contains","activeElement","focus","restoreLastSelection","setCommandState","handleSelection","commandState","undefined","anchor","outer","modifier","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","replacements","ASCIIPunctuation","NotTriggerChar","Scheme","Email","HTMLOpenTag","HTMLCloseTag","HTMLTagName","HTMLComment","HTMLPI","HTMLDeclaration","HTMLCDATA","HTMLAttribute","HTMLAttValue","KnownTag","punctuationLeading","RegExp","punctuationTrailing","lineGrammar","TMH1","regexp","replacement","TMH2","TMH3","TMH4","TMH5","TMH6","TMBlockquote","TMCodeFenceBacktickOpen","_wrapRegExp","seq","TMCodeFenceTildeOpen","TMCodeFenceBacktickClose","TMCodeFenceTildeClose","TMBlankLine","TMSetextH1Marker","TMSetextH2Marker","TMHR","TMUL","TMOL","TMIndentedCode","TMLinkReferenceDefinition","labelPlaceholder","htmlBlockGrammar","start","end","paraInterrupt","inlineGrammar","escape","autolink","html","linkOpen","imageOpen","linkLabel","default","replacementRegexp","inlineRules","rule","re","source","replace","string","flags","createMergedInlineGrammar","customRules","arguments","merged","_objectSpread","ruleName","entries","processedRule","regexpSource","htmlescape","type","set","pre","post","unset","prePattern","postPattern","pattern","h3","h4","h5","h6","Editor","textarea","lines","lineElements","lineTypes","lineCaptures","lineReplacements","linkLabels","lineDirty","lastCommandState","customInlineGrammar","mergedInlineGrammar","hasFocus","lastSelection","listeners","change","selection","drop","undoStack","redoStack","isRestoringHistory","maxHistory","getElementsByTagName","tagName","parentNode","style","display","createEditorElement","setContent","content","value","handleUndoRedoKey","pushHistory","pushCurrentState","getContent","getSelection","shift","current","pop","prev","setSelection","next","isMac","ctrl","metaKey","ctrlKey","altKey","shiftKey","classList","add","contentEditable","whiteSpace","webkitUserModify","nextSibling","insertBefore","handleInputEvent","handleBeforeInputEvent","handleSelectionChangeEvent","handlePaste","handleDrop","childNodes","firstChild","removeChild","lineNum","le","Array","updateFormatting","fireChange","updateLineTypes","updateLinkLabels","applyLineTypes","l","capture","str","p1","p2","parseInt","processInlineStyles","contentHTML","removeAttribute","dataset","toString","codeBlockType","codeBlockSeqLength","htmlBlock","lineType","lineCapture","lineReplacement","exec","groups","htmlBlockType","headingLine","headingLineType","getAnchor","window","startNode","anchorNode","focusNode","offset","anchorOffset","focusOffset","row","col","computeColumn","node","previousSibling","currentLineNumData","_a","previousLineNumData","_b","currentLineNum","previousLineNum","computeNodeAndOffset","windowSelection","setBaseAndExtent","text","beginning","insertedLines","lineBefore","substr","lineEnd","endColPos","spliceLines","startCol","endCol","left","mid","right","listener","linesDirty","beforeInputEvent","inputType","clearDirtyFlag","substring","continuableType","lineBeforeBreak","lineAfterBreak","result","scrollIntoView","block","inline","inputEvent","fixNodeHierarchy","updateLineContentsAndFormatting","_e","fireSelection","clipboardData","getData","fireDrop","dataTransfer","originalString","processed","stack","cap","potentialLink","potentialImage","parseLinkOrImage","output","charCount","delimCount","delimString","currentDelimiter","preceding","following","punctuationFollows","punctuationPrecedes","whitespaceFollows","whitespacePrecedes","canOpen","canClose","stackPointer","delimiter","entry","count","consumed","nodeType","Node","TEXT_NODE","textContent","bindRight","childrenComplete","rv","nodeValue","updateLineContents","lineDelta","childElementCount","firstChangedLine","lastChangedLine","linesToDelete","linesToAdd","line","ct","startLine","linesToInsert","adjustLineElements","insertedBlank","insertedDirty","splice","originalChildren","from","replaceChild","child","parent","_len","newChildren","_key","forEach","newChild","ELEMENT_NODE","divWrapper","grandChildren","some","grandChild","isImage","textOffset","opener","currentOffset","bracketLevel","linkText","linkRef","linkDetails","textOuter","nextChar","trim","parenthesisLevel","inlineOuter","valid","label","labelClass","computeCommonAncestor","node1","node2","ancestry","unshift","ancestry1","ancestry2","computeEnclosingMarkupNode","sel","includes","getCommandState","cmd","markupNode","len","leading","trailing","isCollapsed","ancestor","toggleCommandState"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115]}
5753
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtY2FsbGFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1uY2cuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9tLXRva2VuLWxpc3QtcHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsInNyYy9zdmcvc3ZnLnRzIiwic3JjL1RpbnlNREVDb21tYW5kQmFyLnRzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93aGl0ZXNwYWNlcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcmVnZXhwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuY29uc3RydWN0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qcyIsInNyYy9ncmFtbWFyLnRzIiwic3JjL1RpbnlNREUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiZcbiAgIVN5bWJvbC5zaGFtICYmXG4gIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuNDIuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuNDIuMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJ2EnLCAneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnYWJjZCcpICE9PSBudWxsO1xufSk7XG5cbi8vIFVDIEJyb3dzZXIgYnVnXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTAwOFxudmFyIE1JU1NFRF9TVElDS1kgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICEkUmVnRXhwKCdhJywgJ3knKS5zdGlja3k7XG59KTtcblxudmFyIEJST0tFTl9DQVJFVCA9IFVOU1VQUE9SVEVEX1kgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM2ODdcbiAgdmFyIHJlID0gJFJlZ0V4cCgnXnInLCAnZ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ3N0cicpICE9PSBudWxsO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCUk9LRU5fQ0FSRVQ6IEJST0tFTl9DQVJFVCxcbiAgTUlTU0VEX1NUSUNLWTogTUlTU0VEX1NUSUNLWSxcbiAgVU5TVVBQT1JURURfWTogVU5TVVBQT1JURURfWVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWFzc2lnbm1lbnQgLS0gYXZvaWQgbWVtb3J5IGxlYWtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnLicsICdzJykgLT4gLy4vcyBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnLicsICdzJyk7XG4gIHJldHVybiAhKHJlLmRvdEFsbCAmJiByZS50ZXN0KCdcXG4nKSAmJiByZS5mbGFncyA9PT0gJ3MnKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJyg/PGE+YiknLCAnZycpIC0+IC8oPzxhPmIpL2cgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCwgcmVnZXhwL25vLWxhenktZW5kcyAtLSB0ZXN0aW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tdXNlbGVzcy1xdWFudGlmaWVyIC0tIHRlc3RpbmcgKi9cbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5nZXQ7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCcpO1xudmFyIFVOU1VQUE9SVEVEX05DRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnJyk7XG5cbnZhciBuYXRpdmVSZXBsYWNlID0gc2hhcmVkKCduYXRpdmUtc3RyaW5nLXJlcGxhY2UnLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgaW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgY2FsbChuYXRpdmVFeGVjLCByZTEsICdhJyk7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWSB8fCBVTlNVUFBPUlRFRF9ET1RfQUxMIHx8IFVOU1VQUE9SVEVEX05DRztcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHJpbmcpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocmUpO1xuICAgIHZhciBzdHIgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgIHZhciByYXcgPSBzdGF0ZS5yYXc7XG4gICAgdmFyIHJlc3VsdCwgcmVDb3B5LCBsYXN0SW5kZXgsIG1hdGNoLCBpLCBvYmplY3QsIGdyb3VwO1xuXG4gICAgaWYgKHJhdykge1xuICAgICAgcmF3Lmxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgIHJlc3VsdCA9IGNhbGwocGF0Y2hlZEV4ZWMsIHJhdywgc3RyKTtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJhdy5sYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBncm91cHMgPSBzdGF0ZS5ncm91cHM7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IGNhbGwocmVnZXhwRmxhZ3MsIHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gcmVwbGFjZShmbGFncywgJ3knLCAnJyk7XG4gICAgICBpZiAoaW5kZXhPZihmbGFncywgJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gc3RyaW5nU2xpY2Uoc3RyLCByZS5sYXN0SW5kZXgpO1xuICAgICAgLy8gU3VwcG9ydCBhbmNob3JlZCBzdGlja3kgYmVoYXZpb3IuXG4gICAgICBpZiAocmUubGFzdEluZGV4ID4gMCAmJiAoIXJlLm11bHRpbGluZSB8fCByZS5tdWx0aWxpbmUgJiYgY2hhckF0KHN0ciwgcmUubGFzdEluZGV4IC0gMSkgIT09ICdcXG4nKSkge1xuICAgICAgICBzb3VyY2UgPSAnKD86ICcgKyBzb3VyY2UgKyAnKSc7XG4gICAgICAgIHN0ckNvcHkgPSAnICcgKyBzdHJDb3B5O1xuICAgICAgICBjaGFyc0FkZGVkKys7XG4gICAgICB9XG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgc3RyIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeKD86JyArIHNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgIH1cblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IGNhbGwobmF0aXZlRXhlYywgc3RpY2t5ID8gcmVDb3B5IDogcmUsIHN0ckNvcHkpO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmlucHV0ID0gc3RyaW5nU2xpY2UobWF0Y2guaW5wdXQsIGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IHN0cmluZ1NsaWNlKG1hdGNoWzBdLCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2guaW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIHJlLmxhc3RJbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgcmUubGFzdEluZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmUubGFzdEluZGV4ID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24ndCB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBjYWxsKG5hdGl2ZVJlcGxhY2UsIG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2ggJiYgZ3JvdXBzKSB7XG4gICAgICBtYXRjaC5ncm91cHMgPSBvYmplY3QgPSBjcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICBvYmplY3RbZ3JvdXBbMF1dID0gbWF0Y2hbZ3JvdXBbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZXhlY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUuZXhlY1xuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IC8uLy5leGVjICE9PSBleGVjIH0sIHtcbiAgZXhlYzogZXhlY1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGluIG9sZCBXZWJLaXQgdmVyc2lvbnMsIGBlbGVtZW50LmNsYXNzTGlzdGAgaXMgbm90IGFuIGluc3RhbmNlIG9mIGdsb2JhbCBgRE9NVG9rZW5MaXN0YFxudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG52YXIgY2xhc3NMaXN0ID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdzcGFuJykuY2xhc3NMaXN0O1xudmFyIERPTVRva2VuTGlzdFByb3RvdHlwZSA9IGNsYXNzTGlzdCAmJiBjbGFzc0xpc3QuY29uc3RydWN0b3IgJiYgY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBET01Ub2tlbkxpc3RQcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgPyB1bmRlZmluZWQgOiBET01Ub2tlbkxpc3RQcm90b3R5cGU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIFVOU0NPUEFCTEVTID0gd2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmlmIChBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU10gPT09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eShBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gJE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyAkT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzT3duKG9iamVjdCwgSUVfUFJPVE8pKSByZXR1cm4gb2JqZWN0W0lFX1BST1RPXTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBpZiAoaXNDYWxsYWJsZShjb25zdHJ1Y3RvcikgJiYgb2JqZWN0IGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiAkT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIFRBRywgU1RBVElDKSB7XG4gIGlmICh0YXJnZXQgJiYgIVNUQVRJQykgdGFyZ2V0ID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgaWYgKHRhcmdldCAmJiAhaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0LCBFTlVNRVJBQkxFX05FWFQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigrIUVOVU1FUkFCTEVfTkVYVCwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc09iamVjdChhcmd1bWVudCkgfHwgYXJndW1lbnQgPT09IG51bGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc1Bvc3NpYmxlUHJvdG90eXBlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIHJlcXVpcmVPYmplY3RDb2VyY2libGUoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gTztcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlcihPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG5cbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICBkZWZpbmVCdWlsdEluKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSBudWxsO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodGFyZ2V0W2luZGV4XSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgRE9NVG9rZW5MaXN0UHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS10b2tlbi1saXN0LXByb3RvdHlwZScpO1xudmFyIEFycmF5SXRlcmF0b3JNZXRob2RzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9yTWV0aG9kcy52YWx1ZXM7XG5cbnZhciBoYW5kbGVQcm90b3R5cGUgPSBmdW5jdGlvbiAoQ29sbGVjdGlvblByb3RvdHlwZSwgQ09MTEVDVElPTl9OQU1FKSB7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlKSB7XG4gICAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbSVRFUkFUT1JdICE9PSBBcnJheVZhbHVlcykgdHJ5IHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSA9IEFycmF5VmFsdWVzO1xuICAgIH1cbiAgICBzZXRUb1N0cmluZ1RhZyhDb2xsZWN0aW9uUHJvdG90eXBlLCBDT0xMRUNUSU9OX05BTUUsIHRydWUpO1xuICAgIGlmIChET01JdGVyYWJsZXNbQ09MTEVDVElPTl9OQU1FXSkgZm9yICh2YXIgTUVUSE9EX05BTUUgaW4gQXJyYXlJdGVyYXRvck1ldGhvZHMpIHtcbiAgICAgIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICAgICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdICE9PSBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV0pIHRyeSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBNRVRIT0RfTkFNRSwgQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdID0gQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICBoYW5kbGVQcm90b3R5cGUoZ2xvYmFsVGhpc1tDT0xMRUNUSU9OX05BTUVdICYmIGdsb2JhbFRoaXNbQ09MTEVDVElPTl9OQU1FXS5wcm90b3R5cGUsIENPTExFQ1RJT05fTkFNRSk7XG59XG5cbmhhbmRsZVByb3RvdHlwZShET01Ub2tlbkxpc3RQcm90b3R5cGUsICdET01Ub2tlbkxpc3QnKTtcbiIsImNvbnN0IHN2ZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgYmxvY2txdW90ZTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHJlY3Qgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiNVwiIHg9XCIzXCIgeT1cIjRcIiByeT1cIjFcIi8+PHJlY3Qgcnk9XCIxXCIgeT1cIjRcIiB4PVwiMTBcIiBoZWlnaHQ9XCI1XCIgd2lkdGg9XCI1XCIvPjxwYXRoIGQ9XCJNOCA2Ljk5OXYzYzAgMS0xIDMtMSAzcy0uMzMxIDEtMS4zMzEgMWgtMWMtMSAwLS42NjktMS0uNjY5LTFzMS0yIDEtM3YtM3ptNyAwdjNjMCAxLTEgMy0xIDNzLS4zMzEgMS0xLjMzMSAxaC0xYy0xIDAtLjY2OS0xLS42NjktMXMxLTIgMS0zdi0zelwiLz48L3N2Zz5gLFxuICBib2xkOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTQgMmExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoNmM0IDAgNS0yIDUtNCAwLTEuMzIyLS40MzQtMi42MzYtMS44ODUtMy4zODFDMTMuNzcyIDcuODg1IDE0IDYuOTQ1IDE0IDZjMC0yLTEtNC01LTR6bTEgMmg0YzEuNjY4IDAgMi4zMi4zOTMgMi42LjY3Mi4yOC4yNzkuNC42NjIuNCAxLjMyOHMtLjEyIDEuMDU3LS40IDEuMzM4Yy0uMjc1LjI3NC0xLjAxNC42NDYtMi42LjY2Mkg1em01IDZjMS42NjYuMDA1IDIuMzE4LjM4OCAyLjU5Ni42NjYuMjc3LjI3OC40MDQuNjY3LjQwNCAxLjMzNHMtLjEyNyAxLjA2LS40MDQgMS4zMzhjLS4yNzguMjc4LS45My42Ni0yLjU5Ni42NjJsLTQuOTkyLjAwNEw1IDEwelwiLz48L3N2Zz5gLFxuICBjbGVhcl9mb3JtYXR0aW5nOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTExLjAzIDFhMSAxIDAgMDAtLjc0LjNsLTkgOWExIDEgMCAwMDAgMS40bDQgNEExIDEgMCAwMDYgMTZoMmExIDEgMCAwMC43LS4zbDgtOGExIDEgMCAwMDAtMS40bC01LTVhMSAxIDAgMDAtLjY3LS4zek04LjcgNS43bDMuNTggMy42TDcuNiAxNEg2LjRsLTMtMyA1LjMtNS4zelwiLz48cmVjdCByeT1cIi44XCIgcng9XCIuOFwiIHk9XCIxNFwiIHg9XCIxNlwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjJcIi8+PHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHg9XCIxM1wiIHk9XCIxNFwiIHJ4PVwiLjhcIiByeT1cIi44XCIvPjxyZWN0IHJ5PVwiLjhcIiByeD1cIi44XCIgeT1cIjE0XCIgeD1cIjEwXCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMlwiLz48L3N2Zz5gLFxuICBjb2RlOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTEzLjUgMi45OTRhLjUuNSAwIDAwLS41LjUuNS41IDAgMDAwIC4wMzRWNC41M2E1Ljk5MyA1Ljk5MyAwIDAwLTcuNDUxLS40NDVBNiA2IDAgMTAxMi40NSAxMy45YTUuOTkgNS45OSAwIDAwMS4zNDYtMS4zMzQuNS41IDAgMDAuMDk2LS4xMDEuNS41IDAgMDAtLjEyLS42OTguNS41IDAgMDAtLjY5Ny4xMmwtLjAwNC0uMDA1YTUgNSAwIDAxLTEuMTk3IDEuMiA1IDUgMCAxMTEuMjE1LTYuOTY1LjUuNSAwIDAwLjY5Ny4xMi41LjUgMCAwMC4yMTEtLjQ0VjQuNzQ1SDE0VjMuNDkzYS41LjUgMCAwMC0uNS0uNXpcIi8+PC9zdmc+YCxcbiAgaDE6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMyAyczAtMSAxLTFoMWMxIDAgMSAxIDEgMXY2aDZWMnMwLTEgMS0xaDFjMSAwIDEgMSAxIDF2MTRzMCAxLTEgMWgtMWMtMSAwLTEtMS0xLTF2LTZINnY2czAgMS0xIDFINGMtMSAwLTEtMS0xLTF6XCIvPjwvc3ZnPmAsXG4gIGgyOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTQgMnMwLTEgMS0xIDEgMSAxIDF2NmMxLTEgMi0xIDQtMSAzIDAgNCAyIDQgNHY1czAgMS0xIDEtMS0xLTEtMXYtNWMwLTEuMDk0LTEtMi0yLTItMiAwLTMgMC00IDJ2NXMwIDEtMSAxLTEtMS0xLTF6XCIvPjwvc3ZnPmAsXG4gIGhyOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cmVjdCByeT1cIjFcIiB5PVwiOFwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjE4XCIgc3R5bGU9XCJmb250LXZhcmlhdGlvbi1zZXR0aW5nczpub3JtYWw7bWFya2VyOm5vbmVcIi8+PC9zdmc+YCxcbiAgaW1hZ2U6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMSAydjE0aDE2VjJIMXptMiAyaDEydjdsLTMtMy00IDQtMi0yLTMgM1Y0elwiLz48Y2lyY2xlIHI9XCIxLjVcIiBjeT1cIjYuNVwiIGN4PVwiNS41XCIvPjwvc3ZnPmAsXG4gIGl0YWxpYzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk05IDJhMSAxIDAgMDAwIDJMNyAxNGExIDEgMCAxMDAgMmgyYTEgMSAwIDAwMC0ybDItMTBhMSAxIDAgMTAwLTJ6XCIvPjwvc3ZnPmAsXG4gIGxpbms6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNOS4wNyA1LjE4YTMuOSAzLjkgMCAwMC0xLjUyLjQzQzYuMzEgNi4yMiA1LjMgNy4yOSA0LjMgOC4yOWMtMSAxLTIuMDcgMi4wMi0yLjY4IDMuMjYtLjMxLjYyLS41IDEuMzMtLjQxIDIuMDcuMDkuNzUuNDggMS40NyAxLjEgMi4wOS42MS42MSAxLjMzIDEgMi4wOCAxLjEuNzQuMDkgMS40NS0uMSAyLjA3LS40MiAxLjI0LS42MSAyLjI2LTEuNjggMy4yNi0yLjY4LjQ2LS40Ny45NC0uOTQgMS4zOS0xLjQ0bC0uNDMuMjZjLS42OC4zNC0xLjQ5LjU2LTIuMzYuNDYtLjItLjAzLS40LS4wOC0uNi0uMTQtLjc5Ljc2LTEuNTUgMS40NS0yLjE2IDEuNzYtLjM4LjE5LS42Ny4yNC0uOTIuMjEtLjI2LS4wMy0uNTQtLjE0LS45Mi0uNTMtLjM5LS4zOC0uNS0uNjYtLjUzLS45MS0uMDMtLjI2LjAyLS41NS4yMS0uOTMuMzktLjc2IDEuMzItMS43NCAyLjMyLTIuNzQgMS0xIDEuOTgtMS45MyAyLjc0LTIuMzIuMzgtLjE5LjY3LS4yNC45My0uMjEuMjUuMDMuNTMuMTQuOTEuNTMuMzkuMzguNS42Ni41My45MnYuMDZsMS4xMi0xLjA2LjQ0LS40N2MtLjE4LS4zLS40LS42LS42Ny0uODctLjYyLS42MS0xLjM0LTEtMi4wOS0xLjFhMy4wOCAzLjA4IDAgMDAtLjU1LS4wMXpcIi8+PHBhdGggZD1cIk0xMy4wNy44NmEzLjkgMy45IDAgMDAtMS41Mi40M2MtMS4yNC42Mi0yLjI2IDEuNjktMy4yNiAyLjY5LS40Ni40Ny0uOTQuOTQtMS4zOSAxLjQzLjE1LS4wOC4yOC0uMTguNDMtLjI1YTQuNCA0LjQgMCAwMTIuMzYtLjQ2Yy4yLjAyLjQuMDcuNi4xNC43OS0uNzcgMS41NS0xLjQ2IDIuMTYtMS43Ni4zOC0uMTkuNjctLjI1LjkzLS4yMS4yNS4wMy41My4xNC45MS41Mi4zOS4zOC41LjY2LjUzLjkyLjAzLjI2LS4wMi41NS0uMjEuOTMtLjM5Ljc2LTEuMzIgMS43NC0yLjMyIDIuNzQtMSAxLTEuOTggMS45My0yLjc0IDIuMzEtLjM4LjItLjY3LjI1LS45My4yMi0uMjUtLjA0LS41My0uMTUtLjkxLS41My0uMzktLjM4LS41LS42Ni0uNTMtLjkyVjljLS4zNi4zMy0uNzMuNjctMS4xMiAxLjA2bC0uNDMuNDZjLjE3LjMuNC42LjY2Ljg3LjYyLjYyIDEuMzQgMSAyLjA4IDEuMS43NS4xIDEuNDYtLjEgMi4wOC0uNDEgMS4yNC0uNjIgMi4yNi0xLjY5IDMuMjYtMi42OXMyLjA3LTIuMDIgMi42OC0zLjI2Yy4zMS0uNjIuNS0xLjMyLjQxLTIuMDdhMy42MyAzLjYzIDAgMDAtMS4xLTIuMDhjLS42MS0uNjItMS4zMy0xLTIuMDctMS4xYTMuMDggMy4wOCAwIDAwLS41Ni0uMDJ6XCIvPjwvc3ZnPmAsXG4gIG9sOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTEuNSA3YS41LjUgMCAxMDAgMWgxYS41LjUgMCAwMS41LjVjMCAuMTY0LS4wOC4zMS0uMTQuMzU1bC0xLjY1NSAxLjI1QS40OTIuNDkyIDAgMDAxIDEwLjVhLjUuNSAwIDAwLjUuNWgyYS41LjUgMCAwMDAtMUgzbC4zOTgtLjI5OUExLjUgMS41IDAgMDAyLjUgN3pcIi8+PHBhdGggZD1cIk0xLjUgMTJjLS42NjcgMC0uNjY3IDEgMCAxaDEuMjVjLjMzMyAwIC4zMzMuNSAwIC41SDIuNWMtLjY2NyAwLS42NjcgMSAwIDFoLjI1Yy4zMzMgMCAuMzMzLjUgMCAuNUgxLjVjLS42NjcgMC0uNjY3IDEgMCAxaDFjLjM5OCAwIC43OC0uMTMxIDEuMDYtLjM2NS4yODItLjIzNS40NC0uNTU0LjQ0LS44ODVhMS4xMjEgMS4xMjEgMCAwMC0uMzAzLS43NWMuMTkxLS4yMDQuMy0uNDcuMzAzLS43NSAwLS4zMzItLjE1OC0uNjUxLS40NC0uODg1LS4zLS4yNDEtLjY3NS0uMzctMS4wNi0uMzY1elwiLz48cmVjdCB5PVwiMTNcIiB4PVwiNlwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjEyXCIgcnk9XCIxXCIvPjxyZWN0IHJ5PVwiMVwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIyXCIgeD1cIjZcIiB5PVwiOFwiLz48cmVjdCB5PVwiM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PHBhdGggZD1cIk0xLjUgMmEuNS41IDAgMTAwIDFIMnYyaC0uNWEuNS41IDAgMTAwIDFoMmEuNS41IDAgMTAwLTFIM1YyLjVjMC0uMjc3LS4yMjMtLjUtLjUtLjV6XCIvPjwvc3ZnPmAsXG4gIHJlZG86IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNIDcuMjY5NTMwOCwyLjcwNTA3ODEgQyA4LjExMjg3NTUsMi43MDgxNTgxIDguOTUyOTg5NSwyLjg3MTIxNTYgOS43MzA0NjksMy4xMzQ3NjU2IDExLjQwODg3NCwzLjcwMzcxMjEgMTIuOTAxNDIsNC42ODQ3MTA0IDE0LDUuNjM2NzE4OCBWIDQgaCAyIFYgOSBIIDExIFYgNyBoIDEuNTA5NzY1IEMgMTEuNTkwNzUsNi4yNDg1MTczIDEwLjM0MDIwOCw1LjQ1MzgwOCA5LjA4Nzg5MDQsNS4wMjkyOTY5IDcuNDMwOTM5OCw0LjQ2NzYyMzEgNS45NDUzNDU4LDQuNDY4NzE3IDQuNzA3MDMwOCw1LjcwNzAzMTIgYyAtMS4yMjUwMTQsMS4yMjUwMTQyIC0xLjQwOTc2OSwyLjcyMDY5NTMgLTAuNzc5Mjk3LDQuMjk2ODc0OCAwLjYzMDQ3MiwxLjU3NjE4IDIuMTY3NDc1LDMuMTU4MDA2IDQuNDQzMzU5OCw0LjA2ODM2IGwgLTAuNzQyMTg3OCwxLjg1NTQ2OCBjIC0yLjcyNDExNSwtMS4wODk2NDYgLTQuNjg3MTEyLC0zLjAwNzgyIC01LjU1NjY0LC01LjE4MTY0IC0wLjg2OTUyOCwtMi4xNzM4MjA2IC0wLjU1NDI4MywtNC42NzgxMzkzIDEuMjIwNzAzLC02LjQ1MzEyNTIgMC45MjM4NTcsLTAuOTIzODU2OCAyLjAxNTM4OCwtMS4zODg4MjggMy4xMzQ3NjUsLTEuNTM1MTU2MyAwLjI3OTg0NSwtMC4wMzY1ODIgMC41NjA2ODIsLTAuMDUzNzYxIDAuODQxNzk3LC0wLjA1MjczNCB6XCIgLz48L3N2Zz5gLFxuICBzdHJpa2V0aHJvdWdoOiBgPHN2ZyB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIj48cGF0aCBkPVwiTTEwIDJDNiAyIDQgNCA0IDZjMCAuMzM4LjA4LjY3Mi4xOTMgMWgyLjM0QzYuMTEzIDYuNjI5IDYgNi4yOTUgNiA2YzAtLjMzNC4xMTctLjcyNS42OTEtMS4xNTRDNy4yNjUgNC40MTYgOC4zMzEgNCAxMCA0aDNhMSAxIDAgMDAwLTJ6bTEuNDc3IDljLjQxMy4zNjguNTIzLjcwNi41MjMgMSAwIC4zMzQtLjEyNy43MTItLjcwMSAxLjE0My0uNTc1LjQzLTEuNjMyLjg1LTMuMjk5Ljg1N2wtMS4wMDYuMDA3VjE0SDVhMSAxIDAgMDAwIDJoM2M0IDAgNi0yIDYtNCAwLS4zMzgtLjA4MS0uNjcyLS4xOTUtMXpcIi8+PHJlY3Qgcnk9XCIxXCIgeT1cIjhcIiB4PVwiMVwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjE2XCIvPjwvc3ZnPmAsXG4gIHVsOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48Y2lyY2xlIGN4PVwiMlwiIGN5PVwiOVwiIHI9XCIyXCIvPjxjaXJjbGUgY3k9XCI0XCIgY3g9XCIyXCIgcj1cIjJcIi8+PHJlY3QgeT1cIjNcIiB4PVwiNlwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjEyXCIgcnk9XCIxXCIvPjxjaXJjbGUgY3g9XCIyXCIgY3k9XCIxNFwiIHI9XCIyXCIvPjxyZWN0IHJ5PVwiMVwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIyXCIgeD1cIjZcIiB5PVwiOFwiLz48cmVjdCB5PVwiMTNcIiB4PVwiNlwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjEyXCIgcnk9XCIxXCIvPjwvc3ZnPmAsXG4gIHVuZG86IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNIDEwLjczMDQ2OSAyLjcwNTA3ODEgQyA5Ljg4NzEyNDMgMi43MDgxNTk0IDkuMDQ3MDEwMyAyLjg3MTIxNTYgOC4yNjk1MzEyIDMuMTM0NzY1NiBDIDYuNTkxMTI1NiAzLjcwMzcxMjEgNS4wOTg1Nzk3IDQuNjg0NzEwNCA0IDUuNjM2NzE4OCBMIDQgNCBMIDIgNCBMIDIgOSBMIDcgOSBMIDcgNyBMIDUuNDkwMjM0NCA3IEMgNi40MDkyNDk5IDYuMjQ4NTE3MyA3LjY1OTc5MTQgNS40NTM4MDggOC45MTIxMDk0IDUuMDI5Mjk2OSBDIDEwLjU2OTA2IDQuNDY3NjIzMSAxMi4wNTQ2NTQgNC40Njg3MTcgMTMuMjkyOTY5IDUuNzA3MDMxMiBDIDE0LjUxNzk4MyA2LjkzMjA0NTQgMTQuNzAyNzM4IDguNDI3NzI2NSAxNC4wNzIyNjYgMTAuMDAzOTA2IEMgMTMuNDQxNzk0IDExLjU4MDA4NiAxMS45MDQ3OTEgMTMuMTYxOTEyIDkuNjI4OTA2MiAxNC4wNzIyNjYgTCAxMC4zNzEwOTQgMTUuOTI3NzM0IEMgMTMuMDk1MjA5IDE0LjgzODA4OCAxNS4wNTgyMDYgMTIuOTE5OTE0IDE1LjkyNzczNCAxMC43NDYwOTQgQyAxNi43OTcyNjIgOC41NzIyNzM0IDE2LjQ4MjAxNyA2LjA2Nzk1NDcgMTQuNzA3MDMxIDQuMjkyOTY4OCBDIDEzLjc4MzE3NCAzLjM2OTExMiAxMi42OTE2NDMgMi45MDQxNDA4IDExLjU3MjI2NiAyLjc1NzgxMjUgQyAxMS4yOTI0MjEgMi43MjEyMzA0IDExLjAxMTU4NCAyLjcwNDA1MSAxMC43MzA0NjkgMi43MDUwNzgxIHogXCIgLz48L3N2Zz5cbmBcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHN2ZzsiLCJpbXBvcnQgc3ZnIGZyb20gXCIuL3N2Zy9zdmdcIjtcbmltcG9ydCB7IEVkaXRvciwgUG9zaXRpb24sIFNlbGVjdGlvbkV2ZW50IH0gZnJvbSBcIi4vVGlueU1ERVwiO1xuXG5jb25zdCBpc01hY0xpa2UgPSAvKE1hY3xpUGhvbmV8aVBvZHxpUGFkKS9pLnRlc3QoXG4gIHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgPyBuYXZpZ2F0b3IucGxhdGZvcm0gOiBcIlwiXG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRBY3Rpb24ge1xuICAoZWRpdG9yOiBFZGl0b3IpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRFbmFibGVkIHtcbiAgKGVkaXRvcjogRWRpdG9yLCBmb2N1cz86IFBvc2l0aW9uLCBhbmNob3I/OiBQb3NpdGlvbik6IGJvb2xlYW4gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmREZWZpbml0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBhY3Rpb24/OiBzdHJpbmcgfCBDb21tYW5kQWN0aW9uO1xuICBpbm5lckhUTUw/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBob3RrZXk/OiBzdHJpbmc7XG4gIGVuYWJsZWQ/OiBDb21tYW5kRW5hYmxlZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kQmFyUHJvcHMge1xuICBlbGVtZW50Pzogc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG4gIGVkaXRvcj86IEVkaXRvcjtcbiAgY29tbWFuZHM/OiAoc3RyaW5nIHwgQ29tbWFuZERlZmluaXRpb24pW107XG59XG5cbmludGVyZmFjZSBIb3RrZXkge1xuICBtb2RpZmllcnM6IHN0cmluZ1tdO1xuICBjb21tYW5kOiBzdHJpbmc7XG4gIGtleT86IHN0cmluZztcbiAgY29kZT86IHN0cmluZztcbn1cblxuY29uc3QgRGVmYXVsdENvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBDb21tYW5kRGVmaW5pdGlvbj4gPSB7XG4gIGJvbGQ6IHtcbiAgICBuYW1lOiBcImJvbGRcIixcbiAgICBhY3Rpb246IFwiYm9sZFwiLFxuICAgIGlubmVySFRNTDogc3ZnLmJvbGQsXG4gICAgdGl0bGU6IFwiQm9sZFwiLFxuICAgIGhvdGtleTogXCJNb2QtQlwiLFxuICB9LFxuICBpdGFsaWM6IHtcbiAgICBuYW1lOiBcIml0YWxpY1wiLFxuICAgIGFjdGlvbjogXCJpdGFsaWNcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5pdGFsaWMsXG4gICAgdGl0bGU6IFwiSXRhbGljXCIsXG4gICAgaG90a2V5OiBcIk1vZC1JXCIsXG4gIH0sXG4gIHN0cmlrZXRocm91Z2g6IHtcbiAgICBuYW1lOiBcInN0cmlrZXRocm91Z2hcIixcbiAgICBhY3Rpb246IFwic3RyaWtldGhyb3VnaFwiLFxuICAgIGlubmVySFRNTDogc3ZnLnN0cmlrZXRocm91Z2gsXG4gICAgdGl0bGU6IFwiU3RyaWtldGhyb3VnaFwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LTVcIixcbiAgfSxcbiAgY29kZToge1xuICAgIG5hbWU6IFwiY29kZVwiLFxuICAgIGFjdGlvbjogXCJjb2RlXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuY29kZSxcbiAgICB0aXRsZTogXCJGb3JtYXQgYXMgY29kZVwiLFxuICB9LFxuICBoMToge1xuICAgIG5hbWU6IFwiaDFcIixcbiAgICBhY3Rpb246IFwiaDFcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5oMSxcbiAgICB0aXRsZTogXCJMZXZlbCAxIGhlYWRpbmdcIixcbiAgICBob3RrZXk6IFwiTW9kLVNoaWZ0LTFcIixcbiAgfSxcbiAgaDI6IHtcbiAgICBuYW1lOiBcImgyXCIsXG4gICAgYWN0aW9uOiBcImgyXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuaDIsXG4gICAgdGl0bGU6IFwiTGV2ZWwgMiBoZWFkaW5nXCIsXG4gICAgaG90a2V5OiBcIk1vZC1TaGlmdC0yXCIsXG4gIH0sXG4gIHVsOiB7XG4gICAgbmFtZTogXCJ1bFwiLFxuICAgIGFjdGlvbjogXCJ1bFwiLFxuICAgIGlubmVySFRNTDogc3ZnLnVsLFxuICAgIHRpdGxlOiBcIkJ1bGxldGVkIGxpc3RcIixcbiAgfSxcbiAgb2w6IHtcbiAgICBuYW1lOiBcIm9sXCIsXG4gICAgYWN0aW9uOiBcIm9sXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcub2wsXG4gICAgdGl0bGU6IFwiTnVtYmVyZWQgbGlzdFwiLFxuICB9LFxuICBibG9ja3F1b3RlOiB7XG4gICAgbmFtZTogXCJibG9ja3F1b3RlXCIsXG4gICAgYWN0aW9uOiBcImJsb2NrcXVvdGVcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5ibG9ja3F1b3RlLFxuICAgIHRpdGxlOiBcIlF1b3RlXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtUVwiLFxuICB9LFxuICBpbnNlcnRMaW5rOiB7XG4gICAgbmFtZTogXCJpbnNlcnRMaW5rXCIsXG4gICAgYWN0aW9uOiAoZWRpdG9yOiBFZGl0b3IpID0+IHtcbiAgICAgIGlmIChlZGl0b3IuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpKSBlZGl0b3Iud3JhcFNlbGVjdGlvbihcIltcIiwgXCJdKClcIik7XG4gICAgfSxcbiAgICBlbmFibGVkOiAoZWRpdG9yOiBFZGl0b3IpID0+XG4gICAgICBlZGl0b3IuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpID8gZmFsc2UgOiBudWxsLFxuICAgIGlubmVySFRNTDogc3ZnLmxpbmssXG4gICAgdGl0bGU6IFwiSW5zZXJ0IGxpbmtcIixcbiAgICBob3RrZXk6IFwiTW9kLUtcIixcbiAgfSxcbiAgaW5zZXJ0SW1hZ2U6IHtcbiAgICBuYW1lOiBcImluc2VydEltYWdlXCIsXG4gICAgYWN0aW9uOiAoZWRpdG9yOiBFZGl0b3IpID0+IHtcbiAgICAgIGlmIChlZGl0b3IuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpKSBlZGl0b3Iud3JhcFNlbGVjdGlvbihcIiFbXCIsIFwiXSgpXCIpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogKGVkaXRvcjogRWRpdG9yKSA9PlxuICAgICAgZWRpdG9yLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5pbWFnZSxcbiAgICB0aXRsZTogXCJJbnNlcnQgaW1hZ2VcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1JXCIsXG4gIH0sXG4gIGhyOiB7XG4gICAgbmFtZTogXCJoclwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucGFzdGUoXCJcXG4qKipcXG5cIiksXG4gICAgZW5hYmxlZDogKCkgPT4gZmFsc2UsXG4gICAgaW5uZXJIVE1MOiBzdmcuaHIsXG4gICAgdGl0bGU6IFwiSW5zZXJ0IGhvcml6b250YWwgbGluZVwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LUxcIixcbiAgfSxcbiAgdW5kbzoge1xuICAgIG5hbWU6IFwidW5kb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IudW5kbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5VbmRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy51bmRvLFxuICAgIHRpdGxlOiBcIlVuZG9cIixcbiAgfSxcbiAgcmVkbzoge1xuICAgIG5hbWU6IFwicmVkb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucmVkbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5SZWRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy5yZWRvLFxuICAgIHRpdGxlOiBcIlJlZG9cIixcbiAgfSxcbn07XG5cbmV4cG9ydCBjbGFzcyBDb21tYW5kQmFyIHtcbiAgcHVibGljIGU6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBlZGl0b3I6IEVkaXRvciB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHt9O1xuICBwdWJsaWMgYnV0dG9uczogUmVjb3JkPHN0cmluZywgSFRNTERpdkVsZW1lbnQ+ID0ge307XG4gIHB1YmxpYyBzdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+ID0ge307XG4gIHByaXZhdGUgaG90a2V5czogSG90a2V5W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ29tbWFuZEJhclByb3BzKSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLmVkaXRvciA9IG51bGw7XG4gICAgdGhpcy5jb21tYW5kcyA9IHt9O1xuICAgIHRoaXMuYnV0dG9ucyA9IHt9O1xuICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICB0aGlzLmhvdGtleXMgPSBbXTtcblxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBwcm9wcy5lbGVtZW50O1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cblxuICAgIHRoaXMuY3JlYXRlQ29tbWFuZEJhckVsZW1lbnQoXG4gICAgICBlbGVtZW50LFxuICAgICAgcHJvcHMuY29tbWFuZHMgfHwgW1xuICAgICAgICBcImJvbGRcIixcbiAgICAgICAgXCJpdGFsaWNcIixcbiAgICAgICAgXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImNvZGVcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwiaDFcIixcbiAgICAgICAgXCJoMlwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bFwiLFxuICAgICAgICBcIm9sXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImJsb2NrcXVvdGVcIixcbiAgICAgICAgXCJoclwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bmRvXCIsXG4gICAgICAgIFwicmVkb1wiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJpbnNlcnRMaW5rXCIsXG4gICAgICAgIFwiaW5zZXJ0SW1hZ2VcIixcbiAgICAgIF1cbiAgICApO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB0aGlzLmhhbmRsZUtleWRvd24oZSkpO1xuICAgIGlmIChwcm9wcy5lZGl0b3IpIHRoaXMuc2V0RWRpdG9yKHByb3BzLmVkaXRvcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50KHBhcmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb21tYW5kczogKHN0cmluZyB8IENvbW1hbmREZWZpbml0aW9uKVtdKTogdm9pZCB7XG4gICAgdGhpcy5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmUuY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCYXJcIjtcblxuICAgIGZvciAobGV0IGNvbW1hbmQgb2YgY29tbWFuZHMpIHtcbiAgICAgIGlmIChjb21tYW5kID09PSBcInxcIikge1xuICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBlbC5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZERpdmlkZXJcIjtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb21tYW5kTmFtZTogc3RyaW5nO1xuICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBpZiAoRGVmYXVsdENvbW1hbmRzW2NvbW1hbmRdKSB7XG4gICAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQ7XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IERlZmF1bHRDb21tYW5kc1tjb21tYW5kTmFtZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gXCJvYmplY3RcIiAmJiBjb21tYW5kLm5hbWUpIHtcbiAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQubmFtZTtcbiAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IHt9IGFzIENvbW1hbmREZWZpbml0aW9uO1xuICAgICAgICAgIGlmIChEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLCBEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSwgY29tbWFuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS50aXRsZSB8fCBjb21tYW5kTmFtZTtcblxuICAgICAgICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uaG90a2V5KSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmhvdGtleSEuc3BsaXQoXCItXCIpO1xuICAgICAgICAgIGxldCBtb2RpZmllcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgbGV0IG1vZGlmaWVyZXhwbGFuYXRpb246IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgc3dpdGNoIChrZXlzW2ldKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJDdHJsXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJjdHJsS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIkN0cmxcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJDbWRcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcIm1ldGFLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQWx0XCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwiQWx0XCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiT3B0aW9uXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oylXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiV2luXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKKniBXaW5cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTaGlmdFwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwic2hpZnRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oenXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiTW9kXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFjTGlrZSkge1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImN0cmxLZXlcIik7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJDdHJsXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIk1vZDJcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImFsdEtleVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWNMaWtlKSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLijKVcIik7XG4gICAgICAgICAgICAgICAgZWxzZSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJBbHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChrZXlzW2tleXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgIGxldCBob3RrZXk6IEhvdGtleSA9IHtcbiAgICAgICAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzLFxuICAgICAgICAgICAgY29tbWFuZDogY29tbWFuZE5hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBsYXN0S2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0S2V5Lm1hdGNoKC9eWzAtOV0kLykpIHtcbiAgICAgICAgICAgIGhvdGtleS5jb2RlID0gYERpZ2l0JHtsYXN0S2V5fWA7XG4gICAgICAgICAgfSBlbHNlIGlmIChsYXN0S2V5Lm1hdGNoKC9eW2EtekEtWl0kLykpIHtcbiAgICAgICAgICAgIGhvdGtleS5jb2RlID0gYEtleSR7bGFzdEtleS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhvdGtleS5rZXkgPSBsYXN0S2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaG90a2V5cy5wdXNoKGhvdGtleSk7XG4gICAgICAgICAgdGl0bGUgPSB0aXRsZS5jb25jYXQoYCAoJHttb2RpZmllcmV4cGxhbmF0aW9uLmpvaW4oXCIrXCIpfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9EaXNhYmxlZFwiO1xuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLnRpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0uaW5uZXJIVE1MID0gdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uaW5uZXJIVE1MIHx8IFwiP1wiO1xuXG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCAoZSkgPT5cbiAgICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGNvbW1hbmROYW1lLCBlKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmUuYXBwZW5kQ2hpbGQodGhpcy5idXR0b25zW2NvbW1hbmROYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ2xpY2soY29tbWFuZE5hbWU6IHN0cmluZywgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRvcikgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBGb2N1cyB0aGUgZWRpdG9yIGlmIGl0J3Mgbm90IGFscmVhZHkgZm9jdXNlZFxuICAgIGlmICh0aGlzLmVkaXRvci5lKSB7XG4gICAgICBjb25zdCBlZGl0b3JIYWRGb2N1cyA9IHRoaXMuZWRpdG9yLmUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgICB0aGlzLmVkaXRvci5lLmZvY3VzKCk7XG4gICAgICAvLyBPbmx5IHJlc3RvcmUgdGhlIGxhc3Qgc2VsZWN0aW9uIGlmIHRoZSBlZGl0b3Igd2FzIG5vdCBmb2N1c2VkIGJlZm9yZVxuICAgICAgaWYgKCFlZGl0b3JIYWRGb2N1cykge1xuICAgICAgICB0aGlzLmVkaXRvci5yZXN0b3JlTGFzdFNlbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uYWN0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZVtjb21tYW5kTmFtZV0gPT09IGZhbHNlKVxuICAgICAgICAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIHRydWUpO1xuICAgICAgZWxzZSAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5hY3Rpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmFjdGlvbiBhcyBDb21tYW5kQWN0aW9uKSh0aGlzLmVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEVkaXRvcihlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yO1xuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uXCIsIChlKSA9PiB0aGlzLmhhbmRsZVNlbGVjdGlvbihlKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdGlvbihldmVudDogU2VsZWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuY29tbWFuZFN0YXRlKSB7XG4gICAgICBmb3IgKGxldCBjb21tYW5kIGluIHRoaXMuY29tbWFuZHMpIHtcbiAgICAgICAgaWYgKGV2ZW50LmNvbW1hbmRTdGF0ZVtjb21tYW5kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCEoXG4gICAgICAgICAgICAgIHRoaXMuZWRpdG9yISxcbiAgICAgICAgICAgICAgZXZlbnQuZm9jdXMsXG4gICAgICAgICAgICAgIGV2ZW50LmFuY2hvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IGV2ZW50LmZvY3VzID8gZmFsc2UgOiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXRlW2NvbW1hbmRdID0gZXZlbnQuY29tbWFuZFN0YXRlW2NvbW1hbmRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZF0uY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCdXR0b24gVE1Db21tYW5kQnV0dG9uX0FjdGl2ZVwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmRdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9JbmFjdGl2ZVwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fRGlzYWJsZWRcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIC8vIE9ubHkgaGFuZGxlIGtleWJvYXJkIHNob3J0Y3V0cyBpZiB0aGlzIGVkaXRvciBpcyBjdXJyZW50bHkgZm9jdXNlZFxuICAgIGlmICghdGhpcy5lZGl0b3IgfHwgIXRoaXMuZWRpdG9yLmUpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZWRpdG9yLmUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHJldHVybjtcblxuICAgIG91dGVyOiBmb3IgKGxldCBob3RrZXkgb2YgdGhpcy5ob3RrZXlzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChob3RrZXkua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSBob3RrZXkua2V5KSB8fFxuICAgICAgICAoaG90a2V5LmNvZGUgJiYgZXZlbnQuY29kZSA9PT0gaG90a2V5LmNvZGUpXG4gICAgICApIHtcbiAgICAgICAgZm9yIChsZXQgbW9kaWZpZXIgb2YgaG90a2V5Lm1vZGlmaWVycykge1xuICAgICAgICAgIGlmICghKGV2ZW50IGFzIGFueSlbbW9kaWZpZXJdKSBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGhvdGtleS5jb21tYW5kLCBldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWFuZEJhcjsiLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCwgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBGT1JDRUQsIFNIQU0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG5cbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgcmVhbCByZWdleCBoZXJlIHNpbmNlIGl0IGNhdXNlcyBkZW9wdGltaXphdGlvblxuICAgICAgLy8gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gVjhcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMDZcbiAgICAgIHJlID0ge307XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgICByZS5mbGFncyA9ICcnO1xuICAgICAgcmVbU1lNQk9MXSA9IC8uL1tTWU1CT0xdO1xuICAgIH1cblxuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIEZPUkNFRFxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIG1ldGhvZHMgPSBleGVjKFNZTUJPTCwgJydbS0VZXSwgZnVuY3Rpb24gKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICB2YXIgJGV4ZWMgPSByZWdleHAuZXhlYztcbiAgICAgIGlmICgkZXhlYyA9PT0gcmVnZXhwRXhlYyB8fCAkZXhlYyA9PT0gUmVnRXhwUHJvdG90eXBlLmV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IGNhbGwobmF0aXZlUmVnRXhwTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogY2FsbChuYXRpdmVNZXRob2QsIHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW4oU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBtZXRob2RzWzBdKTtcbiAgICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgU1lNQk9MLCBtZXRob2RzWzFdKTtcbiAgfVxuXG4gIGlmIChTSEFNKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUmVnRXhwUHJvdG90eXBlW1NZTUJPTF0sICdzaGFtJywgdHJ1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xuXG4vLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGNoYXJBdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZG9zL25vLXZ1bG5lcmFibGUgLS0gc2FmZVxudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCYnYF18XFxkezEsMn18PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmJ2BdfFxcZHsxLDJ9KS9nO1xuXG4vLyBgR2V0U3Vic3RpdHV0aW9uYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gIH1cbiAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICB2YXIgY2FwdHVyZTtcbiAgICBzd2l0Y2ggKGNoYXJBdChjaCwgMCkpIHtcbiAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHJpbmdTbGljZShzdHIsIDAsIHBvc2l0aW9uKTtcbiAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHJpbmdTbGljZShzdHIsIHRhaWxQb3MpO1xuICAgICAgY2FzZSAnPCc6XG4gICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW3N0cmluZ1NsaWNlKGNoLCAxLCAtMSldO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoYXJBdChjaCwgMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaGFyQXQoY2gsIDEpO1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmIChpc0NhbGxhYmxlKGV4ZWMpKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNhbGwoZXhlYywgUiwgUyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgYW5PYmplY3QocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpID09PSAnUmVnRXhwJykgcmV0dXJuIGNhbGwocmVnZXhwRXhlYywgUiwgUyk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBnZXRTdWJzdGl0dXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbicpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFJFUExBQ0UgPSB3ZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gSUUgPD0gMTEgcmVwbGFjZXMgJDAgd2l0aCB0aGUgd2hvbGUgbWF0Y2gsIGFzIGlmIGl0IHdhcyAkJlxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAyNDY2Ni9nZXR0aW5nLWllLXRvLXJlcGxhY2UtYS1yZWdleC13aXRoLXRoZS1saXRlcmFsLXN0cmluZy0wXG52YXIgUkVQTEFDRV9LRUVQU18kMCA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvcHJlZmVyLWVzY2FwZS1yZXBsYWNlbWVudC1kb2xsYXItY2hhciAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gJ2EnLnJlcGxhY2UoLy4vLCAnJDAnKSA9PT0gJyQwJztcbn0pKCk7XG5cbi8vIFNhZmFyaSA8PSAxMy4wLjMoPykgc3Vic3RpdHV0ZXMgbnRoIGNhcHR1cmUgd2hlcmUgbj5tIHdpdGggYW4gZW1wdHkgc3RyaW5nXG52YXIgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPSAoZnVuY3Rpb24gKCkge1xuICBpZiAoLy4vW1JFUExBQ0VdKSB7XG4gICAgcmV0dXJuIC8uL1tSRVBMQUNFXSgnYScsICckMCcpID09PSAnJztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KSgpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tdXNlbGVzcy1kb2xsYXItcmVwbGFjZW1lbnRzIC0tIGZhbHNlIHBvc2l0aXZlXG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygncmVwbGFjZScsIGZ1bmN0aW9uIChfLCBuYXRpdmVSZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIFVOU0FGRV9TVUJTVElUVVRFID0gUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPyAnJCcgOiAnJDAnO1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciByZXBsYWNlciA9IGlzT2JqZWN0KHNlYXJjaFZhbHVlKSA/IGdldE1ldGhvZChzZWFyY2hWYWx1ZSwgUkVQTEFDRSkgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gcmVwbGFjZXJcbiAgICAgICAgPyBjYWxsKHJlcGxhY2VyLCBzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IGNhbGwobmF0aXZlUmVwbGFjZSwgdG9TdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChzdHJpbmcsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QodGhpcyk7XG4gICAgICB2YXIgUyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PSAnc3RyaW5nJyAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgVU5TQUZFX1NVQlNUSVRVVEUpID09PSAtMSAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgJyQ8JykgPT09IC0xXG4gICAgICApIHtcbiAgICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVSZXBsYWNlLCByeCwgUywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSBpc0NhbGxhYmxlKHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSB0b1N0cmluZyhyZXBsYWNlVmFsdWUpO1xuXG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgdmFyIGZ1bGxVbmljb2RlO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHB1c2gocmVzdWx0cywgcmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuXG4gICAgICAgIHZhciBtYXRjaFN0ciA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgdmFyIHJlcGxhY2VtZW50O1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIHB1c2goY2FwdHVyZXMsIG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IGNvbmNhdChbbWF0Y2hlZF0sIGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcHVzaChyZXBsYWNlckFyZ3MsIG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gdG9TdHJpbmcoYXBwbHkocmVwbGFjZVZhbHVlLCB1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gc3RyaW5nU2xpY2UoUywgbmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIHN0cmluZ1NsaWNlKFMsIG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xufSwgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTIHx8ICFSRVBMQUNFX0tFRVBTXyQwIHx8IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXlsnICsgd2hpdGVzcGFjZXMgKyAnXSsnKTtcbnZhciBydHJpbSA9IFJlZ0V4cCgnKF58W14nICsgd2hpdGVzcGFjZXMgKyAnXSlbJyArIHdoaXRlc3BhY2VzICsgJ10rJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgbHRyaW0sICcnKTtcbiAgICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBydHJpbSwgJyQxJyk7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1MZWZ0LCB0cmltU3RhcnQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbXN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbVJpZ2h0LCB0cmltRW5kIH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuICB0cmltOiBjcmVhdGVNZXRob2QoMylcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBub24gPSAnXFx1MjAwQlxcdTAwODVcXHUxODBFJztcblxuLy8gY2hlY2sgdGhhdCBhIG1ldGhvZCB3b3JrcyB3aXRoIHRoZSBjb3JyZWN0IGxpc3Rcbi8vIG9mIHdoaXRlc3BhY2VzIGFuZCBoYXMgYSBjb3JyZWN0IG5hbWVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHJldHVybiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdKClcbiAgICAgIHx8IG5vbltNRVRIT0RfTkFNRV0oKSAhPT0gbm9uXG4gICAgICB8fCAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdLm5hbWUgIT09IE1FVEhPRF9OQU1FKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIGZvcmNlZFN0cmluZ1RyaW1NZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdUcmltTWV0aG9kKCd0cmltJykgfSwge1xuICB0cmltOiBmdW5jdGlvbiB0cmltKCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc3JlZ2V4cFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY2xhc3NvZihpdCkgPT09ICdSZWdFeHAnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcblxudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIpIHtcbiAgdmFyIGZsYWdzID0gUi5mbGFncztcbiAgcmV0dXJuIGZsYWdzID09PSB1bmRlZmluZWQgJiYgISgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZSkgJiYgIWhhc093bihSLCAnZmxhZ3MnKSAmJiBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgUilcbiAgICA/IGNhbGwocmVnRXhwRmxhZ3MsIFIpIDogZmxhZ3M7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUYXJnZXQsIFNvdXJjZSwga2V5KSB7XG4gIGtleSBpbiBUYXJnZXQgfHwgZGVmaW5lUHJvcGVydHkoVGFyZ2V0LCBrZXksIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTb3VyY2Vba2V5XTsgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBTb3VyY2Vba2V5XSA9IGl0OyB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuZ2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLmdldCwgbmFtZSwgeyBnZXR0ZXI6IHRydWUgfSk7XG4gIGlmIChkZXNjcmlwdG9yLnNldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5zZXQsIG5hbWUsIHsgc2V0dGVyOiB0cnVlIH0pO1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGdldFJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHByb3h5QWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3InKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmVuZm9yY2U7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFVOU1VQUE9SVEVEX0RPVF9BTEwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwnKTtcbnZhciBVTlNVUFBPUlRFRF9OQ0cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZycpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG52YXIgTmF0aXZlUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gTmF0aXZlUmVnRXhwLnByb3RvdHlwZTtcbnZhciBTeW50YXhFcnJvciA9IGdsb2JhbFRoaXMuU3ludGF4RXJyb3I7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKFJlZ0V4cFByb3RvdHlwZS5leGVjKTtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG4vLyBUT0RPOiBVc2Ugb25seSBwcm9wZXIgUmVnRXhwSWRlbnRpZmllck5hbWVcbnZhciBJU19OQ0cgPSAvXlxcPzxbXlxcc1xcZCEjJSYqKzw9PkBeXVteXFxzISMlJiorPD0+QF5dKj4vO1xudmFyIHJlMSA9IC9hL2c7XG52YXIgcmUyID0gL2EvZztcblxuLy8gXCJuZXdcIiBzaG91bGQgY3JlYXRlIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdcbnZhciBDT1JSRUNUX05FVyA9IG5ldyBOYXRpdmVSZWdFeHAocmUxKSAhPT0gcmUxO1xuXG52YXIgTUlTU0VEX1NUSUNLWSA9IHN0aWNreUhlbHBlcnMuTUlTU0VEX1NUSUNLWTtcbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5VTlNVUFBPUlRFRF9ZO1xuXG52YXIgQkFTRV9GT1JDRUQgPSBERVNDUklQVE9SUyAmJlxuICAoIUNPUlJFQ1RfTkVXIHx8IE1JU1NFRF9TVElDS1kgfHwgVU5TVVBQT1JURURfRE9UX0FMTCB8fCBVTlNVUFBPUlRFRF9OQ0cgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJlMltNQVRDSF0gPSBmYWxzZTtcbiAgICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2luY29uc2lzdGVudC1mdW5jdGlvbi1jYWxsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgcmV0dXJuIE5hdGl2ZVJlZ0V4cChyZTEpICE9PSByZTEgfHwgTmF0aXZlUmVnRXhwKHJlMikgPT09IHJlMiB8fCBTdHJpbmcoTmF0aXZlUmVnRXhwKHJlMSwgJ2knKSkgIT09ICcvYS9pJztcbiAgfSkpO1xuXG52YXIgaGFuZGxlRG90QWxsID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgYnJhY2tldHMgPSBmYWxzZTtcbiAgdmFyIGNocjtcbiAgZm9yICg7IGluZGV4IDw9IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgICBpZiAoY2hyID09PSAnXFxcXCcpIHtcbiAgICAgIHJlc3VsdCArPSBjaHIgKyBjaGFyQXQoc3RyaW5nLCArK2luZGV4KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIWJyYWNrZXRzICYmIGNociA9PT0gJy4nKSB7XG4gICAgICByZXN1bHQgKz0gJ1tcXFxcc1xcXFxTXSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaHIgPT09ICdbJykge1xuICAgICAgICBicmFja2V0cyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGNociA9PT0gJ10nKSB7XG4gICAgICAgIGJyYWNrZXRzID0gZmFsc2U7XG4gICAgICB9IHJlc3VsdCArPSBjaHI7XG4gICAgfVxuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgaGFuZGxlTkNHID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgbmFtZWQgPSBbXTtcbiAgdmFyIG5hbWVzID0gY3JlYXRlKG51bGwpO1xuICB2YXIgYnJhY2tldHMgPSBmYWxzZTtcbiAgdmFyIG5jZyA9IGZhbHNlO1xuICB2YXIgZ3JvdXBpZCA9IDA7XG4gIHZhciBncm91cG5hbWUgPSAnJztcbiAgdmFyIGNocjtcbiAgZm9yICg7IGluZGV4IDw9IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgICBpZiAoY2hyID09PSAnXFxcXCcpIHtcbiAgICAgIGNociArPSBjaGFyQXQoc3RyaW5nLCArK2luZGV4KTtcbiAgICB9IGVsc2UgaWYgKGNociA9PT0gJ10nKSB7XG4gICAgICBicmFja2V0cyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoIWJyYWNrZXRzKSBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgY2hyID09PSAnWyc6XG4gICAgICAgIGJyYWNrZXRzID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGNociA9PT0gJygnOlxuICAgICAgICByZXN1bHQgKz0gY2hyO1xuICAgICAgICAvLyBpZ25vcmUgbm9uLWNhcHR1cmluZyBncm91cHNcbiAgICAgICAgaWYgKHN0cmluZ1NsaWNlKHN0cmluZywgaW5kZXggKyAxLCBpbmRleCArIDMpID09PSAnPzonKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4ZWMoSVNfTkNHLCBzdHJpbmdTbGljZShzdHJpbmcsIGluZGV4ICsgMSkpKSB7XG4gICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICBuY2cgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGdyb3VwaWQrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICBjYXNlIGNociA9PT0gJz4nICYmIG5jZzpcbiAgICAgICAgaWYgKGdyb3VwbmFtZSA9PT0gJycgfHwgaGFzT3duKG5hbWVzLCBncm91cG5hbWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdJbnZhbGlkIGNhcHR1cmUgZ3JvdXAgbmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVzW2dyb3VwbmFtZV0gPSB0cnVlO1xuICAgICAgICBuYW1lZFtuYW1lZC5sZW5ndGhdID0gW2dyb3VwbmFtZSwgZ3JvdXBpZF07XG4gICAgICAgIG5jZyA9IGZhbHNlO1xuICAgICAgICBncm91cG5hbWUgPSAnJztcbiAgICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChuY2cpIGdyb3VwbmFtZSArPSBjaHI7XG4gICAgZWxzZSByZXN1bHQgKz0gY2hyO1xuICB9IHJldHVybiBbcmVzdWx0LCBuYW1lZF07XG59O1xuXG4vLyBgUmVnRXhwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAtY29uc3RydWN0b3JcbmlmIChpc0ZvcmNlZCgnUmVnRXhwJywgQkFTRV9GT1JDRUQpKSB7XG4gIHZhciBSZWdFeHBXcmFwcGVyID0gZnVuY3Rpb24gUmVnRXhwKHBhdHRlcm4sIGZsYWdzKSB7XG4gICAgdmFyIHRoaXNJc1JlZ0V4cCA9IGlzUHJvdG90eXBlT2YoUmVnRXhwUHJvdG90eXBlLCB0aGlzKTtcbiAgICB2YXIgcGF0dGVybklzUmVnRXhwID0gaXNSZWdFeHAocGF0dGVybik7XG4gICAgdmFyIGZsYWdzQXJlVW5kZWZpbmVkID0gZmxhZ3MgPT09IHVuZGVmaW5lZDtcbiAgICB2YXIgZ3JvdXBzID0gW107XG4gICAgdmFyIHJhd1BhdHRlcm4gPSBwYXR0ZXJuO1xuICAgIHZhciByYXdGbGFncywgZG90QWxsLCBzdGlja3ksIGhhbmRsZWQsIHJlc3VsdCwgc3RhdGU7XG5cbiAgICBpZiAoIXRoaXNJc1JlZ0V4cCAmJiBwYXR0ZXJuSXNSZWdFeHAgJiYgZmxhZ3NBcmVVbmRlZmluZWQgJiYgcGF0dGVybi5jb25zdHJ1Y3RvciA9PT0gUmVnRXhwV3JhcHBlcikge1xuICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgfVxuXG4gICAgaWYgKHBhdHRlcm5Jc1JlZ0V4cCB8fCBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgcGF0dGVybikpIHtcbiAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnNvdXJjZTtcbiAgICAgIGlmIChmbGFnc0FyZVVuZGVmaW5lZCkgZmxhZ3MgPSBnZXRSZWdFeHBGbGFncyhyYXdQYXR0ZXJuKTtcbiAgICB9XG5cbiAgICBwYXR0ZXJuID0gcGF0dGVybiA9PT0gdW5kZWZpbmVkID8gJycgOiB0b1N0cmluZyhwYXR0ZXJuKTtcbiAgICBmbGFncyA9IGZsYWdzID09PSB1bmRlZmluZWQgPyAnJyA6IHRvU3RyaW5nKGZsYWdzKTtcbiAgICByYXdQYXR0ZXJuID0gcGF0dGVybjtcblxuICAgIGlmIChVTlNVUFBPUlRFRF9ET1RfQUxMICYmICdkb3RBbGwnIGluIHJlMSkge1xuICAgICAgZG90QWxsID0gISFmbGFncyAmJiBzdHJpbmdJbmRleE9mKGZsYWdzLCAncycpID4gLTE7XG4gICAgICBpZiAoZG90QWxsKSBmbGFncyA9IHJlcGxhY2UoZmxhZ3MsIC9zL2csICcnKTtcbiAgICB9XG5cbiAgICByYXdGbGFncyA9IGZsYWdzO1xuXG4gICAgaWYgKE1JU1NFRF9TVElDS1kgJiYgJ3N0aWNreScgaW4gcmUxKSB7XG4gICAgICBzdGlja3kgPSAhIWZsYWdzICYmIHN0cmluZ0luZGV4T2YoZmxhZ3MsICd5JykgPiAtMTtcbiAgICAgIGlmIChzdGlja3kgJiYgVU5TVVBQT1JURURfWSkgZmxhZ3MgPSByZXBsYWNlKGZsYWdzLCAveS9nLCAnJyk7XG4gICAgfVxuXG4gICAgaWYgKFVOU1VQUE9SVEVEX05DRykge1xuICAgICAgaGFuZGxlZCA9IGhhbmRsZU5DRyhwYXR0ZXJuKTtcbiAgICAgIHBhdHRlcm4gPSBoYW5kbGVkWzBdO1xuICAgICAgZ3JvdXBzID0gaGFuZGxlZFsxXTtcbiAgICB9XG5cbiAgICByZXN1bHQgPSBpbmhlcml0SWZSZXF1aXJlZChOYXRpdmVSZWdFeHAocGF0dGVybiwgZmxhZ3MpLCB0aGlzSXNSZWdFeHAgPyB0aGlzIDogUmVnRXhwUHJvdG90eXBlLCBSZWdFeHBXcmFwcGVyKTtcblxuICAgIGlmIChkb3RBbGwgfHwgc3RpY2t5IHx8IGdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUocmVzdWx0KTtcbiAgICAgIGlmIChkb3RBbGwpIHtcbiAgICAgICAgc3RhdGUuZG90QWxsID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucmF3ID0gUmVnRXhwV3JhcHBlcihoYW5kbGVEb3RBbGwocGF0dGVybiksIHJhd0ZsYWdzKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGlja3kpIHN0YXRlLnN0aWNreSA9IHRydWU7XG4gICAgICBpZiAoZ3JvdXBzLmxlbmd0aCkgc3RhdGUuZ3JvdXBzID0gZ3JvdXBzO1xuICAgIH1cblxuICAgIGlmIChwYXR0ZXJuICE9PSByYXdQYXR0ZXJuKSB0cnkge1xuICAgICAgLy8gZmFpbHMgaW4gb2xkIGVuZ2luZXMsIGJ1dCB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlcyBmb3IgdW5zdXBwb3J0ZWQgcmVnZXggc3ludGF4XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0LCAnc291cmNlJywgcmF3UGF0dGVybiA9PT0gJycgPyAnKD86KScgOiByYXdQYXR0ZXJuKTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGZvciAodmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKE5hdGl2ZVJlZ0V4cCksIGluZGV4ID0gMDsga2V5cy5sZW5ndGggPiBpbmRleDspIHtcbiAgICBwcm94eUFjY2Vzc29yKFJlZ0V4cFdyYXBwZXIsIE5hdGl2ZVJlZ0V4cCwga2V5c1tpbmRleCsrXSk7XG4gIH1cblxuICBSZWdFeHBQcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWdFeHBXcmFwcGVyO1xuICBSZWdFeHBXcmFwcGVyLnByb3RvdHlwZSA9IFJlZ0V4cFByb3RvdHlwZTtcbiAgZGVmaW5lQnVpbHRJbihnbG9iYWxUaGlzLCAnUmVnRXhwJywgUmVnRXhwV3JhcHBlciwgeyBjb25zdHJ1Y3RvcjogdHJ1ZSB9KTtcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLUBAc3BlY2llc1xuc2V0U3BlY2llcygnUmVnRXhwJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnLicsICdkJykgLT4gLy4vZCBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyIEZPUkNFRCA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIElORElDRVNfU1VQUE9SVCA9IHRydWU7XG4gIHRyeSB7XG4gICAgUmVnRXhwKCcuJywgJ2QnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBJTkRJQ0VTX1NVUFBPUlQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBPID0ge307XG4gIC8vIG1vZGVybiBWOCBidWdcbiAgdmFyIGNhbGxzID0gJyc7XG4gIHZhciBleHBlY3RlZCA9IElORElDRVNfU1VQUE9SVCA/ICdkZ2ltc3knIDogJ2dpbXN5JztcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGtleSwgY2hyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxzICs9IGNocjtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gfSk7XG4gIH07XG5cbiAgdmFyIHBhaXJzID0ge1xuICAgIGRvdEFsbDogJ3MnLFxuICAgIGdsb2JhbDogJ2cnLFxuICAgIGlnbm9yZUNhc2U6ICdpJyxcbiAgICBtdWx0aWxpbmU6ICdtJyxcbiAgICBzdGlja3k6ICd5J1xuICB9O1xuXG4gIGlmIChJTkRJQ0VTX1NVUFBPUlQpIHBhaXJzLmhhc0luZGljZXMgPSAnZCc7XG5cbiAgZm9yICh2YXIga2V5IGluIHBhaXJzKSBhZGRHZXR0ZXIoa2V5LCBwYWlyc1trZXldKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJlZ0V4cFByb3RvdHlwZSwgJ2ZsYWdzJykuZ2V0LmNhbGwoTyk7XG5cbiAgcmV0dXJuIHJlc3VsdCAhPT0gZXhwZWN0ZWQgfHwgY2FsbHMgIT09IGV4cGVjdGVkO1xufSk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXJcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3NcbmlmIChGT1JDRUQpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihSZWdFeHBQcm90b3R5cGUsICdmbGFncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IHJlZ0V4cEZsYWdzXG59KTtcbiIsImV4cG9ydCBpbnRlcmZhY2UgR3JhbW1hclJ1bGUge1xuICByZWdleHA6IFJlZ0V4cDtcbiAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgbGFiZWxQbGFjZWhvbGRlcj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIVE1MQmxvY2tSdWxlIHtcbiAgc3RhcnQ6IFJlZ0V4cDtcbiAgZW5kOiBSZWdFeHAgfCBmYWxzZTtcbiAgcGFyYUludGVycnVwdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVDb21tYW5kIHtcbiAgdHlwZTogJ2lubGluZSc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBzZXQ6IHtcbiAgICBwcmU6IHN0cmluZztcbiAgICBwb3N0OiBzdHJpbmc7XG4gIH07XG4gIHVuc2V0OiB7XG4gICAgcHJlUGF0dGVybjogUmVnRXhwO1xuICAgIHBvc3RQYXR0ZXJuOiBSZWdFeHA7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGluZUNvbW1hbmQge1xuICB0eXBlOiAnbGluZSc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBzZXQ6IHtcbiAgICBwYXR0ZXJuOiBSZWdFeHA7XG4gICAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgfTtcbiAgdW5zZXQ6IHtcbiAgICBwYXR0ZXJuOiBSZWdFeHA7XG4gICAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ29tbWFuZCA9IElubGluZUNvbW1hbmQgfCBMaW5lQ29tbWFuZDtcblxuY29uc3QgcmVwbGFjZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBSZWdFeHA+ID0ge1xuICBBU0NJSVB1bmN0dWF0aW9uOiAvWyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXl9ge3x9flxcXFxdLywgIFxuICBOb3RUcmlnZ2VyQ2hhcjogL1teYF8qW1xcXSgpPD4hfl0vLFxuICBTY2hlbWU6IC9bQS1aYS16XVtBLVphLXowLTkrLi1dezEsMzF9LyxcbiAgRW1haWw6IC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKi8sIC8vIEZyb20gQ29tbW9uTWFyayBzcGVjXG4gIEhUTUxPcGVuVGFnOiAvPEhUTUxUYWdOYW1lKD86SFRNTEF0dHJpYnV0ZSkqXFxzKlxcLz8+LyxcbiAgSFRNTENsb3NlVGFnOiAvPFxcL0hUTUxUYWdOYW1lXFxzKj4vLFxuICBIVE1MVGFnTmFtZTogL1tBLVphLXpdW0EtWmEtejAtOS1dKi8sIFxuICBIVE1MQ29tbWVudDogLzwhLS0oPzpbXj4tXXwoPzpbXj4tXSg/OlteLV18LVteLV0pKlteLV0pKS0tPi8sXG4gIEhUTUxQSTogLzxcXD8oPzp8LnwoPzpbXj9dfFxcP1tePl0pKilcXD8+LyxcbiAgSFRNTERlY2xhcmF0aW9uOiAvPCFbQS1aXStcXHNbXj5dKj4vLFxuICBIVE1MQ0RBVEE6IC88IVxcW0NEQVRBXFxbLio/XFxdXFxdPi8sXG4gIEhUTUxBdHRyaWJ1dGU6IC9cXHMrW0EtWmEtel86XVtBLVphLXowLTlfLjotXSooPzpIVE1MQXR0VmFsdWUpPy8sXG4gIEhUTUxBdHRWYWx1ZTogL1xccyo9XFxzKig/Oig/OidbXiddKicpfCg/OlwiW15cIl0qXCIpfCg/OlteXFxzXCInPTw+YF0rKSkvLFxuICBLbm93blRhZzogL2FkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoMXxoMnxoM3xoNHxoNXxoNnxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlY3Rpb258c291cmNlfHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwvXG59O1xuXG4vLyBGcm9tIENvbW1vbk1hcmsuanMuIFxuZXhwb3J0IGNvbnN0IHB1bmN0dWF0aW9uTGVhZGluZyA9IG5ldyBSZWdFeHAoL14oPzpbIVwiIyQlJicoKSorLFxcLS4vOjs8PT4/QFtcXF1cXFxcXl9ge3x9flxceEExXFx4QTdcXHhBQlxceEI2XFx4QjdcXHhCQlxceEJGXFx1MDM3RVxcdTAzODdcXHUwNTVBLVxcdTA1NUZcXHUwNTg5XFx1MDU4QVxcdTA1QkVcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTBBRjBcXHUwREY0XFx1MEU0RlxcdTBFNUFcXHUwRTVCXFx1MEYwNC1cXHUwRjEyXFx1MEYxNFxcdTBGM0EtXFx1MEYzRFxcdTBGODVcXHUwRkQwLVxcdTBGRDRcXHUwRkQ5XFx1MEZEQVxcdTEwNEEtXFx1MTA0RlxcdTEwRkJcXHUxMzYwLVxcdTEzNjhcXHUxNDAwXFx1MTY2RFxcdTE2NkVcXHUxNjlCXFx1MTY5Q1xcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTAtXFx1MjAyN1xcdTIwMzAtXFx1MjA0M1xcdTIwNDUtXFx1MjA1MVxcdTIwNTMtXFx1MjA1RVxcdTIwN0RcXHUyMDdFXFx1MjA4RFxcdTIwOEVcXHUyMzA4LVxcdTIzMEJcXHUyMzI5XFx1MjMyQVxcdTI3NjgtXFx1Mjc3NVxcdTI3QzVcXHUyN0M2XFx1MjdFNi1cXHUyN0VGXFx1Mjk4My1cXHUyOTk4XFx1MjlEOC1cXHUyOURCXFx1MjlGQ1xcdTI5RkRcXHUyQ0Y5LVxcdTJDRkNcXHUyQ0ZFXFx1MkNGRlxcdTJENzBcXHUyRTAwLVxcdTJFMkVcXHUyRTMwLVxcdTJFNDJcXHUzMDAxLVxcdTMwMDNcXHUzMDA4LVxcdTMwMTFcXHUzMDE0LVxcdTMwMUZcXHUzMDMwXFx1MzAzRFxcdTMwQTBcXHUzMEZCXFx1QTRGRVxcdUE0RkZcXHVBNjBELVxcdUE2MEZcXHVBNjczXFx1QTY3RVxcdUE2RjItXFx1QTZGN1xcdUE4NzQtXFx1QTg3N1xcdUE4Q0VcXHVBOENGXFx1QThGOC1cXHVBOEZBXFx1QThGQ1xcdUE5MkVcXHVBOTJGXFx1QTk1RlxcdUE5QzEtXFx1QTlDRFxcdUE5REVcXHVBOURGXFx1QUE1Qy1cXHVBQTVGXFx1QUFERVxcdUFBREZcXHVBQUYwXFx1QUFGMVxcdUFCRUJcXHVGRDNFXFx1RkQzRlxcdUZFMTAtXFx1RkUxOVxcdUZFMzAtXFx1RkU1MlxcdUZFNTQtXFx1RkU2MVxcdUZFNjNcXHVGRTY4XFx1RkU2QVxcdUZFNkJcXHVGRjAxLVxcdUZGMDNcXHVGRjA1LVxcdUZGMEFcXHVGRjBDLVxcdUZGMEZcXHVGRjFBXFx1RkYxQlxcdUZGMUZcXHVGRjIwXFx1RkYzQi1cXHVGRjNEXFx1RkYzRlxcdUZGNUJcXHVGRjVEXFx1RkY1Ri1cXHVGRjY1XXxcXHVEODAwW1xcdUREMDAtXFx1REQwMlxcdURGOUZcXHVERkQwXXxcXHVEODAxXFx1REQ2RnxcXHVEODAyW1xcdURDNTdcXHVERDFGXFx1REQzRlxcdURFNTAtXFx1REU1OFxcdURFN0ZcXHVERUYwLVxcdURFRjZcXHVERjM5LVxcdURGM0ZcXHVERjk5LVxcdURGOUNdfFxcdUQ4MDRbXFx1REM0Ny1cXHVEQzREXFx1RENCQlxcdURDQkNcXHVEQ0JFLVxcdURDQzFcXHVERDQwLVxcdURENDNcXHVERDc0XFx1REQ3NVxcdUREQzUtXFx1RERDOVxcdUREQ0RcXHVERERCXFx1RERERC1cXHVERERGXFx1REUzOC1cXHVERTNEXFx1REVBOV18XFx1RDgwNVtcXHVEQ0M2XFx1RERDMS1cXHVEREQ3XFx1REU0MS1cXHVERTQzXFx1REYzQy1cXHVERjNFXXxcXHVEODA5W1xcdURDNzAtXFx1REM3NF18XFx1RDgxQVtcXHVERTZFXFx1REU2RlxcdURFRjVcXHVERjM3LVxcdURGM0JcXHVERjQ0XXxcXHVEODJGXFx1REM5RnxcXHVEODM2W1xcdURFODctXFx1REU4Ql0pLyk7XG5cbmV4cG9ydCBjb25zdCBwdW5jdHVhdGlvblRyYWlsaW5nID0gbmV3IFJlZ0V4cCgvKD86WyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXFxcXF5fYHt8fX5cXHhBMVxceEE3XFx4QUJcXHhCNlxceEI3XFx4QkJcXHhCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwQUYwXFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkRcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMjdcXHUyMDMwLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTQyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzlcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURGM0MtXFx1REYzRV18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdKSQvKTtcblxuLyoqXG4gKiBUaGlzIGlzIENvbW1vbk1hcmsncyBibG9jayBncmFtbWFyLCBidXQgd2UncmUgaWdub3JpbmcgbmVzdGVkIGJsb2NrcyBoZXJlLiAgXG4gKi8gXG5leHBvcnQgY29uc3QgbGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHsgXG4gIFRNSDE6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMVwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgxXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUgyOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgyXCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDJcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDM6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgzXCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDNcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDQ6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INFwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg0XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg1OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg1XCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDVcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDY6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyMjIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg2XCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDZcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNQmxvY2txdW90ZTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfT5bIF0/KSguKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1CbG9ja3F1b3RlXCI+JDE8L3NwYW4+JCQyJ1xuICB9LFxuICBUTUNvZGVGZW5jZUJhY2t0aWNrT3BlbjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5gYGBgKilcXHMqKShbXmBdKj8pKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlQmFja3RpY2tcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNSW5mb1N0cmluZ1wiPiQzPC9zcGFuPiQ0J1xuICB9LFxuICBUTUNvZGVGZW5jZVRpbGRlT3BlbjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5+fn5+KilcXHMqKSguKj8pKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlVGlsZGVcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNSW5mb1N0cmluZ1wiPiQzPC9zcGFuPiQ0J1xuICB9LFxuICBUTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2U6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+YGBgYCopKShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZUJhY2t0aWNrXCI+JDE8L3NwYW4+JDMnXG4gIH0sXG4gIFRNQ29kZUZlbmNlVGlsZGVDbG9zZTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5+fn5+KikpKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlVGlsZGVcIj4kMTwvc3Bhbj4kMydcbiAgfSxcbiAgVE1CbGFua0xpbmU6IHsgXG4gICAgcmVnZXhwOiAvXihbIFxcdF0qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJyQwJ1xuICB9LFxuICBUTVNldGV4dEgxTWFya2VyOiB7IFxuICAgIHJlZ2V4cDogL14gezAsM309K1xccyokLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1TZXRleHRIMU1hcmtlclwiPiQwPC9zcGFuPidcbiAgfSxcbiAgVE1TZXRleHRIMk1hcmtlcjogeyBcbiAgICByZWdleHA6IC9eIHswLDN9LStcXHMqJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNU2V0ZXh0SDFNYXJrZXJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNSFI6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oXFwqWyBcXHRdKlxcKlsgXFx0XSpcXCpbIFxcdCpdKil8KC1bIFxcdF0qLVsgXFx0XSotWyBcXHQtXSopfChfWyBcXHRdKl9bIFxcdF0qX1sgXFx0X10qKSkkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IUlwiPiQwPC9zcGFuPidcbiAgfSxcbiAgVE1VTDogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfVsrKi1dIHsxLDR9KSguKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1VTFwiPiQxPC9zcGFuPiQkMidcbiAgfSxcbiAgVE1PTDogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfVxcZHsxLDl9Wy4pXSB7MSw0fSkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNT0xcIj4kMTwvc3Bhbj4kJDInXG4gIH0sXG4gIC8vIFRPRE86IFRoaXMgaXMgY3VycmVudGx5IHByZXZlbnRpbmcgc3VibGlzdHMgKGFuZCBhbnkgY29udGVudCB3aXRoaW4gbGlzdCBpdGVtcywgcmVhbGx5KSBmcm9tIHdvcmtpbmdcbiAgVE1JbmRlbnRlZENvZGU6IHsgXG4gICAgcmVnZXhwOiAvXiggezR9fFxcdCkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSW5kZW50ZWRDb2RlXCI+JDE8L3NwYW4+JDInXG4gIH0sXG4gIFRNTGlua1JlZmVyZW5jZURlZmluaXRpb246IHtcbiAgICAvLyBUT0RPOiBMaW5rIGRlc3RpbmF0aW9uIGNhbid0IGluY2x1ZGUgdW5iYWxhbmNlZCBwYXJhbnRoZXNlcywgYnV0IHdlIGp1c3QgaWdub3JlIHRoYXQgaGVyZSBcbiAgICByZWdleHA6IC9eKCB7MCwzfVxcW1xccyopKFteXFxzXFxdXSg/OlteXFxdXXxcXFxcXFxdKSo/KShcXHMqXFxdOlxccyopKCg/OlteXFxzPD5dKyl8KD86PCg/OltePD5cXFxcXXxcXFxcLikqPikpPyhcXHMqKSgoPzpcXCgoPzpbXigpXFxcXF18XFxcXC4pKlxcKSl8KD86XCIoPzpbXlwiXFxcXF18XFxcXC4pKlwiKXwoPzonKD86W14nXFxcXF18XFxcXC4pKicpKT8oXFxzKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiPiQxPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1MaW5rTGFiZWwgVE1MaW5rTGFiZWxfRGVmaW5pdGlvblwiPiQyPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCI+JDM8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUxpbmtEZXN0aW5hdGlvblwiPiQ0PC9zcGFuPiQ1PHNwYW4gY2xhc3M9XCJUTUxpbmtUaXRsZVwiPiQ2PC9zcGFuPiQ3JyxcbiAgICBsYWJlbFBsYWNlaG9sZGVyOiAyLCAvLyB0aGlzIGRlZmluZXMgd2hpY2ggcGxhY2Vob2xkZXIgaW4gdGhlIGFib3ZlIHJlZ2V4IGlzIHRoZSBsaW5rIFwibGFiZWxcIlxuICB9LFxufTtcblxuLyoqXG4gKiBIVE1MIGJsb2NrcyBoYXZlIG11bHRpcGxlIGRpZmZlcmVudCBjbGFzc2VzIG9mIG9wZW5lciBhbmQgY2xvc2VyLiBUaGlzIGFycmF5IGRlZmluZXMgYWxsIHRoZSBjYXNlc1xuICovXG5leHBvcnQgY29uc3QgaHRtbEJsb2NrR3JhbW1hcjogSFRNTEJsb2NrUnVsZVtdID0gW1xuICB7IHN0YXJ0OiAvXiB7MCwzfTwoPzpzY3JpcHR8cHJlfHN0eWxlKSg/Olxcc3w+fCQpL2ksIGVuZDogLyg/OjxcXC9zY3JpcHQ+fDxcXC9wcmU+fDxcXC9zdHlsZT4pL2ksIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308IS0tLywgZW5kOiAvLS0+LywgcGFyYUludGVycnVwdDogdHJ1ZSB9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTxcXD8vLCBlbmQ6IC9cXD8+LywgcGFyYUludGVycnVwdDogdHJ1ZSB9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTwhW0EtWl0vLCBlbmQ6IC8+LywgcGFyYUludGVycnVwdCA6IHRydWV9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTwhXFxbQ0RBVEFcXFsvLCBlbmQ6IC9cXF1cXF0+LywgcGFyYUludGVycnVwdCA6IHRydWV9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfSg/Ojx8PFxcLykoPzpLbm93blRhZykoPzpcXHN8PnxcXC8+fCQpL2ksIGVuZDogZmFsc2UsIHBhcmFJbnRlcnJ1cHQ6IHRydWV9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfSg/OkhUTUxPcGVuVGFnfEhUTUxDbG9zZVRhZylcXHMqJC8sIGVuZDogZmFsc2UsIHBhcmFJbnRlcnJ1cHQ6IGZhbHNlfSxcbl07XG5cbi8qKlxuICogU3RydWN0dXJlIG9mIHRoZSBvYmplY3Q6XG4gKiBUb3AgbGV2ZWwgZW50cmllcyBhcmUgcnVsZXMsIGVhY2ggY29uc2lzdGluZyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGluIHN0cmluZyBmb3JtYXQpIGFzIHdlbGwgYXMgYSByZXBsYWNlbWVudC5cbiAqIEluIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zLCByZXBsYWNlbWVudHMgZnJvbSB0aGUgb2JqZWN0ICdyZXBsYWNlbWVudHMnIHdpbGwgYmUgcHJvY2Vzc2VkIGJlZm9yZSBjb21waWxpbmcgaW50byB0aGUgcHJvcGVydHkgcmVnZXhwLlxuICovXG5leHBvcnQgY29uc3QgaW5saW5lR3JhbW1hcjogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+ID0ge1xuICBlc2NhcGUgOiB7XG4gICAgcmVnZXhwOiAvXlxcXFwoQVNDSUlQdW5jdHVhdGlvbikvLFxuICAgIHJlcGxhY2VtZW50IDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUVzY2FwZVwiPlxcXFw8L3NwYW4+JDEnXG4gIH0sXG4gIGNvZGUgOiB7XG4gICAgcmVnZXhwOiAvXihgKykoKD86W15gXSl8KD86W15gXS4qP1teYF0pKShcXDEpLyxcbiAgICByZXBsYWNlbWVudCA6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlXCI+JDE8L3NwYW4+PGNvZGUgY2xhc3M9XCJUTUNvZGVcIj4kMjwvY29kZT48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlXCI+JDM8L3NwYW4+JyBcbiAgfSxcbiAgYXV0b2xpbmsgOiB7XG4gICAgcmVnZXhwOiAvXjwoKD86U2NoZW1lOlteXFxzPD5dKil8KD86RW1haWwpKT4vLFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQXV0b2xpbmtcIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1BdXRvbGlua1wiPiQxPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUF1dG9saW5rXCI+Jmd0Ozwvc3Bhbj4nXG4gIH0sXG4gIGh0bWwgOiB7XG4gICAgcmVnZXhwOiAvXigoPzpIVE1MT3BlblRhZyl8KD86SFRNTENsb3NlVGFnKXwoPzpIVE1MQ29tbWVudCl8KD86SFRNTFBJKXwoPzpIVE1MRGVjbGFyYXRpb24pfCg/OkhUTUxDREFUQSkpLyxcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1IVE1MXCI+JDE8L3NwYW4+JyxcbiAgfSxcbiAgbGlua09wZW4gOiB7XG4gICAgcmVnZXhwOiAvXlxcWy8sXG4gICAgcmVwbGFjZW1lbnQ6ICcnXG4gIH0sXG4gIGltYWdlT3BlbiA6IHtcbiAgICByZWdleHA6IC9eIVxcWy8sXG4gICAgcmVwbGFjZW1lbnQgOiAnJ1xuICB9LFxuICBsaW5rTGFiZWwgOiB7XG4gICAgcmVnZXhwOiAvXihcXFtcXHMqKShbXlxcXV0qPykoXFxzKlxcXSkvLFxuICAgIHJlcGxhY2VtZW50OiAnJyxcbiAgICBsYWJlbFBsYWNlaG9sZGVyOiAyXG4gIH0sXG4gIGRlZmF1bHQgOiB7XG4gICAgcmVnZXhwOiAvXigufCg/Ok5vdFRyaWdnZXJDaGFyKykpLyxcbiAgICByZXBsYWNlbWVudDogJyQxJ1xuICB9XG59O1xuXG4vLyBQcm9jZXNzIHJlcGxhY2VtZW50cyBpbiByZWdleHBzXG5jb25zdCByZXBsYWNlbWVudFJlZ2V4cCA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKS5qb2luKCd8JykpO1xuXG4vLyBJbmxpbmVcbmNvbnN0IGlubGluZVJ1bGVzID0gWy4uLk9iamVjdC5rZXlzKGlubGluZUdyYW1tYXIpXTtcbmZvciAobGV0IHJ1bGUgb2YgaW5saW5lUnVsZXMpIHtcbiAgbGV0IHJlID0gaW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuc291cmNlO1xuICAvLyBSZXBsYWNlIHdoaWxlIHRoZXJlIGlzIHNvbWV0aGluZyB0byByZXBsYWNlLiBUaGlzIG1lYW5zIGl0IGFsc28gd29ya3Mgb3ZlciBtdWx0aXBsZSBsZXZlbHMgKHJlcGxhY2VtZW50cyBjb250YWluaW5nIHJlcGxhY2VtZW50cylcbiAgd2hpbGUgKHJlLm1hdGNoKHJlcGxhY2VtZW50UmVnZXhwKSkge1xuICAgIHJlID0gcmUucmVwbGFjZShyZXBsYWNlbWVudFJlZ2V4cCwgKHN0cmluZykgPT4geyByZXR1cm4gcmVwbGFjZW1lbnRzW3N0cmluZ10uc291cmNlOyB9KTtcbiAgfVxuICBpbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmUsIGlubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLmZsYWdzKTtcbn1cblxuLy8gSFRNTCBCbG9jayAob25seSBvcGVuaW5nIHJ1bGUgaXMgcHJvY2Vzc2VkIGN1cnJlbnRseSlcbmZvciAobGV0IHJ1bGUgb2YgaHRtbEJsb2NrR3JhbW1hcikge1xuICBsZXQgcmUgPSBydWxlLnN0YXJ0LnNvdXJjZTtcbiAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZS4gVGhpcyBtZWFucyBpdCBhbHNvIHdvcmtzIG92ZXIgbXVsdGlwbGUgbGV2ZWxzIChyZXBsYWNlbWVudHMgY29udGFpbmluZyByZXBsYWNlbWVudHMpXG4gIHdoaWxlIChyZS5tYXRjaChyZXBsYWNlbWVudFJlZ2V4cCkpIHtcbiAgICByZSA9IHJlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChzdHJpbmcpID0+IHsgcmV0dXJuIHJlcGxhY2VtZW50c1tzdHJpbmddLnNvdXJjZTsgfSk7XG4gIH1cbiAgcnVsZS5zdGFydCA9IG5ldyBSZWdFeHAocmUsIHJ1bGUuc3RhcnQuZmxhZ3MpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtZXJnZWQgaW5saW5lIGdyYW1tYXIgYnkgY29tYmluaW5nIHRoZSBkZWZhdWx0IGlubGluZSBncmFtbWFyIHdpdGggY3VzdG9tIHJ1bGVzLlxuICogQ3VzdG9tIHJ1bGVzIGFyZSBwcm9jZXNzZWQgYW5kIHRoZWlyIHJlZ2V4cCBwYXR0ZXJucyBhcmUgZXhwYW5kZWQgd2l0aCByZXBsYWNlbWVudHMuXG4gKiBAcGFyYW0gY3VzdG9tUnVsZXMgLSBPYmplY3QgY29udGFpbmluZyBjdXN0b20gaW5saW5lIGdyYW1tYXIgcnVsZXNcbiAqIEByZXR1cm5zIE1lcmdlZCBpbmxpbmUgZ3JhbW1hciBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lcmdlZElubGluZUdyYW1tYXIoY3VzdG9tUnVsZXM6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHt9KTogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+IHtcbiAgY29uc3QgbWVyZ2VkID0geyAuLi5pbmxpbmVHcmFtbWFyIH07XG4gIFxuICAvLyBQcm9jZXNzIGN1c3RvbSBydWxlc1xuICBmb3IgKGNvbnN0IFtydWxlTmFtZSwgcnVsZV0gb2YgT2JqZWN0LmVudHJpZXMoY3VzdG9tUnVsZXMpKSB7XG4gICAgLy8gQ29weSB0aGUgcnVsZSB0byBhdm9pZCBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsXG4gICAgY29uc3QgcHJvY2Vzc2VkUnVsZSA9IHsgLi4ucnVsZSB9O1xuICAgIFxuICAgIC8vIFByb2Nlc3MgcmVwbGFjZW1lbnRzIGluIHRoZSByZWdleHBcbiAgICBsZXQgcmVnZXhwU291cmNlID0gcnVsZS5yZWdleHAuc291cmNlO1xuICAgIGNvbnN0IHJlcGxhY2VtZW50UmVnZXhwID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLmpvaW4oJ3wnKSk7XG4gICAgXG4gICAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZVxuICAgIHdoaWxlIChyZWdleHBTb3VyY2UubWF0Y2gocmVwbGFjZW1lbnRSZWdleHApKSB7XG4gICAgICByZWdleHBTb3VyY2UgPSByZWdleHBTb3VyY2UucmVwbGFjZShyZXBsYWNlbWVudFJlZ2V4cCwgKG1hdGNoKSA9PiB7XG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudHNbbWF0Y2hdLnNvdXJjZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICBwcm9jZXNzZWRSdWxlLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmVnZXhwU291cmNlLCBydWxlLnJlZ2V4cC5mbGFncyk7XG4gICAgbWVyZ2VkW3J1bGVOYW1lXSA9IHByb2Nlc3NlZFJ1bGU7XG4gIH1cbiAgXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogRXNjYXBlcyBIVE1MIHNwZWNpYWwgY2hhcmFjdGVycyAoPCwgPiwgYW5kICYpIGluIHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSByYXcgc3RyaW5nIHRvIGJlIGVzY2FwZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzdHJpbmcsIHJlYWR5IHRvIGJlIHVzZWQgaW4gSFRNTFxuICovXG5leHBvcnQgZnVuY3Rpb24gaHRtbGVzY2FwZShzdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAoc3RyaW5nID8gc3RyaW5nIDogJycpXG4gICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbn1cblxuLyoqXG4gKiBDb250YWlucyB0aGUgY29tbWFuZHMgdGhhdCBjYW4gYmUgc2VudCB0byB0aGUgZWRpdG9yLiBDb250YWlucyBvYmplY3RzIHdpdGggYSBuYW1lIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZC5cbiAqIEVhY2ggb2YgdGhlIG9iamVjdHMgY29udGFpbnMgdGhlIGZvbGxvd2luZyBrZXlzOlxuICogXG4gKiAgIC0gdHlwZTogQ2FuIGJlIGVpdGhlciBpbmxpbmUgKGZvciBpbmxpbmUgZm9ybWF0dGluZykgb3IgbGluZSAoZm9yIGJsb2NrIC8gbGluZSBmb3JtYXR0aW5nKS5cbiAqICAgLSBjbGFzc05hbWU6IFVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNvbW1hbmQgaXMgYWN0aXZlIGF0IGEgZ2l2ZW4gcG9zaXRpb24uIFxuICogICAgIEZvciBsaW5lIGZvcm1hdHRpbmcsIHRoaXMgbG9va3MgYXQgdGhlIGNsYXNzIG9mIHRoZSBsaW5lIGVsZW1lbnQuIEZvciBpbmxpbmUgZWxlbWVudHMsIHRyaWVzIHRvIGZpbmQgYW4gZW5jbG9zaW5nIGVsZW1lbnQgd2l0aCB0aGF0IGNsYXNzLlxuICogICAtIHNldCAvIHVuc2V0OiBDb250YWluIGluc3RydWN0aW9ucyBob3cgdG8gc2V0IGFuZCB1bnNldCB0aGUgY29tbWFuZC4gRm9yIGxpbmUgdHlwZSBjb21tYW5kcywgYm90aCBjb25zaXN0IG9mIGEgcGF0dGVybiBhbmQgcmVwbGFjZW1lbnQgdGhhdCBcbiAqICAgICB3aWxsIGJlIGFwcGxpZWQgdG8gZWFjaCBsaW5lICh1c2luZyBTdHJpbmcucmVwbGFjZSkuIEZvciBpbmxpbmUgdHlwZSBjb21tYW5kcywgdGhlIHNldCBvYmplY3QgY29udGFpbnMgYSBwcmUgYW5kIHBvc3Qgc3RyaW5nIHdoaWNoIHdpbGxcbiAqICAgICBiZSBpbnNlcnRlZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzZWxlY3Rpb24uIFRoZSB1bnNldCBvYmplY3QgY29udGFpbnMgYSBwcmVQYXR0ZXJuIGFuZCBhIHBvc3RQYXR0ZXJuLiBCb3RoIHNob3VsZCBiZSByZWd1bGFyIGV4cHJlc3Npb25zIGFuZCBcbiAqICAgICB0aGV5IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9ydGlvbiBvZiB0aGUgbGluZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzZWxlY3Rpb24gKHVzaW5nIFN0cmluZy5yZXBsYWNlLCB3aXRoIGFuIGVtcHR5IHJlcGxhY2VtZW50IHN0cmluZykuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21tYW5kczogUmVjb3JkPHN0cmluZywgQ29tbWFuZD4gPSB7XG4gIC8vIFJlcGxhY2VtZW50cyBmb3IgdW5zZXQgZm9yIGlubGluZSBjb21tYW5kcyBhcmUgJycgYnkgZGVmYXVsdFxuICBib2xkOiB7XG4gICAgdHlwZTogJ2lubGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNU3Ryb25nJywgXG4gICAgc2V0OiB7cHJlOiAnKionLCBwb3N0OiAnKionfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOiAvKD86XFwqXFwqfF9fKSQvLCBwb3N0UGF0dGVybjogL14oPzpcXCpcXCp8X18pL31cbiAgfSwgXG4gIGl0YWxpYzoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUVtJywgXG4gICAgc2V0OiB7cHJlOiAnKicsIHBvc3Q6ICcqJ30sIFxuICAgIHVuc2V0OiB7cHJlUGF0dGVybjogLyg/OlxcKnxfKSQvLCBwb3N0UGF0dGVybjogL14oPzpcXCp8XykvfVxuICB9LFxuICBjb2RlOiB7XG4gICAgdHlwZTogJ2lubGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNQ29kZScsIFxuICAgIHNldDoge3ByZTogJ2AnLCBwb3N0OiAnYCd9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46IC9gKyQvLCBwb3N0UGF0dGVybjogL15gKy99IC8vIEZJWE1FIHRoaXMgZG9lc24ndCBlbnN1cmUgYmFsYW5jZWQgYmFja3RpY2tzIHJpZ2h0IG5vd1xuICB9LCBcbiAgc3RyaWtldGhyb3VnaDoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVN0cmlrZXRocm91Z2gnLCBcbiAgICBzZXQ6IHtwcmU6ICd+ficsIHBvc3Q6ICd+fid9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46L35+JC8sIHBvc3RQYXR0ZXJuOiAvXn5+LyB9XG4gIH0sXG4gIGgxOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgxJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9I1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDI6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDInLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGgzOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgzJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg0OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg0JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjI1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDU6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDUnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg2OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg2JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jIyMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIHVsOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVVMJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICctICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9WysqLV0gezEsNH0pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgb2w6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNT0wnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyQjLiAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfVxcZHsxLDl9Wy4pXSB7MSw0fSkoLiopJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LCBcbiAgYmxvY2txdW90ZToge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1CbG9ja3F1b3RlJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICc+ICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9PlsgXT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbn07IiwiaW1wb3J0IHtcbiAgaW5saW5lR3JhbW1hcixcbiAgbGluZUdyYW1tYXIsXG4gIHB1bmN0dWF0aW9uTGVhZGluZyxcbiAgcHVuY3R1YXRpb25UcmFpbGluZyxcbiAgaHRtbGVzY2FwZSxcbiAgaHRtbEJsb2NrR3JhbW1hcixcbiAgY29tbWFuZHMsXG4gIEhUTUxCbG9ja1J1bGUsXG4gIENvbW1hbmQsXG4gIEdyYW1tYXJSdWxlLFxuICBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyLFxufSBmcm9tIFwiLi9ncmFtbWFyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yUHJvcHMge1xuICBlbGVtZW50Pzogc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG4gIGVkaXRvcj86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICBjb250ZW50Pzogc3RyaW5nO1xuICB0ZXh0YXJlYT86IHN0cmluZyB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gIGN1c3RvbUlubGluZUdyYW1tYXI/OiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb24ge1xuICByb3c6IG51bWJlcjtcbiAgY29sOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeVN0YXRlIHtcbiAgY29udGVudDogc3RyaW5nO1xuICBzZWxlY3Rpb246IFBvc2l0aW9uIHwgbnVsbDtcbiAgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlRXZlbnQge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGxpbmVzRGlydHk6IGJvb2xlYW5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25FdmVudCB7XG4gIGZvY3VzOiBQb3NpdGlvbjtcbiAgYW5jaG9yOiBQb3NpdGlvbjtcbiAgY29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcEV2ZW50IHtcbiAgZGF0YVRyYW5zZmVyOiBEYXRhVHJhbnNmZXI7XG59XG5cbnR5cGUgRXZlbnRUeXBlID0gJ2NoYW5nZScgfCAnc2VsZWN0aW9uJyB8ICdkcm9wJztcbnR5cGUgRXZlbnRIYW5kbGVyPFQ+ID0gKGV2ZW50OiBUKSA9PiB2b2lkO1xuXG5leHBvcnQgY2xhc3MgRWRpdG9yIHtcbiAgcHVibGljIGU6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyB0ZXh0YXJlYTogSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lRWxlbWVudHM6IE5vZGVMaXN0T2Y8Q2hpbGROb2RlPiB8IEhUTUxDb2xsZWN0aW9uIHwgQ2hpbGROb2RlW10gPSBbXTtcbiAgcHVibGljIGxpbmVUeXBlczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVDYXB0dXJlczogUmVnRXhwRXhlY0FycmF5W10gPSBbXTtcbiAgcHVibGljIGxpbmVSZXBsYWNlbWVudHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5rTGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZURpcnR5OiBib29sZWFuW10gPSBbXTtcbiAgcHVibGljIGxhc3RDb21tYW5kU3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1c3RvbUlubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHt9O1xuICBwcml2YXRlIG1lcmdlZElubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IGlubGluZUdyYW1tYXI7XG4gIHByaXZhdGUgaGFzRm9jdXM6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIGxhc3RTZWxlY3Rpb246IHsgZm9jdXM6IFBvc2l0aW9uIHwgbnVsbDsgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgfSB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBsaXN0ZW5lcnM6IHtcbiAgICBjaGFuZ2U6IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD5bXTtcbiAgICBzZWxlY3Rpb246IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD5bXTtcbiAgICBkcm9wOiBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PltdO1xuICB9ID0ge1xuICAgIGNoYW5nZTogW10sXG4gICAgc2VsZWN0aW9uOiBbXSxcbiAgICBkcm9wOiBbXSxcbiAgfTtcblxuICBwcml2YXRlIHVuZG9TdGFjazogSGlzdG9yeVN0YXRlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWRvU3RhY2s6IEhpc3RvcnlTdGF0ZVtdID0gW107XG4gIHByaXZhdGUgaXNSZXN0b3JpbmdIaXN0b3J5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgbWF4SGlzdG9yeTogbnVtYmVyID0gMTAwO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFZGl0b3JQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLnRleHRhcmVhID0gbnVsbDtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gICAgdGhpcy5saW5lRWxlbWVudHMgPSBbXSBhcyBDaGlsZE5vZGVbXTtcbiAgICB0aGlzLmxpbmVUeXBlcyA9IFtdO1xuICAgIHRoaXMubGluZUNhcHR1cmVzID0gW107XG4gICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzID0gW107XG4gICAgdGhpcy5saW5rTGFiZWxzID0gW107XG4gICAgdGhpcy5saW5lRGlydHkgPSBbXTtcbiAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuaGFzRm9jdXMgPSB0cnVlO1xuICAgIHRoaXMubGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgdGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyID0gcHJvcHMuY3VzdG9tSW5saW5lR3JhbW1hciB8fCB7fTtcbiAgICB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIgPSBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyKHRoaXMuY3VzdG9tSW5saW5lR3JhbW1hcik7XG5cbiAgICB0aGlzLmxpc3RlbmVycyA9IHtcbiAgICAgIGNoYW5nZTogW10sXG4gICAgICBzZWxlY3Rpb246IFtdLFxuICAgICAgZHJvcDogW10sXG4gICAgfTtcblxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBwcm9wcy5lbGVtZW50O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJvcHMudGV4dGFyZWEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMudGV4dGFyZWEpIGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgfSBlbHNlIGlmIChwcm9wcy50ZXh0YXJlYSkge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IHByb3BzLnRleHRhcmVhO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRleHRhcmVhKSB7XG4gICAgICBpZiAoIWVsZW1lbnQpIGVsZW1lbnQgPSB0aGlzLnRleHRhcmVhO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYm9keVwiKVswXTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC50YWdOYW1lID09PSBcIlRFWFRBUkVBXCIpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBlbGVtZW50IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgICBlbGVtZW50ID0gdGhpcy50ZXh0YXJlYS5wYXJlbnROb2RlIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRleHRhcmVhKSB7XG4gICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB9XG5cbiAgICB0aGlzLnVuZG9TdGFjayA9IFtdO1xuICAgIHRoaXMucmVkb1N0YWNrID0gW107XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgICB0aGlzLm1heEhpc3RvcnkgPSAxMDA7XG5cbiAgICB0aGlzLmNyZWF0ZUVkaXRvckVsZW1lbnQoZWxlbWVudCwgcHJvcHMpO1xuICAgIHRoaXMuc2V0Q29udGVudChcbiAgICAgIHR5cGVvZiBwcm9wcy5jb250ZW50ID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gcHJvcHMuY29udGVudFxuICAgICAgICA6IHRoaXMudGV4dGFyZWFcbiAgICAgICAgPyB0aGlzLnRleHRhcmVhLnZhbHVlXG4gICAgICAgIDogXCIjIEhlbGxvIFRpbnlNREUhXFxuRWRpdCAqKmhlcmUqKlwiXG4gICAgKTtcbiAgICBcbiAgICB0aGlzLmUhLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB0aGlzLmhhbmRsZVVuZG9SZWRvS2V5KGUpKTtcbiAgfVxuXG4gIGdldCBjYW5VbmRvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnVuZG9TdGFjay5sZW5ndGggPj0gMjtcbiAgfVxuXG4gIGdldCBjYW5SZWRvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlZG9TdGFjay5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoSGlzdG9yeSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHJldHVybjtcbiAgICB0aGlzLnB1c2hDdXJyZW50U3RhdGUoKTtcbiAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ3VycmVudFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMudW5kb1N0YWNrLnB1c2goe1xuICAgICAgY29udGVudDogdGhpcy5nZXRDb250ZW50KCksXG4gICAgICBzZWxlY3Rpb246IHRoaXMuZ2V0U2VsZWN0aW9uKCksXG4gICAgICBhbmNob3I6IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLnVuZG9TdGFjay5sZW5ndGggPiB0aGlzLm1heEhpc3RvcnkpIHRoaXMudW5kb1N0YWNrLnNoaWZ0KCk7XG4gIH1cblxuICBwdWJsaWMgdW5kbygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy51bmRvU3RhY2subGVuZ3RoIDwgMikgcmV0dXJuO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gdHJ1ZTtcbiAgICB0aGlzLnB1c2hDdXJyZW50U3RhdGUoKTtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy51bmRvU3RhY2sucG9wKCkhO1xuICAgIHRoaXMucmVkb1N0YWNrLnB1c2goY3VycmVudCk7XG4gICAgY29uc3QgcHJldiA9IHRoaXMudW5kb1N0YWNrW3RoaXMudW5kb1N0YWNrLmxlbmd0aCAtIDFdO1xuICAgIHRoaXMuc2V0Q29udGVudChwcmV2LmNvbnRlbnQpO1xuICAgIGlmIChwcmV2LnNlbGVjdGlvbikgdGhpcy5zZXRTZWxlY3Rpb24ocHJldi5zZWxlY3Rpb24sIHByZXYuYW5jaG9yKTtcbiAgICB0aGlzLnVuZG9TdGFjay5wb3AoKTtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlZG8oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlZG9TdGFjay5sZW5ndGgpIHJldHVybjtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IHRydWU7XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMucmVkb1N0YWNrLnBvcCgpITtcbiAgICB0aGlzLnNldENvbnRlbnQobmV4dC5jb250ZW50KTtcbiAgICBpZiAobmV4dC5zZWxlY3Rpb24pIHRoaXMuc2V0U2VsZWN0aW9uKG5leHQuc2VsZWN0aW9uLCBuZXh0LmFuY2hvcik7XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVW5kb1JlZG9LZXkoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlzTWFjID0gL01hY3xpUG9kfGlQaG9uZXxpUGFkLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7XG4gICAgY29uc3QgY3RybCA9IGlzTWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5O1xuICAgIGlmIChjdHJsICYmICFlLmFsdEtleSkge1xuICAgICAgaWYgKGUua2V5ID09PSBcInpcIiB8fCBlLmtleSA9PT0gXCJaXCIpIHtcbiAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICB0aGlzLnJlZG8oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVuZG8oKTtcbiAgICAgICAgfVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBcInlcIiB8fCBlLmtleSA9PT0gXCJZXCIpIHtcbiAgICAgICAgdGhpcy5yZWRvKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVkaXRvckVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3BzOiBFZGl0b3JQcm9wcyk6IHZvaWQge1xuICAgIGlmIChwcm9wcyAmJiBwcm9wcy5lZGl0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5lZGl0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmVkaXRvcikgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmUgPSBwcm9wcy5lZGl0b3IgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgfVxuXG4gICAgdGhpcy5lLmNsYXNzTGlzdC5hZGQoXCJUaW55TURFXCIpO1xuICAgIHRoaXMuZS5jb250ZW50RWRpdGFibGUgPSBcInRydWVcIjtcbiAgICB0aGlzLmUuc3R5bGUud2hpdGVTcGFjZSA9IFwicHJlLXdyYXBcIjtcbiAgICAodGhpcy5lLnN0eWxlIGFzIGFueSkud2Via2l0VXNlck1vZGlmeSA9IFwicmVhZC13cml0ZS1wbGFpbnRleHQtb25seVwiO1xuXG4gICAgaWYgKHByb3BzLmVkaXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudGV4dGFyZWEgJiZcbiAgICAgICAgdGhpcy50ZXh0YXJlYS5wYXJlbnROb2RlID09PSBlbGVtZW50ICYmXG4gICAgICAgIHRoaXMudGV4dGFyZWEubmV4dFNpYmxpbmdcbiAgICAgICkge1xuICAgICAgICBlbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmUsIHRoaXMudGV4dGFyZWEubmV4dFNpYmxpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgKGUpID0+IHRoaXMuaGFuZGxlSW5wdXRFdmVudChlKSk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmVpbnB1dFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVCZWZvcmVJbnB1dEV2ZW50KGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uZW5kXCIsIChlKSA9PiB0aGlzLmhhbmRsZUlucHV0RXZlbnQoZSkpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgIGlmICh0aGlzLmhhc0ZvY3VzKSB7IHRoaXMuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoZSk7IH1cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCAoKSA9PiB0aGlzLmhhc0ZvY3VzID0gZmFsc2UgKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsICgpID0+IHRoaXMuaGFzRm9jdXMgPSB0cnVlICk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJwYXN0ZVwiLCAoZSkgPT4gdGhpcy5oYW5kbGVQYXN0ZShlKSk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJkcm9wXCIsIChlKSA9PiB0aGlzLmhhbmRsZURyb3AoZSkpO1xuICAgIHRoaXMubGluZUVsZW1lbnRzID0gdGhpcy5lLmNoaWxkTm9kZXM7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29udGVudChjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aGlsZSAodGhpcy5lIS5maXJzdENoaWxkKSB7XG4gICAgICB0aGlzLmUhLnJlbW92ZUNoaWxkKHRoaXMuZSEuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMubGluZXMgPSBjb250ZW50LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcbiAgICB0aGlzLmxpbmVEaXJ0eSA9IFtdO1xuICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGg7IGxpbmVOdW0rKykge1xuICAgICAgbGV0IGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRoaXMuZSEuYXBwZW5kQ2hpbGQobGUpO1xuICAgICAgdGhpcy5saW5lRGlydHkucHVzaCh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5saW5lVHlwZXMgPSBuZXcgQXJyYXkodGhpcy5saW5lcy5sZW5ndGgpO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250ZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGluZXMuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9ybWF0dGluZygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUxpbmVUeXBlcygpO1xuICAgIHRoaXMudXBkYXRlTGlua0xhYmVscygpO1xuICAgIHRoaXMuYXBwbHlMaW5lVHlwZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGlua0xhYmVscygpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmtMYWJlbHMgPSBbXTtcbiAgICBmb3IgKGxldCBsID0gMDsgbCA8IHRoaXMubGluZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgIGlmICh0aGlzLmxpbmVUeXBlc1tsXSA9PT0gXCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5saW5rTGFiZWxzLnB1c2goXG4gICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbbF1bXG4gICAgICAgICAgICBsaW5lR3JhbW1hci5UTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uLmxhYmVsUGxhY2Vob2xkZXIhXG4gICAgICAgICAgXVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZShyZXBsYWNlbWVudDogc3RyaW5nLCBjYXB0dXJlOiBSZWdFeHBFeGVjQXJyYXkpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlbWVudC5yZXBsYWNlKC8oXFwkezEsMn0pKFswLTldKS9nLCAoc3RyLCBwMSwgcDIpID0+IHtcbiAgICAgIGlmIChwMSA9PT0gXCIkXCIpIHJldHVybiBodG1sZXNjYXBlKGNhcHR1cmVbcGFyc2VJbnQocDIpXSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJUTUlubGluZUZvcm1hdHRlZFwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKFxuICAgICAgICAgIGNhcHR1cmVbcGFyc2VJbnQocDIpXVxuICAgICAgICApfTwvc3Bhbj5gO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUxpbmVUeXBlcygpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGlmICh0aGlzLmxpbmVEaXJ0eVtsaW5lTnVtXSkge1xuICAgICAgICBsZXQgY29udGVudEhUTUwgPSB0aGlzLnJlcGxhY2UoXG4gICAgICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2xpbmVOdW1dLFxuICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xpbmVOdW1dXG4gICAgICAgICk7XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lID0gdGhpcy5saW5lVHlwZXNbbGluZU51bV07XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkucmVtb3ZlQXR0cmlidXRlKFwic3R5bGVcIik7XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MID1cbiAgICAgICAgICBjb250ZW50SFRNTCA9PT0gXCJcIiA/IFwiPGJyIC8+XCIgOiBjb250ZW50SFRNTDtcbiAgICAgIH1cbiAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldC5saW5lTnVtID0gbGluZU51bS50b1N0cmluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZVR5cGVzKCk6IHZvaWQge1xuICAgIGxldCBjb2RlQmxvY2tUeXBlOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBjb2RlQmxvY2tTZXFMZW5ndGggPSAwO1xuICAgIGxldCBodG1sQmxvY2s6IEhUTUxCbG9ja1J1bGUgfCBmYWxzZSA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgbGluZU51bSA9IDA7IGxpbmVOdW0gPCB0aGlzLmxpbmVzLmxlbmd0aDsgbGluZU51bSsrKSB7XG4gICAgICBsZXQgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgbGV0IGxpbmVDYXB0dXJlOiBSZWdFeHBFeGVjQXJyYXkgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgbGV0IGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG5cbiAgICAgIC8vIENoZWNrIG9uZ29pbmcgY29kZSBibG9ja3NcbiAgICAgIGlmIChjb2RlQmxvY2tUeXBlID09PSBcIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlICYmIGNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGggPj0gY29kZUJsb2NrU2VxTGVuZ3RoKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZS5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgY29kZUJsb2NrVHlwZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUZlbmNlZENvZGVCYWNrdGlja1wiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNRmVuY2VkQ29kZVwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvZGVCbG9ja1R5cGUgPT09IFwiVE1Db2RlRmVuY2VUaWxkZU9wZW5cIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlVGlsZGVDbG9zZS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUgJiYgY2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aCA+PSBjb2RlQmxvY2tTZXFMZW5ndGgpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1Db2RlRmVuY2VUaWxkZUNsb3NlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VUaWxkZUNsb3NlLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICBjb2RlQmxvY2tUeXBlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNRmVuY2VkQ29kZVRpbGRlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1GZW5jZWRDb2RlXCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgSFRNTCBibG9jayB0eXBlc1xuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNUGFyYVwiICYmIGh0bWxCbG9jayA9PT0gZmFsc2UpIHtcbiAgICAgICAgZm9yIChsZXQgaHRtbEJsb2NrVHlwZSBvZiBodG1sQmxvY2tHcmFtbWFyKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZU51bV0ubWF0Y2goaHRtbEJsb2NrVHlwZS5zdGFydCkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaHRtbEJsb2NrVHlwZS5wYXJhSW50ZXJydXB0IHx8XG4gICAgICAgICAgICAgIGxpbmVOdW0gPT09IDAgfHxcbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1QYXJhXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1VTFwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNT0xcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTUJsb2NrcXVvdGVcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaHRtbEJsb2NrID0gaHRtbEJsb2NrVHlwZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChodG1sQmxvY2sgIT09IGZhbHNlKSB7XG4gICAgICAgIGxpbmVUeXBlID0gXCJUTUhUTUxCbG9ja1wiO1xuICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUhUTUxDb250ZW50XCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuXG4gICAgICAgIGlmIChodG1sQmxvY2suZW5kKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZU51bV0ubWF0Y2goaHRtbEJsb2NrLmVuZCkpIHtcbiAgICAgICAgICAgIGh0bWxCbG9jayA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBsaW5lTnVtID09PSB0aGlzLmxpbmVzLmxlbmd0aCAtIDEgfHxcbiAgICAgICAgICAgIHRoaXMubGluZXNbbGluZU51bSArIDFdLm1hdGNoKGxpbmVHcmFtbWFyLlRNQmxhbmtMaW5lLnJlZ2V4cClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGh0bWxCbG9jayA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBhbGwgcmVnZXhwcyBpZiB3ZSBoYXZlbid0IGFwcGxpZWQgb25lIG9mIHRoZSBjb2RlIGJsb2NrIHR5cGVzXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1QYXJhXCIpIHtcbiAgICAgICAgZm9yIChsZXQgdHlwZSBpbiBsaW5lR3JhbW1hcikge1xuICAgICAgICAgIGlmIChsaW5lR3JhbW1hclt0eXBlXS5yZWdleHApIHtcbiAgICAgICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXJbdHlwZV0ucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgICAgICBsaW5lVHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyW3R5cGVdLnJlcGxhY2VtZW50O1xuICAgICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSd2ZSBvcGVuZWQgYSBjb2RlIGJsb2NrLCByZW1lbWJlciB0aGF0XG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW5cIiB8fCBsaW5lVHlwZSA9PT0gXCJUTUNvZGVGZW5jZVRpbGRlT3BlblwiKSB7XG4gICAgICAgIGNvZGVCbG9ja1R5cGUgPSBsaW5lVHlwZTtcbiAgICAgICAgY29kZUJsb2NrU2VxTGVuZ3RoID0gbGluZUNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIC8vIExpbmsgcmVmZXJlbmNlIGRlZmluaXRpb24gYW5kIGluZGVudGVkIGNvZGUgY2FuJ3QgaW50ZXJydXB0IGEgcGFyYWdyYXBoXG4gICAgICBpZiAoXG4gICAgICAgIChsaW5lVHlwZSA9PT0gXCJUTUluZGVudGVkQ29kZVwiIHx8IGxpbmVUeXBlID09PSBcIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIikgJiZcbiAgICAgICAgbGluZU51bSA+IDAgJiZcbiAgICAgICAgKHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVBhcmFcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVVMXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1PTFwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNQmxvY2txdW90ZVwiKVxuICAgICAgKSB7XG4gICAgICAgIGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXRleHQgSDIgbWFya2VycyB0aGF0IGNhbiBhbHNvIGJlIGludGVycHJldGVkIGFzIGFuIGVtcHR5IGxpc3QgaXRlbSBzaG91bGQgYmUgcmVnYXJkZWQgYXMgc3VjaFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDJNYXJrZXJcIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNVUwucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNVUxcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTVVMLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXRleHQgaGVhZGluZ3MgYXJlIG9ubHkgdmFsaWQgaWYgcHJlY2VkZWQgYnkgYSBwYXJhZ3JhcGhcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgxTWFya2VyXCIgfHwgbGluZVR5cGUgPT09IFwiVE1TZXRleHRIMk1hcmtlclwiKSB7XG4gICAgICAgIGlmIChsaW5lTnVtID09PSAwIHx8IHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSAhPT0gXCJUTVBhcmFcIikge1xuICAgICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1IUi5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgICAgbGluZVR5cGUgPSBcIlRNSFJcIjtcbiAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNSFIucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBoZWFkaW5nTGluZSA9IGxpbmVOdW0gLSAxO1xuICAgICAgICAgIGNvbnN0IGhlYWRpbmdMaW5lVHlwZSA9IGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDFNYXJrZXJcIiA/IFwiVE1TZXRleHRIMVwiIDogXCJUTVNldGV4dEgyXCI7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSAhPT0gaGVhZGluZ0xpbmVUeXBlKSB7XG4gICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSA9IGhlYWRpbmdMaW5lVHlwZTtcbiAgICAgICAgICAgICAgdGhpcy5saW5lRGlydHlbaGVhZGluZ0xpbmVdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1toZWFkaW5nTGluZV0gPSBcIiQkMFwiO1xuICAgICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbaGVhZGluZ0xpbmVdID0gW3RoaXMubGluZXNbaGVhZGluZ0xpbmVdXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgICAgICBoZWFkaW5nTGluZS0tO1xuICAgICAgICAgIH0gd2hpbGUgKGhlYWRpbmdMaW5lID49IDAgJiYgdGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdID09PSBcIlRNUGFyYVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5saW5lVHlwZXNbbGluZU51bV0gIT09IGxpbmVUeXBlKSB7XG4gICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW1dID0gbGluZVR5cGU7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVOdW1dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1tsaW5lTnVtXSA9IGxpbmVSZXBsYWNlbWVudDtcbiAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xpbmVOdW1dID0gbGluZUNhcHR1cmU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGlvbihnZXRBbmNob3I6IGJvb2xlYW4gPSBmYWxzZSk6IFBvc2l0aW9uIHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGxldCBzdGFydE5vZGUgPSBnZXRBbmNob3IgPyBzZWxlY3Rpb24hLmFuY2hvck5vZGUgOiBzZWxlY3Rpb24hLmZvY3VzTm9kZTtcbiAgICBpZiAoIXN0YXJ0Tm9kZSkgcmV0dXJuIG51bGw7XG4gICAgbGV0IG9mZnNldCA9IGdldEFuY2hvciA/IHNlbGVjdGlvbiEuYW5jaG9yT2Zmc2V0IDogc2VsZWN0aW9uIS5mb2N1c09mZnNldDtcbiAgICBpZiAoc3RhcnROb2RlID09PSB0aGlzLmUpIHtcbiAgICAgIGlmIChvZmZzZXQgPCB0aGlzLmxpbmVzLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3c6IG9mZnNldCxcbiAgICAgICAgICBjb2w6IDAsXG4gICAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb3c6IG9mZnNldCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1tvZmZzZXQgLSAxXS5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBjb2wgPSB0aGlzLmNvbXB1dGVDb2x1bW4oc3RhcnROb2RlLCBvZmZzZXQpO1xuICAgIGlmIChjb2wgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgbGV0IG5vZGUgPSBzdGFydE5vZGU7XG4gICAgd2hpbGUgKG5vZGUucGFyZW50RWxlbWVudCAhPT0gdGhpcy5lKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnRFbGVtZW50ITtcbiAgICB9XG5cbiAgICBsZXQgcm93ID0gMDtcbiAgICAvLyBJZiB0aGUgbm9kZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBzaWJsaW5nLCBpdCBtdXN0IGJlIHRoZSBmaXJzdCBsaW5lXG4gICAgaWYgKG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICBjb25zdCBjdXJyZW50TGluZU51bURhdGEgPSAobm9kZSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldD8ubGluZU51bTtcbiAgICAgIGNvbnN0IHByZXZpb3VzTGluZU51bURhdGEgPSAobm9kZS5wcmV2aW91c1NpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQ/LmxpbmVOdW07XG5cbiAgICAgIGlmIChjdXJyZW50TGluZU51bURhdGEgJiYgcHJldmlvdXNMaW5lTnVtRGF0YSkge1xuICAgICAgICBjb25zdCBjdXJyZW50TGluZU51bSA9IHBhcnNlSW50KGN1cnJlbnRMaW5lTnVtRGF0YSk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzTGluZU51bSA9IHBhcnNlSW50KHByZXZpb3VzTGluZU51bURhdGEpO1xuICAgICAgICBpZiAoY3VycmVudExpbmVOdW0gPT09IHByZXZpb3VzTGluZU51bSArIDEpIHtcbiAgICAgICAgICByb3cgPSBjdXJyZW50TGluZU51bTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBsaW5lIGlzIE5PVCB0aGUgcHJldmlvdXMgbGluZSArIDEsIHRoZW4gZWl0aGVyIFxuICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGxpbmUgZ290IHNwbGl0IGluIHR3byBvciBtZXJnZWQgd2l0aCB0aGUgcHJldmlvdXMgbGluZVxuICAgICAgICAgIC8vIEVpdGhlciB3YXksIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIHJvdyBudW1iZXJcbiAgICAgICAgICB3aGlsZSAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICAgIHJvdysrO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyByb3c6IHJvdywgY29sOiBjb2wgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWxlY3Rpb24oZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIWZvY3VzKSByZXR1cm47XG5cbiAgICBsZXQgeyBub2RlOiBmb2N1c05vZGUsIG9mZnNldDogZm9jdXNPZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICBmb2N1cy5yb3csXG4gICAgICBmb2N1cy5jb2wsXG4gICAgICBhbmNob3IgPyBhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA+IGZvY3VzLmNvbCA6IGZhbHNlXG4gICAgKTtcbiAgICBsZXQgYW5jaG9yTm9kZSA9IG51bGwsXG4gICAgICBhbmNob3JPZmZzZXQgPSBudWxsO1xuICAgIGlmIChhbmNob3IgJiYgKGFuY2hvci5yb3cgIT09IGZvY3VzLnJvdyB8fCBhbmNob3IuY29sICE9PSBmb2N1cy5jb2wpKSB7XG4gICAgICBsZXQgeyBub2RlLCBvZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICAgIGFuY2hvci5yb3csXG4gICAgICAgIGFuY2hvci5jb2wsXG4gICAgICAgIGZvY3VzLnJvdyA9PT0gYW5jaG9yLnJvdyAmJiBmb2N1cy5jb2wgPiBhbmNob3IuY29sXG4gICAgICApO1xuICAgICAgYW5jaG9yTm9kZSA9IG5vZGU7XG4gICAgICBhbmNob3JPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgbGV0IHdpbmRvd1NlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICB3aW5kb3dTZWxlY3Rpb24hLnNldEJhc2VBbmRFeHRlbnQoXG4gICAgICBmb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCxcbiAgICAgIGFuY2hvck5vZGUgfHwgZm9jdXNOb2RlLFxuICAgICAgYW5jaG9yTm9kZSA/IGFuY2hvck9mZnNldCEgOiBmb2N1c09mZnNldFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVzdG9yZUxhc3RTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubGFzdFNlbGVjdGlvbiAmJiB0aGlzLmxhc3RTZWxlY3Rpb24uZm9jdXMpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHRoaXMubGFzdFNlbGVjdGlvbi5mb2N1cywgdGhpcy5sYXN0U2VsZWN0aW9uLmFuY2hvcik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHBhc3RlKHRleHQ6IHN0cmluZywgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBmb2N1czogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBsZXQgYmVnaW5uaW5nOiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb2N1cyA9IHtcbiAgICAgICAgcm93OiB0aGlzLmxpbmVzLmxlbmd0aCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1t0aGlzLmxpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBhbmNob3IgPSBmb2N1cztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fFxuICAgICAgKGFuY2hvci5yb3cgPT09IGZvY3VzLnJvdyAmJiBhbmNob3IuY29sIDw9IGZvY3VzLmNvbClcbiAgICApIHtcbiAgICAgIGJlZ2lubmluZyA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBiZWdpbm5pbmcgPSBmb2N1cztcbiAgICAgIGVuZCA9IGFuY2hvcjtcbiAgICB9XG4gICAgbGV0IGluc2VydGVkTGluZXMgPSB0ZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcbiAgICBsZXQgbGluZUJlZm9yZSA9IHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10uc3Vic3RyKDAsIGJlZ2lubmluZy5jb2wpO1xuICAgIGxldCBsaW5lRW5kID0gdGhpcy5saW5lc1tlbmQucm93XS5zdWJzdHIoZW5kLmNvbCk7XG4gICAgaW5zZXJ0ZWRMaW5lc1swXSA9IGxpbmVCZWZvcmUuY29uY2F0KGluc2VydGVkTGluZXNbMF0pO1xuICAgIGxldCBlbmRDb2xQb3MgPSBpbnNlcnRlZExpbmVzW2luc2VydGVkTGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoO1xuICAgIGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXSA9IGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXS5jb25jYXQobGluZUVuZCk7XG4gICAgdGhpcy5zcGxpY2VMaW5lcyhiZWdpbm5pbmcucm93LCAxICsgZW5kLnJvdyAtIGJlZ2lubmluZy5yb3csIGluc2VydGVkTGluZXMpO1xuICAgIGZvY3VzLnJvdyA9IGJlZ2lubmluZy5yb3cgKyBpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDE7XG4gICAgZm9jdXMuY29sID0gZW5kQ29sUG9zO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cmFwU2VsZWN0aW9uKHByZTogc3RyaW5nLCBwb3N0OiBzdHJpbmcsIGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMgfHwgIWFuY2hvciB8fCBmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHJldHVybjtcbiAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcblxuICAgIGNvbnN0IHN0YXJ0Q29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2w7XG4gICAgY29uc3QgZW5kQ29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGFuY2hvci5jb2wgOiBmb2N1cy5jb2w7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoMCwgc3RhcnRDb2wpLmNvbmNhdChwcmUpO1xuICAgIGNvbnN0IG1pZCA9IGVuZENvbCA9PT0gc3RhcnRDb2wgPyBcIlwiIDogdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihzdGFydENvbCwgZW5kQ29sIC0gc3RhcnRDb2wpO1xuICAgIGNvbnN0IHJpZ2h0ID0gcG9zdC5jb25jYXQodGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihlbmRDb2wpKTtcbiAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSBsZWZ0LmNvbmNhdChtaWQsIHJpZ2h0KTtcbiAgICBhbmNob3IuY29sID0gbGVmdC5sZW5ndGg7XG4gICAgZm9jdXMuY29sID0gYW5jaG9yLmNvbCArIG1pZC5sZW5ndGg7XG5cbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cywgYW5jaG9yKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRFdmVudExpc3RlbmVyPFQgZXh0ZW5kcyBFdmVudFR5cGU+KFxuICAgIHR5cGU6IFQsXG4gICAgbGlzdGVuZXI6IFQgZXh0ZW5kcyAnY2hhbmdlJyA/IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnc2VsZWN0aW9uJyA/IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnZHJvcCcgPyBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PiA6IG5ldmVyXG4gICk6IHZvaWQge1xuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86Y2hhbmdlfGlucHV0KSQvaSkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNoYW5nZS5wdXNoKGxpc3RlbmVyIGFzIEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4pO1xuICAgIH1cbiAgICBpZiAodHlwZS5tYXRjaCgvXig/OnNlbGVjdGlvbnxzZWxlY3Rpb25jaGFuZ2UpJC9pKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPFNlbGVjdGlvbkV2ZW50Pik7XG4gICAgfVxuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86ZHJvcCkkL2kpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5kcm9wLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPERyb3BFdmVudD4pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlyZUNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGV4dGFyZWEgJiYgIXRoaXMubGlzdGVuZXJzLmNoYW5nZS5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHRoaXMudGV4dGFyZWEudmFsdWUgPSBjb250ZW50O1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLmNoYW5nZSkge1xuICAgICAgbGlzdGVuZXIoe1xuICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICBsaW5lc0RpcnR5OiBbLi4udGhpcy5saW5lRGlydHldLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGJlZm9yZWlucHV0IGhhbmRsZXIsIGV4Y2x1c2l2ZWx5IHRvIGhhbmRsZSBpbnNlcnRQYXJhZ3JhcGggYW5kXG4gICAqIGluc2VydExpbmVCcmVhayBldmVudHMuIFRoZXNlIHVzZWQgdG8gYmUgaGFuZGxlZCBpbiB0aGUgaW5wdXQgZXZlbnQsXG4gICAqIGJ1dCB0aGF0IGNhdXNlZCBpc3N1ZXMgd2l0aCBGaXJlZm94IHdoZXJlIHRoZSBpbnB1dCBldmVudCB3b3VsZCBiZVxuICAgKiBzb21ldGltZXMgbm90IGJlIGZpcmVkIGZvciB0aGVzZSBpbnB1dCB0eXBlcy5cbiAgICogQHBhcmFtIGV2ZW50IFRoZSBpbnB1dCBldmVudFxuICAgKiBAcmV0dXJucyBub3RoaW5nXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUJlZm9yZUlucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYmVmb3JlSW5wdXRFdmVudCA9IGV2ZW50IGFzIElucHV0RXZlbnQ7XG4gICAgaWYgKFxuICAgICAgYmVmb3JlSW5wdXRFdmVudC5pbnB1dFR5cGUgIT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgJiZcbiAgICAgIGJlZm9yZUlucHV0RXZlbnQuaW5wdXRUeXBlICE9PSBcImluc2VydExpbmVCcmVha1wiXG4gICAgKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuXG4gICAgY29uc3QgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuXG4gICAgaWYgKCFmb2N1cyB8fCAhYW5jaG9yKSByZXR1cm47XG4gICAgXG4gICAgLy8gSWYgZm9jdXMgYW5kIGFuY2hvciBhcmUgaW4gZGlmZmVyZW50IGxpbmVzLCBzaW1wbHkgcmVtb3ZlIGV2ZXJ5dGhpbmcgXG4gICAgLy8gYWZ0ZXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIGFuZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uXG4gICAgLy8gYW5kIHJlbW92ZSBhbnkgbGluZXMgaW4gYmV0d2VlblxuICAgIGlmIChmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHtcbiAgICAgIGNvbnN0IGJlZ2lubmluZyA9IGZvY3VzLnJvdyA8IGFuY2hvci5yb3cgPyBmb2N1cyA6IGFuY2hvcjtcbiAgICAgIGNvbnN0IGVuZCA9IGZvY3VzLnJvdyA8IGFuY2hvci5yb3cgPyBhbmNob3IgOiBmb2N1cztcbiAgICAgIHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10gPSB0aGlzLmxpbmVzW2JlZ2lubmluZy5yb3ddLnN1YnN0cmluZygwLCBiZWdpbm5pbmcuY29sKTtcbiAgICAgIHRoaXMubGluZXNbZW5kLnJvd10gPSB0aGlzLmxpbmVzW2VuZC5yb3ddLnN1YnN0cmluZyhlbmQuY29sKTtcbiAgICAgIHRoaXMuc3BsaWNlTGluZXMoYmVnaW5uaW5nLnJvdyArIDEsIGVuZC5yb3cgLSBiZWdpbm5pbmcucm93IC0gMSk7XG4gICAgICBmb2N1cy5yb3cgPSBiZWdpbm5pbmcucm93ICsgMTtcbiAgICAgIGZvY3VzLmNvbCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjb250aW51YWJsZVR5cGU6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgICBzd2l0Y2ggKHRoaXMubGluZVR5cGVzW2ZvY3VzLnJvd10pIHtcbiAgICAgICAgY2FzZSBcIlRNVUxcIjpcbiAgICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNVUxcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRNT0xcIjpcbiAgICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNT0xcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRNSW5kZW50ZWRDb2RlXCI6XG4gICAgICAgICAgY29udGludWFibGVUeXBlID0gXCJUTUluZGVudGVkQ29kZVwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuIFxuICAgICAgY29uc3QgbGluZUJlZm9yZUJyZWFrID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cmluZygwLCBmb2N1cy5jb2wgPD0gYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2wpO1xuICAgICAgY29uc3QgbGluZUFmdGVyQnJlYWsgPSB0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyaW5nKGZvY3VzLmNvbCA8PSBhbmNob3IuY29sID8gYW5jaG9yLmNvbCA6IGZvY3VzLmNvbCk7XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGZvY3VzLnJvdywgMSwgW2xpbmVCZWZvcmVCcmVhaywgbGluZUFmdGVyQnJlYWtdKTtcblxuICAgICAgZm9jdXMucm93ICs9IDE7XG4gICAgICBmb2N1cy5jb2wgPSAwO1xuXG4gICAgICBpZiAoY29udGludWFibGVUeXBlKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXJbY29udGludWFibGVUeXBlXS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdKTtcbiAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICBpZiAoY2FwdHVyZVsyXSkge1xuICAgICAgICAgICAgaWYgKGNvbnRpbnVhYmxlVHlwZSA9PT0gXCJUTU9MXCIpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZVsxXSA9IGNhcHR1cmVbMV0ucmVwbGFjZSgvXFxkezEsOX0vLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZUludChyZXN1bHQpICsgMSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSBgJHtjYXB0dXJlWzFdfSR7dGhpcy5saW5lc1tmb2N1cy5yb3ddfWA7XG4gICAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvY3VzLmNvbCA9IGNhcHR1cmVbMV0ubGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdID0gXCJcIjtcbiAgICAgICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzLnJvdyAtIDFdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMpO1xuXG4gICAgLy8gU2Nyb2xsIHRoZSBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBpbnRvIHZpZXdcbiAgICBpZiAoZm9jdXMgJiYgZm9jdXMucm93IDwgdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAodGhpcy5saW5lRWxlbWVudHNbZm9jdXMucm93XSBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICBibG9jazogJ25lYXJlc3QnLFxuICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUlucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFdmVudCA9IGV2ZW50IGFzIElucHV0RXZlbnQ7XG4gICAgaWYgKGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydENvbXBvc2l0aW9uVGV4dFwiKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuXG4gICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmICgoaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgfHwgaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0TGluZUJyZWFrXCIpICYmIGZvY3VzKSB7XG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gc2luY2UgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdGhlIGJlZm9yZWlucHV0IGhhbmRsZXJcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLmUhLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgdGhpcy5lIS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIlRNQmxhbmtMaW5lXCI+PGJyPjwvZGl2Pic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpeE5vZGVIaWVyYXJjaHkoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZygpO1xuICAgIH1cbiAgICBpZiAoZm9jdXMpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoX2U6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5maXJlU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgbGV0IHRleHQgPSAoZXZlbnQgYXMgYW55KS5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpO1xuICAgIHRoaXMucGFzdGUodGV4dCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5maXJlRHJvcChldmVudC5kYXRhVHJhbnNmZXIhKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0lubGluZVN0eWxlcyhvcmlnaW5hbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICBsZXQgc3RhY2s6IEFycmF5PHtkZWxpbWl0ZXI6IHN0cmluZywgZGVsaW1TdHJpbmc6IHN0cmluZywgY291bnQ6IG51bWJlciwgb3V0cHV0OiBzdHJpbmd9PiA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZztcblxuICAgIG91dGVyOiB3aGlsZSAoc3RyaW5nKSB7XG4gICAgICAvLyBQcm9jZXNzIHNpbXBsZSBydWxlcyAobm9uLWRlbGltaXRlcilcbiAgICAgIGZvciAobGV0IHJ1bGUgb2YgW1wiZXNjYXBlXCIsIFwiY29kZVwiLCBcImF1dG9saW5rXCIsIFwiaHRtbFwiXSkge1xuICAgICAgICBpZiAodGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdKSB7XG4gICAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVwbGFjZW1lbnQucmVwbGFjZSgvXFwkKFsxLTldKS9nLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUHJvY2VzcyBjdXN0b20gaW5saW5lIGdyYW1tYXIgcnVsZXNcbiAgICAgIGZvciAobGV0IHJ1bGUgaW4gdGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyKSB7XG4gICAgICAgIGlmIChydWxlICE9PSBcImVzY2FwZVwiICYmIHJ1bGUgIT09IFwiY29kZVwiICYmIHJ1bGUgIT09IFwiYXV0b2xpbmtcIiAmJiBydWxlICE9PSBcImh0bWxcIiAmJiBydWxlICE9PSBcImxpbmtPcGVuXCIgJiYgcnVsZSAhPT0gXCJpbWFnZU9wZW5cIiAmJiBydWxlICE9PSBcImxpbmtMYWJlbFwiICYmIHJ1bGUgIT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVwbGFjZW1lbnQucmVwbGFjZSgvXFwkKFsxLTldKS9nLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGxpbmtzIC8gaW1hZ2VzXG4gICAgICBsZXQgcG90ZW50aWFsTGluayA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua09wZW4ucmVnZXhwKTtcbiAgICAgIGxldCBwb3RlbnRpYWxJbWFnZSA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuaW1hZ2VPcGVuLnJlZ2V4cCk7XG4gICAgICBpZiAocG90ZW50aWFsSW1hZ2UgfHwgcG90ZW50aWFsTGluaykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5wYXJzZUxpbmtPckltYWdlKHN0cmluZywgISFwb3RlbnRpYWxJbWFnZSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtwcm9jZXNzZWR9JHtyZXN1bHQub3V0cHV0fWA7XG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihyZXN1bHQuY2hhckNvdW50KTtcbiAgICAgICAgICBvZmZzZXQgKz0gcmVzdWx0LmNoYXJDb3VudDtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgZW0gLyBzdHJvbmcgZGVsaW1pdGVyc1xuICAgICAgbGV0IGNhcCA9IC8oXlxcKispfCheXyspLy5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIGxldCBkZWxpbUNvdW50ID0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGVsaW1TdHJpbmcgPSBjYXBbMF07XG4gICAgICAgIGNvbnN0IGN1cnJlbnREZWxpbWl0ZXIgPSBjYXBbMF1bMF07XG5cbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgICBjb25zdCBwcmVjZWRpbmcgPSBvZmZzZXQgPiAwID8gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKDAsIG9mZnNldCkgOiBcIiBcIjtcbiAgICAgICAgY29uc3QgZm9sbG93aW5nID0gb2Zmc2V0ICsgY2FwWzBdLmxlbmd0aCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IHN0cmluZyA6IFwiIFwiO1xuXG4gICAgICAgIGNvbnN0IHB1bmN0dWF0aW9uRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaChwdW5jdHVhdGlvbkxlYWRpbmcpO1xuICAgICAgICBjb25zdCBwdW5jdHVhdGlvblByZWNlZGVzID0gcHJlY2VkaW5nLm1hdGNoKHB1bmN0dWF0aW9uVHJhaWxpbmcpO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaCgvXlxccy8pO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlUHJlY2VkZXMgPSBwcmVjZWRpbmcubWF0Y2goL1xccyQvKTtcblxuICAgICAgICBsZXQgY2FuT3BlbiA9ICF3aGl0ZXNwYWNlRm9sbG93cyAmJiAoIXB1bmN0dWF0aW9uRm9sbG93cyB8fCAhIXdoaXRlc3BhY2VQcmVjZWRlcyB8fCAhIXB1bmN0dWF0aW9uUHJlY2VkZXMpO1xuICAgICAgICBsZXQgY2FuQ2xvc2UgPSAhd2hpdGVzcGFjZVByZWNlZGVzICYmICghcHVuY3R1YXRpb25QcmVjZWRlcyB8fCAhIXdoaXRlc3BhY2VGb2xsb3dzIHx8ICEhcHVuY3R1YXRpb25Gb2xsb3dzKTtcblxuICAgICAgICBpZiAoY3VycmVudERlbGltaXRlciA9PT0gXCJfXCIgJiYgY2FuT3BlbiAmJiBjYW5DbG9zZSkge1xuICAgICAgICAgIGNhbk9wZW4gPSAhIXB1bmN0dWF0aW9uUHJlY2VkZXM7XG4gICAgICAgICAgY2FuQ2xvc2UgPSAhIXB1bmN0dWF0aW9uRm9sbG93cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYW5DbG9zZSkge1xuICAgICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChkZWxpbUNvdW50ICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgICBpZiAoc3RhY2tbc3RhY2tQb2ludGVyXS5kZWxpbWl0ZXIgPT09IGN1cnJlbnREZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZGVsaW1Db3VudCA+PSAyICYmIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgPj0gMikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn0ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPjxzdHJvbmcgY2xhc3M9XCJUTVN0cm9uZ1wiPiR7cHJvY2Vzc2VkfTwvc3Ryb25nPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfSR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBkZWxpbUNvdW50IC09IDI7XG4gICAgICAgICAgICAgICAgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCAtPSAyO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+PGVtIGNsYXNzPVwiVE1FbVwiPiR7cHJvY2Vzc2VkfTwvZW0+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgZGVsaW1Db3VudCAtPSAxO1xuICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgLT0gMTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCAmJiBjYW5PcGVuKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IGN1cnJlbnREZWxpbWl0ZXIsXG4gICAgICAgICAgICBkZWxpbVN0cmluZzogZGVsaW1TdHJpbmcsXG4gICAgICAgICAgICBjb3VudDogZGVsaW1Db3VudCxcbiAgICAgICAgICAgIG91dHB1dDogcHJvY2Vzc2VkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb2Nlc3NlZCA9IFwiXCI7XG4gICAgICAgICAgZGVsaW1Db3VudCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCkge1xuICAgICAgICAgIHByb2Nlc3NlZCA9IGAke3Byb2Nlc3NlZH0ke2RlbGltU3RyaW5nLnN1YnN0cigwLCBkZWxpbUNvdW50KX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igc3RyaWtldGhyb3VnaCBkZWxpbWl0ZXJcbiAgICAgIGNhcCA9IC9efn4vLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgbGV0IGNvbnN1bWVkID0gZmFsc2U7XG4gICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoIWNvbnN1bWVkICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgaWYgKHN0YWNrW3N0YWNrUG9pbnRlcl0uZGVsaW1pdGVyID09PSBcIn5cIikge1xuICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+PGRlbCBjbGFzcz1cIlRNU3RyaWtldGhyb3VnaFwiPiR7cHJvY2Vzc2VkfTwvZGVsPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+YDtcbiAgICAgICAgICAgIGxldCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgY29uc3VtZWQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbnN1bWVkKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IFwiflwiLFxuICAgICAgICAgICAgZGVsaW1TdHJpbmc6IFwifn5cIixcbiAgICAgICAgICAgIGNvdW50OiAyLFxuICAgICAgICAgICAgb3V0cHV0OiBwcm9jZXNzZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VzcyAnZGVmYXVsdCcgcnVsZVxuICAgICAgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmRlZmF1bHQucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZGVmYXVsdC5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG4gICAgICB0aHJvdyBcIkluZmluaXRlIGxvb3AhXCI7XG4gICAgfVxuXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUNvbHVtbihzdGFydE5vZGU6IE5vZGUsIG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgbGV0IG5vZGUgPSBzdGFydE5vZGU7XG4gICAgbGV0IGNvbDogbnVtYmVyO1xuICAgIHdoaWxlIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHN0YXJ0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgfHwgb2Zmc2V0ID09PSAwKSB7XG4gICAgICBjb2wgPSBvZmZzZXQ7XG4gICAgICBub2RlID0gc3RhcnROb2RlO1xuICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZS5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgY29sID0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2wgPSAwO1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICB9XG4gICAgd2hpbGUgKG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICBjb2wgKz0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSBhcyB1bmtub3duIGFzIENoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZU5vZGVBbmRPZmZzZXQocm93OiBudW1iZXIsIGNvbDogbnVtYmVyLCBiaW5kUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZSk6IHtub2RlOiBOb2RlLCBvZmZzZXQ6IG51bWJlcn0ge1xuICAgIGlmIChyb3cgPj0gdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByb3cgPSB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgY29sID0gdGhpcy5saW5lc1tyb3ddLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGNvbCA+IHRoaXMubGluZXNbcm93XS5sZW5ndGgpIHtcbiAgICAgIGNvbCA9IHRoaXMubGluZXNbcm93XS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmxpbmVFbGVtZW50c1tyb3ddIGFzIEhUTUxFbGVtZW50O1xuICAgIGxldCBub2RlID0gcGFyZW50Tm9kZS5maXJzdENoaWxkO1xuXG4gICAgbGV0IGNoaWxkcmVuQ29tcGxldGUgPSBmYWxzZTtcbiAgICBsZXQgcnYgPSB7XG4gICAgICBub2RlOiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPyBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgOiBwYXJlbnROb2RlLFxuICAgICAgb2Zmc2V0OiAwLFxuICAgIH07XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gcGFyZW50Tm9kZSkge1xuICAgICAgaWYgKCFjaGlsZHJlbkNvbXBsZXRlICYmIG5vZGUhLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICBpZiAobm9kZSEubm9kZVZhbHVlIS5sZW5ndGggPj0gY29sKSB7XG4gICAgICAgICAgaWYgKGJpbmRSaWdodCAmJiBub2RlIS5ub2RlVmFsdWUhLmxlbmd0aCA9PT0gY29sKSB7XG4gICAgICAgICAgICBydiA9IHsgbm9kZTogbm9kZSEsIG9mZnNldDogY29sIH07XG4gICAgICAgICAgICBjb2wgPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBub2RlISwgb2Zmc2V0OiBjb2wgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sIC09IG5vZGUhLm5vZGVWYWx1ZSEubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWNoaWxkcmVuQ29tcGxldGUgJiYgbm9kZSEuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlID0gbm9kZSEuZmlyc3RDaGlsZDtcbiAgICAgIH0gZWxzZSBpZiAobm9kZSEubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgY2hpbGRyZW5Db21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBub2RlID0gbm9kZSEubmV4dFNpYmxpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgbm9kZSA9IG5vZGUhLnBhcmVudE5vZGUgYXMgdW5rbm93biBhcyBDaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ2O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lQ29udGVudHNBbmRGb3JtYXR0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbmVDb250ZW50cygpO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckRpcnR5RmxhZygpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmVEaXJ0eSA9IG5ldyBBcnJheSh0aGlzLmxpbmVzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVEaXJ0eS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5saW5lRGlydHlbaV0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVDb250ZW50cygpOiB2b2lkIHtcbiAgICBsZXQgbGluZURlbHRhID0gdGhpcy5lIS5jaGlsZEVsZW1lbnRDb3VudCAtIHRoaXMubGluZXMubGVuZ3RoO1xuICAgIGlmIChsaW5lRGVsdGEpIHtcbiAgICAgIGxldCBmaXJzdENoYW5nZWRMaW5lID0gMDtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgZmlyc3RDaGFuZ2VkTGluZSA8PSB0aGlzLmxpbmVzLmxlbmd0aCAmJlxuICAgICAgICBmaXJzdENoYW5nZWRMaW5lIDw9IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSAmJlxuICAgICAgICB0aGlzLmxpbmVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLnRleHRDb250ZW50ICYmXG4gICAgICAgIHRoaXMubGluZVR5cGVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZVxuICAgICAgKSB7XG4gICAgICAgIGZpcnN0Q2hhbmdlZExpbmUrKztcbiAgICAgIH1cblxuICAgICAgbGV0IGxhc3RDaGFuZ2VkTGluZSA9IC0xO1xuICAgICAgd2hpbGUgKFxuICAgICAgICAtbGFzdENoYW5nZWRMaW5lIDwgdGhpcy5saW5lcy5sZW5ndGggJiZcbiAgICAgICAgLWxhc3RDaGFuZ2VkTGluZSA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVzW3RoaXMubGluZXMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSA9PT1cbiAgICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgJiZcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbdGhpcy5saW5lcy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdID09PVxuICAgICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1t0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWVcbiAgICAgICkge1xuICAgICAgICBsYXN0Q2hhbmdlZExpbmUtLTtcbiAgICAgIH1cblxuICAgICAgbGV0IGxpbmVzVG9EZWxldGUgPSB0aGlzLmxpbmVzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZSArIDEgLSBmaXJzdENoYW5nZWRMaW5lO1xuICAgICAgaWYgKGxpbmVzVG9EZWxldGUgPCAtbGluZURlbHRhKSBsaW5lc1RvRGVsZXRlID0gLWxpbmVEZWx0YTtcbiAgICAgIGlmIChsaW5lc1RvRGVsZXRlIDwgMCkgbGluZXNUb0RlbGV0ZSA9IDA7XG5cbiAgICAgIGxldCBsaW5lc1RvQWRkID0gW107XG4gICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGxpbmVzVG9EZWxldGUgKyBsaW5lRGVsdGE7IGwrKykge1xuICAgICAgICBsaW5lc1RvQWRkLnB1c2goKHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmUgKyBsXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgfHwgXCJcIik7XG4gICAgICB9XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGZpcnN0Q2hhbmdlZExpbmUsIGxpbmVzVG9EZWxldGUsIGxpbmVzVG9BZGQsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgbGluZSA9IDA7IGxpbmUgPCB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGg7IGxpbmUrKykge1xuICAgICAgICBsZXQgZSA9IHRoaXMubGluZUVsZW1lbnRzW2xpbmVdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBsZXQgY3QgPSBlLnRleHRDb250ZW50IHx8IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVdICE9PSBjdCB8fCB0aGlzLmxpbmVUeXBlc1tsaW5lXSAhPT0gZS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gY3Q7XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZV0gPSBlLmNsYXNzTmFtZTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNwbGljZUxpbmVzKFxuICAgIHN0YXJ0TGluZTogbnVtYmVyLFxuICAgIGxpbmVzVG9EZWxldGU6IG51bWJlciA9IDAsXG4gICAgbGluZXNUb0luc2VydDogc3RyaW5nW10gPSBbXSxcbiAgICBhZGp1c3RMaW5lRWxlbWVudHM6IGJvb2xlYW4gPSB0cnVlXG4gICk6IHZvaWQge1xuICAgIGlmIChhZGp1c3RMaW5lRWxlbWVudHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0RlbGV0ZTsgaSsrKSB7XG4gICAgICAgIHRoaXMuZSEucmVtb3ZlQ2hpbGQodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpbnNlcnRlZEJsYW5rID0gW107XG4gICAgbGV0IGluc2VydGVkRGlydHkgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0luc2VydC5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0ZWRCbGFuay5wdXNoKFwiXCIpO1xuICAgICAgaW5zZXJ0ZWREaXJ0eS5wdXNoKHRydWUpO1xuICAgICAgaWYgKGFkanVzdExpbmVFbGVtZW50cykge1xuICAgICAgICBpZiAodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pXG4gICAgICAgICAgdGhpcy5lIS5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgdGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgICBlbHNlIHRoaXMuZSEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5saW5lcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5saW5lc1RvSW5zZXJ0KTtcbiAgICB0aGlzLmxpbmVUeXBlcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZEJsYW5rKTtcbiAgICB0aGlzLmxpbmVEaXJ0eS5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZERpcnR5KTtcbiAgfVxuXG4gIHByaXZhdGUgZml4Tm9kZUhpZXJhcmNoeSgpOiB2b2lkIHtcbiAgICBjb25zdCBvcmlnaW5hbENoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLmUhLmNoaWxkTm9kZXMpO1xuXG4gICAgY29uc3QgcmVwbGFjZUNoaWxkID0gKGNoaWxkOiBOb2RlLCAuLi5uZXdDaGlsZHJlbjogTm9kZVtdKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBjaGlsZC5wYXJlbnRFbGVtZW50ITtcbiAgICAgIGNvbnN0IG5leHRTaWJsaW5nID0gY2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgbmV3Q2hpbGRyZW4uZm9yRWFjaCgobmV3Q2hpbGQpID0+XG4gICAgICAgIG5leHRTaWJsaW5nID8gcGFyZW50Lmluc2VydEJlZm9yZShuZXdDaGlsZCwgbmV4dFNpYmxpbmcpIDogcGFyZW50LmFwcGVuZENoaWxkKG5ld0NoaWxkKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgb3JpZ2luYWxDaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSB8fCAoY2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgIT09IFwiRElWXCIpIHtcbiAgICAgICAgY29uc3QgZGl2V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHJlcGxhY2VDaGlsZChjaGlsZCwgZGl2V3JhcHBlcik7XG4gICAgICAgIGRpdldyYXBwZXIuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZ3JhbmRDaGlsZHJlbiA9IEFycmF5LmZyb20oY2hpbGQuY2hpbGROb2Rlcyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBncmFuZENoaWxkcmVuLnNvbWUoXG4gICAgICAgICAgICAoZ3JhbmRDaGlsZCkgPT5cbiAgICAgICAgICAgICAgZ3JhbmRDaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgKGdyYW5kQ2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgPT09IFwiRElWXCJcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiByZXBsYWNlQ2hpbGQoY2hpbGQsIC4uLmdyYW5kQ2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGlua09ySW1hZ2Uob3JpZ2luYWxTdHJpbmc6IHN0cmluZywgaXNJbWFnZTogYm9vbGVhbik6IHtvdXRwdXQ6IHN0cmluZywgY2hhckNvdW50OiBudW1iZXJ9IHwgZmFsc2Uge1xuICAgIC8vIFNraXAgdGhlIG9wZW5pbmcgYnJhY2tldFxuICAgIGxldCB0ZXh0T2Zmc2V0ID0gaXNJbWFnZSA/IDIgOiAxO1xuICAgIGxldCBvcGVuZXIgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoMCwgdGV4dE9mZnNldCk7XG4gICAgbGV0IHR5cGUgPSBpc0ltYWdlID8gXCJUTUltYWdlXCIgOiBcIlRNTGlua1wiO1xuICAgIGxldCBjdXJyZW50T2Zmc2V0ID0gdGV4dE9mZnNldDtcblxuICAgIGxldCBicmFja2V0TGV2ZWwgPSAxO1xuICAgIGxldCBsaW5rVGV4dDogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbGlua1JlZjogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbGlua0xhYmVsOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBsaW5rRGV0YWlsczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRleHRPdXRlcjogd2hpbGUgKFxuICAgICAgY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCAmJlxuICAgICAgbGlua1RleHQgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICAvLyBDYXB0dXJlIGFueSBlc2NhcGVzIGFuZCBjb2RlIGJsb2NrcyBhdCBjdXJyZW50IHBvc2l0aW9uXG4gICAgICBmb3IgKGxldCBydWxlIG9mIFtcImVzY2FwZVwiLCBcImNvZGVcIiwgXCJhdXRvbGlua1wiLCBcImh0bWxcIl0pIHtcbiAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgaW1hZ2VcbiAgICAgIGlmIChzdHJpbmcubWF0Y2godGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmltYWdlT3Blbi5yZWdleHApKSB7XG4gICAgICAgIGJyYWNrZXRMZXZlbCsrO1xuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IDI7XG4gICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGxpbmtcbiAgICAgIGlmIChzdHJpbmcubWF0Y2godGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtPcGVuLnJlZ2V4cCkpIHtcbiAgICAgICAgYnJhY2tldExldmVsKys7XG4gICAgICAgIGlmICghaXNJbWFnZSkge1xuICAgICAgICAgIGlmICh0aGlzLnBhcnNlTGlua09ySW1hZ2Uoc3RyaW5nLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudE9mZnNldCArPSAxO1xuICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBjbG9zaW5nIGJyYWNrZXRcbiAgICAgIGlmIChzdHJpbmcubWF0Y2goL15cXF0vKSkge1xuICAgICAgICBicmFja2V0TGV2ZWwtLTtcbiAgICAgICAgaWYgKGJyYWNrZXRMZXZlbCA9PT0gMCkge1xuICAgICAgICAgIGxpbmtUZXh0ID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKHRleHRPZmZzZXQsIGN1cnJlbnRPZmZzZXQgLSB0ZXh0T2Zmc2V0KTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdGhpbmcgbWF0Y2hlcywgcHJvY2VlZCB0byBuZXh0IGNoYXJcbiAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICB9XG5cbiAgICAvLyBEaWQgd2UgZmluZCBhIGxpbmsgdGV4dD9cbiAgICBpZiAobGlua1RleHQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayB3aGF0IHR5cGUgb2YgbGluayB0aGlzIGlzXG4gICAgbGV0IG5leHRDaGFyID0gY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cihjdXJyZW50T2Zmc2V0LCAxKSA6IFwiXCI7XG5cbiAgICAvLyBSRUZFUkVOQ0UgTElOS1NcbiAgICBpZiAobmV4dENoYXIgPT09IFwiW1wiKSB7XG4gICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rTGFiZWwucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBsaW5rTGFiZWwucHVzaChjYXBbMV0sIGNhcFsyXSwgY2FwWzNdKTtcbiAgICAgICAgaWYgKGNhcFt0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua0xhYmVsLmxhYmVsUGxhY2Vob2xkZXIhXSkge1xuICAgICAgICAgIGxpbmtSZWYgPSBjYXBbdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtMYWJlbC5sYWJlbFBsYWNlaG9sZGVyIV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dENoYXIgIT09IFwiKFwiKSB7XG4gICAgICAvLyBTaG9ydGN1dCByZWYgbGlua1xuICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSU5MSU5FIExJTktTXG4gICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICBsZXQgcGFyZW50aGVzaXNMZXZlbCA9IDE7XG5cbiAgICAgIGlubGluZU91dGVyOiB3aGlsZSAoY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCAmJiBwYXJlbnRoZXNpc0xldmVsID4gMCkge1xuICAgICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICAgIC8vIFByb2Nlc3Mgd2hpdGVzcGFjZVxuICAgICAgICBsZXQgY2FwID0gL15cXHMrLy5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHNbMF0ubWF0Y2goLzwvKSkge1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgIT09IDEpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNl0gPSBsaW5rRGV0YWlsc1s2XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgYmFja3NsYXNoIGVzY2FwZXNcbiAgICAgICAgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmVzY2FwZS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBvcGVuaW5nIGFuZ2xlIGJyYWNrZXRcbiAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDIgJiYgc3RyaW5nLm1hdGNoKC9ePC8pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMCkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlsc1swXSA9IGxpbmtEZXRhaWxzWzBdLmNvbmNhdChcIjxcIik7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBjbG9zaW5nIGFuZ2xlIGJyYWNrZXRcbiAgICAgICAgaWYgKChsaW5rRGV0YWlscy5sZW5ndGggPT09IDEgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSAyKSAmJiBzdHJpbmcubWF0Y2goL14+LykpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSAxKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCI+XCIpO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgbm9uLXBhcmVudGhlc2lzIGRlbGltaXRlciBmb3IgdGl0bGVcbiAgICAgICAgY2FwID0gL15bXCInXS8uZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwICYmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDAgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSAxIHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNCkpIHtcbiAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgNCkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhcCAmJiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1IHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNikgJiYgbGlua0RldGFpbHNbNF0gPT09IGNhcFswXSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgb3BlbmluZyBwYXJlbnRoZXNpc1xuICAgICAgICBpZiAoc3RyaW5nLm1hdGNoKC9eXFwoLykpIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChcIihcIik7XG4gICAgICAgICAgICAgIGlmICghbGlua0RldGFpbHNbMF0ubWF0Y2goLzwkLykpIHBhcmVudGhlc2lzTGV2ZWwrKztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCIoXCIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzWzRdID09PSBcIihcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChcIihcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGNsb3NpbmcgcGFyZW50aGVzaXNcbiAgICAgICAgaWYgKHN0cmluZy5tYXRjaCgvXlxcKS8pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgMikgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGlmICghbGlua0RldGFpbHNbMF0ubWF0Y2goLzwkLykpIHBhcmVudGhlc2lzTGV2ZWwtLTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsID4gMCkge1xuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChcIilcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA2KSB7XG4gICAgICAgICAgICBpZiAobGlua0RldGFpbHNbNF0gPT09IFwiKFwiKSB7XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCIpXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIilcIik7XG4gICAgICAgICAgICAgIGVsc2UgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoXCIpXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnRoZXNpc0xldmVsLS07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPT09IDApIHtcbiAgICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA3KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFueSBvbGQgY2hhcmFjdGVyXG4gICAgICAgIGNhcCA9IC9eLi8uZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IFwiSW5maW5pdGUgbG9vcFwiO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPiAwKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGxpbmtSZWYgIT09IGZhbHNlKSB7XG4gICAgICAvLyBSZWZlcmVuY2UgbGluazsgY2hlY2sgdGhhdCBsaW5rUmVmIGlzIHZhbGlkXG4gICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IGxhYmVsIG9mIHRoaXMubGlua0xhYmVscykge1xuICAgICAgICBpZiAobGFiZWwgPT09IGxpbmtSZWYpIHtcbiAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBsYWJlbENsYXNzID0gdmFsaWQgPyBcIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX1ZhbGlkXCIgOiBcIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX0ludmFsaWRcIjtcbiAgICAgIGxldCBvdXRwdXQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke29wZW5lcn08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9ICR7XG4gICAgICAgIGxpbmtMYWJlbC5sZW5ndGggPCAzIHx8ICFsaW5rTGFiZWxbMV0gPyBsYWJlbENsYXNzIDogXCJcIlxuICAgICAgfVwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKGxpbmtUZXh0KX08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj5dPC9zcGFuPmA7XG5cbiAgICAgIGlmIChsaW5rTGFiZWwubGVuZ3RoID49IDMpIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtMYWJlbFswXX08L3NwYW4+YCxcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCIke2xhYmVsQ2xhc3N9XCI+JHtsaW5rTGFiZWxbMV19PC9zcGFuPmAsXG4gICAgICAgICAgYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rTGFiZWxbMl19PC9zcGFuPmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogb3V0cHV0LFxuICAgICAgICBjaGFyQ291bnQ6IGN1cnJlbnRPZmZzZXQsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobGlua0RldGFpbHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSW5saW5lIGxpbmtcbiAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA3KSB7XG4gICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtvcGVuZXJ9PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfVwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKFxuICAgICAgICAgIGxpbmtUZXh0XG4gICAgICAgICl9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+XSgke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzBdXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9RGVzdGluYXRpb25cIj4ke1xuICAgICAgICAgIGh0bWxlc2NhcGUobGlua0RldGFpbHNbMV0pXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtEZXRhaWxzWzJdfSR7XG4gICAgICAgICAgbGlua0RldGFpbHNbM11cbiAgICAgICAgfSR7bGlua0RldGFpbHNbNF19PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfVRpdGxlXCI+JHtcbiAgICAgICAgICBodG1sZXNjYXBlKGxpbmtEZXRhaWxzWzVdKVxuICAgICAgICB9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rRGV0YWlsc1s2XX0pPC9zcGFuPmAsXG4gICAgICAgIGNoYXJDb3VudDogY3VycmVudE9mZnNldCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlQ29tbW9uQW5jZXN0b3Iobm9kZTE6IE5vZGUgfCBudWxsLCBub2RlMjogTm9kZSB8IG51bGwpOiBOb2RlIHwgbnVsbCB7XG4gICAgaWYgKCFub2RlMSB8fCAhbm9kZTIpIHJldHVybiBudWxsO1xuICAgIGlmIChub2RlMSA9PT0gbm9kZTIpIHJldHVybiBub2RlMTtcbiAgICBjb25zdCBhbmNlc3RyeSA9IChub2RlOiBOb2RlKSA9PiB7XG4gICAgICBsZXQgYW5jZXN0cnkgPSBbXTtcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGFuY2VzdHJ5LnVuc2hpZnQobm9kZSk7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFuY2VzdHJ5O1xuICAgIH07XG5cbiAgICBjb25zdCBhbmNlc3RyeTEgPSBhbmNlc3RyeShub2RlMSk7XG4gICAgY29uc3QgYW5jZXN0cnkyID0gYW5jZXN0cnkobm9kZTIpO1xuXG4gICAgaWYgKGFuY2VzdHJ5MVswXSAhPT0gYW5jZXN0cnkyWzBdKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBhbmNlc3RyeTFbaV0gPT09IGFuY2VzdHJ5MltpXTsgaSsrKTtcbiAgICByZXR1cm4gYW5jZXN0cnkxW2kgLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCwgY2xhc3NOYW1lOiBzdHJpbmcpOiBOb2RlIHwgbnVsbCB7XG4gICAgbGV0IG5vZGUgPSBudWxsO1xuICAgIGlmICghZm9jdXMpIHJldHVybiBudWxsO1xuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSkgcmV0dXJuIG51bGw7XG4gICAgICBub2RlID0gc2VsLmZvY3VzTm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvY3VzLnJvdyAhPT0gYW5jaG9yLnJvdykgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoIXNlbCkgcmV0dXJuIG51bGw7XG4gICAgICBub2RlID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIH1cbiAgICBpZiAoIW5vZGUpIHJldHVybiBudWxsO1xuICAgIHdoaWxlIChub2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIGlmICgobm9kZSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmIChub2RlIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoY2xhc3NOYW1lKSkgcmV0dXJuIG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tbWFuZFN0YXRlKGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4ge1xuICAgIGxldCBjb21tYW5kU3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiA9IHt9O1xuICAgIGlmICghZm9jdXMpIGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb3IgKGxldCBjbWQgaW4gY29tbWFuZHMpIHtcbiAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbW1hbmRTdGF0ZTtcbiAgICB9XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuXG4gICAgbGV0IHN0YXJ0OiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fCAoYW5jaG9yLnJvdyA9PT0gZm9jdXMucm93ICYmIGFuY2hvci5jb2wgPCBmb2N1cy5jb2wpKSB7XG4gICAgICBzdGFydCA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IGZvY3VzO1xuICAgICAgZW5kID0gYW5jaG9yO1xuICAgIH1cbiAgICBpZiAoZW5kLnJvdyA+IHN0YXJ0LnJvdyAmJiBlbmQuY29sID09PSAwKSB7XG4gICAgICBlbmQucm93LS07XG4gICAgICBlbmQuY29sID0gdGhpcy5saW5lc1tlbmQucm93XS5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgY21kIGluIGNvbW1hbmRzKSB7XG4gICAgICBpZiAoY29tbWFuZHNbY21kXS50eXBlID09PSBcImlubGluZVwiKSB7XG4gICAgICAgIGlmICghZm9jdXMgfHwgZm9jdXMucm93ICE9PSBhbmNob3IhLnJvdyB8fCAhdGhpcy5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPVxuICAgICAgICAgICAgISF0aGlzLmNvbXB1dGVFbmNsb3NpbmdNYXJrdXBOb2RlKGZvY3VzLCBhbmNob3IsIGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lKSB8fFxuICAgICAgICAgICAgKGZvY3VzLmNvbCA9PT0gYW5jaG9yIS5jb2wgJiZcbiAgICAgICAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKDAsIGZvY3VzLmNvbCkubWF0Y2goY29tbWFuZHNbY21kXS51bnNldC5wcmVQYXR0ZXJuKSAmJlxuICAgICAgICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoZm9jdXMuY29sKS5tYXRjaChjb21tYW5kc1tjbWRdLnVuc2V0LnBvc3RQYXR0ZXJuKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb21tYW5kc1tjbWRdLnR5cGUgPT09IFwibGluZVwiKSB7XG4gICAgICAgIGlmICghZm9jdXMpIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHN0YXRlOiBib29sZWFuIHwgbnVsbCA9IHRoaXMubGluZVR5cGVzW3N0YXJ0LnJvd10gPT09IGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lO1xuICAgICAgICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMubGluZVR5cGVzW2xpbmVdID09PSBjb21tYW5kc1tjbWRdLmNsYXNzTmFtZSkgIT09IHN0YXRlKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmRTdGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBpZiAoY29tbWFuZHNbY29tbWFuZF0udHlwZSA9PT0gXCJpbmxpbmVcIikge1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuICAgICAgaWYgKCFhbmNob3IpIHJldHVybjtcbiAgICAgIGlmIChhbmNob3Iucm93ICE9PSBmb2N1cyEucm93KSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpKSByZXR1cm47XG4gICAgICBsZXQgbWFya3VwTm9kZSA9IHRoaXMuY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXMhLCBhbmNob3IsIGNvbW1hbmRzW2NvbW1hbmRdLmNsYXNzTmFtZSk7XG4gICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG5cbiAgICAgIGlmIChtYXJrdXBOb2RlKSB7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzIS5yb3ddID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb2wgPSB0aGlzLmNvbXB1dGVDb2x1bW4obWFya3VwTm9kZSwgMCkhO1xuICAgICAgICBjb25zdCBsZW4gPSBtYXJrdXBOb2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cigwLCBzdGFydENvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgY29uc3QgbWlkID0gdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoc3RhcnRDb2wsIGxlbik7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoc3RhcnRDb2wgKyBsZW4pXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4sIFwiXCIpO1xuICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddID0gbGVmdC5jb25jYXQobWlkLCByaWdodCk7XG4gICAgICAgIGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICAgICAgZm9jdXMhLmNvbCA9IGFuY2hvci5jb2wgKyBsZW47XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyEsIGFuY2hvcik7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9jdXMhLmNvbCA9PT0gYW5jaG9yLmNvbCAmJlxuICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMhLnJvd10uc3Vic3RyKDAsIGZvY3VzIS5jb2wpLm1hdGNoKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4pICYmXG4gICAgICAgICEhdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoZm9jdXMhLmNvbCkubWF0Y2goY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMhLnJvd10gPSB0cnVlO1xuICAgICAgICBjb25zdCBsZWZ0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoMCwgZm9jdXMhLmNvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cihmb2N1cyEuY29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBvc3RQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgdGhpcy5saW5lc1tmb2N1cyEucm93XSA9IGxlZnQuY29uY2F0KHJpZ2h0KTtcbiAgICAgICAgZm9jdXMhLmNvbCA9IGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzISwgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgeyBzdGFydENvbCwgZW5kQ29sIH0gPVxuICAgICAgICAgIGZvY3VzIS5jb2wgPCBhbmNob3IuY29sXG4gICAgICAgICAgICA/IHsgc3RhcnRDb2w6IGZvY3VzIS5jb2wsIGVuZENvbDogYW5jaG9yLmNvbCB9XG4gICAgICAgICAgICA6IHsgc3RhcnRDb2w6IGFuY2hvci5jb2wsIGVuZENvbDogZm9jdXMhLmNvbCB9O1xuXG4gICAgICAgIGxldCBtYXRjaCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKHN0YXJ0Q29sLCBlbmRDb2wgLSBzdGFydENvbClcbiAgICAgICAgICAubWF0Y2goL14oPzxsZWFkaW5nPlxccyopLipcXFMoPzx0cmFpbGluZz5cXHMqKSQvKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgc3RhcnRDb2wgKz0gbWF0Y2guZ3JvdXBzIS5sZWFkaW5nLmxlbmd0aDtcbiAgICAgICAgICBlbmRDb2wgLT0gbWF0Y2guZ3JvdXBzIS50cmFpbGluZy5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBmb2N1cyEuY29sID0gc3RhcnRDb2w7XG4gICAgICAgIGFuY2hvci5jb2wgPSBlbmRDb2w7XG5cbiAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wcmUsIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wb3N0LCBmb2N1cywgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb21tYW5kc1tjb21tYW5kXS50eXBlID09PSBcImxpbmVcIikge1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuICAgICAgaWYgKCFmb2N1cykgcmV0dXJuO1xuICAgICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgICAgbGV0IHN0YXJ0ID0gYW5jaG9yIS5yb3cgPiBmb2N1cyEucm93ID8gZm9jdXMhIDogYW5jaG9yITtcbiAgICAgIGxldCBlbmQgPSBhbmNob3IhLnJvdyA+IGZvY3VzIS5yb3cgPyBhbmNob3IhIDogZm9jdXMhO1xuICAgICAgaWYgKGVuZC5yb3cgPiBzdGFydC5yb3cgJiYgZW5kLmNvbCA9PT0gMCkge1xuICAgICAgICBlbmQucm93LS07XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICAgIGlmIChzdGF0ZSAmJiB0aGlzLmxpbmVUeXBlc1tsaW5lXSAhPT0gY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IHRoaXMubGluZXNbbGluZV0ucmVwbGFjZShcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wYXR0ZXJuLFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0uc2V0LnJlcGxhY2VtZW50LnJlcGxhY2UoXCIkI1wiLCAobGluZSAtIHN0YXJ0LnJvdyArIDEpLnRvU3RyaW5nKCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0ZSAmJiB0aGlzLmxpbmVUeXBlc1tsaW5lXSA9PT0gY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IHRoaXMubGluZXNbbGluZV0ucmVwbGFjZShcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBhdHRlcm4sXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS51bnNldC5yZXBsYWNlbWVudFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKFxuICAgICAgICB7IHJvdzogZW5kLnJvdywgY29sOiB0aGlzLmxpbmVzW2VuZC5yb3ddLmxlbmd0aCB9LFxuICAgICAgICB7IHJvdzogc3RhcnQucm93LCBjb2w6IDAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSB8fCAhc2VsLmFuY2hvck5vZGUpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChcbiAgICAgIHNlbC5pc0NvbGxhcHNlZCAmJlxuICAgICAgc2VsLmZvY3VzTm9kZS5ub2RlVHlwZSA9PT0gMyAmJlxuICAgICAgc2VsLmZvY3VzT2Zmc2V0ID09PSBzZWwuZm9jdXNOb2RlLm5vZGVWYWx1ZSEubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGZvciAobm9kZSA9IHNlbC5mb2N1c05vZGU7IG5vZGUgJiYgbm9kZS5uZXh0U2libGluZyA9PT0gbnVsbDsgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSEpO1xuICAgICAgaWYgKFxuICAgICAgICBub2RlICYmXG4gICAgICAgIG5vZGUubmV4dFNpYmxpbmcgJiZcbiAgICAgICAgKG5vZGUubmV4dFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSAmJlxuICAgICAgICAobm9kZS5uZXh0U2libGluZyBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzKFwiVE1JbmxpbmVGb3JtYXR0ZWRcIilcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGFuY2VzdG9yID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIGlmICghYW5jZXN0b3IpIHJldHVybiBmYWxzZTtcblxuICAgIHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3RvciAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmXG4gICAgICAgIHR5cGVvZiAoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICgoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRNSW5saW5lRm9ybWF0dGVkXCIpIHx8XG4gICAgICAgICAgKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoXCJUTUJsYW5rTGluZVwiKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUhO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHRoaXMubGFzdENvbW1hbmRTdGF0ZSA9IHRoaXMuZ2V0Q29tbWFuZFN0YXRlKCk7XG4gICAgdGhpcy5zZXRDb21tYW5kU3RhdGUoY29tbWFuZCwgIXRoaXMubGFzdENvbW1hbmRTdGF0ZVtjb21tYW5kXSk7XG4gIH1cblxuICBwcml2YXRlIGZpcmVEcm9wKGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyKTogdm9pZCB7XG4gICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuZHJvcCkge1xuICAgICAgbGlzdGVuZXIoeyBkYXRhVHJhbnNmZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaXJlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG5cbiAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBmb3IgcmVzdG9yYXRpb24gbGF0ZXJcbiAgICB0aGlzLmxhc3RTZWxlY3Rpb24gPSB7XG4gICAgICBmb2N1czogZm9jdXMsXG4gICAgICBhbmNob3I6IGFuY2hvclxuICAgIH07XG5cbiAgICBpZiAodGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uICYmIHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgIGxldCBjb21tYW5kU3RhdGUgPSB0aGlzLmdldENvbW1hbmRTdGF0ZShmb2N1cywgYW5jaG9yKTtcbiAgICAgIGlmICh0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmxhc3RDb21tYW5kU3RhdGUsIGNvbW1hbmRTdGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjb21tYW5kU3RhdGUpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uKSB7XG4gICAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgICBmb2N1czogZm9jdXMhLFxuICAgICAgICAgIGFuY2hvcjogYW5jaG9yISxcbiAgICAgICAgICBjb21tYW5kU3RhdGU6IHRoaXMubGFzdENvbW1hbmRTdGF0ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRvcjtcbiJdLCJuYW1lcyI6WyJnbG9iYWwiLCJ0aGlzIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwicmVxdWlyZSQkMyIsInNoYXJlZFN0b3JlTW9kdWxlIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsIm1ha2VCdWlsdEluIiwibWFrZUJ1aWx0SW5Nb2R1bGUiLCJvd25LZXlzIiwicmVxdWlyZSQkOCIsInJlcXVpcmUkJDkiLCJyZXF1aXJlJCQxMCIsInJlcXVpcmUkJDExIiwicmVxdWlyZSQkMTIiLCJyZXF1aXJlJCQxMyIsInN2ZyIsImJsb2NrcXVvdGUiLCJib2xkIiwiY2xlYXJfZm9ybWF0dGluZyIsImNvZGUiLCJoMSIsImgyIiwiaHIiLCJpbWFnZSIsIml0YWxpYyIsImxpbmsiLCJvbCIsInJlZG8iLCJzdHJpa2V0aHJvdWdoIiwidWwiLCJ1bmRvIiwiaXNNYWNMaWtlIiwidGVzdCIsIm5hdmlnYXRvciIsInBsYXRmb3JtIiwiRGVmYXVsdENvbW1hbmRzIiwibmFtZSIsImFjdGlvbiIsImlubmVySFRNTCIsInRpdGxlIiwiaG90a2V5IiwiaW5zZXJ0TGluayIsImVkaXRvciIsImlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQiLCJ3cmFwU2VsZWN0aW9uIiwiZW5hYmxlZCIsImluc2VydEltYWdlIiwicGFzdGUiLCJjYW5VbmRvIiwiY2FuUmVkbyIsIkNvbW1hbmRCYXIiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiZSIsImNvbW1hbmRzIiwiYnV0dG9ucyIsInN0YXRlIiwiaG90a2V5cyIsImVsZW1lbnQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiYm9keSIsImNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImhhbmRsZUtleWRvd24iLCJzZXRFZGl0b3IiLCJwYXJlbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImNvbW1hbmQiLCJlbCIsImFwcGVuZENoaWxkIiwiY29tbWFuZE5hbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJrZXlzIiwic3BsaXQiLCJtb2RpZmllcnMiLCJtb2RpZmllcmV4cGxhbmF0aW9uIiwiaSIsImxlbmd0aCIsInB1c2giLCJsYXN0S2V5IiwibWF0Y2giLCJjb25jYXQiLCJ0b1VwcGVyQ2FzZSIsImtleSIsInRvTG93ZXJDYXNlIiwiam9pbiIsImhhbmRsZUNsaWNrIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsImVkaXRvckhhZEZvY3VzIiwiY29udGFpbnMiLCJhY3RpdmVFbGVtZW50IiwiZm9jdXMiLCJyZXN0b3JlTGFzdFNlbGVjdGlvbiIsInNldENvbW1hbmRTdGF0ZSIsImhhbmRsZVNlbGVjdGlvbiIsImNvbW1hbmRTdGF0ZSIsInVuZGVmaW5lZCIsImFuY2hvciIsIm91dGVyIiwibW9kaWZpZXIiLCJyZXF1aXJlJCQxNCIsInJlcXVpcmUkJDE1IiwicmVxdWlyZSQkMTYiLCJyZXF1aXJlJCQxNyIsInJlcXVpcmUkJDE4IiwicmVxdWlyZSQkMTkiLCJyZXF1aXJlJCQyMCIsInJlcXVpcmUkJDIxIiwicmVwbGFjZW1lbnRzIiwiQVNDSUlQdW5jdHVhdGlvbiIsIk5vdFRyaWdnZXJDaGFyIiwiU2NoZW1lIiwiRW1haWwiLCJIVE1MT3BlblRhZyIsIkhUTUxDbG9zZVRhZyIsIkhUTUxUYWdOYW1lIiwiSFRNTENvbW1lbnQiLCJIVE1MUEkiLCJIVE1MRGVjbGFyYXRpb24iLCJIVE1MQ0RBVEEiLCJIVE1MQXR0cmlidXRlIiwiSFRNTEF0dFZhbHVlIiwiS25vd25UYWciLCJwdW5jdHVhdGlvbkxlYWRpbmciLCJSZWdFeHAiLCJwdW5jdHVhdGlvblRyYWlsaW5nIiwibGluZUdyYW1tYXIiLCJUTUgxIiwicmVnZXhwIiwicmVwbGFjZW1lbnQiLCJUTUgyIiwiVE1IMyIsIlRNSDQiLCJUTUg1IiwiVE1INiIsIlRNQmxvY2txdW90ZSIsIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuIiwiX3dyYXBSZWdFeHAiLCJzZXEiLCJUTUNvZGVGZW5jZVRpbGRlT3BlbiIsIlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZSIsIlRNQ29kZUZlbmNlVGlsZGVDbG9zZSIsIlRNQmxhbmtMaW5lIiwiVE1TZXRleHRIMU1hcmtlciIsIlRNU2V0ZXh0SDJNYXJrZXIiLCJUTUhSIiwiVE1VTCIsIlRNT0wiLCJUTUluZGVudGVkQ29kZSIsIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb24iLCJsYWJlbFBsYWNlaG9sZGVyIiwiaHRtbEJsb2NrR3JhbW1hciIsInN0YXJ0IiwiZW5kIiwicGFyYUludGVycnVwdCIsImlubGluZUdyYW1tYXIiLCJlc2NhcGUiLCJhdXRvbGluayIsImh0bWwiLCJsaW5rT3BlbiIsImltYWdlT3BlbiIsImxpbmtMYWJlbCIsImRlZmF1bHQiLCJyZXBsYWNlbWVudFJlZ2V4cCIsImlubGluZVJ1bGVzIiwicnVsZSIsInJlIiwic291cmNlIiwicmVwbGFjZSIsInN0cmluZyIsImZsYWdzIiwiY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hciIsImN1c3RvbVJ1bGVzIiwiYXJndW1lbnRzIiwibWVyZ2VkIiwiX29iamVjdFNwcmVhZCIsInJ1bGVOYW1lIiwiZW50cmllcyIsInByb2Nlc3NlZFJ1bGUiLCJyZWdleHBTb3VyY2UiLCJodG1sZXNjYXBlIiwidHlwZSIsInNldCIsInByZSIsInBvc3QiLCJ1bnNldCIsInByZVBhdHRlcm4iLCJwb3N0UGF0dGVybiIsInBhdHRlcm4iLCJoMyIsImg0IiwiaDUiLCJoNiIsIkVkaXRvciIsInRleHRhcmVhIiwibGluZXMiLCJsaW5lRWxlbWVudHMiLCJsaW5lVHlwZXMiLCJsaW5lQ2FwdHVyZXMiLCJsaW5lUmVwbGFjZW1lbnRzIiwibGlua0xhYmVscyIsImxpbmVEaXJ0eSIsImxhc3RDb21tYW5kU3RhdGUiLCJjdXN0b21JbmxpbmVHcmFtbWFyIiwibWVyZ2VkSW5saW5lR3JhbW1hciIsImhhc0ZvY3VzIiwibGFzdFNlbGVjdGlvbiIsImxpc3RlbmVycyIsImNoYW5nZSIsInNlbGVjdGlvbiIsImRyb3AiLCJ1bmRvU3RhY2siLCJyZWRvU3RhY2siLCJpc1Jlc3RvcmluZ0hpc3RvcnkiLCJtYXhIaXN0b3J5IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0YWdOYW1lIiwicGFyZW50Tm9kZSIsInN0eWxlIiwiZGlzcGxheSIsImNyZWF0ZUVkaXRvckVsZW1lbnQiLCJzZXRDb250ZW50IiwiY29udGVudCIsInZhbHVlIiwiaGFuZGxlVW5kb1JlZG9LZXkiLCJwdXNoSGlzdG9yeSIsInB1c2hDdXJyZW50U3RhdGUiLCJnZXRDb250ZW50IiwiZ2V0U2VsZWN0aW9uIiwic2hpZnQiLCJjdXJyZW50IiwicG9wIiwicHJldiIsInNldFNlbGVjdGlvbiIsIm5leHQiLCJpc01hYyIsImN0cmwiLCJtZXRhS2V5IiwiY3RybEtleSIsImFsdEtleSIsInNoaWZ0S2V5IiwiY2xhc3NMaXN0IiwiYWRkIiwiY29udGVudEVkaXRhYmxlIiwid2hpdGVTcGFjZSIsIndlYmtpdFVzZXJNb2RpZnkiLCJuZXh0U2libGluZyIsImluc2VydEJlZm9yZSIsImhhbmRsZUlucHV0RXZlbnQiLCJoYW5kbGVCZWZvcmVJbnB1dEV2ZW50IiwiaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQiLCJoYW5kbGVQYXN0ZSIsImhhbmRsZURyb3AiLCJjaGlsZE5vZGVzIiwiZmlyc3RDaGlsZCIsInJlbW92ZUNoaWxkIiwibGluZU51bSIsImxlIiwiQXJyYXkiLCJ1cGRhdGVGb3JtYXR0aW5nIiwiZmlyZUNoYW5nZSIsInVwZGF0ZUxpbmVUeXBlcyIsInVwZGF0ZUxpbmtMYWJlbHMiLCJhcHBseUxpbmVUeXBlcyIsImwiLCJjYXB0dXJlIiwic3RyIiwicDEiLCJwMiIsInBhcnNlSW50IiwicHJvY2Vzc0lubGluZVN0eWxlcyIsImNvbnRlbnRIVE1MIiwicmVtb3ZlQXR0cmlidXRlIiwiZGF0YXNldCIsInRvU3RyaW5nIiwiY29kZUJsb2NrVHlwZSIsImNvZGVCbG9ja1NlcUxlbmd0aCIsImh0bWxCbG9jayIsImxpbmVUeXBlIiwibGluZUNhcHR1cmUiLCJsaW5lUmVwbGFjZW1lbnQiLCJleGVjIiwiZ3JvdXBzIiwiaHRtbEJsb2NrVHlwZSIsImhlYWRpbmdMaW5lIiwiaGVhZGluZ0xpbmVUeXBlIiwiZ2V0QW5jaG9yIiwid2luZG93Iiwic3RhcnROb2RlIiwiYW5jaG9yTm9kZSIsImZvY3VzTm9kZSIsIm9mZnNldCIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0Iiwicm93IiwiY29sIiwiY29tcHV0ZUNvbHVtbiIsIm5vZGUiLCJwcmV2aW91c1NpYmxpbmciLCJjdXJyZW50TGluZU51bURhdGEiLCJfYSIsInByZXZpb3VzTGluZU51bURhdGEiLCJfYiIsImN1cnJlbnRMaW5lTnVtIiwicHJldmlvdXNMaW5lTnVtIiwiY29tcHV0ZU5vZGVBbmRPZmZzZXQiLCJ3aW5kb3dTZWxlY3Rpb24iLCJzZXRCYXNlQW5kRXh0ZW50IiwidGV4dCIsImJlZ2lubmluZyIsImluc2VydGVkTGluZXMiLCJsaW5lQmVmb3JlIiwic3Vic3RyIiwibGluZUVuZCIsImVuZENvbFBvcyIsInNwbGljZUxpbmVzIiwic3RhcnRDb2wiLCJlbmRDb2wiLCJsZWZ0IiwibWlkIiwicmlnaHQiLCJsaXN0ZW5lciIsImxpbmVzRGlydHkiLCJiZWZvcmVJbnB1dEV2ZW50IiwiaW5wdXRUeXBlIiwiY2xlYXJEaXJ0eUZsYWciLCJzdWJzdHJpbmciLCJjb250aW51YWJsZVR5cGUiLCJsaW5lQmVmb3JlQnJlYWsiLCJsaW5lQWZ0ZXJCcmVhayIsInJlc3VsdCIsInNjcm9sbEludG9WaWV3IiwiYmxvY2siLCJpbmxpbmUiLCJpbnB1dEV2ZW50IiwiZml4Tm9kZUhpZXJhcmNoeSIsInVwZGF0ZUxpbmVDb250ZW50c0FuZEZvcm1hdHRpbmciLCJfZSIsImZpcmVTZWxlY3Rpb24iLCJjbGlwYm9hcmREYXRhIiwiZ2V0RGF0YSIsImZpcmVEcm9wIiwiZGF0YVRyYW5zZmVyIiwib3JpZ2luYWxTdHJpbmciLCJwcm9jZXNzZWQiLCJzdGFjayIsImNhcCIsInBvdGVudGlhbExpbmsiLCJwb3RlbnRpYWxJbWFnZSIsInBhcnNlTGlua09ySW1hZ2UiLCJvdXRwdXQiLCJjaGFyQ291bnQiLCJkZWxpbUNvdW50IiwiZGVsaW1TdHJpbmciLCJjdXJyZW50RGVsaW1pdGVyIiwicHJlY2VkaW5nIiwiZm9sbG93aW5nIiwicHVuY3R1YXRpb25Gb2xsb3dzIiwicHVuY3R1YXRpb25QcmVjZWRlcyIsIndoaXRlc3BhY2VGb2xsb3dzIiwid2hpdGVzcGFjZVByZWNlZGVzIiwiY2FuT3BlbiIsImNhbkNsb3NlIiwic3RhY2tQb2ludGVyIiwiZGVsaW1pdGVyIiwiZW50cnkiLCJjb3VudCIsImNvbnN1bWVkIiwibm9kZVR5cGUiLCJOb2RlIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJiaW5kUmlnaHQiLCJjaGlsZHJlbkNvbXBsZXRlIiwicnYiLCJub2RlVmFsdWUiLCJ1cGRhdGVMaW5lQ29udGVudHMiLCJsaW5lRGVsdGEiLCJjaGlsZEVsZW1lbnRDb3VudCIsImZpcnN0Q2hhbmdlZExpbmUiLCJsYXN0Q2hhbmdlZExpbmUiLCJsaW5lc1RvRGVsZXRlIiwibGluZXNUb0FkZCIsImxpbmUiLCJjdCIsInN0YXJ0TGluZSIsImxpbmVzVG9JbnNlcnQiLCJhZGp1c3RMaW5lRWxlbWVudHMiLCJpbnNlcnRlZEJsYW5rIiwiaW5zZXJ0ZWREaXJ0eSIsInNwbGljZSIsIm9yaWdpbmFsQ2hpbGRyZW4iLCJmcm9tIiwicmVwbGFjZUNoaWxkIiwiY2hpbGQiLCJwYXJlbnQiLCJfbGVuIiwibmV3Q2hpbGRyZW4iLCJfa2V5IiwiZm9yRWFjaCIsIm5ld0NoaWxkIiwiRUxFTUVOVF9OT0RFIiwiZGl2V3JhcHBlciIsImdyYW5kQ2hpbGRyZW4iLCJzb21lIiwiZ3JhbmRDaGlsZCIsImlzSW1hZ2UiLCJ0ZXh0T2Zmc2V0Iiwib3BlbmVyIiwiY3VycmVudE9mZnNldCIsImJyYWNrZXRMZXZlbCIsImxpbmtUZXh0IiwibGlua1JlZiIsImxpbmtEZXRhaWxzIiwidGV4dE91dGVyIiwibmV4dENoYXIiLCJ0cmltIiwicGFyZW50aGVzaXNMZXZlbCIsImlubGluZU91dGVyIiwidmFsaWQiLCJsYWJlbCIsImxhYmVsQ2xhc3MiLCJjb21wdXRlQ29tbW9uQW5jZXN0b3IiLCJub2RlMSIsIm5vZGUyIiwiYW5jZXN0cnkiLCJ1bnNoaWZ0IiwiYW5jZXN0cnkxIiwiYW5jZXN0cnkyIiwiY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUiLCJzZWwiLCJpbmNsdWRlcyIsImdldENvbW1hbmRTdGF0ZSIsImNtZCIsIm1hcmt1cE5vZGUiLCJsZW4iLCJsZWFkaW5nIiwidHJhaWxpbmciLCJpc0NvbGxhcHNlZCIsImFuY2VzdG9yIiwidG9nZ2xlQ29tbWFuZFN0YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0NBQ0EsQ0FBQSxJQUFJLEtBQUssR0FBRyxVQUFVLEVBQUUsRUFBRTtJQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO0dBQ3BDOztDQUVEO0NBQ0EsQ0FBYyxZQUFBO0NBQ2Q7SUFDRSxLQUFLLENBQUMsT0FBTyxVQUFVLElBQUksUUFBUSxJQUFJLFVBQVUsQ0FBQztJQUNsRCxLQUFLLENBQUMsT0FBTyxNQUFNLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQztDQUM1QztJQUNFLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDO0lBQ3RDLEtBQUssQ0FBQyxPQUFPQSxjQUFNLElBQUksUUFBUSxJQUFJQSxjQUFNLENBQUM7SUFDMUMsS0FBSyxDQUFDLE9BQU9DLFlBQUksSUFBSSxRQUFRLElBQUlBLFlBQUksQ0FBQztDQUN4QztDQUNBLEdBQUUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFOzs7Ozs7Ozs7Ozs7Q0NkL0QsQ0FBYyxLQUFBLEdBQUcsVUFBVSxJQUFJLEVBQUU7Q0FDakMsR0FBRSxJQUFJO0NBQ04sS0FBSSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUU7S0FDaEIsQ0FBQyxPQUFPLEtBQUssRUFBRTtDQUNsQixLQUFJLE9BQU8s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LElBQUksQ0FBQ3RCLGFBQWEsR0FBRztDQUNuQm5ILE1BQUFBLEtBQUssRUFBRUEsS0FBSztDQUNaTSxNQUFBQSxNQUFNLEVBQUVBO01BQ1Q7Q0FFRCxJQUFBLElBQUksSUFBSSxDQUFDOEcsU0FBUyxDQUFDRSxTQUFTLElBQUksSUFBSSxDQUFDRixTQUFTLENBQUNFLFNBQVMsQ0FBQ3JJLE1BQU0sRUFBRTtPQUMvRCxJQUFJbUIsWUFBWSxHQUFHLElBQUksQ0FBQ2lWLGVBQWUsQ0FBQ3JWLEtBQUssRUFBRU0sTUFBTSxDQUFDO09BQ3RELElBQUksSUFBSSxDQUFDeUcsZ0JBQWdCLEVBQUU7U0FDekJySSxNQUFNLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUNvSSxnQkFBZ0IsRUFBRTNHLFlBQVksQ0FBQztDQUNwRCxPQUFDLE1BQU07U0FDTCxJQUFJLENBQUMyRyxnQkFBZ0IsR0FBR3JJLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLEVBQUUsRUFBRXlCLFlBQVksQ0FBQztDQUN6RDtPQUNBLEtBQUssSUFBSWtPLFFBQVEsSUFBSSxJQUFJLENBQUNsSCxTQUFTLENBQUNFLFNBQVMsRUFBRTtDQUM3Q2dILFFBQUFBLFFBQVEsQ0FBQztDQUNQdE8sVUFBQUEsS0FBSyxFQUFFQSxLQUFNO0NBQ2JNLFVBQUFBLE1BQU0sRUFBRUEsTUFBTztXQUNmRixZQUFZLEVBQUUsSUFBSSxDQUFDMkc7Q0FDcEIsU0FBQSxDQUFDO0NBQ0o7Q0FDRjtDQUNGO0NBQ0Q7Ozs7Ozs7OzsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTVdfQ=={"version":3,"file":"index.js","sources":["node_modules/core-js/internals/global-this.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/function-bind-native.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/object-property-is-enumerable.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/classof-raw.js","node_modules/core-js/internals/indexed-object.js","node_modules/core-js/internals/is-null-or-undefined.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/to-indexed-object.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/environment-user-agent.js","node_modules/core-js/internals/environment-v8-version.js","node_modules/core-js/internals/symbol-constructor-detection.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/a-callable.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/is-pure.js","node_modules/core-js/internals/define-global-property.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/object-get-own-property-descriptor.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/weak-map-basic-detection.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/make-built-in.js","node_modules/core-js/internals/define-built-in.js","node_modules/core-js/internals/math-trunc.js","node_modules/core-js/internals/to-integer-or-infinity.js","node_modules/core-js/internals/to-absolute-index.js","node_modules/core-js/internals/to-length.js","node_modules/core-js/internals/length-of-array-like.js","node_modules/core-js/internals/array-includes.js","node_modules/core-js/internals/object-keys-internal.js","node_modules/core-js/internals/enum-bug-keys.js","node_modules/core-js/internals/object-get-own-property-names.js","node_modules/core-js/internals/object-get-own-property-symbols.js","node_modules/core-js/internals/own-keys.js","node_modules/core-js/internals/copy-constructor-properties.js","node_modules/core-js/internals/is-forced.js","node_modules/core-js/internals/export.js","node_modules/core-js/internals/to-string-tag-support.js","node_modules/core-js/internals/classof.js","node_modules/core-js/internals/to-string.js","node_modules/core-js/internals/regexp-flags.js","node_modules/core-js/internals/regexp-sticky-helpers.js","node_modules/core-js/internals/object-keys.js","node_modules/core-js/internals/object-define-properties.js","node_modules/core-js/internals/html.js","node_modules/core-js/internals/object-create.js","node_modules/core-js/internals/regexp-unsupported-dot-all.js","node_modules/core-js/internals/regexp-unsupported-ncg.js","node_modules/core-js/internals/regexp-exec.js","node_modules/core-js/modules/es.regexp.exec.js","node_modules/core-js/internals/dom-iterables.js","node_modules/core-js/internals/dom-token-list-prototype.js","node_modules/core-js/internals/add-to-unscopables.js","node_modules/core-js/internals/iterators.js","node_modules/core-js/internals/correct-prototype-getter.js","node_modules/core-js/internals/object-get-prototype-of.js","node_modules/core-js/internals/iterators-core.js","node_modules/core-js/internals/set-to-string-tag.js","node_modules/core-js/internals/iterator-create-constructor.js","node_modules/core-js/internals/function-uncurry-this-accessor.js","node_modules/core-js/internals/is-possible-prototype.js","node_modules/core-js/internals/a-possible-prototype.js","node_modules/core-js/internals/object-set-prototype-of.js","node_modules/core-js/internals/iterator-define.js","node_modules/core-js/internals/create-iter-result-object.js","node_modules/core-js/modules/es.array.iterator.js","node_modules/core-js/modules/web.dom-collections.iterator.js","src/svg/svg.ts","src/TinyMDECommandBar.ts","node_modules/core-js/internals/function-apply.js","node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","node_modules/core-js/internals/string-multibyte.js","node_modules/core-js/internals/advance-string-index.js","node_modules/core-js/internals/get-substitution.js","node_modules/core-js/internals/regexp-exec-abstract.js","node_modules/core-js/modules/es.string.replace.js","node_modules/core-js/internals/whitespaces.js","node_modules/core-js/internals/string-trim.js","node_modules/core-js/internals/string-trim-forced.js","node_modules/core-js/modules/es.string.trim.js","node_modules/core-js/internals/inherit-if-required.js","node_modules/core-js/internals/is-regexp.js","node_modules/core-js/internals/regexp-get-flags.js","node_modules/core-js/internals/proxy-accessor.js","node_modules/core-js/internals/define-built-in-accessor.js","node_modules/core-js/internals/set-species.js","node_modules/core-js/modules/es.regexp.constructor.js","node_modules/core-js/modules/es.regexp.flags.js","src/grammar.ts","src/TinyMDE.ts"],"sourcesContent":["'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n check(typeof this == 'object' && this) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) === 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL &&\n !Symbol.sham &&\n typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n globalThis[key] = value;\n } return value;\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n version: '3.42.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.42.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar definePropertyModule = require('../internals/object-define-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nmodule.exports = function (O, key, value, options) {\n if (!options) options = {};\n var simple = options.enumerable;\n var name = options.name !== undefined ? options.name : key;\n if (isCallable(value)) makeBuiltIn(value, name, options);\n if (options.global) {\n if (simple) O[key] = value;\n else defineGlobalProperty(key, value);\n } else {\n try {\n if (!options.unsafe) delete O[key];\n else if (O[key]) simple = true;\n } catch (error) { /* empty */ }\n if (simple) O[key] = value;\n else definePropertyModule.f(O, key, {\n value: value,\n enumerable: false,\n configurable: !options.nonConfigurable,\n writable: !options.nonWritable\n });\n } return O;\n};\n","'use strict';\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n","'use strict';\nvar trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number || number === 0 ? 0 : trunc(number);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n var len = toIntegerOrInfinity(argument);\n return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","'use strict';\nvar toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n if (length === 0) return !IS_INCLUDES && -1;\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el !== el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value !== value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","'use strict';\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value === POLYFILL ? true\n : value === NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.dontCallGetSet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = globalThis;\n } else if (STATIC) {\n target = globalThis[TARGET] || defineGlobalProperty(TARGET, {});\n } else {\n target = globalThis[TARGET] && globalThis[TARGET].prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.dontCallGetSet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n defineBuiltIn(target, key, sourceProperty, options);\n }\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","'use strict';\nvar classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n return $String(argument);\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = globalThis.RegExp;\n\nvar UNSUPPORTED_Y = fails(function () {\n var re = $RegExp('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') !== null;\n});\n\n// UC Browser bug\n// https://github.com/zloirock/core-js/issues/1008\nvar MISSED_STICKY = UNSUPPORTED_Y || fails(function () {\n return !$RegExp('a', 'y').sticky;\n});\n\nvar BROKEN_CARET = UNSUPPORTED_Y || fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = $RegExp('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') !== null;\n});\n\nmodule.exports = {\n BROKEN_CARET: BROKEN_CARET,\n MISSED_STICKY: MISSED_STICKY,\n UNSUPPORTED_Y: UNSUPPORTED_Y\n};\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","'use strict';\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n // eslint-disable-next-line no-useless-assignment -- avoid memory leak\n activeXDocument = null;\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = globalThis.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.test('\\n') && re.flags === 's');\n});\n","'use strict';\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = globalThis.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?<a>b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$<a>c') !== 'bc';\n});\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n call(nativeExec, re1, 'a');\n call(nativeExec, re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n patchedExec = function exec(string) {\n var re = this;\n var state = getInternalState(re);\n var str = toString(string);\n var raw = state.raw;\n var result, reCopy, lastIndex, match, i, object, group;\n\n if (raw) {\n raw.lastIndex = re.lastIndex;\n result = call(patchedExec, raw, str);\n re.lastIndex = raw.lastIndex;\n return result;\n }\n\n var groups = state.groups;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = call(regexpFlags, re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = replace(flags, 'y', '');\n if (indexOf(flags, 'g') === -1) {\n flags += 'g';\n }\n\n strCopy = stringSlice(str, re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = stringSlice(match.input, charsAdded);\n match[0] = stringSlice(match[0], charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn't work for /(.?)?/\n call(nativeReplace, match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (match && groups) {\n match.groups = object = create(null);\n for (i = 0; i < groups.length; i++) {\n group = groups[i];\n object[group[0]] = match[group[1]];\n }\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","'use strict';\n// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","'use strict';\n// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = require('../internals/document-create-element');\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] === undefined) {\n defineProperty(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof $Object ? ObjectPrototype : null;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (target, TAG, STATIC) {\n if (target && !STATIC) target = target.prototype;\n if (target && !hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nmodule.exports = function (object, key, method) {\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n } catch (error) { /* empty */ }\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nmodule.exports = function (argument) {\n return isObject(argument) || argument === null;\n};\n","'use strict';\nvar isPossiblePrototype = require('../internals/is-possible-prototype');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n if (isPossiblePrototype(argument)) return argument;\n throw new $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n","'use strict';\n/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar isObject = require('../internals/is-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n requireObjectCoercible(O);\n aPossiblePrototype(proto);\n if (!isObject(O)) return O;\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/iterator-create-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];\n\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n }\n\n return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\n// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports = function (value, done) {\n return { value: value, done: done };\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineProperty = require('../internals/object-define-property').f;\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = null;\n return createIterResultObject(undefined, true);\n }\n switch (state.kind) {\n case 'keys': return createIterResultObject(index, false);\n case 'values': return createIterResultObject(target[index], false);\n } return createIterResultObject([index, target[index]], false);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nvar values = Iterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n// V8 ~ Chrome 45- bug\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n defineProperty(values, 'name', { value: 'values' });\n} catch (error) { /* empty */ }\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n setToStringTag(CollectionPrototype, COLLECTION_NAME, true);\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n handlePrototype(globalThis[COLLECTION_NAME] && globalThis[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n","const svg: Record<string, string> = {\n blockquote: `<svg height=\"18\" width=\"18\"><rect width=\"5\" height=\"5\" x=\"3\" y=\"4\" ry=\"1\"/><rect ry=\"1\" y=\"4\" x=\"10\" height=\"5\" width=\"5\"/><path d=\"M8 6.999v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3zm7 0v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3z\"/></svg>`,\n bold: `<svg height=\"18\" width=\"18\"><path d=\"M4 2a1 1 0 00-1 1v12a1 1 0 001 1h6c4 0 5-2 5-4 0-1.322-.434-2.636-1.885-3.381C13.772 7.885 14 6.945 14 6c0-2-1-4-5-4zm1 2h4c1.668 0 2.32.393 2.6.672.28.279.4.662.4 1.328s-.12 1.057-.4 1.338c-.275.274-1.014.646-2.6.662H5zm5 6c1.666.005 2.318.388 2.596.666.277.278.404.667.404 1.334s-.127 1.06-.404 1.338c-.278.278-.93.66-2.596.662l-4.992.004L5 10z\"/></svg>`,\n clear_formatting: `<svg height=\"18\" width=\"18\"><path d=\"M11.03 1a1 1 0 00-.74.3l-9 9a1 1 0 000 1.4l4 4A1 1 0 006 16h2a1 1 0 00.7-.3l8-8a1 1 0 000-1.4l-5-5a1 1 0 00-.67-.3zM8.7 5.7l3.58 3.6L7.6 14H6.4l-3-3 5.3-5.3z\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"16\" height=\"2\" width=\"2\"/><rect width=\"2\" height=\"2\" x=\"13\" y=\"14\" rx=\".8\" ry=\".8\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"10\" height=\"2\" width=\"2\"/></svg>`,\n code: `<svg height=\"18\" width=\"18\"><path d=\"M13.5 2.994a.5.5 0 00-.5.5.5.5 0 000 .034V4.53a5.993 5.993 0 00-7.451-.445A6 6 0 1012.45 13.9a5.99 5.99 0 001.346-1.334.5.5 0 00.096-.101.5.5 0 00-.12-.698.5.5 0 00-.697.12l-.004-.005a5 5 0 01-1.197 1.2 5 5 0 111.215-6.965.5.5 0 00.697.12.5.5 0 00.211-.44V4.745H14V3.493a.5.5 0 00-.5-.5z\"/></svg>`,\n h1: `<svg height=\"18\" width=\"18\"><path d=\"M3 2s0-1 1-1h1c1 0 1 1 1 1v6h6V2s0-1 1-1h1c1 0 1 1 1 1v14s0 1-1 1h-1c-1 0-1-1-1-1v-6H6v6s0 1-1 1H4c-1 0-1-1-1-1z\"/></svg>`,\n h2: `<svg height=\"18\" width=\"18\"><path d=\"M4 2s0-1 1-1 1 1 1 1v6c1-1 2-1 4-1 3 0 4 2 4 4v5s0 1-1 1-1-1-1-1v-5c0-1.094-1-2-2-2-2 0-3 0-4 2v5s0 1-1 1-1-1-1-1z\"/></svg>`,\n hr: `<svg height=\"18\" width=\"18\"><rect ry=\"1\" y=\"8\" height=\"2\" width=\"18\" style=\"font-variation-settings:normal;marker:none\"/></svg>`,\n image: `<svg height=\"18\" width=\"18\"><path d=\"M1 2v14h16V2H1zm2 2h12v7l-3-3-4 4-2-2-3 3V4z\"/><circle r=\"1.5\" cy=\"6.5\" cx=\"5.5\"/></svg>`,\n italic: `<svg height=\"18\" width=\"18\"><path d=\"M9 2a1 1 0 000 2L7 14a1 1 0 100 2h2a1 1 0 000-2l2-10a1 1 0 100-2z\"/></svg>`,\n link: `<svg height=\"18\" width=\"18\"><path d=\"M9.07 5.18a3.9 3.9 0 00-1.52.43C6.31 6.22 5.3 7.29 4.3 8.29c-1 1-2.07 2.02-2.68 3.26-.31.62-.5 1.33-.41 2.07.09.75.48 1.47 1.1 2.09.61.61 1.33 1 2.08 1.1.74.09 1.45-.1 2.07-.42 1.24-.61 2.26-1.68 3.26-2.68.46-.47.94-.94 1.39-1.44l-.43.26c-.68.34-1.49.56-2.36.46-.2-.03-.4-.08-.6-.14-.79.76-1.55 1.45-2.16 1.76-.38.19-.67.24-.92.21-.26-.03-.54-.14-.92-.53-.39-.38-.5-.66-.53-.91-.03-.26.02-.55.21-.93.39-.76 1.32-1.74 2.32-2.74 1-1 1.98-1.93 2.74-2.32.38-.19.67-.24.93-.21.25.03.53.14.91.53.39.38.5.66.53.92v.06l1.12-1.06.44-.47c-.18-.3-.4-.6-.67-.87-.62-.61-1.34-1-2.09-1.1a3.08 3.08 0 00-.55-.01z\"/><path d=\"M13.07.86a3.9 3.9 0 00-1.52.43c-1.24.62-2.26 1.69-3.26 2.69-.46.47-.94.94-1.39 1.43.15-.08.28-.18.43-.25a4.4 4.4 0 012.36-.46c.2.02.4.07.6.14.79-.77 1.55-1.46 2.16-1.76.38-.19.67-.25.93-.21.25.03.53.14.91.52.39.38.5.66.53.92.03.26-.02.55-.21.93-.39.76-1.32 1.74-2.32 2.74-1 1-1.98 1.93-2.74 2.31-.38.2-.67.25-.93.22-.25-.04-.53-.15-.91-.53-.39-.38-.5-.66-.53-.92V9c-.36.33-.73.67-1.12 1.06l-.43.46c.17.3.4.6.66.87.62.62 1.34 1 2.08 1.1.75.1 1.46-.1 2.08-.41 1.24-.62 2.26-1.69 3.26-2.69s2.07-2.02 2.68-3.26c.31-.62.5-1.32.41-2.07a3.63 3.63 0 00-1.1-2.08c-.61-.62-1.33-1-2.07-1.1a3.08 3.08 0 00-.56-.02z\"/></svg>`,\n ol: `<svg height=\"18\" width=\"18\"><path d=\"M1.5 7a.5.5 0 100 1h1a.5.5 0 01.5.5c0 .164-.08.31-.14.355l-1.655 1.25A.492.492 0 001 10.5a.5.5 0 00.5.5h2a.5.5 0 000-1H3l.398-.299A1.5 1.5 0 002.5 7z\"/><path d=\"M1.5 12c-.667 0-.667 1 0 1h1.25c.333 0 .333.5 0 .5H2.5c-.667 0-.667 1 0 1h.25c.333 0 .333.5 0 .5H1.5c-.667 0-.667 1 0 1h1c.398 0 .78-.131 1.06-.365.282-.235.44-.554.44-.885a1.121 1.121 0 00-.303-.75c.191-.204.3-.47.303-.75 0-.332-.158-.651-.44-.885-.3-.241-.675-.37-1.06-.365z\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><path d=\"M1.5 2a.5.5 0 100 1H2v2h-.5a.5.5 0 100 1h2a.5.5 0 100-1H3V2.5c0-.277-.223-.5-.5-.5z\"/></svg>`,\n redo: `<svg height=\"18\" width=\"18\"><path d=\"M 7.2695308,2.7050781 C 8.1128755,2.7081581 8.9529895,2.8712156 9.730469,3.1347656 11.408874,3.7037121 12.90142,4.6847104 14,5.6367188 V 4 h 2 V 9 H 11 V 7 h 1.509765 C 11.59075,6.2485173 10.340208,5.453808 9.0878904,5.0292969 7.4309398,4.4676231 5.9453458,4.468717 4.7070308,5.7070312 c -1.225014,1.2250142 -1.409769,2.7206953 -0.779297,4.2968748 0.630472,1.57618 2.167475,3.158006 4.4433598,4.06836 l -0.7421878,1.855468 c -2.724115,-1.089646 -4.687112,-3.00782 -5.55664,-5.18164 -0.869528,-2.1738206 -0.554283,-4.6781393 1.220703,-6.4531252 0.923857,-0.9238568 2.015388,-1.388828 3.134765,-1.5351563 0.279845,-0.036582 0.560682,-0.053761 0.841797,-0.052734 z\" /></svg>`,\n strikethrough: `<svg width=\"18\" height=\"18\"><path d=\"M10 2C6 2 4 4 4 6c0 .338.08.672.193 1h2.34C6.113 6.629 6 6.295 6 6c0-.334.117-.725.691-1.154C7.265 4.416 8.331 4 10 4h3a1 1 0 000-2zm1.477 9c.413.368.523.706.523 1 0 .334-.127.712-.701 1.143-.575.43-1.632.85-3.299.857l-1.006.007V14H5a1 1 0 000 2h3c4 0 6-2 6-4 0-.338-.081-.672-.195-1z\"/><rect ry=\"1\" y=\"8\" x=\"1\" height=\"2\" width=\"16\"/></svg>`,\n ul: `<svg height=\"18\" width=\"18\"><circle cx=\"2\" cy=\"9\" r=\"2\"/><circle cy=\"4\" cx=\"2\" r=\"2\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><circle cx=\"2\" cy=\"14\" r=\"2\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/></svg>`,\n undo: `<svg height=\"18\" width=\"18\"><path d=\"M 10.730469 2.7050781 C 9.8871243 2.7081594 9.0470103 2.8712156 8.2695312 3.1347656 C 6.5911256 3.7037121 5.0985797 4.6847104 4 5.6367188 L 4 4 L 2 4 L 2 9 L 7 9 L 7 7 L 5.4902344 7 C 6.4092499 6.2485173 7.6597914 5.453808 8.9121094 5.0292969 C 10.56906 4.4676231 12.054654 4.468717 13.292969 5.7070312 C 14.517983 6.9320454 14.702738 8.4277265 14.072266 10.003906 C 13.441794 11.580086 11.904791 13.161912 9.6289062 14.072266 L 10.371094 15.927734 C 13.095209 14.838088 15.058206 12.919914 15.927734 10.746094 C 16.797262 8.5722734 16.482017 6.0679547 14.707031 4.2929688 C 13.783174 3.369112 12.691643 2.9041408 11.572266 2.7578125 C 11.292421 2.7212304 11.011584 2.704051 10.730469 2.7050781 z \" /></svg>\n`\n};\n\nexport default svg;","import svg from \"./svg/svg\";\nimport { Editor, Position, SelectionEvent } from \"./TinyMDE\";\n\nconst isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(\n typeof navigator !== \"undefined\" ? navigator.platform : \"\"\n);\n\nexport interface CommandAction {\n (editor: Editor): void;\n}\n\nexport interface CommandEnabled {\n (editor: Editor, focus?: Position, anchor?: Position): boolean | null;\n}\n\nexport interface CommandDefinition {\n name: string;\n action?: string | CommandAction;\n innerHTML?: string;\n title?: string;\n hotkey?: string;\n enabled?: CommandEnabled;\n}\n\nexport interface CommandBarProps {\n element?: string | HTMLElement;\n editor?: Editor;\n commands?: (string | CommandDefinition)[];\n}\n\ninterface Hotkey {\n modifiers: string[];\n command: string;\n key?: string;\n code?: string;\n}\n\nconst DefaultCommands: Record<string, CommandDefinition> = {\n bold: {\n name: \"bold\",\n action: \"bold\",\n innerHTML: svg.bold,\n title: \"Bold\",\n hotkey: \"Mod-B\",\n },\n italic: {\n name: \"italic\",\n action: \"italic\",\n innerHTML: svg.italic,\n title: \"Italic\",\n hotkey: \"Mod-I\",\n },\n strikethrough: {\n name: \"strikethrough\",\n action: \"strikethrough\",\n innerHTML: svg.strikethrough,\n title: \"Strikethrough\",\n hotkey: \"Mod2-Shift-5\",\n },\n code: {\n name: \"code\",\n action: \"code\",\n innerHTML: svg.code,\n title: \"Format as code\",\n },\n h1: {\n name: \"h1\",\n action: \"h1\",\n innerHTML: svg.h1,\n title: \"Level 1 heading\",\n hotkey: \"Mod-Shift-1\",\n },\n h2: {\n name: \"h2\",\n action: \"h2\",\n innerHTML: svg.h2,\n title: \"Level 2 heading\",\n hotkey: \"Mod-Shift-2\",\n },\n ul: {\n name: \"ul\",\n action: \"ul\",\n innerHTML: svg.ul,\n title: \"Bulleted list\",\n },\n ol: {\n name: \"ol\",\n action: \"ol\",\n innerHTML: svg.ol,\n title: \"Numbered list\",\n },\n blockquote: {\n name: \"blockquote\",\n action: \"blockquote\",\n innerHTML: svg.blockquote,\n title: \"Quote\",\n hotkey: \"Mod2-Shift-Q\",\n },\n insertLink: {\n name: \"insertLink\",\n action: (editor: Editor) => {\n if (editor.isInlineFormattingAllowed()) editor.wrapSelection(\"[\", \"]()\");\n },\n enabled: (editor: Editor) =>\n editor.isInlineFormattingAllowed() ? false : null,\n innerHTML: svg.link,\n title: \"Insert link\",\n hotkey: \"Mod-K\",\n },\n insertImage: {\n name: \"insertImage\",\n action: (editor: Editor) => {\n if (editor.isInlineFormattingAllowed()) editor.wrapSelection(\"![\", \"]()\");\n },\n enabled: (editor: Editor) =>\n editor.isInlineFormattingAllowed() ? false : null,\n innerHTML: svg.image,\n title: \"Insert image\",\n hotkey: \"Mod2-Shift-I\",\n },\n hr: {\n name: \"hr\",\n action: (editor: Editor) => editor.paste(\"\\n***\\n\"),\n enabled: () => false,\n innerHTML: svg.hr,\n title: \"Insert horizontal line\",\n hotkey: \"Mod2-Shift-L\",\n },\n undo: {\n name: \"undo\",\n action: (editor: Editor) => editor.undo(),\n enabled: (editor: Editor) => (editor.canUndo ? false : null),\n innerHTML: svg.undo,\n title: \"Undo\",\n },\n redo: {\n name: \"redo\",\n action: (editor: Editor) => editor.redo(),\n enabled: (editor: Editor) => (editor.canRedo ? false : null),\n innerHTML: svg.redo,\n title: \"Redo\",\n },\n};\n\nexport class CommandBar {\n public e: HTMLDivElement | null = null;\n public editor: Editor | null = null;\n public commands: Record<string, CommandDefinition> = {};\n public buttons: Record<string, HTMLDivElement> = {};\n public state: Record<string, boolean | null> = {};\n private hotkeys: Hotkey[] = [];\n\n constructor(props: CommandBarProps) {\n this.e = null;\n this.editor = null;\n this.commands = {};\n this.buttons = {};\n this.state = {};\n this.hotkeys = [];\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n \n if (!element) {\n element = document.body;\n }\n\n this.createCommandBarElement(\n element,\n props.commands || [\n \"bold\",\n \"italic\",\n \"strikethrough\",\n \"|\",\n \"code\",\n \"|\",\n \"h1\",\n \"h2\",\n \"|\",\n \"ul\",\n \"ol\",\n \"|\",\n \"blockquote\",\n \"hr\",\n \"|\",\n \"undo\",\n \"redo\",\n \"|\",\n \"insertLink\",\n \"insertImage\",\n ]\n );\n document.addEventListener(\"keydown\", (e) => this.handleKeydown(e));\n if (props.editor) this.setEditor(props.editor);\n }\n\n private createCommandBarElement(parentElement: HTMLElement, commands: (string | CommandDefinition)[]): void {\n this.e = document.createElement(\"div\");\n this.e.className = \"TMCommandBar\";\n\n for (let command of commands) {\n if (command === \"|\") {\n let el = document.createElement(\"div\");\n el.className = \"TMCommandDivider\";\n this.e.appendChild(el);\n } else {\n let commandName: string;\n if (typeof command === \"string\") {\n if (DefaultCommands[command]) {\n commandName = command;\n this.commands[commandName] = DefaultCommands[commandName];\n } else {\n continue;\n }\n } else if (typeof command === \"object\" && command.name) {\n commandName = command.name;\n this.commands[commandName] = {} as CommandDefinition;\n if (DefaultCommands[commandName]) {\n Object.assign(this.commands[commandName], DefaultCommands[commandName]);\n }\n Object.assign(this.commands[commandName], command);\n } else {\n continue;\n }\n\n let title = this.commands[commandName].title || commandName;\n\n if (this.commands[commandName].hotkey) {\n const keys = this.commands[commandName].hotkey!.split(\"-\");\n let modifiers: string[] = [];\n let modifierexplanation: string[] = [];\n \n for (let i = 0; i < keys.length - 1; i++) {\n switch (keys[i]) {\n case \"Ctrl\":\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n break;\n case \"Cmd\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n break;\n case \"Alt\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"Alt\");\n break;\n case \"Option\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"⌥\");\n break;\n case \"Win\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⊞ Win\");\n break;\n case \"Shift\":\n modifiers.push(\"shiftKey\");\n modifierexplanation.push(\"⇧\");\n break;\n case \"Mod\":\n if (isMacLike) {\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n } else {\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n }\n break;\n case \"Mod2\":\n modifiers.push(\"altKey\");\n if (isMacLike) modifierexplanation.push(\"⌥\");\n else modifierexplanation.push(\"Alt\");\n break;\n }\n }\n \n modifierexplanation.push(keys[keys.length - 1]);\n let hotkey: Hotkey = {\n modifiers: modifiers,\n command: commandName,\n };\n \n const lastKey = keys[keys.length - 1];\n if (lastKey.match(/^[0-9]$/)) {\n hotkey.code = `Digit${lastKey}`;\n } else if (lastKey.match(/^[a-zA-Z]$/)) {\n hotkey.code = `Key${lastKey.toUpperCase()}`;\n } else {\n hotkey.key = lastKey.toLowerCase();\n }\n this.hotkeys.push(hotkey);\n title = title.concat(` (${modifierexplanation.join(\"+\")})`);\n }\n\n this.buttons[commandName] = document.createElement(\"div\");\n this.buttons[commandName].className = \"TMCommandButton TMCommandButton_Disabled\";\n this.buttons[commandName].title = title;\n this.buttons[commandName].innerHTML = this.commands[commandName].innerHTML || \"?\";\n\n this.buttons[commandName].addEventListener(\"mousedown\", (e) =>\n this.handleClick(commandName, e)\n );\n this.e.appendChild(this.buttons[commandName]);\n }\n }\n parentElement.appendChild(this.e);\n }\n\n private handleClick(commandName: string, event: Event): void {\n if (!this.editor) return;\n event.preventDefault();\n\n // Focus the editor if it's not already focused\n if (this.editor.e) {\n const editorHadFocus = this.editor.e.contains(document.activeElement);\n this.editor.e.focus();\n // Only restore the last selection if the editor was not focused before\n if (!editorHadFocus) {\n this.editor.restoreLastSelection();\n }\n }\n\n if (typeof this.commands[commandName].action === \"string\") {\n if (this.state[commandName] === false)\n (this.editor as any).setCommandState(commandName, true);\n else (this.editor as any).setCommandState(commandName, false);\n } else if (typeof this.commands[commandName].action === \"function\") {\n (this.commands[commandName].action as CommandAction)(this.editor);\n }\n }\n\n public setEditor(editor: Editor): void {\n this.editor = editor;\n editor.addEventListener(\"selection\", (e) => this.handleSelection(e));\n }\n\n private handleSelection(event: SelectionEvent): void {\n if (event.commandState) {\n for (let command in this.commands) {\n if (event.commandState[command] === undefined) {\n if (this.commands[command].enabled) {\n this.state[command] = this.commands[command].enabled!(\n this.editor!,\n event.focus,\n event.anchor\n );\n } else {\n this.state[command] = event.focus ? false : null;\n }\n } else {\n this.state[command] = event.commandState[command];\n }\n\n if (this.state[command] === true) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Active\";\n } else if (this.state[command] === false) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Inactive\";\n } else {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Disabled\";\n }\n }\n }\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n // Only handle keyboard shortcuts if this editor is currently focused\n if (!this.editor || !this.editor.e) return;\n if (!this.editor.e.contains(document.activeElement)) return;\n\n outer: for (let hotkey of this.hotkeys) {\n if (\n (hotkey.key && event.key.toLowerCase() === hotkey.key) ||\n (hotkey.code && event.code === hotkey.code)\n ) {\n for (let modifier of hotkey.modifiers) {\n if (!(event as any)[modifier]) continue outer;\n }\n this.handleClick(hotkey.command, event);\n return;\n }\n }\n }\n}\n\nexport default CommandBar;","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-function-prototype-bind, es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar call = require('../internals/function-call');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegExp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) !== 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () {\n execCalled = true;\n return null;\n };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n FORCED\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: call(nativeRegExpMethod, regexp, str, arg2) };\n }\n return { done: true, value: call(nativeMethod, str, regexp, arg2) };\n }\n return { done: false };\n });\n\n defineBuiltIn(String.prototype, KEY, methods[0]);\n defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]);\n }\n\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n// eslint-disable-next-line redos/no-vulnerable -- safe\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace(replacement, symbols, function (match, ch) {\n var capture;\n switch (charAt(ch, 0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return stringSlice(str, 0, position);\n case \"'\": return stringSlice(str, tailPos);\n case '<':\n capture = namedCaptures[stringSlice(ch, 1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar regexpExec = require('../internals/regexp-exec');\n\nvar $TypeError = TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (isCallable(exec)) {\n var result = call(exec, R, S);\n if (result !== null) anObject(result);\n return result;\n }\n if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n throw new $TypeError('RegExp#exec called on incompatible receiver');\n};\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getMethod = require('../internals/get-method');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = isObject(searchValue) ? getMethod(searchValue, REPLACE) : undefined;\n return replacer\n ? call(replacer, searchValue, O, replaceValue)\n : call(nativeReplace, toString(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (string, replaceValue) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (\n typeof replaceValue == 'string' &&\n stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n stringIndexOf(replaceValue, '$<') === -1\n ) {\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n if (res.done) return res.value;\n }\n\n var functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n\n var global = rx.global;\n var fullUnicode;\n if (global) {\n fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n\n var results = [];\n var result;\n while (true) {\n result = regExpExec(rx, S);\n if (result === null) break;\n\n push(results, result);\n if (!global) break;\n\n var matchStr = toString(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = toString(result[0]);\n var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n var captures = [];\n var replacement;\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = concat([matched], captures, position, S);\n if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n replacement = toString(apply(replaceValue, undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n\n return accumulatedResult + stringSlice(S, nextSourcePosition);\n }\n ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","'use strict';\n// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar ltrim = RegExp('^[' + whitespaces + ']+');\nvar rtrim = RegExp('(^|[^' + whitespaces + '])[' + whitespaces + ']+$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '$1');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","'use strict';\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar hasOwn = require('../internals/has-own-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (R) {\n var flags = R.flags;\n return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R)\n ? call(regExpFlags, R) : flags;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (Target, Source, key) {\n key in Target || defineProperty(Target, key, {\n configurable: true,\n get: function () { return Source[key]; },\n set: function (it) { Source[key] = it; }\n });\n};\n","'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineBuiltInAccessor(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar globalThis = require('../internals/global-this');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar proxyAccessor = require('../internals/proxy-accessor');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = globalThis.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\nvar SyntaxError = globalThis.SyntaxError;\nvar exec = uncurryThis(RegExpPrototype.exec);\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n// TODO: Use only proper RegExpIdentifierName\nvar IS_NCG = /^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar MISSED_STICKY = stickyHelpers.MISSED_STICKY;\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar BASE_FORCED = DESCRIPTORS &&\n (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n // eslint-disable-next-line sonarjs/inconsistent-function-call -- required for testing\n return NativeRegExp(re1) !== re1 || NativeRegExp(re2) === re2 || String(NativeRegExp(re1, 'i')) !== '/a/i';\n }));\n\nvar handleDotAll = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var brackets = false;\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n result += chr + charAt(string, ++index);\n continue;\n }\n if (!brackets && chr === '.') {\n result += '[\\\\s\\\\S]';\n } else {\n if (chr === '[') {\n brackets = true;\n } else if (chr === ']') {\n brackets = false;\n } result += chr;\n }\n } return result;\n};\n\nvar handleNCG = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var named = [];\n var names = create(null);\n var brackets = false;\n var ncg = false;\n var groupid = 0;\n var groupname = '';\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n chr += charAt(string, ++index);\n } else if (chr === ']') {\n brackets = false;\n } else if (!brackets) switch (true) {\n case chr === '[':\n brackets = true;\n break;\n case chr === '(':\n result += chr;\n // ignore non-capturing groups\n if (stringSlice(string, index + 1, index + 3) === '?:') {\n continue;\n }\n if (exec(IS_NCG, stringSlice(string, index + 1))) {\n index += 2;\n ncg = true;\n }\n groupid++;\n continue;\n case chr === '>' && ncg:\n if (groupname === '' || hasOwn(names, groupname)) {\n throw new SyntaxError('Invalid capture group name');\n }\n names[groupname] = true;\n named[named.length] = [groupname, groupid];\n ncg = false;\n groupname = '';\n continue;\n }\n if (ncg) groupname += chr;\n else result += chr;\n } return [result, named];\n};\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (isForced('RegExp', BASE_FORCED)) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = isPrototypeOf(RegExpPrototype, this);\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var groups = [];\n var rawPattern = pattern;\n var rawFlags, dotAll, sticky, handled, result, state;\n\n if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {\n return pattern;\n }\n\n if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) {\n pattern = pattern.source;\n if (flagsAreUndefined) flags = getRegExpFlags(rawPattern);\n }\n\n pattern = pattern === undefined ? '' : toString(pattern);\n flags = flags === undefined ? '' : toString(flags);\n rawPattern = pattern;\n\n if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {\n dotAll = !!flags && stringIndexOf(flags, 's') > -1;\n if (dotAll) flags = replace(flags, /s/g, '');\n }\n\n rawFlags = flags;\n\n if (MISSED_STICKY && 'sticky' in re1) {\n sticky = !!flags && stringIndexOf(flags, 'y') > -1;\n if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, '');\n }\n\n if (UNSUPPORTED_NCG) {\n handled = handleNCG(pattern);\n pattern = handled[0];\n groups = handled[1];\n }\n\n result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);\n\n if (dotAll || sticky || groups.length) {\n state = enforceInternalState(result);\n if (dotAll) {\n state.dotAll = true;\n state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);\n }\n if (sticky) state.sticky = true;\n if (groups.length) state.groups = groups;\n }\n\n if (pattern !== rawPattern) try {\n // fails in old engines, but we have no alternatives for unsupported regex syntax\n createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);\n } catch (error) { /* empty */ }\n\n return result;\n };\n\n for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {\n proxyAccessor(RegExpWrapper, NativeRegExp, keys[index++]);\n }\n\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n defineBuiltIn(globalThis, 'RegExp', RegExpWrapper, { constructor: true });\n}\n\n// https://tc39.es/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = globalThis.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n var INDICES_SUPPORT = true;\n try {\n RegExp('.', 'd');\n } catch (error) {\n INDICES_SUPPORT = false;\n }\n\n var O = {};\n // modern V8 bug\n var calls = '';\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n var addGetter = function (key, chr) {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(O, key, { get: function () {\n calls += chr;\n return true;\n } });\n };\n\n var pairs = {\n dotAll: 's',\n global: 'g',\n ignoreCase: 'i',\n multiline: 'm',\n sticky: 'y'\n };\n\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n for (var key in pairs) addGetter(key, pairs[key]);\n\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n","export interface GrammarRule {\n regexp: RegExp;\n replacement: string;\n labelPlaceholder?: number;\n}\n\nexport interface HTMLBlockRule {\n start: RegExp;\n end: RegExp | false;\n paraInterrupt: boolean;\n}\n\nexport interface InlineCommand {\n type: 'inline';\n className: string;\n set: {\n pre: string;\n post: string;\n };\n unset: {\n prePattern: RegExp;\n postPattern: RegExp;\n };\n}\n\nexport interface LineCommand {\n type: 'line';\n className: string;\n set: {\n pattern: RegExp;\n replacement: string;\n };\n unset: {\n pattern: RegExp;\n replacement: string;\n };\n}\n\nexport type Command = InlineCommand | LineCommand;\n\nconst replacements: Record<string, RegExp> = {\n ASCIIPunctuation: /[!\"#$%&'()*+,\\-./:;<=>?@[\\]^_`{|}~\\\\]/, \n NotTriggerChar: /[^`_*[\\]()<>!~]/,\n Scheme: /[A-Za-z][A-Za-z0-9+.-]{1,31}/,\n Email: /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/, // From CommonMark spec\n HTMLOpenTag: /<HTMLTagName(?:HTMLAttribute)*\\s*\\/?>/,\n HTMLCloseTag: /<\\/HTMLTagName\\s*>/,\n HTMLTagName: /[A-Za-z][A-Za-z0-9-]*/, \n HTMLComment: /<!--(?:[^>-]|(?:[^>-](?:[^-]|-[^-])*[^-]))-->/,\n HTMLPI: /<\\?(?:|.|(?:[^?]|\\?[^>])*)\\?>/,\n HTMLDeclaration: /<![A-Z]+\\s[^>]*>/,\n HTMLCDATA: /<!\\[CDATA\\[.*?\\]\\]>/,\n HTMLAttribute: /\\s+[A-Za-z_:][A-Za-z0-9_.:-]*(?:HTMLAttValue)?/,\n HTMLAttValue: /\\s*=\\s*(?:(?:'[^']*')|(?:\"[^\"]*\")|(?:[^\\s\"'=<>`]+))/,\n KnownTag: /address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul/\n};\n\n// From CommonMark.js. \nexport const punctuationLeading = new RegExp(/^(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])/);\n\nexport const punctuationTrailing = new RegExp(/(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])$/);\n\n/**\n * This is CommonMark's block grammar, but we're ignoring nested blocks here. \n */ \nexport const lineGrammar: Record<string, GrammarRule> = { \n TMH1: { \n regexp: /^( {0,3}#\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH1\">$1</span>$$2<span class=\"TMMark TMMark_TMH1\">$3</span>'\n },\n TMH2: { \n regexp: /^( {0,3}##\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH2\">$1</span>$$2<span class=\"TMMark TMMark_TMH2\">$3</span>'\n },\n TMH3: { \n regexp: /^( {0,3}###\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH3\">$1</span>$$2<span class=\"TMMark TMMark_TMH3\">$3</span>'\n },\n TMH4: { \n regexp: /^( {0,3}####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH4\">$1</span>$$2<span class=\"TMMark TMMark_TMH4\">$3</span>'\n },\n TMH5: { \n regexp: /^( {0,3}#####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH5\">$1</span>$$2<span class=\"TMMark TMMark_TMH5\">$3</span>'\n },\n TMH6: { \n regexp: /^( {0,3}######\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH6\">$1</span>$$2<span class=\"TMMark TMMark_TMH6\">$3</span>'\n },\n TMBlockquote: { \n regexp: /^( {0,3}>[ ]?)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMBlockquote\">$1</span>$$2'\n },\n TMCodeFenceBacktickOpen: { \n regexp: /^( {0,3}(?<seq>````*)\\s*)([^`]*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceTildeOpen: { \n regexp: /^( {0,3}(?<seq>~~~~*)\\s*)(.*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceBacktickClose: { \n regexp: /^( {0,3}(?<seq>````*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span>$3'\n },\n TMCodeFenceTildeClose: { \n regexp: /^( {0,3}(?<seq>~~~~*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span>$3'\n },\n TMBlankLine: { \n regexp: /^([ \\t]*)$/, \n replacement: '$0'\n },\n TMSetextH1Marker: { \n regexp: /^ {0,3}=+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMSetextH2Marker: { \n regexp: /^ {0,3}-+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMHR: { \n regexp: /^( {0,3}(\\*[ \\t]*\\*[ \\t]*\\*[ \\t*]*)|(-[ \\t]*-[ \\t]*-[ \\t-]*)|(_[ \\t]*_[ \\t]*_[ \\t_]*))$/, \n replacement: '<span class=\"TMMark TMMark_TMHR\">$0</span>'\n },\n TMUL: { \n regexp: /^( {0,3}[+*-] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMUL\">$1</span>$$2'\n },\n TMOL: { \n regexp: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMOL\">$1</span>$$2'\n },\n // TODO: This is currently preventing sublists (and any content within list items, really) from working\n TMIndentedCode: { \n regexp: /^( {4}|\\t)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMIndentedCode\">$1</span>$2'\n },\n TMLinkReferenceDefinition: {\n // TODO: Link destination can't include unbalanced parantheses, but we just ignore that here \n regexp: /^( {0,3}\\[\\s*)([^\\s\\]](?:[^\\]]|\\\\\\])*?)(\\s*\\]:\\s*)((?:[^\\s<>]+)|(?:<(?:[^<>\\\\]|\\\\.)*>))?(\\s*)((?:\\((?:[^()\\\\]|\\\\.)*\\))|(?:\"(?:[^\"\\\\]|\\\\.)*\")|(?:'(?:[^'\\\\]|\\\\.)*'))?(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$1</span><span class=\"TMLinkLabel TMLinkLabel_Definition\">$2</span><span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$3</span><span class=\"TMLinkDestination\">$4</span>$5<span class=\"TMLinkTitle\">$6</span>$7',\n labelPlaceholder: 2, // this defines which placeholder in the above regex is the link \"label\"\n },\n};\n\n/**\n * HTML blocks have multiple different classes of opener and closer. This array defines all the cases\n */\nexport const htmlBlockGrammar: HTMLBlockRule[] = [\n { start: /^ {0,3}<(?:script|pre|style)(?:\\s|>|$)/i, end: /(?:<\\/script>|<\\/pre>|<\\/style>)/i, paraInterrupt: true },\n { start: /^ {0,3}<!--/, end: /-->/, paraInterrupt: true },\n { start: /^ {0,3}<\\?/, end: /\\?>/, paraInterrupt: true },\n { start: /^ {0,3}<![A-Z]/, end: />/, paraInterrupt : true},\n { start: /^ {0,3}<!\\[CDATA\\[/, end: /\\]\\]>/, paraInterrupt : true},\n { start: /^ {0,3}(?:<|<\\/)(?:KnownTag)(?:\\s|>|\\/>|$)/i, end: false, paraInterrupt: true},\n { start: /^ {0,3}(?:HTMLOpenTag|HTMLCloseTag)\\s*$/, end: false, paraInterrupt: false},\n];\n\n/**\n * Structure of the object:\n * Top level entries are rules, each consisting of a regular expressions (in string format) as well as a replacement.\n * In the regular expressions, replacements from the object 'replacements' will be processed before compiling into the property regexp.\n */\nexport const inlineGrammar: Record<string, GrammarRule> = {\n escape : {\n regexp: /^\\\\(ASCIIPunctuation)/,\n replacement : '<span class=\"TMMark TMMark_TMEscape\">\\\\</span>$1'\n },\n code : {\n regexp: /^(`+)((?:[^`])|(?:[^`].*?[^`]))(\\1)/,\n replacement : '<span class=\"TMMark TMMark_TMCode\">$1</span><code class=\"TMCode\">$2</code><span class=\"TMMark TMMark_TMCode\">$3</span>' \n },\n autolink : {\n regexp: /^<((?:Scheme:[^\\s<>]*)|(?:Email))>/,\n replacement: '<span class=\"TMMark TMMark_TMAutolink\">&lt;</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">&gt;</span>'\n },\n html : {\n regexp: /^((?:HTMLOpenTag)|(?:HTMLCloseTag)|(?:HTMLComment)|(?:HTMLPI)|(?:HTMLDeclaration)|(?:HTMLCDATA))/,\n replacement: '<span class=\"TMHTML\">$1</span>',\n },\n linkOpen : {\n regexp: /^\\[/,\n replacement: ''\n },\n imageOpen : {\n regexp: /^!\\[/,\n replacement : ''\n },\n linkLabel : {\n regexp: /^(\\[\\s*)([^\\]]*?)(\\s*\\])/,\n replacement: '',\n labelPlaceholder: 2\n },\n default : {\n regexp: /^(.|(?:NotTriggerChar+))/,\n replacement: '$1'\n }\n};\n\n// Process replacements in regexps\nconst replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n\n// Inline\nconst inlineRules = [...Object.keys(inlineGrammar)];\nfor (let rule of inlineRules) {\n let re = inlineGrammar[rule].regexp.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n inlineGrammar[rule].regexp = new RegExp(re, inlineGrammar[rule].regexp.flags);\n}\n\n// HTML Block (only opening rule is processed currently)\nfor (let rule of htmlBlockGrammar) {\n let re = rule.start.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n rule.start = new RegExp(re, rule.start.flags);\n}\n\n/**\n * Creates a merged inline grammar by combining the default inline grammar with custom rules.\n * Custom rules are processed and their regexp patterns are expanded with replacements.\n * @param customRules - Object containing custom inline grammar rules\n * @returns Merged inline grammar object\n */\nexport function createMergedInlineGrammar(customRules: Record<string, GrammarRule> = {}): Record<string, GrammarRule> {\n const merged = { ...inlineGrammar };\n \n // Process custom rules\n for (const [ruleName, rule] of Object.entries(customRules)) {\n // Copy the rule to avoid modifying the original\n const processedRule = { ...rule };\n \n // Process replacements in the regexp\n let regexpSource = rule.regexp.source;\n const replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n \n // Replace while there is something to replace\n while (regexpSource.match(replacementRegexp)) {\n regexpSource = regexpSource.replace(replacementRegexp, (match) => {\n return replacements[match].source;\n });\n }\n \n processedRule.regexp = new RegExp(regexpSource, rule.regexp.flags);\n merged[ruleName] = processedRule;\n }\n \n return merged;\n}\n\n/**\n * Escapes HTML special characters (<, >, and &) in the string.\n * @param {string} string The raw string to be escaped\n * @returns {string} The string, ready to be used in HTML\n */\nexport function htmlescape(string: string): string {\n return (string ? string : '')\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n}\n\n/**\n * Contains the commands that can be sent to the editor. Contains objects with a name representing the name of the command.\n * Each of the objects contains the following keys:\n * \n * - type: Can be either inline (for inline formatting) or line (for block / line formatting).\n * - className: Used to determine whether the command is active at a given position. \n * For line formatting, this looks at the class of the line element. For inline elements, tries to find an enclosing element with that class.\n * - set / unset: Contain instructions how to set and unset the command. For line type commands, both consist of a pattern and replacement that \n * will be applied to each line (using String.replace). For inline type commands, the set object contains a pre and post string which will\n * be inserted before and after the selection. The unset object contains a prePattern and a postPattern. Both should be regular expressions and \n * they will be applied to the portion of the line before and after the selection (using String.replace, with an empty replacement string).\n */\nexport const commands: Record<string, Command> = {\n // Replacements for unset for inline commands are '' by default\n bold: {\n type: 'inline', \n className: 'TMStrong', \n set: {pre: '**', post: '**'}, \n unset: {prePattern: /(?:\\*\\*|__)$/, postPattern: /^(?:\\*\\*|__)/}\n }, \n italic: {\n type: 'inline', \n className: 'TMEm', \n set: {pre: '*', post: '*'}, \n unset: {prePattern: /(?:\\*|_)$/, postPattern: /^(?:\\*|_)/}\n },\n code: {\n type: 'inline', \n className: 'TMCode', \n set: {pre: '`', post: '`'}, \n unset: {prePattern: /`+$/, postPattern: /^`+/} // FIXME this doesn't ensure balanced backticks right now\n }, \n strikethrough: {\n type: 'inline', \n className: 'TMStrikethrough', \n set: {pre: '~~', post: '~~'}, \n unset: {prePattern:/~~$/, postPattern: /^~~/ }\n },\n h1: {\n type: 'line', \n className: 'TMH1', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '# $2'}, \n unset: {pattern: /^( {0,3}#\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h2: {\n type: 'line', \n className: 'TMH2', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '## $2'}, \n unset: {pattern: /^( {0,3}##\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h3: {\n type: 'line', \n className: 'TMH3', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '### $2'}, \n unset: {pattern: /^( {0,3}###\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h4: {\n type: 'line', \n className: 'TMH4', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '#### $2'}, \n unset: {pattern: /^( {0,3}####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h5: {\n type: 'line', \n className: 'TMH5', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '##### $2'}, \n unset: {pattern: /^( {0,3}#####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h6: {\n type: 'line', \n className: 'TMH6', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '###### $2'}, \n unset: {pattern: /^( {0,3}######\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n ul: {\n type: 'line', \n className: 'TMUL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '- $2'}, \n unset: {pattern: /^( {0,3}[+*-] {1,4})(.*)$/, replacement: '$2'}\n },\n ol: {\n type: 'line', \n className: 'TMOL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '$#. $2'}, \n unset: {pattern: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, replacement: '$2'}\n }, \n blockquote: {\n type: 'line', \n className: 'TMBlockquote', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '> $2'}, \n unset: {pattern: /^( {0,3}>[ ]?)(.*)$/, replacement: '$2'}\n },\n};","import {\n inlineGrammar,\n lineGrammar,\n punctuationLeading,\n punctuationTrailing,\n htmlescape,\n htmlBlockGrammar,\n commands,\n HTMLBlockRule,\n Command,\n GrammarRule,\n createMergedInlineGrammar,\n} from \"./grammar\";\n\nexport interface EditorProps {\n element?: string | HTMLElement;\n editor?: string | HTMLElement;\n content?: string;\n textarea?: string | HTMLTextAreaElement;\n customInlineGrammar?: Record<string, GrammarRule>;\n}\n\nexport interface Position {\n row: number;\n col: number;\n}\n\nexport interface HistoryState {\n content: string;\n selection: Position | null;\n anchor: Position | null;\n}\n\nexport interface ChangeEvent {\n content: string;\n linesDirty: boolean[];\n}\n\nexport interface SelectionEvent {\n focus: Position;\n anchor: Position;\n commandState: Record<string, boolean | null>;\n}\n\nexport interface DropEvent {\n dataTransfer: DataTransfer;\n}\n\ntype EventType = 'change' | 'selection' | 'drop';\ntype EventHandler<T> = (event: T) => void;\n\nexport class Editor {\n public e: HTMLDivElement | null = null;\n public textarea: HTMLTextAreaElement | null = null;\n public lines: string[] = [];\n public lineElements: NodeListOf<ChildNode> | HTMLCollection | ChildNode[] = [];\n public lineTypes: string[] = [];\n public lineCaptures: RegExpExecArray[] = [];\n public lineReplacements: string[] = [];\n public linkLabels: string[] = [];\n public lineDirty: boolean[] = [];\n public lastCommandState: Record<string, boolean | null> | null = null;\n private customInlineGrammar: Record<string, GrammarRule> = {};\n private mergedInlineGrammar: Record<string, GrammarRule> = inlineGrammar;\n private hasFocus: boolean = true;\n private lastSelection: { focus: Position | null; anchor: Position | null } | null = null;\n\n public listeners: {\n change: EventHandler<ChangeEvent>[];\n selection: EventHandler<SelectionEvent>[];\n drop: EventHandler<DropEvent>[];\n } = {\n change: [],\n selection: [],\n drop: [],\n };\n\n private undoStack: HistoryState[] = [];\n private redoStack: HistoryState[] = [];\n private isRestoringHistory: boolean = false;\n private maxHistory: number = 100;\n\n constructor(props: EditorProps = {}) {\n this.e = null;\n this.textarea = null;\n this.lines = [];\n this.lineElements = [] as ChildNode[];\n this.lineTypes = [];\n this.lineCaptures = [];\n this.lineReplacements = [];\n this.linkLabels = [];\n this.lineDirty = [];\n this.lastCommandState = null;\n this.hasFocus = true;\n this.lastSelection = null;\n this.customInlineGrammar = props.customInlineGrammar || {};\n this.mergedInlineGrammar = createMergedInlineGrammar(this.customInlineGrammar);\n\n this.listeners = {\n change: [],\n selection: [],\n drop: [],\n };\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n\n if (typeof props.textarea === 'string') {\n this.textarea = document.getElementById(props.textarea) as HTMLTextAreaElement;\n } else if (props.textarea) {\n this.textarea = props.textarea;\n }\n\n if (this.textarea) {\n if (!element) element = this.textarea;\n }\n\n if (!element) {\n element = document.getElementsByTagName(\"body\")[0];\n }\n if (element && element.tagName === \"TEXTAREA\") {\n this.textarea = element as HTMLTextAreaElement;\n element = this.textarea.parentNode as HTMLElement;\n }\n\n if (this.textarea) {\n this.textarea.style.display = \"none\";\n }\n\n this.undoStack = [];\n this.redoStack = [];\n this.isRestoringHistory = false;\n this.maxHistory = 100;\n\n this.createEditorElement(element, props);\n this.setContent(\n typeof props.content === \"string\"\n ? props.content\n : this.textarea\n ? this.textarea.value\n : \"# Hello TinyMDE!\\nEdit **here**\"\n );\n \n this.e!.addEventListener(\"keydown\", (e) => this.handleUndoRedoKey(e));\n }\n\n get canUndo(): boolean {\n return this.undoStack.length >= 2;\n }\n\n get canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n private pushHistory(): void {\n if (this.isRestoringHistory) return;\n this.pushCurrentState();\n this.redoStack = [];\n }\n\n private pushCurrentState(): void {\n this.undoStack.push({\n content: this.getContent(),\n selection: this.getSelection(),\n anchor: this.getSelection(true),\n });\n if (this.undoStack.length > this.maxHistory) this.undoStack.shift();\n }\n\n public undo(): void {\n if (this.undoStack.length < 2) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const current = this.undoStack.pop()!;\n this.redoStack.push(current);\n const prev = this.undoStack[this.undoStack.length - 1];\n this.setContent(prev.content);\n if (prev.selection) this.setSelection(prev.selection, prev.anchor);\n this.undoStack.pop();\n this.isRestoringHistory = false;\n }\n\n public redo(): void {\n if (!this.redoStack.length) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const next = this.redoStack.pop()!;\n this.setContent(next.content);\n if (next.selection) this.setSelection(next.selection, next.anchor);\n this.isRestoringHistory = false;\n }\n\n private handleUndoRedoKey(e: KeyboardEvent): void {\n const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.platform);\n const ctrl = isMac ? e.metaKey : e.ctrlKey;\n if (ctrl && !e.altKey) {\n if (e.key === \"z\" || e.key === \"Z\") {\n if (e.shiftKey) {\n this.redo();\n } else {\n this.undo();\n }\n e.preventDefault();\n } else if (e.key === \"y\" || e.key === \"Y\") {\n this.redo();\n e.preventDefault();\n }\n }\n }\n\n private createEditorElement(element: HTMLElement, props: EditorProps): void {\n if (props && props.editor !== undefined) {\n if (typeof props.editor === 'string') {\n this.e = document.getElementById(props.editor) as HTMLDivElement;\n } else {\n this.e = props.editor as HTMLDivElement;\n }\n } else {\n this.e = document.createElement(\"div\");\n }\n\n this.e.classList.add(\"TinyMDE\");\n this.e.contentEditable = \"true\";\n this.e.style.whiteSpace = \"pre-wrap\";\n (this.e.style as any).webkitUserModify = \"read-write-plaintext-only\";\n\n if (props.editor === undefined) {\n if (\n this.textarea &&\n this.textarea.parentNode === element &&\n this.textarea.nextSibling\n ) {\n element.insertBefore(this.e, this.textarea.nextSibling);\n } else {\n element.appendChild(this.e);\n }\n }\n\n this.e.addEventListener(\"input\", (e) => this.handleInputEvent(e));\n this.e.addEventListener(\"beforeinput\", (e) => this.handleBeforeInputEvent(e));\n this.e.addEventListener(\"compositionend\", (e) => this.handleInputEvent(e));\n document.addEventListener(\"selectionchange\", (e) => {\n if (this.hasFocus) { this.handleSelectionChangeEvent(e); }\n }\n );\n this.e.addEventListener(\"blur\", () => this.hasFocus = false );\n this.e.addEventListener(\"focus\", () => this.hasFocus = true );\n this.e.addEventListener(\"paste\", (e) => this.handlePaste(e));\n this.e.addEventListener(\"drop\", (e) => this.handleDrop(e));\n this.lineElements = this.e.childNodes;\n }\n\n public setContent(content: string): void {\n while (this.e!.firstChild) {\n this.e!.removeChild(this.e!.firstChild);\n }\n this.lines = content.split(/(?:\\r\\n|\\r|\\n)/);\n this.lineDirty = [];\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let le = document.createElement(\"div\");\n this.e!.appendChild(le);\n this.lineDirty.push(true);\n }\n this.lineTypes = new Array(this.lines.length);\n this.updateFormatting();\n this.fireChange();\n if (!this.isRestoringHistory) this.pushHistory();\n }\n\n public getContent(): string {\n return this.lines.join(\"\\n\");\n }\n\n private updateFormatting(): void {\n this.updateLineTypes();\n this.updateLinkLabels();\n this.applyLineTypes();\n }\n\n private updateLinkLabels(): void {\n this.linkLabels = [];\n for (let l = 0; l < this.lines.length; l++) {\n if (this.lineTypes[l] === \"TMLinkReferenceDefinition\") {\n this.linkLabels.push(\n this.lineCaptures[l][\n lineGrammar.TMLinkReferenceDefinition.labelPlaceholder!\n ]\n );\n }\n }\n }\n\n private replace(replacement: string, capture: RegExpExecArray): string {\n return replacement.replace(/(\\${1,2})([0-9])/g, (str, p1, p2) => {\n if (p1 === \"$\") return htmlescape(capture[parseInt(p2)]);\n else\n return `<span class=\"TMInlineFormatted\">${this.processInlineStyles(\n capture[parseInt(p2)]\n )}</span>`;\n });\n }\n\n private applyLineTypes(): void {\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n if (this.lineDirty[lineNum]) {\n let contentHTML = this.replace(\n this.lineReplacements[lineNum],\n this.lineCaptures[lineNum]\n );\n (this.lineElements[lineNum] as HTMLElement).className = this.lineTypes[lineNum];\n (this.lineElements[lineNum] as HTMLElement).removeAttribute(\"style\");\n (this.lineElements[lineNum] as HTMLElement).innerHTML =\n contentHTML === \"\" ? \"<br />\" : contentHTML;\n }\n (this.lineElements[lineNum] as HTMLElement).dataset.lineNum = lineNum.toString();\n }\n }\n\n private updateLineTypes(): void {\n let codeBlockType: string | false = false;\n let codeBlockSeqLength = 0;\n let htmlBlock: HTMLBlockRule | false = false;\n\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let lineType = \"TMPara\";\n let lineCapture: RegExpExecArray = [this.lines[lineNum]] as RegExpExecArray;\n let lineReplacement = \"$$0\";\n\n // Check ongoing code blocks\n if (codeBlockType === \"TMCodeFenceBacktickOpen\") {\n let capture = lineGrammar.TMCodeFenceBacktickClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceBacktickClose\";\n lineReplacement = lineGrammar.TMCodeFenceBacktickClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeBacktick\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n } else if (codeBlockType === \"TMCodeFenceTildeOpen\") {\n let capture = lineGrammar.TMCodeFenceTildeClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceTildeClose\";\n lineReplacement = lineGrammar.TMCodeFenceTildeClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeTilde\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n }\n\n // Check HTML block types\n if (lineType === \"TMPara\" && htmlBlock === false) {\n for (let htmlBlockType of htmlBlockGrammar) {\n if (this.lines[lineNum].match(htmlBlockType.start)) {\n if (\n htmlBlockType.paraInterrupt ||\n lineNum === 0 ||\n !(\n this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\"\n )\n ) {\n htmlBlock = htmlBlockType;\n break;\n }\n }\n }\n }\n\n if (htmlBlock !== false) {\n lineType = \"TMHTMLBlock\";\n lineReplacement = '<span class=\"TMHTMLContent\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n\n if (htmlBlock.end) {\n if (this.lines[lineNum].match(htmlBlock.end)) {\n htmlBlock = false;\n }\n } else {\n if (\n lineNum === this.lines.length - 1 ||\n this.lines[lineNum + 1].match(lineGrammar.TMBlankLine.regexp)\n ) {\n htmlBlock = false;\n }\n }\n }\n\n // Check all regexps if we haven't applied one of the code block types\n if (lineType === \"TMPara\") {\n for (let type in lineGrammar) {\n if (lineGrammar[type].regexp) {\n let capture = lineGrammar[type].regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = type;\n lineReplacement = lineGrammar[type].replacement;\n lineCapture = capture;\n break;\n }\n }\n }\n }\n\n // If we've opened a code block, remember that\n if (lineType === \"TMCodeFenceBacktickOpen\" || lineType === \"TMCodeFenceTildeOpen\") {\n codeBlockType = lineType;\n codeBlockSeqLength = lineCapture.groups![\"seq\"].length;\n }\n\n // Link reference definition and indented code can't interrupt a paragraph\n if (\n (lineType === \"TMIndentedCode\" || lineType === \"TMLinkReferenceDefinition\") &&\n lineNum > 0 &&\n (this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\")\n ) {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n\n // Setext H2 markers that can also be interpreted as an empty list item should be regarded as such\n if (lineType === \"TMSetextH2Marker\") {\n let capture = lineGrammar.TMUL.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMUL\";\n lineReplacement = lineGrammar.TMUL.replacement;\n lineCapture = capture;\n }\n }\n\n // Setext headings are only valid if preceded by a paragraph\n if (lineType === \"TMSetextH1Marker\" || lineType === \"TMSetextH2Marker\") {\n if (lineNum === 0 || this.lineTypes[lineNum - 1] !== \"TMPara\") {\n let capture = lineGrammar.TMHR.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMHR\";\n lineCapture = capture;\n lineReplacement = lineGrammar.TMHR.replacement;\n } else {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n } else {\n let headingLine = lineNum - 1;\n const headingLineType = lineType === \"TMSetextH1Marker\" ? \"TMSetextH1\" : \"TMSetextH2\";\n do {\n if (this.lineTypes[headingLine] !== headingLineType) {\n this.lineTypes[headingLine] = headingLineType;\n this.lineDirty[headingLine] = true;\n }\n this.lineReplacements[headingLine] = \"$$0\";\n this.lineCaptures[headingLine] = [this.lines[headingLine]] as RegExpExecArray;\n headingLine--;\n } while (headingLine >= 0 && this.lineTypes[headingLine] === \"TMPara\");\n }\n }\n\n if (this.lineTypes[lineNum] !== lineType) {\n this.lineTypes[lineNum] = lineType;\n this.lineDirty[lineNum] = true;\n }\n this.lineReplacements[lineNum] = lineReplacement;\n this.lineCaptures[lineNum] = lineCapture;\n }\n }\n\n public getSelection(getAnchor: boolean = false): Position | null {\n const selection = window.getSelection();\n let startNode = getAnchor ? selection!.anchorNode : selection!.focusNode;\n if (!startNode) return null;\n let offset = getAnchor ? selection!.anchorOffset : selection!.focusOffset;\n if (startNode === this.e) {\n if (offset < this.lines.length)\n return {\n row: offset,\n col: 0,\n };\n return {\n row: offset - 1,\n col: this.lines[offset - 1].length,\n };\n }\n\n let col = this.computeColumn(startNode, offset);\n if (col === null) return null;\n\n let node = startNode;\n while (node.parentElement !== this.e) {\n node = node.parentElement!;\n }\n\n let row = 0;\n // If the node doesn't have a previous sibling, it must be the first line\n if (node.previousSibling) {\n const currentLineNumData = (node as HTMLElement).dataset?.lineNum;\n const previousLineNumData = (node.previousSibling as HTMLElement).dataset?.lineNum;\n\n if (currentLineNumData && previousLineNumData) {\n const currentLineNum = parseInt(currentLineNumData);\n const previousLineNum = parseInt(previousLineNumData);\n if (currentLineNum === previousLineNum + 1) {\n row = currentLineNum;\n } else {\n // If the current line is NOT the previous line + 1, then either \n // the current line got split in two or merged with the previous line\n // Either way, we need to recalculate the row number\n while (node.previousSibling) {\n row++;\n node = node.previousSibling;\n }\n }\n }\n }\n \n return { row: row, col: col };\n }\n\n public setSelection(focus: Position, anchor: Position | null = null): void {\n if (!focus) return;\n\n let { node: focusNode, offset: focusOffset } = this.computeNodeAndOffset(\n focus.row,\n focus.col,\n anchor ? anchor.row === focus.row && anchor.col > focus.col : false\n );\n let anchorNode = null,\n anchorOffset = null;\n if (anchor && (anchor.row !== focus.row || anchor.col !== focus.col)) {\n let { node, offset } = this.computeNodeAndOffset(\n anchor.row,\n anchor.col,\n focus.row === anchor.row && focus.col > anchor.col\n );\n anchorNode = node;\n anchorOffset = offset;\n }\n\n let windowSelection = window.getSelection();\n windowSelection!.setBaseAndExtent(\n focusNode,\n focusOffset,\n anchorNode || focusNode,\n anchorNode ? anchorOffset! : focusOffset\n );\n }\n\n public restoreLastSelection(): boolean {\n if (this.lastSelection && this.lastSelection.focus) {\n this.setSelection(this.lastSelection.focus, this.lastSelection.anchor);\n return true;\n }\n return false;\n }\n\n public paste(text: string, anchor: Position | null = null, focus: Position | null = null): void {\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) focus = this.getSelection(false);\n let beginning: Position, end: Position;\n if (!focus) {\n focus = {\n row: this.lines.length - 1,\n col: this.lines[this.lines.length - 1].length,\n };\n }\n if (!anchor) {\n anchor = focus;\n }\n if (\n anchor.row < focus.row ||\n (anchor.row === focus.row && anchor.col <= focus.col)\n ) {\n beginning = anchor;\n end = focus;\n } else {\n beginning = focus;\n end = anchor;\n }\n let insertedLines = text.split(/(?:\\r\\n|\\r|\\n)/);\n let lineBefore = this.lines[beginning.row].substr(0, beginning.col);\n let lineEnd = this.lines[end.row].substr(end.col);\n insertedLines[0] = lineBefore.concat(insertedLines[0]);\n let endColPos = insertedLines[insertedLines.length - 1].length;\n insertedLines[insertedLines.length - 1] = insertedLines[insertedLines.length - 1].concat(lineEnd);\n this.spliceLines(beginning.row, 1 + end.row - beginning.row, insertedLines);\n focus.row = beginning.row + insertedLines.length - 1;\n focus.col = endColPos;\n this.updateFormatting();\n this.setSelection(focus);\n this.fireChange();\n }\n\n public wrapSelection(pre: string, post: string, focus: Position | null = null, anchor: Position | null = null): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus || !anchor || focus.row !== anchor.row) return;\n this.lineDirty[focus.row] = true;\n\n const startCol = focus.col < anchor.col ? focus.col : anchor.col;\n const endCol = focus.col < anchor.col ? anchor.col : focus.col;\n const left = this.lines[focus.row].substr(0, startCol).concat(pre);\n const mid = endCol === startCol ? \"\" : this.lines[focus.row].substr(startCol, endCol - startCol);\n const right = post.concat(this.lines[focus.row].substr(endCol));\n this.lines[focus.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus.col = anchor.col + mid.length;\n\n this.updateFormatting();\n this.setSelection(focus, anchor);\n }\n\n public addEventListener<T extends EventType>(\n type: T,\n listener: T extends 'change' ? EventHandler<ChangeEvent> :\n T extends 'selection' ? EventHandler<SelectionEvent> :\n T extends 'drop' ? EventHandler<DropEvent> : never\n ): void {\n if (type.match(/^(?:change|input)$/i)) {\n this.listeners.change.push(listener as EventHandler<ChangeEvent>);\n }\n if (type.match(/^(?:selection|selectionchange)$/i)) {\n this.listeners.selection.push(listener as EventHandler<SelectionEvent>);\n }\n if (type.match(/^(?:drop)$/i)) {\n this.listeners.drop.push(listener as EventHandler<DropEvent>);\n }\n }\n\n private fireChange(): void {\n if (!this.textarea && !this.listeners.change.length) return;\n const content = this.getContent();\n if (this.textarea) this.textarea.value = content;\n for (let listener of this.listeners.change) {\n listener({\n content: content,\n linesDirty: [...this.lineDirty],\n });\n }\n }\n\n /**\n * beforeinput handler, exclusively to handle insertParagraph and\n * insertLineBreak events. These used to be handled in the input event,\n * but that caused issues with Firefox where the input event would be\n * sometimes not be fired for these input types.\n * @param event The input event\n * @returns nothing\n */\n private handleBeforeInputEvent(event: Event): void {\n const beforeInputEvent = event as InputEvent;\n if (\n beforeInputEvent.inputType !== \"insertParagraph\" &&\n beforeInputEvent.inputType !== \"insertLineBreak\"\n ) return;\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n this.clearDirtyFlag();\n\n const focus = this.getSelection();\n const anchor = this.getSelection(true);\n\n if (!focus || !anchor) return;\n \n // If focus and anchor are in different lines, simply remove everything \n // after the beginning of the selection and before the end of the selection\n // and remove any lines in between\n if (focus.row !== anchor.row) {\n const beginning = focus.row < anchor.row ? focus : anchor;\n const end = focus.row < anchor.row ? anchor : focus;\n this.lines[beginning.row] = this.lines[beginning.row].substring(0, beginning.col);\n this.lines[end.row] = this.lines[end.row].substring(end.col);\n this.spliceLines(beginning.row + 1, end.row - beginning.row - 1);\n focus.row = beginning.row + 1;\n focus.col = 0;\n } else {\n let continuableType: string | false = false;\n switch (this.lineTypes[focus.row]) {\n case \"TMUL\":\n continuableType = \"TMUL\";\n break;\n case \"TMOL\":\n continuableType = \"TMOL\";\n break;\n case \"TMIndentedCode\":\n continuableType = \"TMIndentedCode\";\n break;\n }\n \n const lineBeforeBreak = this.lines[focus.row].substring(0, focus.col <= anchor.col ? focus.col : anchor.col);\n const lineAfterBreak = this.lines[focus.row].substring(focus.col <= anchor.col ? anchor.col : focus.col);\n this.spliceLines(focus.row, 1, [lineBeforeBreak, lineAfterBreak]);\n\n focus.row += 1;\n focus.col = 0;\n\n if (continuableType) {\n let capture = lineGrammar[continuableType].regexp.exec(this.lines[focus.row - 1]);\n if (capture) {\n if (capture[2]) {\n if (continuableType === \"TMOL\") {\n capture[1] = capture[1].replace(/\\d{1,9}/, (result) => {\n return (parseInt(result) + 1).toString();\n });\n }\n this.lines[focus.row] = `${capture[1]}${this.lines[focus.row]}`;\n this.lineDirty[focus.row] = true;\n focus.col = capture[1].length;\n } else {\n this.lines[focus.row - 1] = \"\";\n this.lineDirty[focus.row - 1] = true;\n }\n }\n }\n }\n this.updateFormatting();\n this.setSelection(focus);\n\n // Scroll the element containing the selection into view\n if (focus && focus.row < this.lineElements.length) {\n (this.lineElements[focus.row] as HTMLElement).scrollIntoView({\n block: 'nearest',\n inline: 'nearest'\n });\n }\n\n this.fireChange();\n }\n\n private handleInputEvent(event: Event): void {\n const inputEvent = event as InputEvent;\n if (inputEvent.inputType === \"insertCompositionText\") return;\n if (!this.isRestoringHistory) this.pushHistory();\n\n let focus = this.getSelection();\n\n if ((inputEvent.inputType === \"insertParagraph\" || inputEvent.inputType === \"insertLineBreak\") && focus) {\n // This should never happen since these are handled by the beforeinput handler\n return;\n } else {\n if (!this.e!.firstChild) {\n this.e!.innerHTML = '<div class=\"TMBlankLine\"><br></div>';\n } else {\n this.fixNodeHierarchy();\n }\n this.updateLineContentsAndFormatting();\n }\n if (focus) {\n this.setSelection(focus);\n }\n\n this.fireChange();\n }\n\n private handleSelectionChangeEvent(_e: Event): void {\n this.fireSelection();\n }\n\n private handlePaste(event: ClipboardEvent): void {\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n\n let text = (event as any).clipboardData.getData(\"text/plain\");\n this.paste(text);\n }\n\n private handleDrop(event: DragEvent): void {\n event.preventDefault();\n this.fireDrop(event.dataTransfer!);\n }\n\n private processInlineStyles(originalString: string): string {\n let processed = \"\";\n let stack: Array<{delimiter: string, delimString: string, count: number, output: string}> = [];\n let offset = 0;\n let string = originalString;\n\n outer: while (string) {\n // Process simple rules (non-delimiter)\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n if (this.mergedInlineGrammar[rule]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n \n // Process custom inline grammar rules\n for (let rule in this.customInlineGrammar) {\n if (rule !== \"escape\" && rule !== \"code\" && rule !== \"autolink\" && rule !== \"html\" && rule !== \"linkOpen\" && rule !== \"imageOpen\" && rule !== \"linkLabel\" && rule !== \"default\") {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n\n // Check for links / images\n let potentialLink = string.match(this.mergedInlineGrammar.linkOpen.regexp);\n let potentialImage = string.match(this.mergedInlineGrammar.imageOpen.regexp);\n if (potentialImage || potentialLink) {\n let result = this.parseLinkOrImage(string, !!potentialImage);\n if (result) {\n processed = `${processed}${result.output}`;\n string = string.substr(result.charCount);\n offset += result.charCount;\n continue outer;\n }\n }\n\n // Check for em / strong delimiters\n let cap = /(^\\*+)|(^_+)/.exec(string);\n if (cap) {\n let delimCount = cap[0].length;\n const delimString = cap[0];\n const currentDelimiter = cap[0][0];\n\n string = string.substr(cap[0].length);\n\n const preceding = offset > 0 ? originalString.substr(0, offset) : \" \";\n const following = offset + cap[0].length < originalString.length ? string : \" \";\n\n const punctuationFollows = following.match(punctuationLeading);\n const punctuationPrecedes = preceding.match(punctuationTrailing);\n const whitespaceFollows = following.match(/^\\s/);\n const whitespacePrecedes = preceding.match(/\\s$/);\n\n let canOpen = !whitespaceFollows && (!punctuationFollows || !!whitespacePrecedes || !!punctuationPrecedes);\n let canClose = !whitespacePrecedes && (!punctuationPrecedes || !!whitespaceFollows || !!punctuationFollows);\n\n if (currentDelimiter === \"_\" && canOpen && canClose) {\n canOpen = !!punctuationPrecedes;\n canClose = !!punctuationFollows;\n }\n\n if (canClose) {\n let stackPointer = stack.length - 1;\n while (delimCount && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === currentDelimiter) {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n if (delimCount >= 2 && stack[stackPointer].count >= 2) {\n processed = `<span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span><strong class=\"TMStrong\">${processed}</strong><span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span>`;\n delimCount -= 2;\n stack[stackPointer].count -= 2;\n } else {\n processed = `<span class=\"TMMark\">${currentDelimiter}</span><em class=\"TMEm\">${processed}</em><span class=\"TMMark\">${currentDelimiter}</span>`;\n delimCount -= 1;\n stack[stackPointer].count -= 1;\n }\n\n if (stack[stackPointer].count === 0) {\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n stackPointer--;\n }\n } else {\n stackPointer--;\n }\n }\n }\n\n if (delimCount && canOpen) {\n stack.push({\n delimiter: currentDelimiter,\n delimString: delimString,\n count: delimCount,\n output: processed,\n });\n processed = \"\";\n delimCount = 0;\n }\n\n if (delimCount) {\n processed = `${processed}${delimString.substr(0, delimCount)}`;\n }\n\n offset += cap[0].length;\n continue outer;\n }\n\n // Check for strikethrough delimiter\n cap = /^~~/.exec(string);\n if (cap) {\n let consumed = false;\n let stackPointer = stack.length - 1;\n while (!consumed && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === \"~\") {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n processed = `<span class=\"TMMark\">~~</span><del class=\"TMStrikethrough\">${processed}</del><span class=\"TMMark\">~~</span>`;\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n consumed = true;\n } else {\n stackPointer--;\n }\n }\n\n if (!consumed) {\n stack.push({\n delimiter: \"~\",\n delimString: \"~~\",\n count: 2,\n output: processed,\n });\n processed = \"\";\n }\n\n offset += cap[0].length;\n string = string.substr(cap[0].length);\n continue outer;\n }\n\n // Process 'default' rule\n cap = this.mergedInlineGrammar.default.regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar.default.replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n throw \"Infinite loop!\";\n }\n\n while (stack.length) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n return processed;\n }\n\n private computeColumn(startNode: Node, offset: number): number | null {\n let node = startNode;\n let col: number;\n while (node && node.parentNode !== this.e) {\n node = node.parentNode!;\n }\n if (node === null) return null;\n\n if (startNode.nodeType === Node.TEXT_NODE || offset === 0) {\n col = offset;\n node = startNode;\n } else if (offset > 0) {\n node = startNode.childNodes[offset - 1];\n col = node.textContent!.length;\n } else {\n col = 0;\n node = startNode;\n }\n while (node.parentNode !== this.e) {\n if (node.previousSibling) {\n node = node.previousSibling;\n col += node.textContent!.length;\n } else {\n node = node.parentNode as unknown as ChildNode;\n }\n }\n return col;\n }\n\n private computeNodeAndOffset(row: number, col: number, bindRight: boolean = false): {node: Node, offset: number} {\n if (row >= this.lineElements.length) {\n row = this.lineElements.length - 1;\n col = this.lines[row].length;\n }\n if (col > this.lines[row].length) {\n col = this.lines[row].length;\n }\n const parentNode = this.lineElements[row] as HTMLElement;\n let node = parentNode.firstChild;\n\n let childrenComplete = false;\n let rv = {\n node: parentNode.firstChild ? parentNode.firstChild : parentNode,\n offset: 0,\n };\n\n while (node !== parentNode) {\n if (!childrenComplete && node!.nodeType === Node.TEXT_NODE) {\n if (node!.nodeValue!.length >= col) {\n if (bindRight && node!.nodeValue!.length === col) {\n rv = { node: node!, offset: col };\n col = 0;\n } else {\n return { node: node!, offset: col };\n }\n } else {\n col -= node!.nodeValue!.length;\n }\n }\n if (!childrenComplete && node!.firstChild) {\n node = node!.firstChild;\n } else if (node!.nextSibling) {\n childrenComplete = false;\n node = node!.nextSibling;\n } else {\n childrenComplete = true;\n node = node!.parentNode as unknown as ChildNode;\n }\n }\n\n return rv;\n }\n\n private updateLineContentsAndFormatting(): void {\n this.clearDirtyFlag();\n this.updateLineContents();\n this.updateFormatting();\n }\n\n private clearDirtyFlag(): void {\n this.lineDirty = new Array(this.lines.length);\n for (let i = 0; i < this.lineDirty.length; i++) {\n this.lineDirty[i] = false;\n }\n }\n\n private updateLineContents(): void {\n let lineDelta = this.e!.childElementCount - this.lines.length;\n if (lineDelta) {\n let firstChangedLine = 0;\n while (\n firstChangedLine <= this.lines.length &&\n firstChangedLine <= this.lineElements.length &&\n this.lineElements[firstChangedLine] &&\n this.lines[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).textContent &&\n this.lineTypes[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).className\n ) {\n firstChangedLine++;\n }\n\n let lastChangedLine = -1;\n while (\n -lastChangedLine < this.lines.length &&\n -lastChangedLine < this.lineElements.length &&\n this.lines[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).textContent &&\n this.lineTypes[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).className\n ) {\n lastChangedLine--;\n }\n\n let linesToDelete = this.lines.length + lastChangedLine + 1 - firstChangedLine;\n if (linesToDelete < -lineDelta) linesToDelete = -lineDelta;\n if (linesToDelete < 0) linesToDelete = 0;\n\n let linesToAdd = [];\n for (let l = 0; l < linesToDelete + lineDelta; l++) {\n linesToAdd.push((this.lineElements[firstChangedLine + l] as HTMLElement).textContent || \"\");\n }\n this.spliceLines(firstChangedLine, linesToDelete, linesToAdd, false);\n } else {\n for (let line = 0; line < this.lineElements.length; line++) {\n let e = this.lineElements[line] as HTMLElement;\n let ct = e.textContent || \"\";\n if (this.lines[line] !== ct || this.lineTypes[line] !== e.className) {\n this.lines[line] = ct;\n this.lineTypes[line] = e.className;\n this.lineDirty[line] = true;\n }\n }\n }\n }\n\n private spliceLines(\n startLine: number,\n linesToDelete: number = 0,\n linesToInsert: string[] = [],\n adjustLineElements: boolean = true\n ): void {\n if (adjustLineElements) {\n for (let i = 0; i < linesToDelete; i++) {\n this.e!.removeChild(this.e!.childNodes[startLine]);\n }\n }\n\n let insertedBlank = [];\n let insertedDirty = [];\n\n for (let i = 0; i < linesToInsert.length; i++) {\n insertedBlank.push(\"\");\n insertedDirty.push(true);\n if (adjustLineElements) {\n if (this.e!.childNodes[startLine])\n this.e!.insertBefore(document.createElement(\"div\"), this.e!.childNodes[startLine]);\n else this.e!.appendChild(document.createElement(\"div\"));\n }\n }\n\n this.lines.splice(startLine, linesToDelete, ...linesToInsert);\n this.lineTypes.splice(startLine, linesToDelete, ...insertedBlank);\n this.lineDirty.splice(startLine, linesToDelete, ...insertedDirty);\n }\n\n private fixNodeHierarchy(): void {\n const originalChildren = Array.from(this.e!.childNodes);\n\n const replaceChild = (child: Node, ...newChildren: Node[]) => {\n const parent = child.parentElement!;\n const nextSibling = child.nextSibling;\n parent.removeChild(child);\n newChildren.forEach((newChild) =>\n nextSibling ? parent.insertBefore(newChild, nextSibling) : parent.appendChild(newChild)\n );\n };\n\n originalChildren.forEach((child) => {\n if (child.nodeType !== Node.ELEMENT_NODE || (child as HTMLElement).tagName !== \"DIV\") {\n const divWrapper = document.createElement(\"div\");\n replaceChild(child, divWrapper);\n divWrapper.appendChild(child);\n } else if (child.childNodes.length === 0) {\n child.appendChild(document.createElement(\"br\"));\n } else {\n const grandChildren = Array.from(child.childNodes);\n if (\n grandChildren.some(\n (grandChild) =>\n grandChild.nodeType === Node.ELEMENT_NODE && (grandChild as HTMLElement).tagName === \"DIV\"\n )\n ) {\n return replaceChild(child, ...grandChildren);\n }\n }\n });\n }\n\n private parseLinkOrImage(originalString: string, isImage: boolean): {output: string, charCount: number} | false {\n // Skip the opening bracket\n let textOffset = isImage ? 2 : 1;\n let opener = originalString.substr(0, textOffset);\n let type = isImage ? \"TMImage\" : \"TMLink\";\n let currentOffset = textOffset;\n\n let bracketLevel = 1;\n let linkText: string | false = false;\n let linkRef: string | false = false;\n let linkLabel: string[] = [];\n let linkDetails: string[] = [];\n\n textOuter: while (\n currentOffset < originalString.length &&\n linkText === false\n ) {\n let string = originalString.substr(currentOffset);\n\n // Capture any escapes and code blocks at current position\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n continue textOuter;\n }\n }\n\n // Check for image\n if (string.match(this.mergedInlineGrammar.imageOpen.regexp)) {\n bracketLevel++;\n currentOffset += 2;\n continue textOuter;\n }\n\n // Check for link\n if (string.match(this.mergedInlineGrammar.linkOpen.regexp)) {\n bracketLevel++;\n if (!isImage) {\n if (this.parseLinkOrImage(string, false)) {\n return false;\n }\n }\n currentOffset += 1;\n continue textOuter;\n }\n\n // Check for closing bracket\n if (string.match(/^\\]/)) {\n bracketLevel--;\n if (bracketLevel === 0) {\n linkText = originalString.substr(textOffset, currentOffset - textOffset);\n currentOffset++;\n continue textOuter;\n }\n }\n\n // Nothing matches, proceed to next char\n currentOffset++;\n }\n\n // Did we find a link text?\n if (linkText === false) return false;\n\n // Check what type of link this is\n let nextChar = currentOffset < originalString.length ? originalString.substr(currentOffset, 1) : \"\";\n\n // REFERENCE LINKS\n if (nextChar === \"[\") {\n let string = originalString.substr(currentOffset);\n let cap = this.mergedInlineGrammar.linkLabel.regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n linkLabel.push(cap[1], cap[2], cap[3]);\n if (cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!]) {\n linkRef = cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!];\n } else {\n linkRef = linkText.trim();\n }\n } else {\n return false;\n }\n } else if (nextChar !== \"(\") {\n // Shortcut ref link\n linkRef = linkText.trim();\n } else {\n // INLINE LINKS\n currentOffset++;\n let parenthesisLevel = 1;\n\n inlineOuter: while (currentOffset < originalString.length && parenthesisLevel > 0) {\n let string = originalString.substr(currentOffset);\n\n // Process whitespace\n let cap = /^\\s+/.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(cap[0]);\n break;\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n if (linkDetails[0].match(/</)) {\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n } else {\n if (parenthesisLevel !== 1) return false;\n linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n }\n break;\n case 3:\n linkDetails.push(cap[0]);\n break;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n case 7:\n linkDetails[6] = linkDetails[6].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process backslash escapes\n cap = this.mergedInlineGrammar.escape.regexp.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process opening angle bracket\n if (linkDetails.length < 2 && string.match(/^</)) {\n if (linkDetails.length === 0) linkDetails.push(\"\");\n linkDetails[0] = linkDetails[0].concat(\"<\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing angle bracket\n if ((linkDetails.length === 1 || linkDetails.length === 2) && string.match(/^>/)) {\n if (linkDetails.length === 1) linkDetails.push(\"\");\n linkDetails.push(\">\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process non-parenthesis delimiter for title\n cap = /^[\"']/.exec(string);\n if (cap && (linkDetails.length === 0 || linkDetails.length === 1 || linkDetails.length === 4)) {\n while (linkDetails.length < 4) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n if (cap && (linkDetails.length === 5 || linkDetails.length === 6) && linkDetails[4] === cap[0]) {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process opening parenthesis\n if (string.match(/^\\(/)) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(\"\");\n case 2:\n linkDetails[1] = linkDetails[1].concat(\"(\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel++;\n break;\n case 3:\n linkDetails.push(\"\");\n case 4:\n linkDetails.push(\"(\");\n break;\n case 5:\n linkDetails.push(\"\");\n case 6:\n if (linkDetails[4] === \"(\") return false;\n linkDetails[5] = linkDetails[5].concat(\"(\");\n break;\n default:\n return false;\n }\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing parenthesis\n if (string.match(/^\\)/)) {\n if (linkDetails.length <= 2) {\n while (linkDetails.length < 2) linkDetails.push(\"\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel--;\n if (parenthesisLevel > 0) {\n linkDetails[1] = linkDetails[1].concat(\")\");\n }\n } else if (linkDetails.length === 5 || linkDetails.length === 6) {\n if (linkDetails[4] === \"(\") {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(\")\");\n } else {\n if (linkDetails.length === 5) linkDetails.push(\")\");\n else linkDetails[5] = linkDetails[5].concat(\")\");\n }\n } else {\n parenthesisLevel--;\n }\n\n if (parenthesisLevel === 0) {\n while (linkDetails.length < 7) linkDetails.push(\"\");\n }\n\n currentOffset++;\n continue inlineOuter;\n }\n\n // Any old character\n cap = /^./.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n throw \"Infinite loop\";\n }\n if (parenthesisLevel > 0) return false;\n }\n\n if (linkRef !== false) {\n // Reference link; check that linkRef is valid\n let valid = false;\n for (let label of this.linkLabels) {\n if (label === linkRef) {\n valid = true;\n break;\n }\n }\n let labelClass = valid ? \"TMLinkLabel TMLinkLabel_Valid\" : \"TMLinkLabel TMLinkLabel_Invalid\";\n let output = `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type} ${\n linkLabel.length < 3 || !linkLabel[1] ? labelClass : \"\"\n }\">${this.processInlineStyles(linkText)}</span><span class=\"TMMark TMMark_${type}\">]</span>`;\n\n if (linkLabel.length >= 3) {\n output = output.concat(\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[0]}</span>`,\n `<span class=\"${labelClass}\">${linkLabel[1]}</span>`,\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[2]}</span>`\n );\n }\n return {\n output: output,\n charCount: currentOffset,\n };\n } else if (linkDetails.length > 0) {\n // Inline link\n while (linkDetails.length < 7) {\n linkDetails.push(\"\");\n }\n\n return {\n output: `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type}\">${this.processInlineStyles(\n linkText\n )}</span><span class=\"TMMark TMMark_${type}\">](${\n linkDetails[0]\n }</span><span class=\"${type}Destination\">${\n htmlescape(linkDetails[1])\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[2]}${\n linkDetails[3]\n }${linkDetails[4]}</span><span class=\"${type}Title\">${\n htmlescape(linkDetails[5])\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[6]})</span>`,\n charCount: currentOffset,\n };\n }\n\n return false;\n }\n\n private computeCommonAncestor(node1: Node | null, node2: Node | null): Node | null {\n if (!node1 || !node2) return null;\n if (node1 === node2) return node1;\n const ancestry = (node: Node) => {\n let ancestry = [];\n while (node) {\n ancestry.unshift(node);\n node = node.parentNode!;\n }\n return ancestry;\n };\n\n const ancestry1 = ancestry(node1);\n const ancestry2 = ancestry(node2);\n\n if (ancestry1[0] !== ancestry2[0]) return null;\n let i;\n for (i = 0; ancestry1[i] === ancestry2[i]; i++);\n return ancestry1[i - 1];\n }\n\n private computeEnclosingMarkupNode(focus: Position, anchor: Position | null, className: string): Node | null {\n let node = null;\n if (!focus) return null;\n if (!anchor) {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode) return null;\n node = sel.focusNode;\n } else {\n if (focus.row !== anchor.row) return null;\n const sel = window.getSelection();\n if (!sel) return null;\n node = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n }\n if (!node) return null;\n while (node !== this.e) {\n if ((node as HTMLElement).className && (node as HTMLElement).className.includes(className)) return node;\n node = node.parentNode!;\n }\n return null;\n }\n\n public getCommandState(focus: Position | null = null, anchor: Position | null = null): Record<string, boolean | null> {\n let commandState: Record<string, boolean | null> = {};\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) {\n for (let cmd in commands) {\n commandState[cmd] = null;\n }\n return commandState;\n }\n if (!anchor) anchor = focus;\n\n let start: Position, end: Position;\n if (anchor.row < focus.row || (anchor.row === focus.row && anchor.col < focus.col)) {\n start = anchor;\n end = focus;\n } else {\n start = focus;\n end = anchor;\n }\n if (end.row > start.row && end.col === 0) {\n end.row--;\n end.col = this.lines[end.row].length;\n }\n\n for (let cmd in commands) {\n if (commands[cmd].type === \"inline\") {\n if (!focus || focus.row !== anchor!.row || !this.isInlineFormattingAllowed()) {\n commandState[cmd] = null;\n } else {\n commandState[cmd] =\n !!this.computeEnclosingMarkupNode(focus, anchor, commands[cmd].className) ||\n (focus.col === anchor!.col &&\n !!this.lines[focus.row].substr(0, focus.col).match(commands[cmd].unset.prePattern) &&\n !!this.lines[focus.row].substr(focus.col).match(commands[cmd].unset.postPattern));\n }\n }\n if (commands[cmd].type === \"line\") {\n if (!focus) {\n commandState[cmd] = null;\n } else {\n let state: boolean | null = this.lineTypes[start.row] === commands[cmd].className;\n for (let line = start.row; line <= end.row; line++) {\n if ((this.lineTypes[line] === commands[cmd].className) !== state) {\n state = null;\n break;\n }\n }\n commandState[cmd] = state;\n }\n }\n }\n return commandState;\n }\n\n public setCommandState(command: string, state: boolean): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (commands[command].type === \"inline\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!anchor) return;\n if (anchor.row !== focus!.row) return;\n if (!this.isInlineFormattingAllowed()) return;\n let markupNode = this.computeEnclosingMarkupNode(focus!, anchor, commands[command].className);\n this.clearDirtyFlag();\n\n if (markupNode) {\n this.lineDirty[focus!.row] = true;\n const startCol = this.computeColumn(markupNode, 0)!;\n const len = markupNode.textContent!.length;\n const left = this.lines[focus!.row]\n .substr(0, startCol)\n .replace(commands[command].unset.prePattern, \"\");\n const mid = this.lines[focus!.row].substr(startCol, len);\n const right = this.lines[focus!.row]\n .substr(startCol + len)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus!.col = anchor.col + len;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else if (\n focus!.col === anchor.col &&\n !!this.lines[focus!.row].substr(0, focus!.col).match(commands[command].unset.prePattern) &&\n !!this.lines[focus!.row].substr(focus!.col).match(commands[command].unset.postPattern)\n ) {\n this.lineDirty[focus!.row] = true;\n const left = this.lines[focus!.row]\n .substr(0, focus!.col)\n .replace(commands[command].unset.prePattern, \"\");\n const right = this.lines[focus!.row]\n .substr(focus!.col)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(right);\n focus!.col = anchor.col = left.length;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else {\n let { startCol, endCol } =\n focus!.col < anchor.col\n ? { startCol: focus!.col, endCol: anchor.col }\n : { startCol: anchor.col, endCol: focus!.col };\n\n let match = this.lines[focus!.row]\n .substr(startCol, endCol - startCol)\n .match(/^(?<leading>\\s*).*\\S(?<trailing>\\s*)$/);\n if (match) {\n startCol += match.groups!.leading.length;\n endCol -= match.groups!.trailing.length;\n }\n\n focus!.col = startCol;\n anchor.col = endCol;\n\n this.wrapSelection(commands[command].set.pre, commands[command].set.post, focus, anchor);\n this.fireChange();\n }\n } else if (commands[command].type === \"line\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!focus) return;\n this.clearDirtyFlag();\n let start = anchor!.row > focus!.row ? focus! : anchor!;\n let end = anchor!.row > focus!.row ? anchor! : focus!;\n if (end.row > start.row && end.col === 0) {\n end.row--;\n }\n\n for (let line = start.row; line <= end.row; line++) {\n if (state && this.lineTypes[line] !== commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].set.pattern,\n commands[command].set.replacement.replace(\"$#\", (line - start.row + 1).toString())\n );\n this.lineDirty[line] = true;\n }\n if (!state && this.lineTypes[line] === commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].unset.pattern,\n commands[command].unset.replacement\n );\n this.lineDirty[line] = true;\n }\n }\n this.updateFormatting();\n this.setSelection(\n { row: end.row, col: this.lines[end.row].length },\n { row: start.row, col: 0 }\n );\n this.fireChange();\n }\n }\n\n public isInlineFormattingAllowed(): boolean {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode || !sel.anchorNode) return false;\n\n if (\n sel.isCollapsed &&\n sel.focusNode.nodeType === 3 &&\n sel.focusOffset === sel.focusNode.nodeValue!.length\n ) {\n let node;\n for (node = sel.focusNode; node && node.nextSibling === null; node = node.parentNode!);\n if (\n node &&\n node.nextSibling &&\n (node.nextSibling as HTMLElement).className &&\n (node.nextSibling as HTMLElement).className.includes(\"TMInlineFormatted\")\n )\n return true;\n }\n\n let ancestor = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n if (!ancestor) return false;\n\n while (ancestor && ancestor !== this.e) {\n if (\n (ancestor as HTMLElement).className &&\n typeof (ancestor as HTMLElement).className.includes === \"function\" &&\n ((ancestor as HTMLElement).className.includes(\"TMInlineFormatted\") ||\n (ancestor as HTMLElement).className.includes(\"TMBlankLine\"))\n )\n return true;\n ancestor = ancestor.parentNode!;\n }\n\n return false;\n }\n\n public toggleCommandState(command: string): void {\n if (!this.lastCommandState) this.lastCommandState = this.getCommandState();\n this.setCommandState(command, !this.lastCommandState[command]);\n }\n\n private fireDrop(dataTransfer: DataTransfer): void {\n for (let listener of this.listeners.drop) {\n listener({ dataTransfer });\n }\n }\n\n private fireSelection(): void {\n let focus = this.getSelection(false);\n let anchor = this.getSelection(true);\n\n // Save the current selection for restoration later\n this.lastSelection = {\n focus: focus,\n anchor: anchor\n };\n\n if (this.listeners.selection && this.listeners.selection.length) {\n let commandState = this.getCommandState(focus, anchor);\n if (this.lastCommandState) {\n Object.assign(this.lastCommandState, commandState);\n } else {\n this.lastCommandState = Object.assign({}, commandState);\n }\n for (let listener of this.listeners.selection) {\n listener({\n focus: focus!,\n anchor: anchor!,\n commandState: this.lastCommandState,\n });\n }\n }\n }\n}\n\nexport default Editor;\n"],"names":["global","this","require$$0","require$$1","require$$2","require$$3","sharedStoreModule","require$$4","require$$5","require$$6","require$$7","makeBuiltIn","makeBuiltInModule","ownKeys","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","svg","blockquote","bold","clear_formatting","code","h1","h2","hr","image","italic","link","ol","redo","strikethrough","ul","undo","isMacLike","test","navigator","platform","DefaultCommands","name","action","innerHTML","title","hotkey","insertLink","editor","isInlineFormattingAllowed","wrapSelection","enabled","insertImage","paste","canUndo","canRedo","CommandBar","constructor","props","e","commands","buttons","state","hotkeys","element","document","getElementById","body","createCommandBarElement","addEventListener","handleKeydown","setEditor","parentElement","createElement","className","command","el","appendChild","commandName","Object","assign","keys","split","modifiers","modifierexplanation","i","length","push","lastKey","match","concat","toUpperCase","key","toLowerCase","join","handleClick","event","preventDefault","editorHadFocus","contains","activeElement","focus","restoreLastSelection","setCommandState","handleSelection","commandState","undefined","anchor","outer","modifier","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","replacements","ASCIIPunctuation","NotTriggerChar","Scheme","Email","HTMLOpenTag","HTMLCloseTag","HTMLTagName","HTMLComment","HTMLPI","HTMLDeclaration","HTMLCDATA","HTMLAttribute","HTMLAttValue","KnownTag","punctuationLeading","RegExp","punctuationTrailing","lineGrammar","TMH1","regexp","replacement","TMH2","TMH3","TMH4","TMH5","TMH6","TMBlockquote","TMCodeFenceBacktickOpen","_wrapRegExp","seq","TMCodeFenceTildeOpen","TMCodeFenceBacktickClose","TMCodeFenceTildeClose","TMBlankLine","TMSetextH1Marker","TMSetextH2Marker","TMHR","TMUL","TMOL","TMIndentedCode","TMLinkReferenceDefinition","labelPlaceholder","htmlBlockGrammar","start","end","paraInterrupt","inlineGrammar","escape","autolink","html","linkOpen","imageOpen","linkLabel","default","replacementRegexp","inlineRules","rule","re","source","replace","string","flags","createMergedInlineGrammar","customRules","arguments","merged","_objectSpread","ruleName","entries","processedRule","regexpSource","htmlescape","type","set","pre","post","unset","prePattern","postPattern","pattern","h3","h4","h5","h6","Editor","textarea","lines","lineElements","lineTypes","lineCaptures","lineReplacements","linkLabels","lineDirty","lastCommandState","customInlineGrammar","mergedInlineGrammar","hasFocus","lastSelection","listeners","change","selection","drop","undoStack","redoStack","isRestoringHistory","maxHistory","getElementsByTagName","tagName","parentNode","style","display","createEditorElement","setContent","content","value","handleUndoRedoKey","pushHistory","pushCurrentState","getContent","getSelection","shift","current","pop","prev","setSelection","next","isMac","ctrl","metaKey","ctrlKey","altKey","shiftKey","classList","add","contentEditable","whiteSpace","webkitUserModify","nextSibling","insertBefore","handleInputEvent","handleBeforeInputEvent","handleSelectionChangeEvent","handlePaste","handleDrop","childNodes","firstChild","removeChild","lineNum","le","Array","updateFormatting","fireChange","updateLineTypes","updateLinkLabels","applyLineTypes","l","capture","str","p1","p2","parseInt","processInlineStyles","contentHTML","removeAttribute","dataset","toString","codeBlockType","codeBlockSeqLength","htmlBlock","lineType","lineCapture","lineReplacement","exec","groups","htmlBlockType","headingLine","headingLineType","getAnchor","window","startNode","anchorNode","focusNode","offset","anchorOffset","focusOffset","row","col","computeColumn","node","previousSibling","currentLineNumData","_a","previousLineNumData","_b","currentLineNum","previousLineNum","computeNodeAndOffset","windowSelection","setBaseAndExtent","text","beginning","insertedLines","lineBefore","substr","lineEnd","endColPos","spliceLines","startCol","endCol","left","mid","right","listener","linesDirty","beforeInputEvent","inputType","clearDirtyFlag","substring","continuableType","lineBeforeBreak","lineAfterBreak","result","scrollIntoView","block","inline","inputEvent","fixNodeHierarchy","updateLineContentsAndFormatting","_e","fireSelection","clipboardData","getData","fireDrop","dataTransfer","originalString","processed","stack","cap","potentialLink","potentialImage","parseLinkOrImage","output","charCount","delimCount","delimString","currentDelimiter","preceding","following","punctuationFollows","punctuationPrecedes","whitespaceFollows","whitespacePrecedes","canOpen","canClose","stackPointer","delimiter","entry","count","consumed","nodeType","Node","TEXT_NODE","textContent","bindRight","childrenComplete","rv","nodeValue","updateLineContents","lineDelta","childElementCount","firstChangedLine","lastChangedLine","linesToDelete","linesToAdd","line","ct","startLine","linesToInsert","adjustLineElements","insertedBlank","insertedDirty","splice","originalChildren","from","replaceChild","child","parent","_len","newChildren","_key","forEach","newChild","ELEMENT_NODE","divWrapper","grandChildren","some","grandChild","isImage","textOffset","opener","currentOffset","bracketLevel","linkText","linkRef","linkDetails","textOuter","nextChar","trim","parenthesisLevel","inlineOuter","valid","label","labelClass","computeCommonAncestor","node1","node2","ancestry","unshift","ancestry1","ancestry2","computeEnclosingMarkupNode","sel","includes","getCommandState","cmd","markupNode","len","leading","trailing","isCollapsed","ancestor","toggleCommandState"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115]}