tiny-markdown-editor 0.2.25 → 0.2.27
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 +2 -2
- package/dist/tiny-mde.min.js +1 -1
- package/lib/svg/svg.js +1 -1
- package/package.json +1 -1
package/dist/tiny-mde.js
CHANGED
|
@@ -2577,7 +2577,7 @@
|
|
|
2577
2577
|
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>",
|
|
2578
2578
|
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>",
|
|
2579
2579
|
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>",
|
|
2580
|
-
hr: "<svg height=\"18\" width=\"18\"><rect ry=\"1\" y=\"8\" height=\"2\" width=\"18\"
|
|
2580
|
+
hr: "<svg height=\"18\" width=\"18\"><rect ry=\"1\" y=\"8\" height=\"2\" width=\"18\"/></svg>",
|
|
2581
2581
|
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>",
|
|
2582
2582
|
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>",
|
|
2583
2583
|
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>",
|
|
@@ -5816,4 +5816,4 @@
|
|
|
5816
5816
|
}));
|
|
5817
5817
|
//# sourceMappingURL=index.js.map
|
|
5818
5818
|
|
|
5819
|
-
//# 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/OiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT47XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uIHtcbiAgcm93OiBudW1iZXI7XG4gIGNvbDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlTdGF0ZSB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgc2VsZWN0aW9uOiBQb3NpdGlvbiB8IG51bGw7XG4gIGFuY2hvcjogUG9zaXRpb24gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZUV2ZW50IHtcbiAgY29udGVudDogc3RyaW5nO1xuICBsaW5lc0RpcnR5OiBib29sZWFuW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uRXZlbnQge1xuICBmb2N1czogUG9zaXRpb247XG4gIGFuY2hvcjogUG9zaXRpb247XG4gIGNvbW1hbmRTdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BFdmVudCB7XG4gIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyO1xufVxuXG50eXBlIEV2ZW50VHlwZSA9ICdjaGFuZ2UnIHwgJ3NlbGVjdGlvbicgfCAnZHJvcCc7XG50eXBlIEV2ZW50SGFuZGxlcjxUPiA9IChldmVudDogVCkgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIEVkaXRvciB7XG4gIHB1YmxpYyBlOiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgdGV4dGFyZWE6IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZUVsZW1lbnRzOiBOb2RlTGlzdE9mPENoaWxkTm9kZT4gfCBIVE1MQ29sbGVjdGlvbiB8IENoaWxkTm9kZVtdID0gW107XG4gIHB1YmxpYyBsaW5lVHlwZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lQ2FwdHVyZXM6IFJlZ0V4cEV4ZWNBcnJheVtdID0gW107XG4gIHB1YmxpYyBsaW5lUmVwbGFjZW1lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGlua0xhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVEaXJ0eTogYm9vbGVhbltdID0gW107XG4gIHB1YmxpYyBsYXN0Q29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXN0b21JbmxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7fTtcbiAgcHJpdmF0ZSBtZXJnZWRJbmxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSBpbmxpbmVHcmFtbWFyO1xuICBwcml2YXRlIGhhc0ZvY3VzOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBsYXN0U2VsZWN0aW9uOiB7IGZvY3VzOiBQb3NpdGlvbiB8IG51bGw7IGFuY2hvcjogUG9zaXRpb24gfCBudWxsIH0gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwbGFjZWhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBsaXN0ZW5lcnM6IHtcbiAgICBjaGFuZ2U6IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD5bXTtcbiAgICBzZWxlY3Rpb246IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD5bXTtcbiAgICBkcm9wOiBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PltdO1xuICB9ID0ge1xuICAgIGNoYW5nZTogW10sXG4gICAgc2VsZWN0aW9uOiBbXSxcbiAgICBkcm9wOiBbXSxcbiAgfTtcblxuICBwcml2YXRlIHVuZG9TdGFjazogSGlzdG9yeVN0YXRlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWRvU3RhY2s6IEhpc3RvcnlTdGF0ZVtdID0gW107XG4gIHByaXZhdGUgaXNSZXN0b3JpbmdIaXN0b3J5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgbWF4SGlzdG9yeTogbnVtYmVyID0gMTAwO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFZGl0b3JQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLnRleHRhcmVhID0gbnVsbDtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gICAgdGhpcy5saW5lRWxlbWVudHMgPSBbXSBhcyBDaGlsZE5vZGVbXTtcbiAgICB0aGlzLmxpbmVUeXBlcyA9IFtdO1xuICAgIHRoaXMubGluZUNhcHR1cmVzID0gW107XG4gICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzID0gW107XG4gICAgdGhpcy5saW5rTGFiZWxzID0gW107XG4gICAgdGhpcy5saW5lRGlydHkgPSBbXTtcbiAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuaGFzRm9jdXMgPSB0cnVlO1xuICAgIHRoaXMubGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgdGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyID0gcHJvcHMuY3VzdG9tSW5saW5lR3JhbW1hciB8fCB7fTtcbiAgICB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIgPSBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyKHRoaXMuY3VzdG9tSW5saW5lR3JhbW1hcik7XG5cbiAgICB0aGlzLmxpc3RlbmVycyA9IHtcbiAgICAgIGNoYW5nZTogW10sXG4gICAgICBzZWxlY3Rpb246IFtdLFxuICAgICAgZHJvcDogW10sXG4gICAgfTtcblxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBwcm9wcy5lbGVtZW50O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJvcHMudGV4dGFyZWEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMudGV4dGFyZWEpIGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgfSBlbHNlIGlmIChwcm9wcy50ZXh0YXJlYSkge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IHByb3BzLnRleHRhcmVhO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRleHRhcmVhKSB7XG4gICAgICBpZiAoIWVsZW1lbnQpIGVsZW1lbnQgPSB0aGlzLnRleHRhcmVhO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYm9keVwiKVswXTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC50YWdOYW1lID09PSBcIlRFWFRBUkVBXCIpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBlbGVtZW50IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgICBlbGVtZW50ID0gdGhpcy50ZXh0YXJlYS5wYXJlbnROb2RlIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRleHRhcmVhKSB7XG4gICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB9XG5cbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gcHJvcHMucGxhY2Vob2xkZXIgIT09IHVuZGVmaW5lZFxuICAgICAgPyBwcm9wcy5wbGFjZWhvbGRlclxuICAgICAgOiB0aGlzLnRleHRhcmVhPy5wbGFjZWhvbGRlciB8fCB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLnVuZG9TdGFjayA9IFtdO1xuICAgIHRoaXMucmVkb1N0YWNrID0gW107XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgICB0aGlzLm1heEhpc3RvcnkgPSAxMDA7XG5cbiAgICB0aGlzLmNyZWF0ZUVkaXRvckVsZW1lbnQoZWxlbWVudCwgcHJvcHMpO1xuICAgIHRoaXMuc2V0Q29udGVudChcbiAgICAgIHR5cGVvZiBwcm9wcy5jb250ZW50ID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gcHJvcHMuY29udGVudFxuICAgICAgICA6IHRoaXMudGV4dGFyZWFcbiAgICAgICAgPyB0aGlzLnRleHRhcmVhLnZhbHVlXG4gICAgICAgIDogXCIjIEhlbGxvIFRpbnlNREUhXFxuRWRpdCAqKmhlcmUqKlwiXG4gICAgKTtcbiAgICBcbiAgICB0aGlzLmUhLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB0aGlzLmhhbmRsZVVuZG9SZWRvS2V5KGUpKTtcbiAgfVxuXG4gIGdldCBjYW5VbmRvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnVuZG9TdGFjay5sZW5ndGggPj0gMjtcbiAgfVxuXG4gIGdldCBjYW5SZWRvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlZG9TdGFjay5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoSGlzdG9yeSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHJldHVybjtcbiAgICB0aGlzLnB1c2hDdXJyZW50U3RhdGUoKTtcbiAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ3VycmVudFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMudW5kb1N0YWNrLnB1c2goe1xuICAgICAgY29udGVudDogdGhpcy5nZXRDb250ZW50KCksXG4gICAgICBzZWxlY3Rpb246IHRoaXMuZ2V0U2VsZWN0aW9uKCksXG4gICAgICBhbmNob3I6IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLnVuZG9TdGFjay5sZW5ndGggPiB0aGlzLm1heEhpc3RvcnkpIHRoaXMudW5kb1N0YWNrLnNoaWZ0KCk7XG4gIH1cblxuICBwdWJsaWMgdW5kbygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy51bmRvU3RhY2subGVuZ3RoIDwgMikgcmV0dXJuO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gdHJ1ZTtcbiAgICB0aGlzLnB1c2hDdXJyZW50U3RhdGUoKTtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy51bmRvU3RhY2sucG9wKCkhO1xuICAgIHRoaXMucmVkb1N0YWNrLnB1c2goY3VycmVudCk7XG4gICAgY29uc3QgcHJldiA9IHRoaXMudW5kb1N0YWNrW3RoaXMudW5kb1N0YWNrLmxlbmd0aCAtIDFdO1xuICAgIHRoaXMuc2V0Q29udGVudChwcmV2LmNvbnRlbnQpO1xuICAgIGlmIChwcmV2LnNlbGVjdGlvbikgdGhpcy5zZXRTZWxlY3Rpb24ocHJldi5zZWxlY3Rpb24sIHByZXYuYW5jaG9yKTtcbiAgICB0aGlzLnVuZG9TdGFjay5wb3AoKTtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlZG8oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlZG9TdGFjay5sZW5ndGgpIHJldHVybjtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IHRydWU7XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMucmVkb1N0YWNrLnBvcCgpITtcbiAgICB0aGlzLnNldENvbnRlbnQobmV4dC5jb250ZW50KTtcbiAgICBpZiAobmV4dC5zZWxlY3Rpb24pIHRoaXMuc2V0U2VsZWN0aW9uKG5leHQuc2VsZWN0aW9uLCBuZXh0LmFuY2hvcik7XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVW5kb1JlZG9LZXkoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlzTWFjID0gL01hY3xpUG9kfGlQaG9uZXxpUGFkLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7XG4gICAgY29uc3QgY3RybCA9IGlzTWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5O1xuICAgIGlmIChjdHJsICYmICFlLmFsdEtleSkge1xuICAgICAgaWYgKGUua2V5ID09PSBcInpcIiB8fCBlLmtleSA9PT0gXCJaXCIpIHtcbiAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICB0aGlzLnJlZG8oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVuZG8oKTtcbiAgICAgICAgfVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBcInlcIiB8fCBlLmtleSA9PT0gXCJZXCIpIHtcbiAgICAgICAgdGhpcy5yZWRvKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVkaXRvckVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3BzOiBFZGl0b3JQcm9wcyk6IHZvaWQge1xuICAgIGlmIChwcm9wcyAmJiBwcm9wcy5lZGl0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5lZGl0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmVkaXRvcikgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmUgPSBwcm9wcy5lZGl0b3IgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgfVxuXG4gICAgdGhpcy5lLmNsYXNzTGlzdC5hZGQoXCJUaW55TURFXCIpO1xuICAgIHRoaXMuZS5jb250ZW50RWRpdGFibGUgPSBcInRydWVcIjtcbiAgICB0aGlzLmUuc3R5bGUud2hpdGVTcGFjZSA9IFwicHJlLXdyYXBcIjtcbiAgICAodGhpcy5lLnN0eWxlIGFzIGFueSkud2Via2l0VXNlck1vZGlmeSA9IFwicmVhZC13cml0ZS1wbGFpbnRleHQtb25seVwiO1xuXG4gICAgaWYgKHRoaXMucGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLXBsYWNlaG9sZGVyXCIsIHRoaXMucGxhY2Vob2xkZXIpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5lZGl0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRleHRhcmVhICYmXG4gICAgICAgIHRoaXMudGV4dGFyZWEucGFyZW50Tm9kZSA9PT0gZWxlbWVudCAmJlxuICAgICAgICB0aGlzLnRleHRhcmVhLm5leHRTaWJsaW5nXG4gICAgICApIHtcbiAgICAgICAgZWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5lLCB0aGlzLnRleHRhcmVhLm5leHRTaWJsaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB0aGlzLmhhbmRsZUlucHV0RXZlbnQoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JlaW5wdXRcIiwgKGUpID0+IHRoaXMuaGFuZGxlQmVmb3JlSW5wdXRFdmVudChlKSk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJjb21wb3NpdGlvbmVuZFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVJbnB1dEV2ZW50KGUpKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uY2hhbmdlXCIsIChlKSA9PiB7XG4gICAgICBpZiAodGhpcy5oYXNGb2N1cykgeyB0aGlzLmhhbmRsZVNlbGVjdGlvbkNoYW5nZUV2ZW50KGUpOyB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgKCkgPT4gdGhpcy5oYXNGb2N1cyA9IGZhbHNlICk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCAoKSA9PiB0aGlzLmhhc0ZvY3VzID0gdHJ1ZSApO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwicGFzdGVcIiwgKGUpID0+IHRoaXMuaGFuZGxlUGFzdGUoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiZHJvcFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVEcm9wKGUpKTtcbiAgICB0aGlzLmxpbmVFbGVtZW50cyA9IHRoaXMuZS5jaGlsZE5vZGVzO1xuICB9XG5cbiAgcHVibGljIHNldENvbnRlbnQoY29udGVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMuZSEuZmlyc3RDaGlsZCkge1xuICAgICAgdGhpcy5lIS5yZW1vdmVDaGlsZCh0aGlzLmUhLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICB0aGlzLmxpbmVzID0gY29udGVudC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG4gICAgdGhpcy5saW5lRGlydHkgPSBbXTtcbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGxldCBsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLmUhLmFwcGVuZENoaWxkKGxlKTtcbiAgICAgIHRoaXMubGluZURpcnR5LnB1c2godHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMubGluZVR5cGVzID0gbmV3IEFycmF5KHRoaXMubGluZXMubGVuZ3RoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLnVwZGF0ZVBsYWNlaG9sZGVyKCk7XG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICB9XG5cbiAgcHVibGljIGdldENvbnRlbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5saW5lcy5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQbGFjZWhvbGRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIgfHwgIXRoaXMuZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmdldENvbnRlbnQoKSA9PT0gXCJcIikge1xuICAgICAgdGhpcy5lLmNsYXNzTGlzdC5hZGQoXCJUaW55TURFX2VtcHR5XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmUuY2xhc3NMaXN0LnJlbW92ZShcIlRpbnlNREVfZW1wdHlcIik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGb3JtYXR0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTGluZVR5cGVzKCk7XG4gICAgdGhpcy51cGRhdGVMaW5rTGFiZWxzKCk7XG4gICAgdGhpcy5hcHBseUxpbmVUeXBlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5rTGFiZWxzKCk6IHZvaWQge1xuICAgIHRoaXMubGlua0xhYmVscyA9IFtdO1xuICAgIGZvciAobGV0IGwgPSAwOyBsIDwgdGhpcy5saW5lcy5sZW5ndGg7IGwrKykge1xuICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2xdID09PSBcIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIikge1xuICAgICAgICB0aGlzLmxpbmtMYWJlbHMucHVzaChcbiAgICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1tsXVtcbiAgICAgICAgICAgIGxpbmVHcmFtbWFyLlRNTGlua1JlZmVyZW5jZURlZmluaXRpb24ubGFiZWxQbGFjZWhvbGRlciFcbiAgICAgICAgICBdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlKHJlcGxhY2VtZW50OiBzdHJpbmcsIGNhcHR1cmU6IFJlZ0V4cEV4ZWNBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlcGxhY2VtZW50LnJlcGxhY2UoLyhcXCR7MSwyfSkoWzAtOV0pL2csIChzdHIsIHAxLCBwMikgPT4ge1xuICAgICAgaWYgKHAxID09PSBcIiRcIikgcmV0dXJuIGh0bWxlc2NhcGUoY2FwdHVyZVtwYXJzZUludChwMildKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIlRNSW5saW5lRm9ybWF0dGVkXCI+JHt0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMoXG4gICAgICAgICAgY2FwdHVyZVtwYXJzZUludChwMildXG4gICAgICAgICl9PC9zcGFuPmA7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5TGluZVR5cGVzKCk6IHZvaWQge1xuICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGg7IGxpbmVOdW0rKykge1xuICAgICAgaWYgKHRoaXMubGluZURpcnR5W2xpbmVOdW1dKSB7XG4gICAgICAgIGxldCBjb250ZW50SFRNTCA9IHRoaXMucmVwbGFjZShcbiAgICAgICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbbGluZU51bV0sXG4gICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbbGluZU51bV1cbiAgICAgICAgKTtcbiAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUgPSB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtXTtcbiAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcbiAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5pbm5lckhUTUwgPVxuICAgICAgICAgIGNvbnRlbnRIVE1MID09PSBcIlwiID8gXCI8YnIgLz5cIiA6IGNvbnRlbnRIVE1MO1xuICAgICAgfVxuICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0LmxpbmVOdW0gPSBsaW5lTnVtLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lVHlwZXMoKTogdm9pZCB7XG4gICAgbGV0IGNvZGVCbG9ja1R5cGU6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgbGV0IGNvZGVCbG9ja1NlcUxlbmd0aCA9IDA7XG4gICAgbGV0IGh0bWxCbG9jazogSFRNTEJsb2NrUnVsZSB8IGZhbHNlID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGxldCBsaW5lVHlwZSA9IFwiVE1QYXJhXCI7XG4gICAgICBsZXQgbGluZUNhcHR1cmU6IFJlZ0V4cEV4ZWNBcnJheSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICBsZXQgbGluZVJlcGxhY2VtZW50ID0gXCIkJDBcIjtcblxuICAgICAgLy8gQ2hlY2sgb25nb2luZyBjb2RlIGJsb2Nrc1xuICAgICAgaWYgKGNvZGVCbG9ja1R5cGUgPT09IFwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW5cIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUgJiYgY2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aCA+PSBjb2RlQmxvY2tTZXFMZW5ndGgpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICBjb2RlQmxvY2tUeXBlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNRmVuY2VkQ29kZUJhY2t0aWNrXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1GZW5jZWRDb2RlXCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29kZUJsb2NrVHlwZSA9PT0gXCJUTUNvZGVGZW5jZVRpbGRlT3BlblwiKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VUaWxkZUNsb3NlLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSAmJiBjYXB0dXJlLmdyb3VwcyFbXCJzZXFcIl0ubGVuZ3RoID49IGNvZGVCbG9ja1NlcUxlbmd0aCkge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUNvZGVGZW5jZVRpbGRlQ2xvc2VcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZVRpbGRlQ2xvc2UucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgIGNvZGVCbG9ja1R5cGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1GZW5jZWRDb2RlVGlsZGVcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUZlbmNlZENvZGVcIj4kMDxiciAvPjwvc3Bhbj4nO1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBIVE1MIGJsb2NrIHR5cGVzXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1QYXJhXCIgJiYgaHRtbEJsb2NrID09PSBmYWxzZSkge1xuICAgICAgICBmb3IgKGxldCBodG1sQmxvY2tUeXBlIG9mIGh0bWxCbG9ja0dyYW1tYXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5saW5lc1tsaW5lTnVtXS5tYXRjaChodG1sQmxvY2tUeXBlLnN0YXJ0KSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBodG1sQmxvY2tUeXBlLnBhcmFJbnRlcnJ1cHQgfHxcbiAgICAgICAgICAgICAgbGluZU51bSA9PT0gMCB8fFxuICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVBhcmFcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVVMXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1PTFwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNQmxvY2txdW90ZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBodG1sQmxvY2sgPSBodG1sQmxvY2tUeXBlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGh0bWxCbG9jayAhPT0gZmFsc2UpIHtcbiAgICAgICAgbGluZVR5cGUgPSBcIlRNSFRNTEJsb2NrXCI7XG4gICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNSFRNTENvbnRlbnRcIj4kMDxiciAvPjwvc3Bhbj4nO1xuICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG5cbiAgICAgICAgaWYgKGh0bWxCbG9jay5lbmQpIHtcbiAgICAgICAgICBpZiAodGhpcy5saW5lc1tsaW5lTnVtXS5tYXRjaChodG1sQmxvY2suZW5kKSkge1xuICAgICAgICAgICAgaHRtbEJsb2NrID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGxpbmVOdW0gPT09IHRoaXMubGluZXMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgICAgdGhpcy5saW5lc1tsaW5lTnVtICsgMV0ubWF0Y2gobGluZUdyYW1tYXIuVE1CbGFua0xpbmUucmVnZXhwKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaHRtbEJsb2NrID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGFsbCByZWdleHBzIGlmIHdlIGhhdmVuJ3QgYXBwbGllZCBvbmUgb2YgdGhlIGNvZGUgYmxvY2sgdHlwZXNcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVBhcmFcIikge1xuICAgICAgICBmb3IgKGxldCB0eXBlIGluIGxpbmVHcmFtbWFyKSB7XG4gICAgICAgICAgaWYgKGxpbmVHcmFtbWFyW3R5cGVdLnJlZ2V4cCkge1xuICAgICAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hclt0eXBlXS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgICAgIGxpbmVUeXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXJbdHlwZV0ucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlJ3ZlIG9wZW5lZCBhIGNvZGUgYmxvY2ssIHJlbWVtYmVyIHRoYXRcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTUNvZGVGZW5jZUJhY2t0aWNrT3BlblwiIHx8IGxpbmVUeXBlID09PSBcIlRNQ29kZUZlbmNlVGlsZGVPcGVuXCIpIHtcbiAgICAgICAgY29kZUJsb2NrVHlwZSA9IGxpbmVUeXBlO1xuICAgICAgICBjb2RlQmxvY2tTZXFMZW5ndGggPSBsaW5lQ2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgLy8gTGluayByZWZlcmVuY2UgZGVmaW5pdGlvbiBhbmQgaW5kZW50ZWQgY29kZSBjYW4ndCBpbnRlcnJ1cHQgYSBwYXJhZ3JhcGhcbiAgICAgIGlmIChcbiAgICAgICAgKGxpbmVUeXBlID09PSBcIlRNSW5kZW50ZWRDb2RlXCIgfHwgbGluZVR5cGUgPT09IFwiVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiKSAmJlxuICAgICAgICBsaW5lTnVtID4gMCAmJlxuICAgICAgICAodGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNUGFyYVwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNVUxcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTU9MXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1CbG9ja3F1b3RlXCIpXG4gICAgICApIHtcbiAgICAgICAgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldGV4dCBIMiBtYXJrZXJzIHRoYXQgY2FuIGFsc28gYmUgaW50ZXJwcmV0ZWQgYXMgYW4gZW1wdHkgbGlzdCBpdGVtIHNob3VsZCBiZSByZWdhcmRlZCBhcyBzdWNoXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1TZXRleHRIMk1hcmtlclwiKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1VTC5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1VTFwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNVUwucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNldGV4dCBoZWFkaW5ncyBhcmUgb25seSB2YWxpZCBpZiBwcmVjZWRlZCBieSBhIHBhcmFncmFwaFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDFNYXJrZXJcIiB8fCBsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgyTWFya2VyXCIpIHtcbiAgICAgICAgaWYgKGxpbmVOdW0gPT09IDAgfHwgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdICE9PSBcIlRNUGFyYVwiKSB7XG4gICAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUhSLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1IUlwiO1xuICAgICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1IUi5yZXBsYWNlbWVudDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gXCIkJDBcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGhlYWRpbmdMaW5lID0gbGluZU51bSAtIDE7XG4gICAgICAgICAgY29uc3QgaGVhZGluZ0xpbmVUeXBlID0gbGluZVR5cGUgPT09IFwiVE1TZXRleHRIMU1hcmtlclwiID8gXCJUTVNldGV4dEgxXCIgOiBcIlRNU2V0ZXh0SDJcIjtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAodGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdICE9PSBoZWFkaW5nTGluZVR5cGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdID0gaGVhZGluZ0xpbmVUeXBlO1xuICAgICAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtoZWFkaW5nTGluZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2hlYWRpbmdMaW5lXSA9IFwiJCQwXCI7XG4gICAgICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1toZWFkaW5nTGluZV0gPSBbdGhpcy5saW5lc1toZWFkaW5nTGluZV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgICAgIGhlYWRpbmdMaW5lLS07XG4gICAgICAgICAgfSB3aGlsZSAoaGVhZGluZ0xpbmUgPj0gMCAmJiB0aGlzLmxpbmVUeXBlc1toZWFkaW5nTGluZV0gPT09IFwiVE1QYXJhXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmxpbmVUeXBlc1tsaW5lTnVtXSAhPT0gbGluZVR5cGUpIHtcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bV0gPSBsaW5lVHlwZTtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZU51bV0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2xpbmVOdW1dID0gbGluZVJlcGxhY2VtZW50O1xuICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbbGluZU51bV0gPSBsaW5lQ2FwdHVyZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0aW9uKGdldEFuY2hvcjogYm9vbGVhbiA9IGZhbHNlKTogUG9zaXRpb24gfCBudWxsIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgbGV0IHN0YXJ0Tm9kZSA9IGdldEFuY2hvciA/IHNlbGVjdGlvbiEuYW5jaG9yTm9kZSA6IHNlbGVjdGlvbiEuZm9jdXNOb2RlO1xuICAgIGlmICghc3RhcnROb2RlKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgb2Zmc2V0ID0gZ2V0QW5jaG9yID8gc2VsZWN0aW9uIS5hbmNob3JPZmZzZXQgOiBzZWxlY3Rpb24hLmZvY3VzT2Zmc2V0O1xuICAgIGlmIChzdGFydE5vZGUgPT09IHRoaXMuZSkge1xuICAgICAgaWYgKG9mZnNldCA8IHRoaXMubGluZXMubGVuZ3RoKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJvdzogb2Zmc2V0LFxuICAgICAgICAgIGNvbDogMCxcbiAgICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJvdzogb2Zmc2V0IC0gMSxcbiAgICAgICAgY29sOiB0aGlzLmxpbmVzW29mZnNldCAtIDFdLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGNvbCA9IHRoaXMuY29tcHV0ZUNvbHVtbihzdGFydE5vZGUsIG9mZnNldCk7XG4gICAgaWYgKGNvbCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICB3aGlsZSAobm9kZS5wYXJlbnRFbGVtZW50ICE9PSB0aGlzLmUpIHtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQhO1xuICAgIH1cblxuICAgIGxldCByb3cgPSAwO1xuICAgIC8vIElmIHRoZSBub2RlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIHNpYmxpbmcsIGl0IG11c3QgYmUgdGhlIGZpcnN0IGxpbmVcbiAgICBpZiAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRMaW5lTnVtRGF0YSA9IChub2RlIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0Py5saW5lTnVtO1xuICAgICAgY29uc3QgcHJldmlvdXNMaW5lTnVtRGF0YSA9IChub2RlLnByZXZpb3VzU2libGluZyBhcyBIVE1MRWxlbWVudCkuZGF0YXNldD8ubGluZU51bTtcblxuICAgICAgaWYgKGN1cnJlbnRMaW5lTnVtRGF0YSAmJiBwcmV2aW91c0xpbmVOdW1EYXRhKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lTnVtID0gcGFyc2VJbnQoY3VycmVudExpbmVOdW1EYXRhKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNMaW5lTnVtID0gcGFyc2VJbnQocHJldmlvdXNMaW5lTnVtRGF0YSk7XG4gICAgICAgIGlmIChjdXJyZW50TGluZU51bSA9PT0gcHJldmlvdXNMaW5lTnVtICsgMSkge1xuICAgICAgICAgIHJvdyA9IGN1cnJlbnRMaW5lTnVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGxpbmUgaXMgTk9UIHRoZSBwcmV2aW91cyBsaW5lICsgMSwgdGhlbiBlaXRoZXIgXG4gICAgICAgICAgLy8gdGhlIGN1cnJlbnQgbGluZSBnb3Qgc3BsaXQgaW4gdHdvIG9yIG1lcmdlZCB3aXRoIHRoZSBwcmV2aW91cyBsaW5lXG4gICAgICAgICAgLy8gRWl0aGVyIHdheSwgd2UgbmVlZCB0byByZWNhbGN1bGF0ZSB0aGUgcm93IG51bWJlclxuICAgICAgICAgIHdoaWxlIChub2RlLnByZXZpb3VzU2libGluZykge1xuICAgICAgICAgICAgcm93Kys7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7IHJvdzogcm93LCBjb2w6IGNvbCB9O1xuICB9XG5cbiAgcHVibGljIHNldFNlbGVjdGlvbihmb2N1czogUG9zaXRpb24sIGFuY2hvcjogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghZm9jdXMpIHJldHVybjtcblxuICAgIGxldCB7IG5vZGU6IGZvY3VzTm9kZSwgb2Zmc2V0OiBmb2N1c09mZnNldCB9ID0gdGhpcy5jb21wdXRlTm9kZUFuZE9mZnNldChcbiAgICAgIGZvY3VzLnJvdyxcbiAgICAgIGZvY3VzLmNvbCxcbiAgICAgIGFuY2hvciA/IGFuY2hvci5yb3cgPT09IGZvY3VzLnJvdyAmJiBhbmNob3IuY29sID4gZm9jdXMuY29sIDogZmFsc2VcbiAgICApO1xuICAgIGxldCBhbmNob3JOb2RlID0gbnVsbCxcbiAgICAgIGFuY2hvck9mZnNldCA9IG51bGw7XG4gICAgaWYgKGFuY2hvciAmJiAoYW5jaG9yLnJvdyAhPT0gZm9jdXMucm93IHx8IGFuY2hvci5jb2wgIT09IGZvY3VzLmNvbCkpIHtcbiAgICAgIGxldCB7IG5vZGUsIG9mZnNldCB9ID0gdGhpcy5jb21wdXRlTm9kZUFuZE9mZnNldChcbiAgICAgICAgYW5jaG9yLnJvdyxcbiAgICAgICAgYW5jaG9yLmNvbCxcbiAgICAgICAgZm9jdXMucm93ID09PSBhbmNob3Iucm93ICYmIGZvY3VzLmNvbCA+IGFuY2hvci5jb2xcbiAgICAgICk7XG4gICAgICBhbmNob3JOb2RlID0gbm9kZTtcbiAgICAgIGFuY2hvck9mZnNldCA9IG9mZnNldDtcbiAgICB9XG5cbiAgICBsZXQgd2luZG93U2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIHdpbmRvd1NlbGVjdGlvbiEuc2V0QmFzZUFuZEV4dGVudChcbiAgICAgIGZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0LFxuICAgICAgYW5jaG9yTm9kZSB8fCBmb2N1c05vZGUsXG4gICAgICBhbmNob3JOb2RlID8gYW5jaG9yT2Zmc2V0ISA6IGZvY3VzT2Zmc2V0XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZXN0b3JlTGFzdFNlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5sYXN0U2VsZWN0aW9uICYmIHRoaXMubGFzdFNlbGVjdGlvbi5mb2N1cykge1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb24odGhpcy5sYXN0U2VsZWN0aW9uLmZvY3VzLCB0aGlzLmxhc3RTZWxlY3Rpb24uYW5jaG9yKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgcGFzdGUodGV4dDogc3RyaW5nLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwsIGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMpIGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgIGxldCBiZWdpbm5pbmc6IFBvc2l0aW9uLCBlbmQ6IFBvc2l0aW9uO1xuICAgIGlmICghZm9jdXMpIHtcbiAgICAgIGZvY3VzID0ge1xuICAgICAgICByb3c6IHRoaXMubGluZXMubGVuZ3RoIC0gMSxcbiAgICAgICAgY29sOiB0aGlzLmxpbmVzW3RoaXMubGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCFhbmNob3IpIHtcbiAgICAgIGFuY2hvciA9IGZvY3VzO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBhbmNob3Iucm93IDwgZm9jdXMucm93IHx8XG4gICAgICAoYW5jaG9yLnJvdyA9PT0gZm9jdXMucm93ICYmIGFuY2hvci5jb2wgPD0gZm9jdXMuY29sKVxuICAgICkge1xuICAgICAgYmVnaW5uaW5nID0gYW5jaG9yO1xuICAgICAgZW5kID0gZm9jdXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJlZ2lubmluZyA9IGZvY3VzO1xuICAgICAgZW5kID0gYW5jaG9yO1xuICAgIH1cbiAgICBsZXQgaW5zZXJ0ZWRMaW5lcyA9IHRleHQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIGxldCBsaW5lQmVmb3JlID0gdGhpcy5saW5lc1tiZWdpbm5pbmcucm93XS5zdWJzdHIoMCwgYmVnaW5uaW5nLmNvbCk7XG4gICAgbGV0IGxpbmVFbmQgPSB0aGlzLmxpbmVzW2VuZC5yb3ddLnN1YnN0cihlbmQuY29sKTtcbiAgICBpbnNlcnRlZExpbmVzWzBdID0gbGluZUJlZm9yZS5jb25jYXQoaW5zZXJ0ZWRMaW5lc1swXSk7XG4gICAgbGV0IGVuZENvbFBvcyA9IGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXS5sZW5ndGg7XG4gICAgaW5zZXJ0ZWRMaW5lc1tpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDFdID0gaW5zZXJ0ZWRMaW5lc1tpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDFdLmNvbmNhdChsaW5lRW5kKTtcbiAgICB0aGlzLnNwbGljZUxpbmVzKGJlZ2lubmluZy5yb3csIDEgKyBlbmQucm93IC0gYmVnaW5uaW5nLnJvdywgaW5zZXJ0ZWRMaW5lcyk7XG4gICAgZm9jdXMucm93ID0gYmVnaW5uaW5nLnJvdyArIGluc2VydGVkTGluZXMubGVuZ3RoIC0gMTtcbiAgICBmb2N1cy5jb2wgPSBlbmRDb2xQb3M7XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMpO1xuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIHdyYXBTZWxlY3Rpb24ocHJlOiBzdHJpbmcsIHBvc3Q6IHN0cmluZywgZm9jdXM6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwsIGFuY2hvcjogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgaWYgKCFmb2N1cyB8fCAhYW5jaG9yIHx8IGZvY3VzLnJvdyAhPT0gYW5jaG9yLnJvdykgcmV0dXJuO1xuICAgIHRoaXMubGluZURpcnR5W2ZvY3VzLnJvd10gPSB0cnVlO1xuXG4gICAgY29uc3Qgc3RhcnRDb2wgPSBmb2N1cy5jb2wgPCBhbmNob3IuY29sID8gZm9jdXMuY29sIDogYW5jaG9yLmNvbDtcbiAgICBjb25zdCBlbmRDb2wgPSBmb2N1cy5jb2wgPCBhbmNob3IuY29sID8gYW5jaG9yLmNvbCA6IGZvY3VzLmNvbDtcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cigwLCBzdGFydENvbCkuY29uY2F0KHByZSk7XG4gICAgY29uc3QgbWlkID0gZW5kQ29sID09PSBzdGFydENvbCA/IFwiXCIgOiB0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKHN0YXJ0Q29sLCBlbmRDb2wgLSBzdGFydENvbCk7XG4gICAgY29uc3QgcmlnaHQgPSBwb3N0LmNvbmNhdCh0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKGVuZENvbCkpO1xuICAgIHRoaXMubGluZXNbZm9jdXMucm93XSA9IGxlZnQuY29uY2F0KG1pZCwgcmlnaHQpO1xuICAgIGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICBmb2N1cy5jb2wgPSBhbmNob3IuY29sICsgbWlkLmxlbmd0aDtcblxuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzLCBhbmNob3IpO1xuICB9XG5cbiAgcHVibGljIGFkZEV2ZW50TGlzdGVuZXI8VCBleHRlbmRzIEV2ZW50VHlwZT4oXG4gICAgdHlwZTogVCxcbiAgICBsaXN0ZW5lcjogVCBleHRlbmRzICdjaGFuZ2UnID8gRXZlbnRIYW5kbGVyPENoYW5nZUV2ZW50PiA6XG4gICAgICAgICAgICAgVCBleHRlbmRzICdzZWxlY3Rpb24nID8gRXZlbnRIYW5kbGVyPFNlbGVjdGlvbkV2ZW50PiA6XG4gICAgICAgICAgICAgVCBleHRlbmRzICdkcm9wJyA/IEV2ZW50SGFuZGxlcjxEcm9wRXZlbnQ+IDogbmV2ZXJcbiAgKTogdm9pZCB7XG4gICAgaWYgKHR5cGUubWF0Y2goL14oPzpjaGFuZ2V8aW5wdXQpJC9pKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuY2hhbmdlLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPENoYW5nZUV2ZW50Pik7XG4gICAgfVxuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86c2VsZWN0aW9ufHNlbGVjdGlvbmNoYW5nZSkkL2kpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24ucHVzaChsaXN0ZW5lciBhcyBFdmVudEhhbmRsZXI8U2VsZWN0aW9uRXZlbnQ+KTtcbiAgICB9XG4gICAgaWYgKHR5cGUubWF0Y2goL14oPzpkcm9wKSQvaSkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmRyb3AucHVzaChsaXN0ZW5lciBhcyBFdmVudEhhbmRsZXI8RHJvcEV2ZW50Pik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaXJlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlUGxhY2Vob2xkZXIoKTtcbiAgICBpZiAoIXRoaXMudGV4dGFyZWEgJiYgIXRoaXMubGlzdGVuZXJzLmNoYW5nZS5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHRoaXMudGV4dGFyZWEudmFsdWUgPSBjb250ZW50O1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLmNoYW5nZSkge1xuICAgICAgbGlzdGVuZXIoe1xuICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICBsaW5lc0RpcnR5OiBbLi4udGhpcy5saW5lRGlydHldLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGJlZm9yZWlucHV0IGhhbmRsZXIsIGV4Y2x1c2l2ZWx5IHRvIGhhbmRsZSBpbnNlcnRQYXJhZ3JhcGgsXG4gICAqIGluc2VydExpbmVCcmVhaywgZGVsZXRlQ29udGVudEJhY2t3YXJkLCBhbmQgZGVsZXRlQ29udGVudEZvcndhcmQgZXZlbnRzLlxuICAgKiBUaGVzZSB1c2VkIHRvIGJlIGhhbmRsZWQgaW4gdGhlIGlucHV0IGV2ZW50LCBidXQgdGhhdCBjYXVzZWQgaXNzdWVzIHdpdGhcbiAgICogRmlyZWZveCB3aGVyZSB0aGUgaW5wdXQgZXZlbnQgd291bGQgYmUgc29tZXRpbWVzIG5vdCBiZSBmaXJlZCBmb3IgdGhlc2VcbiAgICogaW5wdXQgdHlwZXMuIGRlbGV0ZUNvbnRlbnRCYWNrd2FyZC9Gb3J3YXJkIGFyZSBhbHNvIGhhbmRsZWQgaGVyZSB0byBmaXggYVxuICAgKiBGaXJlZm94LXNwZWNpZmljIGJ1ZyAoIzE1MSkgd2hlcmUgYmFja3NwYWNpbmcgb24gYW4gZW1wdHkgbGluZSB3b3VsZCBub3RcbiAgICogcmVtb3ZlIGl0LCBiZWNhdXNlIEZpcmVmb3ggb25seSByZW1vdmVzIHRoZSA8YnI+IGluc2lkZSB0aGUgZW1wdHkgPGRpdj5cbiAgICogcmF0aGVyIHRoYW4gbWVyZ2luZyB0aGUgZGl2cywgYW5kIGZpeE5vZGVIaWVyYXJjaHkoKSB3b3VsZCB0aGVuIHJlLWFkZCB0aGVcbiAgICogPGJyPiwgcmVzdWx0aW5nIGluIGEgbm8tb3AuXG4gICAqIEBwYXJhbSBldmVudCBUaGUgaW5wdXQgZXZlbnRcbiAgICogQHJldHVybnMgbm90aGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVCZWZvcmVJbnB1dEV2ZW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGJlZm9yZUlucHV0RXZlbnQgPSBldmVudCBhcyBJbnB1dEV2ZW50O1xuXG4gICAgLy8gSGFuZGxlIGNyb3NzLWxpbmUgZGVsZXRlIG9wZXJhdGlvbnMgKGJhY2tzcGFjZSBhdCBjb2wgMCwgZGVsZXRlIGF0IGVuZCBvZiBsaW5lKVxuICAgIGlmIChcbiAgICAgIGJlZm9yZUlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwiIHx8XG4gICAgICBiZWZvcmVJbnB1dEV2ZW50LmlucHV0VHlwZSA9PT0gXCJkZWxldGVDb250ZW50Rm9yd2FyZFwiXG4gICAgKSB7XG4gICAgICBjb25zdCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBjb25zdCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICAgIGlmICghZm9jdXMgfHwgIWFuY2hvcikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBpc0JhY2tzcGFjZSA9IGJlZm9yZUlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwiO1xuXG4gICAgICAvLyBPbmx5IGludGVyY2VwdCBjb2xsYXBzZWQgc2VsZWN0aW9ucyBhdCBsaW5lIGJvdW5kYXJpZXNcbiAgICAgIGlmIChmb2N1cy5yb3cgPT09IGFuY2hvci5yb3cgJiYgZm9jdXMuY29sID09PSBhbmNob3IuY29sKSB7XG4gICAgICAgIGlmIChpc0JhY2tzcGFjZSAmJiBmb2N1cy5jb2wgPT09IDAgJiYgZm9jdXMucm93ID4gMCkge1xuICAgICAgICAgIC8vIEJhY2tzcGFjZSBhdCBzdGFydCBvZiBsaW5lOiBtZXJnZSBjdXJyZW50IGxpbmUgaW50byBlbmQgb2YgcHJldmlvdXNcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICAgICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG4gICAgICAgICAgY29uc3QgcHJldkxpbmVMZW4gPSB0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdLmxlbmd0aDtcbiAgICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdID0gdGhpcy5saW5lc1tmb2N1cy5yb3cgLSAxXSArIHRoaXMubGluZXNbZm9jdXMucm93XTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3cgLSAxXSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zcGxpY2VMaW5lcyhmb2N1cy5yb3csIDEpO1xuICAgICAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHsgcm93OiBmb2N1cy5yb3cgLSAxLCBjb2w6IHByZXZMaW5lTGVuIH0pO1xuICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzQmFja3NwYWNlICYmIGZvY3VzLmNvbCA9PT0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLmxlbmd0aCAmJiBmb2N1cy5yb3cgPCB0aGlzLmxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAvLyBEZWxldGUgYXQgZW5kIG9mIGxpbmU6IG1lcmdlIG5leHQgbGluZSBpbnRvIGN1cnJlbnRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICAgICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudExpbmVMZW4gPSB0aGlzLmxpbmVzW2ZvY3VzLnJvd10ubGVuZ3RoO1xuICAgICAgICAgIHRoaXMubGluZXNbZm9jdXMucm93XSA9IHRoaXMubGluZXNbZm9jdXMucm93XSArIHRoaXMubGluZXNbZm9jdXMucm93ICsgMV07XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMucm93XSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zcGxpY2VMaW5lcyhmb2N1cy5yb3cgKyAxLCAxKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbih7IHJvdzogZm9jdXMucm93LCBjb2w6IGN1cnJlbnRMaW5lTGVuIH0pO1xuICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRm9yIHdpdGhpbi1saW5lIGRlbGV0ZXMgb3Igbm9uLWNvbGxhcHNlZCBzZWxlY3Rpb25zLCBsZXQgdGhlIGJyb3dzZXIgaGFuZGxlIGl0XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYmVmb3JlSW5wdXRFdmVudC5pbnB1dFR5cGUgIT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgJiZcbiAgICAgIGJlZm9yZUlucHV0RXZlbnQuaW5wdXRUeXBlICE9PSBcImluc2VydExpbmVCcmVha1wiXG4gICAgKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuXG4gICAgY29uc3QgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuXG4gICAgaWYgKCFmb2N1cyB8fCAhYW5jaG9yKSByZXR1cm47XG4gICAgXG4gICAgLy8gSWYgZm9jdXMgYW5kIGFuY2hvciBhcmUgaW4gZGlmZmVyZW50IGxpbmVzLCBzaW1wbHkgcmVtb3ZlIGV2ZXJ5dGhpbmcgXG4gICAgLy8gYWZ0ZXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIGFuZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uXG4gICAgLy8gYW5kIHJlbW92ZSBhbnkgbGluZXMgaW4gYmV0d2VlblxuICAgIGlmIChmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHtcbiAgICAgIGNvbnN0IGJlZ2lubmluZyA9IGZvY3VzLnJvdyA8IGFuY2hvci5yb3cgPyBmb2N1cyA6IGFuY2hvcjtcbiAgICAgIGNvbnN0IGVuZCA9IGZvY3VzLnJvdyA8IGFuY2hvci5yb3cgPyBhbmNob3IgOiBmb2N1cztcbiAgICAgIHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10gPSB0aGlzLmxpbmVzW2JlZ2lubmluZy5yb3ddLnN1YnN0cmluZygwLCBiZWdpbm5pbmcuY29sKTtcbiAgICAgIHRoaXMubGluZXNbZW5kLnJvd10gPSB0aGlzLmxpbmVzW2VuZC5yb3ddLnN1YnN0cmluZyhlbmQuY29sKTtcbiAgICAgIHRoaXMuc3BsaWNlTGluZXMoYmVnaW5uaW5nLnJvdyArIDEsIGVuZC5yb3cgLSBiZWdpbm5pbmcucm93IC0gMSk7XG4gICAgICBmb2N1cy5yb3cgPSBiZWdpbm5pbmcucm93ICsgMTtcbiAgICAgIGZvY3VzLmNvbCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjb250aW51YWJsZVR5cGU6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgICBzd2l0Y2ggKHRoaXMubGluZVR5cGVzW2ZvY3VzLnJvd10pIHtcbiAgICAgICAgY2FzZSBcIlRNVUxcIjpcbiAgICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNVUxcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRNT0xcIjpcbiAgICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNT0xcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRNSW5kZW50ZWRDb2RlXCI6XG4gICAgICAgICAgY29udGludWFibGVUeXBlID0gXCJUTUluZGVudGVkQ29kZVwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuIFxuICAgICAgY29uc3QgbGluZUJlZm9yZUJyZWFrID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cmluZygwLCBmb2N1cy5jb2wgPD0gYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2wpO1xuICAgICAgY29uc3QgbGluZUFmdGVyQnJlYWsgPSB0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyaW5nKGZvY3VzLmNvbCA8PSBhbmNob3IuY29sID8gYW5jaG9yLmNvbCA6IGZvY3VzLmNvbCk7XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGZvY3VzLnJvdywgMSwgW2xpbmVCZWZvcmVCcmVhaywgbGluZUFmdGVyQnJlYWtdKTtcblxuICAgICAgZm9jdXMucm93ICs9IDE7XG4gICAgICBmb2N1cy5jb2wgPSAwO1xuXG4gICAgICBpZiAoY29udGludWFibGVUeXBlKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXJbY29udGludWFibGVUeXBlXS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdKTtcbiAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICBpZiAoY2FwdHVyZVsyXSkge1xuICAgICAgICAgICAgaWYgKGNvbnRpbnVhYmxlVHlwZSA9PT0gXCJUTU9MXCIpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZVsxXSA9IGNhcHR1cmVbMV0ucmVwbGFjZSgvXFxkezEsOX0vLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZUludChyZXN1bHQpICsgMSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSBgJHtjYXB0dXJlWzFdfSR7dGhpcy5saW5lc1tmb2N1cy5yb3ddfWA7XG4gICAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvY3VzLmNvbCA9IGNhcHR1cmVbMV0ubGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdID0gXCJcIjtcbiAgICAgICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzLnJvdyAtIDFdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMpO1xuXG4gICAgLy8gU2Nyb2xsIHRoZSBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBpbnRvIHZpZXdcbiAgICBpZiAoZm9jdXMgJiYgZm9jdXMucm93IDwgdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAodGhpcy5saW5lRWxlbWVudHNbZm9jdXMucm93XSBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICBibG9jazogJ25lYXJlc3QnLFxuICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUlucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFdmVudCA9IGV2ZW50IGFzIElucHV0RXZlbnQ7XG4gICAgaWYgKGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydENvbXBvc2l0aW9uVGV4dFwiKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuXG4gICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmICgoaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgfHwgaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0TGluZUJyZWFrXCIpICYmIGZvY3VzKSB7XG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gc2luY2UgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdGhlIGJlZm9yZWlucHV0IGhhbmRsZXJcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLmUhLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgdGhpcy5lIS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIlRNQmxhbmtMaW5lXCI+PGJyPjwvZGl2Pic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpeE5vZGVIaWVyYXJjaHkoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZygpO1xuICAgIH1cbiAgICBpZiAoZm9jdXMpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoX2U6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5maXJlU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgbGV0IHRleHQgPSAoZXZlbnQgYXMgYW55KS5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpO1xuICAgIHRoaXMucGFzdGUodGV4dCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5maXJlRHJvcChldmVudC5kYXRhVHJhbnNmZXIhKTtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzSW5saW5lU3R5bGVzKG9yaWdpbmFsU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBwcm9jZXNzZWQgPSBcIlwiO1xuICAgIGxldCBzdGFjazogQXJyYXk8e2RlbGltaXRlcjogc3RyaW5nLCBkZWxpbVN0cmluZzogc3RyaW5nLCBjb3VudDogbnVtYmVyLCBvdXRwdXQ6IHN0cmluZ30+ID0gW107XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgbGV0IHN0cmluZyA9IG9yaWdpbmFsU3RyaW5nO1xuXG4gICAgb3V0ZXI6IHdoaWxlIChzdHJpbmcpIHtcbiAgICAgIC8vIFByb2Nlc3Mgc2ltcGxlIHJ1bGVzIChub24tZGVsaW1pdGVyKVxuICAgICAgZm9yIChsZXQgcnVsZSBvZiBbXCJlc2NhcGVcIiwgXCJjb2RlXCIsIFwiYXV0b2xpbmtcIiwgXCJodG1sXCJdKSB7XG4gICAgICAgIGlmICh0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0pIHtcbiAgICAgICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcHJvY2Vzc2VkICs9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQcm9jZXNzIGN1c3RvbSBpbmxpbmUgZ3JhbW1hciBydWxlc1xuICAgICAgZm9yIChsZXQgcnVsZSBpbiB0aGlzLmN1c3RvbUlubGluZUdyYW1tYXIpIHtcbiAgICAgICAgaWYgKHJ1bGUgIT09IFwiZXNjYXBlXCIgJiYgcnVsZSAhPT0gXCJjb2RlXCIgJiYgcnVsZSAhPT0gXCJhdXRvbGlua1wiICYmIHJ1bGUgIT09IFwiaHRtbFwiICYmIHJ1bGUgIT09IFwibGlua09wZW5cIiAmJiBydWxlICE9PSBcImltYWdlT3BlblwiICYmIHJ1bGUgIT09IFwibGlua0xhYmVsXCIgJiYgcnVsZSAhPT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcHJvY2Vzc2VkICs9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgbGlua3MgLyBpbWFnZXNcbiAgICAgIGxldCBwb3RlbnRpYWxMaW5rID0gc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rT3Blbi5yZWdleHApO1xuICAgICAgbGV0IHBvdGVudGlhbEltYWdlID0gc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5pbWFnZU9wZW4ucmVnZXhwKTtcbiAgICAgIGlmIChwb3RlbnRpYWxJbWFnZSB8fCBwb3RlbnRpYWxMaW5rKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnBhcnNlTGlua09ySW1hZ2Uoc3RyaW5nLCAhIXBvdGVudGlhbEltYWdlKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHByb2Nlc3NlZCA9IGAke3Byb2Nlc3NlZH0ke3Jlc3VsdC5vdXRwdXR9YDtcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKHJlc3VsdC5jaGFyQ291bnQpO1xuICAgICAgICAgIG9mZnNldCArPSByZXN1bHQuY2hhckNvdW50O1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBlbSAvIHN0cm9uZyBkZWxpbWl0ZXJzXG4gICAgICBsZXQgY2FwID0gLyheXFwqKyl8KF5fKykvLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgbGV0IGRlbGltQ291bnQgPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBjb25zdCBkZWxpbVN0cmluZyA9IGNhcFswXTtcbiAgICAgICAgY29uc3QgY3VycmVudERlbGltaXRlciA9IGNhcFswXVswXTtcblxuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuXG4gICAgICAgIGNvbnN0IHByZWNlZGluZyA9IG9mZnNldCA+IDAgPyBvcmlnaW5hbFN0cmluZy5zdWJzdHIoMCwgb2Zmc2V0KSA6IFwiIFwiO1xuICAgICAgICBjb25zdCBmb2xsb3dpbmcgPSBvZmZzZXQgKyBjYXBbMF0ubGVuZ3RoIDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoID8gc3RyaW5nIDogXCIgXCI7XG5cbiAgICAgICAgY29uc3QgcHVuY3R1YXRpb25Gb2xsb3dzID0gZm9sbG93aW5nLm1hdGNoKHB1bmN0dWF0aW9uTGVhZGluZyk7XG4gICAgICAgIGNvbnN0IHB1bmN0dWF0aW9uUHJlY2VkZXMgPSBwcmVjZWRpbmcubWF0Y2gocHVuY3R1YXRpb25UcmFpbGluZyk7XG4gICAgICAgIGNvbnN0IHdoaXRlc3BhY2VGb2xsb3dzID0gZm9sbG93aW5nLm1hdGNoKC9eXFxzLyk7XG4gICAgICAgIGNvbnN0IHdoaXRlc3BhY2VQcmVjZWRlcyA9IHByZWNlZGluZy5tYXRjaCgvXFxzJC8pO1xuXG4gICAgICAgIGxldCBjYW5PcGVuID0gIXdoaXRlc3BhY2VGb2xsb3dzICYmICghcHVuY3R1YXRpb25Gb2xsb3dzIHx8ICEhd2hpdGVzcGFjZVByZWNlZGVzIHx8ICEhcHVuY3R1YXRpb25QcmVjZWRlcyk7XG4gICAgICAgIGxldCBjYW5DbG9zZSA9ICF3aGl0ZXNwYWNlUHJlY2VkZXMgJiYgKCFwdW5jdHVhdGlvblByZWNlZGVzIHx8ICEhd2hpdGVzcGFjZUZvbGxvd3MgfHwgISFwdW5jdHVhdGlvbkZvbGxvd3MpO1xuXG4gICAgICAgIGlmIChjdXJyZW50RGVsaW1pdGVyID09PSBcIl9cIiAmJiBjYW5PcGVuICYmIGNhbkNsb3NlKSB7XG4gICAgICAgICAgY2FuT3BlbiA9ICEhcHVuY3R1YXRpb25QcmVjZWRlcztcbiAgICAgICAgICBjYW5DbG9zZSA9ICEhcHVuY3R1YXRpb25Gb2xsb3dzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbkNsb3NlKSB7XG4gICAgICAgICAgbGV0IHN0YWNrUG9pbnRlciA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKGRlbGltQ291bnQgJiYgc3RhY2tQb2ludGVyID49IDApIHtcbiAgICAgICAgICAgIGlmIChzdGFja1tzdGFja1BvaW50ZXJdLmRlbGltaXRlciA9PT0gY3VycmVudERlbGltaXRlcikge1xuICAgICAgICAgICAgICB3aGlsZSAoc3RhY2tQb2ludGVyIDwgc3RhY2subGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChkZWxpbUNvdW50ID49IDIgJiYgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCA+PSAyKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfSR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+PHN0cm9uZyBjbGFzcz1cIlRNU3Ryb25nXCI+JHtwcm9jZXNzZWR9PC9zdHJvbmc+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9JHtjdXJyZW50RGVsaW1pdGVyfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGRlbGltQ291bnQgLT0gMjtcbiAgICAgICAgICAgICAgICBzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50IC09IDI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfTwvc3Bhbj48ZW0gY2xhc3M9XCJUTUVtXCI+JHtwcm9jZXNzZWR9PC9lbT48c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBkZWxpbUNvdW50IC09IDE7XG4gICAgICAgICAgICAgICAgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCAtPSAxO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICAgICAgc3RhY2tQb2ludGVyLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWxpbUNvdW50ICYmIGNhbk9wZW4pIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIGRlbGltaXRlcjogY3VycmVudERlbGltaXRlcixcbiAgICAgICAgICAgIGRlbGltU3RyaW5nOiBkZWxpbVN0cmluZyxcbiAgICAgICAgICAgIGNvdW50OiBkZWxpbUNvdW50LFxuICAgICAgICAgICAgb3V0cHV0OiBwcm9jZXNzZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICAgICAgICBkZWxpbUNvdW50ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWxpbUNvdW50KSB7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gYCR7cHJvY2Vzc2VkfSR7ZGVsaW1TdHJpbmcuc3Vic3RyKDAsIGRlbGltQ291bnQpfWA7XG4gICAgICAgIH1cblxuICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBzdHJpa2V0aHJvdWdoIGRlbGltaXRlclxuICAgICAgY2FwID0gL15+fi8uZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBsZXQgY29uc3VtZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHN0YWNrUG9pbnRlciA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlICghY29uc3VtZWQgJiYgc3RhY2tQb2ludGVyID49IDApIHtcbiAgICAgICAgICBpZiAoc3RhY2tbc3RhY2tQb2ludGVyXS5kZWxpbWl0ZXIgPT09IFwiflwiKSB7XG4gICAgICAgICAgICB3aGlsZSAoc3RhY2tQb2ludGVyIDwgc3RhY2subGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7ZW50cnkuZGVsaW1TdHJpbmcuc3Vic3RyKDAsIGVudHJ5LmNvdW50KX0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9jZXNzZWQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmtcIj5+fjwvc3Bhbj48ZGVsIGNsYXNzPVwiVE1TdHJpa2V0aHJvdWdoXCI+JHtwcm9jZXNzZWR9PC9kZWw+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj5+fjwvc3Bhbj5gO1xuICAgICAgICAgICAgbGV0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICBjb25zdW1lZCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29uc3VtZWQpIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIGRlbGltaXRlcjogXCJ+XCIsXG4gICAgICAgICAgICBkZWxpbVN0cmluZzogXCJ+flwiLFxuICAgICAgICAgICAgY291bnQ6IDIsXG4gICAgICAgICAgICBvdXRwdXQ6IHByb2Nlc3NlZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzICdkZWZhdWx0JyBydWxlXG4gICAgICBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZGVmYXVsdC5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgcHJvY2Vzc2VkICs9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5kZWZhdWx0LnJlcGxhY2VtZW50LnJlcGxhY2UoL1xcJChbMS05XSkvZywgKHN0ciwgcDEpID0+IGh0bWxlc2NhcGUoY2FwW3AxXSkpO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cbiAgICAgIHRocm93IFwiSW5maW5pdGUgbG9vcCFcIjtcbiAgICB9XG5cbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlQ29sdW1uKHN0YXJ0Tm9kZTogTm9kZSwgb2Zmc2V0OiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcbiAgICBsZXQgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICBsZXQgY29sOiBudW1iZXI7XG4gICAgd2hpbGUgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgIH1cbiAgICBpZiAobm9kZSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoc3RhcnROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSB8fCBvZmZzZXQgPT09IDApIHtcbiAgICAgIGNvbCA9IG9mZnNldDtcbiAgICAgIG5vZGUgPSBzdGFydE5vZGU7XG4gICAgfSBlbHNlIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgICBub2RlID0gc3RhcnROb2RlLmNoaWxkTm9kZXNbb2Zmc2V0IC0gMV07XG4gICAgICBjb2wgPSBub2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbCA9IDA7XG4gICAgICBub2RlID0gc3RhcnROb2RlO1xuICAgIH1cbiAgICB3aGlsZSAobm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIGlmIChub2RlLnByZXZpb3VzU2libGluZykge1xuICAgICAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIGNvbCArPSBub2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlIGFzIHVua25vd24gYXMgQ2hpbGROb2RlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlTm9kZUFuZE9mZnNldChyb3c6IG51bWJlciwgY29sOiBudW1iZXIsIGJpbmRSaWdodDogYm9vbGVhbiA9IGZhbHNlKToge25vZGU6IE5vZGUsIG9mZnNldDogbnVtYmVyfSB7XG4gICAgaWYgKHJvdyA+PSB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJvdyA9IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICBjb2wgPSB0aGlzLmxpbmVzW3Jvd10ubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoY29sID4gdGhpcy5saW5lc1tyb3ddLmxlbmd0aCkge1xuICAgICAgY29sID0gdGhpcy5saW5lc1tyb3ddLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMubGluZUVsZW1lbnRzW3Jvd10gYXMgSFRNTEVsZW1lbnQ7XG4gICAgbGV0IG5vZGUgPSBwYXJlbnROb2RlLmZpcnN0Q2hpbGQ7XG5cbiAgICBsZXQgY2hpbGRyZW5Db21wbGV0ZSA9IGZhbHNlO1xuICAgIGxldCBydiA9IHtcbiAgICAgIG5vZGU6IHBhcmVudE5vZGUuZmlyc3RDaGlsZCA/IHBhcmVudE5vZGUuZmlyc3RDaGlsZCA6IHBhcmVudE5vZGUsXG4gICAgICBvZmZzZXQ6IDAsXG4gICAgfTtcblxuICAgIHdoaWxlIChub2RlICE9PSBwYXJlbnROb2RlKSB7XG4gICAgICBpZiAoIWNoaWxkcmVuQ29tcGxldGUgJiYgbm9kZSEubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgIGlmIChub2RlIS5ub2RlVmFsdWUhLmxlbmd0aCA+PSBjb2wpIHtcbiAgICAgICAgICBpZiAoYmluZFJpZ2h0ICYmIG5vZGUhLm5vZGVWYWx1ZSEubGVuZ3RoID09PSBjb2wpIHtcbiAgICAgICAgICAgIHJ2ID0geyBub2RlOiBub2RlISwgb2Zmc2V0OiBjb2wgfTtcbiAgICAgICAgICAgIGNvbCA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IG5vZGU6IG5vZGUhLCBvZmZzZXQ6IGNvbCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2wgLT0gbm9kZSEubm9kZVZhbHVlIS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghY2hpbGRyZW5Db21wbGV0ZSAmJiBub2RlIS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUgPSBub2RlIS5maXJzdENoaWxkO1xuICAgICAgfSBlbHNlIGlmIChub2RlIS5uZXh0U2libGluZykge1xuICAgICAgICBjaGlsZHJlbkNvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIG5vZGUgPSBub2RlIS5uZXh0U2libGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVuQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICBub2RlID0gbm9kZSEucGFyZW50Tm9kZSBhcyB1bmtub3duIGFzIENoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcnY7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVDb250ZW50c0FuZEZvcm1hdHRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgIHRoaXMudXBkYXRlTGluZUNvbnRlbnRzKCk7XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRGlydHlGbGFnKCk6IHZvaWQge1xuICAgIHRoaXMubGluZURpcnR5ID0gbmV3IEFycmF5KHRoaXMubGluZXMubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGluZURpcnR5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmxpbmVEaXJ0eVtpXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZUNvbnRlbnRzKCk6IHZvaWQge1xuICAgIGxldCBsaW5lRGVsdGEgPSB0aGlzLmUhLmNoaWxkRWxlbWVudENvdW50IC0gdGhpcy5saW5lcy5sZW5ndGg7XG4gICAgaWYgKGxpbmVEZWx0YSkge1xuICAgICAgbGV0IGZpcnN0Q2hhbmdlZExpbmUgPSAwO1xuICAgICAgd2hpbGUgKFxuICAgICAgICBmaXJzdENoYW5nZWRMaW5lIDw9IHRoaXMubGluZXMubGVuZ3RoICYmXG4gICAgICAgIGZpcnN0Q2hhbmdlZExpbmUgPD0gdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmVdICYmXG4gICAgICAgIHRoaXMubGluZXNbZmlyc3RDaGFuZ2VkTGluZV0gPT09ICh0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgJiZcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbZmlyc3RDaGFuZ2VkTGluZV0gPT09ICh0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lXG4gICAgICApIHtcbiAgICAgICAgZmlyc3RDaGFuZ2VkTGluZSsrO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGFzdENoYW5nZWRMaW5lID0gLTE7XG4gICAgICB3aGlsZSAoXG4gICAgICAgIC1sYXN0Q2hhbmdlZExpbmUgPCB0aGlzLmxpbmVzLmxlbmd0aCAmJlxuICAgICAgICAtbGFzdENoYW5nZWRMaW5lIDwgdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIHRoaXMubGluZXNbdGhpcy5saW5lcy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdID09PVxuICAgICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1t0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS50ZXh0Q29udGVudCAmJlxuICAgICAgICB0aGlzLmxpbmVUeXBlc1t0aGlzLmxpbmVzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZV0gPT09XG4gICAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW3RoaXMubGluZUVsZW1lbnRzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZVxuICAgICAgKSB7XG4gICAgICAgIGxhc3RDaGFuZ2VkTGluZS0tO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGluZXNUb0RlbGV0ZSA9IHRoaXMubGluZXMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lICsgMSAtIGZpcnN0Q2hhbmdlZExpbmU7XG4gICAgICBpZiAobGluZXNUb0RlbGV0ZSA8IC1saW5lRGVsdGEpIGxpbmVzVG9EZWxldGUgPSAtbGluZURlbHRhO1xuICAgICAgaWYgKGxpbmVzVG9EZWxldGUgPCAwKSBsaW5lc1RvRGVsZXRlID0gMDtcblxuICAgICAgbGV0IGxpbmVzVG9BZGQgPSBbXTtcbiAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZXNUb0RlbGV0ZSArIGxpbmVEZWx0YTsgbCsrKSB7XG4gICAgICAgIGxpbmVzVG9BZGQucHVzaCgodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZSArIGxdIGFzIEhUTUxFbGVtZW50KS50ZXh0Q29udGVudCB8fCBcIlwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3BsaWNlTGluZXMoZmlyc3RDaGFuZ2VkTGluZSwgbGluZXNUb0RlbGV0ZSwgbGluZXNUb0FkZCwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBsaW5lID0gMDsgbGluZSA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aDsgbGluZSsrKSB7XG4gICAgICAgIGxldCBlID0gdGhpcy5saW5lRWxlbWVudHNbbGluZV0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGxldCBjdCA9IGUudGV4dENvbnRlbnQgfHwgXCJcIjtcbiAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZV0gIT09IGN0IHx8IHRoaXMubGluZVR5cGVzW2xpbmVdICE9PSBlLmNsYXNzTmFtZSkge1xuICAgICAgICAgIHRoaXMubGluZXNbbGluZV0gPSBjdDtcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lXSA9IGUuY2xhc3NOYW1lO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3BsaWNlTGluZXMoXG4gICAgc3RhcnRMaW5lOiBudW1iZXIsXG4gICAgbGluZXNUb0RlbGV0ZTogbnVtYmVyID0gMCxcbiAgICBsaW5lc1RvSW5zZXJ0OiBzdHJpbmdbXSA9IFtdLFxuICAgIGFkanVzdExpbmVFbGVtZW50czogYm9vbGVhbiA9IHRydWVcbiAgKTogdm9pZCB7XG4gICAgaWYgKGFkanVzdExpbmVFbGVtZW50cykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc1RvRGVsZXRlOyBpKyspIHtcbiAgICAgICAgdGhpcy5lIS5yZW1vdmVDaGlsZCh0aGlzLmUhLmNoaWxkTm9kZXNbc3RhcnRMaW5lXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGluc2VydGVkQmxhbmsgPSBbXTtcbiAgICBsZXQgaW5zZXJ0ZWREaXJ0eSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc1RvSW5zZXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbnNlcnRlZEJsYW5rLnB1c2goXCJcIik7XG4gICAgICBpbnNlcnRlZERpcnR5LnB1c2godHJ1ZSk7XG4gICAgICBpZiAoYWRqdXN0TGluZUVsZW1lbnRzKSB7XG4gICAgICAgIGlmICh0aGlzLmUhLmNoaWxkTm9kZXNbc3RhcnRMaW5lXSlcbiAgICAgICAgICB0aGlzLmUhLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCB0aGlzLmUhLmNoaWxkTm9kZXNbc3RhcnRMaW5lXSk7XG4gICAgICAgIGVsc2UgdGhpcy5lIS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxpbmVzLnNwbGljZShzdGFydExpbmUsIGxpbmVzVG9EZWxldGUsIC4uLmxpbmVzVG9JbnNlcnQpO1xuICAgIHRoaXMubGluZVR5cGVzLnNwbGljZShzdGFydExpbmUsIGxpbmVzVG9EZWxldGUsIC4uLmluc2VydGVkQmxhbmspO1xuICAgIHRoaXMubGluZURpcnR5LnNwbGljZShzdGFydExpbmUsIGxpbmVzVG9EZWxldGUsIC4uLmluc2VydGVkRGlydHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXhOb2RlSGllcmFyY2h5KCk6IHZvaWQge1xuICAgIGNvbnN0IG9yaWdpbmFsQ2hpbGRyZW4gPSBBcnJheS5mcm9tKHRoaXMuZSEuY2hpbGROb2Rlcyk7XG5cbiAgICBjb25zdCByZXBsYWNlQ2hpbGQgPSAoY2hpbGQ6IE5vZGUsIC4uLm5ld0NoaWxkcmVuOiBOb2RlW10pID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNoaWxkLnBhcmVudEVsZW1lbnQhO1xuICAgICAgY29uc3QgbmV4dFNpYmxpbmcgPSBjaGlsZC5uZXh0U2libGluZztcbiAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICBuZXdDaGlsZHJlbi5mb3JFYWNoKChuZXdDaGlsZCkgPT5cbiAgICAgICAgbmV4dFNpYmxpbmcgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCBuZXh0U2libGluZykgOiBwYXJlbnQuYXBwZW5kQ2hpbGQobmV3Q2hpbGQpXG4gICAgICApO1xuICAgIH07XG5cbiAgICBvcmlnaW5hbENoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFIHx8IChjaGlsZCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZSAhPT0gXCJESVZcIikge1xuICAgICAgICBjb25zdCBkaXZXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgcmVwbGFjZUNoaWxkKGNoaWxkLCBkaXZXcmFwcGVyKTtcbiAgICAgICAgZGl2V3JhcHBlci5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNoaWxkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiclwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBncmFuZENoaWxkcmVuID0gQXJyYXkuZnJvbShjaGlsZC5jaGlsZE5vZGVzKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGdyYW5kQ2hpbGRyZW4uc29tZShcbiAgICAgICAgICAgIChncmFuZENoaWxkKSA9PlxuICAgICAgICAgICAgICBncmFuZENoaWxkLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiAoZ3JhbmRDaGlsZCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZSA9PT0gXCJESVZcIlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2VDaGlsZChjaGlsZCwgLi4uZ3JhbmRDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBwYXJzZUxpbmtPckltYWdlKG9yaWdpbmFsU3RyaW5nOiBzdHJpbmcsIGlzSW1hZ2U6IGJvb2xlYW4pOiB7b3V0cHV0OiBzdHJpbmcsIGNoYXJDb3VudDogbnVtYmVyfSB8IGZhbHNlIHtcbiAgICAvLyBTa2lwIHRoZSBvcGVuaW5nIGJyYWNrZXRcbiAgICBsZXQgdGV4dE9mZnNldCA9IGlzSW1hZ2UgPyAyIDogMTtcbiAgICBsZXQgb3BlbmVyID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKDAsIHRleHRPZmZzZXQpO1xuICAgIGxldCB0eXBlID0gaXNJbWFnZSA/IFwiVE1JbWFnZVwiIDogXCJUTUxpbmtcIjtcbiAgICBsZXQgY3VycmVudE9mZnNldCA9IHRleHRPZmZzZXQ7XG5cbiAgICBsZXQgYnJhY2tldExldmVsID0gMTtcbiAgICBsZXQgbGlua1RleHQ6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgbGV0IGxpbmtSZWY6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgbGV0IGxpbmtMYWJlbDogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgbGlua0RldGFpbHM6IHN0cmluZ1tdID0gW107XG5cbiAgICB0ZXh0T3V0ZXI6IHdoaWxlIChcbiAgICAgIGN1cnJlbnRPZmZzZXQgPCBvcmlnaW5hbFN0cmluZy5sZW5ndGggJiZcbiAgICAgIGxpbmtUZXh0ID09PSBmYWxzZVxuICAgICkge1xuICAgICAgbGV0IHN0cmluZyA9IG9yaWdpbmFsU3RyaW5nLnN1YnN0cihjdXJyZW50T2Zmc2V0KTtcblxuICAgICAgLy8gQ2FwdHVyZSBhbnkgZXNjYXBlcyBhbmQgY29kZSBibG9ja3MgYXQgY3VycmVudCBwb3NpdGlvblxuICAgICAgZm9yIChsZXQgcnVsZSBvZiBbXCJlc2NhcGVcIiwgXCJjb2RlXCIsIFwiYXV0b2xpbmtcIiwgXCJodG1sXCJdKSB7XG4gICAgICAgIGxldCBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGltYWdlXG4gICAgICBpZiAoc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5pbWFnZU9wZW4ucmVnZXhwKSkge1xuICAgICAgICBicmFja2V0TGV2ZWwrKztcbiAgICAgICAgY3VycmVudE9mZnNldCArPSAyO1xuICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBsaW5rXG4gICAgICBpZiAoc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rT3Blbi5yZWdleHApKSB7XG4gICAgICAgIGJyYWNrZXRMZXZlbCsrO1xuICAgICAgICBpZiAoIWlzSW1hZ2UpIHtcbiAgICAgICAgICBpZiAodGhpcy5wYXJzZUxpbmtPckltYWdlKHN0cmluZywgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gMTtcbiAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgY2xvc2luZyBicmFja2V0XG4gICAgICBpZiAoc3RyaW5nLm1hdGNoKC9eXFxdLykpIHtcbiAgICAgICAgYnJhY2tldExldmVsLS07XG4gICAgICAgIGlmIChicmFja2V0TGV2ZWwgPT09IDApIHtcbiAgICAgICAgICBsaW5rVGV4dCA9IG9yaWdpbmFsU3RyaW5nLnN1YnN0cih0ZXh0T2Zmc2V0LCBjdXJyZW50T2Zmc2V0IC0gdGV4dE9mZnNldCk7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBOb3RoaW5nIG1hdGNoZXMsIHByb2NlZWQgdG8gbmV4dCBjaGFyXG4gICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgfVxuXG4gICAgLy8gRGlkIHdlIGZpbmQgYSBsaW5rIHRleHQ/XG4gICAgaWYgKGxpbmtUZXh0ID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gQ2hlY2sgd2hhdCB0eXBlIG9mIGxpbmsgdGhpcyBpc1xuICAgIGxldCBuZXh0Q2hhciA9IGN1cnJlbnRPZmZzZXQgPCBvcmlnaW5hbFN0cmluZy5sZW5ndGggPyBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCwgMSkgOiBcIlwiO1xuXG4gICAgLy8gUkVGRVJFTkNFIExJTktTXG4gICAgaWYgKG5leHRDaGFyID09PSBcIltcIikge1xuICAgICAgbGV0IHN0cmluZyA9IG9yaWdpbmFsU3RyaW5nLnN1YnN0cihjdXJyZW50T2Zmc2V0KTtcbiAgICAgIGxldCBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua0xhYmVsLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgbGlua0xhYmVsLnB1c2goY2FwWzFdLCBjYXBbMl0sIGNhcFszXSk7XG4gICAgICAgIGlmIChjYXBbdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtMYWJlbC5sYWJlbFBsYWNlaG9sZGVyIV0pIHtcbiAgICAgICAgICBsaW5rUmVmID0gY2FwW3RoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rTGFiZWwubGFiZWxQbGFjZWhvbGRlciFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmtSZWYgPSBsaW5rVGV4dC50cmltKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5leHRDaGFyICE9PSBcIihcIikge1xuICAgICAgLy8gU2hvcnRjdXQgcmVmIGxpbmtcbiAgICAgIGxpbmtSZWYgPSBsaW5rVGV4dC50cmltKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElOTElORSBMSU5LU1xuICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgbGV0IHBhcmVudGhlc2lzTGV2ZWwgPSAxO1xuXG4gICAgICBpbmxpbmVPdXRlcjogd2hpbGUgKGN1cnJlbnRPZmZzZXQgPCBvcmlnaW5hbFN0cmluZy5sZW5ndGggJiYgcGFyZW50aGVzaXNMZXZlbCA+IDApIHtcbiAgICAgICAgbGV0IHN0cmluZyA9IG9yaWdpbmFsU3RyaW5nLnN1YnN0cihjdXJyZW50T2Zmc2V0KTtcblxuICAgICAgICAvLyBQcm9jZXNzIHdoaXRlc3BhY2VcbiAgICAgICAgbGV0IGNhcCA9IC9eXFxzKy8uZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzWzBdLm1hdGNoKC88LykpIHtcbiAgICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsICE9PSAxKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzZdID0gbGlua0RldGFpbHNbNl0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGJhY2tzbGFzaCBlc2NhcGVzXG4gICAgICAgIGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5lc2NhcGUucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgb3BlbmluZyBhbmdsZSBicmFja2V0XG4gICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPCAyICYmIHN0cmluZy5tYXRjaCgvXjwvKSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDApIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHNbMF0gPSBsaW5rRGV0YWlsc1swXS5jb25jYXQoXCI8XCIpO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgY2xvc2luZyBhbmdsZSBicmFja2V0XG4gICAgICAgIGlmICgobGlua0RldGFpbHMubGVuZ3RoID09PSAxIHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMikgJiYgc3RyaW5nLm1hdGNoKC9ePi8pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMSkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiPlwiKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIG5vbi1wYXJlbnRoZXNpcyBkZWxpbWl0ZXIgZm9yIHRpdGxlXG4gICAgICAgIGNhcCA9IC9eW1wiJ10vLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCAmJiAobGlua0RldGFpbHMubGVuZ3RoID09PSAwIHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDQpKSB7XG4gICAgICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDQpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYXAgJiYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDYpICYmIGxpbmtEZXRhaWxzWzRdID09PSBjYXBbMF0pIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIG9wZW5pbmcgcGFyZW50aGVzaXNcbiAgICAgICAgaWYgKHN0cmluZy5tYXRjaCgvXlxcKC8pKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoXCIoXCIpO1xuICAgICAgICAgICAgICBpZiAoIWxpbmtEZXRhaWxzWzBdLm1hdGNoKC88JC8pKSBwYXJlbnRoZXNpc0xldmVsKys7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiKFwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlsc1s0XSA9PT0gXCIoXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoXCIoXCIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBjbG9zaW5nIHBhcmVudGhlc2lzXG4gICAgICAgIGlmIChzdHJpbmcubWF0Y2goL15cXCkvKSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPD0gMikge1xuICAgICAgICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDIpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBpZiAoIWxpbmtEZXRhaWxzWzBdLm1hdGNoKC88JC8pKSBwYXJlbnRoZXNpc0xldmVsLS07XG4gICAgICAgICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCA+IDApIHtcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoXCIpXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1IHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNikge1xuICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzWzRdID09PSBcIihcIikge1xuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiKVwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCIpXCIpO1xuICAgICAgICAgICAgICBlbHNlIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KFwiKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyZW50aGVzaXNMZXZlbC0tO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsID09PSAwKSB7XG4gICAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgNykgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbnkgb2xkIGNoYXJhY3RlclxuICAgICAgICBjYXAgPSAvXi4vLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBcIkluZmluaXRlIGxvb3BcIjtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsID4gMCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChsaW5rUmVmICE9PSBmYWxzZSkge1xuICAgICAgLy8gUmVmZXJlbmNlIGxpbms7IGNoZWNrIHRoYXQgbGlua1JlZiBpcyB2YWxpZFxuICAgICAgbGV0IHZhbGlkID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBsYWJlbCBvZiB0aGlzLmxpbmtMYWJlbHMpIHtcbiAgICAgICAgaWYgKGxhYmVsID09PSBsaW5rUmVmKSB7XG4gICAgICAgICAgdmFsaWQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgbGFiZWxDbGFzcyA9IHZhbGlkID8gXCJUTUxpbmtMYWJlbCBUTUxpbmtMYWJlbF9WYWxpZFwiIDogXCJUTUxpbmtMYWJlbCBUTUxpbmtMYWJlbF9JbnZhbGlkXCI7XG4gICAgICBsZXQgb3V0cHV0ID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtvcGVuZXJ9PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfSAke1xuICAgICAgICBsaW5rTGFiZWwubGVuZ3RoIDwgMyB8fCAhbGlua0xhYmVsWzFdID8gbGFiZWxDbGFzcyA6IFwiXCJcbiAgICAgIH1cIj4ke3RoaXMucHJvY2Vzc0lubGluZVN0eWxlcyhsaW5rVGV4dCl9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+XTwvc3Bhbj5gO1xuXG4gICAgICBpZiAobGlua0xhYmVsLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQoXG4gICAgICAgICAgYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rTGFiZWxbMF19PC9zcGFuPmAsXG4gICAgICAgICAgYDxzcGFuIGNsYXNzPVwiJHtsYWJlbENsYXNzfVwiPiR7bGlua0xhYmVsWzFdfTwvc3Bhbj5gLFxuICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7bGlua0xhYmVsWzJdfTwvc3Bhbj5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXQ6IG91dHB1dCxcbiAgICAgICAgY2hhckNvdW50OiBjdXJyZW50T2Zmc2V0LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIElubGluZSBsaW5rXG4gICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgNykge1xuICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXQ6IGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7b3BlbmVyfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX1cIj4ke3RoaXMucHJvY2Vzc0lubGluZVN0eWxlcyhcbiAgICAgICAgICBsaW5rVGV4dFxuICAgICAgICApfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPl0oJHtcbiAgICAgICAgICBsaW5rRGV0YWlsc1swXVxuICAgICAgICB9PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfURlc3RpbmF0aW9uXCI+JHtcbiAgICAgICAgICBodG1sZXNjYXBlKGxpbmtEZXRhaWxzWzFdKVxuICAgICAgICB9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rRGV0YWlsc1syXX0ke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzNdXG4gICAgICAgIH0ke2xpbmtEZXRhaWxzWzRdfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX1UaXRsZVwiPiR7XG4gICAgICAgICAgaHRtbGVzY2FwZShsaW5rRGV0YWlsc1s1XSlcbiAgICAgICAgfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7bGlua0RldGFpbHNbNl19KTwvc3Bhbj5gLFxuICAgICAgICBjaGFyQ291bnQ6IGN1cnJlbnRPZmZzZXQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUNvbW1vbkFuY2VzdG9yKG5vZGUxOiBOb2RlIHwgbnVsbCwgbm9kZTI6IE5vZGUgfCBudWxsKTogTm9kZSB8IG51bGwge1xuICAgIGlmICghbm9kZTEgfHwgIW5vZGUyKSByZXR1cm4gbnVsbDtcbiAgICBpZiAobm9kZTEgPT09IG5vZGUyKSByZXR1cm4gbm9kZTE7XG4gICAgY29uc3QgYW5jZXN0cnkgPSAobm9kZTogTm9kZSkgPT4ge1xuICAgICAgbGV0IGFuY2VzdHJ5ID0gW107XG4gICAgICB3aGlsZSAobm9kZSkge1xuICAgICAgICBhbmNlc3RyeS51bnNoaWZ0KG5vZGUpO1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhbmNlc3RyeTtcbiAgICB9O1xuXG4gICAgY29uc3QgYW5jZXN0cnkxID0gYW5jZXN0cnkobm9kZTEpO1xuICAgIGNvbnN0IGFuY2VzdHJ5MiA9IGFuY2VzdHJ5KG5vZGUyKTtcblxuICAgIGlmIChhbmNlc3RyeTFbMF0gIT09IGFuY2VzdHJ5MlswXSkgcmV0dXJuIG51bGw7XG4gICAgbGV0IGk7XG4gICAgZm9yIChpID0gMDsgYW5jZXN0cnkxW2ldID09PSBhbmNlc3RyeTJbaV07IGkrKyk7XG4gICAgcmV0dXJuIGFuY2VzdHJ5MVtpIC0gMV07XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVFbmNsb3NpbmdNYXJrdXBOb2RlKGZvY3VzOiBQb3NpdGlvbiwgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwsIGNsYXNzTmFtZTogc3RyaW5nKTogTm9kZSB8IG51bGwge1xuICAgIGxldCBub2RlID0gbnVsbDtcbiAgICBpZiAoIWZvY3VzKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIWFuY2hvcikge1xuICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgaWYgKCFzZWwgfHwgIXNlbC5mb2N1c05vZGUpIHJldHVybiBudWxsO1xuICAgICAgbm9kZSA9IHNlbC5mb2N1c05vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHJldHVybiBudWxsO1xuICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgaWYgKCFzZWwpIHJldHVybiBudWxsO1xuICAgICAgbm9kZSA9IHRoaXMuY29tcHV0ZUNvbW1vbkFuY2VzdG9yKHNlbC5mb2N1c05vZGUsIHNlbC5hbmNob3JOb2RlKTtcbiAgICB9XG4gICAgaWYgKCFub2RlKSByZXR1cm4gbnVsbDtcbiAgICB3aGlsZSAobm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAoKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdCAmJiAobm9kZSBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHJldHVybiBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSE7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldENvbW1hbmRTdGF0ZShmb2N1czogUG9zaXRpb24gfCBudWxsID0gbnVsbCwgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsKTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+IHtcbiAgICBsZXQgY29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4gPSB7fTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgaWYgKCFmb2N1cykge1xuICAgICAgZm9yIChsZXQgY21kIGluIGNvbW1hbmRzKSB7XG4gICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21tYW5kU3RhdGU7XG4gICAgfVxuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSBmb2N1cztcblxuICAgIGxldCBzdGFydDogUG9zaXRpb24sIGVuZDogUG9zaXRpb247XG4gICAgaWYgKGFuY2hvci5yb3cgPCBmb2N1cy5yb3cgfHwgKGFuY2hvci5yb3cgPT09IGZvY3VzLnJvdyAmJiBhbmNob3IuY29sIDwgZm9jdXMuY29sKSkge1xuICAgICAgc3RhcnQgPSBhbmNob3I7XG4gICAgICBlbmQgPSBmb2N1cztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSBmb2N1cztcbiAgICAgIGVuZCA9IGFuY2hvcjtcbiAgICB9XG4gICAgaWYgKGVuZC5yb3cgPiBzdGFydC5yb3cgJiYgZW5kLmNvbCA9PT0gMCkge1xuICAgICAgZW5kLnJvdy0tO1xuICAgICAgZW5kLmNvbCA9IHRoaXMubGluZXNbZW5kLnJvd10ubGVuZ3RoO1xuICAgIH1cblxuICAgIGZvciAobGV0IGNtZCBpbiBjb21tYW5kcykge1xuICAgICAgaWYgKGNvbW1hbmRzW2NtZF0udHlwZSA9PT0gXCJpbmxpbmVcIikge1xuICAgICAgICBpZiAoIWZvY3VzIHx8IGZvY3VzLnJvdyAhPT0gYW5jaG9yIS5yb3cgfHwgIXRoaXMuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpKSB7XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID1cbiAgICAgICAgICAgICEhdGhpcy5jb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZShmb2N1cywgYW5jaG9yLCBjb21tYW5kc1tjbWRdLmNsYXNzTmFtZSkgfHxcbiAgICAgICAgICAgIChmb2N1cy5jb2wgPT09IGFuY2hvciEuY29sICYmXG4gICAgICAgICAgICAgICEhdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cigwLCBmb2N1cy5jb2wpLm1hdGNoKGNvbW1hbmRzW2NtZF0udW5zZXQucHJlUGF0dGVybikgJiZcbiAgICAgICAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKGZvY3VzLmNvbCkubWF0Y2goY29tbWFuZHNbY21kXS51bnNldC5wb3N0UGF0dGVybikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY29tbWFuZHNbY21kXS50eXBlID09PSBcImxpbmVcIikge1xuICAgICAgICBpZiAoIWZvY3VzKSB7XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBzdGF0ZTogYm9vbGVhbiB8IG51bGwgPSB0aGlzLmxpbmVUeXBlc1tzdGFydC5yb3ddID09PSBjb21tYW5kc1tjbWRdLmNsYXNzTmFtZTtcbiAgICAgICAgICBmb3IgKGxldCBsaW5lID0gc3RhcnQucm93OyBsaW5lIDw9IGVuZC5yb3c7IGxpbmUrKykge1xuICAgICAgICAgICAgaWYgKCh0aGlzLmxpbmVUeXBlc1tsaW5lXSA9PT0gY29tbWFuZHNbY21kXS5jbGFzc05hbWUpICE9PSBzdGF0ZSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IG51bGw7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IHN0YXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb21tYW5kU3RhdGU7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29tbWFuZFN0YXRlKGNvbW1hbmQ6IHN0cmluZywgc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgaWYgKGNvbW1hbmRzW2NvbW1hbmRdLnR5cGUgPT09IFwiaW5saW5lXCIpIHtcbiAgICAgIGxldCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSBmb2N1cztcbiAgICAgIGlmICghYW5jaG9yKSByZXR1cm47XG4gICAgICBpZiAoYW5jaG9yLnJvdyAhPT0gZm9jdXMhLnJvdykgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkgcmV0dXJuO1xuICAgICAgbGV0IG1hcmt1cE5vZGUgPSB0aGlzLmNvbXB1dGVFbmNsb3NpbmdNYXJrdXBOb2RlKGZvY3VzISwgYW5jaG9yLCBjb21tYW5kc1tjb21tYW5kXS5jbGFzc05hbWUpO1xuICAgICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuXG4gICAgICBpZiAobWFya3VwTm9kZSkge1xuICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cyEucm93XSA9IHRydWU7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29sID0gdGhpcy5jb21wdXRlQ29sdW1uKG1hcmt1cE5vZGUsIDApITtcbiAgICAgICAgY29uc3QgbGVuID0gbWFya3VwTm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgICAgICBjb25zdCBsZWZ0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoMCwgc3RhcnRDb2wpXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucHJlUGF0dGVybiwgXCJcIik7XG4gICAgICAgIGNvbnN0IG1pZCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd10uc3Vic3RyKHN0YXJ0Q29sLCBsZW4pO1xuICAgICAgICBjb25zdCByaWdodCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKHN0YXJ0Q29sICsgbGVuKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBvc3RQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgdGhpcy5saW5lc1tmb2N1cyEucm93XSA9IGxlZnQuY29uY2F0KG1pZCwgcmlnaHQpO1xuICAgICAgICBhbmNob3IuY29sID0gbGVmdC5sZW5ndGg7XG4gICAgICAgIGZvY3VzIS5jb2wgPSBhbmNob3IuY29sICsgbGVuO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMhLCBhbmNob3IpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZvY3VzIS5jb2wgPT09IGFuY2hvci5jb2wgJiZcbiAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddLnN1YnN0cigwLCBmb2N1cyEuY29sKS5tYXRjaChjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuKSAmJlxuICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMhLnJvd10uc3Vic3RyKGZvY3VzIS5jb2wpLm1hdGNoKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBvc3RQYXR0ZXJuKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzIS5yb3ddID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKDAsIGZvY3VzIS5jb2wpXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucHJlUGF0dGVybiwgXCJcIik7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoZm9jdXMhLmNvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wb3N0UGF0dGVybiwgXCJcIik7XG4gICAgICAgIHRoaXMubGluZXNbZm9jdXMhLnJvd10gPSBsZWZ0LmNvbmNhdChyaWdodCk7XG4gICAgICAgIGZvY3VzIS5jb2wgPSBhbmNob3IuY29sID0gbGVmdC5sZW5ndGg7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyEsIGFuY2hvcik7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHsgc3RhcnRDb2wsIGVuZENvbCB9ID1cbiAgICAgICAgICBmb2N1cyEuY29sIDwgYW5jaG9yLmNvbFxuICAgICAgICAgICAgPyB7IHN0YXJ0Q29sOiBmb2N1cyEuY29sLCBlbmRDb2w6IGFuY2hvci5jb2wgfVxuICAgICAgICAgICAgOiB7IHN0YXJ0Q29sOiBhbmNob3IuY29sLCBlbmRDb2w6IGZvY3VzIS5jb2wgfTtcblxuICAgICAgICBsZXQgbWF0Y2ggPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cihzdGFydENvbCwgZW5kQ29sIC0gc3RhcnRDb2wpXG4gICAgICAgICAgLm1hdGNoKC9eKD88bGVhZGluZz5cXHMqKS4qXFxTKD88dHJhaWxpbmc+XFxzKikkLyk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHN0YXJ0Q29sICs9IG1hdGNoLmdyb3VwcyEubGVhZGluZy5sZW5ndGg7XG4gICAgICAgICAgZW5kQ29sIC09IG1hdGNoLmdyb3VwcyEudHJhaWxpbmcubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9jdXMhLmNvbCA9IHN0YXJ0Q29sO1xuICAgICAgICBhbmNob3IuY29sID0gZW5kQ29sO1xuXG4gICAgICAgIHRoaXMud3JhcFNlbGVjdGlvbihjb21tYW5kc1tjb21tYW5kXS5zZXQucHJlLCBjb21tYW5kc1tjb21tYW5kXS5zZXQucG9zdCwgZm9jdXMsIGFuY2hvcik7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29tbWFuZHNbY29tbWFuZF0udHlwZSA9PT0gXCJsaW5lXCIpIHtcbiAgICAgIGxldCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSBmb2N1cztcbiAgICAgIGlmICghZm9jdXMpIHJldHVybjtcbiAgICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcbiAgICAgIGxldCBzdGFydCA9IGFuY2hvciEucm93ID4gZm9jdXMhLnJvdyA/IGZvY3VzISA6IGFuY2hvciE7XG4gICAgICBsZXQgZW5kID0gYW5jaG9yIS5yb3cgPiBmb2N1cyEucm93ID8gYW5jaG9yISA6IGZvY3VzITtcbiAgICAgIGlmIChlbmQucm93ID4gc3RhcnQucm93ICYmIGVuZC5jb2wgPT09IDApIHtcbiAgICAgICAgZW5kLnJvdy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBsaW5lID0gc3RhcnQucm93OyBsaW5lIDw9IGVuZC5yb3c7IGxpbmUrKykge1xuICAgICAgICBpZiAoc3RhdGUgJiYgdGhpcy5saW5lVHlwZXNbbGluZV0gIT09IGNvbW1hbmRzW2NvbW1hbmRdLmNsYXNzTmFtZSkge1xuICAgICAgICAgIHRoaXMubGluZXNbbGluZV0gPSB0aGlzLmxpbmVzW2xpbmVdLnJlcGxhY2UoXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS5zZXQucGF0dGVybixcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5yZXBsYWNlbWVudC5yZXBsYWNlKFwiJCNcIiwgKGxpbmUgLSBzdGFydC5yb3cgKyAxKS50b1N0cmluZygpKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3RhdGUgJiYgdGhpcy5saW5lVHlwZXNbbGluZV0gPT09IGNvbW1hbmRzW2NvbW1hbmRdLmNsYXNzTmFtZSkge1xuICAgICAgICAgIHRoaXMubGluZXNbbGluZV0gPSB0aGlzLmxpbmVzW2xpbmVdLnJlcGxhY2UoXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS51bnNldC5wYXR0ZXJuLFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0udW5zZXQucmVwbGFjZW1lbnRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICB0aGlzLnNldFNlbGVjdGlvbihcbiAgICAgICAgeyByb3c6IGVuZC5yb3csIGNvbDogdGhpcy5saW5lc1tlbmQucm93XS5sZW5ndGggfSxcbiAgICAgICAgeyByb3c6IHN0YXJ0LnJvdywgY29sOiAwIH1cbiAgICAgICk7XG4gICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwgfHwgIXNlbC5mb2N1c05vZGUgfHwgIXNlbC5hbmNob3JOb2RlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoXG4gICAgICBzZWwuaXNDb2xsYXBzZWQgJiZcbiAgICAgIHNlbC5mb2N1c05vZGUubm9kZVR5cGUgPT09IDMgJiZcbiAgICAgIHNlbC5mb2N1c09mZnNldCA9PT0gc2VsLmZvY3VzTm9kZS5ub2RlVmFsdWUhLmxlbmd0aFxuICAgICkge1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBmb3IgKG5vZGUgPSBzZWwuZm9jdXNOb2RlOyBub2RlICYmIG5vZGUubmV4dFNpYmxpbmcgPT09IG51bGw7IG5vZGUgPSBub2RlLnBhcmVudE5vZGUhKTtcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZSAmJlxuICAgICAgICBub2RlLm5leHRTaWJsaW5nICYmXG4gICAgICAgIChub2RlLm5leHRTaWJsaW5nIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QgJiZcbiAgICAgICAgKG5vZGUubmV4dFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucyhcIlRNSW5saW5lRm9ybWF0dGVkXCIpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGxldCBhbmNlc3RvciA9IHRoaXMuY29tcHV0ZUNvbW1vbkFuY2VzdG9yKHNlbC5mb2N1c05vZGUsIHNlbC5hbmNob3JOb2RlKTtcbiAgICBpZiAoIWFuY2VzdG9yKSByZXR1cm4gZmFsc2U7XG5cbiAgICB3aGlsZSAoYW5jZXN0b3IgJiYgYW5jZXN0b3IgIT09IHRoaXMuZSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdCAmJlxuICAgICAgICAoKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuY29udGFpbnMoXCJUTUlubGluZUZvcm1hdHRlZFwiKSB8fFxuICAgICAgICAgIChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiVE1CbGFua0xpbmVcIikpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlITtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQ29tbWFuZFN0YXRlKGNvbW1hbmQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5sYXN0Q29tbWFuZFN0YXRlKSB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSB0aGlzLmdldENvbW1hbmRTdGF0ZSgpO1xuICAgIHRoaXMuc2V0Q29tbWFuZFN0YXRlKGNvbW1hbmQsICF0aGlzLmxhc3RDb21tYW5kU3RhdGVbY29tbWFuZF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXJlRHJvcChkYXRhVHJhbnNmZXI6IERhdGFUcmFuc2Zlcik6IHZvaWQge1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLmRyb3ApIHtcbiAgICAgIGxpc3RlbmVyKHsgZGF0YVRyYW5zZmVyIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlyZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuXG4gICAgLy8gU2F2ZSB0aGUgY3VycmVudCBzZWxlY3Rpb24gZm9yIHJlc3RvcmF0aW9uIGxhdGVyXG4gICAgdGhpcy5sYXN0U2VsZWN0aW9uID0ge1xuICAgICAgZm9jdXM6IGZvY3VzLFxuICAgICAgYW5jaG9yOiBhbmNob3JcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbiAmJiB0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICBsZXQgY29tbWFuZFN0YXRlID0gdGhpcy5nZXRDb21tYW5kU3RhdGUoZm9jdXMsIGFuY2hvcik7XG4gICAgICBpZiAodGhpcy5sYXN0Q29tbWFuZFN0YXRlKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5sYXN0Q29tbWFuZFN0YXRlLCBjb21tYW5kU3RhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sYXN0Q29tbWFuZFN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgY29tbWFuZFN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbikge1xuICAgICAgICBsaXN0ZW5lcih7XG4gICAgICAgICAgZm9jdXM6IGZvY3VzISxcbiAgICAgICAgICBhbmNob3I6IGFuY2hvciEsXG4gICAgICAgICAgY29tbWFuZFN0YXRlOiB0aGlzLmxhc3RDb21tYW5kU3RhdGUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFZGl0b3I7XG4iXSwibmFtZXMiOlsiZ2xvYmFsIiwidGhpcyIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJzaGFyZWRTdG9yZU1vZHVsZSIsInJlcXVpcmUkJDQiLCJyZXF1aXJlJCQ1IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJtYWtlQnVpbHRJbiIsIm1ha2VCdWlsdEluTW9kdWxlIiwib3duS2V5cyIsInJlcXVpcmUkJDgiLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCJyZXF1aXJlJCQxMSIsInJlcXVpcmUkJDEyIiwicmVxdWlyZSQkMTMiLCJzdmciLCJibG9ja3F1b3RlIiwiYm9sZCIsImNsZWFyX2Zvcm1hdHRpbmciLCJjb2RlIiwiaDEiLCJoMiIsImhyIiwiaW1hZ2UiLCJpdGFsaWMiLCJsaW5rIiwib2wiLCJyZWRvIiwic3RyaWtldGhyb3VnaCIsInVsIiwidW5kbyIsImlzTWFjTGlrZSIsInRlc3QiLCJuYXZpZ2F0b3IiLCJwbGF0Zm9ybSIsIkRlZmF1bHRDb21tYW5kcyIsIm5hbWUiLCJhY3Rpb24iLCJpbm5lckhUTUwiLCJ0aXRsZSIsImhvdGtleSIsImluc2VydExpbmsiLCJlZGl0b3IiLCJpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkIiwid3JhcFNlbGVjdGlvbiIsImVuYWJsZWQiLCJpbnNlcnRJbWFnZSIsInBhc3RlIiwiY2FuVW5kbyIsImNhblJlZG8iLCJDb21tYW5kQmFyIiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImUiLCJjb21tYW5kcyIsImJ1dHRvbnMiLCJzdGF0ZSIsImhvdGtleXMiLCJlbGVtZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImJvZHkiLCJjcmVhdGVDb21tYW5kQmFyRWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJoYW5kbGVLZXlkb3duIiwic2V0RWRpdG9yIiwicGFyZW50RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjb21tYW5kIiwiZWwiLCJhcHBlbmRDaGlsZCIsImNvbW1hbmROYW1lIiwiT2JqZWN0IiwiYXNzaWduIiwia2V5cyIsInNwbGl0IiwibW9kaWZpZXJzIiwibW9kaWZpZXJleHBsYW5hdGlvbiIsImkiLCJsZW5ndGgiLCJwdXNoIiwibGFzdEtleSIsIm1hdGNoIiwiY29uY2F0IiwidG9VcHBlckNhc2UiLCJrZXkiLCJ0b0xvd2VyQ2FzZSIsImpvaW4iLCJoYW5kbGVDbGljayIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJlZGl0b3JIYWRGb2N1cyIsImNvbnRhaW5zIiwiYWN0aXZlRWxlbWVudCIsImZvY3VzIiwicmVzdG9yZUxhc3RTZWxlY3Rpb24iLCJzZXRDb21tYW5kU3RhdGUiLCJoYW5kbGVTZWxlY3Rpb24iLCJjb21tYW5kU3RhdGUiLCJ1bmRlZmluZWQiLCJhbmNob3IiLCJvdXRlciIsIm1vZGlmaWVyIiwicmVxdWlyZSQkMTQiLCJyZXF1aXJlJCQxNSIsInJlcXVpcmUkJDE2IiwicmVxdWlyZSQkMTciLCJyZXF1aXJlJCQxOCIsInJlcXVpcmUkJDE5IiwicmVxdWlyZSQkMjAiLCJyZXF1aXJlJCQyMSIsInJlcGxhY2VtZW50cyIsIkFTQ0lJUHVuY3R1YXRpb24iLCJOb3RUcmlnZ2VyQ2hhciIsIlNjaGVtZSIsIkVtYWlsIiwiSFRNTE9wZW5UYWciLCJIVE1MQ2xvc2VUYWciLCJIVE1MVGFnTmFtZSIsIkhUTUxDb21tZW50IiwiSFRNTFBJIiwiSFRNTERlY2xhcmF0aW9uIiwiSFRNTENEQVRBIiwiSFRNTEF0dHJpYnV0ZSIsIkhUTUxBdHRWYWx1ZSIsIktub3duVGFnIiwicHVuY3R1YXRpb25MZWFkaW5nIiwiUmVnRXhwIiwicHVuY3R1YXRpb25UcmFpbGluZyIsImxpbmVHcmFtbWFyIiwiVE1IMSIsInJlZ2V4cCIsInJlcGxhY2VtZW50IiwiVE1IMiIsIlRNSDMiLCJUTUg0IiwiVE1INSIsIlRNSDYiLCJUTUJsb2NrcXVvdGUiLCJUTUNvZGVGZW5jZUJhY2t0aWNrT3BlbiIsIl93cmFwUmVnRXhwIiwic2VxIiwiVE1Db2RlRmVuY2VUaWxkZU9wZW4iLCJUTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UiLCJUTUNvZGVGZW5jZVRpbGRlQ2xvc2UiLCJUTUJsYW5rTGluZSIsIlRNU2V0ZXh0SDFNYXJrZXIiLCJUTVNldGV4dEgyTWFya2VyIiwiVE1IUiIsIlRNVUwiLCJUTU9MIiwiVE1JbmRlbnRlZENvZGUiLCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uIiwibGFiZWxQbGFjZWhvbGRlciIsImh0bWxCbG9ja0dyYW1tYXIiLCJzdGFydCIsImVuZCIsInBhcmFJbnRlcnJ1cHQiLCJpbmxpbmVHcmFtbWFyIiwiZXNjYXBlIiwiYXV0b2xpbmsiLCJodG1sIiwibGlua09wZW4iLCJpbWFnZU9wZW4iLCJsaW5rTGFiZWwiLCJkZWZhdWx0IiwicmVwbGFjZW1lbnRSZWdleHAiLCJpbmxpbmVSdWxlcyIsInJ1bGUiLCJyZSIsInNvdXJjZSIsInJlcGxhY2UiLCJzdHJpbmciLCJmbGFncyIsImNyZWF0ZU1lcmdlZElubGluZUdyYW1tYXIiLCJjdXN0b21SdWxlcyIsImFyZ3VtZW50cyIsIm1lcmdlZCIsIl9vYmplY3RTcHJlYWQiLCJydWxlTmFtZSIsImVudHJpZXMiLCJwcm9jZXNzZWRSdWxlIiwicmVnZXhwU291cmNlIiwiaHRtbGVzY2FwZSIsInR5cGUiLCJzZXQiLCJwcmUiLCJwb3N0IiwidW5zZXQiLCJwcmVQYXR0ZXJuIiwicG9zdFBhdHRlcm4iLCJwYXR0ZXJuIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJFZGl0b3IiLCJ0ZXh0YXJlYSIsImxpbmVzIiwibGluZUVsZW1lbnRzIiwibGluZVR5cGVzIiwibGluZUNhcHR1cmVzIiwibGluZVJlcGxhY2VtZW50cyIsImxpbmtMYWJlbHMiLCJsaW5lRGlydHkiLCJsYXN0Q29tbWFuZFN0YXRlIiwiY3VzdG9tSW5saW5lR3JhbW1hciIsIm1lcmdlZElubGluZUdyYW1tYXIiLCJoYXNGb2N1cyIsImxhc3RTZWxlY3Rpb24iLCJsaXN0ZW5lcnMiLCJjaGFuZ2UiLCJzZWxlY3Rpb24iLCJkcm9wIiwidW5kb1N0YWNrIiwicmVkb1N0YWNrIiwiaXNSZXN0b3JpbmdIaXN0b3J5IiwibWF4SGlzdG9yeSIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidGFnTmFtZSIsInBhcmVudE5vZGUiLCJzdHlsZSIsImRpc3BsYXkiLCJwbGFjZWhvbGRlciIsIl9hIiwiY3JlYXRlRWRpdG9yRWxlbWVudCIsInNldENvbnRlbnQiLCJjb250ZW50IiwidmFsdWUiLCJoYW5kbGVVbmRvUmVkb0tleSIsInB1c2hIaXN0b3J5IiwicHVzaEN1cnJlbnRTdGF0ZSIsImdldENvbnRlbnQiLCJnZXRTZWxlY3Rpb24iLCJzaGlmdCIsImN1cnJlbnQiLCJwb3AiLCJwcmV2Iiwic2V0U2VsZWN0aW9uIiwibmV4dCIsImlzTWFjIiwiY3RybCIsIm1ldGFLZXkiLCJjdHJsS2V5IiwiYWx0S2V5Iiwic2hpZnRLZXkiLCJjbGFzc0xpc3QiLCJhZGQiLCJjb250ZW50RWRpdGFibGUiLCJ3aGl0ZVNwYWNlIiwid2Via2l0VXNlck1vZGlmeSIsInNldEF0dHJpYnV0ZSIsIm5leHRTaWJsaW5nIiwiaW5zZXJ0QmVmb3JlIiwiaGFuZGxlSW5wdXRFdmVudCIsImhhbmRsZUJlZm9yZUlucHV0RXZlbnQiLCJoYW5kbGVTZWxlY3Rpb25DaGFuZ2VFdmVudCIsImhhbmRsZVBhc3RlIiwiaGFuZGxlRHJvcCIsImNoaWxkTm9kZXMiLCJmaXJzdENoaWxkIiwicmVtb3ZlQ2hpbGQiLCJsaW5lTnVtIiwibGUiLCJBcnJheSIsInVwZGF0ZUZvcm1hdHRpbmciLCJ1cGRhdGVQbGFjZWhvbGRlciIsImZpcmVDaGFuZ2UiLCJyZW1vdmUiLCJ1cGRhdGVMaW5lVHlwZXMiLCJ1cGRhdGVMaW5rTGFiZWxzIiwiYXBwbHlMaW5lVHlwZXMiLCJsIiwiY2FwdHVyZSIsInN0ciIsInAxIiwicDIiLCJwYXJzZUludCIsInByb2Nlc3NJbmxpbmVTdHlsZXMiLCJjb250ZW50SFRNTCIsInJlbW92ZUF0dHJpYnV0ZSIsImRhdGFzZXQiLCJ0b1N0cmluZyIsImNvZGVCbG9ja1R5cGUiLCJjb2RlQmxvY2tTZXFMZW5ndGgiLCJodG1sQmxvY2siLCJsaW5lVHlwZSIsImxpbmVDYXB0dXJlIiwibGluZVJlcGxhY2VtZW50IiwiZXhlYyIsImdyb3VwcyIsImh0bWxCbG9ja1R5cGUiLCJoZWFkaW5nTGluZSIsImhlYWRpbmdMaW5lVHlwZSIsImdldEFuY2hvciIsIndpbmRvdyIsInN0YXJ0Tm9kZSIsImFuY2hvck5vZGUiLCJmb2N1c05vZGUiLCJvZmZzZXQiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsInJvdyIsImNvbCIsImNvbXB1dGVDb2x1bW4iLCJub2RlIiwicHJldmlvdXNTaWJsaW5nIiwiY3VycmVudExpbmVOdW1EYXRhIiwicHJldmlvdXNMaW5lTnVtRGF0YSIsIl9iIiwiY3VycmVudExpbmVOdW0iLCJwcmV2aW91c0xpbmVOdW0iLCJjb21wdXRlTm9kZUFuZE9mZnNldCIsIndpbmRvd1NlbGVjdGlvbiIsInNldEJhc2VBbmRFeHRlbnQiLCJ0ZXh0IiwiYmVnaW5uaW5nIiwiaW5zZXJ0ZWRMaW5lcyIsImxpbmVCZWZvcmUiLCJzdWJzdHIiLCJsaW5lRW5kIiwiZW5kQ29sUG9zIiwic3BsaWNlTGluZXMiLCJzdGFydENvbCIsImVuZENvbCIsImxlZnQiLCJtaWQiLCJyaWdodCIsImxpc3RlbmVyIiwibGluZXNEaXJ0eSIsImJlZm9yZUlucHV0RXZlbnQiLCJpbnB1dFR5cGUiLCJpc0JhY2tzcGFjZSIsImNsZWFyRGlydHlGbGFnIiwicHJldkxpbmVMZW4iLCJjdXJyZW50TGluZUxlbiIsInN1YnN0cmluZyIsImNvbnRpbnVhYmxlVHlwZSIsImxpbmVCZWZvcmVCcmVhayIsImxpbmVBZnRlckJyZWFrIiwicmVzdWx0Iiwic2Nyb2xsSW50b1ZpZXciLCJibG9jayIsImlubGluZSIsImlucHV0RXZlbnQiLCJmaXhOb2RlSGllcmFyY2h5IiwidXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZyIsIl9lIiwiZmlyZVNlbGVjdGlvbiIsImNsaXBib2FyZERhdGEiLCJnZXREYXRhIiwiZmlyZURyb3AiLCJkYXRhVHJhbnNmZXIiLCJvcmlnaW5hbFN0cmluZyIsInByb2Nlc3NlZCIsInN0YWNrIiwiY2FwIiwicG90ZW50aWFsTGluayIsInBvdGVudGlhbEltYWdlIiwicGFyc2VMaW5rT3JJbWFnZSIsIm91dHB1dCIsImNoYXJDb3VudCIsImRlbGltQ291bnQiLCJkZWxpbVN0cmluZyIsImN1cnJlbnREZWxpbWl0ZXIiLCJwcmVjZWRpbmciLCJmb2xsb3dpbmciLCJwdW5jdHVhdGlvbkZvbGxvd3MiLCJwdW5jdHVhdGlvblByZWNlZGVzIiwid2hpdGVzcGFjZUZvbGxvd3MiLCJ3aGl0ZXNwYWNlUHJlY2VkZXMiLCJjYW5PcGVuIiwiY2FuQ2xvc2UiLCJzdGFja1BvaW50ZXIiLCJkZWxpbWl0ZXIiLCJlbnRyeSIsImNvdW50IiwiY29uc3VtZWQiLCJub2RlVHlwZSIsIk5vZGUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsImJpbmRSaWdodCIsImNoaWxkcmVuQ29tcGxldGUiLCJydiIsIm5vZGVWYWx1ZSIsInVwZGF0ZUxpbmVDb250ZW50cyIsImxpbmVEZWx0YSIsImNoaWxkRWxlbWVudENvdW50IiwiZmlyc3RDaGFuZ2VkTGluZSIsImxhc3RDaGFuZ2VkTGluZSIsImxpbmVzVG9EZWxldGUiLCJsaW5lc1RvQWRkIiwibGluZSIsImN0Iiwic3RhcnRMaW5lIiwibGluZXNUb0luc2VydCIsImFkanVzdExpbmVFbGVtZW50cyIsImluc2VydGVkQmxhbmsiLCJpbnNlcnRlZERpcnR5Iiwic3BsaWNlIiwib3JpZ2luYWxDaGlsZHJlbiIsImZyb20iLCJyZXBsYWNlQ2hpbGQiLCJjaGlsZCIsInBhcmVudCIsIl9sZW4iLCJuZXdDaGlsZHJlbiIsIl9rZXkiLCJmb3JFYWNoIiwibmV3Q2hpbGQiLCJFTEVNRU5UX05PREUiLCJkaXZXcmFwcGVyIiwiZ3JhbmRDaGlsZHJlbiIsInNvbWUiLCJncmFuZENoaWxkIiwiaXNJbWFnZSIsInRleHRPZmZzZXQiLCJvcGVuZXIiLCJjdXJyZW50T2Zmc2V0IiwiYnJhY2tldExldmVsIiwibGlua1RleHQiLCJsaW5rUmVmIiwibGlua0RldGFpbHMiLCJ0ZXh0T3V0ZXIiLCJuZXh0Q2hhciIsInRyaW0iLCJwYXJlbnRoZXNpc0xldmVsIiwiaW5saW5lT3V0ZXIiLCJ2YWxpZCIsImxhYmVsIiwibGFiZWxDbGFzcyIsImNvbXB1dGVDb21tb25BbmNlc3RvciIsIm5vZGUxIiwibm9kZTIiLCJhbmNlc3RyeSIsInVuc2hpZnQiLCJhbmNlc3RyeTEiLCJhbmNlc3RyeTIiLCJjb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZSIsInNlbCIsImdldENvbW1hbmRTdGF0ZSIsImNtZCIsIm1hcmt1cE5vZGUiLCJsZW4iLCJsZWFkaW5nIiwidHJhaWxpbmciLCJpc0NvbGxhcHNlZCIsImFuY2VzdG9yIiwidG9nZ2xlQ29tbWFuZFN0YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0NBQ0EsQ0FBQSxJQUFJLEtBQUssR0FBRyxVQUFVLEVBQUUsRUFBRTtJQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO0VBQ3JDLENBQUM7O0NBRUQ7Q0FDQSxDQUFBLFlBQWM7Q0FDZDtJQUNFLEtBQUssQ0FBQyxPQUFPLFVBQVUsSUFBSSxRQUFRLElBQUksVUFBVSxDQUFD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Q3FJLFlBQVksQ0FBQyxJQUFJLENBQUM7Q0FFcEM7S0FDQSxJQUFJLENBQUN4QixhQUFhLEdBQUc7Q0FDbkJuSCxNQUFBQSxLQUFLLEVBQUVBLEtBQUs7Q0FDWk0sTUFBQUEsTUFBTSxFQUFFQTtNQUNUO0NBRUQsSUFBQSxJQUFJLElBQUksQ0FBQzhHLFNBQVMsQ0FBQ0UsU0FBUyxJQUFJLElBQUksQ0FBQ0YsU0FBUyxDQUFDRSxTQUFTLENBQUNySSxNQUFNLEVBQUU7T0FDL0QsSUFBSW1CLFlBQVksR0FBRyxJQUFJLENBQUN1VixlQUFlLENBQUMzVixLQUFLLEVBQUVNLE1BQU0sQ0FBQztPQUN0RCxJQUFJLElBQUksQ0FBQ3lHLGdCQUFnQixFQUFFO1NBQ3pCckksTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDb0ksZ0JBQWdCLEVBQUUzRyxZQUFZLENBQUM7Q0FDcEQsTUFBQSxDQUFDLE1BQU07U0FDTCxJQUFJLENBQUMyRyxnQkFBZ0IsR0FBR3JJLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLEVBQUUsRUFBRXlCLFlBQVksQ0FBQztDQUN6RCxNQUFBO09BQ0EsS0FBSyxJQUFJc08sUUFBUSxJQUFJLElBQUksQ0FBQ3RILFNBQVMsQ0FBQ0UsU0FBUyxFQUFFO0NBQzdDb0gsUUFBQUEsUUFBUSxDQUFDO0NBQ1AxTyxVQUFBQSxLQUFLLEVBQUVBLEtBQU07Q0FDYk0sVUFBQUEsTUFBTSxFQUFFQSxNQUFPO1dBQ2ZGLFlBQVksRUFBRSxJQUFJLENBQUMyRztDQUNwQixTQUFBLENBQUM7Q0FDSixNQUFBO0NBQ0YsSUFBQTtDQUNGLEVBQUE7Q0FDRDs7Ozs7Ozs7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNV19{"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\"><</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">></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, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\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 placeholder?: string;\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 private placeholder: string | undefined;\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.placeholder = props.placeholder !== undefined\n ? props.placeholder\n : this.textarea?.placeholder || undefined;\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 (this.placeholder) {\n this.e.setAttribute(\"data-placeholder\", this.placeholder);\n }\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.updatePlaceholder();\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 updatePlaceholder(): void {\n if (!this.placeholder || !this.e) return;\n if (this.getContent() === \"\") {\n this.e.classList.add(\"TinyMDE_empty\");\n } else {\n this.e.classList.remove(\"TinyMDE_empty\");\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 this.updatePlaceholder();\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,\n * insertLineBreak, deleteContentBackward, and deleteContentForward events.\n * These used to be handled in the input event, but that caused issues with\n * Firefox where the input event would be sometimes not be fired for these\n * input types. deleteContentBackward/Forward are also handled here to fix a\n * Firefox-specific bug (#151) where backspacing on an empty line would not\n * remove it, because Firefox only removes the <br> inside the empty <div>\n * rather than merging the divs, and fixNodeHierarchy() would then re-add the\n * <br>, resulting in a no-op.\n * @param event The input event\n * @returns nothing\n */\n private handleBeforeInputEvent(event: Event): void {\n const beforeInputEvent = event as InputEvent;\n\n // Handle cross-line delete operations (backspace at col 0, delete at end of line)\n if (\n beforeInputEvent.inputType === \"deleteContentBackward\" ||\n beforeInputEvent.inputType === \"deleteContentForward\"\n ) {\n const focus = this.getSelection();\n const anchor = this.getSelection(true);\n if (!focus || !anchor) return;\n\n const isBackspace = beforeInputEvent.inputType === \"deleteContentBackward\";\n\n // Only intercept collapsed selections at line boundaries\n if (focus.row === anchor.row && focus.col === anchor.col) {\n if (isBackspace && focus.col === 0 && focus.row > 0) {\n // Backspace at start of line: merge current line into end of previous\n event.preventDefault();\n if (!this.isRestoringHistory) this.pushHistory();\n this.clearDirtyFlag();\n const prevLineLen = this.lines[focus.row - 1].length;\n this.lines[focus.row - 1] = this.lines[focus.row - 1] + this.lines[focus.row];\n this.lineDirty[focus.row - 1] = true;\n this.spliceLines(focus.row, 1);\n this.updateFormatting();\n this.setSelection({ row: focus.row - 1, col: prevLineLen });\n this.fireChange();\n return;\n }\n if (!isBackspace && focus.col === this.lines[focus.row].length && focus.row < this.lines.length - 1) {\n // Delete at end of line: merge next line into current\n event.preventDefault();\n if (!this.isRestoringHistory) this.pushHistory();\n this.clearDirtyFlag();\n const currentLineLen = this.lines[focus.row].length;\n this.lines[focus.row] = this.lines[focus.row] + this.lines[focus.row + 1];\n this.lineDirty[focus.row] = true;\n this.spliceLines(focus.row + 1, 1);\n this.updateFormatting();\n this.setSelection({ row: focus.row, col: currentLineLen });\n this.fireChange();\n return;\n }\n }\n // For within-line deletes or non-collapsed selections, let the browser handle it\n return;\n }\n\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 public 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 public 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).classList && (node as HTMLElement).classList.contains(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).classList &&\n (node.nextSibling as HTMLElement).classList.contains(\"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).classList &&\n ((ancestor as HTMLElement).classList.contains(\"TMInlineFormatted\") ||\n (ancestor as HTMLElement).classList.contains(\"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","placeholder","_a","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","setAttribute","nextSibling","insertBefore","handleInputEvent","handleBeforeInputEvent","handleSelectionChangeEvent","handlePaste","handleDrop","childNodes","firstChild","removeChild","lineNum","le","Array","updateFormatting","updatePlaceholder","fireChange","remove","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","previousLineNumData","_b","currentLineNum","previousLineNum","computeNodeAndOffset","windowSelection","setBaseAndExtent","text","beginning","insertedLines","lineBefore","substr","lineEnd","endColPos","spliceLines","startCol","endCol","left","mid","right","listener","linesDirty","beforeInputEvent","inputType","isBackspace","clearDirtyFlag","prevLineLen","currentLineLen","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","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]}
|
|
5819
|
+
//# 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+YCxcbiAgaDE6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMyAyczAtMSAxLTFoMWMxIDAgMSAxIDEgMXY2aDZWMnMwLTEgMS0xaDFjMSAwIDEgMSAxIDF2MTRzMCAxLTEgMWgtMWMtMSAwLTEtMS0xLTF2LTZINnY2czAgMS0xIDFINGMtMSAwLTEtMS0xLTF6XCIvPjwvc3ZnPmAsXG4gIGgyOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTQgMnMwLTEgMS0xIDEgMSAxIDF2NmMxLTEgMi0xIDQtMSAzIDAgNCAyIDQgNHY1czAgMS0xIDEtMS0xLTEtMXYtNWMwLTEuMDk0LTEtMi0yLTItMiAwLTMgMC00IDJ2NXMwIDEtMSAxLTEtMS0xLTF6XCIvPjwvc3ZnPmAsXG4gIGhyOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cmVjdCByeT1cIjFcIiB5PVwiOFwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjE4XCIvPjwvc3ZnPmAsXG4gIGltYWdlOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTEgMnYxNGgxNlYySDF6bTIgMmgxMnY3bC0zLTMtNCA0LTItMi0zIDNWNHpcIi8+PGNpcmNsZSByPVwiMS41XCIgY3k9XCI2LjVcIiBjeD1cIjUuNVwiLz48L3N2Zz5gLFxuICBpdGFsaWM6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNOSAyYTEgMSAwIDAwMCAyTDcgMTRhMSAxIDAgMTAwIDJoMmExIDEgMCAwMDAtMmwyLTEwYTEgMSAwIDEwMC0yelwiLz48L3N2Zz5gLFxuICBsaW5rOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTkuMDcgNS4xOGEzLjkgMy45IDAgMDAtMS41Mi40M0M2LjMxIDYuMjIgNS4zIDcuMjkgNC4zIDguMjljLTEgMS0yLjA3IDIuMDItMi42OCAzLjI2LS4zMS42Mi0uNSAxLjMzLS40MSAyLjA3LjA5Ljc1LjQ4IDEuNDcgMS4xIDIuMDkuNjEuNjEgMS4zMyAxIDIuMDggMS4xLjc0LjA5IDEuNDUtLjEgMi4wNy0uNDIgMS4yNC0uNjEgMi4yNi0xLjY4IDMuMjYtMi42OC40Ni0uNDcuOTQtLjk0IDEuMzktMS40NGwtLjQzLjI2Yy0uNjguMzQtMS40OS41Ni0yLjM2LjQ2LS4yLS4wMy0uNC0uMDgtLjYtLjE0LS43OS43Ni0xLjU1IDEuNDUtMi4xNiAxLjc2LS4zOC4xOS0uNjcuMjQtLjkyLjIxLS4yNi0uMDMtLjU0LS4xNC0uOTItLjUzLS4zOS0uMzgtLjUtLjY2LS41My0uOTEtLjAzLS4yNi4wMi0uNTUuMjEtLjkzLjM5LS43NiAxLjMyLTEuNzQgMi4zMi0yLjc0IDEtMSAxLjk4LTEuOTMgMi43NC0yLjMyLjM4LS4xOS42Ny0uMjQuOTMtLjIxLjI1LjAzLjUzLjE0LjkxLjUzLjM5LjM4LjUuNjYuNTMuOTJ2LjA2bDEuMTItMS4wNi40NC0uNDdjLS4xOC0uMy0uNC0uNi0uNjctLjg3LS42Mi0uNjEtMS4zNC0xLTIuMDktMS4xYTMuMDggMy4wOCAwIDAwLS41NS0uMDF6XCIvPjxwYXRoIGQ9XCJNMTMuMDcuODZhMy45IDMuOSAwIDAwLTEuNTIuNDNjLTEuMjQuNjItMi4yNiAxLjY5LTMuMjYgMi42OS0uNDYuNDctLjk0Ljk0LTEuMzkgMS40My4xNS0uMDguMjgtLjE4LjQzLS4yNWE0LjQgNC40IDAgMDEyLjM2LS40NmMuMi4wMi40LjA3LjYuMTQuNzktLjc3IDEuNTUtMS40NiAyLjE2LTEuNzYuMzgtLjE5LjY3LS4yNS45My0uMjEuMjUuMDMuNTMuMTQuOTEuNTIuMzkuMzguNS42Ni41My45Mi4wMy4yNi0uMDIuNTUtLjIxLjkzLS4zOS43Ni0xLjMyIDEuNzQtMi4zMiAyLjc0LTEgMS0xLjk4IDEuOTMtMi43NCAyLjMxLS4zOC4yLS42Ny4yNS0uOTMuMjItLjI1LS4wNC0uNTMtLjE1LS45MS0uNTMtLjM5LS4zOC0uNS0uNjYtLjUzLS45MlY5Yy0uMzYuMzMtLjczLjY3LTEuMTIgMS4wNmwtLjQzLjQ2Yy4xNy4zLjQuNi42Ni44Ny42Mi42MiAxLjM0IDEgMi4wOCAxLjEuNzUuMSAxLjQ2LS4xIDIuMDgtLjQxIDEuMjQtLjYyIDIuMjYtMS42OSAzLjI2LTIuNjlzMi4wNy0yLjAyIDIuNjgtMy4yNmMuMzEtLjYyLjUtMS4zMi40MS0yLjA3YTMuNjMgMy42MyAwIDAwLTEuMS0yLjA4Yy0uNjEtLjYyLTEuMzMtMS0yLjA3LTEuMWEzLjA4IDMuMDggMCAwMC0uNTYtLjAyelwiLz48L3N2Zz5gLFxuICBvbDogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0xLjUgN2EuNS41IDAgMTAwIDFoMWEuNS41IDAgMDEuNS41YzAgLjE2NC0uMDguMzEtLjE0LjM1NWwtMS42NTUgMS4yNUEuNDkyLjQ5MiAwIDAwMSAxMC41YS41LjUgMCAwMC41LjVoMmEuNS41IDAgMDAwLTFIM2wuMzk4LS4yOTlBMS41IDEuNSAwIDAwMi41IDd6XCIvPjxwYXRoIGQ9XCJNMS41IDEyYy0uNjY3IDAtLjY2NyAxIDAgMWgxLjI1Yy4zMzMgMCAuMzMzLjUgMCAuNUgyLjVjLS42NjcgMC0uNjY3IDEgMCAxaC4yNWMuMzMzIDAgLjMzMy41IDAgLjVIMS41Yy0uNjY3IDAtLjY2NyAxIDAgMWgxYy4zOTggMCAuNzgtLjEzMSAxLjA2LS4zNjUuMjgyLS4yMzUuNDQtLjU1NC40NC0uODg1YTEuMTIxIDEuMTIxIDAgMDAtLjMwMy0uNzVjLjE5MS0uMjA0LjMtLjQ3LjMwMy0uNzUgMC0uMzMyLS4xNTgtLjY1MS0uNDQtLjg4NS0uMy0uMjQxLS42NzUtLjM3LTEuMDYtLjM2NXpcIi8+PHJlY3QgeT1cIjEzXCIgeD1cIjZcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxMlwiIHJ5PVwiMVwiLz48cmVjdCByeT1cIjFcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMlwiIHg9XCI2XCIgeT1cIjhcIi8+PHJlY3QgeT1cIjNcIiB4PVwiNlwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjEyXCIgcnk9XCIxXCIvPjxwYXRoIGQ9XCJNMS41IDJhLjUuNSAwIDEwMCAxSDJ2MmgtLjVhLjUuNSAwIDEwMCAxaDJhLjUuNSAwIDEwMC0xSDNWMi41YzAtLjI3Ny0uMjIzLS41LS41LS41elwiLz48L3N2Zz5gLFxuICByZWRvOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTSA3LjI2OTUzMDgsMi43MDUwNzgxIEMgOC4xMTI4NzU1LDIuNzA4MTU4MSA4Ljk1Mjk4OTUsMi44NzEyMTU2IDkuNzMwNDY5LDMuMTM0NzY1NiAxMS40MDg4NzQsMy43MDM3MTIxIDEyLjkwMTQyLDQuNjg0NzEwNCAxNCw1LjYzNjcxODggViA0IGggMiBWIDkgSCAxMSBWIDcgaCAxLjUwOTc2NSBDIDExLjU5MDc1LDYuMjQ4NTE3MyAxMC4zNDAyMDgsNS40NTM4MDggOS4wODc4OTA0LDUuMDI5Mjk2OSA3LjQzMDkzOTgsNC40Njc2MjMxIDUuOTQ1MzQ1OCw0LjQ2ODcxNyA0LjcwNzAzMDgsNS43MDcwMzEyIGMgLTEuMjI1MDE0LDEuMjI1MDE0MiAtMS40MDk3NjksMi43MjA2OTUzIC0wLjc3OTI5Nyw0LjI5Njg3NDggMC42MzA0NzIsMS41NzYxOCAyLjE2NzQ3NSwzLjE1ODAwNiA0LjQ0MzM1OTgsNC4wNjgzNiBsIC0wLjc0MjE4NzgsMS44NTU0NjggYyAtMi43MjQxMTUsLTEuMDg5NjQ2IC00LjY4NzExMiwtMy4wMDc4MiAtNS41NTY2NCwtNS4xODE2NCAtMC44Njk1MjgsLTIuMTczODIwNiAtMC41NTQyODMsLTQuNjc4MTM5MyAxLjIyMDcwMywtNi40NTMxMjUyIDAuOTIzODU3LC0wLjkyMzg1NjggMi4wMTUzODgsLTEuMzg4ODI4IDMuMTM0NzY1LC0xLjUzNTE1NjMgMC4yNzk4NDUsLTAuMDM2NTgyIDAuNTYwNjgyLC0wLjA1Mzc2MSAwLjg0MTc5NywtMC4wNTI3MzQgelwiIC8+PC9zdmc+YCxcbiAgc3RyaWtldGhyb3VnaDogYDxzdmcgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCI+PHBhdGggZD1cIk0xMCAyQzYgMiA0IDQgNCA2YzAgLjMzOC4wOC42NzIuMTkzIDFoMi4zNEM2LjExMyA2LjYyOSA2IDYuMjk1IDYgNmMwLS4zMzQuMTE3LS43MjUuNjkxLTEuMTU0QzcuMjY1IDQuNDE2IDguMzMxIDQgMTAgNGgzYTEgMSAwIDAwMC0yem0xLjQ3NyA5Yy40MTMuMzY4LjUyMy43MDYuNTIzIDEgMCAuMzM0LS4xMjcuNzEyLS43MDEgMS4xNDMtLjU3NS40My0xLjYzMi44NS0zLjI5OS44NTdsLTEuMDA2LjAwN1YxNEg1YTEgMSAwIDAwMCAyaDNjNCAwIDYtMiA2LTQgMC0uMzM4LS4wODEtLjY3Mi0uMTk1LTF6XCIvPjxyZWN0IHJ5PVwiMVwiIHk9XCI4XCIgeD1cIjFcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxNlwiLz48L3N2Zz5gLFxuICB1bDogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PGNpcmNsZSBjeD1cIjJcIiBjeT1cIjlcIiByPVwiMlwiLz48Y2lyY2xlIGN5PVwiNFwiIGN4PVwiMlwiIHI9XCIyXCIvPjxyZWN0IHk9XCIzXCIgeD1cIjZcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxMlwiIHJ5PVwiMVwiLz48Y2lyY2xlIGN4PVwiMlwiIGN5PVwiMTRcIiByPVwiMlwiLz48cmVjdCByeT1cIjFcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMlwiIHg9XCI2XCIgeT1cIjhcIi8+PHJlY3QgeT1cIjEzXCIgeD1cIjZcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxMlwiIHJ5PVwiMVwiLz48L3N2Zz5gLFxuICB1bmRvOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTSAxMC43MzA0NjkgMi43MDUwNzgxIEMgOS44ODcxMjQzIDIuNzA4MTU5NCA5LjA0NzAxMDMgMi44NzEyMTU2IDguMjY5NTMxMiAzLjEzNDc2NTYgQyA2LjU5MTEyNTYgMy43MDM3MTIxIDUuMDk4NTc5NyA0LjY4NDcxMDQgNCA1LjYzNjcxODggTCA0IDQgTCAyIDQgTCAyIDkgTCA3IDkgTCA3IDcgTCA1LjQ5MDIzNDQgNyBDIDYuNDA5MjQ5OSA2LjI0ODUxNzMgNy42NTk3OTE0IDUuNDUzODA4IDguOTEyMTA5NCA1LjAyOTI5NjkgQyAxMC41NjkwNiA0LjQ2NzYyMzEgMTIuMDU0NjU0IDQuNDY4NzE3IDEzLjI5Mjk2OSA1LjcwNzAzMTIgQyAxNC41MTc5ODMgNi45MzIwNDU0IDE0LjcwMjczOCA4LjQyNzcyNjUgMTQuMDcyMjY2IDEwLjAwMzkwNiBDIDEzLjQ0MTc5NCAxMS41ODAwODYgMTEuOTA0NzkxIDEzLjE2MTkxMiA5LjYyODkwNjIgMTQuMDcyMjY2IEwgMTAuMzcxMDk0IDE1LjkyNzczNCBDIDEzLjA5NTIwOSAxNC44MzgwODggMTUuMDU4MjA2IDEyLjkxOTkxNCAxNS45Mjc3MzQgMTAuNzQ2MDk0IEMgMTYuNzk3MjYyIDguNTcyMjczNCAxNi40ODIwMTcgNi4wNjc5NTQ3IDE0LjcwNzAzMSA0LjI5Mjk2ODggQyAxMy43ODMxNzQgMy4zNjkxMTIgMTIuNjkxNjQzIDIuOTA0MTQwOCAxMS41NzIyNjYgMi43NTc4MTI1IEMgMTEuMjkyNDIxIDIuNzIxMjMwNCAxMS4wMTE1ODQgMi43MDQwNTEgMTAuNzMwNDY5IDIuNzA1MDc4MSB6IFwiIC8+PC9zdmc+XG5gXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzdmc7IiwiaW1wb3J0IHN2ZyBmcm9tIFwiLi9zdmcvc3ZnXCI7XG5pbXBvcnQgeyBFZGl0b3IsIFBvc2l0aW9uLCBTZWxlY3Rpb25FdmVudCB9IGZyb20gXCIuL1RpbnlNREVcIjtcblxuY29uc3QgaXNNYWNMaWtlID0gLyhNYWN8aVBob25lfGlQb2R8aVBhZCkvaS50ZXN0KFxuICB0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiID8gbmF2aWdhdG9yLnBsYXRmb3JtIDogXCJcIlxuKTtcblxuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kQWN0aW9uIHtcbiAgKGVkaXRvcjogRWRpdG9yKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kRW5hYmxlZCB7XG4gIChlZGl0b3I6IEVkaXRvciwgZm9jdXM/OiBQb3NpdGlvbiwgYW5jaG9yPzogUG9zaXRpb24pOiBib29sZWFuIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kRGVmaW5pdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgYWN0aW9uPzogc3RyaW5nIHwgQ29tbWFuZEFjdGlvbjtcbiAgaW5uZXJIVE1MPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgaG90a2V5Pzogc3RyaW5nO1xuICBlbmFibGVkPzogQ29tbWFuZEVuYWJsZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEJhclByb3BzIHtcbiAgZWxlbWVudD86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICBlZGl0b3I/OiBFZGl0b3I7XG4gIGNvbW1hbmRzPzogKHN0cmluZyB8IENvbW1hbmREZWZpbml0aW9uKVtdO1xufVxuXG5pbnRlcmZhY2UgSG90a2V5IHtcbiAgbW9kaWZpZXJzOiBzdHJpbmdbXTtcbiAgY29tbWFuZDogc3RyaW5nO1xuICBrZXk/OiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IERlZmF1bHRDb21tYW5kczogUmVjb3JkPHN0cmluZywgQ29tbWFuZERlZmluaXRpb24+ID0ge1xuICBib2xkOiB7XG4gICAgbmFtZTogXCJib2xkXCIsXG4gICAgYWN0aW9uOiBcImJvbGRcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5ib2xkLFxuICAgIHRpdGxlOiBcIkJvbGRcIixcbiAgICBob3RrZXk6IFwiTW9kLUJcIixcbiAgfSxcbiAgaXRhbGljOiB7XG4gICAgbmFtZTogXCJpdGFsaWNcIixcbiAgICBhY3Rpb246IFwiaXRhbGljXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuaXRhbGljLFxuICAgIHRpdGxlOiBcIkl0YWxpY1wiLFxuICAgIGhvdGtleTogXCJNb2QtSVwiLFxuICB9LFxuICBzdHJpa2V0aHJvdWdoOiB7XG4gICAgbmFtZTogXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgYWN0aW9uOiBcInN0cmlrZXRocm91Z2hcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5zdHJpa2V0aHJvdWdoLFxuICAgIHRpdGxlOiBcIlN0cmlrZXRocm91Z2hcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC01XCIsXG4gIH0sXG4gIGNvZGU6IHtcbiAgICBuYW1lOiBcImNvZGVcIixcbiAgICBhY3Rpb246IFwiY29kZVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmNvZGUsXG4gICAgdGl0bGU6IFwiRm9ybWF0IGFzIGNvZGVcIixcbiAgfSxcbiAgaDE6IHtcbiAgICBuYW1lOiBcImgxXCIsXG4gICAgYWN0aW9uOiBcImgxXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuaDEsXG4gICAgdGl0bGU6IFwiTGV2ZWwgMSBoZWFkaW5nXCIsXG4gICAgaG90a2V5OiBcIk1vZC1TaGlmdC0xXCIsXG4gIH0sXG4gIGgyOiB7XG4gICAgbmFtZTogXCJoMlwiLFxuICAgIGFjdGlvbjogXCJoMlwiLFxuICAgIGlubmVySFRNTDogc3ZnLmgyLFxuICAgIHRpdGxlOiBcIkxldmVsIDIgaGVhZGluZ1wiLFxuICAgIGhvdGtleTogXCJNb2QtU2hpZnQtMlwiLFxuICB9LFxuICB1bDoge1xuICAgIG5hbWU6IFwidWxcIixcbiAgICBhY3Rpb246IFwidWxcIixcbiAgICBpbm5lckhUTUw6IHN2Zy51bCxcbiAgICB0aXRsZTogXCJCdWxsZXRlZCBsaXN0XCIsXG4gIH0sXG4gIG9sOiB7XG4gICAgbmFtZTogXCJvbFwiLFxuICAgIGFjdGlvbjogXCJvbFwiLFxuICAgIGlubmVySFRNTDogc3ZnLm9sLFxuICAgIHRpdGxlOiBcIk51bWJlcmVkIGxpc3RcIixcbiAgfSxcbiAgYmxvY2txdW90ZToge1xuICAgIG5hbWU6IFwiYmxvY2txdW90ZVwiLFxuICAgIGFjdGlvbjogXCJibG9ja3F1b3RlXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuYmxvY2txdW90ZSxcbiAgICB0aXRsZTogXCJRdW90ZVwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LVFcIixcbiAgfSxcbiAgaW5zZXJ0TGluazoge1xuICAgIG5hbWU6IFwiaW5zZXJ0TGlua1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkgZWRpdG9yLndyYXBTZWxlY3Rpb24oXCJbXCIsIFwiXSgpXCIpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogKGVkaXRvcjogRWRpdG9yKSA9PlxuICAgICAgZWRpdG9yLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5saW5rLFxuICAgIHRpdGxlOiBcIkluc2VydCBsaW5rXCIsXG4gICAgaG90a2V5OiBcIk1vZC1LXCIsXG4gIH0sXG4gIGluc2VydEltYWdlOiB7XG4gICAgbmFtZTogXCJpbnNlcnRJbWFnZVwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkgZWRpdG9yLndyYXBTZWxlY3Rpb24oXCIhW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT5cbiAgICAgIGVkaXRvci5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkgPyBmYWxzZSA6IG51bGwsXG4gICAgaW5uZXJIVE1MOiBzdmcuaW1hZ2UsXG4gICAgdGl0bGU6IFwiSW5zZXJ0IGltYWdlXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtSVwiLFxuICB9LFxuICBocjoge1xuICAgIG5hbWU6IFwiaHJcIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4gZWRpdG9yLnBhc3RlKFwiXFxuKioqXFxuXCIpLFxuICAgIGVuYWJsZWQ6ICgpID0+IGZhbHNlLFxuICAgIGlubmVySFRNTDogc3ZnLmhyLFxuICAgIHRpdGxlOiBcIkluc2VydCBob3Jpem9udGFsIGxpbmVcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1MXCIsXG4gIH0sXG4gIHVuZG86IHtcbiAgICBuYW1lOiBcInVuZG9cIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4gZWRpdG9yLnVuZG8oKSxcbiAgICBlbmFibGVkOiAoZWRpdG9yOiBFZGl0b3IpID0+IChlZGl0b3IuY2FuVW5kbyA/IGZhbHNlIDogbnVsbCksXG4gICAgaW5uZXJIVE1MOiBzdmcudW5kbyxcbiAgICB0aXRsZTogXCJVbmRvXCIsXG4gIH0sXG4gIHJlZG86IHtcbiAgICBuYW1lOiBcInJlZG9cIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4gZWRpdG9yLnJlZG8oKSxcbiAgICBlbmFibGVkOiAoZWRpdG9yOiBFZGl0b3IpID0+IChlZGl0b3IuY2FuUmVkbyA/IGZhbHNlIDogbnVsbCksXG4gICAgaW5uZXJIVE1MOiBzdmcucmVkbyxcbiAgICB0aXRsZTogXCJSZWRvXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgY2xhc3MgQ29tbWFuZEJhciB7XG4gIHB1YmxpYyBlOiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgZWRpdG9yOiBFZGl0b3IgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBDb21tYW5kRGVmaW5pdGlvbj4gPSB7fTtcbiAgcHVibGljIGJ1dHRvbnM6IFJlY29yZDxzdHJpbmcsIEhUTUxEaXZFbGVtZW50PiA9IHt9O1xuICBwdWJsaWMgc3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiA9IHt9O1xuICBwcml2YXRlIGhvdGtleXM6IEhvdGtleVtdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IENvbW1hbmRCYXJQcm9wcykge1xuICAgIHRoaXMuZSA9IG51bGw7XG4gICAgdGhpcy5lZGl0b3IgPSBudWxsO1xuICAgIHRoaXMuY29tbWFuZHMgPSB7fTtcbiAgICB0aGlzLmJ1dHRvbnMgPSB7fTtcbiAgICB0aGlzLnN0YXRlID0ge307XG4gICAgdGhpcy5ob3RrZXlzID0gW107XG5cbiAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIHByb3BzLmVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5lbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gcHJvcHMuZWxlbWVudDtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuYm9keTtcbiAgICB9XG5cbiAgICB0aGlzLmNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50KFxuICAgICAgZWxlbWVudCxcbiAgICAgIHByb3BzLmNvbW1hbmRzIHx8IFtcbiAgICAgICAgXCJib2xkXCIsXG4gICAgICAgIFwiaXRhbGljXCIsXG4gICAgICAgIFwic3RyaWtldGhyb3VnaFwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJjb2RlXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImgxXCIsXG4gICAgICAgIFwiaDJcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwidWxcIixcbiAgICAgICAgXCJvbFwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJibG9ja3F1b3RlXCIsXG4gICAgICAgIFwiaHJcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwidW5kb1wiLFxuICAgICAgICBcInJlZG9cIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwiaW5zZXJ0TGlua1wiLFxuICAgICAgICBcImluc2VydEltYWdlXCIsXG4gICAgICBdXG4gICAgKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4gdGhpcy5oYW5kbGVLZXlkb3duKGUpKTtcbiAgICBpZiAocHJvcHMuZWRpdG9yKSB0aGlzLnNldEVkaXRvcihwcm9wcy5lZGl0b3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb21tYW5kQmFyRWxlbWVudChwYXJlbnRFbGVtZW50OiBIVE1MRWxlbWVudCwgY29tbWFuZHM6IChzdHJpbmcgfCBDb21tYW5kRGVmaW5pdGlvbilbXSk6IHZvaWQge1xuICAgIHRoaXMuZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5lLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQmFyXCI7XG5cbiAgICBmb3IgKGxldCBjb21tYW5kIG9mIGNvbW1hbmRzKSB7XG4gICAgICBpZiAoY29tbWFuZCA9PT0gXCJ8XCIpIHtcbiAgICAgICAgbGV0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZWwuY2xhc3NOYW1lID0gXCJUTUNvbW1hbmREaXZpZGVyXCI7XG4gICAgICAgIHRoaXMuZS5hcHBlbmRDaGlsZChlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgY29tbWFuZE5hbWU6IHN0cmluZztcbiAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgaWYgKERlZmF1bHRDb21tYW5kc1tjb21tYW5kXSkge1xuICAgICAgICAgICAgY29tbWFuZE5hbWUgPSBjb21tYW5kO1xuICAgICAgICAgICAgdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0gPSBEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbW1hbmQgPT09IFwib2JqZWN0XCIgJiYgY29tbWFuZC5uYW1lKSB7XG4gICAgICAgICAgY29tbWFuZE5hbWUgPSBjb21tYW5kLm5hbWU7XG4gICAgICAgICAgdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0gPSB7fSBhcyBDb21tYW5kRGVmaW5pdGlvbjtcbiAgICAgICAgICBpZiAoRGVmYXVsdENvbW1hbmRzW2NvbW1hbmROYW1lXSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSwgRGVmYXVsdENvbW1hbmRzW2NvbW1hbmROYW1lXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0sIGNvbW1hbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0udGl0bGUgfHwgY29tbWFuZE5hbWU7XG5cbiAgICAgICAgaWYgKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmhvdGtleSkge1xuICAgICAgICAgIGNvbnN0IGtleXMgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5ob3RrZXkhLnNwbGl0KFwiLVwiKTtcbiAgICAgICAgICBsZXQgbW9kaWZpZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGxldCBtb2RpZmllcmV4cGxhbmF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIFxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5c1tpXSkge1xuICAgICAgICAgICAgICBjYXNlIFwiQ3RybFwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwiY3RybEtleVwiKTtcbiAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJDdHJsXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQ21kXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKMmFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIkFsdFwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwiYWx0S2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIkFsdFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIk9wdGlvblwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwiYWx0S2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKMpVwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIldpblwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwibWV0YUtleVwiKTtcbiAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLiip4gV2luXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU2hpZnRcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcInNoaWZ0S2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKHp1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIk1vZFwiOlxuICAgICAgICAgICAgICAgIGlmIChpc01hY0xpa2UpIHtcbiAgICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwibWV0YUtleVwiKTtcbiAgICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKMmFwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJjdHJsS2V5XCIpO1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwiQ3RybFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJNb2QyXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFjTGlrZSkgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oylXCIpO1xuICAgICAgICAgICAgICAgIGVsc2UgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwiQWx0XCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goa2V5c1trZXlzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICBsZXQgaG90a2V5OiBIb3RrZXkgPSB7XG4gICAgICAgICAgICBtb2RpZmllcnM6IG1vZGlmaWVycyxcbiAgICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hbmROYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgbGFzdEtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdEtleS5tYXRjaCgvXlswLTldJC8pKSB7XG4gICAgICAgICAgICBob3RrZXkuY29kZSA9IGBEaWdpdCR7bGFzdEtleX1gO1xuICAgICAgICAgIH0gZWxzZSBpZiAobGFzdEtleS5tYXRjaCgvXlthLXpBLVpdJC8pKSB7XG4gICAgICAgICAgICBob3RrZXkuY29kZSA9IGBLZXkke2xhc3RLZXkudG9VcHBlckNhc2UoKX1gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob3RrZXkua2V5ID0gbGFzdEtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhvdGtleXMucHVzaChob3RrZXkpO1xuICAgICAgICAgIHRpdGxlID0gdGl0bGUuY29uY2F0KGAgKCR7bW9kaWZpZXJleHBsYW5hdGlvbi5qb2luKFwiK1wiKX0pYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fRGlzYWJsZWRcIjtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS50aXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmlubmVySFRNTCA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmlubmVySFRNTCB8fCBcIj9cIjtcblxuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgKGUpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVDbGljayhjb21tYW5kTmFtZSwgZSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNsaWNrKGNvbW1hbmROYW1lOiBzdHJpbmcsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gRm9jdXMgdGhlIGVkaXRvciBpZiBpdCdzIG5vdCBhbHJlYWR5IGZvY3VzZWRcbiAgICBpZiAodGhpcy5lZGl0b3IuZSkge1xuICAgICAgY29uc3QgZWRpdG9ySGFkRm9jdXMgPSB0aGlzLmVkaXRvci5lLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgdGhpcy5lZGl0b3IuZS5mb2N1cygpO1xuICAgICAgLy8gT25seSByZXN0b3JlIHRoZSBsYXN0IHNlbGVjdGlvbiBpZiB0aGUgZWRpdG9yIHdhcyBub3QgZm9jdXNlZCBiZWZvcmVcbiAgICAgIGlmICghZWRpdG9ySGFkRm9jdXMpIHtcbiAgICAgICAgdGhpcy5lZGl0b3IucmVzdG9yZUxhc3RTZWxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmFjdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKHRoaXMuc3RhdGVbY29tbWFuZE5hbWVdID09PSBmYWxzZSlcbiAgICAgICAgKHRoaXMuZWRpdG9yIGFzIGFueSkuc2V0Q29tbWFuZFN0YXRlKGNvbW1hbmROYW1lLCB0cnVlKTtcbiAgICAgIGVsc2UgKHRoaXMuZWRpdG9yIGFzIGFueSkuc2V0Q29tbWFuZFN0YXRlKGNvbW1hbmROYW1lLCBmYWxzZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uYWN0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICh0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5hY3Rpb24gYXMgQ29tbWFuZEFjdGlvbikodGhpcy5lZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRFZGl0b3IoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvblwiLCAoZSkgPT4gdGhpcy5oYW5kbGVTZWxlY3Rpb24oZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTZWxlY3Rpb24oZXZlbnQ6IFNlbGVjdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmNvbW1hbmRTdGF0ZSkge1xuICAgICAgZm9yIChsZXQgY29tbWFuZCBpbiB0aGlzLmNvbW1hbmRzKSB7XG4gICAgICAgIGlmIChldmVudC5jb21tYW5kU3RhdGVbY29tbWFuZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0aGlzLmNvbW1hbmRzW2NvbW1hbmRdLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVbY29tbWFuZF0gPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmRdLmVuYWJsZWQhKFxuICAgICAgICAgICAgICB0aGlzLmVkaXRvciEsXG4gICAgICAgICAgICAgIGV2ZW50LmZvY3VzLFxuICAgICAgICAgICAgICBldmVudC5hbmNob3JcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVbY29tbWFuZF0gPSBldmVudC5mb2N1cyA/IGZhbHNlIDogbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IGV2ZW50LmNvbW1hbmRTdGF0ZVtjb21tYW5kXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlW2NvbW1hbmRdID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmRdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9BY3RpdmVcIjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlW2NvbW1hbmRdID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fSW5hY3RpdmVcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZF0uY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCdXR0b24gVE1Db21tYW5kQnV0dG9uX0Rpc2FibGVkXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBPbmx5IGhhbmRsZSBrZXlib2FyZCBzaG9ydGN1dHMgaWYgdGhpcyBlZGl0b3IgaXMgY3VycmVudGx5IGZvY3VzZWRcbiAgICBpZiAoIXRoaXMuZWRpdG9yIHx8ICF0aGlzLmVkaXRvci5lKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmVkaXRvci5lLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSByZXR1cm47XG5cbiAgICBvdXRlcjogZm9yIChsZXQgaG90a2V5IG9mIHRoaXMuaG90a2V5cykge1xuICAgICAgaWYgKFxuICAgICAgICAoaG90a2V5LmtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gaG90a2V5LmtleSkgfHxcbiAgICAgICAgKGhvdGtleS5jb2RlICYmIGV2ZW50LmNvZGUgPT09IGhvdGtleS5jb2RlKVxuICAgICAgKSB7XG4gICAgICAgIGZvciAobGV0IG1vZGlmaWVyIG9mIGhvdGtleS5tb2RpZmllcnMpIHtcbiAgICAgICAgICBpZiAoIShldmVudCBhcyBhbnkpW21vZGlmaWVyXSkgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVDbGljayhob3RrZXkuY29tbWFuZCwgZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1hbmRCYXI7IiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQsIGVzL25vLXJlZmxlY3QgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgUmVmbGVjdCA9PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmFwcGx5IHx8IChOQVRJVkVfQklORCA/IGNhbGwuYmluZChhcHBseSkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgRk9SQ0VELCBTSEFNKSB7XG4gIHZhciBTWU1CT0wgPSB3ZWxsS25vd25TeW1ib2woS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT09IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuXG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gV2UgY2FuJ3QgdXNlIHJlYWwgcmVnZXggaGVyZSBzaW5jZSBpdCBjYXVzZXMgZGVvcHRpbWl6YXRpb25cbiAgICAgIC8vIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGluIFY4XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzA2XG4gICAgICByZSA9IHt9O1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgICAgcmUuZmxhZ3MgPSAnJztcbiAgICAgIHJlW1NZTUJPTF0gPSAvLi9bU1lNQk9MXTtcbiAgICB9XG5cbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgICAgZXhlY0NhbGxlZCA9IHRydWU7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KTtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICBGT1JDRURcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBtZXRob2RzID0gZXhlYyhTWU1CT0wsICcnW0tFWV0sIGZ1bmN0aW9uIChuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgdmFyICRleGVjID0gcmVnZXhwLmV4ZWM7XG4gICAgICBpZiAoJGV4ZWMgPT09IHJlZ2V4cEV4ZWMgfHwgJGV4ZWMgPT09IFJlZ0V4cFByb3RvdHlwZS5leGVjKSB7XG4gICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBjYWxsKG5hdGl2ZVJlZ0V4cE1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IGNhbGwobmF0aXZlTWV0aG9kLCBzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgfSk7XG5cbiAgICBkZWZpbmVCdWlsdEluKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgbWV0aG9kc1swXSk7XG4gICAgZGVmaW5lQnVpbHRJbihSZWdFeHBQcm90b3R5cGUsIFNZTUJPTCwgbWV0aG9kc1sxXSk7XG4gIH1cblxuICBpZiAoU0hBTSkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFJlZ0V4cFByb3RvdHlwZVtTWU1CT0xdLCAnc2hhbScsIHRydWUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyT3JJbmZpbml0eShwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBjaGFyQXQoUywgcG9zaXRpb24pXG4gICAgICAgICAgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBzdHJpbmdTbGljZShTLCBwb3NpdGlvbiwgcG9zaXRpb24gKyAyKVxuICAgICAgICAgIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBjaGFyQXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmJ2BdfFxcZHsxLDJ9fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJidgXXxcXGR7MSwyfSkvZztcblxuLy8gYEdldFN1YnN0aXR1dGlvbmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICB9XG4gIHJldHVybiByZXBsYWNlKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgdmFyIGNhcHR1cmU7XG4gICAgc3dpdGNoIChjaGFyQXQoY2gsIDApKSB7XG4gICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyaW5nU2xpY2Uoc3RyLCAwLCBwb3NpdGlvbik7XG4gICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyaW5nU2xpY2Uoc3RyLCB0YWlsUG9zKTtcbiAgICAgIGNhc2UgJzwnOlxuICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tzdHJpbmdTbGljZShjaCwgMSwgLTEpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaGFyQXQoY2gsIDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2hhckF0KGNoLCAxKTtcbiAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgIH1cbiAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAoaXNDYWxsYWJsZShleGVjKSkge1xuICAgIHZhciByZXN1bHQgPSBjYWxsKGV4ZWMsIFIsIFMpO1xuICAgIGlmIChyZXN1bHQgIT09IG51bGwpIGFuT2JqZWN0KHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSA9PT0gJ1JlZ0V4cCcpIHJldHVybiBjYWxsKHJlZ2V4cEV4ZWMsIFIsIFMpO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgZ2V0U3Vic3RpdHV0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24nKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBSRVBMQUNFID0gd2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIElFIDw9IDExIHJlcGxhY2VzICQwIHdpdGggdGhlIHdob2xlIG1hdGNoLCBhcyBpZiBpdCB3YXMgJCZcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMjQ2NjYvZ2V0dGluZy1pZS10by1yZXBsYWNlLWEtcmVnZXgtd2l0aC10aGUtbGl0ZXJhbC1zdHJpbmctMFxudmFyIFJFUExBQ0VfS0VFUFNfJDAgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3ByZWZlci1lc2NhcGUtcmVwbGFjZW1lbnQtZG9sbGFyLWNoYXIgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuICdhJy5yZXBsYWNlKC8uLywgJyQwJykgPT09ICckMCc7XG59KSgpO1xuXG4vLyBTYWZhcmkgPD0gMTMuMC4zKD8pIHN1YnN0aXR1dGVzIG50aCBjYXB0dXJlIHdoZXJlIG4+bSB3aXRoIGFuIGVtcHR5IHN0cmluZ1xudmFyIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKC8uL1tSRVBMQUNFXSkge1xuICAgIHJldHVybiAvLi9bUkVQTEFDRV0oJ2EnLCAnJDAnKSA9PT0gJyc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSkoKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXVzZWxlc3MtZG9sbGFyLXJlcGxhY2VtZW50cyAtLSBmYWxzZSBwb3NpdGl2ZVxuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3JlcGxhY2UnLCBmdW5jdGlvbiAoXywgbmF0aXZlUmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBVTlNBRkVfU1VCU1RJVFVURSA9IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID8gJyQnIDogJyQwJztcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgcmVwbGFjZXIgPSBpc09iamVjdChzZWFyY2hWYWx1ZSkgPyBnZXRNZXRob2Qoc2VhcmNoVmFsdWUsIFJFUExBQ0UpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHJlcGxhY2VyXG4gICAgICAgID8gY2FsbChyZXBsYWNlciwgc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiBjYWxsKG5hdGl2ZVJlcGxhY2UsIHRvU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAoc3RyaW5nLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIFMgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiByZXBsYWNlVmFsdWUgPT0gJ3N0cmluZycgJiZcbiAgICAgICAgc3RyaW5nSW5kZXhPZihyZXBsYWNlVmFsdWUsIFVOU0FGRV9TVUJTVElUVVRFKSA9PT0gLTEgJiZcbiAgICAgICAgc3RyaW5nSW5kZXhPZihyZXBsYWNlVmFsdWUsICckPCcpID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlUmVwbGFjZSwgcngsIFMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gaXNDYWxsYWJsZShyZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gdG9TdHJpbmcocmVwbGFjZVZhbHVlKTtcblxuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIHZhciBmdWxsVW5pY29kZTtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcblxuICAgICAgICBwdXNoKHJlc3VsdHMsIHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcblxuICAgICAgICB2YXIgbWF0Y2hTdHIgPSB0b1N0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG5cbiAgICAgICAgdmFyIG1hdGNoZWQgPSB0b1N0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlck9ySW5maW5pdHkocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIHZhciByZXBsYWNlbWVudDtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBwdXNoKGNhcHR1cmVzLCBtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBjb25jYXQoW21hdGNoZWRdLCBjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHB1c2gocmVwbGFjZXJBcmdzLCBuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IHRvU3RyaW5nKGFwcGx5KHJlcGxhY2VWYWx1ZSwgdW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IHN0cmluZ1NsaWNlKFMsIG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBzdHJpbmdTbGljZShTLCBuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcbn0sICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyB8fCAhUkVQTEFDRV9LRUVQU18kMCB8fCBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBhIHN0cmluZyBvZiBhbGwgdmFsaWQgdW5pY29kZSB3aGl0ZXNwYWNlc1xubW9kdWxlLmV4cG9ydHMgPSAnXFx1MDAwOVxcdTAwMEFcXHUwMDBCXFx1MDAwQ1xcdTAwMERcXHUwMDIwXFx1MDBBMFxcdTE2ODBcXHUyMDAwXFx1MjAwMVxcdTIwMDInICtcbiAgJ1xcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ15bJyArIHdoaXRlc3BhY2VzICsgJ10rJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoJyhefFteJyArIHdoaXRlc3BhY2VzICsgJ10pWycgKyB3aGl0ZXNwYWNlcyArICddKyQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIGlmIChUWVBFICYgMSkgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgcnRyaW0sICckMScpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5QUk9QRVI7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgbm9uID0gJ1xcdTIwMEJcXHUwMDg1XFx1MTgwRSc7XG5cbi8vIGNoZWNrIHRoYXQgYSBtZXRob2Qgd29ya3Mgd2l0aCB0aGUgY29ycmVjdCBsaXN0XG4vLyBvZiB3aGl0ZXNwYWNlcyBhbmQgaGFzIGEgY29ycmVjdCBuYW1lXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXSgpXG4gICAgICB8fCBub25bTUVUSE9EX05BTUVdKCkgIT09IG5vblxuICAgICAgfHwgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIHdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXS5uYW1lICE9PSBNRVRIT0RfTkFNRSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciBmb3JjZWRTdHJpbmdUcmltTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbScpIH0sIHtcbiAgdHJpbTogZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBtYWtlcyBzdWJjbGFzc2luZyB3b3JrIGNvcnJlY3QgZm9yIHdyYXBwZWQgYnVpbHQtaW5zXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgkdGhpcywgZHVtbXksIFdyYXBwZXIpIHtcbiAgdmFyIE5ld1RhcmdldCwgTmV3VGFyZ2V0UHJvdG90eXBlO1xuICBpZiAoXG4gICAgLy8gaXQgY2FuIHdvcmsgb25seSB3aXRoIG5hdGl2ZSBgc2V0UHJvdG90eXBlT2ZgXG4gICAgc2V0UHJvdG90eXBlT2YgJiZcbiAgICAvLyB3ZSBoYXZlbid0IGNvbXBsZXRlbHkgY29ycmVjdCBwcmUtRVM2IHdheSBmb3IgZ2V0dGluZyBgbmV3LnRhcmdldGAsIHNvIHVzZSB0aGlzXG4gICAgaXNDYWxsYWJsZShOZXdUYXJnZXQgPSBkdW1teS5jb25zdHJ1Y3RvcikgJiZcbiAgICBOZXdUYXJnZXQgIT09IFdyYXBwZXIgJiZcbiAgICBpc09iamVjdChOZXdUYXJnZXRQcm90b3R5cGUgPSBOZXdUYXJnZXQucHJvdG90eXBlKSAmJlxuICAgIE5ld1RhcmdldFByb3RvdHlwZSAhPT0gV3JhcHBlci5wcm90b3R5cGVcbiAgKSBzZXRQcm90b3R5cGVPZigkdGhpcywgTmV3VGFyZ2V0UHJvdG90eXBlKTtcbiAgcmV0dXJuICR0aGlzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09PSAnUmVnRXhwJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgcmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG5cbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSKSB7XG4gIHZhciBmbGFncyA9IFIuZmxhZ3M7XG4gIHJldHVybiBmbGFncyA9PT0gdW5kZWZpbmVkICYmICEoJ2ZsYWdzJyBpbiBSZWdFeHBQcm90b3R5cGUpICYmICFoYXNPd24oUiwgJ2ZsYWdzJykgJiYgaXNQcm90b3R5cGVPZihSZWdFeHBQcm90b3R5cGUsIFIpXG4gICAgPyBjYWxsKHJlZ0V4cEZsYWdzLCBSKSA6IGZsYWdzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVGFyZ2V0LCBTb3VyY2UsIGtleSkge1xuICBrZXkgaW4gVGFyZ2V0IHx8IGRlZmluZVByb3BlcnR5KFRhcmdldCwga2V5LCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU291cmNlW2tleV07IH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoaXQpIHsgU291cmNlW2tleV0gPSBpdDsgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmdldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5nZXQsIG5hbWUsIHsgZ2V0dGVyOiB0cnVlIH0pO1xuICBpZiAoZGVzY3JpcHRvci5zZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3Iuc2V0LCBuYW1lLCB7IHNldHRlcjogdHJ1ZSB9KTtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoQ29uc3RydWN0b3IsIFNQRUNJRVMsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICAgIH0pO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBnZXRSZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZ2V0LWZsYWdzJyk7XG52YXIgc3RpY2t5SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMnKTtcbnZhciBwcm94eUFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5lbmZvcmNlO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBVTlNVUFBPUlRFRF9ET1RfQUxMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsJyk7XG52YXIgVU5TVVBQT1JURURfTkNHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1uY2cnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xudmFyIE5hdGl2ZVJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IE5hdGl2ZVJlZ0V4cC5wcm90b3R5cGU7XG52YXIgU3ludGF4RXJyb3IgPSBnbG9iYWxUaGlzLlN5bnRheEVycm9yO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhSZWdFeHBQcm90b3R5cGUuZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuLy8gVE9ETzogVXNlIG9ubHkgcHJvcGVyIFJlZ0V4cElkZW50aWZpZXJOYW1lXG52YXIgSVNfTkNHID0gL15cXD88W15cXHNcXGQhIyUmKis8PT5AXl1bXlxccyEjJSYqKzw9PkBeXSo+LztcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG5cbi8vIFwibmV3XCIgc2hvdWxkIGNyZWF0ZSBhIG5ldyBvYmplY3QsIG9sZCB3ZWJraXQgYnVnXG52YXIgQ09SUkVDVF9ORVcgPSBuZXcgTmF0aXZlUmVnRXhwKHJlMSkgIT09IHJlMTtcblxudmFyIE1JU1NFRF9TVElDS1kgPSBzdGlja3lIZWxwZXJzLk1JU1NFRF9TVElDS1k7XG52YXIgVU5TVVBQT1JURURfWSA9IHN0aWNreUhlbHBlcnMuVU5TVVBQT1JURURfWTtcblxudmFyIEJBU0VfRk9SQ0VEID0gREVTQ1JJUFRPUlMgJiZcbiAgKCFDT1JSRUNUX05FVyB8fCBNSVNTRURfU1RJQ0tZIHx8IFVOU1VQUE9SVEVEX0RPVF9BTEwgfHwgVU5TVVBQT1JURURfTkNHIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZTJbTUFUQ0hdID0gZmFsc2U7XG4gICAgLy8gUmVnRXhwIGNvbnN0cnVjdG9yIGNhbiBhbHRlciBmbGFncyBhbmQgSXNSZWdFeHAgd29ya3MgY29ycmVjdCB3aXRoIEBAbWF0Y2hcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9pbmNvbnNpc3RlbnQtZnVuY3Rpb24tY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIHJldHVybiBOYXRpdmVSZWdFeHAocmUxKSAhPT0gcmUxIHx8IE5hdGl2ZVJlZ0V4cChyZTIpID09PSByZTIgfHwgU3RyaW5nKE5hdGl2ZVJlZ0V4cChyZTEsICdpJykpICE9PSAnL2EvaSc7XG4gIH0pKTtcblxudmFyIGhhbmRsZURvdEFsbCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGJyYWNrZXRzID0gZmFsc2U7XG4gIHZhciBjaHI7XG4gIGZvciAoOyBpbmRleCA8PSBsZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gICAgaWYgKGNociA9PT0gJ1xcXFwnKSB7XG4gICAgICByZXN1bHQgKz0gY2hyICsgY2hhckF0KHN0cmluZywgKytpbmRleCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFicmFja2V0cyAmJiBjaHIgPT09ICcuJykge1xuICAgICAgcmVzdWx0ICs9ICdbXFxcXHNcXFxcU10nO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hyID09PSAnWycpIHtcbiAgICAgICAgYnJhY2tldHMgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICddJykge1xuICAgICAgICBicmFja2V0cyA9IGZhbHNlO1xuICAgICAgfSByZXN1bHQgKz0gY2hyO1xuICAgIH1cbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIGhhbmRsZU5DRyA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIG5hbWVkID0gW107XG4gIHZhciBuYW1lcyA9IGNyZWF0ZShudWxsKTtcbiAgdmFyIGJyYWNrZXRzID0gZmFsc2U7XG4gIHZhciBuY2cgPSBmYWxzZTtcbiAgdmFyIGdyb3VwaWQgPSAwO1xuICB2YXIgZ3JvdXBuYW1lID0gJyc7XG4gIHZhciBjaHI7XG4gIGZvciAoOyBpbmRleCA8PSBsZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gICAgaWYgKGNociA9PT0gJ1xcXFwnKSB7XG4gICAgICBjaHIgKz0gY2hhckF0KHN0cmluZywgKytpbmRleCk7XG4gICAgfSBlbHNlIGlmIChjaHIgPT09ICddJykge1xuICAgICAgYnJhY2tldHMgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKCFicmFja2V0cykgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIGNociA9PT0gJ1snOlxuICAgICAgICBicmFja2V0cyA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjaHIgPT09ICcoJzpcbiAgICAgICAgcmVzdWx0ICs9IGNocjtcbiAgICAgICAgLy8gaWdub3JlIG5vbi1jYXB0dXJpbmcgZ3JvdXBzXG4gICAgICAgIGlmIChzdHJpbmdTbGljZShzdHJpbmcsIGluZGV4ICsgMSwgaW5kZXggKyAzKSA9PT0gJz86Jykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleGVjKElTX05DRywgc3RyaW5nU2xpY2Uoc3RyaW5nLCBpbmRleCArIDEpKSkge1xuICAgICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgICAgbmNnID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBncm91cGlkKys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgY2FzZSBjaHIgPT09ICc+JyAmJiBuY2c6XG4gICAgICAgIGlmIChncm91cG5hbWUgPT09ICcnIHx8IGhhc093bihuYW1lcywgZ3JvdXBuYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignSW52YWxpZCBjYXB0dXJlIGdyb3VwIG5hbWUnKTtcbiAgICAgICAgfVxuICAgICAgICBuYW1lc1tncm91cG5hbWVdID0gdHJ1ZTtcbiAgICAgICAgbmFtZWRbbmFtZWQubGVuZ3RoXSA9IFtncm91cG5hbWUsIGdyb3VwaWRdO1xuICAgICAgICBuY2cgPSBmYWxzZTtcbiAgICAgICAgZ3JvdXBuYW1lID0gJyc7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmNnKSBncm91cG5hbWUgKz0gY2hyO1xuICAgIGVsc2UgcmVzdWx0ICs9IGNocjtcbiAgfSByZXR1cm4gW3Jlc3VsdCwgbmFtZWRdO1xufTtcblxuLy8gYFJlZ0V4cGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLWNvbnN0cnVjdG9yXG5pZiAoaXNGb3JjZWQoJ1JlZ0V4cCcsIEJBU0VfRk9SQ0VEKSkge1xuICB2YXIgUmVnRXhwV3JhcHBlciA9IGZ1bmN0aW9uIFJlZ0V4cChwYXR0ZXJuLCBmbGFncykge1xuICAgIHZhciB0aGlzSXNSZWdFeHAgPSBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgdGhpcyk7XG4gICAgdmFyIHBhdHRlcm5Jc1JlZ0V4cCA9IGlzUmVnRXhwKHBhdHRlcm4pO1xuICAgIHZhciBmbGFnc0FyZVVuZGVmaW5lZCA9IGZsYWdzID09PSB1bmRlZmluZWQ7XG4gICAgdmFyIGdyb3VwcyA9IFtdO1xuICAgIHZhciByYXdQYXR0ZXJuID0gcGF0dGVybjtcbiAgICB2YXIgcmF3RmxhZ3MsIGRvdEFsbCwgc3RpY2t5LCBoYW5kbGVkLCByZXN1bHQsIHN0YXRlO1xuXG4gICAgaWYgKCF0aGlzSXNSZWdFeHAgJiYgcGF0dGVybklzUmVnRXhwICYmIGZsYWdzQXJlVW5kZWZpbmVkICYmIHBhdHRlcm4uY29uc3RydWN0b3IgPT09IFJlZ0V4cFdyYXBwZXIpIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuO1xuICAgIH1cblxuICAgIGlmIChwYXR0ZXJuSXNSZWdFeHAgfHwgaXNQcm90b3R5cGVPZihSZWdFeHBQcm90b3R5cGUsIHBhdHRlcm4pKSB7XG4gICAgICBwYXR0ZXJuID0gcGF0dGVybi5zb3VyY2U7XG4gICAgICBpZiAoZmxhZ3NBcmVVbmRlZmluZWQpIGZsYWdzID0gZ2V0UmVnRXhwRmxhZ3MocmF3UGF0dGVybik7XG4gICAgfVxuXG4gICAgcGF0dGVybiA9IHBhdHRlcm4gPT09IHVuZGVmaW5lZCA/ICcnIDogdG9TdHJpbmcocGF0dGVybik7XG4gICAgZmxhZ3MgPSBmbGFncyA9PT0gdW5kZWZpbmVkID8gJycgOiB0b1N0cmluZyhmbGFncyk7XG4gICAgcmF3UGF0dGVybiA9IHBhdHRlcm47XG5cbiAgICBpZiAoVU5TVVBQT1JURURfRE9UX0FMTCAmJiAnZG90QWxsJyBpbiByZTEpIHtcbiAgICAgIGRvdEFsbCA9ICEhZmxhZ3MgJiYgc3RyaW5nSW5kZXhPZihmbGFncywgJ3MnKSA+IC0xO1xuICAgICAgaWYgKGRvdEFsbCkgZmxhZ3MgPSByZXBsYWNlKGZsYWdzLCAvcy9nLCAnJyk7XG4gICAgfVxuXG4gICAgcmF3RmxhZ3MgPSBmbGFncztcblxuICAgIGlmIChNSVNTRURfU1RJQ0tZICYmICdzdGlja3knIGluIHJlMSkge1xuICAgICAgc3RpY2t5ID0gISFmbGFncyAmJiBzdHJpbmdJbmRleE9mKGZsYWdzLCAneScpID4gLTE7XG4gICAgICBpZiAoc3RpY2t5ICYmIFVOU1VQUE9SVEVEX1kpIGZsYWdzID0gcmVwbGFjZShmbGFncywgL3kvZywgJycpO1xuICAgIH1cblxuICAgIGlmIChVTlNVUFBPUlRFRF9OQ0cpIHtcbiAgICAgIGhhbmRsZWQgPSBoYW5kbGVOQ0cocGF0dGVybik7XG4gICAgICBwYXR0ZXJuID0gaGFuZGxlZFswXTtcbiAgICAgIGdyb3VwcyA9IGhhbmRsZWRbMV07XG4gICAgfVxuXG4gICAgcmVzdWx0ID0gaW5oZXJpdElmUmVxdWlyZWQoTmF0aXZlUmVnRXhwKHBhdHRlcm4sIGZsYWdzKSwgdGhpc0lzUmVnRXhwID8gdGhpcyA6IFJlZ0V4cFByb3RvdHlwZSwgUmVnRXhwV3JhcHBlcik7XG5cbiAgICBpZiAoZG90QWxsIHx8IHN0aWNreSB8fCBncm91cHMubGVuZ3RoKSB7XG4gICAgICBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHJlc3VsdCk7XG4gICAgICBpZiAoZG90QWxsKSB7XG4gICAgICAgIHN0YXRlLmRvdEFsbCA9IHRydWU7XG4gICAgICAgIHN0YXRlLnJhdyA9IFJlZ0V4cFdyYXBwZXIoaGFuZGxlRG90QWxsKHBhdHRlcm4pLCByYXdGbGFncyk7XG4gICAgICB9XG4gICAgICBpZiAoc3RpY2t5KSBzdGF0ZS5zdGlja3kgPSB0cnVlO1xuICAgICAgaWYgKGdyb3Vwcy5sZW5ndGgpIHN0YXRlLmdyb3VwcyA9IGdyb3VwcztcbiAgICB9XG5cbiAgICBpZiAocGF0dGVybiAhPT0gcmF3UGF0dGVybikgdHJ5IHtcbiAgICAgIC8vIGZhaWxzIGluIG9sZCBlbmdpbmVzLCBidXQgd2UgaGF2ZSBubyBhbHRlcm5hdGl2ZXMgZm9yIHVuc3VwcG9ydGVkIHJlZ2V4IHN5bnRheFxuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdCwgJ3NvdXJjZScsIHJhd1BhdHRlcm4gPT09ICcnID8gJyg/OiknIDogcmF3UGF0dGVybik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBmb3IgKHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhOYXRpdmVSZWdFeHApLCBpbmRleCA9IDA7IGtleXMubGVuZ3RoID4gaW5kZXg7KSB7XG4gICAgcHJveHlBY2Nlc3NvcihSZWdFeHBXcmFwcGVyLCBOYXRpdmVSZWdFeHAsIGtleXNbaW5kZXgrK10pO1xuICB9XG5cbiAgUmVnRXhwUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVnRXhwV3JhcHBlcjtcbiAgUmVnRXhwV3JhcHBlci5wcm90b3R5cGUgPSBSZWdFeHBQcm90b3R5cGU7XG4gIGRlZmluZUJ1aWx0SW4oZ2xvYmFsVGhpcywgJ1JlZ0V4cCcsIFJlZ0V4cFdyYXBwZXIsIHsgY29uc3RydWN0b3I6IHRydWUgfSk7XG59XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC1AQHNwZWNpZXNcbnNldFNwZWNpZXMoJ1JlZ0V4cCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAnZCcpIC0+IC8uL2QgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBGT1JDRUQgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBJTkRJQ0VTX1NVUFBPUlQgPSB0cnVlO1xuICB0cnkge1xuICAgIFJlZ0V4cCgnLicsICdkJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgSU5ESUNFU19TVVBQT1JUID0gZmFsc2U7XG4gIH1cblxuICB2YXIgTyA9IHt9O1xuICAvLyBtb2Rlcm4gVjggYnVnXG4gIHZhciBjYWxscyA9ICcnO1xuICB2YXIgZXhwZWN0ZWQgPSBJTkRJQ0VTX1NVUFBPUlQgPyAnZGdpbXN5JyA6ICdnaW1zeSc7XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChrZXksIGNocikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxscyArPSBjaHI7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IH0pO1xuICB9O1xuXG4gIHZhciBwYWlycyA9IHtcbiAgICBkb3RBbGw6ICdzJyxcbiAgICBnbG9iYWw6ICdnJyxcbiAgICBpZ25vcmVDYXNlOiAnaScsXG4gICAgbXVsdGlsaW5lOiAnbScsXG4gICAgc3RpY2t5OiAneSdcbiAgfTtcblxuICBpZiAoSU5ESUNFU19TVVBQT1JUKSBwYWlycy5oYXNJbmRpY2VzID0gJ2QnO1xuXG4gIGZvciAodmFyIGtleSBpbiBwYWlycykgYWRkR2V0dGVyKGtleSwgcGFpcnNba2V5XSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSZWdFeHBQcm90b3R5cGUsICdmbGFncycpLmdldC5jYWxsKE8pO1xuXG4gIHJldHVybiByZXN1bHQgIT09IGV4cGVjdGVkIHx8IGNhbGxzICE9PSBleHBlY3RlZDtcbn0pO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5pZiAoRk9SQ0VEKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUmVnRXhwUHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZWdFeHBGbGFnc1xufSk7XG4iLCJleHBvcnQgaW50ZXJmYWNlIEdyYW1tYXJSdWxlIHtcbiAgcmVnZXhwOiBSZWdFeHA7XG4gIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIGxhYmVsUGxhY2Vob2xkZXI/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSFRNTEJsb2NrUnVsZSB7XG4gIHN0YXJ0OiBSZWdFeHA7XG4gIGVuZDogUmVnRXhwIHwgZmFsc2U7XG4gIHBhcmFJbnRlcnJ1cHQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lQ29tbWFuZCB7XG4gIHR5cGU6ICdpbmxpbmUnO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0OiB7XG4gICAgcHJlOiBzdHJpbmc7XG4gICAgcG9zdDogc3RyaW5nO1xuICB9O1xuICB1bnNldDoge1xuICAgIHByZVBhdHRlcm46IFJlZ0V4cDtcbiAgICBwb3N0UGF0dGVybjogUmVnRXhwO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpbmVDb21tYW5kIHtcbiAgdHlwZTogJ2xpbmUnO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0OiB7XG4gICAgcGF0dGVybjogUmVnRXhwO1xuICAgIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIH07XG4gIHVuc2V0OiB7XG4gICAgcGF0dGVybjogUmVnRXhwO1xuICAgIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIENvbW1hbmQgPSBJbmxpbmVDb21tYW5kIHwgTGluZUNvbW1hbmQ7XG5cbmNvbnN0IHJlcGxhY2VtZW50czogUmVjb3JkPHN0cmluZywgUmVnRXhwPiA9IHtcbiAgQVNDSUlQdW5jdHVhdGlvbjogL1shXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AW1xcXV5fYHt8fX5cXFxcXS8sICBcbiAgTm90VHJpZ2dlckNoYXI6IC9bXmBfKltcXF0oKTw+IX5dLyxcbiAgU2NoZW1lOiAvW0EtWmEtel1bQS1aYS16MC05Ky4tXXsxLDMxfS8sXG4gIEVtYWlsOiAvW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSovLCAvLyBGcm9tIENvbW1vbk1hcmsgc3BlY1xuICBIVE1MT3BlblRhZzogLzxIVE1MVGFnTmFtZSg/OkhUTUxBdHRyaWJ1dGUpKlxccypcXC8/Pi8sXG4gIEhUTUxDbG9zZVRhZzogLzxcXC9IVE1MVGFnTmFtZVxccyo+LyxcbiAgSFRNTFRhZ05hbWU6IC9bQS1aYS16XVtBLVphLXowLTktXSovLCBcbiAgSFRNTENvbW1lbnQ6IC88IS0tKD86W14+LV18KD86W14+LV0oPzpbXi1dfC1bXi1dKSpbXi1dKSktLT4vLFxuICBIVE1MUEk6IC88XFw/KD86fC58KD86W14/XXxcXD9bXj5dKSopXFw/Pi8sXG4gIEhUTUxEZWNsYXJhdGlvbjogLzwhW0EtWl0rXFxzW14+XSo+LyxcbiAgSFRNTENEQVRBOiAvPCFcXFtDREFUQVxcWy4qP1xcXVxcXT4vLFxuICBIVE1MQXR0cmlidXRlOiAvXFxzK1tBLVphLXpfOl1bQS1aYS16MC05Xy46LV0qKD86SFRNTEF0dFZhbHVlKT8vLFxuICBIVE1MQXR0VmFsdWU6IC9cXHMqPVxccyooPzooPzonW14nXSonKXwoPzpcIlteXCJdKlwiKXwoPzpbXlxcc1wiJz08PmBdKykpLyxcbiAgS25vd25UYWc6IC9hZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsL1xufTtcblxuLy8gRnJvbSBDb21tb25NYXJrLmpzLiBcbmV4cG9ydCBjb25zdCBwdW5jdHVhdGlvbkxlYWRpbmcgPSBuZXcgUmVnRXhwKC9eKD86WyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXFxcXF5fYHt8fX5cXHhBMVxceEE3XFx4QUJcXHhCNlxceEI3XFx4QkJcXHhCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwQUYwXFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkRcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMjdcXHUyMDMwLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTQyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzlcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURGM0MtXFx1REYzRV18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdKS8pO1xuXG5leHBvcnQgY29uc3QgcHVuY3R1YXRpb25UcmFpbGluZyA9IG5ldyBSZWdFeHAoLyg/OlshXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AW1xcXVxcXFxeX2B7fH1+XFx4QTFcXHhBN1xceEFCXFx4QjZcXHhCN1xceEJCXFx4QkZcXHUwMzdFXFx1MDM4N1xcdTA1NUEtXFx1MDU1RlxcdTA1ODlcXHUwNThBXFx1MDVCRVxcdTA1QzBcXHUwNUMzXFx1MDVDNlxcdTA1RjNcXHUwNUY0XFx1MDYwOVxcdTA2MEFcXHUwNjBDXFx1MDYwRFxcdTA2MUJcXHUwNjFFXFx1MDYxRlxcdTA2NkEtXFx1MDY2RFxcdTA2RDRcXHUwNzAwLVxcdTA3MERcXHUwN0Y3LVxcdTA3RjlcXHUwODMwLVxcdTA4M0VcXHUwODVFXFx1MDk2NFxcdTA5NjVcXHUwOTcwXFx1MEFGMFxcdTBERjRcXHUwRTRGXFx1MEU1QVxcdTBFNUJcXHUwRjA0LVxcdTBGMTJcXHUwRjE0XFx1MEYzQS1cXHUwRjNEXFx1MEY4NVxcdTBGRDAtXFx1MEZENFxcdTBGRDlcXHUwRkRBXFx1MTA0QS1cXHUxMDRGXFx1MTBGQlxcdTEzNjAtXFx1MTM2OFxcdTE0MDBcXHUxNjZEXFx1MTY2RVxcdTE2OUJcXHUxNjlDXFx1MTZFQi1cXHUxNkVEXFx1MTczNVxcdTE3MzZcXHUxN0Q0LVxcdTE3RDZcXHUxN0Q4LVxcdTE3REFcXHUxODAwLVxcdTE4MEFcXHUxOTQ0XFx1MTk0NVxcdTFBMUVcXHUxQTFGXFx1MUFBMC1cXHUxQUE2XFx1MUFBOC1cXHUxQUFEXFx1MUI1QS1cXHUxQjYwXFx1MUJGQy1cXHUxQkZGXFx1MUMzQi1cXHUxQzNGXFx1MUM3RVxcdTFDN0ZcXHUxQ0MwLVxcdTFDQzdcXHUxQ0QzXFx1MjAxMC1cXHUyMDI3XFx1MjAzMC1cXHUyMDQzXFx1MjA0NS1cXHUyMDUxXFx1MjA1My1cXHUyMDVFXFx1MjA3RFxcdTIwN0VcXHUyMDhEXFx1MjA4RVxcdTIzMDgtXFx1MjMwQlxcdTIzMjlcXHUyMzJBXFx1Mjc2OC1cXHUyNzc1XFx1MjdDNVxcdTI3QzZcXHUyN0U2LVxcdTI3RUZcXHUyOTgzLVxcdTI5OThcXHUyOUQ4LVxcdTI5REJcXHUyOUZDXFx1MjlGRFxcdTJDRjktXFx1MkNGQ1xcdTJDRkVcXHUyQ0ZGXFx1MkQ3MFxcdTJFMDAtXFx1MkUyRVxcdTJFMzAtXFx1MkU0MlxcdTMwMDEtXFx1MzAwM1xcdTMwMDgtXFx1MzAxMVxcdTMwMTQtXFx1MzAxRlxcdTMwMzBcXHUzMDNEXFx1MzBBMFxcdTMwRkJcXHVBNEZFXFx1QTRGRlxcdUE2MEQtXFx1QTYwRlxcdUE2NzNcXHVBNjdFXFx1QTZGMi1cXHVBNkY3XFx1QTg3NC1cXHVBODc3XFx1QThDRVxcdUE4Q0ZcXHVBOEY4LVxcdUE4RkFcXHVBOEZDXFx1QTkyRVxcdUE5MkZcXHVBOTVGXFx1QTlDMS1cXHVBOUNEXFx1QTlERVxcdUE5REZcXHVBQTVDLVxcdUFBNUZcXHVBQURFXFx1QUFERlxcdUFBRjBcXHVBQUYxXFx1QUJFQlxcdUZEM0VcXHVGRDNGXFx1RkUxMC1cXHVGRTE5XFx1RkUzMC1cXHVGRTUyXFx1RkU1NC1cXHVGRTYxXFx1RkU2M1xcdUZFNjhcXHVGRTZBXFx1RkU2QlxcdUZGMDEtXFx1RkYwM1xcdUZGMDUtXFx1RkYwQVxcdUZGMEMtXFx1RkYwRlxcdUZGMUFcXHVGRjFCXFx1RkYxRlxcdUZGMjBcXHVGRjNCLVxcdUZGM0RcXHVGRjNGXFx1RkY1QlxcdUZGNURcXHVGRjVGLVxcdUZGNjVdfFxcdUQ4MDBbXFx1REQwMC1cXHVERDAyXFx1REY5RlxcdURGRDBdfFxcdUQ4MDFcXHVERDZGfFxcdUQ4MDJbXFx1REM1N1xcdUREMUZcXHVERDNGXFx1REU1MC1cXHVERTU4XFx1REU3RlxcdURFRjAtXFx1REVGNlxcdURGMzktXFx1REYzRlxcdURGOTktXFx1REY5Q118XFx1RDgwNFtcXHVEQzQ3LVxcdURDNERcXHVEQ0JCXFx1RENCQ1xcdURDQkUtXFx1RENDMVxcdURENDAtXFx1REQ0M1xcdURENzRcXHVERDc1XFx1RERDNS1cXHVEREM5XFx1RERDRFxcdUREREJcXHVERERELVxcdUREREZcXHVERTM4LVxcdURFM0RcXHVERUE5XXxcXHVEODA1W1xcdURDQzZcXHVEREMxLVxcdURERDdcXHVERTQxLVxcdURFNDNcXHVERjNDLVxcdURGM0VdfFxcdUQ4MDlbXFx1REM3MC1cXHVEQzc0XXxcXHVEODFBW1xcdURFNkVcXHVERTZGXFx1REVGNVxcdURGMzctXFx1REYzQlxcdURGNDRdfFxcdUQ4MkZcXHVEQzlGfFxcdUQ4MzZbXFx1REU4Ny1cXHVERThCXSkkLyk7XG5cbi8qKlxuICogVGhpcyBpcyBDb21tb25NYXJrJ3MgYmxvY2sgZ3JhbW1hciwgYnV0IHdlJ3JlIGlnbm9yaW5nIG5lc3RlZCBibG9ja3MgaGVyZS4gIFxuICovIFxuZXhwb3J0IGNvbnN0IGxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7IFxuICBUTUgxOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9I1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDFcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMVwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1IMjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMlwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgyXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUgzOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IM1wiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgzXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg0OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjI1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDRcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INFwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1INTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INVwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg1XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg2OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INlwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg2XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUJsb2NrcXVvdGU6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30+WyBdPykoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQmxvY2txdW90ZVwiPiQxPC9zcGFuPiQkMidcbiAgfSxcbiAgVE1Db2RlRmVuY2VCYWNrdGlja09wZW46IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+YGBgYCopXFxzKikoW15gXSo/KShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZUJhY2t0aWNrXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUluZm9TdHJpbmdcIj4kMzwvc3Bhbj4kNCdcbiAgfSxcbiAgVE1Db2RlRmVuY2VUaWxkZU9wZW46IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+fn5+fiopXFxzKikoLio/KShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZVRpbGRlXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUluZm9TdHJpbmdcIj4kMzwvc3Bhbj4kNCdcbiAgfSxcbiAgVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KD88c2VxPmBgYGAqKSkoXFxzKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlRmVuY2VCYWNrdGlja1wiPiQxPC9zcGFuPiQzJ1xuICB9LFxuICBUTUNvZGVGZW5jZVRpbGRlQ2xvc2U6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+fn5+fiopKShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZVRpbGRlXCI+JDE8L3NwYW4+JDMnXG4gIH0sXG4gIFRNQmxhbmtMaW5lOiB7IFxuICAgIHJlZ2V4cDogL14oWyBcXHRdKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICckMCdcbiAgfSxcbiAgVE1TZXRleHRIMU1hcmtlcjogeyBcbiAgICByZWdleHA6IC9eIHswLDN9PStcXHMqJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNU2V0ZXh0SDFNYXJrZXJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNU2V0ZXh0SDJNYXJrZXI6IHsgXG4gICAgcmVnZXhwOiAvXiB7MCwzfS0rXFxzKiQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTVNldGV4dEgxTWFya2VyXCI+JDA8L3NwYW4+J1xuICB9LFxuICBUTUhSOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KFxcKlsgXFx0XSpcXCpbIFxcdF0qXFwqWyBcXHQqXSopfCgtWyBcXHRdKi1bIFxcdF0qLVsgXFx0LV0qKXwoX1sgXFx0XSpfWyBcXHRdKl9bIFxcdF9dKikpJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSFJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNVUw6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM31bKyotXSB7MSw0fSkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNVUxcIj4kMTwvc3Bhbj4kJDInXG4gIH0sXG4gIFRNT0w6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM31cXGR7MSw5fVsuKV0gezEsNH0pKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTU9MXCI+JDE8L3NwYW4+JCQyJ1xuICB9LFxuICAvLyBUT0RPOiBUaGlzIGlzIGN1cnJlbnRseSBwcmV2ZW50aW5nIHN1Ymxpc3RzIChhbmQgYW55IGNvbnRlbnQgd2l0aGluIGxpc3QgaXRlbXMsIHJlYWxseSkgZnJvbSB3b3JraW5nXG4gIFRNSW5kZW50ZWRDb2RlOiB7IFxuICAgIHJlZ2V4cDogL14oIHs0fXxcXHQpKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUluZGVudGVkQ29kZVwiPiQxPC9zcGFuPiQyJ1xuICB9LFxuICBUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uOiB7XG4gICAgLy8gVE9ETzogTGluayBkZXN0aW5hdGlvbiBjYW4ndCBpbmNsdWRlIHVuYmFsYW5jZWQgcGFyYW50aGVzZXMsIGJ1dCB3ZSBqdXN0IGlnbm9yZSB0aGF0IGhlcmUgXG4gICAgcmVnZXhwOiAvXiggezAsM31cXFtcXHMqKShbXlxcc1xcXV0oPzpbXlxcXV18XFxcXFxcXSkqPykoXFxzKlxcXTpcXHMqKSgoPzpbXlxcczw+XSspfCg/OjwoPzpbXjw+XFxcXF18XFxcXC4pKj4pKT8oXFxzKikoKD86XFwoKD86W14oKVxcXFxdfFxcXFwuKSpcXCkpfCg/OlwiKD86W15cIlxcXFxdfFxcXFwuKSpcIil8KD86Jyg/OlteJ1xcXFxdfFxcXFwuKSonKSk/KFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX0RlZmluaXRpb25cIj4kMjwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiPiQzPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1MaW5rRGVzdGluYXRpb25cIj4kNDwvc3Bhbj4kNTxzcGFuIGNsYXNzPVwiVE1MaW5rVGl0bGVcIj4kNjwvc3Bhbj4kNycsXG4gICAgbGFiZWxQbGFjZWhvbGRlcjogMiwgLy8gdGhpcyBkZWZpbmVzIHdoaWNoIHBsYWNlaG9sZGVyIGluIHRoZSBhYm92ZSByZWdleCBpcyB0aGUgbGluayBcImxhYmVsXCJcbiAgfSxcbn07XG5cbi8qKlxuICogSFRNTCBibG9ja3MgaGF2ZSBtdWx0aXBsZSBkaWZmZXJlbnQgY2xhc3NlcyBvZiBvcGVuZXIgYW5kIGNsb3Nlci4gVGhpcyBhcnJheSBkZWZpbmVzIGFsbCB0aGUgY2FzZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxCbG9ja0dyYW1tYXI6IEhUTUxCbG9ja1J1bGVbXSA9IFtcbiAgeyBzdGFydDogL14gezAsM308KD86c2NyaXB0fHByZXxzdHlsZSkoPzpcXHN8PnwkKS9pLCBlbmQ6IC8oPzo8XFwvc2NyaXB0Pnw8XFwvcHJlPnw8XFwvc3R5bGU+KS9pLCBwYXJhSW50ZXJydXB0OiB0cnVlIH0sXG4gIHsgc3RhcnQ6IC9eIHswLDN9PCEtLS8sIGVuZDogLy0tPi8sIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308XFw/LywgZW5kOiAvXFw/Pi8sIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308IVtBLVpdLywgZW5kOiAvPi8sIHBhcmFJbnRlcnJ1cHQgOiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM308IVxcW0NEQVRBXFxbLywgZW5kOiAvXFxdXFxdPi8sIHBhcmFJbnRlcnJ1cHQgOiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM30oPzo8fDxcXC8pKD86S25vd25UYWcpKD86XFxzfD58XFwvPnwkKS9pLCBlbmQ6IGZhbHNlLCBwYXJhSW50ZXJydXB0OiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM30oPzpIVE1MT3BlblRhZ3xIVE1MQ2xvc2VUYWcpXFxzKiQvLCBlbmQ6IGZhbHNlLCBwYXJhSW50ZXJydXB0OiBmYWxzZX0sXG5dO1xuXG4vKipcbiAqIFN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0OlxuICogVG9wIGxldmVsIGVudHJpZXMgYXJlIHJ1bGVzLCBlYWNoIGNvbnNpc3Rpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb25zIChpbiBzdHJpbmcgZm9ybWF0KSBhcyB3ZWxsIGFzIGEgcmVwbGFjZW1lbnQuXG4gKiBJbiB0aGUgcmVndWxhciBleHByZXNzaW9ucywgcmVwbGFjZW1lbnRzIGZyb20gdGhlIG9iamVjdCAncmVwbGFjZW1lbnRzJyB3aWxsIGJlIHByb2Nlc3NlZCBiZWZvcmUgY29tcGlsaW5nIGludG8gdGhlIHByb3BlcnR5IHJlZ2V4cC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHtcbiAgZXNjYXBlIDoge1xuICAgIHJlZ2V4cDogL15cXFxcKEFTQ0lJUHVuY3R1YXRpb24pLyxcbiAgICByZXBsYWNlbWVudCA6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Fc2NhcGVcIj5cXFxcPC9zcGFuPiQxJ1xuICB9LFxuICBjb2RlIDoge1xuICAgIHJlZ2V4cDogL14oYCspKCg/OlteYF0pfCg/OlteYF0uKj9bXmBdKSkoXFwxKS8sXG4gICAgcmVwbGFjZW1lbnQgOiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZVwiPiQxPC9zcGFuPjxjb2RlIGNsYXNzPVwiVE1Db2RlXCI+JDI8L2NvZGU+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZVwiPiQzPC9zcGFuPicgXG4gIH0sXG4gIGF1dG9saW5rIDoge1xuICAgIHJlZ2V4cDogL148KCg/OlNjaGVtZTpbXlxcczw+XSopfCg/OkVtYWlsKSk+LyxcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUF1dG9saW5rXCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNQXV0b2xpbmtcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1BdXRvbGlua1wiPiZndDs8L3NwYW4+J1xuICB9LFxuICBodG1sIDoge1xuICAgIHJlZ2V4cDogL14oKD86SFRNTE9wZW5UYWcpfCg/OkhUTUxDbG9zZVRhZyl8KD86SFRNTENvbW1lbnQpfCg/OkhUTUxQSSl8KD86SFRNTERlY2xhcmF0aW9uKXwoPzpIVE1MQ0RBVEEpKS8sXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNSFRNTFwiPiQxPC9zcGFuPicsXG4gIH0sXG4gIGxpbmtPcGVuIDoge1xuICAgIHJlZ2V4cDogL15cXFsvLFxuICAgIHJlcGxhY2VtZW50OiAnJ1xuICB9LFxuICBpbWFnZU9wZW4gOiB7XG4gICAgcmVnZXhwOiAvXiFcXFsvLFxuICAgIHJlcGxhY2VtZW50IDogJydcbiAgfSxcbiAgbGlua0xhYmVsIDoge1xuICAgIHJlZ2V4cDogL14oXFxbXFxzKikoW15cXF1dKj8pKFxccypcXF0pLyxcbiAgICByZXBsYWNlbWVudDogJycsXG4gICAgbGFiZWxQbGFjZWhvbGRlcjogMlxuICB9LFxuICBkZWZhdWx0IDoge1xuICAgIHJlZ2V4cDogL14oLnwoPzpOb3RUcmlnZ2VyQ2hhcispKS8sXG4gICAgcmVwbGFjZW1lbnQ6ICckMSdcbiAgfVxufTtcblxuLy8gUHJvY2VzcyByZXBsYWNlbWVudHMgaW4gcmVnZXhwc1xuY29uc3QgcmVwbGFjZW1lbnRSZWdleHAgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykuam9pbignfCcpKTtcblxuLy8gSW5saW5lXG5jb25zdCBpbmxpbmVSdWxlcyA9IFsuLi5PYmplY3Qua2V5cyhpbmxpbmVHcmFtbWFyKV07XG5mb3IgKGxldCBydWxlIG9mIGlubGluZVJ1bGVzKSB7XG4gIGxldCByZSA9IGlubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLnNvdXJjZTtcbiAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZS4gVGhpcyBtZWFucyBpdCBhbHNvIHdvcmtzIG92ZXIgbXVsdGlwbGUgbGV2ZWxzIChyZXBsYWNlbWVudHMgY29udGFpbmluZyByZXBsYWNlbWVudHMpXG4gIHdoaWxlIChyZS5tYXRjaChyZXBsYWNlbWVudFJlZ2V4cCkpIHtcbiAgICByZSA9IHJlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChzdHJpbmcpID0+IHsgcmV0dXJuIHJlcGxhY2VtZW50c1tzdHJpbmddLnNvdXJjZTsgfSk7XG4gIH1cbiAgaW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAgPSBuZXcgUmVnRXhwKHJlLCBpbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5mbGFncyk7XG59XG5cbi8vIEhUTUwgQmxvY2sgKG9ubHkgb3BlbmluZyBydWxlIGlzIHByb2Nlc3NlZCBjdXJyZW50bHkpXG5mb3IgKGxldCBydWxlIG9mIGh0bWxCbG9ja0dyYW1tYXIpIHtcbiAgbGV0IHJlID0gcnVsZS5zdGFydC5zb3VyY2U7XG4gIC8vIFJlcGxhY2Ugd2hpbGUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlcGxhY2UuIFRoaXMgbWVhbnMgaXQgYWxzbyB3b3JrcyBvdmVyIG11bHRpcGxlIGxldmVscyAocmVwbGFjZW1lbnRzIGNvbnRhaW5pbmcgcmVwbGFjZW1lbnRzKVxuICB3aGlsZSAocmUubWF0Y2gocmVwbGFjZW1lbnRSZWdleHApKSB7XG4gICAgcmUgPSByZS5yZXBsYWNlKHJlcGxhY2VtZW50UmVnZXhwLCAoc3RyaW5nKSA9PiB7IHJldHVybiByZXBsYWNlbWVudHNbc3RyaW5nXS5zb3VyY2U7IH0pO1xuICB9XG4gIHJ1bGUuc3RhcnQgPSBuZXcgUmVnRXhwKHJlLCBydWxlLnN0YXJ0LmZsYWdzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWVyZ2VkIGlubGluZSBncmFtbWFyIGJ5IGNvbWJpbmluZyB0aGUgZGVmYXVsdCBpbmxpbmUgZ3JhbW1hciB3aXRoIGN1c3RvbSBydWxlcy5cbiAqIEN1c3RvbSBydWxlcyBhcmUgcHJvY2Vzc2VkIGFuZCB0aGVpciByZWdleHAgcGF0dGVybnMgYXJlIGV4cGFuZGVkIHdpdGggcmVwbGFjZW1lbnRzLlxuICogQHBhcmFtIGN1c3RvbVJ1bGVzIC0gT2JqZWN0IGNvbnRhaW5pbmcgY3VzdG9tIGlubGluZSBncmFtbWFyIHJ1bGVzXG4gKiBAcmV0dXJucyBNZXJnZWQgaW5saW5lIGdyYW1tYXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyKGN1c3RvbVJ1bGVzOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7fSk6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiB7XG4gIGNvbnN0IG1lcmdlZCA9IHsgLi4uaW5saW5lR3JhbW1hciB9O1xuICBcbiAgLy8gUHJvY2VzcyBjdXN0b20gcnVsZXNcbiAgZm9yIChjb25zdCBbcnVsZU5hbWUsIHJ1bGVdIG9mIE9iamVjdC5lbnRyaWVzKGN1c3RvbVJ1bGVzKSkge1xuICAgIC8vIENvcHkgdGhlIHJ1bGUgdG8gYXZvaWQgbW9kaWZ5aW5nIHRoZSBvcmlnaW5hbFxuICAgIGNvbnN0IHByb2Nlc3NlZFJ1bGUgPSB7IC4uLnJ1bGUgfTtcbiAgICBcbiAgICAvLyBQcm9jZXNzIHJlcGxhY2VtZW50cyBpbiB0aGUgcmVnZXhwXG4gICAgbGV0IHJlZ2V4cFNvdXJjZSA9IHJ1bGUucmVnZXhwLnNvdXJjZTtcbiAgICBjb25zdCByZXBsYWNlbWVudFJlZ2V4cCA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKS5qb2luKCd8JykpO1xuICAgIFxuICAgIC8vIFJlcGxhY2Ugd2hpbGUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlcGxhY2VcbiAgICB3aGlsZSAocmVnZXhwU291cmNlLm1hdGNoKHJlcGxhY2VtZW50UmVnZXhwKSkge1xuICAgICAgcmVnZXhwU291cmNlID0gcmVnZXhwU291cmNlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChtYXRjaCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnRzW21hdGNoXS5zb3VyY2U7XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgcHJvY2Vzc2VkUnVsZS5yZWdleHAgPSBuZXcgUmVnRXhwKHJlZ2V4cFNvdXJjZSwgcnVsZS5yZWdleHAuZmxhZ3MpO1xuICAgIG1lcmdlZFtydWxlTmFtZV0gPSBwcm9jZXNzZWRSdWxlO1xuICB9XG4gIFxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vKipcbiAqIEVzY2FwZXMgSFRNTCBzcGVjaWFsIGNoYXJhY3RlcnMgKDwsID4sIGFuZCAmKSBpbiB0aGUgc3RyaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgcmF3IHN0cmluZyB0byBiZSBlc2NhcGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3RyaW5nLCByZWFkeSB0byBiZSB1c2VkIGluIEhUTUxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0bWxlc2NhcGUoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gKHN0cmluZyA/IHN0cmluZyA6ICcnKVxuICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG59XG5cbi8qKlxuICogQ29udGFpbnMgdGhlIGNvbW1hbmRzIHRoYXQgY2FuIGJlIHNlbnQgdG8gdGhlIGVkaXRvci4gQ29udGFpbnMgb2JqZWN0cyB3aXRoIGEgbmFtZSByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQuXG4gKiBFYWNoIG9mIHRoZSBvYmplY3RzIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcga2V5czpcbiAqIFxuICogICAtIHR5cGU6IENhbiBiZSBlaXRoZXIgaW5saW5lIChmb3IgaW5saW5lIGZvcm1hdHRpbmcpIG9yIGxpbmUgKGZvciBibG9jayAvIGxpbmUgZm9ybWF0dGluZykuXG4gKiAgIC0gY2xhc3NOYW1lOiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBjb21tYW5kIGlzIGFjdGl2ZSBhdCBhIGdpdmVuIHBvc2l0aW9uLiBcbiAqICAgICBGb3IgbGluZSBmb3JtYXR0aW5nLCB0aGlzIGxvb2tzIGF0IHRoZSBjbGFzcyBvZiB0aGUgbGluZSBlbGVtZW50LiBGb3IgaW5saW5lIGVsZW1lbnRzLCB0cmllcyB0byBmaW5kIGFuIGVuY2xvc2luZyBlbGVtZW50IHdpdGggdGhhdCBjbGFzcy5cbiAqICAgLSBzZXQgLyB1bnNldDogQ29udGFpbiBpbnN0cnVjdGlvbnMgaG93IHRvIHNldCBhbmQgdW5zZXQgdGhlIGNvbW1hbmQuIEZvciBsaW5lIHR5cGUgY29tbWFuZHMsIGJvdGggY29uc2lzdCBvZiBhIHBhdHRlcm4gYW5kIHJlcGxhY2VtZW50IHRoYXQgXG4gKiAgICAgd2lsbCBiZSBhcHBsaWVkIHRvIGVhY2ggbGluZSAodXNpbmcgU3RyaW5nLnJlcGxhY2UpLiBGb3IgaW5saW5lIHR5cGUgY29tbWFuZHMsIHRoZSBzZXQgb2JqZWN0IGNvbnRhaW5zIGEgcHJlIGFuZCBwb3N0IHN0cmluZyB3aGljaCB3aWxsXG4gKiAgICAgYmUgaW5zZXJ0ZWQgYmVmb3JlIGFuZCBhZnRlciB0aGUgc2VsZWN0aW9uLiBUaGUgdW5zZXQgb2JqZWN0IGNvbnRhaW5zIGEgcHJlUGF0dGVybiBhbmQgYSBwb3N0UGF0dGVybi4gQm90aCBzaG91bGQgYmUgcmVndWxhciBleHByZXNzaW9ucyBhbmQgXG4gKiAgICAgdGhleSB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcnRpb24gb2YgdGhlIGxpbmUgYmVmb3JlIGFuZCBhZnRlciB0aGUgc2VsZWN0aW9uICh1c2luZyBTdHJpbmcucmVwbGFjZSwgd2l0aCBhbiBlbXB0eSByZXBsYWNlbWVudCBzdHJpbmcpLlxuICovXG5leHBvcnQgY29uc3QgY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmQ+ID0ge1xuICAvLyBSZXBsYWNlbWVudHMgZm9yIHVuc2V0IGZvciBpbmxpbmUgY29tbWFuZHMgYXJlICcnIGJ5IGRlZmF1bHRcbiAgYm9sZDoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVN0cm9uZycsIFxuICAgIHNldDoge3ByZTogJyoqJywgcG9zdDogJyoqJ30sIFxuICAgIHVuc2V0OiB7cHJlUGF0dGVybjogLyg/OlxcKlxcKnxfXykkLywgcG9zdFBhdHRlcm46IC9eKD86XFwqXFwqfF9fKS99XG4gIH0sIFxuICBpdGFsaWM6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1FbScsIFxuICAgIHNldDoge3ByZTogJyonLCBwb3N0OiAnKid9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46IC8oPzpcXCp8XykkLywgcG9zdFBhdHRlcm46IC9eKD86XFwqfF8pL31cbiAgfSxcbiAgY29kZToge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUNvZGUnLCBcbiAgICBzZXQ6IHtwcmU6ICdgJywgcG9zdDogJ2AnfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOiAvYCskLywgcG9zdFBhdHRlcm46IC9eYCsvfSAvLyBGSVhNRSB0aGlzIGRvZXNuJ3QgZW5zdXJlIGJhbGFuY2VkIGJhY2t0aWNrcyByaWdodCBub3dcbiAgfSwgXG4gIHN0cmlrZXRocm91Z2g6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1TdHJpa2V0aHJvdWdoJywgXG4gICAgc2V0OiB7cHJlOiAnfn4nLCBwb3N0OiAnfn4nfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOi9+fiQvLCBwb3N0UGF0dGVybjogL15+fi8gfVxuICB9LFxuICBoMToge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1IMScsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGgyOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgyJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoMzoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1IMycsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoNDoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1INCcsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg1OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg1JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjIyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoNjoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1INicsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjIyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICB1bDoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1VTCcsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnLSAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfVsrKi1dIHsxLDR9KSguKikkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIG9sOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTU9MJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICckIy4gJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM31cXGR7MSw5fVsuKV0gezEsNH0pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSwgXG4gIGJsb2NrcXVvdGU6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNQmxvY2txdW90ZScsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnPiAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfT5bIF0/KSguKikkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG59OyIsImltcG9ydCB7XG4gIGlubGluZUdyYW1tYXIsXG4gIGxpbmVHcmFtbWFyLFxuICBwdW5jdHVhdGlvbkxlYWRpbmcsXG4gIHB1bmN0dWF0aW9uVHJhaWxpbmcsXG4gIGh0bWxlc2NhcGUsXG4gIGh0bWxCbG9ja0dyYW1tYXIsXG4gIGNvbW1hbmRzLFxuICBIVE1MQmxvY2tSdWxlLFxuICBDb21tYW5kLFxuICBHcmFtbWFyUnVsZSxcbiAgY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hcixcbn0gZnJvbSBcIi4vZ3JhbW1hclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvclByb3BzIHtcbiAgZWxlbWVudD86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICBlZGl0b3I/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgY29udGVudD86IHN0cmluZztcbiAgdGV4dGFyZWE/OiBzdHJpbmcgfCBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICBjdXN0b21JbmxpbmVHcmFtbWFyPzogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+O1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3NpdGlvbiB7XG4gIHJvdzogbnVtYmVyO1xuICBjb2w6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5U3RhdGUge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHNlbGVjdGlvbjogUG9zaXRpb24gfCBudWxsO1xuICBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VFdmVudCB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgbGluZXNEaXJ0eTogYm9vbGVhbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvbkV2ZW50IHtcbiAgZm9jdXM6IFBvc2l0aW9uO1xuICBhbmNob3I6IFBvc2l0aW9uO1xuICBjb21tYW5kU3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcm9wRXZlbnQge1xuICBkYXRhVHJhbnNmZXI6IERhdGFUcmFuc2Zlcjtcbn1cblxudHlwZSBFdmVudFR5cGUgPSAnY2hhbmdlJyB8ICdzZWxlY3Rpb24nIHwgJ2Ryb3AnO1xudHlwZSBFdmVudEhhbmRsZXI8VD4gPSAoZXZlbnQ6IFQpID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3Ige1xuICBwdWJsaWMgZTogSFRNTERpdkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIHRleHRhcmVhOiBIVE1MVGV4dEFyZWFFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVFbGVtZW50czogTm9kZUxpc3RPZjxDaGlsZE5vZGU+IHwgSFRNTENvbGxlY3Rpb24gfCBDaGlsZE5vZGVbXSA9IFtdO1xuICBwdWJsaWMgbGluZVR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZUNhcHR1cmVzOiBSZWdFeHBFeGVjQXJyYXlbXSA9IFtdO1xuICBwdWJsaWMgbGluZVJlcGxhY2VtZW50czogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmtMYWJlbHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lRGlydHk6IGJvb2xlYW5bXSA9IFtdO1xuICBwdWJsaWMgbGFzdENvbW1hbmRTdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY3VzdG9tSW5saW5lR3JhbW1hcjogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+ID0ge307XG4gIHByaXZhdGUgbWVyZ2VkSW5saW5lR3JhbW1hcjogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+ID0gaW5saW5lR3JhbW1hcjtcbiAgcHJpdmF0ZSBoYXNGb2N1czogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgbGFzdFNlbGVjdGlvbjogeyBmb2N1czogUG9zaXRpb24gfCBudWxsOyBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCB9IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcGxhY2Vob2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgbGlzdGVuZXJzOiB7XG4gICAgY2hhbmdlOiBFdmVudEhhbmRsZXI8Q2hhbmdlRXZlbnQ+W107XG4gICAgc2VsZWN0aW9uOiBFdmVudEhhbmRsZXI8U2VsZWN0aW9uRXZlbnQ+W107XG4gICAgZHJvcDogRXZlbnRIYW5kbGVyPERyb3BFdmVudD5bXTtcbiAgfSA9IHtcbiAgICBjaGFuZ2U6IFtdLFxuICAgIHNlbGVjdGlvbjogW10sXG4gICAgZHJvcDogW10sXG4gIH07XG5cbiAgcHJpdmF0ZSB1bmRvU3RhY2s6IEhpc3RvcnlTdGF0ZVtdID0gW107XG4gIHByaXZhdGUgcmVkb1N0YWNrOiBIaXN0b3J5U3RhdGVbXSA9IFtdO1xuICBwcml2YXRlIGlzUmVzdG9yaW5nSGlzdG9yeTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIG1heEhpc3Rvcnk6IG51bWJlciA9IDEwMDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRWRpdG9yUHJvcHMgPSB7fSkge1xuICAgIHRoaXMuZSA9IG51bGw7XG4gICAgdGhpcy50ZXh0YXJlYSA9IG51bGw7XG4gICAgdGhpcy5saW5lcyA9IFtdO1xuICAgIHRoaXMubGluZUVsZW1lbnRzID0gW10gYXMgQ2hpbGROb2RlW107XG4gICAgdGhpcy5saW5lVHlwZXMgPSBbXTtcbiAgICB0aGlzLmxpbmVDYXB0dXJlcyA9IFtdO1xuICAgIHRoaXMubGluZVJlcGxhY2VtZW50cyA9IFtdO1xuICAgIHRoaXMubGlua0xhYmVscyA9IFtdO1xuICAgIHRoaXMubGluZURpcnR5ID0gW107XG4gICAgdGhpcy5sYXN0Q29tbWFuZFN0YXRlID0gbnVsbDtcbiAgICB0aGlzLmhhc0ZvY3VzID0gdHJ1ZTtcbiAgICB0aGlzLmxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgIHRoaXMuY3VzdG9tSW5saW5lR3JhbW1hciA9IHByb3BzLmN1c3RvbUlubGluZUdyYW1tYXIgfHwge307XG4gICAgdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyID0gY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hcih0aGlzLmN1c3RvbUlubGluZUdyYW1tYXIpO1xuXG4gICAgdGhpcy5saXN0ZW5lcnMgPSB7XG4gICAgICBjaGFuZ2U6IFtdLFxuICAgICAgc2VsZWN0aW9uOiBbXSxcbiAgICAgIGRyb3A6IFtdLFxuICAgIH07XG5cbiAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIHByb3BzLmVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5lbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gcHJvcHMuZWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLnRleHRhcmVhID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLnRleHRhcmVhKSBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICAgIH0gZWxzZSBpZiAocHJvcHMudGV4dGFyZWEpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBwcm9wcy50ZXh0YXJlYTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgaWYgKCFlbGVtZW50KSBlbGVtZW50ID0gdGhpcy50ZXh0YXJlYTtcbiAgICB9XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIilbMF07XG4gICAgfVxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQudGFnTmFtZSA9PT0gXCJURVhUQVJFQVwiKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gZWxlbWVudCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICAgICAgZWxlbWVudCA9IHRoaXMudGV4dGFyZWEucGFyZW50Tm9kZSBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgdGhpcy50ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgfVxuXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHByb3BzLnBsYWNlaG9sZGVyICE9PSB1bmRlZmluZWRcbiAgICAgID8gcHJvcHMucGxhY2Vob2xkZXJcbiAgICAgIDogdGhpcy50ZXh0YXJlYT8ucGxhY2Vob2xkZXIgfHwgdW5kZWZpbmVkO1xuXG4gICAgdGhpcy51bmRvU3RhY2sgPSBbXTtcbiAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gICAgdGhpcy5tYXhIaXN0b3J5ID0gMTAwO1xuXG4gICAgdGhpcy5jcmVhdGVFZGl0b3JFbGVtZW50KGVsZW1lbnQsIHByb3BzKTtcbiAgICB0aGlzLnNldENvbnRlbnQoXG4gICAgICB0eXBlb2YgcHJvcHMuY29udGVudCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IHByb3BzLmNvbnRlbnRcbiAgICAgICAgOiB0aGlzLnRleHRhcmVhXG4gICAgICAgID8gdGhpcy50ZXh0YXJlYS52YWx1ZVxuICAgICAgICA6IFwiIyBIZWxsbyBUaW55TURFIVxcbkVkaXQgKipoZXJlKipcIlxuICAgICk7XG4gICAgXG4gICAgdGhpcy5lIS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4gdGhpcy5oYW5kbGVVbmRvUmVkb0tleShlKSk7XG4gIH1cblxuICBnZXQgY2FuVW5kbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51bmRvU3RhY2subGVuZ3RoID49IDI7XG4gIH1cblxuICBnZXQgY2FuUmVkbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWRvU3RhY2subGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEhpc3RvcnkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSByZXR1cm47XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgdGhpcy5yZWRvU3RhY2sgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEN1cnJlbnRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuZG9TdGFjay5wdXNoKHtcbiAgICAgIGNvbnRlbnQ6IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgc2VsZWN0aW9uOiB0aGlzLmdldFNlbGVjdGlvbigpLFxuICAgICAgYW5jaG9yOiB0aGlzLmdldFNlbGVjdGlvbih0cnVlKSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy51bmRvU3RhY2subGVuZ3RoID4gdGhpcy5tYXhIaXN0b3J5KSB0aGlzLnVuZG9TdGFjay5zaGlmdCgpO1xuICB9XG5cbiAgcHVibGljIHVuZG8oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudW5kb1N0YWNrLmxlbmd0aCA8IDIpIHJldHVybjtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IHRydWU7XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMudW5kb1N0YWNrLnBvcCgpITtcbiAgICB0aGlzLnJlZG9TdGFjay5wdXNoKGN1cnJlbnQpO1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLnVuZG9TdGFja1t0aGlzLnVuZG9TdGFjay5sZW5ndGggLSAxXTtcbiAgICB0aGlzLnNldENvbnRlbnQocHJldi5jb250ZW50KTtcbiAgICBpZiAocHJldi5zZWxlY3Rpb24pIHRoaXMuc2V0U2VsZWN0aW9uKHByZXYuc2VsZWN0aW9uLCBwcmV2LmFuY2hvcik7XG4gICAgdGhpcy51bmRvU3RhY2sucG9wKCk7XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyByZWRvKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZWRvU3RhY2subGVuZ3RoKSByZXR1cm47XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSB0cnVlO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLnJlZG9TdGFjay5wb3AoKSE7XG4gICAgdGhpcy5zZXRDb250ZW50KG5leHQuY29udGVudCk7XG4gICAgaWYgKG5leHQuc2VsZWN0aW9uKSB0aGlzLnNldFNlbGVjdGlvbihuZXh0LnNlbGVjdGlvbiwgbmV4dC5hbmNob3IpO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVVuZG9SZWRvS2V5KGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpc01hYyA9IC9NYWN8aVBvZHxpUGhvbmV8aVBhZC8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pO1xuICAgIGNvbnN0IGN0cmwgPSBpc01hYyA/IGUubWV0YUtleSA6IGUuY3RybEtleTtcbiAgICBpZiAoY3RybCAmJiAhZS5hbHRLZXkpIHtcbiAgICAgIGlmIChlLmtleSA9PT0gXCJ6XCIgfHwgZS5rZXkgPT09IFwiWlwiKSB7XG4gICAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgdGhpcy5yZWRvKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51bmRvKCk7XG4gICAgICAgIH1cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gXCJ5XCIgfHwgZS5rZXkgPT09IFwiWVwiKSB7XG4gICAgICAgIHRoaXMucmVkbygpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFZGl0b3JFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwcm9wczogRWRpdG9yUHJvcHMpOiB2b2lkIHtcbiAgICBpZiAocHJvcHMgJiYgcHJvcHMuZWRpdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMuZWRpdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lZGl0b3IpIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lID0gcHJvcHMuZWRpdG9yIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIH1cblxuICAgIHRoaXMuZS5jbGFzc0xpc3QuYWRkKFwiVGlueU1ERVwiKTtcbiAgICB0aGlzLmUuY29udGVudEVkaXRhYmxlID0gXCJ0cnVlXCI7XG4gICAgdGhpcy5lLnN0eWxlLndoaXRlU3BhY2UgPSBcInByZS13cmFwXCI7XG4gICAgKHRoaXMuZS5zdHlsZSBhcyBhbnkpLndlYmtpdFVzZXJNb2RpZnkgPSBcInJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHlcIjtcblxuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLmUuc2V0QXR0cmlidXRlKFwiZGF0YS1wbGFjZWhvbGRlclwiLCB0aGlzLnBsYWNlaG9sZGVyKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZWRpdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50ZXh0YXJlYSAmJlxuICAgICAgICB0aGlzLnRleHRhcmVhLnBhcmVudE5vZGUgPT09IGVsZW1lbnQgJiZcbiAgICAgICAgdGhpcy50ZXh0YXJlYS5uZXh0U2libGluZ1xuICAgICAgKSB7XG4gICAgICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuZSwgdGhpcy50ZXh0YXJlYS5uZXh0U2libGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVJbnB1dEV2ZW50KGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZWlucHV0XCIsIChlKSA9PiB0aGlzLmhhbmRsZUJlZm9yZUlucHV0RXZlbnQoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25lbmRcIiwgKGUpID0+IHRoaXMuaGFuZGxlSW5wdXRFdmVudChlKSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLCAoZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuaGFzRm9jdXMpIHsgdGhpcy5oYW5kbGVTZWxlY3Rpb25DaGFuZ2VFdmVudChlKTsgfVxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsICgpID0+IHRoaXMuaGFzRm9jdXMgPSBmYWxzZSApO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgKCkgPT4gdGhpcy5oYXNGb2N1cyA9IHRydWUgKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcInBhc3RlXCIsIChlKSA9PiB0aGlzLmhhbmRsZVBhc3RlKGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImRyb3BcIiwgKGUpID0+IHRoaXMuaGFuZGxlRHJvcChlKSk7XG4gICAgdGhpcy5saW5lRWxlbWVudHMgPSB0aGlzLmUuY2hpbGROb2RlcztcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLmUhLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMuZSEucmVtb3ZlQ2hpbGQodGhpcy5lIS5maXJzdENoaWxkKTtcbiAgICB9XG4gICAgdGhpcy5saW5lcyA9IGNvbnRlbnQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIHRoaXMubGluZURpcnR5ID0gW107XG4gICAgZm9yIChsZXQgbGluZU51bSA9IDA7IGxpbmVOdW0gPCB0aGlzLmxpbmVzLmxlbmd0aDsgbGluZU51bSsrKSB7XG4gICAgICBsZXQgbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5lIS5hcHBlbmRDaGlsZChsZSk7XG4gICAgICB0aGlzLmxpbmVEaXJ0eS5wdXNoKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmxpbmVUeXBlcyA9IG5ldyBBcnJheSh0aGlzLmxpbmVzLmxlbmd0aCk7XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy51cGRhdGVQbGFjZWhvbGRlcigpO1xuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250ZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGluZXMuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUGxhY2Vob2xkZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBsYWNlaG9sZGVyIHx8ICF0aGlzLmUpIHJldHVybjtcbiAgICBpZiAodGhpcy5nZXRDb250ZW50KCkgPT09IFwiXCIpIHtcbiAgICAgIHRoaXMuZS5jbGFzc0xpc3QuYWRkKFwiVGlueU1ERV9lbXB0eVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lLmNsYXNzTGlzdC5yZW1vdmUoXCJUaW55TURFX2VtcHR5XCIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9ybWF0dGluZygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUxpbmVUeXBlcygpO1xuICAgIHRoaXMudXBkYXRlTGlua0xhYmVscygpO1xuICAgIHRoaXMuYXBwbHlMaW5lVHlwZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGlua0xhYmVscygpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmtMYWJlbHMgPSBbXTtcbiAgICBmb3IgKGxldCBsID0gMDsgbCA8IHRoaXMubGluZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgIGlmICh0aGlzLmxpbmVUeXBlc1tsXSA9PT0gXCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5saW5rTGFiZWxzLnB1c2goXG4gICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbbF1bXG4gICAgICAgICAgICBsaW5lR3JhbW1hci5UTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uLmxhYmVsUGxhY2Vob2xkZXIhXG4gICAgICAgICAgXVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZShyZXBsYWNlbWVudDogc3RyaW5nLCBjYXB0dXJlOiBSZWdFeHBFeGVjQXJyYXkpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlbWVudC5yZXBsYWNlKC8oXFwkezEsMn0pKFswLTldKS9nLCAoc3RyLCBwMSwgcDIpID0+IHtcbiAgICAgIGlmIChwMSA9PT0gXCIkXCIpIHJldHVybiBodG1sZXNjYXBlKGNhcHR1cmVbcGFyc2VJbnQocDIpXSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJUTUlubGluZUZvcm1hdHRlZFwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKFxuICAgICAgICAgIGNhcHR1cmVbcGFyc2VJbnQocDIpXVxuICAgICAgICApfTwvc3Bhbj5gO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUxpbmVUeXBlcygpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGlmICh0aGlzLmxpbmVEaXJ0eVtsaW5lTnVtXSkge1xuICAgICAgICBsZXQgY29udGVudEhUTUwgPSB0aGlzLnJlcGxhY2UoXG4gICAgICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2xpbmVOdW1dLFxuICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xpbmVOdW1dXG4gICAgICAgICk7XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lID0gdGhpcy5saW5lVHlwZXNbbGluZU51bV07XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkucmVtb3ZlQXR0cmlidXRlKFwic3R5bGVcIik7XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MID1cbiAgICAgICAgICBjb250ZW50SFRNTCA9PT0gXCJcIiA/IFwiPGJyIC8+XCIgOiBjb250ZW50SFRNTDtcbiAgICAgIH1cbiAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldC5saW5lTnVtID0gbGluZU51bS50b1N0cmluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZVR5cGVzKCk6IHZvaWQge1xuICAgIGxldCBjb2RlQmxvY2tUeXBlOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBjb2RlQmxvY2tTZXFMZW5ndGggPSAwO1xuICAgIGxldCBodG1sQmxvY2s6IEhUTUxCbG9ja1J1bGUgfCBmYWxzZSA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgbGluZU51bSA9IDA7IGxpbmVOdW0gPCB0aGlzLmxpbmVzLmxlbmd0aDsgbGluZU51bSsrKSB7XG4gICAgICBsZXQgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgbGV0IGxpbmVDYXB0dXJlOiBSZWdFeHBFeGVjQXJyYXkgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgbGV0IGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG5cbiAgICAgIC8vIENoZWNrIG9uZ29pbmcgY29kZSBibG9ja3NcbiAgICAgIGlmIChjb2RlQmxvY2tUeXBlID09PSBcIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlICYmIGNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGggPj0gY29kZUJsb2NrU2VxTGVuZ3RoKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZS5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgY29kZUJsb2NrVHlwZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUZlbmNlZENvZGVCYWNrdGlja1wiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNRmVuY2VkQ29kZVwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvZGVCbG9ja1R5cGUgPT09IFwiVE1Db2RlRmVuY2VUaWxkZU9wZW5cIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlVGlsZGVDbG9zZS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUgJiYgY2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aCA+PSBjb2RlQmxvY2tTZXFMZW5ndGgpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1Db2RlRmVuY2VUaWxkZUNsb3NlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VUaWxkZUNsb3NlLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICBjb2RlQmxvY2tUeXBlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNRmVuY2VkQ29kZVRpbGRlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1GZW5jZWRDb2RlXCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgSFRNTCBibG9jayB0eXBlc1xuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNUGFyYVwiICYmIGh0bWxCbG9jayA9PT0gZmFsc2UpIHtcbiAgICAgICAgZm9yIChsZXQgaHRtbEJsb2NrVHlwZSBvZiBodG1sQmxvY2tHcmFtbWFyKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZU51bV0ubWF0Y2goaHRtbEJsb2NrVHlwZS5zdGFydCkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaHRtbEJsb2NrVHlwZS5wYXJhSW50ZXJydXB0IHx8XG4gICAgICAgICAgICAgIGxpbmVOdW0gPT09IDAgfHxcbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1QYXJhXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1VTFwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNT0xcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTUJsb2NrcXVvdGVcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaHRtbEJsb2NrID0gaHRtbEJsb2NrVHlwZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChodG1sQmxvY2sgIT09IGZhbHNlKSB7XG4gICAgICAgIGxpbmVUeXBlID0gXCJUTUhUTUxCbG9ja1wiO1xuICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUhUTUxDb250ZW50XCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuXG4gICAgICAgIGlmIChodG1sQmxvY2suZW5kKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZU51bV0ubWF0Y2goaHRtbEJsb2NrLmVuZCkpIHtcbiAgICAgICAgICAgIGh0bWxCbG9jayA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBsaW5lTnVtID09PSB0aGlzLmxpbmVzLmxlbmd0aCAtIDEgfHxcbiAgICAgICAgICAgIHRoaXMubGluZXNbbGluZU51bSArIDFdLm1hdGNoKGxpbmVHcmFtbWFyLlRNQmxhbmtMaW5lLnJlZ2V4cClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGh0bWxCbG9jayA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBhbGwgcmVnZXhwcyBpZiB3ZSBoYXZlbid0IGFwcGxpZWQgb25lIG9mIHRoZSBjb2RlIGJsb2NrIHR5cGVzXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1QYXJhXCIpIHtcbiAgICAgICAgZm9yIChsZXQgdHlwZSBpbiBsaW5lR3JhbW1hcikge1xuICAgICAgICAgIGlmIChsaW5lR3JhbW1hclt0eXBlXS5yZWdleHApIHtcbiAgICAgICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXJbdHlwZV0ucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgICAgICBsaW5lVHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyW3R5cGVdLnJlcGxhY2VtZW50O1xuICAgICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSd2ZSBvcGVuZWQgYSBjb2RlIGJsb2NrLCByZW1lbWJlciB0aGF0XG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW5cIiB8fCBsaW5lVHlwZSA9PT0gXCJUTUNvZGVGZW5jZVRpbGRlT3BlblwiKSB7XG4gICAgICAgIGNvZGVCbG9ja1R5cGUgPSBsaW5lVHlwZTtcbiAgICAgICAgY29kZUJsb2NrU2VxTGVuZ3RoID0gbGluZUNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIC8vIExpbmsgcmVmZXJlbmNlIGRlZmluaXRpb24gYW5kIGluZGVudGVkIGNvZGUgY2FuJ3QgaW50ZXJydXB0IGEgcGFyYWdyYXBoXG4gICAgICBpZiAoXG4gICAgICAgIChsaW5lVHlwZSA9PT0gXCJUTUluZGVudGVkQ29kZVwiIHx8IGxpbmVUeXBlID09PSBcIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIikgJiZcbiAgICAgICAgbGluZU51bSA+IDAgJiZcbiAgICAgICAgKHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVBhcmFcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVVMXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1PTFwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNQmxvY2txdW90ZVwiKVxuICAgICAgKSB7XG4gICAgICAgIGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXRleHQgSDIgbWFya2VycyB0aGF0IGNhbiBhbHNvIGJlIGludGVycHJldGVkIGFzIGFuIGVtcHR5IGxpc3QgaXRlbSBzaG91bGQgYmUgcmVnYXJkZWQgYXMgc3VjaFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDJNYXJrZXJcIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNVUwucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNVUxcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTVVMLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXRleHQgaGVhZGluZ3MgYXJlIG9ubHkgdmFsaWQgaWYgcHJlY2VkZWQgYnkgYSBwYXJhZ3JhcGhcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgxTWFya2VyXCIgfHwgbGluZVR5cGUgPT09IFwiVE1TZXRleHRIMk1hcmtlclwiKSB7XG4gICAgICAgIGlmIChsaW5lTnVtID09PSAwIHx8IHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSAhPT0gXCJUTVBhcmFcIikge1xuICAgICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1IUi5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgICAgbGluZVR5cGUgPSBcIlRNSFJcIjtcbiAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNSFIucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBoZWFkaW5nTGluZSA9IGxpbmVOdW0gLSAxO1xuICAgICAgICAgIGNvbnN0IGhlYWRpbmdMaW5lVHlwZSA9IGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDFNYXJrZXJcIiA/IFwiVE1TZXRleHRIMVwiIDogXCJUTVNldGV4dEgyXCI7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSAhPT0gaGVhZGluZ0xpbmVUeXBlKSB7XG4gICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSA9IGhlYWRpbmdMaW5lVHlwZTtcbiAgICAgICAgICAgICAgdGhpcy5saW5lRGlydHlbaGVhZGluZ0xpbmVdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1toZWFkaW5nTGluZV0gPSBcIiQkMFwiO1xuICAgICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbaGVhZGluZ0xpbmVdID0gW3RoaXMubGluZXNbaGVhZGluZ0xpbmVdXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgICAgICBoZWFkaW5nTGluZS0tO1xuICAgICAgICAgIH0gd2hpbGUgKGhlYWRpbmdMaW5lID49IDAgJiYgdGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdID09PSBcIlRNUGFyYVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5saW5lVHlwZXNbbGluZU51bV0gIT09IGxpbmVUeXBlKSB7XG4gICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW1dID0gbGluZVR5cGU7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVOdW1dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1tsaW5lTnVtXSA9IGxpbmVSZXBsYWNlbWVudDtcbiAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xpbmVOdW1dID0gbGluZUNhcHR1cmU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGlvbihnZXRBbmNob3I6IGJvb2xlYW4gPSBmYWxzZSk6IFBvc2l0aW9uIHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGxldCBzdGFydE5vZGUgPSBnZXRBbmNob3IgPyBzZWxlY3Rpb24hLmFuY2hvck5vZGUgOiBzZWxlY3Rpb24hLmZvY3VzTm9kZTtcbiAgICBpZiAoIXN0YXJ0Tm9kZSkgcmV0dXJuIG51bGw7XG4gICAgbGV0IG9mZnNldCA9IGdldEFuY2hvciA/IHNlbGVjdGlvbiEuYW5jaG9yT2Zmc2V0IDogc2VsZWN0aW9uIS5mb2N1c09mZnNldDtcbiAgICBpZiAoc3RhcnROb2RlID09PSB0aGlzLmUpIHtcbiAgICAgIGlmIChvZmZzZXQgPCB0aGlzLmxpbmVzLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3c6IG9mZnNldCxcbiAgICAgICAgICBjb2w6IDAsXG4gICAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb3c6IG9mZnNldCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1tvZmZzZXQgLSAxXS5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBjb2wgPSB0aGlzLmNvbXB1dGVDb2x1bW4oc3RhcnROb2RlLCBvZmZzZXQpO1xuICAgIGlmIChjb2wgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgbGV0IG5vZGUgPSBzdGFydE5vZGU7XG4gICAgd2hpbGUgKG5vZGUucGFyZW50RWxlbWVudCAhPT0gdGhpcy5lKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnRFbGVtZW50ITtcbiAgICB9XG5cbiAgICBsZXQgcm93ID0gMDtcbiAgICAvLyBJZiB0aGUgbm9kZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBzaWJsaW5nLCBpdCBtdXN0IGJlIHRoZSBmaXJzdCBsaW5lXG4gICAgaWYgKG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICBjb25zdCBjdXJyZW50TGluZU51bURhdGEgPSAobm9kZSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldD8ubGluZU51bTtcbiAgICAgIGNvbnN0IHByZXZpb3VzTGluZU51bURhdGEgPSAobm9kZS5wcmV2aW91c1NpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQ/LmxpbmVOdW07XG5cbiAgICAgIGlmIChjdXJyZW50TGluZU51bURhdGEgJiYgcHJldmlvdXNMaW5lTnVtRGF0YSkge1xuICAgICAgICBjb25zdCBjdXJyZW50TGluZU51bSA9IHBhcnNlSW50KGN1cnJlbnRMaW5lTnVtRGF0YSk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzTGluZU51bSA9IHBhcnNlSW50KHByZXZpb3VzTGluZU51bURhdGEpO1xuICAgICAgICBpZiAoY3VycmVudExpbmVOdW0gPT09IHByZXZpb3VzTGluZU51bSArIDEpIHtcbiAgICAgICAgICByb3cgPSBjdXJyZW50TGluZU51bTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBsaW5lIGlzIE5PVCB0aGUgcHJldmlvdXMgbGluZSArIDEsIHRoZW4gZWl0aGVyIFxuICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGxpbmUgZ290IHNwbGl0IGluIHR3byBvciBtZXJnZWQgd2l0aCB0aGUgcHJldmlvdXMgbGluZVxuICAgICAgICAgIC8vIEVpdGhlciB3YXksIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIHJvdyBudW1iZXJcbiAgICAgICAgICB3aGlsZSAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICAgIHJvdysrO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyByb3c6IHJvdywgY29sOiBjb2wgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWxlY3Rpb24oZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIWZvY3VzKSByZXR1cm47XG5cbiAgICBsZXQgeyBub2RlOiBmb2N1c05vZGUsIG9mZnNldDogZm9jdXNPZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICBmb2N1cy5yb3csXG4gICAgICBmb2N1cy5jb2wsXG4gICAgICBhbmNob3IgPyBhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA+IGZvY3VzLmNvbCA6IGZhbHNlXG4gICAgKTtcbiAgICBsZXQgYW5jaG9yTm9kZSA9IG51bGwsXG4gICAgICBhbmNob3JPZmZzZXQgPSBudWxsO1xuICAgIGlmIChhbmNob3IgJiYgKGFuY2hvci5yb3cgIT09IGZvY3VzLnJvdyB8fCBhbmNob3IuY29sICE9PSBmb2N1cy5jb2wpKSB7XG4gICAgICBsZXQgeyBub2RlLCBvZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICAgIGFuY2hvci5yb3csXG4gICAgICAgIGFuY2hvci5jb2wsXG4gICAgICAgIGZvY3VzLnJvdyA9PT0gYW5jaG9yLnJvdyAmJiBmb2N1cy5jb2wgPiBhbmNob3IuY29sXG4gICAgICApO1xuICAgICAgYW5jaG9yTm9kZSA9IG5vZGU7XG4gICAgICBhbmNob3JPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgbGV0IHdpbmRvd1NlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICB3aW5kb3dTZWxlY3Rpb24hLnNldEJhc2VBbmRFeHRlbnQoXG4gICAgICBmb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCxcbiAgICAgIGFuY2hvck5vZGUgfHwgZm9jdXNOb2RlLFxuICAgICAgYW5jaG9yTm9kZSA/IGFuY2hvck9mZnNldCEgOiBmb2N1c09mZnNldFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVzdG9yZUxhc3RTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubGFzdFNlbGVjdGlvbiAmJiB0aGlzLmxhc3RTZWxlY3Rpb24uZm9jdXMpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHRoaXMubGFzdFNlbGVjdGlvbi5mb2N1cywgdGhpcy5sYXN0U2VsZWN0aW9uLmFuY2hvcik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHBhc3RlKHRleHQ6IHN0cmluZywgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBmb2N1czogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBsZXQgYmVnaW5uaW5nOiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb2N1cyA9IHtcbiAgICAgICAgcm93OiB0aGlzLmxpbmVzLmxlbmd0aCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1t0aGlzLmxpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBhbmNob3IgPSBmb2N1cztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fFxuICAgICAgKGFuY2hvci5yb3cgPT09IGZvY3VzLnJvdyAmJiBhbmNob3IuY29sIDw9IGZvY3VzLmNvbClcbiAgICApIHtcbiAgICAgIGJlZ2lubmluZyA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBiZWdpbm5pbmcgPSBmb2N1cztcbiAgICAgIGVuZCA9IGFuY2hvcjtcbiAgICB9XG4gICAgbGV0IGluc2VydGVkTGluZXMgPSB0ZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcbiAgICBsZXQgbGluZUJlZm9yZSA9IHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10uc3Vic3RyKDAsIGJlZ2lubmluZy5jb2wpO1xuICAgIGxldCBsaW5lRW5kID0gdGhpcy5saW5lc1tlbmQucm93XS5zdWJzdHIoZW5kLmNvbCk7XG4gICAgaW5zZXJ0ZWRMaW5lc1swXSA9IGxpbmVCZWZvcmUuY29uY2F0KGluc2VydGVkTGluZXNbMF0pO1xuICAgIGxldCBlbmRDb2xQb3MgPSBpbnNlcnRlZExpbmVzW2luc2VydGVkTGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoO1xuICAgIGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXSA9IGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXS5jb25jYXQobGluZUVuZCk7XG4gICAgdGhpcy5zcGxpY2VMaW5lcyhiZWdpbm5pbmcucm93LCAxICsgZW5kLnJvdyAtIGJlZ2lubmluZy5yb3csIGluc2VydGVkTGluZXMpO1xuICAgIGZvY3VzLnJvdyA9IGJlZ2lubmluZy5yb3cgKyBpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDE7XG4gICAgZm9jdXMuY29sID0gZW5kQ29sUG9zO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cmFwU2VsZWN0aW9uKHByZTogc3RyaW5nLCBwb3N0OiBzdHJpbmcsIGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMgfHwgIWFuY2hvciB8fCBmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHJldHVybjtcbiAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcblxuICAgIGNvbnN0IHN0YXJ0Q29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2w7XG4gICAgY29uc3QgZW5kQ29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGFuY2hvci5jb2wgOiBmb2N1cy5jb2w7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoMCwgc3RhcnRDb2wpLmNvbmNhdChwcmUpO1xuICAgIGNvbnN0IG1pZCA9IGVuZENvbCA9PT0gc3RhcnRDb2wgPyBcIlwiIDogdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihzdGFydENvbCwgZW5kQ29sIC0gc3RhcnRDb2wpO1xuICAgIGNvbnN0IHJpZ2h0ID0gcG9zdC5jb25jYXQodGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihlbmRDb2wpKTtcbiAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSBsZWZ0LmNvbmNhdChtaWQsIHJpZ2h0KTtcbiAgICBhbmNob3IuY29sID0gbGVmdC5sZW5ndGg7XG4gICAgZm9jdXMuY29sID0gYW5jaG9yLmNvbCArIG1pZC5sZW5ndGg7XG5cbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cywgYW5jaG9yKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRFdmVudExpc3RlbmVyPFQgZXh0ZW5kcyBFdmVudFR5cGU+KFxuICAgIHR5cGU6IFQsXG4gICAgbGlzdGVuZXI6IFQgZXh0ZW5kcyAnY2hhbmdlJyA/IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnc2VsZWN0aW9uJyA/IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnZHJvcCcgPyBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PiA6IG5ldmVyXG4gICk6IHZvaWQge1xuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86Y2hhbmdlfGlucHV0KSQvaSkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNoYW5nZS5wdXNoKGxpc3RlbmVyIGFzIEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4pO1xuICAgIH1cbiAgICBpZiAodHlwZS5tYXRjaCgvXig/OnNlbGVjdGlvbnxzZWxlY3Rpb25jaGFuZ2UpJC9pKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPFNlbGVjdGlvbkV2ZW50Pik7XG4gICAgfVxuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86ZHJvcCkkL2kpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5kcm9wLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPERyb3BFdmVudD4pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlyZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVBsYWNlaG9sZGVyKCk7XG4gICAgaWYgKCF0aGlzLnRleHRhcmVhICYmICF0aGlzLmxpc3RlbmVycy5jaGFuZ2UubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpO1xuICAgIGlmICh0aGlzLnRleHRhcmVhKSB0aGlzLnRleHRhcmVhLnZhbHVlID0gY29udGVudDtcbiAgICBmb3IgKGxldCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycy5jaGFuZ2UpIHtcbiAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgY29udGVudDogY29udGVudCxcbiAgICAgICAgbGluZXNEaXJ0eTogWy4uLnRoaXMubGluZURpcnR5XSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBiZWZvcmVpbnB1dCBoYW5kbGVyLCBleGNsdXNpdmVseSB0byBoYW5kbGUgaW5zZXJ0UGFyYWdyYXBoLFxuICAgKiBpbnNlcnRMaW5lQnJlYWssIGRlbGV0ZUNvbnRlbnRCYWNrd2FyZCwgYW5kIGRlbGV0ZUNvbnRlbnRGb3J3YXJkIGV2ZW50cy5cbiAgICogVGhlc2UgdXNlZCB0byBiZSBoYW5kbGVkIGluIHRoZSBpbnB1dCBldmVudCwgYnV0IHRoYXQgY2F1c2VkIGlzc3VlcyB3aXRoXG4gICAqIEZpcmVmb3ggd2hlcmUgdGhlIGlucHV0IGV2ZW50IHdvdWxkIGJlIHNvbWV0aW1lcyBub3QgYmUgZmlyZWQgZm9yIHRoZXNlXG4gICAqIGlucHV0IHR5cGVzLiBkZWxldGVDb250ZW50QmFja3dhcmQvRm9yd2FyZCBhcmUgYWxzbyBoYW5kbGVkIGhlcmUgdG8gZml4IGFcbiAgICogRmlyZWZveC1zcGVjaWZpYyBidWcgKCMxNTEpIHdoZXJlIGJhY2tzcGFjaW5nIG9uIGFuIGVtcHR5IGxpbmUgd291bGQgbm90XG4gICAqIHJlbW92ZSBpdCwgYmVjYXVzZSBGaXJlZm94IG9ubHkgcmVtb3ZlcyB0aGUgPGJyPiBpbnNpZGUgdGhlIGVtcHR5IDxkaXY+XG4gICAqIHJhdGhlciB0aGFuIG1lcmdpbmcgdGhlIGRpdnMsIGFuZCBmaXhOb2RlSGllcmFyY2h5KCkgd291bGQgdGhlbiByZS1hZGQgdGhlXG4gICAqIDxicj4sIHJlc3VsdGluZyBpbiBhIG5vLW9wLlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGlucHV0IGV2ZW50XG4gICAqIEByZXR1cm5zIG5vdGhpbmdcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlQmVmb3JlSW5wdXRFdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBiZWZvcmVJbnB1dEV2ZW50ID0gZXZlbnQgYXMgSW5wdXRFdmVudDtcblxuICAgIC8vIEhhbmRsZSBjcm9zcy1saW5lIGRlbGV0ZSBvcGVyYXRpb25zIChiYWNrc3BhY2UgYXQgY29sIDAsIGRlbGV0ZSBhdCBlbmQgb2YgbGluZSlcbiAgICBpZiAoXG4gICAgICBiZWZvcmVJbnB1dEV2ZW50LmlucHV0VHlwZSA9PT0gXCJkZWxldGVDb250ZW50QmFja3dhcmRcIiB8fFxuICAgICAgYmVmb3JlSW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiZGVsZXRlQ29udGVudEZvcndhcmRcIlxuICAgICkge1xuICAgICAgY29uc3QgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgICAgY29uc3QgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgICBpZiAoIWZvY3VzIHx8ICFhbmNob3IpIHJldHVybjtcblxuICAgICAgY29uc3QgaXNCYWNrc3BhY2UgPSBiZWZvcmVJbnB1dEV2ZW50LmlucHV0VHlwZSA9PT0gXCJkZWxldGVDb250ZW50QmFja3dhcmRcIjtcblxuICAgICAgLy8gT25seSBpbnRlcmNlcHQgY29sbGFwc2VkIHNlbGVjdGlvbnMgYXQgbGluZSBib3VuZGFyaWVzXG4gICAgICBpZiAoZm9jdXMucm93ID09PSBhbmNob3Iucm93ICYmIGZvY3VzLmNvbCA9PT0gYW5jaG9yLmNvbCkge1xuICAgICAgICBpZiAoaXNCYWNrc3BhY2UgJiYgZm9jdXMuY29sID09PSAwICYmIGZvY3VzLnJvdyA+IDApIHtcbiAgICAgICAgICAvLyBCYWNrc3BhY2UgYXQgc3RhcnQgb2YgbGluZTogbWVyZ2UgY3VycmVudCBsaW5lIGludG8gZW5kIG9mIHByZXZpb3VzXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgICAgICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgICAgICAgIGNvbnN0IHByZXZMaW5lTGVuID0gdGhpcy5saW5lc1tmb2N1cy5yb3cgLSAxXS5sZW5ndGg7XG4gICAgICAgICAgdGhpcy5saW5lc1tmb2N1cy5yb3cgLSAxXSA9IHRoaXMubGluZXNbZm9jdXMucm93IC0gMV0gKyB0aGlzLmxpbmVzW2ZvY3VzLnJvd107XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMucm93IC0gMV0gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc3BsaWNlTGluZXMoZm9jdXMucm93LCAxKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbih7IHJvdzogZm9jdXMucm93IC0gMSwgY29sOiBwcmV2TGluZUxlbiB9KTtcbiAgICAgICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0JhY2tzcGFjZSAmJiBmb2N1cy5jb2wgPT09IHRoaXMubGluZXNbZm9jdXMucm93XS5sZW5ndGggJiYgZm9jdXMucm93IDwgdGhpcy5saW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgLy8gRGVsZXRlIGF0IGVuZCBvZiBsaW5lOiBtZXJnZSBuZXh0IGxpbmUgaW50byBjdXJyZW50XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgICAgICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lTGVuID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLmxlbmd0aDtcbiAgICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gKyB0aGlzLmxpbmVzW2ZvY3VzLnJvdyArIDFdO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzLnJvd10gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc3BsaWNlTGluZXMoZm9jdXMucm93ICsgMSwgMSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oeyByb3c6IGZvY3VzLnJvdywgY29sOiBjdXJyZW50TGluZUxlbiB9KTtcbiAgICAgICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEZvciB3aXRoaW4tbGluZSBkZWxldGVzIG9yIG5vbi1jb2xsYXBzZWQgc2VsZWN0aW9ucywgbGV0IHRoZSBicm93c2VyIGhhbmRsZSBpdFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGJlZm9yZUlucHV0RXZlbnQuaW5wdXRUeXBlICE9PSBcImluc2VydFBhcmFncmFwaFwiICYmXG4gICAgICBiZWZvcmVJbnB1dEV2ZW50LmlucHV0VHlwZSAhPT0gXCJpbnNlcnRMaW5lQnJlYWtcIlxuICAgICkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcblxuICAgIGNvbnN0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcblxuICAgIGlmICghZm9jdXMgfHwgIWFuY2hvcikgcmV0dXJuO1xuICAgIFxuICAgIC8vIElmIGZvY3VzIGFuZCBhbmNob3IgYXJlIGluIGRpZmZlcmVudCBsaW5lcywgc2ltcGx5IHJlbW92ZSBldmVyeXRoaW5nIFxuICAgIC8vIGFmdGVyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlbGVjdGlvbiBhbmQgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvblxuICAgIC8vIGFuZCByZW1vdmUgYW55IGxpbmVzIGluIGJldHdlZW5cbiAgICBpZiAoZm9jdXMucm93ICE9PSBhbmNob3Iucm93KSB7XG4gICAgICBjb25zdCBiZWdpbm5pbmcgPSBmb2N1cy5yb3cgPCBhbmNob3Iucm93ID8gZm9jdXMgOiBhbmNob3I7XG4gICAgICBjb25zdCBlbmQgPSBmb2N1cy5yb3cgPCBhbmNob3Iucm93ID8gYW5jaG9yIDogZm9jdXM7XG4gICAgICB0aGlzLmxpbmVzW2JlZ2lubmluZy5yb3ddID0gdGhpcy5saW5lc1tiZWdpbm5pbmcucm93XS5zdWJzdHJpbmcoMCwgYmVnaW5uaW5nLmNvbCk7XG4gICAgICB0aGlzLmxpbmVzW2VuZC5yb3ddID0gdGhpcy5saW5lc1tlbmQucm93XS5zdWJzdHJpbmcoZW5kLmNvbCk7XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGJlZ2lubmluZy5yb3cgKyAxLCBlbmQucm93IC0gYmVnaW5uaW5nLnJvdyAtIDEpO1xuICAgICAgZm9jdXMucm93ID0gYmVnaW5uaW5nLnJvdyArIDE7XG4gICAgICBmb2N1cy5jb2wgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgY29udGludWFibGVUeXBlOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgICAgc3dpdGNoICh0aGlzLmxpbmVUeXBlc1tmb2N1cy5yb3ddKSB7XG4gICAgICAgIGNhc2UgXCJUTVVMXCI6XG4gICAgICAgICAgY29udGludWFibGVUeXBlID0gXCJUTVVMXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJUTU9MXCI6XG4gICAgICAgICAgY29udGludWFibGVUeXBlID0gXCJUTU9MXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJUTUluZGVudGVkQ29kZVwiOlxuICAgICAgICAgIGNvbnRpbnVhYmxlVHlwZSA9IFwiVE1JbmRlbnRlZENvZGVcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiBcbiAgICAgIGNvbnN0IGxpbmVCZWZvcmVCcmVhayA9IHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHJpbmcoMCwgZm9jdXMuY29sIDw9IGFuY2hvci5jb2wgPyBmb2N1cy5jb2wgOiBhbmNob3IuY29sKTtcbiAgICAgIGNvbnN0IGxpbmVBZnRlckJyZWFrID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cmluZyhmb2N1cy5jb2wgPD0gYW5jaG9yLmNvbCA/IGFuY2hvci5jb2wgOiBmb2N1cy5jb2wpO1xuICAgICAgdGhpcy5zcGxpY2VMaW5lcyhmb2N1cy5yb3csIDEsIFtsaW5lQmVmb3JlQnJlYWssIGxpbmVBZnRlckJyZWFrXSk7XG5cbiAgICAgIGZvY3VzLnJvdyArPSAxO1xuICAgICAgZm9jdXMuY29sID0gMDtcblxuICAgICAgaWYgKGNvbnRpbnVhYmxlVHlwZSkge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyW2NvbnRpbnVhYmxlVHlwZV0ucmVnZXhwLmV4ZWModGhpcy5saW5lc1tmb2N1cy5yb3cgLSAxXSk7XG4gICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgaWYgKGNhcHR1cmVbMl0pIHtcbiAgICAgICAgICAgIGlmIChjb250aW51YWJsZVR5cGUgPT09IFwiVE1PTFwiKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVbMV0gPSBjYXB0dXJlWzFdLnJlcGxhY2UoL1xcZHsxLDl9LywgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAocGFyc2VJbnQocmVzdWx0KSArIDEpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5saW5lc1tmb2N1cy5yb3ddID0gYCR7Y2FwdHVyZVsxXX0ke3RoaXMubGluZXNbZm9jdXMucm93XX1gO1xuICAgICAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMucm93XSA9IHRydWU7XG4gICAgICAgICAgICBmb2N1cy5jb2wgPSBjYXB0dXJlWzFdLmxlbmd0aDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5saW5lc1tmb2N1cy5yb3cgLSAxXSA9IFwiXCI7XG4gICAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3cgLSAxXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcblxuICAgIC8vIFNjcm9sbCB0aGUgZWxlbWVudCBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gaW50byB2aWV3XG4gICAgaWYgKGZvY3VzICYmIGZvY3VzLnJvdyA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2ZvY3VzLnJvd10gYXMgSFRNTEVsZW1lbnQpLnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgYmxvY2s6ICduZWFyZXN0JyxcbiAgICAgICAgaW5saW5lOiAnbmVhcmVzdCdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJbnB1dEV2ZW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0RXZlbnQgPSBldmVudCBhcyBJbnB1dEV2ZW50O1xuICAgIGlmIChpbnB1dEV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRDb21wb3NpdGlvblRleHRcIikgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcblxuICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICBpZiAoKGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydFBhcmFncmFwaFwiIHx8IGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydExpbmVCcmVha1wiKSAmJiBmb2N1cykge1xuICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIHNpbmNlIHRoZXNlIGFyZSBoYW5kbGVkIGJ5IHRoZSBiZWZvcmVpbnB1dCBoYW5kbGVyXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5lIS5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuZSEuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJUTUJsYW5rTGluZVwiPjxicj48L2Rpdj4nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maXhOb2RlSGllcmFyY2h5KCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUxpbmVDb250ZW50c0FuZEZvcm1hdHRpbmcoKTtcbiAgICB9XG4gICAgaWYgKGZvY3VzKSB7XG4gICAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdGlvbkNoYW5nZUV2ZW50KF9lOiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZmlyZVNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGxldCB0ZXh0ID0gKGV2ZW50IGFzIGFueSkuY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwidGV4dC9wbGFpblwiKTtcbiAgICB0aGlzLnBhc3RlKHRleHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZmlyZURyb3AoZXZlbnQuZGF0YVRyYW5zZmVyISk7XG4gIH1cblxuICBwdWJsaWMgcHJvY2Vzc0lubGluZVN0eWxlcyhvcmlnaW5hbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICBsZXQgc3RhY2s6IEFycmF5PHtkZWxpbWl0ZXI6IHN0cmluZywgZGVsaW1TdHJpbmc6IHN0cmluZywgY291bnQ6IG51bWJlciwgb3V0cHV0OiBzdHJpbmd9PiA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZztcblxuICAgIG91dGVyOiB3aGlsZSAoc3RyaW5nKSB7XG4gICAgICAvLyBQcm9jZXNzIHNpbXBsZSBydWxlcyAobm9uLWRlbGltaXRlcilcbiAgICAgIGZvciAobGV0IHJ1bGUgb2YgW1wiZXNjYXBlXCIsIFwiY29kZVwiLCBcImF1dG9saW5rXCIsIFwiaHRtbFwiXSkge1xuICAgICAgICBpZiAodGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdKSB7XG4gICAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVwbGFjZW1lbnQucmVwbGFjZSgvXFwkKFsxLTldKS9nLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUHJvY2VzcyBjdXN0b20gaW5saW5lIGdyYW1tYXIgcnVsZXNcbiAgICAgIGZvciAobGV0IHJ1bGUgaW4gdGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyKSB7XG4gICAgICAgIGlmIChydWxlICE9PSBcImVzY2FwZVwiICYmIHJ1bGUgIT09IFwiY29kZVwiICYmIHJ1bGUgIT09IFwiYXV0b2xpbmtcIiAmJiBydWxlICE9PSBcImh0bWxcIiAmJiBydWxlICE9PSBcImxpbmtPcGVuXCIgJiYgcnVsZSAhPT0gXCJpbWFnZU9wZW5cIiAmJiBydWxlICE9PSBcImxpbmtMYWJlbFwiICYmIHJ1bGUgIT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVwbGFjZW1lbnQucmVwbGFjZSgvXFwkKFsxLTldKS9nLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGxpbmtzIC8gaW1hZ2VzXG4gICAgICBsZXQgcG90ZW50aWFsTGluayA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua09wZW4ucmVnZXhwKTtcbiAgICAgIGxldCBwb3RlbnRpYWxJbWFnZSA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuaW1hZ2VPcGVuLnJlZ2V4cCk7XG4gICAgICBpZiAocG90ZW50aWFsSW1hZ2UgfHwgcG90ZW50aWFsTGluaykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5wYXJzZUxpbmtPckltYWdlKHN0cmluZywgISFwb3RlbnRpYWxJbWFnZSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtwcm9jZXNzZWR9JHtyZXN1bHQub3V0cHV0fWA7XG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihyZXN1bHQuY2hhckNvdW50KTtcbiAgICAgICAgICBvZmZzZXQgKz0gcmVzdWx0LmNoYXJDb3VudDtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgZW0gLyBzdHJvbmcgZGVsaW1pdGVyc1xuICAgICAgbGV0IGNhcCA9IC8oXlxcKispfCheXyspLy5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIGxldCBkZWxpbUNvdW50ID0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGVsaW1TdHJpbmcgPSBjYXBbMF07XG4gICAgICAgIGNvbnN0IGN1cnJlbnREZWxpbWl0ZXIgPSBjYXBbMF1bMF07XG5cbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgICBjb25zdCBwcmVjZWRpbmcgPSBvZmZzZXQgPiAwID8gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKDAsIG9mZnNldCkgOiBcIiBcIjtcbiAgICAgICAgY29uc3QgZm9sbG93aW5nID0gb2Zmc2V0ICsgY2FwWzBdLmxlbmd0aCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IHN0cmluZyA6IFwiIFwiO1xuXG4gICAgICAgIGNvbnN0IHB1bmN0dWF0aW9uRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaChwdW5jdHVhdGlvbkxlYWRpbmcpO1xuICAgICAgICBjb25zdCBwdW5jdHVhdGlvblByZWNlZGVzID0gcHJlY2VkaW5nLm1hdGNoKHB1bmN0dWF0aW9uVHJhaWxpbmcpO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaCgvXlxccy8pO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlUHJlY2VkZXMgPSBwcmVjZWRpbmcubWF0Y2goL1xccyQvKTtcblxuICAgICAgICBsZXQgY2FuT3BlbiA9ICF3aGl0ZXNwYWNlRm9sbG93cyAmJiAoIXB1bmN0dWF0aW9uRm9sbG93cyB8fCAhIXdoaXRlc3BhY2VQcmVjZWRlcyB8fCAhIXB1bmN0dWF0aW9uUHJlY2VkZXMpO1xuICAgICAgICBsZXQgY2FuQ2xvc2UgPSAhd2hpdGVzcGFjZVByZWNlZGVzICYmICghcHVuY3R1YXRpb25QcmVjZWRlcyB8fCAhIXdoaXRlc3BhY2VGb2xsb3dzIHx8ICEhcHVuY3R1YXRpb25Gb2xsb3dzKTtcblxuICAgICAgICBpZiAoY3VycmVudERlbGltaXRlciA9PT0gXCJfXCIgJiYgY2FuT3BlbiAmJiBjYW5DbG9zZSkge1xuICAgICAgICAgIGNhbk9wZW4gPSAhIXB1bmN0dWF0aW9uUHJlY2VkZXM7XG4gICAgICAgICAgY2FuQ2xvc2UgPSAhIXB1bmN0dWF0aW9uRm9sbG93cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYW5DbG9zZSkge1xuICAgICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChkZWxpbUNvdW50ICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgICBpZiAoc3RhY2tbc3RhY2tQb2ludGVyXS5kZWxpbWl0ZXIgPT09IGN1cnJlbnREZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZGVsaW1Db3VudCA+PSAyICYmIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgPj0gMikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn0ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPjxzdHJvbmcgY2xhc3M9XCJUTVN0cm9uZ1wiPiR7cHJvY2Vzc2VkfTwvc3Ryb25nPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfSR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBkZWxpbUNvdW50IC09IDI7XG4gICAgICAgICAgICAgICAgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCAtPSAyO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+PGVtIGNsYXNzPVwiVE1FbVwiPiR7cHJvY2Vzc2VkfTwvZW0+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgZGVsaW1Db3VudCAtPSAxO1xuICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgLT0gMTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCAmJiBjYW5PcGVuKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IGN1cnJlbnREZWxpbWl0ZXIsXG4gICAgICAgICAgICBkZWxpbVN0cmluZzogZGVsaW1TdHJpbmcsXG4gICAgICAgICAgICBjb3VudDogZGVsaW1Db3VudCxcbiAgICAgICAgICAgIG91dHB1dDogcHJvY2Vzc2VkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb2Nlc3NlZCA9IFwiXCI7XG4gICAgICAgICAgZGVsaW1Db3VudCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCkge1xuICAgICAgICAgIHByb2Nlc3NlZCA9IGAke3Byb2Nlc3NlZH0ke2RlbGltU3RyaW5nLnN1YnN0cigwLCBkZWxpbUNvdW50KX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igc3RyaWtldGhyb3VnaCBkZWxpbWl0ZXJcbiAgICAgIGNhcCA9IC9efn4vLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgbGV0IGNvbnN1bWVkID0gZmFsc2U7XG4gICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoIWNvbnN1bWVkICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgaWYgKHN0YWNrW3N0YWNrUG9pbnRlcl0uZGVsaW1pdGVyID09PSBcIn5cIikge1xuICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+PGRlbCBjbGFzcz1cIlRNU3RyaWtldGhyb3VnaFwiPiR7cHJvY2Vzc2VkfTwvZGVsPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+YDtcbiAgICAgICAgICAgIGxldCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgY29uc3VtZWQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbnN1bWVkKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IFwiflwiLFxuICAgICAgICAgICAgZGVsaW1TdHJpbmc6IFwifn5cIixcbiAgICAgICAgICAgIGNvdW50OiAyLFxuICAgICAgICAgICAgb3V0cHV0OiBwcm9jZXNzZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VzcyAnZGVmYXVsdCcgcnVsZVxuICAgICAgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmRlZmF1bHQucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZGVmYXVsdC5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG4gICAgICB0aHJvdyBcIkluZmluaXRlIGxvb3AhXCI7XG4gICAgfVxuXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUNvbHVtbihzdGFydE5vZGU6IE5vZGUsIG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgbGV0IG5vZGUgPSBzdGFydE5vZGU7XG4gICAgbGV0IGNvbDogbnVtYmVyO1xuICAgIHdoaWxlIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHN0YXJ0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgfHwgb2Zmc2V0ID09PSAwKSB7XG4gICAgICBjb2wgPSBvZmZzZXQ7XG4gICAgICBub2RlID0gc3RhcnROb2RlO1xuICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZS5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgY29sID0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2wgPSAwO1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICB9XG4gICAgd2hpbGUgKG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICBjb2wgKz0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSBhcyB1bmtub3duIGFzIENoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZU5vZGVBbmRPZmZzZXQocm93OiBudW1iZXIsIGNvbDogbnVtYmVyLCBiaW5kUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZSk6IHtub2RlOiBOb2RlLCBvZmZzZXQ6IG51bWJlcn0ge1xuICAgIGlmIChyb3cgPj0gdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByb3cgPSB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgY29sID0gdGhpcy5saW5lc1tyb3ddLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGNvbCA+IHRoaXMubGluZXNbcm93XS5sZW5ndGgpIHtcbiAgICAgIGNvbCA9IHRoaXMubGluZXNbcm93XS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmxpbmVFbGVtZW50c1tyb3ddIGFzIEhUTUxFbGVtZW50O1xuICAgIGxldCBub2RlID0gcGFyZW50Tm9kZS5maXJzdENoaWxkO1xuXG4gICAgbGV0IGNoaWxkcmVuQ29tcGxldGUgPSBmYWxzZTtcbiAgICBsZXQgcnYgPSB7XG4gICAgICBub2RlOiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPyBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgOiBwYXJlbnROb2RlLFxuICAgICAgb2Zmc2V0OiAwLFxuICAgIH07XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gcGFyZW50Tm9kZSkge1xuICAgICAgaWYgKCFjaGlsZHJlbkNvbXBsZXRlICYmIG5vZGUhLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICBpZiAobm9kZSEubm9kZVZhbHVlIS5sZW5ndGggPj0gY29sKSB7XG4gICAgICAgICAgaWYgKGJpbmRSaWdodCAmJiBub2RlIS5ub2RlVmFsdWUhLmxlbmd0aCA9PT0gY29sKSB7XG4gICAgICAgICAgICBydiA9IHsgbm9kZTogbm9kZSEsIG9mZnNldDogY29sIH07XG4gICAgICAgICAgICBjb2wgPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBub2RlISwgb2Zmc2V0OiBjb2wgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sIC09IG5vZGUhLm5vZGVWYWx1ZSEubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWNoaWxkcmVuQ29tcGxldGUgJiYgbm9kZSEuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlID0gbm9kZSEuZmlyc3RDaGlsZDtcbiAgICAgIH0gZWxzZSBpZiAobm9kZSEubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgY2hpbGRyZW5Db21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBub2RlID0gbm9kZSEubmV4dFNpYmxpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgbm9kZSA9IG5vZGUhLnBhcmVudE5vZGUgYXMgdW5rbm93biBhcyBDaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ2O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lQ29udGVudHNBbmRGb3JtYXR0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbmVDb250ZW50cygpO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckRpcnR5RmxhZygpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmVEaXJ0eSA9IG5ldyBBcnJheSh0aGlzLmxpbmVzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVEaXJ0eS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5saW5lRGlydHlbaV0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVDb250ZW50cygpOiB2b2lkIHtcbiAgICBsZXQgbGluZURlbHRhID0gdGhpcy5lIS5jaGlsZEVsZW1lbnRDb3VudCAtIHRoaXMubGluZXMubGVuZ3RoO1xuICAgIGlmIChsaW5lRGVsdGEpIHtcbiAgICAgIGxldCBmaXJzdENoYW5nZWRMaW5lID0gMDtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgZmlyc3RDaGFuZ2VkTGluZSA8PSB0aGlzLmxpbmVzLmxlbmd0aCAmJlxuICAgICAgICBmaXJzdENoYW5nZWRMaW5lIDw9IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSAmJlxuICAgICAgICB0aGlzLmxpbmVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLnRleHRDb250ZW50ICYmXG4gICAgICAgIHRoaXMubGluZVR5cGVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZVxuICAgICAgKSB7XG4gICAgICAgIGZpcnN0Q2hhbmdlZExpbmUrKztcbiAgICAgIH1cblxuICAgICAgbGV0IGxhc3RDaGFuZ2VkTGluZSA9IC0xO1xuICAgICAgd2hpbGUgKFxuICAgICAgICAtbGFzdENoYW5nZWRMaW5lIDwgdGhpcy5saW5lcy5sZW5ndGggJiZcbiAgICAgICAgLWxhc3RDaGFuZ2VkTGluZSA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVzW3RoaXMubGluZXMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSA9PT1cbiAgICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgJiZcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbdGhpcy5saW5lcy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdID09PVxuICAgICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1t0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWVcbiAgICAgICkge1xuICAgICAgICBsYXN0Q2hhbmdlZExpbmUtLTtcbiAgICAgIH1cblxuICAgICAgbGV0IGxpbmVzVG9EZWxldGUgPSB0aGlzLmxpbmVzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZSArIDEgLSBmaXJzdENoYW5nZWRMaW5lO1xuICAgICAgaWYgKGxpbmVzVG9EZWxldGUgPCAtbGluZURlbHRhKSBsaW5lc1RvRGVsZXRlID0gLWxpbmVEZWx0YTtcbiAgICAgIGlmIChsaW5lc1RvRGVsZXRlIDwgMCkgbGluZXNUb0RlbGV0ZSA9IDA7XG5cbiAgICAgIGxldCBsaW5lc1RvQWRkID0gW107XG4gICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGxpbmVzVG9EZWxldGUgKyBsaW5lRGVsdGE7IGwrKykge1xuICAgICAgICBsaW5lc1RvQWRkLnB1c2goKHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmUgKyBsXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgfHwgXCJcIik7XG4gICAgICB9XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGZpcnN0Q2hhbmdlZExpbmUsIGxpbmVzVG9EZWxldGUsIGxpbmVzVG9BZGQsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgbGluZSA9IDA7IGxpbmUgPCB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGg7IGxpbmUrKykge1xuICAgICAgICBsZXQgZSA9IHRoaXMubGluZUVsZW1lbnRzW2xpbmVdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBsZXQgY3QgPSBlLnRleHRDb250ZW50IHx8IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVdICE9PSBjdCB8fCB0aGlzLmxpbmVUeXBlc1tsaW5lXSAhPT0gZS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gY3Q7XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZV0gPSBlLmNsYXNzTmFtZTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNwbGljZUxpbmVzKFxuICAgIHN0YXJ0TGluZTogbnVtYmVyLFxuICAgIGxpbmVzVG9EZWxldGU6IG51bWJlciA9IDAsXG4gICAgbGluZXNUb0luc2VydDogc3RyaW5nW10gPSBbXSxcbiAgICBhZGp1c3RMaW5lRWxlbWVudHM6IGJvb2xlYW4gPSB0cnVlXG4gICk6IHZvaWQge1xuICAgIGlmIChhZGp1c3RMaW5lRWxlbWVudHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0RlbGV0ZTsgaSsrKSB7XG4gICAgICAgIHRoaXMuZSEucmVtb3ZlQ2hpbGQodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpbnNlcnRlZEJsYW5rID0gW107XG4gICAgbGV0IGluc2VydGVkRGlydHkgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0luc2VydC5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0ZWRCbGFuay5wdXNoKFwiXCIpO1xuICAgICAgaW5zZXJ0ZWREaXJ0eS5wdXNoKHRydWUpO1xuICAgICAgaWYgKGFkanVzdExpbmVFbGVtZW50cykge1xuICAgICAgICBpZiAodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pXG4gICAgICAgICAgdGhpcy5lIS5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgdGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgICBlbHNlIHRoaXMuZSEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5saW5lcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5saW5lc1RvSW5zZXJ0KTtcbiAgICB0aGlzLmxpbmVUeXBlcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZEJsYW5rKTtcbiAgICB0aGlzLmxpbmVEaXJ0eS5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZERpcnR5KTtcbiAgfVxuXG4gIHByaXZhdGUgZml4Tm9kZUhpZXJhcmNoeSgpOiB2b2lkIHtcbiAgICBjb25zdCBvcmlnaW5hbENoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLmUhLmNoaWxkTm9kZXMpO1xuXG4gICAgY29uc3QgcmVwbGFjZUNoaWxkID0gKGNoaWxkOiBOb2RlLCAuLi5uZXdDaGlsZHJlbjogTm9kZVtdKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBjaGlsZC5wYXJlbnRFbGVtZW50ITtcbiAgICAgIGNvbnN0IG5leHRTaWJsaW5nID0gY2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgbmV3Q2hpbGRyZW4uZm9yRWFjaCgobmV3Q2hpbGQpID0+XG4gICAgICAgIG5leHRTaWJsaW5nID8gcGFyZW50Lmluc2VydEJlZm9yZShuZXdDaGlsZCwgbmV4dFNpYmxpbmcpIDogcGFyZW50LmFwcGVuZENoaWxkKG5ld0NoaWxkKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgb3JpZ2luYWxDaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSB8fCAoY2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgIT09IFwiRElWXCIpIHtcbiAgICAgICAgY29uc3QgZGl2V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHJlcGxhY2VDaGlsZChjaGlsZCwgZGl2V3JhcHBlcik7XG4gICAgICAgIGRpdldyYXBwZXIuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZ3JhbmRDaGlsZHJlbiA9IEFycmF5LmZyb20oY2hpbGQuY2hpbGROb2Rlcyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBncmFuZENoaWxkcmVuLnNvbWUoXG4gICAgICAgICAgICAoZ3JhbmRDaGlsZCkgPT5cbiAgICAgICAgICAgICAgZ3JhbmRDaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgKGdyYW5kQ2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgPT09IFwiRElWXCJcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiByZXBsYWNlQ2hpbGQoY2hpbGQsIC4uLmdyYW5kQ2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcGFyc2VMaW5rT3JJbWFnZShvcmlnaW5hbFN0cmluZzogc3RyaW5nLCBpc0ltYWdlOiBib29sZWFuKToge291dHB1dDogc3RyaW5nLCBjaGFyQ291bnQ6IG51bWJlcn0gfCBmYWxzZSB7XG4gICAgLy8gU2tpcCB0aGUgb3BlbmluZyBicmFja2V0XG4gICAgbGV0IHRleHRPZmZzZXQgPSBpc0ltYWdlID8gMiA6IDE7XG4gICAgbGV0IG9wZW5lciA9IG9yaWdpbmFsU3RyaW5nLnN1YnN0cigwLCB0ZXh0T2Zmc2V0KTtcbiAgICBsZXQgdHlwZSA9IGlzSW1hZ2UgPyBcIlRNSW1hZ2VcIiA6IFwiVE1MaW5rXCI7XG4gICAgbGV0IGN1cnJlbnRPZmZzZXQgPSB0ZXh0T2Zmc2V0O1xuXG4gICAgbGV0IGJyYWNrZXRMZXZlbCA9IDE7XG4gICAgbGV0IGxpbmtUZXh0OiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBsaW5rUmVmOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBsaW5rTGFiZWw6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGxpbmtEZXRhaWxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGV4dE91dGVyOiB3aGlsZSAoXG4gICAgICBjdXJyZW50T2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoICYmXG4gICAgICBsaW5rVGV4dCA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCk7XG5cbiAgICAgIC8vIENhcHR1cmUgYW55IGVzY2FwZXMgYW5kIGNvZGUgYmxvY2tzIGF0IGN1cnJlbnQgcG9zaXRpb25cbiAgICAgIGZvciAobGV0IHJ1bGUgb2YgW1wiZXNjYXBlXCIsIFwiY29kZVwiLCBcImF1dG9saW5rXCIsIFwiaHRtbFwiXSkge1xuICAgICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBpbWFnZVxuICAgICAgaWYgKHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuaW1hZ2VPcGVuLnJlZ2V4cCkpIHtcbiAgICAgICAgYnJhY2tldExldmVsKys7XG4gICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gMjtcbiAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgbGlua1xuICAgICAgaWYgKHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua09wZW4ucmVnZXhwKSkge1xuICAgICAgICBicmFja2V0TGV2ZWwrKztcbiAgICAgICAgaWYgKCFpc0ltYWdlKSB7XG4gICAgICAgICAgaWYgKHRoaXMucGFyc2VMaW5rT3JJbWFnZShzdHJpbmcsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IDE7XG4gICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGNsb3NpbmcgYnJhY2tldFxuICAgICAgaWYgKHN0cmluZy5tYXRjaCgvXlxcXS8pKSB7XG4gICAgICAgIGJyYWNrZXRMZXZlbC0tO1xuICAgICAgICBpZiAoYnJhY2tldExldmVsID09PSAwKSB7XG4gICAgICAgICAgbGlua1RleHQgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIodGV4dE9mZnNldCwgY3VycmVudE9mZnNldCAtIHRleHRPZmZzZXQpO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm90aGluZyBtYXRjaGVzLCBwcm9jZWVkIHRvIG5leHQgY2hhclxuICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgIH1cblxuICAgIC8vIERpZCB3ZSBmaW5kIGEgbGluayB0ZXh0P1xuICAgIGlmIChsaW5rVGV4dCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIHdoYXQgdHlwZSBvZiBsaW5rIHRoaXMgaXNcbiAgICBsZXQgbmV4dENoYXIgPSBjdXJyZW50T2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoID8gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQsIDEpIDogXCJcIjtcblxuICAgIC8vIFJFRkVSRU5DRSBMSU5LU1xuICAgIGlmIChuZXh0Q2hhciA9PT0gXCJbXCIpIHtcbiAgICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCk7XG4gICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtMYWJlbC5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIGxpbmtMYWJlbC5wdXNoKGNhcFsxXSwgY2FwWzJdLCBjYXBbM10pO1xuICAgICAgICBpZiAoY2FwW3RoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rTGFiZWwubGFiZWxQbGFjZWhvbGRlciFdKSB7XG4gICAgICAgICAgbGlua1JlZiA9IGNhcFt0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua0xhYmVsLmxhYmVsUGxhY2Vob2xkZXIhXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5rUmVmID0gbGlua1RleHQudHJpbSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0Q2hhciAhPT0gXCIoXCIpIHtcbiAgICAgIC8vIFNob3J0Y3V0IHJlZiBsaW5rXG4gICAgICBsaW5rUmVmID0gbGlua1RleHQudHJpbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJTkxJTkUgTElOS1NcbiAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgIGxldCBwYXJlbnRoZXNpc0xldmVsID0gMTtcblxuICAgICAgaW5saW5lT3V0ZXI6IHdoaWxlIChjdXJyZW50T2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoICYmIHBhcmVudGhlc2lzTGV2ZWwgPiAwKSB7XG4gICAgICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCk7XG5cbiAgICAgICAgLy8gUHJvY2VzcyB3aGl0ZXNwYWNlXG4gICAgICAgIGxldCBjYXAgPSAvXlxccysvLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlsc1swXS5tYXRjaCgvPC8pKSB7XG4gICAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCAhPT0gMSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s2XSA9IGxpbmtEZXRhaWxzWzZdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBiYWNrc2xhc2ggZXNjYXBlc1xuICAgICAgICBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZXNjYXBlLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIG9wZW5pbmcgYW5nbGUgYnJhY2tldFxuICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoIDwgMiAmJiBzdHJpbmcubWF0Y2goL148LykpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSAwKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzBdID0gbGlua0RldGFpbHNbMF0uY29uY2F0KFwiPFwiKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGNsb3NpbmcgYW5nbGUgYnJhY2tldFxuICAgICAgICBpZiAoKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDIpICYmIHN0cmluZy5tYXRjaCgvXj4vKSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDEpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIj5cIik7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBub24tcGFyZW50aGVzaXMgZGVsaW1pdGVyIGZvciB0aXRsZVxuICAgICAgICBjYXAgPSAvXltcIiddLy5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXAgJiYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMCB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDEgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA0KSkge1xuICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA0KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FwICYmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA2KSAmJiBsaW5rRGV0YWlsc1s0XSA9PT0gY2FwWzBdKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBvcGVuaW5nIHBhcmVudGhlc2lzXG4gICAgICAgIGlmIChzdHJpbmcubWF0Y2goL15cXCgvKSkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KFwiKFwiKTtcbiAgICAgICAgICAgICAgaWYgKCFsaW5rRGV0YWlsc1swXS5tYXRjaCgvPCQvKSkgcGFyZW50aGVzaXNMZXZlbCsrO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIihcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHNbNF0gPT09IFwiKFwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KFwiKFwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgY2xvc2luZyBwYXJlbnRoZXNpc1xuICAgICAgICBpZiAoc3RyaW5nLm1hdGNoKC9eXFwpLykpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCAyKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgaWYgKCFsaW5rRGV0YWlsc1swXS5tYXRjaCgvPCQvKSkgcGFyZW50aGVzaXNMZXZlbC0tO1xuICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KFwiKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgICAgIGlmIChsaW5rRGV0YWlsc1s0XSA9PT0gXCIoXCIpIHtcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIilcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1KSBsaW5rRGV0YWlscy5wdXNoKFwiKVwiKTtcbiAgICAgICAgICAgICAgZWxzZSBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChcIilcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmVudGhlc2lzTGV2ZWwtLTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCA9PT0gMCkge1xuICAgICAgICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDcpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQW55IG9sZCBjaGFyYWN0ZXJcbiAgICAgICAgY2FwID0gL14uLy5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgXCJJbmZpbml0ZSBsb29wXCI7XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCA+IDApIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobGlua1JlZiAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIFJlZmVyZW5jZSBsaW5rOyBjaGVjayB0aGF0IGxpbmtSZWYgaXMgdmFsaWRcbiAgICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgbGFiZWwgb2YgdGhpcy5saW5rTGFiZWxzKSB7XG4gICAgICAgIGlmIChsYWJlbCA9PT0gbGlua1JlZikge1xuICAgICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IGxhYmVsQ2xhc3MgPSB2YWxpZCA/IFwiVE1MaW5rTGFiZWwgVE1MaW5rTGFiZWxfVmFsaWRcIiA6IFwiVE1MaW5rTGFiZWwgVE1MaW5rTGFiZWxfSW52YWxpZFwiO1xuICAgICAgbGV0IG91dHB1dCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7b3BlbmVyfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX0gJHtcbiAgICAgICAgbGlua0xhYmVsLmxlbmd0aCA8IDMgfHwgIWxpbmtMYWJlbFsxXSA/IGxhYmVsQ2xhc3MgOiBcIlwiXG4gICAgICB9XCI+JHt0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMobGlua1RleHQpfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPl08L3NwYW4+YDtcblxuICAgICAgaWYgKGxpbmtMYWJlbC5sZW5ndGggPj0gMykge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KFxuICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7bGlua0xhYmVsWzBdfTwvc3Bhbj5gLFxuICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIiR7bGFiZWxDbGFzc31cIj4ke2xpbmtMYWJlbFsxXX08L3NwYW4+YCxcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtMYWJlbFsyXX08L3NwYW4+YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0OiBvdXRwdXQsXG4gICAgICAgIGNoYXJDb3VudDogY3VycmVudE9mZnNldCxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBJbmxpbmUgbGlua1xuICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDcpIHtcbiAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0OiBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke29wZW5lcn08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9XCI+JHt0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMoXG4gICAgICAgICAgbGlua1RleHRcbiAgICAgICAgKX08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj5dKCR7XG4gICAgICAgICAgbGlua0RldGFpbHNbMF1cbiAgICAgICAgfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX1EZXN0aW5hdGlvblwiPiR7XG4gICAgICAgICAgaHRtbGVzY2FwZShsaW5rRGV0YWlsc1sxXSlcbiAgICAgICAgfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7bGlua0RldGFpbHNbMl19JHtcbiAgICAgICAgICBsaW5rRGV0YWlsc1szXVxuICAgICAgICB9JHtsaW5rRGV0YWlsc1s0XX08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9VGl0bGVcIj4ke1xuICAgICAgICAgIGh0bWxlc2NhcGUobGlua0RldGFpbHNbNV0pXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtEZXRhaWxzWzZdfSk8L3NwYW4+YCxcbiAgICAgICAgY2hhckNvdW50OiBjdXJyZW50T2Zmc2V0LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVDb21tb25BbmNlc3Rvcihub2RlMTogTm9kZSB8IG51bGwsIG5vZGUyOiBOb2RlIHwgbnVsbCk6IE5vZGUgfCBudWxsIHtcbiAgICBpZiAoIW5vZGUxIHx8ICFub2RlMikgcmV0dXJuIG51bGw7XG4gICAgaWYgKG5vZGUxID09PSBub2RlMikgcmV0dXJuIG5vZGUxO1xuICAgIGNvbnN0IGFuY2VzdHJ5ID0gKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgIGxldCBhbmNlc3RyeSA9IFtdO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgYW5jZXN0cnkudW5zaGlmdChub2RlKTtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSE7XG4gICAgICB9XG4gICAgICByZXR1cm4gYW5jZXN0cnk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdHJ5MSA9IGFuY2VzdHJ5KG5vZGUxKTtcbiAgICBjb25zdCBhbmNlc3RyeTIgPSBhbmNlc3RyeShub2RlMik7XG5cbiAgICBpZiAoYW5jZXN0cnkxWzBdICE9PSBhbmNlc3RyeTJbMF0pIHJldHVybiBudWxsO1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGFuY2VzdHJ5MVtpXSA9PT0gYW5jZXN0cnkyW2ldOyBpKyspO1xuICAgIHJldHVybiBhbmNlc3RyeTFbaSAtIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZShmb2N1czogUG9zaXRpb24sIGFuY2hvcjogUG9zaXRpb24gfCBudWxsLCBjbGFzc05hbWU6IHN0cmluZyk6IE5vZGUgfCBudWxsIHtcbiAgICBsZXQgbm9kZSA9IG51bGw7XG4gICAgaWYgKCFmb2N1cykgcmV0dXJuIG51bGw7XG4gICAgaWYgKCFhbmNob3IpIHtcbiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmICghc2VsIHx8ICFzZWwuZm9jdXNOb2RlKSByZXR1cm4gbnVsbDtcbiAgICAgIG5vZGUgPSBzZWwuZm9jdXNOb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZm9jdXMucm93ICE9PSBhbmNob3Iucm93KSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmICghc2VsKSByZXR1cm4gbnVsbDtcbiAgICAgIG5vZGUgPSB0aGlzLmNvbXB1dGVDb21tb25BbmNlc3RvcihzZWwuZm9jdXNOb2RlLCBzZWwuYW5jaG9yTm9kZSk7XG4gICAgfVxuICAgIGlmICghbm9kZSkgcmV0dXJuIG51bGw7XG4gICAgd2hpbGUgKG5vZGUgIT09IHRoaXMuZSkge1xuICAgICAgaWYgKChub2RlIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QgJiYgKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSByZXR1cm4gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb21tYW5kU3RhdGUoZm9jdXM6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwsIGFuY2hvcjogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiB7XG4gICAgbGV0IGNvbW1hbmRTdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+ID0ge307XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMpIHtcbiAgICAgIGZvciAobGV0IGNtZCBpbiBjb21tYW5kcykge1xuICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tbWFuZFN0YXRlO1xuICAgIH1cbiAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gZm9jdXM7XG5cbiAgICBsZXQgc3RhcnQ6IFBvc2l0aW9uLCBlbmQ6IFBvc2l0aW9uO1xuICAgIGlmIChhbmNob3Iucm93IDwgZm9jdXMucm93IHx8IChhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA8IGZvY3VzLmNvbCkpIHtcbiAgICAgIHN0YXJ0ID0gYW5jaG9yO1xuICAgICAgZW5kID0gZm9jdXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gZm9jdXM7XG4gICAgICBlbmQgPSBhbmNob3I7XG4gICAgfVxuICAgIGlmIChlbmQucm93ID4gc3RhcnQucm93ICYmIGVuZC5jb2wgPT09IDApIHtcbiAgICAgIGVuZC5yb3ctLTtcbiAgICAgIGVuZC5jb2wgPSB0aGlzLmxpbmVzW2VuZC5yb3ddLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBjbWQgaW4gY29tbWFuZHMpIHtcbiAgICAgIGlmIChjb21tYW5kc1tjbWRdLnR5cGUgPT09IFwiaW5saW5lXCIpIHtcbiAgICAgICAgaWYgKCFmb2N1cyB8fCBmb2N1cy5yb3cgIT09IGFuY2hvciEucm93IHx8ICF0aGlzLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkge1xuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9XG4gICAgICAgICAgICAhIXRoaXMuY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXMsIGFuY2hvciwgY29tbWFuZHNbY21kXS5jbGFzc05hbWUpIHx8XG4gICAgICAgICAgICAoZm9jdXMuY29sID09PSBhbmNob3IhLmNvbCAmJlxuICAgICAgICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoMCwgZm9jdXMuY29sKS5tYXRjaChjb21tYW5kc1tjbWRdLnVuc2V0LnByZVBhdHRlcm4pICYmXG4gICAgICAgICAgICAgICEhdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihmb2N1cy5jb2wpLm1hdGNoKGNvbW1hbmRzW2NtZF0udW5zZXQucG9zdFBhdHRlcm4pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1hbmRzW2NtZF0udHlwZSA9PT0gXCJsaW5lXCIpIHtcbiAgICAgICAgaWYgKCFmb2N1cykge1xuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgc3RhdGU6IGJvb2xlYW4gfCBudWxsID0gdGhpcy5saW5lVHlwZXNbc3RhcnQucm93XSA9PT0gY29tbWFuZHNbY21kXS5jbGFzc05hbWU7XG4gICAgICAgICAgZm9yIChsZXQgbGluZSA9IHN0YXJ0LnJvdzsgbGluZSA8PSBlbmQucm93OyBsaW5lKyspIHtcbiAgICAgICAgICAgIGlmICgodGhpcy5saW5lVHlwZXNbbGluZV0gPT09IGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lKSAhPT0gc3RhdGUpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBudWxsO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBzdGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29tbWFuZFN0YXRlO1xuICB9XG5cbiAgcHVibGljIHNldENvbW1hbmRTdGF0ZShjb21tYW5kOiBzdHJpbmcsIHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGlmIChjb21tYW5kc1tjb21tYW5kXS50eXBlID09PSBcImlubGluZVwiKSB7XG4gICAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gZm9jdXM7XG4gICAgICBpZiAoIWFuY2hvcikgcmV0dXJuO1xuICAgICAgaWYgKGFuY2hvci5yb3cgIT09IGZvY3VzIS5yb3cpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIHJldHVybjtcbiAgICAgIGxldCBtYXJrdXBOb2RlID0gdGhpcy5jb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZShmb2N1cyEsIGFuY2hvciwgY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKTtcbiAgICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcblxuICAgICAgaWYgKG1hcmt1cE5vZGUpIHtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMhLnJvd10gPSB0cnVlO1xuICAgICAgICBjb25zdCBzdGFydENvbCA9IHRoaXMuY29tcHV0ZUNvbHVtbihtYXJrdXBOb2RlLCAwKSE7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1hcmt1cE5vZGUudGV4dENvbnRlbnQhLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKDAsIHN0YXJ0Q29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4sIFwiXCIpO1xuICAgICAgICBjb25zdCBtaWQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddLnN1YnN0cihzdGFydENvbCwgbGVuKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cihzdGFydENvbCArIGxlbilcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wb3N0UGF0dGVybiwgXCJcIik7XG4gICAgICAgIHRoaXMubGluZXNbZm9jdXMhLnJvd10gPSBsZWZ0LmNvbmNhdChtaWQsIHJpZ2h0KTtcbiAgICAgICAgYW5jaG9yLmNvbCA9IGxlZnQubGVuZ3RoO1xuICAgICAgICBmb2N1cyEuY29sID0gYW5jaG9yLmNvbCArIGxlbjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzISwgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb2N1cyEuY29sID09PSBhbmNob3IuY29sICYmXG4gICAgICAgICEhdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoMCwgZm9jdXMhLmNvbCkubWF0Y2goY29tbWFuZHNbY29tbWFuZF0udW5zZXQucHJlUGF0dGVybikgJiZcbiAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddLnN1YnN0cihmb2N1cyEuY29sKS5tYXRjaChjb21tYW5kc1tjb21tYW5kXS51bnNldC5wb3N0UGF0dGVybilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cyEucm93XSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cigwLCBmb2N1cyEuY29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4sIFwiXCIpO1xuICAgICAgICBjb25zdCByaWdodCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKGZvY3VzIS5jb2wpXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4sIFwiXCIpO1xuICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddID0gbGVmdC5jb25jYXQocmlnaHQpO1xuICAgICAgICBmb2N1cyEuY29sID0gYW5jaG9yLmNvbCA9IGxlZnQubGVuZ3RoO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMhLCBhbmNob3IpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB7IHN0YXJ0Q29sLCBlbmRDb2wgfSA9XG4gICAgICAgICAgZm9jdXMhLmNvbCA8IGFuY2hvci5jb2xcbiAgICAgICAgICAgID8geyBzdGFydENvbDogZm9jdXMhLmNvbCwgZW5kQ29sOiBhbmNob3IuY29sIH1cbiAgICAgICAgICAgIDogeyBzdGFydENvbDogYW5jaG9yLmNvbCwgZW5kQ29sOiBmb2N1cyEuY29sIH07XG5cbiAgICAgICAgbGV0IG1hdGNoID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoc3RhcnRDb2wsIGVuZENvbCAtIHN0YXJ0Q29sKVxuICAgICAgICAgIC5tYXRjaCgvXig/PGxlYWRpbmc+XFxzKikuKlxcUyg/PHRyYWlsaW5nPlxccyopJC8pO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBzdGFydENvbCArPSBtYXRjaC5ncm91cHMhLmxlYWRpbmcubGVuZ3RoO1xuICAgICAgICAgIGVuZENvbCAtPSBtYXRjaC5ncm91cHMhLnRyYWlsaW5nLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvY3VzIS5jb2wgPSBzdGFydENvbDtcbiAgICAgICAgYW5jaG9yLmNvbCA9IGVuZENvbDtcblxuICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24oY29tbWFuZHNbY29tbWFuZF0uc2V0LnByZSwgY29tbWFuZHNbY29tbWFuZF0uc2V0LnBvc3QsIGZvY3VzLCBhbmNob3IpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbW1hbmRzW2NvbW1hbmRdLnR5cGUgPT09IFwibGluZVwiKSB7XG4gICAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gZm9jdXM7XG4gICAgICBpZiAoIWZvY3VzKSByZXR1cm47XG4gICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG4gICAgICBsZXQgc3RhcnQgPSBhbmNob3IhLnJvdyA+IGZvY3VzIS5yb3cgPyBmb2N1cyEgOiBhbmNob3IhO1xuICAgICAgbGV0IGVuZCA9IGFuY2hvciEucm93ID4gZm9jdXMhLnJvdyA/IGFuY2hvciEgOiBmb2N1cyE7XG4gICAgICBpZiAoZW5kLnJvdyA+IHN0YXJ0LnJvdyAmJiBlbmQuY29sID09PSAwKSB7XG4gICAgICAgIGVuZC5yb3ctLTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgbGluZSA9IHN0YXJ0LnJvdzsgbGluZSA8PSBlbmQucm93OyBsaW5lKyspIHtcbiAgICAgICAgaWYgKHN0YXRlICYmIHRoaXMubGluZVR5cGVzW2xpbmVdICE9PSBjb21tYW5kc1tjb21tYW5kXS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gdGhpcy5saW5lc1tsaW5lXS5yZXBsYWNlKFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0uc2V0LnBhdHRlcm4sXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS5zZXQucmVwbGFjZW1lbnQucmVwbGFjZShcIiQjXCIsIChsaW5lIC0gc3RhcnQucm93ICsgMSkudG9TdHJpbmcoKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRlICYmIHRoaXMubGluZVR5cGVzW2xpbmVdID09PSBjb21tYW5kc1tjb21tYW5kXS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gdGhpcy5saW5lc1tsaW5lXS5yZXBsYWNlKFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0udW5zZXQucGF0dGVybixcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnJlcGxhY2VtZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oXG4gICAgICAgIHsgcm93OiBlbmQucm93LCBjb2w6IHRoaXMubGluZXNbZW5kLnJvd10ubGVuZ3RoIH0sXG4gICAgICAgIHsgcm93OiBzdGFydC5yb3csIGNvbDogMCB9XG4gICAgICApO1xuICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsIHx8ICFzZWwuZm9jdXNOb2RlIHx8ICFzZWwuYW5jaG9yTm9kZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKFxuICAgICAgc2VsLmlzQ29sbGFwc2VkICYmXG4gICAgICBzZWwuZm9jdXNOb2RlLm5vZGVUeXBlID09PSAzICYmXG4gICAgICBzZWwuZm9jdXNPZmZzZXQgPT09IHNlbC5mb2N1c05vZGUubm9kZVZhbHVlIS5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxldCBub2RlO1xuICAgICAgZm9yIChub2RlID0gc2VsLmZvY3VzTm9kZTsgbm9kZSAmJiBub2RlLm5leHRTaWJsaW5nID09PSBudWxsOyBub2RlID0gbm9kZS5wYXJlbnROb2RlISk7XG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUgJiZcbiAgICAgICAgbm9kZS5uZXh0U2libGluZyAmJlxuICAgICAgICAobm9kZS5uZXh0U2libGluZyBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0ICYmXG4gICAgICAgIChub2RlLm5leHRTaWJsaW5nIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuY29udGFpbnMoXCJUTUlubGluZUZvcm1hdHRlZFwiKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgYW5jZXN0b3IgPSB0aGlzLmNvbXB1dGVDb21tb25BbmNlc3RvcihzZWwuZm9jdXNOb2RlLCBzZWwuYW5jaG9yTm9kZSk7XG4gICAgaWYgKCFhbmNlc3RvcikgcmV0dXJuIGZhbHNlO1xuXG4gICAgd2hpbGUgKGFuY2VzdG9yICYmIGFuY2VzdG9yICE9PSB0aGlzLmUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QgJiZcbiAgICAgICAgKChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiVE1JbmxpbmVGb3JtYXR0ZWRcIikgfHxcbiAgICAgICAgICAoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucyhcIlRNQmxhbmtMaW5lXCIpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZSE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUNvbW1hbmRTdGF0ZShjb21tYW5kOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubGFzdENvbW1hbmRTdGF0ZSkgdGhpcy5sYXN0Q29tbWFuZFN0YXRlID0gdGhpcy5nZXRDb21tYW5kU3RhdGUoKTtcbiAgICB0aGlzLnNldENvbW1hbmRTdGF0ZShjb21tYW5kLCAhdGhpcy5sYXN0Q29tbWFuZFN0YXRlW2NvbW1hbmRdKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlyZURyb3AoZGF0YVRyYW5zZmVyOiBEYXRhVHJhbnNmZXIpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycy5kcm9wKSB7XG4gICAgICBsaXN0ZW5lcih7IGRhdGFUcmFuc2ZlciB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpcmVTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgIGxldCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcblxuICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGZvciByZXN0b3JhdGlvbiBsYXRlclxuICAgIHRoaXMubGFzdFNlbGVjdGlvbiA9IHtcbiAgICAgIGZvY3VzOiBmb2N1cyxcbiAgICAgIGFuY2hvcjogYW5jaG9yXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24gJiYgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgbGV0IGNvbW1hbmRTdGF0ZSA9IHRoaXMuZ2V0Q29tbWFuZFN0YXRlKGZvY3VzLCBhbmNob3IpO1xuICAgICAgaWYgKHRoaXMubGFzdENvbW1hbmRTdGF0ZSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubGFzdENvbW1hbmRTdGF0ZSwgY29tbWFuZFN0YXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFzdENvbW1hbmRTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGNvbW1hbmRTdGF0ZSk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24pIHtcbiAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgIGZvY3VzOiBmb2N1cyEsXG4gICAgICAgICAgYW5jaG9yOiBhbmNob3IhLFxuICAgICAgICAgIGNvbW1hbmRTdGF0ZTogdGhpcy5sYXN0Q29tbWFuZFN0YXRlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRWRpdG9yO1xuIl0sIm5hbWVzIjpbImdsb2JhbCIsInRoaXMiLCJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsInJlcXVpcmUkJDIiLCJyZXF1aXJlJCQzIiwic2hhcmVkU3RvcmVNb2R1bGUiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwibWFrZUJ1aWx0SW4iLCJtYWtlQnVpbHRJbk1vZHVsZSIsIm93bktleXMiLCJyZXF1aXJlJCQ4IiwicmVxdWlyZSQkOSIsInJlcXVpcmUkJDEwIiwicmVxdWlyZSQkMTEiLCJyZXF1aXJlJCQxMiIsInJlcXVpcmUkJDEzIiwic3ZnIiwiYmxvY2txdW90ZSIsImJvbGQiLCJjbGVhcl9mb3JtYXR0aW5nIiwiY29kZSIsImgxIiwiaDIiLCJociIsImltYWdlIiwiaXRhbGljIiwibGluayIsIm9sIiwicmVkbyIsInN0cmlrZXRocm91Z2giLCJ1bCIsInVuZG8iLCJpc01hY0xpa2UiLCJ0ZXN0IiwibmF2aWdhdG9yIiwicGxhdGZvcm0iLCJEZWZhdWx0Q29tbWFuZHMiLCJuYW1lIiwiYWN0aW9uIiwiaW5uZXJIVE1MIiwidGl0bGUiLCJob3RrZXkiLCJpbnNlcnRMaW5rIiwiZWRpdG9yIiwiaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCIsIndyYXBTZWxlY3Rpb24iLCJlbmFibGVkIiwiaW5zZXJ0SW1hZ2UiLCJwYXN0ZSIsImNhblVuZG8iLCJjYW5SZWRvIiwiQ29tbWFuZEJhciIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJlIiwiY29tbWFuZHMiLCJidXR0b25zIiwic3RhdGUiLCJob3RrZXlzIiwiZWxlbWVudCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJib2R5IiwiY3JlYXRlQ29tbWFuZEJhckVsZW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiaGFuZGxlS2V5ZG93biIsInNldEVkaXRvciIsInBhcmVudEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiY29tbWFuZCIsImVsIiwiYXBwZW5kQ2hpbGQiLCJjb21tYW5kTmFtZSIsIk9iamVjdCIsImFzc2lnbiIsImtleXMiLCJzcGxpdCIsIm1vZGlmaWVycyIsIm1vZGlmaWVyZXhwbGFuYXRpb24iLCJpIiwibGVuZ3RoIiwicHVzaCIsImxhc3RLZXkiLCJtYXRjaCIsImNvbmNhdCIsInRvVXBwZXJDYXNlIiwia2V5IiwidG9Mb3dlckNhc2UiLCJqb2luIiwiaGFuZGxlQ2xpY2siLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwiZWRpdG9ySGFkRm9jdXMiLCJjb250YWlucyIsImFjdGl2ZUVsZW1lbnQiLCJmb2N1cyIsInJlc3RvcmVMYXN0U2VsZWN0aW9uIiwic2V0Q29tbWFuZFN0YXRlIiwiaGFuZGxlU2VsZWN0aW9uIiwiY29tbWFuZFN0YXRlIiwidW5kZWZpbmVkIiwiYW5jaG9yIiwib3V0ZXIiLCJtb2RpZmllciIsInJlcXVpcmUkJDE0IiwicmVxdWlyZSQkMTUiLCJyZXF1aXJlJCQxNiIsInJlcXVpcmUkJDE3IiwicmVxdWlyZSQkMTgiLCJyZXF1aXJlJCQxOSIsInJlcXVpcmUkJDIwIiwicmVxdWlyZSQkMjEiLCJyZXBsYWNlbWVudHMiLCJBU0NJSVB1bmN0dWF0aW9uIiwiTm90VHJpZ2dlckNoYXIiLCJTY2hlbWUiLCJFbWFpbCIsIkhUTUxPcGVuVGFnIiwiSFRNTENsb3NlVGFnIiwiSFRNTFRhZ05hbWUiLCJIVE1MQ29tbWVudCIsIkhUTUxQSSIsIkhUTUxEZWNsYXJhdGlvbiIsIkhUTUxDREFUQSIsIkhUTUxBdHRyaWJ1dGUiLCJIVE1MQXR0VmFsdWUiLCJLbm93blRhZyIsInB1bmN0dWF0aW9uTGVhZGluZyIsIlJlZ0V4cCIsInB1bmN0dWF0aW9uVHJhaWxpbmciLCJsaW5lR3JhbW1hciIsIlRNSDEiLCJyZWdleHAiLCJyZXBsYWNlbWVudCIsIlRNSDIiLCJUTUgzIiwiVE1INCIsIlRNSDUiLCJUTUg2IiwiVE1CbG9ja3F1b3RlIiwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW4iLCJfd3JhcFJlZ0V4cCIsInNlcSIsIlRNQ29kZUZlbmNlVGlsZGVPcGVuIiwiVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlIiwiVE1Db2RlRmVuY2VUaWxkZUNsb3NlIiwiVE1CbGFua0xpbmUiLCJUTVNldGV4dEgxTWFya2VyIiwiVE1TZXRleHRIMk1hcmtlciIsIlRNSFIiLCJUTVVMIiwiVE1PTCIsIlRNSW5kZW50ZWRDb2RlIiwiVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvbiIsImxhYmVsUGxhY2Vob2xkZXIiLCJodG1sQmxvY2tHcmFtbWFyIiwic3RhcnQiLCJlbmQiLCJwYXJhSW50ZXJydXB0IiwiaW5saW5lR3JhbW1hciIsImVzY2FwZSIsImF1dG9saW5rIiwiaHRtbCIsImxpbmtPcGVuIiwiaW1hZ2VPcGVuIiwibGlua0xhYmVsIiwiZGVmYXVsdCIsInJlcGxhY2VtZW50UmVnZXhwIiwiaW5saW5lUnVsZXMiLCJydWxlIiwicmUiLCJzb3VyY2UiLCJyZXBsYWNlIiwic3RyaW5nIiwiZmxhZ3MiLCJjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyIiwiY3VzdG9tUnVsZXMiLCJhcmd1bWVudHMiLCJtZXJnZWQiLCJfb2JqZWN0U3ByZWFkIiwicnVsZU5hbWUiLCJlbnRyaWVzIiwicHJvY2Vzc2VkUnVsZSIsInJlZ2V4cFNvdXJjZSIsImh0bWxlc2NhcGUiLCJ0eXBlIiwic2V0IiwicHJlIiwicG9zdCIsInVuc2V0IiwicHJlUGF0dGVybiIsInBvc3RQYXR0ZXJuIiwicGF0dGVybiIsImgzIiwiaDQiLCJoNSIsImg2IiwiRWRpdG9yIiwidGV4dGFyZWEiLCJsaW5lcyIsImxpbmVFbGVtZW50cyIsImxpbmVUeXBlcyIsImxpbmVDYXB0dXJlcyIsImxpbmVSZXBsYWNlbWVudHMiLCJsaW5rTGFiZWxzIiwibGluZURpcnR5IiwibGFzdENvbW1hbmRTdGF0ZSIsImN1c3RvbUlubGluZUdyYW1tYXIiLCJtZXJnZWRJbmxpbmVHcmFtbWFyIiwiaGFzRm9jdXMiLCJsYXN0U2VsZWN0aW9uIiwibGlzdGVuZXJzIiwiY2hhbmdlIiwic2VsZWN0aW9uIiwiZHJvcCIsInVuZG9TdGFjayIsInJlZG9TdGFjayIsImlzUmVzdG9yaW5nSGlzdG9yeSIsIm1heEhpc3RvcnkiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInRhZ05hbWUiLCJwYXJlbnROb2RlIiwic3R5bGUiLCJkaXNwbGF5IiwicGxhY2Vob2xkZXIiLCJfYSIsImNyZWF0ZUVkaXRvckVsZW1lbnQiLCJzZXRDb250ZW50IiwiY29udGVudCIsInZhbHVlIiwiaGFuZGxlVW5kb1JlZG9LZXkiLCJwdXNoSGlzdG9yeSIsInB1c2hDdXJyZW50U3RhdGUiLCJnZXRDb250ZW50IiwiZ2V0U2VsZWN0aW9uIiwic2hpZnQiLCJjdXJyZW50IiwicG9wIiwicHJldiIsInNldFNlbGVjdGlvbiIsIm5leHQiLCJpc01hYyIsImN0cmwiLCJtZXRhS2V5IiwiY3RybEtleSIsImFsdEtleSIsInNoaWZ0S2V5IiwiY2xhc3NMaXN0IiwiYWRkIiwiY29udGVudEVkaXRhYmxlIiwid2hpdGVTcGFjZSIsIndlYmtpdFVzZXJNb2RpZnkiLCJzZXRBdHRyaWJ1dGUiLCJuZXh0U2libGluZyIsImluc2VydEJlZm9yZSIsImhhbmRsZUlucHV0RXZlbnQiLCJoYW5kbGVCZWZvcmVJbnB1dEV2ZW50IiwiaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQiLCJoYW5kbGVQYXN0ZSIsImhhbmRsZURyb3AiLCJjaGlsZE5vZGVzIiwiZmlyc3RDaGlsZCIsInJlbW92ZUNoaWxkIiwibGluZU51bSIsImxlIiwiQXJyYXkiLCJ1cGRhdGVGb3JtYXR0aW5nIiwidXBkYXRlUGxhY2Vob2xkZXIiLCJmaXJlQ2hhbmdlIiwicmVtb3ZlIiwidXBkYXRlTGluZVR5cGVzIiwidXBkYXRlTGlua0xhYmVscyIsImFwcGx5TGluZVR5cGVzIiwibCIsImNhcHR1cmUiLCJzdHIiLCJwMSIsInAyIiwicGFyc2VJbnQiLCJwcm9jZXNzSW5saW5lU3R5bGVzIiwiY29udGVudEhUTUwiLCJyZW1vdmVBdHRyaWJ1dGUiLCJkYXRhc2V0IiwidG9TdHJpbmciLCJjb2RlQmxvY2tUeXBlIiwiY29kZUJsb2NrU2VxTGVuZ3RoIiwiaHRtbEJsb2NrIiwibGluZVR5cGUiLCJsaW5lQ2FwdHVyZSIsImxpbmVSZXBsYWNlbWVudCIsImV4ZWMiLCJncm91cHMiLCJodG1sQmxvY2tUeXBlIiwiaGVhZGluZ0xpbmUiLCJoZWFkaW5nTGluZVR5cGUiLCJnZXRBbmNob3IiLCJ3aW5kb3ciLCJzdGFydE5vZGUiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwib2Zmc2V0IiwiYW5jaG9yT2Zmc2V0IiwiZm9jdXNPZmZzZXQiLCJyb3ciLCJjb2wiLCJjb21wdXRlQ29sdW1uIiwibm9kZSIsInByZXZpb3VzU2libGluZyIsImN1cnJlbnRMaW5lTnVtRGF0YSIsInByZXZpb3VzTGluZU51bURhdGEiLCJfYiIsImN1cnJlbnRMaW5lTnVtIiwicHJldmlvdXNMaW5lTnVtIiwiY29tcHV0ZU5vZGVBbmRPZmZzZXQiLCJ3aW5kb3dTZWxlY3Rpb24iLCJzZXRCYXNlQW5kRXh0ZW50IiwidGV4dCIsImJlZ2lubmluZyIsImluc2VydGVkTGluZXMiLCJsaW5lQmVmb3JlIiwic3Vic3RyIiwibGluZUVuZCIsImVuZENvbFBvcyIsInNwbGljZUxpbmVzIiwic3RhcnRDb2wiLCJlbmRDb2wiLCJsZWZ0IiwibWlkIiwicmlnaHQiLCJsaXN0ZW5lciIsImxpbmVzRGlydHkiLCJiZWZvcmVJbnB1dEV2ZW50IiwiaW5wdXRUeXBlIiwiaXNCYWNrc3BhY2UiLCJjbGVhckRpcnR5RmxhZyIsInByZXZMaW5lTGVuIiwiY3VycmVudExpbmVMZW4iLCJzdWJzdHJpbmciLCJjb250aW51YWJsZVR5cGUiLCJsaW5lQmVmb3JlQnJlYWsiLCJsaW5lQWZ0ZXJCcmVhayIsInJlc3VsdCIsInNjcm9sbEludG9WaWV3IiwiYmxvY2siLCJpbmxpbmUiLCJpbnB1dEV2ZW50IiwiZml4Tm9kZUhpZXJhcmNoeSIsInVwZGF0ZUxpbmVDb250ZW50c0FuZEZvcm1hdHRpbmciLCJfZSIsImZpcmVTZWxlY3Rpb24iLCJjbGlwYm9hcmREYXRhIiwiZ2V0RGF0YSIsImZpcmVEcm9wIiwiZGF0YVRyYW5zZmVyIiwib3JpZ2luYWxTdHJpbmciLCJwcm9jZXNzZWQiLCJzdGFjayIsImNhcCIsInBvdGVudGlhbExpbmsiLCJwb3RlbnRpYWxJbWFnZSIsInBhcnNlTGlua09ySW1hZ2UiLCJvdXRwdXQiLCJjaGFyQ291bnQiLCJkZWxpbUNvdW50IiwiZGVsaW1TdHJpbmciLCJjdXJyZW50RGVsaW1pdGVyIiwicHJlY2VkaW5nIiwiZm9sbG93aW5nIiwicHVuY3R1YXRpb25Gb2xsb3dzIiwicHVuY3R1YXRpb25QcmVjZWRlcyIsIndoaXRlc3BhY2VGb2xsb3dzIiwid2hpdGVzcGFjZVByZWNlZGVzIiwiY2FuT3BlbiIsImNhbkNsb3NlIiwic3RhY2tQb2ludGVyIiwiZGVsaW1pdGVyIiwiZW50cnkiLCJjb3VudCIsImNvbnN1bWVkIiwibm9kZVR5cGUiLCJOb2RlIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJiaW5kUmlnaHQiLCJjaGlsZHJlbkNvbXBsZXRlIiwicnYiLCJub2RlVmFsdWUiLCJ1cGRhdGVMaW5lQ29udGVudHMiLCJsaW5lRGVsdGEiLCJjaGlsZEVsZW1lbnRDb3VudCIsImZpcnN0Q2hhbmdlZExpbmUiLCJsYXN0Q2hhbmdlZExpbmUiLCJsaW5lc1RvRGVsZXRlIiwibGluZXNUb0FkZCIsImxpbmUiLCJjdCIsInN0YXJ0TGluZSIsImxpbmVzVG9JbnNlcnQiLCJhZGp1c3RMaW5lRWxlbWVudHMiLCJpbnNlcnRlZEJsYW5rIiwiaW5zZXJ0ZWREaXJ0eSIsInNwbGljZSIsIm9yaWdpbmFsQ2hpbGRyZW4iLCJmcm9tIiwicmVwbGFjZUNoaWxkIiwiY2hpbGQiLCJwYXJlbnQiLCJfbGVuIiwibmV3Q2hpbGRyZW4iLCJfa2V5IiwiZm9yRWFjaCIsIm5ld0NoaWxkIiwiRUxFTUVOVF9OT0RFIiwiZGl2V3JhcHBlciIsImdyYW5kQ2hpbGRyZW4iLCJzb21lIiwiZ3JhbmRDaGlsZCIsImlzSW1hZ2UiLCJ0ZXh0T2Zmc2V0Iiwib3BlbmVyIiwiY3VycmVudE9mZnNldCIsImJyYWNrZXRMZXZlbCIsImxpbmtUZXh0IiwibGlua1JlZiIsImxpbmtEZXRhaWxzIiwidGV4dE91dGVyIiwibmV4dENoYXIiLCJ0cmltIiwicGFyZW50aGVzaXNMZXZlbCIsImlubGluZU91dGVyIiwidmFsaWQiLCJsYWJlbCIsImxhYmVsQ2xhc3MiLCJjb21wdXRlQ29tbW9uQW5jZXN0b3IiLCJub2RlMSIsIm5vZGUyIiwiYW5jZXN0cnkiLCJ1bnNoaWZ0IiwiYW5jZXN0cnkxIiwiYW5jZXN0cnkyIiwiY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUiLCJzZWwiLCJnZXRDb21tYW5kU3RhdGUiLCJjbWQiLCJtYXJrdXBOb2RlIiwibGVuIiwibGVhZGluZyIsInRyYWlsaW5nIiwiaXNDb2xsYXBzZWQiLCJhbmNlc3RvciIsInRvZ2dsZUNvbW1hbmRTdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztDQUNBLENBQUEsSUFBSSxLQUFLLEdBQUcsVUFBVSxFQUFFLEVBQUU7SUFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtFQUNyQyxDQUFDOztDQUVEO0NBQ0EsQ0FBQSxZQUFjO0NBQ2Q7SUFDRSxLQUFLLENBQUMsT0FBTyxVQUFVLElBQUksUUFBUSxJQUFJLFVBQVUsQ0FBQztJQUNsRCxLQUFLLENBQUMsT0FBTyxNQUFNLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQztD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QUFHO0NBQ25CbkgsTUFBQUEsS0FBSyxFQUFFQSxLQUFLO0NBQ1pNLE1BQUFBLE1BQU0sRUFBRUE7TUFDVDtDQUVELElBQUEsSUFBSSxJQUFJLENBQUM4RyxTQUFTLENBQUNFLFNBQVMsSUFBSSxJQUFJLENBQUNGLFNBQVMsQ0FBQ0UsU0FBUyxDQUFDckksTUFBTSxFQUFFO09BQy9ELElBQUltQixZQUFZLEdBQUcsSUFBSSxDQUFDdVYsZUFBZSxDQUFDM1YsS0FBSyxFQUFFTSxNQUFNLENBQUM7T0FDdEQsSUFBSSxJQUFJLENBQUN5RyxnQkFBZ0IsRUFBRTtTQUN6QnJJLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLElBQUksQ0FBQ29JLGdCQUFnQixFQUFFM0csWUFBWSxDQUFDO0NBQ3BELE1BQUEsQ0FBQyxNQUFNO1NBQ0wsSUFBSSxDQUFDMkcsZ0JBQWdCLEdBQUdySSxNQUFNLENBQUNDLE1BQU0sQ0FBQyxFQUFFLEVBQUV5QixZQUFZLENBQUM7Q0FDekQsTUFBQTtPQUNBLEtBQUssSUFBSXNPLFFBQVEsSUFBSSxJQUFJLENBQUN0SCxTQUFTLENBQUNFLFNBQVMsRUFBRTtDQUM3Q29ILFFBQUFBLFFBQVEsQ0FBQztDQUNQMU8sVUFBQUEsS0FBSyxFQUFFQSxLQUFNO0NBQ2JNLFVBQUFBLE1BQU0sRUFBRUEsTUFBTztXQUNmRixZQUFZLEVBQUUsSUFBSSxDQUFDMkc7Q0FDcEIsU0FBQSxDQUFDO0NBQ0osTUFBQTtDQUNGLElBQUE7Q0FDRixFQUFBO0NBQ0Q7Ozs7Ozs7OzsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTVdfQ=={"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\"/></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\"><</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">></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, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\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 placeholder?: string;\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 private placeholder: string | undefined;\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.placeholder = props.placeholder !== undefined\n ? props.placeholder\n : this.textarea?.placeholder || undefined;\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 (this.placeholder) {\n this.e.setAttribute(\"data-placeholder\", this.placeholder);\n }\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.updatePlaceholder();\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 updatePlaceholder(): void {\n if (!this.placeholder || !this.e) return;\n if (this.getContent() === \"\") {\n this.e.classList.add(\"TinyMDE_empty\");\n } else {\n this.e.classList.remove(\"TinyMDE_empty\");\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 this.updatePlaceholder();\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,\n * insertLineBreak, deleteContentBackward, and deleteContentForward events.\n * These used to be handled in the input event, but that caused issues with\n * Firefox where the input event would be sometimes not be fired for these\n * input types. deleteContentBackward/Forward are also handled here to fix a\n * Firefox-specific bug (#151) where backspacing on an empty line would not\n * remove it, because Firefox only removes the <br> inside the empty <div>\n * rather than merging the divs, and fixNodeHierarchy() would then re-add the\n * <br>, resulting in a no-op.\n * @param event The input event\n * @returns nothing\n */\n private handleBeforeInputEvent(event: Event): void {\n const beforeInputEvent = event as InputEvent;\n\n // Handle cross-line delete operations (backspace at col 0, delete at end of line)\n if (\n beforeInputEvent.inputType === \"deleteContentBackward\" ||\n beforeInputEvent.inputType === \"deleteContentForward\"\n ) {\n const focus = this.getSelection();\n const anchor = this.getSelection(true);\n if (!focus || !anchor) return;\n\n const isBackspace = beforeInputEvent.inputType === \"deleteContentBackward\";\n\n // Only intercept collapsed selections at line boundaries\n if (focus.row === anchor.row && focus.col === anchor.col) {\n if (isBackspace && focus.col === 0 && focus.row > 0) {\n // Backspace at start of line: merge current line into end of previous\n event.preventDefault();\n if (!this.isRestoringHistory) this.pushHistory();\n this.clearDirtyFlag();\n const prevLineLen = this.lines[focus.row - 1].length;\n this.lines[focus.row - 1] = this.lines[focus.row - 1] + this.lines[focus.row];\n this.lineDirty[focus.row - 1] = true;\n this.spliceLines(focus.row, 1);\n this.updateFormatting();\n this.setSelection({ row: focus.row - 1, col: prevLineLen });\n this.fireChange();\n return;\n }\n if (!isBackspace && focus.col === this.lines[focus.row].length && focus.row < this.lines.length - 1) {\n // Delete at end of line: merge next line into current\n event.preventDefault();\n if (!this.isRestoringHistory) this.pushHistory();\n this.clearDirtyFlag();\n const currentLineLen = this.lines[focus.row].length;\n this.lines[focus.row] = this.lines[focus.row] + this.lines[focus.row + 1];\n this.lineDirty[focus.row] = true;\n this.spliceLines(focus.row + 1, 1);\n this.updateFormatting();\n this.setSelection({ row: focus.row, col: currentLineLen });\n this.fireChange();\n return;\n }\n }\n // For within-line deletes or non-collapsed selections, let the browser handle it\n return;\n }\n\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 public 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 public 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).classList && (node as HTMLElement).classList.contains(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).classList &&\n (node.nextSibling as HTMLElement).classList.contains(\"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).classList &&\n ((ancestor as HTMLElement).classList.contains(\"TMInlineFormatted\") ||\n (ancestor as HTMLElement).classList.contains(\"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","placeholder","_a","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","setAttribute","nextSibling","insertBefore","handleInputEvent","handleBeforeInputEvent","handleSelectionChangeEvent","handlePaste","handleDrop","childNodes","firstChild","removeChild","lineNum","le","Array","updateFormatting","updatePlaceholder","fireChange","remove","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","previousLineNumData","_b","currentLineNum","previousLineNum","computeNodeAndOffset","windowSelection","setBaseAndExtent","text","beginning","insertedLines","lineBefore","substr","lineEnd","endColPos","spliceLines","startCol","endCol","left","mid","right","listener","linesDirty","beforeInputEvent","inputType","isBackspace","clearDirtyFlag","prevLineLen","currentLineLen","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","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]}
|