milkio 1.0.0-beta.67 → 1.0.0-beta.69
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/index.js +1 -1
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -2571,4 +2571,4 @@ export {
|
|
|
2571
2571
|
};
|
|
2572
2572
|
|
|
2573
2573
|
//# debugId=C8646448FA052D3564756E2164756E21
|
|
2574
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXHV0aWxzXFxwYXJ0LnRzIiwgIi4uXFx0eXBlLXNhZmV0eVxcaW5kZXgudHMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHNvdXRoZXJuLWF1cm9yYVxcdHNvblxcZGlzdFxcdHNvbi5qcyIsICIuLlxcY29uZmlnXFxpbmRleC50cyIsICIuLlxcdXRpbHNcXGhlYWRlcnMtdG8tanNvbi50cyIsICIuLlxcdXRpbHNcXG1lcmdlLWRlZXAudHMiLCAiLi5cXGV4ZWN1dGVcXGluZGV4LnRzIiwgIi4uXFxib290c3RyYXBcXGluZGV4LnRzIiwgIi4uXFxldmVudFxcaW5kZXgudHMiLCAiLi5cXGZsb3dcXGluZGV4LnRzIiwgIi4uXFxoYW5kbGVyXFxpbmRleC50cyIsICIuLlxcdXRpbHNcXGNyZWF0ZS1pZC50cyIsICIuLlxcZXhlY3V0ZVxcZXhlY3V0ZS1pZC1nZW5lcmF0b3IudHMiLCAiLi5cXHdvcmxkXFxpbmRleC50cyIsICIuLlxcY29tbWFuZFxcaW5kZXgudHMiLCAiLi5cXGFjdGlvblxcaW5kZXgudHMiLCAiLi5cXHN0cmVhbVxcaW5kZXgudHMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGNvbnN0YW50cy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcY29uc3RydWN0RnJvbS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcdG9EYXRlLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxfbGliXFxkZWZhdWx0T3B0aW9ucy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcc3RhcnRPZldlZWsuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXHN0YXJ0T2ZJU09XZWVrLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxnZXRJU09XZWVrWWVhci5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcX2xpYlxcZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcX2xpYlxcbm9ybWFsaXplRGF0ZXMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXHN0YXJ0T2ZEYXkuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcc3RhcnRPZklTT1dlZWtZZWFyLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxpc0RhdGUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGlzVmFsaWQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXHN0YXJ0T2ZZZWFyLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxsb2NhbGVcXGVuLVVTXFxfbGliXFxmb3JtYXREaXN0YW5jZS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxfbGliXFxidWlsZEZvcm1hdExvbmdGbi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxlbi1VU1xcX2xpYlxcZm9ybWF0TG9uZy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxlbi1VU1xcX2xpYlxcZm9ybWF0UmVsYXRpdmUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGxvY2FsZVxcX2xpYlxcYnVpbGRMb2NhbGl6ZUZuLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxsb2NhbGVcXGVuLVVTXFxfbGliXFxsb2NhbGl6ZS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxfbGliXFxidWlsZE1hdGNoRm4uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGxvY2FsZVxcX2xpYlxcYnVpbGRNYXRjaFBhdHRlcm5Gbi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxlbi1VU1xcX2xpYlxcbWF0Y2guanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGxvY2FsZVxcZW4tVVMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGdldERheU9mWWVhci5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcZ2V0SVNPV2Vlay5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcZ2V0V2Vla1llYXIuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXHN0YXJ0T2ZXZWVrWWVhci5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcZ2V0V2Vlay5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcX2xpYlxcYWRkTGVhZGluZ1plcm9zLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxfbGliXFxmb3JtYXRcXGxpZ2h0Rm9ybWF0dGVycy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcX2xpYlxcZm9ybWF0XFxmb3JtYXR0ZXJzLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxfbGliXFxmb3JtYXRcXGxvbmdGb3JtYXR0ZXJzLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxfbGliXFxwcm90ZWN0ZWRUb2tlbnMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGZvcm1hdC5qcyIsICIuLlxcdXRpbHNcXHNlbmQtY29va2Jvb2stZXZlbnQudHMiLCAiLi5cXGxvZ2dlclxcaW5kZXgudHMiLCAiLi5cXHN0ZXBcXGluZGV4LnRzIiwgIi4uXFx1dGlsc1xcdHJpZS50cyIsICIuLlxcbGlzdGVuZXJcXGluZGV4LnRzIiwgIi4uXFxleGNlcHRpb25cXGluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImV4cG9ydCBmdW5jdGlvbiBwYXJ0PFQgZXh0ZW5kcyAoKSA9PiB1bmtub3duPihoYW5kbGVyOiBUKTogUmV0dXJuVHlwZTxUPiB7XHJcbiAgcmV0dXJuIGhhbmRsZXIoKSBhcyB1bmtub3duIGFzIFJldHVyblR5cGU8VD47XHJcbn1cclxuIiwKICAgICJleHBvcnQgdHlwZSBUeXBlU2FmZXR5PFZhbHVlIGV4dGVuZHMgUmVjb3JkPGFueSwgYW55Pj4gPSAodmFsdWU6IFZhbHVlKSA9PiBUeXBlU2FmZXR5VmFsdWU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVNhZmV0eVZhbHVlIHtcbiAgdHlwZTogPFR5cGUgZXh0ZW5kcyBSZWNvcmQ8YW55LCBhbnk+PigpID0+IFR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVNhZmV0eVR5cGU8VHlwZSBleHRlbmRzIFJlY29yZDxhbnksIGFueT4+IHtcbiAgJG1pbGtpb1R5cGU6IFwidHlwZS1zYWZldHlcIjtcbiAgdmFsdWU6IFR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlU2FmZXR5PFZhbHVlIGV4dGVuZHMgUmVjb3JkPGFueSwgYW55Pj4odmFsdWU6IFZhbHVlKTogVHlwZVNhZmV0eVZhbHVlIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAoKSA9PiAoeyAkbWlsa2lvVHlwZTogXCJ0eXBlLXNhZmV0eVwiLCB2YWx1ZSB9KSxcbiAgfSBhcyBhbnk7XG59XG4iLAogICAgImNvbnN0IGMgPSB7XG4gIHJ1bGVzOiB7XG4gICAgc3RyaW5naWZ5OiBbXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiAodCkgPT4gdHlwZW9mIHQgPT0gXCJiaWdpbnRcIixcbiAgICAgICAgaGFuZGxlcjogKHQpID0+IGB0IWJpZ2ludDoke3QudG9TdHJpbmcoKX1gXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtYXRjaDogKHQpID0+IHQgaW5zdGFuY2VvZiBEYXRlLFxuICAgICAgICBoYW5kbGVyOiAodCkgPT4gYHQhRGF0ZToke3QudG9JU09TdHJpbmcoKX1gXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtYXRjaDogKHQpID0+IHQgaW5zdGFuY2VvZiBVUkwsXG4gICAgICAgIGhhbmRsZXI6ICh0KSA9PiBgdCFVUkw6JHt0LnRvU3RyaW5nKCl9YFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6ICh0KSA9PiB0IGluc3RhbmNlb2YgUmVnRXhwLFxuICAgICAgICBoYW5kbGVyOiAodCkgPT4gYHQhUmVnRXhwOiR7dC50b1N0cmluZygpfWBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiAodCkgPT4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksXG4gICAgICAgIGhhbmRsZXI6ICh0KSA9PiBgdCFVaW50OEFycmF5OiR7bmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHQpfWBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiAodCkgPT4gdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyLFxuICAgICAgICBoYW5kbGVyOiAodCkgPT4gYHQhQXJyYXlCdWZmZXI6JHtuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUodCl9YFxuICAgICAgfVxuICAgIF0sXG4gICAgcGFyc2U6IFtcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6ICh0KSA9PiB0LnN0YXJ0c1dpdGgoXCJ0IWJpZ2ludDpcIiksXG4gICAgICAgIGhhbmRsZXI6ICh0KSA9PiBCaWdJbnQodC5zbGljZSg5KSlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiAodCkgPT4gdC5zdGFydHNXaXRoKFwidCFEYXRlOlwiKSxcbiAgICAgICAgaGFuZGxlcjogKHQpID0+IG5ldyBEYXRlKHQuc2xpY2UoNykpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtYXRjaDogKHQpID0+IHQuc3RhcnRzV2l0aChcInQhVVJMOlwiKSxcbiAgICAgICAgaGFuZGxlcjogKHQpID0+IG5ldyBVUkwodC5zbGljZSg2KSlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiAodCkgPT4gdC5zdGFydHNXaXRoKFwidCFSZWdFeHA6XCIpLFxuICAgICAgICBoYW5kbGVyOiAodCkgPT4gbmV3IFJlZ0V4cCh0LnNsaWNlKDkpKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6ICh0KSA9PiB0LnN0YXJ0c1dpdGgoXCJ0IVVpbnQ4QXJyYXk6XCIpLFxuICAgICAgICBoYW5kbGVyOiAodCkgPT4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQuc2xpY2UoMTMpKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6ICh0KSA9PiB0LnN0YXJ0c1dpdGgoXCJ0IUFycmF5QnVmZmVyOlwiKSxcbiAgICAgICAgaGFuZGxlcjogKHQpID0+IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0LnNsaWNlKDE0KSkuYnVmZmVyXG4gICAgICB9XG4gICAgXVxuICB9LFxuICBzdHJpbmdpZnkodCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShjLmVuY29kZSh0KSk7XG4gIH0sXG4gIHBhcnNlKHQpIHtcbiAgICByZXR1cm4gYy5kZWNvZGUoSlNPTi5wYXJzZSh0KSk7XG4gIH0sXG4gIGVuY29kZSh0KSB7XG4gICAgZnVuY3Rpb24gbihlKSB7XG4gICAgICBpZiAoIWUgfHwgdHlwZW9mIGUgIT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgZSAhPSBcImJpZ2ludFwiKVxuICAgICAgICByZXR1cm4gZTtcbiAgICAgIGlmIChlKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICAgICAgY29uc3QgcyA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHNbaV0gPSBuKGVbaV0pO1xuICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2VcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgYy5ydWxlcy5zdHJpbmdpZnkpXG4gICAgICAgIGlmIChzLm1hdGNoKGUpKVxuICAgICAgICAgIHJldHVybiBzLmhhbmRsZXIoZSk7XG4gICAgICBjb25zdCByID0ge307XG4gICAgICBmb3IgKHZhciBhIGluIGUpXG4gICAgICAgIHJbYV0gPSBuKGVbYV0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuICAgIHJldHVybiBuKHQpO1xuICB9LFxuICBkZWNvZGUodCkge1xuICAgIGZ1bmN0aW9uIG4oZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpXG4gICAgICAgIHJldHVybiBlLm1hcChuKTtcbiAgICAgIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiICYmIGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgciA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGEgaW4gZSlcbiAgICAgICAgICBlLmhhc093blByb3BlcnR5KGEpICYmIChyW2FdID0gbihlW2FdKSk7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGZvciAoY29uc3QgciBvZiBjLnJ1bGVzLnBhcnNlKVxuICAgICAgICAgIGlmIChyLm1hdGNoKGUpID09PSAhMClcbiAgICAgICAgICAgIHJldHVybiByLmhhbmRsZXIoZSk7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGU7XG4gICAgfVxuICAgIHJldHVybiBuKHQpO1xuICB9XG59O1xuZXhwb3J0IHtcbiAgYyBhcyBUU09OXG59O1xuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gY29uZmlnPENvbmZpZ1QgZXh0ZW5kcyBDb25maWc+KGNvbmZpZzogQ29uZmlnVCk6IENvbmZpZ1Qge1xuICByZXR1cm4gY29uZmlnO1xufVxuXG5leHBvcnQgdHlwZSBDb25maWcgPSAobW9kZTogc3RyaW5nKSA9PiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ0Vudmlyb25tZW50czxUIGV4dGVuZHMgQ29uZmlnPiB7XG4gIFtrZXk6IHN0cmluZ106IChlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+IFBhcnRpYWw8QXdhaXRlZDxSZXR1cm5UeXBlPFQ+Pj4gfCBQcm9taXNlPFBhcnRpYWw8QXdhaXRlZDxSZXR1cm5UeXBlPFQ+Pj4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW52VG9TdHJpbmcodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlOiBzdHJpbmcpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWU7XG5cbiAgcmV0dXJuIGAke3ZhbHVlfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnZUb051bWJlcih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWU6IG51bWJlcikge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblxuICByZXR1cm4gTnVtYmVyLnBhcnNlSW50KHZhbHVlLCAxMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnZUb0Jvb2xlYW4odmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlOiBib29sZWFuKSB7XG4gIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHJldHVybiB0cnVlO1xuXG4gIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHZhbHVlID09PSBcIlwiKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHVuZGVmaW5lZCA9PT0gdmFsdWUpIHJldHVybiBkZWZhdWx0VmFsdWU7XG5cbiAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gaGVhZGVyc1RvSlNPTihoZWFkZXJzOiBIZWFkZXJzKSB7XG4gIGNvbnN0IGpzb246IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgKGhlYWRlcnMgYXMgYW55KS5lbnRyaWVzKCkpIHtcbiAgICBqc29uW2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4ganNvbjtcbn1cbiIsCiAgICAiZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogYW55KTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURlZXA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sIFUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+Pih0YXJnZXQ6IFQsIHNvdXJjZTogVSk6IFQge1xyXG4gIGNvbnN0IG1lcmdlZCA9IHsgLi4udGFyZ2V0IH07XHJcblxyXG4gIGZvciAoY29uc3Qga2V5IGluIHNvdXJjZSkge1xyXG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTtcclxuXHJcbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IHNvdXJjZVtrZXldO1xyXG4gICAgY29uc3QgdGFyZ2V0VmFsdWUgPSB0YXJnZXRba2V5IGFzIGtleW9mIFRdO1xyXG5cclxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpKSB7XHJcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KHRhcmdldFZhbHVlKSAmJiBpc1BsYWluT2JqZWN0KHNvdXJjZVZhbHVlKSkge1xyXG4gICAgICAgIG1lcmdlZFtrZXkgYXMga2V5b2YgVCAmIGtleW9mIFVdID0gbWVyZ2VEZWVwKHRhcmdldFZhbHVlLCBzb3VyY2VWYWx1ZSkgYXMgYW55O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAobWVyZ2VkIGFzIGFueSlba2V5XSA9IHNvdXJjZVZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1lcmdlZCBhcyBUICYgVTtcclxufVxyXG4iLAogICAgImltcG9ydCB0eXBlIHsgSVZhbGlkYXRpb24gfSBmcm9tIFwidHlwaWFcIjtcbmltcG9ydCB7IFRTT04gfSBmcm9tIFwiQHNvdXRoZXJuLWF1cm9yYS90c29uXCI7XG5pbXBvcnQgeyByZWplY3QgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcbmltcG9ydCB0eXBlIHsgJGNvbnRleHQsICRtZXRhLCBMb2dnZXIsIFJlc3VsdHMsIEdlbmVyYXRlZEluaXQgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcbmltcG9ydCB7IGhlYWRlcnNUb0pTT04gfSBmcm9tIFwiLi4vdXRpbHMvaGVhZGVycy10by1qc29uLnRzXCI7XG5pbXBvcnQgeyBtZXJnZURlZXAgfSBmcm9tIFwiLi4vdXRpbHMvbWVyZ2UtZGVlcC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbml0RXhlY3V0ZXIoZ2VuZXJhdGVkOiBHZW5lcmF0ZWRJbml0LCBydW50aW1lOiBhbnkpIHtcbiAgY29uc3QgX19leGVjdXRlID0gYXN5bmMgKFxuICAgIHJvdXRlU2NoZW1hOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgY3JlYXRlZEV4ZWN1dGVJZDogc3RyaW5nO1xuICAgICAgY3JlYXRlZExvZ2dlcjogTG9nZ2VyO1xuICAgICAgcGF0aDogc3RyaW5nO1xuICAgICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IEhlYWRlcnM7XG4gICAgICBtaXhpbkNvbnRleHQ6IFJlY29yZDxhbnksIGFueT4gfCB1bmRlZmluZWQ7XG4gICAgfSAmIChcbiAgICAgIHwge1xuICAgICAgICAgIHBhcmFtczogUmVjb3JkPGFueSwgYW55PjtcbiAgICAgICAgICBwYXJhbXNUeXBlOiBcInJhd1wiO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICBwYXJhbXM6IHN0cmluZztcbiAgICAgICAgICBwYXJhbXNUeXBlOiBcInN0cmluZ1wiO1xuICAgICAgICB9XG4gICAgKSxcbiAgKTogUHJvbWlzZTx7IGV4ZWN1dGVJZDogc3RyaW5nOyBoZWFkZXJzOiBIZWFkZXJzOyBwYXJhbXM6IFJlY29yZDxhbnksIHVua25vd24+OyByZXN1bHRzOiBSZXN1bHRzPGFueT47IGNvbnRleHQ6ICRjb250ZXh0OyBtZXRhOiBSZWFkb25seTwkbWV0YT47IHR5cGU6IFwiYWN0aW9uXCIgfCBcInN0cmVhbVwiOyBlbXB0eVJlc3VsdDogYm9vbGVhbjsgcmVzdWx0c1R5cGVTYWZldHk6IGJvb2xlYW47IGZpbmFsZXM6IEFycmF5PCgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+PiB9PiA9PiB7XG4gICAgY29uc3QgZXhlY3V0ZUlkOiBzdHJpbmcgPSBvcHRpb25zLmNyZWF0ZWRFeGVjdXRlSWQ7XG4gICAgbGV0IGhlYWRlcnM6IEhlYWRlcnM7XG4gICAgaWYgKCEob3B0aW9ucy5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7XG4gICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICAgIH1cbiAgICBpZiAoIShcInRvSlNPTlwiIGluIGhlYWRlcnMpKSAoaGVhZGVycyBhcyBhbnkpLnRvSlNPTiA9ICgpID0+IGhlYWRlcnNUb0pTT04oaGVhZGVycyk7XG5cbiAgICBjb25zdCBmaW5hbGVzOiBBcnJheTxhbnk+ID0gW107XG4gICAgY29uc3Qgb25GaW5hbGx5ID0gKGhhbmRsZXI6IGFueSkgPT4gZmluYWxlcy51bnNoaWZ0KGhhbmRsZXIpO1xuXG4gICAgbGV0IHBhcmFtczogUmVjb3JkPGFueSwgdW5rbm93bj47XG4gICAgaWYgKG9wdGlvbnMucGFyYW1zVHlwZSA9PT0gXCJyYXdcIikge1xuICAgICAgcGFyYW1zID0gb3B0aW9ucy5wYXJhbXM7XG4gICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gXCJ1bmRlZmluZWRcIikgcGFyYW1zID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvcHRpb25zLnBhcmFtcyA9PT0gXCJcIikge1xuICAgICAgICBwYXJhbXMgPSB7fTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcGFyYW1zID0gVFNPTi5wYXJzZShvcHRpb25zLnBhcmFtcyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgcmVqZWN0KFwiUEFSQU1TX1RZUEVfTk9UX1NVUFBPUlRFRFwiLCB7IGV4cGVjdGVkOiBcImpzb25cIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gXCJ1bmRlZmluZWRcIikgcGFyYW1zID0ge307XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYW1zICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocGFyYW1zKSkgdGhyb3cgcmVqZWN0KFwiUEFSQU1TX1RZUEVfTk9UX1NVUFBPUlRFRFwiLCB7IGV4cGVjdGVkOiBcImpzb25cIiB9KTtcbiAgICBpZiAoXCIkbWlsa2lvR2VuZXJhdGVQYXJhbXNcIiBpbiBwYXJhbXMgJiYgcGFyYW1zLiRtaWxraW9HZW5lcmF0ZVBhcmFtcyA9PT0gXCJlbmFibGVcIikge1xuICAgICAgaWYgKCFydW50aW1lLmRldmVsb3ApIHRocm93IHJlamVjdChcIk5PVF9ERVZFTE9QX01PREVcIiwgXCJUaGlzIGZlYXR1cmUgbXVzdCBiZSBpbiBjb29rYm9vayB0byB1c2UuXCIpO1xuICAgICAgZGVsZXRlIHBhcmFtcy4kbWlsa2lvR2VuZXJhdGVQYXJhbXM7XG4gICAgICBsZXQgcGFyYW1zUmFuZCA9IHJvdXRlU2NoZW1hLnJhbmRvbVBhcmFtcygpO1xuICAgICAgaWYgKHBhcmFtc1JhbmQgPT09IHVuZGVmaW5lZCB8fCBwYXJhbXNSYW5kID09PSBudWxsKSBwYXJhbXNSYW5kID0ge307XG4gICAgICBwYXJhbXMgPSBtZXJnZURlZXAocGFyYW1zLCBwYXJhbXNSYW5kKTtcbiAgICAgIG9wdGlvbnMuY3JlYXRlZExvZ2dlci5kZWJ1ZyhcIuKcqCB0aGUgZ2VuZXJhdGVkIHBhcmFtczpcIiwgSlNPTi5zdHJpbmdpZnkocGFyYW1zKSk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5taXhpbkNvbnRleHQ/Lmh0dHA/Lm5vdEZvdW5kICYmIG9wdGlvbnMubWl4aW5Db250ZXh0Py5odHRwPy5wYXJhbXM/LnN0cmluZykgb3B0aW9ucy5taXhpbkNvbnRleHQuaHR0cC5wYXJhbXMucGFyc2VkID0gcGFyYW1zOyAvLyBsaXN0ZW4g44Gn44OR44O844K544GX44Gf44OR44Op44Oh44O844K/44KS5rih44GZXG4gICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgIC4uLihvcHRpb25zLm1peGluQ29udGV4dCA/IG9wdGlvbnMubWl4aW5Db250ZXh0IDoge30pLFxuICAgICAgZGV2ZWxvcDogcnVudGltZS5kZXZlbG9wLFxuICAgICAgcGF0aDogb3B0aW9ucy5wYXRoLFxuICAgICAgbG9nZ2VyOiBvcHRpb25zLmNyZWF0ZWRMb2dnZXIsXG4gICAgICBlbWl0OiBydW50aW1lLmVtaXQsXG4gICAgICBleGVjdXRlSWQ6IG9wdGlvbnMuY3JlYXRlZEV4ZWN1dGVJZCxcbiAgICAgIGNvbmZpZzogcnVudGltZS5ydW50aW1lLmNvbmZpZyxcbiAgICAgIGNhbGw6IChtb2R1bGU6IGFueSwgb3B0aW9uczogYW55KSA9PiBfX2NhbGwoY29udGV4dCwgbW9kdWxlLCBvcHRpb25zKSxcbiAgICAgIG9uRmluYWxseTogb25GaW5hbGx5LFxuICAgICAgXzogcnVudGltZSxcbiAgICB9IGFzIHVua25vd24gYXMgJGNvbnRleHQ7XG4gICAgY29uc3QgcmVzdWx0czogUmVzdWx0czxhbnk+ID0geyB2YWx1ZTogdW5kZWZpbmVkIH07XG5cbiAgICBjb25zdCBtb2R1bGUgPSByb3V0ZVNjaGVtYS5tb2R1bGU7XG4gICAgY29uc3QgbWV0YSA9IChtb2R1bGUuZGVmYXVsdD8ubWV0YSA/IG1vZHVsZS5kZWZhdWx0Py5tZXRhIDoge30pIGFzIHVua25vd24gYXMgUmVhZG9ubHk8JG1ldGE+O1xuXG4gICAgaWYgKG1ldGEudHlwZVNhZmV0eSA9PT0gdW5kZWZpbmVkIHx8IG1ldGEudHlwZVNhZmV0eSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHJvdXRlU2NoZW1hLnZhbGlkYXRlUGFyYW1zKHBhcmFtcykgYXMgSVZhbGlkYXRpb248YW55PjtcbiAgICAgIGlmICghdmFsaWRhdGlvbi5zdWNjZXNzKSB0aHJvdyByZWplY3QoXCJQQVJBTVNfVFlQRV9JTkNPUlJFQ1RcIiwgeyAuLi52YWxpZGF0aW9uLmVycm9yc1swXSwgbWVzc2FnZTogYFRoZSB2YWx1ZSAnJHt2YWxpZGF0aW9uLmVycm9yc1swXS5wYXRofScgaXMgJyR7dmFsaWRhdGlvbi5lcnJvcnNbMF0udmFsdWV9Jywgd2hpY2ggZG9lcyBub3QgbWVldCAnJHt2YWxpZGF0aW9uLmVycm9yc1swXS5leHBlY3RlZH0nIHJlcXVpcmVtZW50cy5gIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHJ1bnRpbWUuZW1pdChcIm1pbGtpbzpleGVjdXRlQmVmb3JlXCIsIHsgZXhlY3V0ZUlkOiBvcHRpb25zLmNyZWF0ZWRFeGVjdXRlSWQsIGxvZ2dlcjogb3B0aW9ucy5jcmVhdGVkTG9nZ2VyLCBwYXRoOiBvcHRpb25zLnBhdGgsIG1ldGEsIGNvbnRleHQgfSk7XG5cbiAgICByZXN1bHRzLnZhbHVlID0gYXdhaXQgbW9kdWxlLmRlZmF1bHQuaGFuZGxlcihjb250ZXh0LCBwYXJhbXMpO1xuXG4gICAgbGV0IHJlc3VsdHNUeXBlU2FmZXR5ID0gZmFsc2U7XG4gICAgaWYgKHJlc3VsdHM/LnZhbHVlPy4kbWlsa2lvVHlwZSA9PT0gXCJ0eXBlLXNhZmV0eVwiKSB7XG4gICAgICByZXN1bHRzVHlwZVNhZmV0eSA9IHRydWU7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uID0gcm91dGVTY2hlbWEudmFsaWRhdGVSZXN1bHRzKHJlc3VsdHMudmFsdWUudmFsdWUpIGFzIElWYWxpZGF0aW9uPGFueT47XG4gICAgICBpZiAoIXZhbGlkYXRpb24uc3VjY2VzcykgdGhyb3cgcmVqZWN0KFwiUkVTVUxUU19UWVBFX0lOQ09SUkVDVFwiLCB7IC4uLnZhbGlkYXRpb24uZXJyb3JzWzBdLCBtZXNzYWdlOiBgVGhlIHZhbHVlICcke3ZhbGlkYXRpb24uZXJyb3JzWzBdLnBhdGh9JyBpcyAnJHt2YWxpZGF0aW9uLmVycm9yc1swXS52YWx1ZX0nLCB3aGljaCBkb2VzIG5vdCBtZWV0ICcke3ZhbGlkYXRpb24uZXJyb3JzWzBdLmV4cGVjdGVkfScgcmVxdWlyZW1lbnRzLmAgfSk7XG4gICAgICByZXN1bHRzLnZhbHVlID0gcmVzdWx0cy52YWx1ZS52YWx1ZTtcbiAgICB9XG5cbiAgICBsZXQgZW1wdHlSZXN1bHQgPSBmYWxzZTtcbiAgICBpZiAocmVzdWx0cy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHJlc3VsdHMudmFsdWUgPT09IG51bGwgfHwgcmVzdWx0cy52YWx1ZSA9PT0gXCJcIikge1xuICAgICAgZW1wdHlSZXN1bHQgPSB0cnVlO1xuICAgICAgcmVzdWx0cy52YWx1ZSA9IHt9O1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRzLnZhbHVlKSkge1xuICAgICAgdGhyb3cgcmVqZWN0KFwiRkFJTFwiLCBcIlRoZSByZXR1cm4gdHlwZSBvZiB0aGUgaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCwgd2hpY2ggaXMgY3VycmVudGx5IGFuIGFycmF5LlwiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXN1bHRzLnZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyByZWplY3QoXCJGQUlMXCIsIFwiVGhlIHJldHVybiB0eXBlIG9mIHRoZSBoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0LCB3aGljaCBpcyBjdXJyZW50bHkgYSBwcmltaXRpdmUgdHlwZS5cIik7XG4gICAgfVxuXG4gICAgYXdhaXQgcnVudGltZS5lbWl0KFwibWlsa2lvOmV4ZWN1dGVBZnRlclwiLCB7IGV4ZWN1dGVJZDogb3B0aW9ucy5jcmVhdGVkRXhlY3V0ZUlkLCBsb2dnZXI6IG9wdGlvbnMuY3JlYXRlZExvZ2dlciwgcGF0aDogb3B0aW9ucy5wYXRoLCBtZXRhLCBjb250ZXh0LCByZXN1bHRzIH0pO1xuXG4gICAgcmV0dXJuIHsgZXhlY3V0ZUlkLCBoZWFkZXJzLCBwYXJhbXMsIHJlc3VsdHMsIGNvbnRleHQsIG1ldGEsIHR5cGU6IG1vZHVsZS4kbWlsa2lvVHlwZSwgZW1wdHlSZXN1bHQsIHJlc3VsdHNUeXBlU2FmZXR5LCBmaW5hbGVzIH07XG4gIH07XG5cbiAgY29uc3QgX19jYWxsID0gYXN5bmMgKGNvbnRleHQ6ICRjb250ZXh0LCBtb2R1bGU6IHsgZGVmYXVsdDogYW55IH0sIHBhcmFtcz86IGFueSk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgY29uc3QgbW9kdWxlQXdhaXRlZCA9IGF3YWl0IG1vZHVsZTtcbiAgICByZXR1cm4gYXdhaXQgbW9kdWxlQXdhaXRlZC5kZWZhdWx0LmhhbmRsZXIoY29udGV4dCwgcGFyYW1zKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIF9fY2FsbCxcbiAgICBfX2V4ZWN1dGUsXG4gIH07XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgTWlsa2lvV29ybGQgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBib290c3RyYXA8Qm9vdHN0cmFwSW5pdFQgZXh0ZW5kcyBCb290c3RyYXBJbml0Pihpbml0OiBCb290c3RyYXBJbml0VCk6IEJvb3RzdHJhcEluaXRUIHtcclxuICByZXR1cm4gaW5pdDtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQm9vdHN0cmFwSW5pdCA9ICh3b3JsZDogTWlsa2lvV29ybGQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xyXG4iLAogICAgImltcG9ydCB0eXBlIHsgJGNvbnRleHQsIENvbnRleHRIdHRwLCBSZXN1bHRzLCBMb2dnZXIsICRtZXRhIH0gZnJvbSBcIi4uL2luZGV4LnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgJGV2ZW50cyB7XG4gIFwibWlsa2lvOmh0dHBSZXF1ZXN0XCI6IHsgZXhlY3V0ZUlkOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgbG9nZ2VyOiBMb2dnZXI7IGh0dHA6IENvbnRleHRIdHRwPFJlY29yZDxzdHJpbmcsIGFueT4+IH07XG4gIFwibWlsa2lvOmh0dHBSZXNwb25zZVwiOiB7IGV4ZWN1dGVJZDogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGxvZ2dlcjogTG9nZ2VyOyBodHRwOiBDb250ZXh0SHR0cDxSZWNvcmQ8c3RyaW5nLCBhbnk+PjsgY29udGV4dDogJGNvbnRleHQgfTtcbiAgXCJtaWxraW86aHR0cE5vdEZvdW5kXCI6IHsgZXhlY3V0ZUlkOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgbG9nZ2VyOiBMb2dnZXI7IGh0dHA6IENvbnRleHRIdHRwPFJlY29yZDxzdHJpbmcsIGFueT4+IH07XG4gIFwibWlsa2lvOmV4ZWN1dGVCZWZvcmVcIjogeyBleGVjdXRlSWQ6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBsb2dnZXI6IExvZ2dlcjsgbWV0YTogJG1ldGE7IGNvbnRleHQ6ICRjb250ZXh0IH07XG4gIFwibWlsa2lvOmV4ZWN1dGVBZnRlclwiOiB7IGV4ZWN1dGVJZDogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGxvZ2dlcjogTG9nZ2VyOyBtZXRhOiAkbWV0YTsgY29udGV4dDogJGNvbnRleHQ7IHJlc3VsdHM6IFJlc3VsdHM8YW55PiB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbml0RXZlbnRNYW5hZ2VyKCkge1xuICBjb25zdCBoYW5kbGVycyA9IG5ldyBNYXA8KGV2ZW50OiBhbnkpID0+IHZvaWQsIHN0cmluZz4oKTtcbiAgY29uc3QgaW5kZXhlZCA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8KGV2ZW50OiBhbnkpID0+IHZvaWQ+PigpO1xuXG4gIGNvbnN0IGV2ZW50TWFuYWdlciA9IHtcbiAgICBvbjogPEtleSBleHRlbmRzIGtleW9mICRldmVudHMsIEhhbmRsZXIgZXh0ZW5kcyAoZXZlbnQ6ICRldmVudHNbS2V5XSkgPT4gdm9pZD4oa2V5OiBLZXksIGhhbmRsZXI6IEhhbmRsZXIpID0+IHtcbiAgICAgIGhhbmRsZXJzLnNldChoYW5kbGVyLCBrZXkgYXMgc3RyaW5nKTtcbiAgICAgIGlmIChpbmRleGVkLmhhcyhrZXkgYXMgc3RyaW5nKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgaW5kZXhlZC5zZXQoa2V5IGFzIHN0cmluZywgbmV3IFNldCgpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNldCA9IGluZGV4ZWQuZ2V0KGtleSBhcyBzdHJpbmcpITtcbiAgICAgIHNldC5hZGQoaGFuZGxlcik7XG4gICAgICBoYW5kbGVycy5zZXQoaGFuZGxlciwga2V5IGFzIHN0cmluZyk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGhhbmRsZXJzLmRlbGV0ZShoYW5kbGVyKTtcbiAgICAgICAgc2V0LmRlbGV0ZShoYW5kbGVyKTtcbiAgICAgIH07XG4gICAgfSxcbiAgICBvZmY6IDxLZXkgZXh0ZW5kcyBrZXlvZiAkZXZlbnRzLCBIYW5kbGVyIGV4dGVuZHMgKGV2ZW50OiAkZXZlbnRzW0tleV0pID0+IHZvaWQ+KGtleTogS2V5LCBoYW5kbGVyOiBIYW5kbGVyKSA9PiB7XG4gICAgICBjb25zdCBzZXQgPSBpbmRleGVkLmdldChrZXkgYXMgc3RyaW5nKTtcbiAgICAgIGlmICghc2V0KSByZXR1cm47XG4gICAgICBoYW5kbGVycy5kZWxldGUoaGFuZGxlcik7XG4gICAgICBzZXQuZGVsZXRlKGhhbmRsZXIpO1xuICAgIH0sXG4gICAgZW1pdDogYXN5bmMgPEtleSBleHRlbmRzIGtleW9mICRldmVudHMsIFZhbHVlIGV4dGVuZHMgJGV2ZW50c1tLZXldPihrZXk6IEtleSwgdmFsdWU6IFZhbHVlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBoID0gaW5kZXhlZC5nZXQoa2V5IGFzIHN0cmluZyk7XG4gICAgICBpZiAoaCkge1xuICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaCkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gZXZlbnRNYW5hZ2VyO1xufVxuIiwKICAgICJleHBvcnQgdHlwZSBNaWxraW9GbG93PFQsIFRSZXR1cm4gPSBhbnksIFROZXh0ID0gYW55PiA9IHtcclxuICBlbWl0OiAoZmxvdzogVCkgPT4gdm9pZDtcclxuICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOiAoKSA9PiBNaWxraW9GbG93PFQ+O1xyXG4gIG5leHQoLi4uW3ZhbHVlXTogW10gfCBbVE5leHRdKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxULCBUUmV0dXJuPj47XHJcbiAgcmV0dXJuKCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VCwgVFJldHVybj4+O1xyXG4gIHRocm93KGVycm9yOiBhbnkpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PFQsIFRSZXR1cm4+PjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGbG93PFQ+KCk6IE1pbGtpb0Zsb3c8VD4ge1xyXG4gIGxldCBzdGF0dXM6IFwicGVuZGluZ1wiIHwgXCJyZXNvbHZlZFwiIHwgXCJyZWplY3RlZFwiID0gXCJwZW5kaW5nXCI7XHJcbiAgY29uc3QgZmxvd3M6IEFycmF5PHtcclxuICAgIGJsYW5rOiBib29sZWFuO1xyXG4gICAgcHJvbWlzZTogUHJvbWlzZTxUPjtcclxuICAgIHJlc29sdmU6ICh2YWx1ZT86IFQgfCBQcm9taXNlTGlrZTxUPikgPT4gdm9pZDtcclxuICAgIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcclxuICB9PiA9IFtdO1xyXG5cclxuICBjb25zdCBpdGVyYXRvciA9IHtcclxuICAgIGVtaXQ6IChmbG93OiBUKSA9PiB7XHJcbiAgICAgIGlmIChmbG93cy5hdCgtMSk/LmJsYW5rID09PSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IGZsb3dzLmF0KC0xKSE7XHJcbiAgICAgICAgaXRlbS5ibGFuayA9IGZhbHNlO1xyXG4gICAgICAgIGl0ZW0ucmVzb2x2ZShmbG93KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcmVzb2x2ZXJzID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzPFQ+KCk7XHJcbiAgICAgICAgcmVzb2x2ZXJzLnJlc29sdmUoZmxvdyk7XHJcbiAgICAgICAgZmxvd3MucHVzaCh7IC4uLnJlc29sdmVycywgYmxhbms6IGZhbHNlIH0gYXMgYW55KTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIC4uLih7XHJcbiAgICAgIGFzeW5jIG5leHQoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxUPj4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMgIT09IFwicGVuZGluZ1wiKSByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbnVsbCB9O1xyXG4gICAgICAgIGlmIChmbG93cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGNvbnN0IHJlc29sdmVycyA9IFByb21pc2Uud2l0aFJlc29sdmVyczxUPigpO1xyXG4gICAgICAgICAgZmxvd3MucHVzaCh7IC4uLnJlc29sdmVycywgYmxhbms6IHRydWUgfSBhcyBhbnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmbG93ID0gZmxvd3MuYXQoMCkhO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZsb3cucHJvbWlzZTtcclxuICAgICAgICBmbG93cy5zaGlmdCgpO1xyXG4gICAgICAgIHJldHVybiB7IGRvbmU6IHN0YXR1cyAhPT0gXCJwZW5kaW5nXCIsIHZhbHVlOiByZXN1bHQgfTtcclxuICAgICAgfSxcclxuICAgICAgYXN5bmMgcmV0dXJuKCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcclxuICAgICAgICBzdGF0dXMgPSBcInJlc29sdmVkXCI7XHJcbiAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XHJcbiAgICAgICAgICBmbG93LmJsYW5rID0gZmFsc2U7XHJcbiAgICAgICAgICBmbG93LnJlc29sdmUodW5kZWZpbmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG51bGwgfTtcclxuICAgICAgfSxcclxuICAgICAgYXN5bmMgdGhyb3coZXJyOiBhbnkpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PHZvaWQ+PiB7XHJcbiAgICAgICAgc3RhdHVzID0gXCJyZWplY3RlZFwiO1xyXG4gICAgICAgIGlmIChmbG93cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGNvbnN0IHJlc29sdmVycyA9IFByb21pc2Uud2l0aFJlc29sdmVyczxUPigpO1xyXG4gICAgICAgICAgZmxvd3MucHVzaCh7IC4uLnJlc29sdmVycywgYmxhbms6IHRydWUgfSBhcyBhbnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcclxuICAgICAgICAgIGZsb3cuYmxhbmsgPSBmYWxzZTtcclxuICAgICAgICAgIGZsb3cucmVqZWN0KGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBudWxsIH07XHJcbiAgICAgIH0sXHJcbiAgICB9IHNhdGlzZmllcyBBc3luY0l0ZXJhdG9yPHVua25vd24+KSxcclxuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICByZXR1cm4gaXRlcmF0b3IgYXMgTWlsa2lvRmxvdzxUPjtcclxufVxyXG4iLAogICAgImltcG9ydCB0eXBlIHsgTWlsa2lvV29ybGQgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVyPEhhbmRsZXJJbml0VCBleHRlbmRzIEhhbmRsZXJJbml0Pihpbml0OiBIYW5kbGVySW5pdFQpOiBIYW5kbGVySW5pdFQge1xyXG4gIHJldHVybiBpbml0O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBIYW5kbGVySW5pdCA9ICh3b3JsZDogTWlsa2lvV29ybGQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xyXG4iLAogICAgInR5cGUgSWRHZW5lcmF0b3JPcHRpb25zID0ge1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIHRpbWVzdGFtcDogYm9vbGVhbjtcbiAgc2VxdWVudGlhbDogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGRlZmluZUlkR2VuZXJhdG9yKG9wdGlvbnM6IElkR2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMubGVuZ3RoKSBvcHRpb25zLmxlbmd0aCA9IDI0O1xuICBpZiAob3B0aW9ucy5sZW5ndGggPCAxKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxlbmd0aFwiKTtcbiAgaWYgKG9wdGlvbnMubGVuZ3RoID4gNjEpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGVuZ3RoXCIpO1xuICBpZiAob3B0aW9ucy50aW1lc3RhbXAgJiYgb3B0aW9ucy5sZW5ndGggPCA5KSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxlbmd0aFwiKTtcbiAgbGV0IGxhc3RUaW1lID0gMDtcbiAgbGV0IGxhc3REZWNpbWFsID0gMG47XG4gIHJldHVybiB7XG4gICAgY3JlYXRlSWQoKSB7XG4gICAgICBsZXQgcmFuZExlbmd0aCA9IG9wdGlvbnMubGVuZ3RoITtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBsZXQgaWQgPSBcIlwiO1xuICAgICAgaWYgKG9wdGlvbnMudGltZXN0YW1wKSB7XG4gICAgICAgIHJhbmRMZW5ndGggLT0gODtcbiAgICAgICAgaWQgPSBgJHtpZH0ke19fYmlnSW50VG9TdHJpbmcoQmlnSW50KG5vdykpLnBhZFN0YXJ0KDgsIFwiMFwiKX1gO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuc2VxdWVudGlhbCAmJiBsYXN0VGltZSA9PT0gbm93KSB7XG4gICAgICAgIGlkID0gYCR7aWR9JHtfX2JpZ0ludFRvU3RyaW5nKCsrbGFzdERlY2ltYWwpLnBhZFN0YXJ0KDEsIFwiMFwiKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFzdFRpbWUgPSBub3c7XG4gICAgICAgIGNvbnN0IG1pbiA9IDBuO1xuICAgICAgICBjb25zdCBtYXggPSBfX2dldE1heFZhbHVlKEJpZ0ludChyYW5kTGVuZ3RoKSk7XG4gICAgICAgIGxhc3REZWNpbWFsID0gX19zZWN1cmVSYW5kb21CaWdJbnQobWluLCBtYXgpO1xuICAgICAgICBpZCA9IGAke2lkfSR7X19iaWdJbnRUb1N0cmluZyhsYXN0RGVjaW1hbCkucGFkU3RhcnQocmFuZExlbmd0aCwgXCIwXCIpfWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfSxcbiAgICBnZXRJZFRpbWVzdGFtcChpZDogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy50aW1lc3RhbXAgPyBOdW1iZXIoX19zdHJpbmdUb0JpZ0ludChpZC5zbGljZSgwLCA4KS5yZXBsYWNlQWxsKFwiMFwiLCBcIlwiKSkpIDogMDtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBFTkNPRElORyA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblxuZnVuY3Rpb24gX19zZWN1cmVSYW5kb21CaWdJbnQobWluOiBiaWdpbnQsIG1heDogYmlnaW50KTogYmlnaW50IHtcbiAgaWYgKG1pbiA+PSBtYXgpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VcIik7XG5cbiAgY29uc3QgcmFuZ2UgPSBtYXggLSBtaW4gKyAxbjtcbiAgY29uc3QgYnl0ZUNvdW50ID0gTWF0aC5jZWlsKE51bWJlcihCaWdJbnQocmFuZ2UudG9TdHJpbmcoMikubGVuZ3RoKSkgLyA4KTtcbiAgY29uc3QgZW50cm9weUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZUNvdW50KTtcblxuICBsZXQgcmFuZG9tVmFsdWU6IGJpZ2ludDtcbiAgZG8ge1xuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZW50cm9weUJ5dGVzKTtcbiAgICByYW5kb21WYWx1ZSA9XG4gICAgICBCaWdJbnQoXG4gICAgICAgIGAweCR7QXJyYXkuZnJvbShlbnRyb3B5Qnl0ZXMpXG4gICAgICAgICAgLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKVxuICAgICAgICAgIC5qb2luKFwiXCIpfWAsXG4gICAgICApICUgcmFuZ2U7XG4gIH0gd2hpbGUgKHJhbmRvbVZhbHVlIDwgMG4pO1xuXG4gIHJldHVybiBtaW4gKyByYW5kb21WYWx1ZTtcbn1cblxuZnVuY3Rpb24gX19iaWdJbnRUb1N0cmluZyh2YWx1ZTogYmlnaW50KTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xuICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgbGV0IGN1cnJlbnQgPSB2YWx1ZTtcblxuICBpZiAoY3VycmVudCA9PT0gMG4pIHJldHVybiBFTkNPRElOR1swXTtcblxuICB3aGlsZSAoY3VycmVudCA+IDBuKSB7XG4gICAgY29uc3QgcmVtYWluZGVyID0gY3VycmVudCAlIGJhc2U7XG4gICAgcmVzdWx0ID0gRU5DT0RJTkdbTnVtYmVyKHJlbWFpbmRlcildICsgcmVzdWx0O1xuICAgIGN1cnJlbnQgPSBjdXJyZW50IC8gYmFzZTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBfX3N0cmluZ1RvQmlnSW50KHN0cjogc3RyaW5nKTogYmlnaW50IHtcbiAgY29uc3QgY2hhck1hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IEVOQ09ESU5HLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhck1hcFtFTkNPRElOR1tpXV0gPSBpO1xuICB9XG5cbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xuICBsZXQgcmVzdWx0ID0gMG47XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyID0gc3RyW2ldO1xuICAgIGlmICghKGNoYXIgaW4gY2hhck1hcCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFyYWN0ZXIgJyR7Y2hhcn0nIGluIGlucHV0IHN0cmluZ2ApO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IEJpZ0ludChjaGFyTWFwW2NoYXJdKTtcbiAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgdmFsdWU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBfX2dldE1heFZhbHVlKG46IGJpZ2ludCk6IGJpZ2ludCB7XG4gIHJldHVybiBCaWdJbnQoRU5DT0RJTkcubGVuZ3RoKSAqKiBuIC0gMW47XG59XG5cbmNvbnN0IGlkR2VuZXJhdG9yID0gZGVmaW5lSWRHZW5lcmF0b3IoeyBsZW5ndGg6IDI0LCB0aW1lc3RhbXA6IGZhbHNlLCBzZXF1ZW50aWFsOiBmYWxzZSB9KTtcblxuZXhwb3J0IGNvbnN0IF9fY3JlYXRlSWQgPSBpZEdlbmVyYXRvci5jcmVhdGVJZDtcbiIsCiAgICAiaW1wb3J0IHsgX19jcmVhdGVJZCB9IGZyb20gXCIuLi91dGlscy9jcmVhdGUtaWQudHNcIjtcblxuZXhwb3J0IHR5cGUgRXhlY3V0ZUlkR2VuZXJhdG9yID0gKGhlYWRlcnM/OiBIZWFkZXJzKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVEZWZhdWx0RXhlY3V0ZUlkR2VuZXJhdG9yKCkge1xuICByZXR1cm4gX19jcmVhdGVJZDtcbn1cbiIsCiAgICAiaW1wb3J0IHsgdHlwZSAkdHlwZXMsIF9faW5pdENvbW1hbmRlciwgX19pbml0TGlzdGVuZXIsIF9faW5pdEV4ZWN1dGVyLCBfX2luaXRFdmVudE1hbmFnZXIsIHR5cGUgRXhlY3V0ZUlkLCB0eXBlIExvZ2dlciwgdHlwZSBNaXhpbiwgdHlwZSBHZW5lcmF0ZWRJbml0LCB0eXBlIFBpbmcsIHR5cGUgTG9nZ2VyU3VibWl0dGluZ0hhbmRsZXIsIHR5cGUgTG9nZ2VySW5zZXJ0aW5nSGFuZGxlciB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xuaW1wb3J0IHsgZGVmaW5lRGVmYXVsdEV4ZWN1dGVJZEdlbmVyYXRvciB9IGZyb20gXCIuLi9leGVjdXRlL2V4ZWN1dGUtaWQtZ2VuZXJhdG9yLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlsa2lvSW5pdCB7XG4gIHBvcnQ6IG51bWJlcjtcbiAgZGV2ZWxvcDogYm9vbGVhbjtcbiAgY29va2Jvb2s6IHtcbiAgICBjb29rYm9va1BvcnQ6IG51bWJlcjtcbiAgfTtcbiAgY29ycz86IHtcbiAgICBjb3JzQWxsb3dNZXRob2RzPzogc3RyaW5nO1xuICAgIGNvcnNBbGxvd0hlYWRlcnM/OiBzdHJpbmc7XG4gICAgY29yc0FsbG93T3JpZ2luPzogc3RyaW5nO1xuICB9O1xuICBpZ25vcmVQYXRoTGV2ZWw/OiBudW1iZXI7XG4gIHJlYWxJcD86IChoZWFkZXJzOiBIZWFkZXJzKSA9PiBzdHJpbmc7XG4gIGV4ZWN1dGVJZD86IChoZWFkZXJzOiBIZWFkZXJzKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG4gIG9uTG9nZ2VyU3VibWl0dGluZz86IExvZ2dlclN1Ym1pdHRpbmdIYW5kbGVyO1xuICBvbkxvZ2dlckluc2VydGluZz86IExvZ2dlckluc2VydGluZ0hhbmRsZXI7XG4gIGJvb3RzdHJhcHM/OiBBcnJheTwod29ybGQ6IE1pbGtpb1dvcmxkKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZD47XG59XG5cbmV4cG9ydCB0eXBlIE1pbGtpb1J1bnRpbWVJbml0PFQgZXh0ZW5kcyBNaWxraW9Jbml0PiA9IE1peGluPFxuICBULFxuICB7XG4gICAgZXhlY3V0ZUlkOiAoaGVhZGVyczogSGVhZGVycykgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xuICAgIHJ1bnRpbWU6IHtcbiAgICAgIHJlcXVlc3Q6IE1hcDxFeGVjdXRlSWQsIHsgbG9nZ2VyOiBMb2dnZXIgfT47XG4gICAgICBjb25maWc6IEF3YWl0ZWQ8UmV0dXJuVHlwZTwkdHlwZXNbXCJnZW5lcmF0ZWRcIl1bXCJjb25maWdTY2hlbWFcIl0+PjtcbiAgICAgIGFwcDogYW55O1xuICAgIH07XG4gICAgb246IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgX19pbml0RXZlbnRNYW5hZ2VyPj5bXCJvblwiXTtcbiAgICBvZmY6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgX19pbml0RXZlbnRNYW5hZ2VyPj5bXCJvZmZcIl07XG4gICAgZW1pdDogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBfX2luaXRFdmVudE1hbmFnZXI+PltcImVtaXRcIl07XG4gIH1cbj47XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVXb3JsZDxNaWxraW9PcHRpb25zIGV4dGVuZHMgTWlsa2lvSW5pdD4oZ2VuZXJhdGVkOiBHZW5lcmF0ZWRJbml0LCBjb25maWdTY2hlbWE6IHsgZ2V0OiAoKSA9PiBQcm9taXNlPFJlY29yZDxhbnksIGFueT4+IH0sIG9wdGlvbnM6IE1pbGtpb09wdGlvbnMpOiBQcm9taXNlPE1pbGtpb1dvcmxkPE1pbGtpb09wdGlvbnM+PiB7XG4gIGNvbnN0IGV4ZWN1dGVJZCA9IG9wdGlvbnMuZXhlY3V0ZUlkID8/IGRlZmluZURlZmF1bHRFeGVjdXRlSWRHZW5lcmF0b3IoKTtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgY29uZmlnU2NoZW1hLmdldCgpO1xuXG4gIGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgcmVxdWVzdDogbmV3IE1hcCgpLFxuICAgIGNvbmZpZyxcbiAgfSBhcyBNaWxraW9SdW50aW1lSW5pdDxNaWxraW9PcHRpb25zPltcInJ1bnRpbWVcIl07XG5cbiAgY29uc3QgZXZlbnRNYW5hZ2VyID0gX19pbml0RXZlbnRNYW5hZ2VyKCk7XG5cbiAgY29uc3QgXzogTWlsa2lvUnVudGltZUluaXQ8TWlsa2lvT3B0aW9ucz4gPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBleGVjdXRlSWQsXG4gICAgcnVudGltZSxcbiAgICBvbjogZXZlbnRNYW5hZ2VyLm9uLFxuICAgIG9mZjogZXZlbnRNYW5hZ2VyLm9mZixcbiAgICBlbWl0OiBldmVudE1hbmFnZXIuZW1pdCxcbiAgfTtcblxuICBjb25zdCBleGVjdXRlciA9IF9faW5pdEV4ZWN1dGVyKGdlbmVyYXRlZCwgXyk7XG4gIGNvbnN0IGNvbW1hbmRlciA9IF9faW5pdENvbW1hbmRlcihnZW5lcmF0ZWQsIF8pO1xuICBjb25zdCBsaXN0ZW5lciA9IF9faW5pdExpc3RlbmVyKGdlbmVyYXRlZCwgXywgZXhlY3V0ZXIpO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIGFwcFxuICBjb25zdCB3b3JsZCA9IHtcbiAgICBfLFxuICAgIC8vIGV2ZW50IG1hbmFnZXJcbiAgICBvbjogZXZlbnRNYW5hZ2VyLm9uLFxuICAgIG9mZjogZXZlbnRNYW5hZ2VyLm9mZixcbiAgICBlbWl0OiBldmVudE1hbmFnZXIuZW1pdCxcbiAgICAvLyBjb21tYW5kZXJcbiAgICBjb21tYW5kZXIsXG4gICAgLy8gbGlzdGVuZXJcbiAgICBsaXN0ZW5lcixcbiAgICAvLyBmdW5jdGlvblxuICAgIGNvbmZpZyxcbiAgfTtcblxuICBydW50aW1lLmFwcCA9IHdvcmxkO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuYm9vdHN0cmFwcykpIHtcbiAgICBmb3IgKGNvbnN0IGJvb3RzdHJhcCBvZiBvcHRpb25zLmJvb3RzdHJhcHMpIHtcbiAgICAgIGF3YWl0IGJvb3RzdHJhcCh3b3JsZCBhcyBNaWxraW9Xb3JsZDxNaWxraW9PcHRpb25zPik7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoZ2VuZXJhdGVkLmhhbmRsZXJTY2hlbWEubG9hZEhhbmRsZXJzKHdvcmxkKSk7XG5cbiAgcmV0dXJuIHdvcmxkIGFzIE1pbGtpb1dvcmxkPE1pbGtpb09wdGlvbnM+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1pbGtpb1dvcmxkPE1pbGtpb09wdGlvbnMgZXh0ZW5kcyBNaWxraW9Jbml0ID0gTWlsa2lvSW5pdD4ge1xuICBfOiBNaWxraW9SdW50aW1lSW5pdDxNaWxraW9PcHRpb25zPjtcbiAgLy8gZXZlbnQgbWFuYWdlclxuICBvbjogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBfX2luaXRFdmVudE1hbmFnZXI+PltcIm9uXCJdO1xuICBvZmY6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgX19pbml0RXZlbnRNYW5hZ2VyPj5bXCJvZmZcIl07XG4gIGVtaXQ6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgX19pbml0RXZlbnRNYW5hZ2VyPj5bXCJlbWl0XCJdO1xuICBwaW5nOiAob3B0aW9ucz86IHsgdGltZW91dD86IG51bWJlciB9KSA9PiBQcm9taXNlPFBpbmc+O1xuICAvLyBjb21tYW5kZXJcbiAgY29tbWFuZGVyOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIF9faW5pdENvbW1hbmRlcj4+O1xuICAvLyBsaXN0ZW5lclxuICBsaXN0ZW5lcjogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBfX2luaXRMaXN0ZW5lcj4+O1xuICBjb25maWc6IFJlYWRvbmx5PEF3YWl0ZWQ8UmV0dXJuVHlwZTwkdHlwZXNbXCJjb25maWdTY2hlbWFcIl1bXCJnZXRcIl0+Pj47XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgR2VuZXJhdGVkSW5pdCB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZDxDb21tYW5kSW5pdFQgZXh0ZW5kcyBDb21tYW5kSW5pdD4oaW5pdDogQ29tbWFuZEluaXRUKTogQ29tbWFuZDxDb21tYW5kSW5pdFQ+IHtcbiAgY29uc3QgY29tbWFuZCA9IGluaXQgYXMgdW5rbm93biBhcyBDb21tYW5kPENvbW1hbmRJbml0VD47XG4gIGNvbW1hbmQuJG1pbGtpb1R5cGUgPSBcImNvbW1hbmRcIjtcbiAgcmV0dXJuIGNvbW1hbmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEluaXQge1xuICBoYW5kbGVyOiAoY29tbWFuZHM6IEFycmF5PHN0cmluZz4sIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZDxDb21tYW5kSW5pdFQgZXh0ZW5kcyBDb21tYW5kSW5pdD4ge1xuICAkbWlsa2lvVHlwZTogXCJjb21tYW5kXCI7XG4gIGhhbmRsZXI6IENvbW1hbmRJbml0VFtcImhhbmRsZXJcIl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2luaXRDb21tYW5kZXIoZ2VuZXJhdGVkOiBHZW5lcmF0ZWRJbml0LCBydW50aW1lOiBhbnkpIHtcbiAgY29uc3QgY29tbWFuZGVyID0gYXN5bmMgKGFyZ3Y6IEFycmF5PHN0cmluZz4sIG9wdGlvbnM/OiB7IG9uTm90Rm91bmQ/OiAoKSA9PiBhbnkgfSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIHBhdGg6IFwiaW5kZXhcIixcbiAgICAgIGNvbW1hbmRzOiBbXSBhcyBBcnJheTxzdHJpbmc+LFxuICAgICAgb3B0aW9uczoge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdHJ1ZT4sXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IHYgb2YgYXJndi5zbGljZSgzKSkge1xuICAgICAgaWYgKHYuc3RhcnRzV2l0aChcIi0tXCIpICYmIHYuaW5jbHVkZXMoXCI9XCIpKSB7XG4gICAgICAgIGNvbnN0IHZTcGxpdGVkID0gdi5zcGxpdChcIj1cIik7XG4gICAgICAgIHBhcmFtcy5vcHRpb25zW3ZTcGxpdGVkWzBdLnNsaWNlKDIpXSA9IHZTcGxpdGVkLnNsaWNlKDEsIHZTcGxpdGVkLmxlbmd0aCkuam9pbihcIj1cIik7XG4gICAgICB9IGVsc2UgaWYgKHYuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICAgIHBhcmFtcy5vcHRpb25zW3Yuc2xpY2UoMildID0gXCIxXCI7XG4gICAgICB9IGVsc2UgaWYgKHYuc3RhcnRzV2l0aChcIi1cIikgJiYgdi5pbmNsdWRlcyhcIj1cIikpIHtcbiAgICAgICAgY29uc3QgdlNwbGl0ZWQgPSB2LnNwbGl0KFwiPVwiKTtcbiAgICAgICAgcGFyYW1zLm9wdGlvbnNbdlNwbGl0ZWRbMF0uc2xpY2UoMSldID0gdlNwbGl0ZWQuc2xpY2UoMSwgdlNwbGl0ZWQubGVuZ3RoKS5qb2luKFwiPVwiKTtcbiAgICAgIH0gZWxzZSBpZiAodi5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICBwYXJhbXMub3B0aW9uc1t2LnNsaWNlKDEpXSA9IFwiMVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLmNvbW1hbmRzLnB1c2godik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhcmd2Lmxlbmd0aCA9PT0gMikgcGFyYW1zLnBhdGggPSBcImluZGV4XCI7XG4gICAgZWxzZSBwYXJhbXMucGF0aCA9IGAke2FyZ3ZbMl0gPz8gXCJpbmRleFwifWA7XG5cbiAgICBpZiAoIShwYXJhbXMucGF0aCBpbiBnZW5lcmF0ZWQuY29tbWFuZFNjaGVtYS5jb21tYW5kcykpIHtcbiAgICAgIGlmIChvcHRpb25zPy5vbk5vdEZvdW5kKSByZXR1cm4gYXdhaXQgb3B0aW9ucy5vbk5vdEZvdW5kKCk7XG4gICAgICBjb25zb2xlLmxvZyhgXFx4MUJbNDRtIFV3VSBcXHgxQlswbSBcXHgxQlsybUNvbW1hbmQgbm90IGZvdW5kOlxceDFCWzBtIFxceDFCWzMybSR7cGFyYW1zLnBhdGh9XFx4MUJbMG1gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IGdlbmVyYXRlZC5jb21tYW5kU2NoZW1hLmNvbW1hbmRzW3BhcmFtcy5wYXRoXS5tb2R1bGUuaGFuZGxlcihwYXJhbXMuY29tbWFuZHMsIHBhcmFtcy5vcHRpb25zKTtcbiAgfTtcblxuICByZXR1cm4gY29tbWFuZGVyO1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7ICRjb250ZXh0LCAkbWV0YSB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYWN0aW9uPEFjdGlvbkluaXRUIGV4dGVuZHMgQWN0aW9uSW5pdD4oaW5pdDogQWN0aW9uSW5pdFQpOiBBY3Rpb248QWN0aW9uSW5pdFQ+IHtcbiAgY29uc3QgYWN0aW9uID0gaW5pdCBhcyB1bmtub3duIGFzIEFjdGlvbjxBY3Rpb25Jbml0VD47XG4gIGFjdGlvbi4kbWlsa2lvVHlwZSA9IFwiYWN0aW9uXCI7XG4gIGlmIChhY3Rpb24ubWV0YSA9PT0gdW5kZWZpbmVkKSBhY3Rpb24ubWV0YSA9IHt9O1xuICByZXR1cm4gYWN0aW9uO1xufVxuXG5leHBvcnQgdHlwZSBBY3Rpb25Jbml0ID0ge1xuICBtZXRhPzogJG1ldGE7XG4gIGhhbmRsZXI6IChjb250ZXh0OiAkY29udGV4dCwgcGFyYW1zOiBhbnkpID0+IFByb21pc2U8dW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBBY3Rpb248QWN0aW9uSW5pdFQgZXh0ZW5kcyBBY3Rpb25Jbml0PiA9IHtcbiAgJG1pbGtpb1R5cGU6IFwiYWN0aW9uXCI7XG4gIG1ldGE6IEFjdGlvbkluaXRUW1wibWV0YVwiXSBleHRlbmRzIHVuZGVmaW5lZCA/IHt9IDogQWN0aW9uSW5pdFRbXCJtZXRhXCJdO1xuICBoYW5kbGVyOiBBY3Rpb25Jbml0VFtcImhhbmRsZXJcIl07XG59O1xuIiwKICAgICJpbXBvcnQgdHlwZSB7ICRjb250ZXh0LCAkbWV0YSB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtPFN0cmVhbUluaXRUIGV4dGVuZHMgU3RyZWFtSW5pdD4oaW5pdDogU3RyZWFtSW5pdFQpOiBTdHJlYW08U3RyZWFtSW5pdFQ+IHtcbiAgY29uc3Qgc3RyZWFtID0gaW5pdCBhcyB1bmtub3duIGFzIFN0cmVhbTxTdHJlYW1Jbml0VD47XG4gIHN0cmVhbS4kbWlsa2lvVHlwZSA9IFwic3RyZWFtXCI7XG4gIGlmIChzdHJlYW0ubWV0YSA9PT0gdW5kZWZpbmVkKSBzdHJlYW0ubWV0YSA9IHt9O1xuICByZXR1cm4gc3RyZWFtO1xufVxuXG5leHBvcnQgdHlwZSBTdHJlYW1Jbml0ID0ge1xuICBtZXRhPzogJG1ldGE7XG4gIGhhbmRsZXI6IChjb250ZXh0OiAkY29udGV4dCwgcGFyYW1zOiBhbnkpID0+IEFzeW5jR2VuZXJhdG9yPHVua25vd24+O1xufTtcblxuZXhwb3J0IHR5cGUgU3RyZWFtPFN0cmVhbUluaXRUIGV4dGVuZHMgU3RyZWFtSW5pdD4gPSB7XG4gICRtaWxraW9UeXBlOiBcInN0cmVhbVwiO1xuICBtZXRhOiBTdHJlYW1Jbml0VFtcIm1ldGFcIl0gZXh0ZW5kcyB1bmRlZmluZWQgPyB7fSA6IFN0cmVhbUluaXRUW1wibWV0YVwiXTtcbiAgaGFuZGxlcjogU3RyZWFtSW5pdFRbXCJoYW5kbGVyXCJdO1xufTtcbiIsCiAgICAiLyoqXG4gKiBAbW9kdWxlIGNvbnN0YW50c1xuICogQHN1bW1hcnkgVXNlZnVsIGNvbnN0YW50c1xuICogQGRlc2NyaXB0aW9uXG4gKiBDb2xsZWN0aW9uIG9mIHVzZWZ1bCBkYXRlIGNvbnN0YW50cy5cbiAqXG4gKiBUaGUgY29uc3RhbnRzIGNvdWxkIGJlIGltcG9ydGVkIGZyb20gYGRhdGUtZm5zL2NvbnN0YW50c2A6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG1heFRpbWUsIG1pblRpbWUgfSBmcm9tIFwiLi9jb25zdGFudHMvZGF0ZS1mbnMvY29uc3RhbnRzXCI7XG4gKlxuICogZnVuY3Rpb24gaXNBbGxvd2VkVGltZSh0aW1lKSB7XG4gKiAgIHJldHVybiB0aW1lIDw9IG1heFRpbWUgJiYgdGltZSA+PSBtaW5UaW1lO1xuICogfVxuICogYGBgXG4gKi9cblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIGRheXNJbldlZWtcbiAqIEBzdW1tYXJ5IERheXMgaW4gMSB3ZWVrLlxuICovXG5leHBvcnQgY29uc3QgZGF5c0luV2VlayA9IDc7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBkYXlzSW5ZZWFyXG4gKiBAc3VtbWFyeSBEYXlzIGluIDEgeWVhci5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEhvdyBtYW55IGRheXMgaW4gYSB5ZWFyLlxuICpcbiAqIE9uZSB5ZWFycyBlcXVhbHMgMzY1LjI0MjUgZGF5cyBhY2NvcmRpbmcgdG8gdGhlIGZvcm11bGE6XG4gKlxuICogPiBMZWFwIHllYXIgb2NjdXJzIGV2ZXJ5IDQgeWVhcnMsIGV4Y2VwdCBmb3IgeWVhcnMgdGhhdCBhcmUgZGl2aXNpYmxlIGJ5IDEwMCBhbmQgbm90IGRpdmlzaWJsZSBieSA0MDAuXG4gKiA+IDEgbWVhbiB5ZWFyID0gKDM2NSsxLzQtMS8xMDArMS80MDApIGRheXMgPSAzNjUuMjQyNSBkYXlzXG4gKi9cbmV4cG9ydCBjb25zdCBkYXlzSW5ZZWFyID0gMzY1LjI0MjU7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtYXhUaW1lXG4gKiBAc3VtbWFyeSBNYXhpbXVtIGFsbG93ZWQgdGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgbWF4VGltZSB9IGZyb20gXCIuL2NvbnN0YW50cy9kYXRlLWZucy9jb25zdGFudHNcIjtcbiAqXG4gKiBjb25zdCBpc1ZhbGlkID0gODY0MDAwMDAwMDAwMDAwMSA8PSBtYXhUaW1lO1xuICogLy89PiBmYWxzZVxuICpcbiAqIG5ldyBEYXRlKDg2NDAwMDAwMDAwMDAwMDEpO1xuICogLy89PiBJbnZhbGlkIERhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IG1heFRpbWUgPSBNYXRoLnBvdygxMCwgOCkgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWluVGltZVxuICogQHN1bW1hcnkgTWluaW11bSBhbGxvd2VkIHRpbWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IG1pblRpbWUgfSBmcm9tIFwiLi9jb25zdGFudHMvZGF0ZS1mbnMvY29uc3RhbnRzXCI7XG4gKlxuICogY29uc3QgaXNWYWxpZCA9IC04NjQwMDAwMDAwMDAwMDAxID49IG1pblRpbWU7XG4gKiAvLz0+IGZhbHNlXG4gKlxuICogbmV3IERhdGUoLTg2NDAwMDAwMDAwMDAwMDEpXG4gKiAvLz0+IEludmFsaWQgRGF0ZVxuICovXG5leHBvcnQgY29uc3QgbWluVGltZSA9IC1tYXhUaW1lO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5XZWVrXG4gKiBAc3VtbWFyeSBNaWxsaXNlY29uZHMgaW4gMSB3ZWVrLlxuICovXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzSW5XZWVrID0gNjA0ODAwMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5EYXlcbiAqIEBzdW1tYXJ5IE1pbGxpc2Vjb25kcyBpbiAxIGRheS5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kc0luRGF5ID0gODY0MDAwMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJbk1pbnV0ZVxuICogQHN1bW1hcnkgTWlsbGlzZWNvbmRzIGluIDEgbWludXRlXG4gKi9cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZHNJbk1pbnV0ZSA9IDYwMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5Ib3VyXG4gKiBAc3VtbWFyeSBNaWxsaXNlY29uZHMgaW4gMSBob3VyXG4gKi9cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZHNJbkhvdXIgPSAzNjAwMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5TZWNvbmRcbiAqIEBzdW1tYXJ5IE1pbGxpc2Vjb25kcyBpbiAxIHNlY29uZFxuICovXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzSW5TZWNvbmQgPSAxMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWludXRlc0luWWVhclxuICogQHN1bW1hcnkgTWludXRlcyBpbiAxIHllYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBtaW51dGVzSW5ZZWFyID0gNTI1NjAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWludXRlc0luTW9udGhcbiAqIEBzdW1tYXJ5IE1pbnV0ZXMgaW4gMSBtb250aC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbnV0ZXNJbk1vbnRoID0gNDMyMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaW51dGVzSW5EYXlcbiAqIEBzdW1tYXJ5IE1pbnV0ZXMgaW4gMSBkYXkuXG4gKi9cbmV4cG9ydCBjb25zdCBtaW51dGVzSW5EYXkgPSAxNDQwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWludXRlc0luSG91clxuICogQHN1bW1hcnkgTWludXRlcyBpbiAxIGhvdXIuXG4gKi9cbmV4cG9ydCBjb25zdCBtaW51dGVzSW5Ib3VyID0gNjA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtb250aHNJblF1YXJ0ZXJcbiAqIEBzdW1tYXJ5IE1vbnRocyBpbiAxIHF1YXJ0ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBtb250aHNJblF1YXJ0ZXIgPSAzO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbW9udGhzSW5ZZWFyXG4gKiBAc3VtbWFyeSBNb250aHMgaW4gMSB5ZWFyLlxuICovXG5leHBvcnQgY29uc3QgbW9udGhzSW5ZZWFyID0gMTI7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBxdWFydGVyc0luWWVhclxuICogQHN1bW1hcnkgUXVhcnRlcnMgaW4gMSB5ZWFyXG4gKi9cbmV4cG9ydCBjb25zdCBxdWFydGVyc0luWWVhciA9IDQ7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5Ib3VyXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgaG91ci5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJbkhvdXIgPSAzNjAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luTWludXRlXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgbWludXRlLlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luTWludXRlID0gNjA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5EYXlcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSBkYXkuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5EYXkgPSBzZWNvbmRzSW5Ib3VyICogMjQ7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5XZWVrXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgd2Vlay5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJbldlZWsgPSBzZWNvbmRzSW5EYXkgKiA3O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luWWVhclxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIHllYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5ZZWFyID0gc2Vjb25kc0luRGF5ICogZGF5c0luWWVhcjtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJbk1vbnRoXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgbW9udGhcbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJbk1vbnRoID0gc2Vjb25kc0luWWVhciAvIDEyO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luUXVhcnRlclxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIHF1YXJ0ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5RdWFydGVyID0gc2Vjb25kc0luTW9udGggKiAzO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgY29uc3RydWN0RnJvbVN5bWJvbFxuICogQHN1bW1hcnkgU3ltYm9sIGVuYWJsaW5nIERhdGUgZXh0ZW5zaW9ucyB0byBpbmhlcml0IHByb3BlcnRpZXMgZnJvbSB0aGUgcmVmZXJlbmNlIGRhdGUuXG4gKlxuICogVGhlIHN5bWJvbCBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgYGNvbnN0cnVjdEZyb21gIGZ1bmN0aW9uIHRvIGNvbnN0cnVjdCBhIGRhdGVcbiAqIHVzaW5nIGEgcmVmZXJlbmNlIGRhdGUgYW5kIGEgdmFsdWUuIEl0IGFsbG93cyB0byB0cmFuc2ZlciBleHRyYSBwcm9wZXJ0aWVzXG4gKiBmcm9tIHRoZSByZWZlcmVuY2UgZGF0ZSB0byB0aGUgbmV3IGRhdGUuIEl0J3MgdXNlZnVsIGZvciBleHRlbnNpb25zIGxpa2VcbiAqIFtgVFpEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3R6KSB0aGF0IGFjY2VwdCBhIHRpbWUgem9uZSBhc1xuICogYSBjb25zdHJ1Y3RvciBhcmd1bWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdEZyb21TeW1ib2wgPSBTeW1ib2wuZm9yKFwiY29uc3RydWN0RGF0ZUZyb21cIik7XG4iLAogICAgImltcG9ydCB7IGNvbnN0cnVjdEZyb21TeW1ib2wgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBjb25zdHJ1Y3RGcm9tXG4gKiBAY2F0ZWdvcnkgR2VuZXJpYyBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb25zdHJ1Y3RzIGEgZGF0ZSB1c2luZyB0aGUgcmVmZXJlbmNlIGRhdGUgYW5kIHRoZSB2YWx1ZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIGZ1bmN0aW9uIGNvbnN0cnVjdHMgYSBuZXcgZGF0ZSB1c2luZyB0aGUgY29uc3RydWN0b3IgZnJvbSB0aGUgcmVmZXJlbmNlXG4gKiBkYXRlIGFuZCB0aGUgZ2l2ZW4gdmFsdWUuIEl0IGhlbHBzIHRvIGJ1aWxkIGdlbmVyaWMgZnVuY3Rpb25zIHRoYXQgYWNjZXB0XG4gKiBkYXRlIGV4dGVuc2lvbnMuXG4gKlxuICogSXQgZGVmYXVsdHMgdG8gYERhdGVgIGlmIHRoZSBwYXNzZWQgcmVmZXJlbmNlIGRhdGUgaXMgYSBudW1iZXIgb3IgYSBzdHJpbmcuXG4gKlxuICogU3RhcnRpbmcgZnJvbSB2My43LjAsIGl0IGFsbG93cyB0byBjb25zdHJ1Y3QgYSBkYXRlIHVzaW5nIGBbU3ltYm9sLmZvcihcImNvbnN0cnVjdERhdGVGcm9tXCIpXWBcbiAqIGVuYWJsaW5nIHRvIHRyYW5zZmVyIGV4dHJhIHByb3BlcnRpZXMgZnJvbSB0aGUgcmVmZXJlbmNlIGRhdGUgdG8gdGhlIG5ldyBkYXRlLlxuICogSXQncyB1c2VmdWwgZm9yIGV4dGVuc2lvbnMgbGlrZSBbYFRaRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy90eilcbiAqIHRoYXQgYWNjZXB0IGEgdGltZSB6b25lIGFzIGEgY29uc3RydWN0b3IgYXJndW1lbnQuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgcmVmZXJlbmNlIGRhdGUgdG8gdGFrZSBjb25zdHJ1Y3RvciBmcm9tXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY3JlYXRlIHRoZSBkYXRlXG4gKlxuICogQHJldHVybnMgRGF0ZSBpbml0aWFsaXplZCB1c2luZyB0aGUgZ2l2ZW4gZGF0ZSBhbmQgdmFsdWVcbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20vZGF0ZS1mbnNcIjtcbiAqXG4gKiAvLyBBIGZ1bmN0aW9uIHRoYXQgY2xvbmVzIGEgZGF0ZSBwcmVzZXJ2aW5nIHRoZSBvcmlnaW5hbCB0eXBlXG4gKiBmdW5jdGlvbiBjbG9uZURhdGU8RGF0ZVR5cGUgZXh0ZW5kcyBEYXRlPihkYXRlOiBEYXRlVHlwZSk6IERhdGVUeXBlIHtcbiAqICAgcmV0dXJuIGNvbnN0cnVjdEZyb20oXG4gKiAgICAgZGF0ZSwgLy8gVXNlIGNvbnN0cnVjdG9yIGZyb20gdGhlIGdpdmVuIGRhdGVcbiAqICAgICBkYXRlLmdldFRpbWUoKSAvLyBVc2UgdGhlIGRhdGUgdmFsdWUgdG8gY3JlYXRlIGEgbmV3IGRhdGVcbiAqICAgKTtcbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdEZyb20oZGF0ZSwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBkYXRlID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBkYXRlKHZhbHVlKTtcblxuICBpZiAoZGF0ZSAmJiB0eXBlb2YgZGF0ZSA9PT0gXCJvYmplY3RcIiAmJiBjb25zdHJ1Y3RGcm9tU3ltYm9sIGluIGRhdGUpXG4gICAgcmV0dXJuIGRhdGVbY29uc3RydWN0RnJvbVN5bWJvbF0odmFsdWUpO1xuXG4gIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIG5ldyBkYXRlLmNvbnN0cnVjdG9yKHZhbHVlKTtcblxuICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGNvbnN0cnVjdEZyb207XG4iLAogICAgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqIFN0YXJ0aW5nIGZyb20gdjMuNy4wLCBpdCBjbG9uZXMgYSBkYXRlIHVzaW5nIGBbU3ltYm9sLmZvcihcImNvbnN0cnVjdERhdGVGcm9tXCIpXWBcbiAqIGVuYWJsaW5nIHRvIHRyYW5zZmVyIGV4dHJhIHByb3BlcnRpZXMgZnJvbSB0aGUgcmVmZXJlbmNlIGRhdGUgdG8gdGhlIG5ldyBkYXRlLlxuICogSXQncyB1c2VmdWwgZm9yIGV4dGVuc2lvbnMgbGlrZSBbYFRaRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy90eilcbiAqIHRoYXQgYWNjZXB0IGEgdGltZSB6b25lIGFzIGEgY29uc3RydWN0b3IgYXJndW1lbnQuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBhcmd1bWVudCAtIFRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2xvbmUgdGhlIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUobmV3IERhdGUoMjAxNCwgMSwgMTEsIDExLCAzMCwgMzApKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCB0aGUgdGltZXN0YW1wIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUoMTM5MjA5ODQzMDAwMClcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQsIGNvbnRleHQpIHtcbiAgLy8gW1RPRE9dIEdldCByaWQgb2YgYHRvRGF0ZWAgb3IgYGNvbnN0cnVjdEZyb21gP1xuICByZXR1cm4gY29uc3RydWN0RnJvbShjb250ZXh0IHx8IGFyZ3VtZW50LCBhcmd1bWVudCk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgdG9EYXRlO1xuIiwKICAgICJsZXQgZGVmYXVsdE9wdGlvbnMgPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkge1xuICByZXR1cm4gZGVmYXVsdE9wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn1cbiIsCiAgICAiaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi9fbGliL2RlZmF1bHRPcHRpb25zLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN0YXJ0T2ZXZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZldlZWtcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSB3ZWVrIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSB3ZWVrIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhIHdlZWtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGEgd2VlayBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IFN1biBBdWcgMzEgMjAxNCAwMDowMDowMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0aGUgd2VlayBzdGFydHMgb24gTW9uZGF5LCB0aGUgc3RhcnQgb2YgdGhlIHdlZWsgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApLCB7IHdlZWtTdGFydHNPbjogMSB9KVxuICogLy89PiBNb24gU2VwIDAxIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZXZWVrKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICBjb25zdCB3ZWVrU3RhcnRzT24gPVxuICAgIG9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uID8/XG4gICAgZGVmYXVsdE9wdGlvbnMubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICAwO1xuXG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgZGF5ID0gX2RhdGUuZ2V0RGF5KCk7XG4gIGNvbnN0IGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuXG4gIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpIC0gZGlmZik7XG4gIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZldlZWs7XG4iLAogICAgImltcG9ydCB7IHN0YXJ0T2ZXZWVrIH0gZnJvbSBcIi4vc3RhcnRPZldlZWsuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN0YXJ0T2ZJU09XZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZklTT1dlZWtcbiAqIEBjYXRlZ29yeSBJU08gV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYW4gSVNPIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhbiBJU08gd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYW4gSVNPIHdlZWsgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mSVNPV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBNb24gU2VwIDAxIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZJU09XZWVrKGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHN0YXJ0T2ZXZWVrKGRhdGUsIHsgLi4ub3B0aW9ucywgd2Vla1N0YXJ0c09uOiAxIH0pO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZJU09XZWVrO1xuIiwKICAgICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZklTT1dlZWsgfSBmcm9tIFwiLi9zdGFydE9mSVNPV2Vlay5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBnZXRJU09XZWVrWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldElTT1dlZWtZZWFyXG4gKiBAY2F0ZWdvcnkgSVNPIFdlZWstTnVtYmVyaW5nIFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUsXG4gKiB3aGljaCBhbHdheXMgc3RhcnRzIDMgZGF5cyBiZWZvcmUgdGhlIHllYXIncyBmaXJzdCBUaHVyc2RheS5cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICpcbiAqIEByZXR1cm5zIFRoZSBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCBJU08td2VlayBudW1iZXJpbmcgeWVhciBpcyAyIEphbnVhcnkgMjAwNT9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldElTT1dlZWtZZWFyKG5ldyBEYXRlKDIwMDUsIDAsIDIpKVxuICogLy89PiAyMDA0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IGNvbnN0cnVjdEZyb20oX2RhdGUsIDApO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgY29uc3Qgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZklTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG5cbiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IGNvbnN0cnVjdEZyb20oX2RhdGUsIDApO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldEZ1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICBjb25zdCBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcblxuICBpZiAoX2RhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoX2RhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXRJU09XZWVrWWVhcjtcbiIsCiAgICAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4uL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEdvb2dsZSBDaHJvbWUgYXMgb2YgNjcuMC4zMzk2Ljg3IGludHJvZHVjZWQgdGltZXpvbmVzIHdpdGggb2Zmc2V0IHRoYXQgaW5jbHVkZXMgc2Vjb25kcy5cbiAqIFRoZXkgdXN1YWxseSBhcHBlYXIgZm9yIGRhdGVzIHRoYXQgZGVub3RlIHRpbWUgYmVmb3JlIHRoZSB0aW1lem9uZXMgd2VyZSBpbnRyb2R1Y2VkXG4gKiAoZS5nLiBmb3IgJ0V1cm9wZS9QcmFndWUnIHRpbWV6b25lIHRoZSBvZmZzZXQgaXMgR01UKzAwOjU3OjQ0IGJlZm9yZSAxIE9jdG9iZXIgMTg5MVxuICogYW5kIEdNVCswMTowMDowMCBhZnRlciB0aGF0IGRhdGUpXG4gKlxuICogRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIHRoZSBvZmZzZXQgaW4gbWludXRlcyBhbmQgd291bGQgcmV0dXJuIDU3IGZvciB0aGUgZXhhbXBsZSBhYm92ZSxcbiAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGNhbGN1bGF0aW9ucy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWV6b25lIG9mZnNldCBpbiBtaWxsaXNlY29uZHMgdGhhdCB0YWtlcyBzZWNvbmRzIGluIGFjY291bnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSk7XG4gIGNvbnN0IHV0Y0RhdGUgPSBuZXcgRGF0ZShcbiAgICBEYXRlLlVUQyhcbiAgICAgIF9kYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICBfZGF0ZS5nZXRNb250aCgpLFxuICAgICAgX2RhdGUuZ2V0RGF0ZSgpLFxuICAgICAgX2RhdGUuZ2V0SG91cnMoKSxcbiAgICAgIF9kYXRlLmdldE1pbnV0ZXMoKSxcbiAgICAgIF9kYXRlLmdldFNlY29uZHMoKSxcbiAgICAgIF9kYXRlLmdldE1pbGxpc2Vjb25kcygpLFxuICAgICksXG4gICk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoX2RhdGUuZ2V0RnVsbFllYXIoKSk7XG4gIHJldHVybiArZGF0ZSAtICt1dGNEYXRlO1xufVxuIiwKICAgICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4uL2NvbnN0cnVjdEZyb20uanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZURhdGVzKGNvbnRleHQsIC4uLmRhdGVzKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZSA9IGNvbnN0cnVjdEZyb20uYmluZChcbiAgICBudWxsLFxuICAgIGNvbnRleHQgfHwgZGF0ZXMuZmluZCgoZGF0ZSkgPT4gdHlwZW9mIGRhdGUgPT09IFwib2JqZWN0XCIpLFxuICApO1xuICByZXR1cm4gZGF0ZXMubWFwKG5vcm1hbGl6ZSk7XG59XG4iLAogICAgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZkRheX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZEYXlcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhIGRheSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgZGF5IGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgYSBkYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGEgZGF5IGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZkRheShuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBUdWUgU2VwIDAyIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZEYXkoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZkRheTtcbiIsCiAgICAiaW1wb3J0IHsgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyB9IGZyb20gXCIuL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy5qc1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5pbXBvcnQgeyBtaWxsaXNlY29uZHNJbkRheSB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZkRheSB9IGZyb20gXCIuL3N0YXJ0T2ZEYXkuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5c30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5c1xuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBkYXlzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgZGF5cyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy4gVGhpcyBtZWFucyB0aGF0IHRoZSB0aW1lcyBhcmUgcmVtb3ZlZFxuICogZnJvbSB0aGUgZGF0ZXMgYW5kIHRoZW4gdGhlIGRpZmZlcmVuY2UgaW4gZGF5cyBpcyBjYWxjdWxhdGVkLlxuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIGVhcmxpZXIgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGNhbGVuZGFyIGRheXNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgY2FsZW5kYXIgZGF5cyBhcmUgYmV0d2VlblxuICogLy8gMiBKdWx5IDIwMTEgMjM6MDA6MDAgYW5kIDIgSnVseSAyMDEyIDAwOjAwOjAwP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKFxuICogICBuZXcgRGF0ZSgyMDEyLCA2LCAyLCAwLCAwKSxcbiAqICAgbmV3IERhdGUoMjAxMSwgNiwgMiwgMjMsIDApXG4gKiApXG4gKiAvLz0+IDM2NlxuICogLy8gSG93IG1hbnkgY2FsZW5kYXIgZGF5cyBhcmUgYmV0d2VlblxuICogLy8gMiBKdWx5IDIwMTEgMjM6NTk6MDAgYW5kIDMgSnVseSAyMDExIDAwOjAxOjAwP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAzLCAwLCAxKSxcbiAqICAgbmV3IERhdGUoMjAxMSwgNiwgMiwgMjMsIDU5KVxuICogKVxuICogLy89PiAxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKFxuICAgIG9wdGlvbnM/LmluLFxuICAgIGxhdGVyRGF0ZSxcbiAgICBlYXJsaWVyRGF0ZSxcbiAgKTtcblxuICBjb25zdCBsYXRlclN0YXJ0T2ZEYXkgPSBzdGFydE9mRGF5KGxhdGVyRGF0ZV8pO1xuICBjb25zdCBlYXJsaWVyU3RhcnRPZkRheSA9IHN0YXJ0T2ZEYXkoZWFybGllckRhdGVfKTtcblxuICBjb25zdCBsYXRlclRpbWVzdGFtcCA9XG4gICAgK2xhdGVyU3RhcnRPZkRheSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMobGF0ZXJTdGFydE9mRGF5KTtcbiAgY29uc3QgZWFybGllclRpbWVzdGFtcCA9XG4gICAgK2VhcmxpZXJTdGFydE9mRGF5IC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhlYXJsaWVyU3RhcnRPZkRheSk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgYmVjYXVzZSB0aGUgbnVtYmVyIG9mXG4gIC8vIG1pbGxpc2Vjb25kcyBpbiBhIGRheSBpcyBub3QgY29uc3RhbnQgKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2ZcbiAgLy8gdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KS5cbiAgcmV0dXJuIE1hdGgucm91bmQoKGxhdGVyVGltZXN0YW1wIC0gZWFybGllclRpbWVzdGFtcCkgLyBtaWxsaXNlY29uZHNJbkRheSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzO1xuIiwKICAgICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgZ2V0SVNPV2Vla1llYXIgfSBmcm9tIFwiLi9nZXRJU09XZWVrWWVhci5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZklTT1dlZWsgfSBmcm9tIFwiLi9zdGFydE9mSVNPV2Vlay5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZklTT1dlZWtZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZklTT1dlZWtZZWFyXG4gKiBAY2F0ZWdvcnkgSVNPIFdlZWstTnVtYmVyaW5nIFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhbiBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyLFxuICogd2hpY2ggYWx3YXlzIHN0YXJ0cyAzIGRheXMgYmVmb3JlIHRoZSB5ZWFyJ3MgZmlyc3QgVGh1cnNkYXkuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhbiBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgMiBKdWx5IDIwMDU6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mSVNPV2Vla1llYXIobmV3IERhdGUoMjAwNSwgNiwgMikpXG4gKiAvLz0+IE1vbiBKYW4gMDMgMjAwNSAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZklTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgeWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICBjb25zdCBmb3VydGhPZkphbnVhcnkgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0RnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIHN0YXJ0T2ZJU09XZWVrKGZvdXJ0aE9mSmFudWFyeSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZklTT1dlZWtZZWFyO1xuIiwKICAgICIvKipcbiAqIEBuYW1lIGlzRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSBkYXRlP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLiBUaGUgZnVuY3Rpb24gd29ya3MgZm9yIGRhdGVzIHRyYW5zZmVycmVkIGFjcm9zcyBpZnJhbWVzLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgZGF0ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZShOYU4pKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBzb21lIHZhbHVlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKCcyMDE0LTAyLTMxJylcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIG9iamVjdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSh7fSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBEYXRlXVwiKVxuICApO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzRGF0ZTtcbiIsCiAgICAiaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSBcIi4vaXNEYXRlLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXShodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZSlcbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZSBpcyB2YWxpZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0aWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZChkYXRlKSB7XG4gIHJldHVybiAhKCghaXNEYXRlKGRhdGUpICYmIHR5cGVvZiBkYXRlICE9PSBcIm51bWJlclwiKSB8fCBpc05hTigrdG9EYXRlKGRhdGUpKSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNWYWxpZDtcbiIsCiAgICAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdGFydE9mWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZZZWFyXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGEgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSB5ZWFyIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZlllYXIobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwMCkpXG4gKiAvLz0+IFdlZCBKYW4gMDEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZlllYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGRhdGVfLnNldEZ1bGxZZWFyKGRhdGVfLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICBkYXRlXy5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGVfO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZZZWFyO1xuIiwKICAgICJjb25zdCBmb3JtYXREaXN0YW5jZUxvY2FsZSA9IHtcbiAgbGVzc1RoYW5YU2Vjb25kczoge1xuICAgIG9uZTogXCJsZXNzIHRoYW4gYSBzZWNvbmRcIixcbiAgICBvdGhlcjogXCJsZXNzIHRoYW4ge3tjb3VudH19IHNlY29uZHNcIixcbiAgfSxcblxuICB4U2Vjb25kczoge1xuICAgIG9uZTogXCIxIHNlY29uZFwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSBzZWNvbmRzXCIsXG4gIH0sXG5cbiAgaGFsZkFNaW51dGU6IFwiaGFsZiBhIG1pbnV0ZVwiLFxuXG4gIGxlc3NUaGFuWE1pbnV0ZXM6IHtcbiAgICBvbmU6IFwibGVzcyB0aGFuIGEgbWludXRlXCIsXG4gICAgb3RoZXI6IFwibGVzcyB0aGFuIHt7Y291bnR9fSBtaW51dGVzXCIsXG4gIH0sXG5cbiAgeE1pbnV0ZXM6IHtcbiAgICBvbmU6IFwiMSBtaW51dGVcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gbWludXRlc1wiLFxuICB9LFxuXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiBcImFib3V0IDEgaG91clwiLFxuICAgIG90aGVyOiBcImFib3V0IHt7Y291bnR9fSBob3Vyc1wiLFxuICB9LFxuXG4gIHhIb3Vyczoge1xuICAgIG9uZTogXCIxIGhvdXJcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gaG91cnNcIixcbiAgfSxcblxuICB4RGF5czoge1xuICAgIG9uZTogXCIxIGRheVwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSBkYXlzXCIsXG4gIH0sXG5cbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6IFwiYWJvdXQgMSB3ZWVrXCIsXG4gICAgb3RoZXI6IFwiYWJvdXQge3tjb3VudH19IHdlZWtzXCIsXG4gIH0sXG5cbiAgeFdlZWtzOiB7XG4gICAgb25lOiBcIjEgd2Vla1wiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSB3ZWVrc1wiLFxuICB9LFxuXG4gIGFib3V0WE1vbnRoczoge1xuICAgIG9uZTogXCJhYm91dCAxIG1vbnRoXCIsXG4gICAgb3RoZXI6IFwiYWJvdXQge3tjb3VudH19IG1vbnRoc1wiLFxuICB9LFxuXG4gIHhNb250aHM6IHtcbiAgICBvbmU6IFwiMSBtb250aFwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSBtb250aHNcIixcbiAgfSxcblxuICBhYm91dFhZZWFyczoge1xuICAgIG9uZTogXCJhYm91dCAxIHllYXJcIixcbiAgICBvdGhlcjogXCJhYm91dCB7e2NvdW50fX0geWVhcnNcIixcbiAgfSxcblxuICB4WWVhcnM6IHtcbiAgICBvbmU6IFwiMSB5ZWFyXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IHllYXJzXCIsXG4gIH0sXG5cbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogXCJvdmVyIDEgeWVhclwiLFxuICAgIG90aGVyOiBcIm92ZXIge3tjb3VudH19IHllYXJzXCIsXG4gIH0sXG5cbiAgYWxtb3N0WFllYXJzOiB7XG4gICAgb25lOiBcImFsbW9zdCAxIHllYXJcIixcbiAgICBvdGhlcjogXCJhbG1vc3Qge3tjb3VudH19IHllYXJzXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RGlzdGFuY2UgPSAodG9rZW4sIGNvdW50LCBvcHRpb25zKSA9PiB7XG4gIGxldCByZXN1bHQ7XG5cbiAgY29uc3QgdG9rZW5WYWx1ZSA9IGZvcm1hdERpc3RhbmNlTG9jYWxlW3Rva2VuXTtcbiAgaWYgKHR5cGVvZiB0b2tlblZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZTtcbiAgfSBlbHNlIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZShcInt7Y291bnR9fVwiLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zPy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiBcImluIFwiICsgcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgXCIgYWdvXCI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBidWlsZEZvcm1hdExvbmdGbihhcmdzKSB7XG4gIHJldHVybiAob3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgLy8gVE9ETzogUmVtb3ZlIFN0cmluZygpXG4gICAgY29uc3Qgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgY29uc3QgZm9ybWF0ID0gYXJncy5mb3JtYXRzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHNbYXJncy5kZWZhdWx0V2lkdGhdO1xuICAgIHJldHVybiBmb3JtYXQ7XG4gIH07XG59XG4iLAogICAgImltcG9ydCB7IGJ1aWxkRm9ybWF0TG9uZ0ZuIH0gZnJvbSBcIi4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4uanNcIjtcblxuY29uc3QgZGF0ZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwiRUVFRSwgTU1NTSBkbywgeVwiLFxuICBsb25nOiBcIk1NTU0gZG8sIHlcIixcbiAgbWVkaXVtOiBcIk1NTSBkLCB5XCIsXG4gIHNob3J0OiBcIk1NL2RkL3l5eXlcIixcbn07XG5cbmNvbnN0IHRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiBcImg6bW06c3MgYSB6enp6XCIsXG4gIGxvbmc6IFwiaDptbTpzcyBhIHpcIixcbiAgbWVkaXVtOiBcImg6bW06c3MgYVwiLFxuICBzaG9ydDogXCJoOm1tIGFcIixcbn07XG5cbmNvbnN0IGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06IFwie3tkYXRlfX0sIHt7dGltZX19XCIsXG4gIHNob3J0OiBcInt7ZGF0ZX19LCB7e3RpbWV9fVwiLFxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdExvbmcgPSB7XG4gIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6IFwiZnVsbFwiLFxuICB9KSxcblxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiBcImZ1bGxcIixcbiAgfSksXG5cbiAgZGF0ZVRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlVGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiBcImZ1bGxcIixcbiAgfSksXG59O1xuIiwKICAgICJjb25zdCBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHtcbiAgbGFzdFdlZWs6IFwiJ2xhc3QnIGVlZWUgJ2F0JyBwXCIsXG4gIHllc3RlcmRheTogXCIneWVzdGVyZGF5IGF0JyBwXCIsXG4gIHRvZGF5OiBcIid0b2RheSBhdCcgcFwiLFxuICB0b21vcnJvdzogXCIndG9tb3Jyb3cgYXQnIHBcIixcbiAgbmV4dFdlZWs6IFwiZWVlZSAnYXQnIHBcIixcbiAgb3RoZXI6IFwiUFwiLFxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFJlbGF0aXZlID0gKHRva2VuLCBfZGF0ZSwgX2Jhc2VEYXRlLCBfb3B0aW9ucykgPT5cbiAgZm9ybWF0UmVsYXRpdmVMb2NhbGVbdG9rZW5dO1xuIiwKICAgICIvKipcbiAqIFRoZSBsb2NhbGl6ZSBmdW5jdGlvbiBhcmd1bWVudCBjYWxsYmFjayB3aGljaCBhbGxvd3MgdG8gY29udmVydCByYXcgdmFsdWUgdG9cbiAqIHRoZSBhY3R1YWwgdHlwZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY29udmVydFxuICpcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgdmFsdWVcbiAqL1xuXG4vKipcbiAqIFRoZSBtYXAgb2YgbG9jYWxpemVkIHZhbHVlcyBmb3IgZWFjaCB3aWR0aC5cbiAqL1xuXG4vKipcbiAqIFRoZSBpbmRleCB0eXBlIG9mIHRoZSBsb2NhbGUgdW5pdCB2YWx1ZS4gSXQgdHlwZXMgY29udmVyc2lvbiBvZiB1bml0cyBvZlxuICogdmFsdWVzIHRoYXQgZG9uJ3Qgc3RhcnQgYXQgMCAoaS5lLiBxdWFydGVycykuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgdW5pdCB2YWx1ZSB0byB0aGUgdHVwbGUgb2YgdmFsdWVzLlxuICovXG5cbi8qKlxuICogVGhlIHR1cGxlIG9mIGxvY2FsaXplZCBlcmEgdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIEJDLFxuICogdGhlIHNlY29uZCBlbGVtZW50IHJlcHJlc2VudHMgQUQuXG4gKi9cblxuLyoqXG4gKiBUaGUgdHVwbGUgb2YgbG9jYWxpemVkIHF1YXJ0ZXIgdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIFExLlxuICovXG5cbi8qKlxuICogVGhlIHR1cGxlIG9mIGxvY2FsaXplZCBkYXkgdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIFN1bmRheS5cbiAqL1xuXG4vKipcbiAqIFRoZSB0dXBsZSBvZiBsb2NhbGl6ZWQgbW9udGggdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIEphbnVhcnkuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gb3B0aW9ucz8uY29udGV4dCA/IFN0cmluZyhvcHRpb25zLmNvbnRleHQpIDogXCJzdGFuZGFsb25lXCI7XG5cbiAgICBsZXQgdmFsdWVzQXJyYXk7XG4gICAgaWYgKGNvbnRleHQgPT09IFwiZm9ybWF0dGluZ1wiICYmIGFyZ3MuZm9ybWF0dGluZ1ZhbHVlcykge1xuICAgICAgY29uc3QgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgY29uc3Qgd2lkdGggPSBvcHRpb25zPy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcblxuICAgICAgdmFsdWVzQXJyYXkgPVxuICAgICAgICBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucz8ud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcblxuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLnZhbHVlc1t3aWR0aF0gfHwgYXJncy52YWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sgPyBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufVxuIiwKICAgICJpbXBvcnQgeyBidWlsZExvY2FsaXplRm4gfSBmcm9tIFwiLi4vLi4vX2xpYi9idWlsZExvY2FsaXplRm4uanNcIjtcblxuY29uc3QgZXJhVmFsdWVzID0ge1xuICBuYXJyb3c6IFtcIkJcIiwgXCJBXCJdLFxuICBhYmJyZXZpYXRlZDogW1wiQkNcIiwgXCJBRFwiXSxcbiAgd2lkZTogW1wiQmVmb3JlIENocmlzdFwiLCBcIkFubm8gRG9taW5pXCJdLFxufTtcblxuY29uc3QgcXVhcnRlclZhbHVlcyA9IHtcbiAgbmFycm93OiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCJdLFxuICBhYmJyZXZpYXRlZDogW1wiUTFcIiwgXCJRMlwiLCBcIlEzXCIsIFwiUTRcIl0sXG4gIHdpZGU6IFtcIjFzdCBxdWFydGVyXCIsIFwiMm5kIHF1YXJ0ZXJcIiwgXCIzcmQgcXVhcnRlclwiLCBcIjR0aCBxdWFydGVyXCJdLFxufTtcblxuLy8gTm90ZTogaW4gRW5nbGlzaCwgdGhlIG5hbWVzIG9mIGRheXMgb2YgdGhlIHdlZWsgYW5kIG1vbnRocyBhcmUgY2FwaXRhbGl6ZWQuXG4vLyBJZiB5b3UgYXJlIG1ha2luZyBhIG5ldyBsb2NhbGUgYmFzZWQgb24gdGhpcyBvbmUsIGNoZWNrIGlmIHRoZSBzYW1lIGlzIHRydWUgZm9yIHRoZSBsYW5ndWFnZSB5b3UncmUgd29ya2luZyBvbi5cbi8vIEdlbmVyYWxseSwgZm9ybWF0dGVkIGRhdGVzIHNob3VsZCBsb29rIGxpa2UgdGhleSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIHNlbnRlbmNlLFxuLy8gZS5nLiBpbiBTcGFuaXNoIGxhbmd1YWdlIHRoZSB3ZWVrZGF5cyBhbmQgbW9udGhzIHNob3VsZCBiZSBpbiB0aGUgbG93ZXJjYXNlLlxuY29uc3QgbW9udGhWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1wiSlwiLCBcIkZcIiwgXCJNXCIsIFwiQVwiLCBcIk1cIiwgXCJKXCIsIFwiSlwiLCBcIkFcIiwgXCJTXCIsIFwiT1wiLCBcIk5cIiwgXCJEXCJdLFxuICBhYmJyZXZpYXRlZDogW1xuICAgIFwiSmFuXCIsXG4gICAgXCJGZWJcIixcbiAgICBcIk1hclwiLFxuICAgIFwiQXByXCIsXG4gICAgXCJNYXlcIixcbiAgICBcIkp1blwiLFxuICAgIFwiSnVsXCIsXG4gICAgXCJBdWdcIixcbiAgICBcIlNlcFwiLFxuICAgIFwiT2N0XCIsXG4gICAgXCJOb3ZcIixcbiAgICBcIkRlY1wiLFxuICBdLFxuXG4gIHdpZGU6IFtcbiAgICBcIkphbnVhcnlcIixcbiAgICBcIkZlYnJ1YXJ5XCIsXG4gICAgXCJNYXJjaFwiLFxuICAgIFwiQXByaWxcIixcbiAgICBcIk1heVwiLFxuICAgIFwiSnVuZVwiLFxuICAgIFwiSnVseVwiLFxuICAgIFwiQXVndXN0XCIsXG4gICAgXCJTZXB0ZW1iZXJcIixcbiAgICBcIk9jdG9iZXJcIixcbiAgICBcIk5vdmVtYmVyXCIsXG4gICAgXCJEZWNlbWJlclwiLFxuICBdLFxufTtcblxuY29uc3QgZGF5VmFsdWVzID0ge1xuICBuYXJyb3c6IFtcIlNcIiwgXCJNXCIsIFwiVFwiLCBcIldcIiwgXCJUXCIsIFwiRlwiLCBcIlNcIl0sXG4gIHNob3J0OiBbXCJTdVwiLCBcIk1vXCIsIFwiVHVcIiwgXCJXZVwiLCBcIlRoXCIsIFwiRnJcIiwgXCJTYVwiXSxcbiAgYWJicmV2aWF0ZWQ6IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXSxcbiAgd2lkZTogW1xuICAgIFwiU3VuZGF5XCIsXG4gICAgXCJNb25kYXlcIixcbiAgICBcIlR1ZXNkYXlcIixcbiAgICBcIldlZG5lc2RheVwiLFxuICAgIFwiVGh1cnNkYXlcIixcbiAgICBcIkZyaWRheVwiLFxuICAgIFwiU2F0dXJkYXlcIixcbiAgXSxcbn07XG5cbmNvbnN0IGRheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06IFwiYVwiLFxuICAgIHBtOiBcInBcIixcbiAgICBtaWRuaWdodDogXCJtaVwiLFxuICAgIG5vb246IFwiblwiLFxuICAgIG1vcm5pbmc6IFwibW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJhZnRlcm5vb25cIixcbiAgICBldmVuaW5nOiBcImV2ZW5pbmdcIixcbiAgICBuaWdodDogXCJuaWdodFwiLFxuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiBcIkFNXCIsXG4gICAgcG06IFwiUE1cIixcbiAgICBtaWRuaWdodDogXCJtaWRuaWdodFwiLFxuICAgIG5vb246IFwibm9vblwiLFxuICAgIG1vcm5pbmc6IFwibW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJhZnRlcm5vb25cIixcbiAgICBldmVuaW5nOiBcImV2ZW5pbmdcIixcbiAgICBuaWdodDogXCJuaWdodFwiLFxuICB9LFxuICB3aWRlOiB7XG4gICAgYW06IFwiYS5tLlwiLFxuICAgIHBtOiBcInAubS5cIixcbiAgICBtaWRuaWdodDogXCJtaWRuaWdodFwiLFxuICAgIG5vb246IFwibm9vblwiLFxuICAgIG1vcm5pbmc6IFwibW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJhZnRlcm5vb25cIixcbiAgICBldmVuaW5nOiBcImV2ZW5pbmdcIixcbiAgICBuaWdodDogXCJuaWdodFwiLFxuICB9LFxufTtcblxuY29uc3QgZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06IFwiYVwiLFxuICAgIHBtOiBcInBcIixcbiAgICBtaWRuaWdodDogXCJtaVwiLFxuICAgIG5vb246IFwiblwiLFxuICAgIG1vcm5pbmc6IFwiaW4gdGhlIG1vcm5pbmdcIixcbiAgICBhZnRlcm5vb246IFwiaW4gdGhlIGFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiaW4gdGhlIGV2ZW5pbmdcIixcbiAgICBuaWdodDogXCJhdCBuaWdodFwiLFxuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiBcIkFNXCIsXG4gICAgcG06IFwiUE1cIixcbiAgICBtaWRuaWdodDogXCJtaWRuaWdodFwiLFxuICAgIG5vb246IFwibm9vblwiLFxuICAgIG1vcm5pbmc6IFwiaW4gdGhlIG1vcm5pbmdcIixcbiAgICBhZnRlcm5vb246IFwiaW4gdGhlIGFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiaW4gdGhlIGV2ZW5pbmdcIixcbiAgICBuaWdodDogXCJhdCBuaWdodFwiLFxuICB9LFxuICB3aWRlOiB7XG4gICAgYW06IFwiYS5tLlwiLFxuICAgIHBtOiBcInAubS5cIixcbiAgICBtaWRuaWdodDogXCJtaWRuaWdodFwiLFxuICAgIG5vb246IFwibm9vblwiLFxuICAgIG1vcm5pbmc6IFwiaW4gdGhlIG1vcm5pbmdcIixcbiAgICBhZnRlcm5vb246IFwiaW4gdGhlIGFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiaW4gdGhlIGV2ZW5pbmdcIixcbiAgICBuaWdodDogXCJhdCBuaWdodFwiLFxuICB9LFxufTtcblxuY29uc3Qgb3JkaW5hbE51bWJlciA9IChkaXJ0eU51bWJlciwgX29wdGlvbnMpID0+IHtcbiAgY29uc3QgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcblxuICAvLyBJZiBvcmRpbmFsIG51bWJlcnMgZGVwZW5kIG9uIGNvbnRleHQsIGZvciBleGFtcGxlLFxuICAvLyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCBncmFtbWF0aWNhbCBnZW5kZXJzLFxuICAvLyB1c2UgYG9wdGlvbnMudW5pdGAuXG4gIC8vXG4gIC8vIGB1bml0YCBjYW4gYmUgJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RhdGUnLCAnZGF5T2ZZZWFyJyxcbiAgLy8gJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLlxuXG4gIGNvbnN0IHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgXCJzdFwiO1xuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgXCJuZFwiO1xuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgXCJyZFwiO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgXCJ0aFwiO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvY2FsaXplID0ge1xuICBvcmRpbmFsTnVtYmVyLFxuXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICB9KSxcblxuICBxdWFydGVyOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogcXVhcnRlclZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICAgIGFyZ3VtZW50Q2FsbGJhY2s6IChxdWFydGVyKSA9PiBxdWFydGVyIC0gMSxcbiAgfSksXG5cbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICB9KSxcblxuICBkYXk6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiBcIndpZGVcIixcbiAgfSksXG5cbiAgZGF5UGVyaW9kOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiBcIndpZGVcIixcbiAgfSksXG59O1xuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIChzdHJpbmcsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucy53aWR0aDtcblxuICAgIGNvbnN0IG1hdGNoUGF0dGVybiA9XG4gICAgICAod2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSkgfHxcbiAgICAgIGFyZ3MubWF0Y2hQYXR0ZXJuc1thcmdzLmRlZmF1bHRNYXRjaFdpZHRoXTtcbiAgICBjb25zdCBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChtYXRjaFBhdHRlcm4pO1xuXG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcblxuICAgIGNvbnN0IHBhcnNlUGF0dGVybnMgPVxuICAgICAgKHdpZHRoICYmIGFyZ3MucGFyc2VQYXR0ZXJuc1t3aWR0aF0pIHx8XG4gICAgICBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07XG5cbiAgICBjb25zdCBrZXkgPSBBcnJheS5pc0FycmF5KHBhcnNlUGF0dGVybnMpXG4gICAgICA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCAocGF0dGVybikgPT4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpKVxuICAgICAgOiAvLyBbVE9ET10gLS0gSSBjaGFsbGVuZ2UgeW91IHRvIGZpeCB0aGUgdHlwZVxuICAgICAgICBmaW5kS2V5KHBhcnNlUGF0dGVybnMsIChwYXR0ZXJuKSA9PiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZykpO1xuXG4gICAgbGV0IHZhbHVlO1xuXG4gICAgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2soa2V5KSA6IGtleTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFja1xuICAgICAgPyAvLyBbVE9ET10gLS0gSSBjaGFsbGVuZ2UgeW91IHRvIGZpeCB0aGUgdHlwZVxuICAgICAgICBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpXG4gICAgICA6IHZhbHVlO1xuXG4gICAgY29uc3QgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG5cbiAgICByZXR1cm4geyB2YWx1ZSwgcmVzdCB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiZcbiAgICAgIHByZWRpY2F0ZShvYmplY3Rba2V5XSlcbiAgICApIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlKSB7XG4gIGZvciAobGV0IGtleSA9IDA7IGtleSA8IGFycmF5Lmxlbmd0aDsga2V5KyspIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gYnVpbGRNYXRjaFBhdHRlcm5GbihhcmdzKSB7XG4gIHJldHVybiAoc3RyaW5nLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLm1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuXG4gICAgY29uc3QgcGFyc2VSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5wYXJzZVBhdHRlcm4pO1xuICAgIGlmICghcGFyc2VSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIGxldCB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFja1xuICAgICAgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pXG4gICAgICA6IHBhcnNlUmVzdWx0WzBdO1xuXG4gICAgLy8gW1RPRE9dIEkgY2hhbGxlbmdlIHlvdSB0byBmaXggdGhlIHR5cGVcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgIGNvbnN0IHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuXG4gICAgcmV0dXJuIHsgdmFsdWUsIHJlc3QgfTtcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IHsgYnVpbGRNYXRjaEZuIH0gZnJvbSBcIi4uLy4uL19saWIvYnVpbGRNYXRjaEZuLmpzXCI7XG5pbXBvcnQgeyBidWlsZE1hdGNoUGF0dGVybkZuIH0gZnJvbSBcIi4uLy4uL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi5qc1wiO1xuXG5jb25zdCBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xuY29uc3QgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9cXGQrL2k7XG5cbmNvbnN0IG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaSxcbn07XG5jb25zdCBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXSxcbn07XG5cbmNvbnN0IG1hdGNoUXVhcnRlclBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eWzEyMzRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXnFbMTIzNF0vaSxcbiAgd2lkZTogL15bMTIzNF0odGh8c3R8bmR8cmQpPyBxdWFydGVyL2ksXG59O1xuY29uc3QgcGFyc2VRdWFydGVyUGF0dGVybnMgPSB7XG4gIGFueTogWy8xL2ksIC8yL2ksIC8zL2ksIC80L2ldLFxufTtcblxuY29uc3QgbWF0Y2hNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW2pmbWFzb25kXS9pLFxuICBhYmJyZXZpYXRlZDogL14oamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpL2ksXG4gIHdpZGU6IC9eKGphbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksXG59O1xuY29uc3QgcGFyc2VNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFtcbiAgICAvXmovaSxcbiAgICAvXmYvaSxcbiAgICAvXm0vaSxcbiAgICAvXmEvaSxcbiAgICAvXm0vaSxcbiAgICAvXmovaSxcbiAgICAvXmovaSxcbiAgICAvXmEvaSxcbiAgICAvXnMvaSxcbiAgICAvXm8vaSxcbiAgICAvXm4vaSxcbiAgICAvXmQvaSxcbiAgXSxcblxuICBhbnk6IFtcbiAgICAvXmphL2ksXG4gICAgL15mL2ksXG4gICAgL15tYXIvaSxcbiAgICAvXmFwL2ksXG4gICAgL15tYXkvaSxcbiAgICAvXmp1bi9pLFxuICAgIC9eanVsL2ksXG4gICAgL15hdS9pLFxuICAgIC9ecy9pLFxuICAgIC9eby9pLFxuICAgIC9ebi9pLFxuICAgIC9eZC9pLFxuICBdLFxufTtcblxuY29uc3QgbWF0Y2hEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltzbXR3Zl0vaSxcbiAgc2hvcnQ6IC9eKHN1fG1vfHR1fHdlfHRofGZyfHNhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oc3VufG1vbnx0dWV8d2VkfHRodXxmcml8c2F0KS9pLFxuICB3aWRlOiAvXihzdW5kYXl8bW9uZGF5fHR1ZXNkYXl8d2VkbmVzZGF5fHRodXJzZGF5fGZyaWRheXxzYXR1cmRheSkvaSxcbn07XG5jb25zdCBwYXJzZURheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXnMvaSwgL15tL2ksIC9edC9pLCAvXncvaSwgL150L2ksIC9eZi9pLCAvXnMvaV0sXG4gIGFueTogWy9ec3UvaSwgL15tL2ksIC9edHUvaSwgL153L2ksIC9edGgvaSwgL15mL2ksIC9ec2EvaV0sXG59O1xuXG5jb25zdCBtYXRjaERheVBlcmlvZFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGF8cHxtaXxufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSxcbiAgYW55OiAvXihbYXBdXFwuP1xccz9tXFwuP3xtaWRuaWdodHxub29ufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSxcbn07XG5jb25zdCBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0ge1xuICBhbnk6IHtcbiAgICBhbTogL15hL2ksXG4gICAgcG06IC9ecC9pLFxuICAgIG1pZG5pZ2h0OiAvXm1pL2ksXG4gICAgbm9vbjogL15uby9pLFxuICAgIG1vcm5pbmc6IC9tb3JuaW5nL2ksXG4gICAgYWZ0ZXJub29uOiAvYWZ0ZXJub29uL2ksXG4gICAgZXZlbmluZzogL2V2ZW5pbmcvaSxcbiAgICBuaWdodDogL25pZ2h0L2ksXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgbWF0Y2ggPSB7XG4gIG9yZGluYWxOdW1iZXI6IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oe1xuICAgIG1hdGNoUGF0dGVybjogbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICBwYXJzZVBhdHRlcm46IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgdmFsdWVDYWxsYmFjazogKHZhbHVlKSA9PiBwYXJzZUludCh2YWx1ZSwgMTApLFxuICB9KSxcblxuICBlcmE6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJ3aWRlXCIsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgfSksXG5cbiAgcXVhcnRlcjogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJ3aWRlXCIsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gICAgdmFsdWVDYWxsYmFjazogKGluZGV4KSA9PiBpbmRleCArIDEsXG4gIH0pLFxuXG4gIG1vbnRoOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJ3aWRlXCIsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICB9KSxcblxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJ3aWRlXCIsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgfSksXG5cbiAgZGF5UGVyaW9kOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwiYW55XCIsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgfSksXG59O1xuIiwKICAgICJpbXBvcnQgeyBmb3JtYXREaXN0YW5jZSB9IGZyb20gXCIuL2VuLVVTL19saWIvZm9ybWF0RGlzdGFuY2UuanNcIjtcbmltcG9ydCB7IGZvcm1hdExvbmcgfSBmcm9tIFwiLi9lbi1VUy9fbGliL2Zvcm1hdExvbmcuanNcIjtcbmltcG9ydCB7IGZvcm1hdFJlbGF0aXZlIH0gZnJvbSBcIi4vZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS5qc1wiO1xuaW1wb3J0IHsgbG9jYWxpemUgfSBmcm9tIFwiLi9lbi1VUy9fbGliL2xvY2FsaXplLmpzXCI7XG5pbXBvcnQgeyBtYXRjaCB9IGZyb20gXCIuL2VuLVVTL19saWIvbWF0Y2guanNcIjtcblxuLyoqXG4gKiBAY2F0ZWdvcnkgTG9jYWxlc1xuICogQHN1bW1hcnkgRW5nbGlzaCBsb2NhbGUgKFVuaXRlZCBTdGF0ZXMpLlxuICogQGxhbmd1YWdlIEVuZ2xpc2hcbiAqIEBpc28tNjM5LTIgZW5nXG4gKiBAYXV0aG9yIFNhc2hhIEtvc3MgW0Brb3Nzbm9jb3JwXShodHRwczovL2dpdGh1Yi5jb20va29zc25vY29ycClcbiAqIEBhdXRob3IgTGVzaGEgS29zcyBbQGxlc2hha29zc10oaHR0cHM6Ly9naXRodWIuY29tL2xlc2hha29zcylcbiAqL1xuZXhwb3J0IGNvbnN0IGVuVVMgPSB7XG4gIGNvZGU6IFwiZW4tVVNcIixcbiAgZm9ybWF0RGlzdGFuY2U6IGZvcm1hdERpc3RhbmNlLFxuICBmb3JtYXRMb25nOiBmb3JtYXRMb25nLFxuICBmb3JtYXRSZWxhdGl2ZTogZm9ybWF0UmVsYXRpdmUsXG4gIGxvY2FsaXplOiBsb2NhbGl6ZSxcbiAgbWF0Y2g6IG1hdGNoLFxuICBvcHRpb25zOiB7XG4gICAgd2Vla1N0YXJ0c09uOiAwIC8qIFN1bmRheSAqLyxcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDEsXG4gIH0sXG59O1xuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGVuVVM7XG4iLAogICAgImltcG9ydCB7IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cy5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZlllYXIgfSBmcm9tIFwiLi9zdGFydE9mWWVhci5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBnZXREYXlPZlllYXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBnZXREYXlPZlllYXJcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBkYXkgb2YgdGhlIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIGRheSBvZiB0aGUgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRheSBvZiB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIGRheSBvZiB0aGUgeWVhciBpcyAyIEp1bHkgMjAxND9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldERheU9mWWVhcihuZXcgRGF0ZSgyMDE0LCA2LCAyKSlcbiAqIC8vPT4gMTgzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlPZlllYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoX2RhdGUsIHN0YXJ0T2ZZZWFyKF9kYXRlKSk7XG4gIGNvbnN0IGRheU9mWWVhciA9IGRpZmYgKyAxO1xuICByZXR1cm4gZGF5T2ZZZWFyO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldERheU9mWWVhcjtcbiIsCiAgICAiaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5XZWVrIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mSVNPV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZJU09XZWVrLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mSVNPV2Vla1llYXIgfSBmcm9tIFwiLi9zdGFydE9mSVNPV2Vla1llYXIuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0SVNPV2Vla30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldElTT1dlZWtcbiAqIEBjYXRlZ29yeSBJU08gV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIElTTyB3ZWVrIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBJU08gd2VlayBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBJU08gd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG9mIHRoZSBJU08td2VlayBudW1iZXJpbmcgeWVhciBpcyAyIEphbnVhcnkgMjAwNT9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldElTT1dlZWsobmV3IERhdGUoMjAwNSwgMCwgMikpXG4gKiAvLz0+IDUzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJU09XZWVrKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCBkaWZmID0gK3N0YXJ0T2ZJU09XZWVrKF9kYXRlKSAtICtzdGFydE9mSVNPV2Vla1llYXIoX2RhdGUpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2Ygd2Vla3MgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciBiZWNhdXNlIHRoZSBudW1iZXIgb2ZcbiAgLy8gbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnQgKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2ZcbiAgLy8gdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KS5cbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2VlaykgKyAxO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldElTT1dlZWs7XG4iLAogICAgImltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZXZWVrIH0gZnJvbSBcIi4vc3RhcnRPZldlZWsuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0V2Vla1llYXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBnZXRXZWVrWWVhclxuICogQGNhdGVnb3J5IFdlZWstTnVtYmVyaW5nIFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIGV4YWN0IGNhbGN1bGF0aW9uIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZlxuICogYG9wdGlvbnMud2Vla1N0YXJ0c09uYCAod2hpY2ggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWspXG4gKiBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAod2hpY2ggaXMgdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpcyBhbHdheXMgaW5cbiAqIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyKVxuICpcbiAqIFdlZWsgbnVtYmVyaW5nOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWVrI1RoZV9JU09fd2Vla19kYXRlX3N5c3RlbVxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDI2IERlY2VtYmVyIDIwMDQgd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5ncz9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldFdlZWtZZWFyKG5ldyBEYXRlKDIwMDQsIDExLCAyNikpXG4gKiAvLz0+IDIwMDVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggd2VlayBudW1iZXJpbmcgeWVhciBpcyAyNiBEZWNlbWJlciAyMDA0IGlmIHdlZWsgc3RhcnRzIG9uIFNhdHVyZGF5P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2Vla1llYXIobmV3IERhdGUoMjAwNCwgMTEsIDI2KSwgeyB3ZWVrU3RhcnRzT246IDYgfSlcbiAqIC8vPT4gMjAwNFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDI2IERlY2VtYmVyIDIwMDQgaWYgdGhlIGZpcnN0IHdlZWsgY29udGFpbnMgNCBKYW51YXJ5P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2Vla1llYXIobmV3IERhdGUoMjAwNCwgMTEsIDI2KSwgeyBmaXJzdFdlZWtDb250YWluc0RhdGU6IDQgfSlcbiAqIC8vPT4gMjAwNFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vla1llYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID1cbiAgICBvcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgMTtcblxuICBjb25zdCBmaXJzdFdlZWtPZk5leHRZZWFyID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRGdWxsWWVhcih5ZWFyICsgMSwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgY29uc3Qgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgb3B0aW9ucyk7XG5cbiAgY29uc3QgZmlyc3RXZWVrT2ZUaGlzWWVhciA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0RnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgY29uc3Qgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG5cbiAgaWYgKCtfZGF0ZSA+PSArc3RhcnRPZk5leHRZZWFyKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKCtfZGF0ZSA+PSArc3RhcnRPZlRoaXNZZWFyKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0V2Vla1llYXI7XG4iLAogICAgImltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IGdldFdlZWtZZWFyIH0gZnJvbSBcIi4vZ2V0V2Vla1llYXIuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZXZWVrIH0gZnJvbSBcIi4vc3RhcnRPZldlZWsuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN0YXJ0T2ZXZWVrWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZXZWVrWWVhclxuICogQGNhdGVnb3J5IFdlZWstTnVtYmVyaW5nIFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiBUaGUgZXhhY3QgY2FsY3VsYXRpb24gZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mXG4gKiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gICh3aGljaCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlaylcbiAqIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgICh3aGljaCBpcyB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzIGFsd2F5cyBpblxuICogdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIpXG4gKlxuICogV2VlayBudW1iZXJpbmc6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlZWsjVGhlX0lTT193ZWVrX2RhdGVfc3lzdGVtXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGFuIGEgd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgMiBKdWx5IDIwMDUgd2l0aCBkZWZhdWx0IHNldHRpbmdzOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZldlZWtZZWFyKG5ldyBEYXRlKDIwMDUsIDYsIDIpKVxuICogLy89PiBTdW4gRGVjIDI2IDIwMDQgMDA6MDA6MDBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGEgd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgMiBKdWx5IDIwMDVcbiAqIC8vIGlmIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHdlZWtcbiAqIC8vIGFuZCA0IEphbnVhcnkgaXMgYWx3YXlzIGluIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZldlZWtZZWFyKG5ldyBEYXRlKDIwMDUsIDYsIDIpLCB7XG4gKiAgIHdlZWtTdGFydHNPbjogMSxcbiAqICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiA0XG4gKiB9KVxuICogLy89PiBNb24gSmFuIDAzIDIwMDUgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZXZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID1cbiAgICBvcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgMTtcblxuICBjb25zdCB5ZWFyID0gZ2V0V2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7XG4gIGNvbnN0IGZpcnN0V2VlayA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7XG4gIGZpcnN0V2Vlay5zZXRGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWsuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIGNvbnN0IF9kYXRlID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrLCBvcHRpb25zKTtcbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZXZWVrWWVhcjtcbiIsCiAgICAiaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5XZWVrIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZXZWVrLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mV2Vla1llYXIgfSBmcm9tIFwiLi9zdGFydE9mV2Vla1llYXIuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0V2Vla30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldFdlZWtcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbG9jYWwgd2VlayBpbmRleCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbG9jYWwgd2VlayBpbmRleCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSBleGFjdCBjYWxjdWxhdGlvbiBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2ZcbiAqIGBvcHRpb25zLndlZWtTdGFydHNPbmAgKHdoaWNoIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrKVxuICogYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKHdoaWNoIGlzIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXMgYWx3YXlzIGluXG4gKiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhcilcbiAqXG4gKiBXZWVrIG51bWJlcmluZzogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2VlayNUaGVfSVNPX3dlZWtfZGF0ZV9zeXN0ZW1cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG9mIHRoZSBsb2NhbCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDIgSmFudWFyeSAyMDA1IHdpdGggZGVmYXVsdCBvcHRpb25zP1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2VlayhuZXcgRGF0ZSgyMDA1LCAwLCAyKSlcbiAqIC8vPT4gMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG9mIHRoZSBsb2NhbCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDIgSmFudWFyeSAyMDA1LFxuICogLy8gaWYgTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssXG4gKiAvLyBhbmQgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIgYWx3YXlzIGNvbnRhaW5zIDQgSmFudWFyeT9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldFdlZWsobmV3IERhdGUoMjAwNSwgMCwgMiksIHtcbiAqICAgd2Vla1N0YXJ0c09uOiAxLFxuICogICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDRcbiAqIH0pXG4gKiAvLz0+IDUzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWVrKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCBkaWZmID0gK3N0YXJ0T2ZXZWVrKF9kYXRlLCBvcHRpb25zKSAtICtzdGFydE9mV2Vla1llYXIoX2RhdGUsIG9wdGlvbnMpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2Ygd2Vla3MgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciBiZWNhdXNlIHRoZSBudW1iZXIgb2ZcbiAgLy8gbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnQgKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2ZcbiAgLy8gdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KS5cbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2VlaykgKyAxO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldFdlZWs7XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgY29uc3Qgc2lnbiA9IG51bWJlciA8IDAgPyBcIi1cIiA6IFwiXCI7XG4gIGNvbnN0IG91dHB1dCA9IE1hdGguYWJzKG51bWJlcikudG9TdHJpbmcoKS5wYWRTdGFydCh0YXJnZXRMZW5ndGgsIFwiMFwiKTtcbiAgcmV0dXJuIHNpZ24gKyBvdXRwdXQ7XG59XG4iLAogICAgImltcG9ydCB7IGFkZExlYWRpbmdaZXJvcyB9IGZyb20gXCIuLi9hZGRMZWFkaW5nWmVyb3MuanNcIjtcblxuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKi9cblxuZXhwb3J0IGNvbnN0IGxpZ2h0Rm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICBjb25zdCBzaWduZWRZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgY29uc3QgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModG9rZW4gPT09IFwieXlcIiA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIE1vbnRoXG4gIE0oZGF0ZSwgdG9rZW4pIHtcbiAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICByZXR1cm4gdG9rZW4gPT09IFwiTVwiID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcblxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0RGF0ZSgpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIEFNIG9yIFBNXG4gIGEoZGF0ZSwgdG9rZW4pIHtcbiAgICBjb25zdCBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldEhvdXJzKCkgLyAxMiA+PSAxID8gXCJwbVwiIDogXCJhbVwiO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcImFcIjpcbiAgICAgIGNhc2UgXCJhYVwiOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgICBjYXNlIFwiYWFhXCI6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlIFwiYWFhYWFcIjpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZVswXTtcbiAgICAgIGNhc2UgXCJhYWFhXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlID09PSBcImFtXCIgPyBcImEubS5cIiA6IFwicC5tLlwiO1xuICAgIH1cbiAgfSxcblxuICAvLyBIb3VyIFsxLTEyXVxuICBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldEhvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBIb3VyIFswLTIzXVxuICBIKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldEhvdXJzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gTWludXRlXG4gIG0oZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0TWludXRlcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIFNlY29uZFxuICBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFNlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUyhkYXRlLCB0b2tlbikge1xuICAgIGNvbnN0IG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCk7XG4gICAgY29uc3QgZnJhY3Rpb25hbFNlY29uZHMgPSBNYXRoLnRydW5jKFxuICAgICAgbWlsbGlzZWNvbmRzICogTWF0aC5wb3coMTAsIG51bWJlck9mRGlnaXRzIC0gMyksXG4gICAgKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGZyYWN0aW9uYWxTZWNvbmRzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxufTtcbiIsCiAgICAiaW1wb3J0IHsgZ2V0RGF5T2ZZZWFyIH0gZnJvbSBcIi4uLy4uL2dldERheU9mWWVhci5qc1wiO1xuaW1wb3J0IHsgZ2V0SVNPV2VlayB9IGZyb20gXCIuLi8uLi9nZXRJU09XZWVrLmpzXCI7XG5pbXBvcnQgeyBnZXRJU09XZWVrWWVhciB9IGZyb20gXCIuLi8uLi9nZXRJU09XZWVrWWVhci5qc1wiO1xuaW1wb3J0IHsgZ2V0V2VlayB9IGZyb20gXCIuLi8uLi9nZXRXZWVrLmpzXCI7XG5pbXBvcnQgeyBnZXRXZWVrWWVhciB9IGZyb20gXCIuLi8uLi9nZXRXZWVrWWVhci5qc1wiO1xuXG5pbXBvcnQgeyBhZGRMZWFkaW5nWmVyb3MgfSBmcm9tIFwiLi4vYWRkTGVhZGluZ1plcm9zLmpzXCI7XG5pbXBvcnQgeyBsaWdodEZvcm1hdHRlcnMgfSBmcm9tIFwiLi9saWdodEZvcm1hdHRlcnMuanNcIjtcblxuY29uc3QgZGF5UGVyaW9kRW51bSA9IHtcbiAgYW06IFwiYW1cIixcbiAgcG06IFwicG1cIixcbiAgbWlkbmlnaHQ6IFwibWlkbmlnaHRcIixcbiAgbm9vbjogXCJub29uXCIsXG4gIG1vcm5pbmc6IFwibW9ybmluZ1wiLFxuICBhZnRlcm5vb246IFwiYWZ0ZXJub29uXCIsXG4gIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICBuaWdodDogXCJuaWdodFwiLFxufTtcblxuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgTWlsbGlzZWNvbmRzIGluIGRheSAgICAgICAgICAgIHxcbiAqIHwgIGIgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgIHwgIEIgIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgIHxcbiAqIHwgIGMgIHwgU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWsgIHwgIEMqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGUgIHwgTG9jYWwgZGF5IG9mIHdlZWsgICAgICAgICAgICAgIHwgIEUgIHwgRGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGYgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEYqIHwgRGF5IG9mIHdlZWsgaW4gbW9udGggICAgICAgICAgIHxcbiAqIHwgIGcqIHwgTW9kaWZpZWQgSnVsaWFuIGRheSAgICAgICAgICAgIHwgIEcgIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGkhIHwgSVNPIGRheSBvZiB3ZWVrICAgICAgICAgICAgICAgIHwgIEkhIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgIHxcbiAqIHwgIGoqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHwgIEoqIHwgTG9jYWxpemVkIGhvdXIgdy9vIGRheSBwZXJpb2QgIHxcbiAqIHwgIGsgIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgIHwgIEsgIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGwqIHwgKGRlcHJlY2F0ZWQpICAgICAgICAgICAgICAgICAgIHwgIEwgIHwgU3RhbmQtYWxvbmUgbW9udGggICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG8hIHwgT3JkaW5hbCBudW1iZXIgbW9kaWZpZXIgICAgICAgIHwgIE8gIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHAhIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgIHwgIFAhIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgIHxcbiAqIHwgIHEgIHwgU3RhbmQtYWxvbmUgcXVhcnRlciAgICAgICAgICAgIHwgIFEgIHwgUXVhcnRlciAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHIqIHwgUmVsYXRlZCBHcmVnb3JpYW4geWVhciAgICAgICAgIHwgIFIhIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHQhIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgIHwgIFQhIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgIHxcbiAqIHwgIHUgIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgIHwgIFUqIHwgQ3ljbGljIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHYqIHwgVGltZXpvbmUgKGdlbmVyaWMgbm9uLWxvY2F0LikgIHwgIFYqIHwgVGltZXpvbmUgKGxvY2F0aW9uKSAgICAgICAgICAgIHxcbiAqIHwgIHcgIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgIHwgIFcqIHwgV2VlayBvZiBtb250aCAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHggIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgIHwgIFggIHwgVGltZXpvbmUgKElTTy04NjAxKSAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgIHxcbiAqIHwgIHogIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pIHwgIFoqIHwgVGltZXpvbmUgKGFsaWFzZXMpICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgISBhcmUgbm9uLXN0YW5kYXJkLCBidXQgaW1wbGVtZW50ZWQgYnkgZGF0ZS1mbnM6XG4gKiAtIGBvYCBtb2RpZmllcyB0aGUgcHJldmlvdXMgdG9rZW4gdG8gdHVybiBpdCBpbnRvIGFuIG9yZGluYWwgKHNlZSBgZm9ybWF0YCBkb2NzKVxuICogLSBgaWAgaXMgSVNPIGRheSBvZiB3ZWVrLiBGb3IgYGlgIGFuZCBgaWlgIGlzIHJldHVybnMgbnVtZXJpYyBJU08gd2VlayBkYXlzLFxuICogICBpLmUuIDcgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gKiAtIGBJYCBpcyBJU08gd2VlayBvZiB5ZWFyLCBhcyBvcHBvc2VkIHRvIGB3YCB3aGljaCBpcyBsb2NhbCB3ZWVrIG9mIHllYXIuXG4gKiAtIGBSYCBpcyBJU08gd2Vlay1udW1iZXJpbmcgeWVhciwgYXMgb3Bwb3NlZCB0byBgWWAgd2hpY2ggaXMgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhci5cbiAqICAgYFJgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgSWAgYW5kIGBpYFxuICogICBmb3IgdW5pdmVyc2FsIElTTyB3ZWVrLW51bWJlcmluZyBkYXRlLCB3aGVyZWFzXG4gKiAgIGBZYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHdgIGFuZCBgZWBcbiAqICAgZm9yIHdlZWstbnVtYmVyaW5nIGRhdGUgc3BlY2lmaWMgdG8gdGhlIGxvY2FsZS5cbiAqIC0gYFBgIGlzIGxvbmcgbG9jYWxpemVkIGRhdGUgZm9ybWF0XG4gKiAtIGBwYCBpcyBsb25nIGxvY2FsaXplZCB0aW1lIGZvcm1hdFxuICovXG5cbmV4cG9ydCBjb25zdCBmb3JtYXR0ZXJzID0ge1xuICAvLyBFcmFcbiAgRzogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGVyYSA9IGRhdGUuZ2V0RnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgXCJHXCI6XG4gICAgICBjYXNlIFwiR0dcIjpcbiAgICAgIGNhc2UgXCJHR0dcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHsgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIiB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgXCJHR0dHR1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwgeyB3aWR0aDogXCJuYXJyb3dcIiB9KTtcbiAgICAgIC8vIEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0XG4gICAgICBjYXNlIFwiR0dHR1wiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHsgd2lkdGg6IFwid2lkZVwiIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gXCJ5b1wiKSB7XG4gICAgICBjb25zdCBzaWduZWRZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIGNvbnN0IHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHllYXIsIHsgdW5pdDogXCJ5ZWFyXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy55KGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFk6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBzaWduZWRXZWVrWWVhciA9IGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgY29uc3Qgd2Vla1llYXIgPSBzaWduZWRXZWVrWWVhciA+IDAgPyBzaWduZWRXZWVrWWVhciA6IDEgLSBzaWduZWRXZWVrWWVhcjtcblxuICAgIC8vIFR3byBkaWdpdCB5ZWFyXG4gICAgaWYgKHRva2VuID09PSBcIllZXCIpIHtcbiAgICAgIGNvbnN0IHR3b0RpZ2l0WWVhciA9IHdlZWtZZWFyICUgMTAwO1xuICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0d29EaWdpdFllYXIsIDIpO1xuICAgIH1cblxuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSBcIllvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7IHVuaXQ6IFwieWVhclwiIH0pO1xuICAgIH1cblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFI6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbikge1xuICAgIGNvbnN0IGlzb1dlZWtZZWFyID0gZ2V0SVNPV2Vla1llYXIoZGF0ZSk7XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBFeHRlbmRlZCB5ZWFyLiBUaGlzIGlzIGEgc2luZ2xlIG51bWJlciBkZXNpZ25hdGluZyB0aGUgeWVhciBvZiB0aGlzIGNhbGVuZGFyIHN5c3RlbS5cbiAgLy8gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIGxvY2FsaXplcnMgYXJlIEIuQy4geWVhcnM6XG4gIC8vIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gIC8vIHwtLS0tLS18LS0tLS18LS0tLS18XG4gIC8vIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gIC8vIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gIC8vIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gIC8vIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAgLy8gd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkLlxuICB1OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4pIHtcbiAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBRdWFydGVyXG4gIFE6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldE1vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgXCJRXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSBcIlFRXCI6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgXCJRb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7IHVuaXQ6IFwicXVhcnRlclwiIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgXCJRUVFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlIFwiUVFRUVFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlIFwiUVFRUVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFN0YW5kLWFsb25lIHF1YXJ0ZXJcbiAgcTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0TW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlIFwicXFcIjpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSBcInFvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHsgdW5pdDogXCJxdWFydGVyXCIgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSBcInFxcVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgXCJxcXFxcVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgXCJxcXFxXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJNXCI6XG4gICAgICBjYXNlIFwiTU1cIjpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgXCJNb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHsgdW5pdDogXCJtb250aFwiIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlIFwiTU1NXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlIFwiTU1NTU1cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgXCJNTU1NXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHsgd2lkdGg6IFwid2lkZVwiLCBjb250ZXh0OiBcImZvcm1hdHRpbmdcIiB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gU3RhbmQtYWxvbmUgbW9udGhcbiAgTDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgXCJMXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcobW9udGggKyAxKTtcbiAgICAgIC8vIDAxLCAwMiwgLi4uLCAxMlxuICAgICAgY2FzZSBcIkxMXCI6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgXCJMb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHsgdW5pdDogXCJtb250aFwiIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlIFwiTExMXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlIFwiTExMTExcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgXCJMTExMXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHsgd2lkdGg6IFwid2lkZVwiLCBjb250ZXh0OiBcInN0YW5kYWxvbmVcIiB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB3ZWVrID0gZ2V0V2VlayhkYXRlLCBvcHRpb25zKTtcblxuICAgIGlmICh0b2tlbiA9PT0gXCJ3b1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrLCB7IHVuaXQ6IFwid2Vla1wiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBJU08gd2VlayBvZiB5ZWFyXG4gIEk6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBpc29XZWVrID0gZ2V0SVNPV2VlayhkYXRlKTtcblxuICAgIGlmICh0b2tlbiA9PT0gXCJJb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7IHVuaXQ6IFwid2Vla1wiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09IFwiZG9cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXREYXRlKCksIHsgdW5pdDogXCJkYXRlXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBEYXkgb2YgeWVhclxuICBEOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgZGF5T2ZZZWFyID0gZ2V0RGF5T2ZZZWFyKGRhdGUpO1xuXG4gICAgaWYgKHRva2VuID09PSBcIkRvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRheU9mWWVhciwgeyB1bml0OiBcImRheU9mWWVhclwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF5T2ZZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSBcIkVcIjpcbiAgICAgIGNhc2UgXCJFRVwiOlxuICAgICAgY2FzZSBcIkVFRVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSBcIkVFRUVFXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgXCJFRUVFRUVcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgXCJFRUVFXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIExvY2FsIGRheSBvZiB3ZWVrXG4gIGU6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpO1xuICAgIGNvbnN0IGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChOdGggZGF5IG9mIHdlZWsgd2l0aCBjdXJyZW50IGxvY2FsZSBvciB3ZWVrU3RhcnRzT24pXG4gICAgICBjYXNlIFwiZVwiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgXCJlZVwiOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSBcImVvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7IHVuaXQ6IFwiZGF5XCIgfSk7XG4gICAgICBjYXNlIFwiZWVlXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlIFwiZWVlZWVcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSBcImVlZWVlZVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcInNob3J0XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSBcImVlZWVcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWtcbiAgYzogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgY29uc3QgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKHNhbWUgYXMgaW4gYGVgKVxuICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlIFwiY2NcIjpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSBcImNvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7IHVuaXQ6IFwiZGF5XCIgfSk7XG4gICAgICBjYXNlIFwiY2NjXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlIFwiY2NjY2NcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSBcImNjY2NjY1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcInNob3J0XCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSBcImNjY2NcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gSVNPIGRheSBvZiB3ZWVrXG4gIGk6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpO1xuICAgIGNvbnN0IGlzb0RheU9mV2VlayA9IGRheU9mV2VlayA9PT0gMCA/IDcgOiBkYXlPZldlZWs7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMlxuICAgICAgY2FzZSBcImlcIjpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhpc29EYXlPZldlZWspO1xuICAgICAgLy8gMDJcbiAgICAgIGNhc2UgXCJpaVwiOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSBcImlvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb0RheU9mV2VlaywgeyB1bml0OiBcImRheVwiIH0pO1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlIFwiaWlpXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlIFwiaWlpaWlcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSBcImlpaWlpaVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcInNob3J0XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSBcImlpaWlcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIGNvbnN0IGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/IFwicG1cIiA6IFwiYW1cIjtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJhXCI6XG4gICAgICBjYXNlIFwiYWFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJhYWFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplXG4gICAgICAgICAgLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSBcImFhYWFhXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImFhYWFcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gQU0sIFBNLCBtaWRuaWdodCwgbm9vblxuICBiOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgbGV0IGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPT09IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA9PT0gMCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5taWRuaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gXCJwbVwiIDogXCJhbVwiO1xuICAgIH1cblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJiXCI6XG4gICAgICBjYXNlIFwiYmJcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJiYmJcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplXG4gICAgICAgICAgLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSBcImJiYmJiXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImJiYmJcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gaW4gdGhlIG1vcm5pbmcsIGluIHRoZSBhZnRlcm5vb24sIGluIHRoZSBldmVuaW5nLCBhdCBuaWdodFxuICBCOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgbGV0IGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPj0gMTcpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uZXZlbmluZztcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmFmdGVybm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDQpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubW9ybmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5uaWdodDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwiQlwiOlxuICAgICAgY2FzZSBcIkJCXCI6XG4gICAgICBjYXNlIFwiQkJCXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiQkJCQkJcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiQkJCQlwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSBcImhvXCIpIHtcbiAgICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyO1xuICAgICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDEyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHsgdW5pdDogXCJob3VyXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5oKGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSBcIkhvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0SG91cnMoKSwgeyB1bml0OiBcImhvdXJcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLkgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIEhvdXIgWzAtMTFdXG4gIEs6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyO1xuXG4gICAgaWYgKHRva2VuID09PSBcIktvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7IHVuaXQ6IFwiaG91clwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gSG91ciBbMS0yNF1cbiAgazogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMjQ7XG5cbiAgICBpZiAodG9rZW4gPT09IFwia29cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHsgdW5pdDogXCJob3VyXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gXCJtb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldE1pbnV0ZXMoKSwgeyB1bml0OiBcIm1pbnV0ZVwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMubShkYXRlLCB0b2tlbik7XG4gIH0sXG5cbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09IFwic29cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRTZWNvbmRzKCksIHsgdW5pdDogXCJzZWNvbmRcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBhbHdheXMgYCdaJ2ApXG4gIFg6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cbiAgICBpZiAodGltZXpvbmVPZmZzZXQgPT09IDApIHtcbiAgICAgIHJldHVybiBcIlpcIjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYYFxuICAgICAgY2FzZSBcIlhYWFhcIjpcbiAgICAgIGNhc2UgXCJYWFwiOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSBcIlhYWFhYXCI6XG4gICAgICBjYXNlIFwiWFhYXCI6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBgJyswMDowMCdgIG9yIGVxdWl2YWxlbnQpXG4gIHg6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4YFxuICAgICAgY2FzZSBcInh4eHhcIjpcbiAgICAgIGNhc2UgXCJ4eFwiOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHh4YFxuICAgICAgY2FzZSBcInh4eHh4XCI6XG4gICAgICBjYXNlIFwieHh4XCI6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRpbWV6b25lIChHTVQpXG4gIE86IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSBcIk9cIjpcbiAgICAgIGNhc2UgXCJPT1wiOlxuICAgICAgY2FzZSBcIk9PT1wiOlxuICAgICAgICByZXR1cm4gXCJHTVRcIiArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsIFwiOlwiKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgXCJPT09PXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJHTVRcIiArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXRpb24pXG4gIHo6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSBcInpcIjpcbiAgICAgIGNhc2UgXCJ6elwiOlxuICAgICAgY2FzZSBcInp6elwiOlxuICAgICAgICByZXR1cm4gXCJHTVRcIiArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsIFwiOlwiKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgXCJ6enp6XCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJHTVRcIiArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgfVxuICB9LFxuXG4gIC8vIFNlY29uZHMgdGltZXN0YW1wXG4gIHQ6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gTWF0aC50cnVuYygrZGF0ZSAvIDEwMDApO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIE1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAgVDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKCtkYXRlLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxufTtcblxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVTaG9ydChvZmZzZXQsIGRlbGltaXRlciA9IFwiXCIpIHtcbiAgY29uc3Qgc2lnbiA9IG9mZnNldCA+IDAgPyBcIi1cIiA6IFwiK1wiO1xuICBjb25zdCBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICBjb25zdCBob3VycyA9IE1hdGgudHJ1bmMoYWJzT2Zmc2V0IC8gNjApO1xuICBjb25zdCBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKSArIGRlbGltaXRlciArIGFkZExlYWRpbmdaZXJvcyhtaW51dGVzLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGVsaW1pdGVyKSB7XG4gIGlmIChvZmZzZXQgJSA2MCA9PT0gMCkge1xuICAgIGNvbnN0IHNpZ24gPSBvZmZzZXQgPiAwID8gXCItXCIgOiBcIitcIjtcbiAgICByZXR1cm4gc2lnbiArIGFkZExlYWRpbmdaZXJvcyhNYXRoLmFicyhvZmZzZXQpIC8gNjAsIDIpO1xuICB9XG4gIHJldHVybiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRlbGltaXRlcik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGVsaW1pdGVyID0gXCJcIikge1xuICBjb25zdCBzaWduID0gb2Zmc2V0ID4gMCA/IFwiLVwiIDogXCIrXCI7XG4gIGNvbnN0IGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIGNvbnN0IGhvdXJzID0gYWRkTGVhZGluZ1plcm9zKE1hdGgudHJ1bmMoYWJzT2Zmc2V0IC8gNjApLCAyKTtcbiAgY29uc3QgbWludXRlcyA9IGFkZExlYWRpbmdaZXJvcyhhYnNPZmZzZXQgJSA2MCwgMik7XG4gIHJldHVybiBzaWduICsgaG91cnMgKyBkZWxpbWl0ZXIgKyBtaW51dGVzO1xufVxuIiwKICAgICJjb25zdCBkYXRlTG9uZ0Zvcm1hdHRlciA9IChwYXR0ZXJuLCBmb3JtYXRMb25nKSA9PiB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgXCJQXCI6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHsgd2lkdGg6IFwic2hvcnRcIiB9KTtcbiAgICBjYXNlIFwiUFBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoeyB3aWR0aDogXCJtZWRpdW1cIiB9KTtcbiAgICBjYXNlIFwiUFBQXCI6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHsgd2lkdGg6IFwibG9uZ1wiIH0pO1xuICAgIGNhc2UgXCJQUFBQXCI6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoeyB3aWR0aDogXCJmdWxsXCIgfSk7XG4gIH1cbn07XG5cbmNvbnN0IHRpbWVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcpID0+IHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSBcInBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoeyB3aWR0aDogXCJzaG9ydFwiIH0pO1xuICAgIGNhc2UgXCJwcFwiOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7IHdpZHRoOiBcIm1lZGl1bVwiIH0pO1xuICAgIGNhc2UgXCJwcHBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoeyB3aWR0aDogXCJsb25nXCIgfSk7XG4gICAgY2FzZSBcInBwcHBcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7IHdpZHRoOiBcImZ1bGxcIiB9KTtcbiAgfVxufTtcblxuY29uc3QgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcpID0+IHtcbiAgY29uc3QgbWF0Y2hSZXN1bHQgPSBwYXR0ZXJuLm1hdGNoKC8oUCspKHArKT8vKSB8fCBbXTtcbiAgY29uc3QgZGF0ZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsxXTtcbiAgY29uc3QgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcblxuICBpZiAoIXRpbWVQYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpO1xuICB9XG5cbiAgbGV0IGRhdGVUaW1lRm9ybWF0O1xuXG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlIFwiUFwiOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHsgd2lkdGg6IFwic2hvcnRcIiB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJQUFwiOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHsgd2lkdGg6IFwibWVkaXVtXCIgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiUFBQXCI6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoeyB3aWR0aDogXCJsb25nXCIgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiUFBQUFwiOlxuICAgIGRlZmF1bHQ6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoeyB3aWR0aDogXCJmdWxsXCIgfSk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBkYXRlVGltZUZvcm1hdFxuICAgIC5yZXBsYWNlKFwie3tkYXRlfX1cIiwgZGF0ZUxvbmdGb3JtYXR0ZXIoZGF0ZVBhdHRlcm4sIGZvcm1hdExvbmcpKVxuICAgIC5yZXBsYWNlKFwie3t0aW1lfX1cIiwgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBsb25nRm9ybWF0dGVycyA9IHtcbiAgcDogdGltZUxvbmdGb3JtYXR0ZXIsXG4gIFA6IGRhdGVUaW1lTG9uZ0Zvcm1hdHRlcixcbn07XG4iLAogICAgImNvbnN0IGRheU9mWWVhclRva2VuUkUgPSAvXkQrJC87XG5jb25zdCB3ZWVrWWVhclRva2VuUkUgPSAvXlkrJC87XG5cbmNvbnN0IHRocm93VG9rZW5zID0gW1wiRFwiLCBcIkREXCIsIFwiWVlcIiwgXCJZWVlZXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gZGF5T2ZZZWFyVG9rZW5SRS50ZXN0KHRva2VuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gd2Vla1llYXJUb2tlblJFLnRlc3QodG9rZW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBjb25zdCBfbWVzc2FnZSA9IG1lc3NhZ2UodG9rZW4sIGZvcm1hdCwgaW5wdXQpO1xuICBjb25zb2xlLndhcm4oX21lc3NhZ2UpO1xuICBpZiAodGhyb3dUb2tlbnMuaW5jbHVkZXModG9rZW4pKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihfbWVzc2FnZSk7XG59XG5cbmZ1bmN0aW9uIG1lc3NhZ2UodG9rZW4sIGZvcm1hdCwgaW5wdXQpIHtcbiAgY29uc3Qgc3ViamVjdCA9IHRva2VuWzBdID09PSBcIllcIiA/IFwieWVhcnNcIiA6IFwiZGF5cyBvZiB0aGUgbW9udGhcIjtcbiAgcmV0dXJuIGBVc2UgXFxgJHt0b2tlbi50b0xvd2VyQ2FzZSgpfVxcYCBpbnN0ZWFkIG9mIFxcYCR7dG9rZW59XFxgIChpbiBcXGAke2Zvcm1hdH1cXGApIGZvciBmb3JtYXR0aW5nICR7c3ViamVjdH0gdG8gdGhlIGlucHV0IFxcYCR7aW5wdXR9XFxgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRgO1xufVxuIiwKICAgICJpbXBvcnQgeyBkZWZhdWx0TG9jYWxlIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0TG9jYWxlLmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMuanNcIjtcbmltcG9ydCB7IGZvcm1hdHRlcnMgfSBmcm9tIFwiLi9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzLmpzXCI7XG5pbXBvcnQgeyBsb25nRm9ybWF0dGVycyB9IGZyb20gXCIuL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzLmpzXCI7XG5pbXBvcnQge1xuICBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuLFxuICBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4sXG4gIHdhcm5PclRocm93UHJvdGVjdGVkRXJyb3IsXG59IGZyb20gXCIuL19saWIvcHJvdGVjdGVkVG9rZW5zLmpzXCI7XG5pbXBvcnQgeyBpc1ZhbGlkIH0gZnJvbSBcIi4vaXNWYWxpZC5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8vIFJleHBvcnRzIG9mIGludGVybmFsIGZvciBsaWJyYXJpZXMgdG8gdXNlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM2MzgjaXNzdWVjb21tZW50LTE4NzcwODI4NzRcbmV4cG9ydCB7IGZvcm1hdHRlcnMsIGxvbmdGb3JtYXR0ZXJzIH07XG5cbi8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xuY29uc3QgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9XG4gIC9beVlRcU1Md0lkRGVjaWhIS2ttc11vfChcXHcpXFwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcblxuLy8gVGhpcyBSZWdFeHAgY2F0Y2hlcyBzeW1ib2xzIGVzY2FwZWQgYnkgcXVvdGVzLCBhbmQgYWxzb1xuLy8gc2VxdWVuY2VzIG9mIHN5bWJvbHMgUCwgcCwgYW5kIHRoZSBjb21iaW5hdGlvbnMgbGlrZSBgUFBQUFBQUHBwcHBwYFxuY29uc3QgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcblxuY29uc3QgZXNjYXBlZFN0cmluZ1JlZ0V4cCA9IC9eJyhbXl0qPyknPyQvO1xuY29uc3QgZG91YmxlUXVvdGVSZWdFeHAgPSAvJycvZztcbmNvbnN0IHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuZXhwb3J0IHsgZm9ybWF0IGFzIGZvcm1hdERhdGUgfTtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGZvcm1hdH0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGZvcm1hdFxuICogQGFsaWFzIGZvcm1hdERhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiDimqDvuI8gUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl0oaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcilcbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJdKGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXIpKS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIGZvcm1hdCAtIFRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nXG4gKlxuICogQHRocm93cyBgZGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBsb2NhbGl6ZWAgcHJvcGVydHlcbiAqIEB0aHJvd3MgYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3MgdXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3MgZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxMSBGZWJydWFyeSAyMDE0IGluIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDEsIDExKSwgJ01NL2RkL3l5eXknKVxuICogLy89PiAnMDIvMTEvMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDIgSnVseSAyMDE0IGluIEVzcGVyYW50bzpcbiAqIGltcG9ydCB7IGVvTG9jYWxlIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlL2VvJ1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIpLCBcImRvICdkZScgTU1NTSB5eXl5XCIsIHtcbiAqICAgbG9jYWxlOiBlb0xvY2FsZVxuICogfSlcbiAqIC8vPT4gJzItYSBkZSBqdWxpbyAyMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFc2NhcGUgc3RyaW5nIGJ5IHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzOlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE1KSwgXCJoICdvJydjbG9jaydcIilcbiAqIC8vPT4gXCIzIG8nY2xvY2tcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KGRhdGUsIGZvcm1hdFN0ciwgb3B0aW9ucykge1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9ucy5sb2NhbGUgPz8gZGVmYXVsdExvY2FsZTtcblxuICBjb25zdCBmaXJzdFdlZWtDb250YWluc0RhdGUgPVxuICAgIG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICAxO1xuXG4gIGNvbnN0IHdlZWtTdGFydHNPbiA9XG4gICAgb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIDA7XG5cbiAgY29uc3Qgb3JpZ2luYWxEYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcblxuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB0aW1lIHZhbHVlXCIpO1xuICB9XG5cbiAgbGV0IHBhcnRzID0gZm9ybWF0U3RyXG4gICAgLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKVxuICAgIC5tYXAoKHN1YnN0cmluZykgPT4ge1xuICAgICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09IFwicFwiIHx8IGZpcnN0Q2hhcmFjdGVyID09PSBcIlBcIikge1xuICAgICAgICBjb25zdCBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgICByZXR1cm4gbG9uZ0Zvcm1hdHRlcihzdWJzdHJpbmcsIGxvY2FsZS5mb3JtYXRMb25nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWJzdHJpbmc7XG4gICAgfSlcbiAgICAuam9pbihcIlwiKVxuICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKVxuICAgIC5tYXAoKHN1YnN0cmluZykgPT4ge1xuICAgICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgICAgaWYgKHN1YnN0cmluZyA9PT0gXCInJ1wiKSB7XG4gICAgICAgIHJldHVybiB7IGlzVG9rZW46IGZhbHNlLCB2YWx1ZTogXCInXCIgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09IFwiJ1wiKSB7XG4gICAgICAgIHJldHVybiB7IGlzVG9rZW46IGZhbHNlLCB2YWx1ZTogY2xlYW5Fc2NhcGVkU3RyaW5nKHN1YnN0cmluZykgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdKSB7XG4gICAgICAgIHJldHVybiB7IGlzVG9rZW46IHRydWUsIHZhbHVlOiBzdWJzdHJpbmcgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcbiAgICAgICAgICBcIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgXCIgK1xuICAgICAgICAgICAgZmlyc3RDaGFyYWN0ZXIgK1xuICAgICAgICAgICAgXCJgXCIsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGlzVG9rZW46IGZhbHNlLCB2YWx1ZTogc3Vic3RyaW5nIH07XG4gICAgfSk7XG5cbiAgLy8gaW52b2tlIGxvY2FsaXplIHByZXByb2Nlc3NvciAob25seSBmb3IgZnJlbmNoIGxvY2FsZXMgYXQgdGhlIG1vbWVudClcbiAgaWYgKGxvY2FsZS5sb2NhbGl6ZS5wcmVwcm9jZXNzb3IpIHtcbiAgICBwYXJ0cyA9IGxvY2FsZS5sb2NhbGl6ZS5wcmVwcm9jZXNzb3Iob3JpZ2luYWxEYXRlLCBwYXJ0cyk7XG4gIH1cblxuICBjb25zdCBmb3JtYXR0ZXJPcHRpb25zID0ge1xuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSxcbiAgICB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlLFxuICB9O1xuXG4gIHJldHVybiBwYXJ0c1xuICAgIC5tYXAoKHBhcnQpID0+IHtcbiAgICAgIGlmICghcGFydC5pc1Rva2VuKSByZXR1cm4gcGFydC52YWx1ZTtcblxuICAgICAgY29uc3QgdG9rZW4gPSBwYXJ0LnZhbHVlO1xuXG4gICAgICBpZiAoXG4gICAgICAgICghb3B0aW9ucz8udXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zICYmXG4gICAgICAgICAgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSkgfHxcbiAgICAgICAgKCFvcHRpb25zPy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zICYmXG4gICAgICAgICAgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikpXG4gICAgICApIHtcbiAgICAgICAgd2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0U3RyLCBTdHJpbmcoZGF0ZSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzW3Rva2VuWzBdXTtcbiAgICAgIHJldHVybiBmb3JtYXR0ZXIob3JpZ2luYWxEYXRlLCB0b2tlbiwgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9KVxuICAgIC5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgY29uc3QgbWF0Y2hlZCA9IGlucHV0Lm1hdGNoKGVzY2FwZWRTdHJpbmdSZWdFeHApO1xuXG4gIGlmICghbWF0Y2hlZCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBmb3JtYXQ7XG4iLAogICAgImltcG9ydCB0eXBlIHsgTG9nLCBNaWxraW9Jbml0LCBNaWxraW9SdW50aW1lSW5pdCB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xuaW1wb3J0IHsgVFNPTiB9IGZyb20gXCJAc291dGhlcm4tYXVyb3JhL3Rzb25cIjtcblxuaW50ZXJmYWNlIENvb2tib29rRXZlbnQge1xuICB0eXBlOiBcIm1pbGtpb0Bsb2dnZXJcIjtcbiAgbG9nOiBMb2c7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kQ29va2Jvb2tFdmVudChydW50aW1lOiBNaWxraW9SdW50aW1lSW5pdDxNaWxraW9Jbml0PiwgZXZlbnQ6IENvb2tib29rRXZlbnQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwOi8vbG9jYWxob3N0OiR7cnVudGltZS5jb29rYm9vay5jb29rYm9va1BvcnR9LyRhY3Rpb25gLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgICBib2R5OiBUU09OLnN0cmluZ2lmeShldmVudCksXG4gICAgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc29sZS5sb2coXCJbQ09PS0JPT0tdXCIsIGF3YWl0IHJlc3BvbnNlLnRleHQoKSk7XG4gICAgICBjb25zb2xlLmxvZyhcIltDT09LQk9PS11cIiwgXCJJcyBDb29rYm9vayBjbG9zZWQ/IFRoZXJlIGlzIGFuIGFibm9ybWFsaXR5IGluIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggQ29va2Jvb2suXCIpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhcIltDT09LQk9PS11cIiwgZXJyb3IpO1xuICAgIGNvbnNvbGUubG9nKFwiW0NPT0tCT09LXVwiLCBcIklzIENvb2tib29rIGNsb3NlZD8gVGhlcmUgaXMgYW4gYWJub3JtYWxpdHkgaW4gdGhlIGNvbW11bmljYXRpb24gd2l0aCBDb29rYm9vay5cIik7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcImRhdGUtZm5zXCI7XG5pbXBvcnQgdHlwZSB7ICRjb250ZXh0LCBNaWxraW9Jbml0LCBNaWxraW9SdW50aW1lSW5pdCB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xuaW1wb3J0IHsgc2VuZENvb2tib29rRXZlbnQgfSBmcm9tIFwiLi4vdXRpbHMvc2VuZC1jb29rYm9vay1ldmVudC50c1wiO1xuXG5leHBvcnQgdHlwZSBMb2cgPSBbXCIoZGVidWcpXCIgfCBcIihpbmZvKVwiIHwgXCIod2FybilcIiB8IFwiKGVycm9yKVwiIHwgXCIocmVxdWVzdClcIiB8IFwiKHJlc3BvbnNlKVwiLCBzdHJpbmcgLyogZXhlY3V0ZUlkICovLCBzdHJpbmcsIHN0cmluZywgc3RyaW5nLCAuLi5BcnJheTx1bmtub3duPl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyIHtcbiAgXzoge1xuICAgIGxvZ3M6IEFycmF5PExvZz47XG4gICAgdGFnczogTWFwPHN0cmluZywgdW5rbm93bj47XG4gICAgc3VibWl0OiAoY29udGV4dDogJGNvbnRleHQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICB9O1xuICBzZXRUYWc6IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHZvaWQ7XG4gIHNldExvZzogKC4uLmxvZzogTG9nKSA9PiB2b2lkO1xuICBkZWJ1ZzogKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IExvZztcbiAgaW5mbzogKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IExvZztcbiAgd2FybjogKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IExvZztcbiAgZXJyb3I6IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBMb2c7XG4gIHJlcXVlc3Q6IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBMb2c7XG4gIHJlc3BvbnNlOiAoZGVzY3JpcHRpb246IHN0cmluZywgLi4ucGFyYW1zOiBBcnJheTx1bmtub3duPikgPT4gTG9nO1xufVxuXG5leHBvcnQgdHlwZSBMb2dnZXJJbnNlcnRpbmdIYW5kbGVyID0gKGxvZzogTG9nKSA9PiBib29sZWFuO1xuXG5leHBvcnQgdHlwZSBMb2dnZXJTdWJtaXR0aW5nSGFuZGxlciA9IChjb250ZXh0OiAkY29udGV4dCwgbG9nczogQXJyYXk8TG9nPiwgdGFnczogTWFwPHN0cmluZywgdW5rbm93bj4pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9nZ2VyPE1pbGtpb1J1bnRpbWUgZXh0ZW5kcyBNaWxraW9SdW50aW1lSW5pdDxNaWxraW9SdW50aW1lSW5pdDxNaWxraW9Jbml0Pj4gPSBNaWxraW9SdW50aW1lSW5pdDxNaWxraW9Jbml0Pj4ocnVudGltZTogTWlsa2lvUnVudGltZSwgcGF0aDogc3RyaW5nLCBleGVjdXRlSWQ6IHN0cmluZyk6IExvZ2dlciB7XG4gIGNvbnN0IGxvZ2dlciA9IHt9IGFzIExvZ2dlcjtcblxuICBsb2dnZXIuXyA9IHtcbiAgICBsb2dzOiBbXSxcbiAgICB0YWdzOiBuZXcgTWFwKCksXG4gICAgc3VibWl0OiAoY29udGV4dDogJGNvbnRleHQpID0+IHtcbiAgICAgIGlmICghcnVudGltZS5vbkxvZ2dlclN1Ym1pdHRpbmcpIHJldHVybjtcbiAgICAgIHJldHVybiBydW50aW1lLm9uTG9nZ2VyU3VibWl0dGluZyhjb250ZXh0LCBsb2dnZXIuXy5sb2dzLCBsb2dnZXIuXy50YWdzKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IF9fdGFnUHVzaCA9IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkID0+IHtcbiAgICBsb2dnZXIuXy50YWdzLnNldChrZXksIHZhbHVlKTtcbiAgfTtcbiAgY29uc3QgX19sb2dQdXNoID0gKGxvZzogTG9nKTogTG9nID0+IHtcbiAgICBjb25zdCBpbnNlcnRpbmcgPSBydW50aW1lLm9uTG9nZ2VySW5zZXJ0aW5nXG4gICAgICA/IHJ1bnRpbWUub25Mb2dnZXJJbnNlcnRpbmdcbiAgICAgIDogKGxvZzogTG9nKSA9PiB7XG4gICAgICAgICAgbG9nID0gWy4uLmxvZ107XG4gICAgICAgICAgbG9nWzBdID0gYFxcbiR7bG9nWzBdfWAgYXMgYW55O1xuICAgICAgICAgIGNvbnNvbGUubG9nKC4uLmxvZyk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG5cbiAgICBpZiAoIWluc2VydGluZyhsb2cpKSByZXR1cm4gbG9nO1xuXG4gICAgbG9nZ2VyLl8ubG9ncy5wdXNoKFsuLi5sb2ddKTtcbiAgICBpZiAocnVudGltZS5kZXZlbG9wKSB7XG4gICAgICB2b2lkIHNlbmRDb29rYm9va0V2ZW50KHJ1bnRpbWUsIHtcbiAgICAgICAgdHlwZTogXCJtaWxraW9AbG9nZ2VyXCIsXG4gICAgICAgIGxvZyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsb2c7XG4gIH07XG5cbiAgbG9nZ2VyLnNldFRhZyA9IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IF9fdGFnUHVzaChrZXksIHZhbHVlKTtcbiAgbG9nZ2VyLnNldExvZyA9ICguLi5sb2c6IExvZykgPT4gX19sb2dQdXNoKGxvZyk7XG5cbiAgY29uc3QgZ2V0Tm93ID0gKCkgPT4gYCR7Zm9ybWF0KG5ldyBEYXRlKCksIFwiKHl5eXktTU0tZGQgaGg6bW06c3MpXCIpfWA7XG5cbiAgbG9nZ2VyLmRlYnVnID0gKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IF9fbG9nUHVzaChbXCIoZGVidWcpXCIsIHBhdGgsIGV4ZWN1dGVJZCwgZ2V0Tm93KCksIGBcXG4ke2Rlc2NyaXB0aW9ufWAsIC4uLnBhcmFtc10pO1xuICBsb2dnZXIuaW5mbyA9IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBfX2xvZ1B1c2goW1wiKGluZm8pXCIsIHBhdGgsIGV4ZWN1dGVJZCwgZ2V0Tm93KCksIGBcXG4ke2Rlc2NyaXB0aW9ufWAsIC4uLnBhcmFtc10pO1xuICBsb2dnZXIud2FybiA9IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBfX2xvZ1B1c2goW1wiKHdhcm4pXCIsIHBhdGgsIGV4ZWN1dGVJZCwgZ2V0Tm93KCksIGBcXG4ke2Rlc2NyaXB0aW9ufWAsIC4uLnBhcmFtc10pO1xuICBsb2dnZXIuZXJyb3IgPSAoZGVzY3JpcHRpb246IHN0cmluZywgLi4ucGFyYW1zOiBBcnJheTx1bmtub3duPikgPT4gX19sb2dQdXNoKFtcIihlcnJvcilcIiwgcGF0aCwgZXhlY3V0ZUlkLCBnZXROb3coKSwgYFxcbiR7ZGVzY3JpcHRpb259YCwgLi4ucGFyYW1zXSk7XG4gIGxvZ2dlci5yZXF1ZXN0ID0gKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IF9fbG9nUHVzaChbXCIocmVxdWVzdClcIiwgcGF0aCwgZXhlY3V0ZUlkLCBnZXROb3coKSwgYFxcbiR7ZGVzY3JpcHRpb259YCwgLi4ucGFyYW1zXSk7XG4gIGxvZ2dlci5yZXNwb25zZSA9IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBfX2xvZ1B1c2goW1wiKHJlc3BvbnNlKVwiLCBwYXRoLCBleGVjdXRlSWQsIGdldE5vdygpLCBgXFxuJHtkZXNjcmlwdGlvbn1gLCAuLi5wYXJhbXNdKTtcblxuICByZXR1cm4gbG9nZ2VyO1xufVxuIiwKICAgICJleHBvcnQgaW50ZXJmYWNlIFN0ZXBzPFN0YWdlVCBleHRlbmRzIFJlY29yZDxhbnksIGFueT4+IHtcbiAgc3RlcDogU3RlcEZ1bmN0aW9uPFN0YWdlVD47XG4gIHJ1bjogKCkgPT4gUHJvbWlzZTxSZW1vdmVfPFN0YWdlVD4+O1xufVxuXG50eXBlIFJlbW92ZV88VD4gPSB7XG4gIFtLIGluIGtleW9mIFQgYXMgSyBleHRlbmRzIGBfJHtzdHJpbmd9YCA/IG5ldmVyIDogS106IFRbS107XG59O1xuXG50eXBlIFRvRW1wdHlPYmplY3Q8VD4gPSBUIGV4dGVuZHMgdW5kZWZpbmVkIHwgbnVsbCB8IG5ldmVyID8ge30gOiBUIGV4dGVuZHMgb2JqZWN0ID8gVCA6IHt9O1xuXG5leHBvcnQgdHlwZSBTdGVwRnVuY3Rpb248U3RhZ2VUIGV4dGVuZHMgUmVjb3JkPGFueSwgYW55Pj4gPSA8SGFuZGxlclQgZXh0ZW5kcyAoc3RhZ2U6IFJlYWRvbmx5PFN0YWdlVD4pID0+IFJlY29yZDxhbnksIGFueT4gfCBQcm9taXNlPFJlY29yZDxhbnksIGFueT4+PihoYW5kbGVyOiBIYW5kbGVyVCkgPT4gU3RlcHM8QXdhaXRlZDxTdGFnZVQ+ICYgVG9FbXB0eU9iamVjdDxBd2FpdGVkPFJldHVyblR5cGU8SGFuZGxlclQ+Pj4+O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RlcCgpOiBTdGVwczx7fT4ge1xuICBjb25zdCBzdGVwQ29udHJvbGxlciA9IHtcbiAgICAkbWlsa2lvVHlwZTogXCJzdGVwXCIsXG4gICAgX3N0ZXBzOiBbXSBhcyBBcnJheTwoc3RhZ2U6IGFueSkgPT4gUHJvbWlzZTxhbnk+PixcbiAgICBzdGVwKGhhbmRsZXI6IChzdGFnZTogYW55KSA9PiBQcm9taXNlPGFueT4pIHtcbiAgICAgIHN0ZXBDb250cm9sbGVyLl9zdGVwcy5wdXNoKGhhbmRsZXIpO1xuICAgICAgcmV0dXJuIHN0ZXBDb250cm9sbGVyO1xuICAgIH0sXG4gICAgYXN5bmMgcnVuKCkge1xuICAgICAgbGV0IHN0YWdlID0ge307XG4gICAgICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RlcENvbnRyb2xsZXIuX3N0ZXBzKSB7XG4gICAgICAgIHN0YWdlID0geyAuLi5zdGFnZSwgLi4uKGF3YWl0IHN0ZXAoc3RhZ2UpKSB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8YW55LCBhbnk+ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzdGFnZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChzdGFnZSBhcyBhbnkpW2tleV07XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoXCJfXCIpKSByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICB9O1xuICByZXR1cm4gc3RlcENvbnRyb2xsZXIgYXMgYW55IGFzIFN0ZXBzPHt9Pjtcbn1cbiIsCiAgICAiZXhwb3J0IGNsYXNzIFRyaWU8VD4ge1xyXG4gIHByaXZhdGUgcm9vdDogVHJpZU5vZGU8VD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5yb290ID0gbmV3IFRyaWVOb2RlKCk7XHJcbiAgfVxyXG5cclxuICBhZGQocGF0aDogc3RyaW5nLCB2YWx1ZTogVCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGFydHMgPSBwYXRoXHJcbiAgICAgIC5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCBcIlwiKVxyXG4gICAgICAuc3BsaXQoXCIvXCIpXHJcbiAgICAgIC5maWx0ZXIoKHApID0+IHAgIT09IFwiXCIpO1xyXG4gICAgbGV0IGN1cnJlbnROb2RlID0gdGhpcy5yb290O1xyXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjdXJyZW50Tm9kZS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcclxuICAgICAgaWYgKCFjdXJyZW50Tm9kZS5jaGlsZHJlbi5oYXMocGFydCkpIHtcclxuICAgICAgICBjdXJyZW50Tm9kZS5jaGlsZHJlbi5zZXQocGFydCwgbmV3IFRyaWVOb2RlKCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuY2hpbGRyZW4uZ2V0KHBhcnQpITtcclxuICAgIH1cclxuICAgIGN1cnJlbnROb2RlLnZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQocGF0aDogc3RyaW5nKTogVCB8IG51bGwge1xyXG4gICAgY29uc3QgcGFydHMgPSBwYXRoXHJcbiAgICAgIC5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCBcIlwiKVxyXG4gICAgICAuc3BsaXQoXCIvXCIpXHJcbiAgICAgIC5maWx0ZXIoKHApID0+IHAgIT09IFwiXCIpO1xyXG4gICAgbGV0IGN1cnJlbnROb2RlID0gdGhpcy5yb290O1xyXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XHJcbiAgICAgIGlmICghY3VycmVudE5vZGUuY2hpbGRyZW4uaGFzKHBhcnQpKSByZXR1cm4gbnVsbDtcclxuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5jaGlsZHJlbi5nZXQocGFydCkhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN1cnJlbnROb2RlLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgaGFzKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcGFydHMgPSBwYXRoXHJcbiAgICAgIC5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCBcIlwiKVxyXG4gICAgICAuc3BsaXQoXCIvXCIpXHJcbiAgICAgIC5maWx0ZXIoKHApID0+IHAgIT09IFwiXCIpO1xyXG4gICAgbGV0IGN1cnJlbnROb2RlID0gdGhpcy5yb290O1xyXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGN1cnJlbnROb2RlLnZhbHVlICE9PSBudWxsO1xyXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XHJcbiAgICAgIGlmICghY3VycmVudE5vZGUuY2hpbGRyZW4uaGFzKHBhcnQpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGVsc2UgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5jaGlsZHJlbi5nZXQocGFydCkhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN1cnJlbnROb2RlLnZhbHVlICE9PSBudWxsO1xyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgVHJpZU5vZGU8VD4ge1xyXG4gIGNoaWxkcmVuOiBNYXA8c3RyaW5nLCBUcmllTm9kZTxUPj47XHJcbiAgdmFsdWU6IFQgfCBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuY2hpbGRyZW4gPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICB9XHJcbn1cclxuIiwKICAgICJpbXBvcnQgeyBUU09OIH0gZnJvbSBcIkBzb3V0aGVybi1hdXJvcmEvdHNvblwiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBleGNlcHRpb25IYW5kbGVyLCByZWplY3QgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcbmltcG9ydCB0eXBlIHsgTWl4aW4sIEdlbmVyYXRlZEluaXQsICR0eXBlcywgQ29udGV4dEh0dHAsIE1pbGtpb1Jlc3BvbnNlUmVqZWN0LCBSZXN1bHRzLCBNaWxraW9SZXNwb25zZVN1Y2Nlc3MgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcbmltcG9ydCB0eXBlIHsgX19pbml0RXhlY3V0ZXIgfSBmcm9tIFwiLi4vZXhlY3V0ZS9pbmRleC50c1wiO1xuaW1wb3J0IHsgX19jcmVhdGVJZCB9IGZyb20gXCIuLi91dGlscy9jcmVhdGUtaWQudHNcIjtcbmltcG9ydCB7IFRyaWUgfSBmcm9tIFwiLi4vdXRpbHMvdHJpZS50c1wiO1xuXG5leHBvcnQgdHlwZSBNaWxraW9IdHRwUmVxdWVzdCA9IFJlcXVlc3Q7XG5cbmV4cG9ydCB0eXBlIE1pbGtpb0h0dHBSZXNwb25zZSA9IE1peGluPFxuICBSZXNwb25zZUluaXQsXG4gIHtcbiAgICAvLyBib2R5OiBzdHJpbmcgfCBCbG9iIHwgRm9ybURhdGEgfCBVUkxTZWFyY2hQYXJhbXMgfCBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PjtcbiAgICBib2R5OiBhbnk7XG4gICAgc3RhdHVzOiBudW1iZXI7XG4gICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfVxuPjtcblxuZXhwb3J0IGZ1bmN0aW9uIF9faW5pdExpc3RlbmVyKGdlbmVyYXRlZDogR2VuZXJhdGVkSW5pdCwgcnVudGltZTogYW55LCBleGVjdXRlcjogUmV0dXJuVHlwZTx0eXBlb2YgX19pbml0RXhlY3V0ZXI+KSB7XG4gIGNvbnN0IHBvcnQgPSBydW50aW1lLnBvcnQ7XG4gIGNvbnN0IHRyaWUgPSBuZXcgVHJpZTxhbnk+KCk7XG4gIGNvbnN0IGZldGNoID0gYXN5bmMgKG9wdGlvbnM6IHtcbiAgICByZXF1ZXN0OiBNaWxraW9IdHRwUmVxdWVzdDtcbiAgICBlbnZNb2RlPzogc3RyaW5nO1xuICAgIGVudj86IFJlY29yZDxhbnksIGFueT47XG4gICAgcm91dGVTY2hlbWE/OiBhbnk7XG4gIH0pOiBQcm9taXNlPFJlc3BvbnNlPiA9PiB7XG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdC5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSB7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHVuZGVmaW5lZCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzXCI6IHJ1bnRpbWUuY29ycz8uY29yc0FsbG93TWV0aG9kcyA/PyBcIipcIixcbiAgICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiOiBydW50aW1lLmNvcnM/LmNvcnNBbGxvd09yaWdpbiA/PyBcIipcIixcbiAgICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcIjogcnVudGltZS5jb3JzPy5jb3JzQWxsb3dIZWFkZXJzID8/IFwiKlwiLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdC51cmwuZW5kc1dpdGgoXCIvZ2VuZXJhdGVfMjA0XCIpKSB7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtcbiAgICAgICAgc3RhdHVzOiAyMDQsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBTZXJ2ZXI6IFwibWlsa2lvXCIsXG4gICAgICAgICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzXCI6IHJ1bnRpbWUuY29ycz8uY29yc0FsbG93TWV0aG9kcyA/PyBcIipcIixcbiAgICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiOiBydW50aW1lLmNvcnM/LmNvcnNBbGxvd09yaWdpbiA/PyBcIipcIixcbiAgICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcIjogcnVudGltZS5jb3JzPy5jb3JzQWxsb3dIZWFkZXJzID8/IFwiKlwiLFxuICAgICAgICAgIFwiQ2FjaGUtQ29udHJvbFwiOiBcIm5vLXN0b3JlXCIsXG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogYHRleHQvcGxhaW47IHRpbWU9JHtEYXRlLm5vdygpfWAsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKG9wdGlvbnMucmVxdWVzdC51cmwpO1xuICAgIGxldCBwYXRoQXJyYXkgPSB1cmwucGF0aG5hbWUuc3Vic3RyaW5nKDEpLnNwbGl0KFwiL1wiKTtcbiAgICBpZiAocnVudGltZS5pZ25vcmVQYXRoTGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBydW50aW1lLmlnbm9yZVBhdGhMZXZlbCAhPT0gMCkgcGF0aEFycmF5ID0gcGF0aEFycmF5LnNsaWNlKHJ1bnRpbWUuaWdub3JlUGF0aExldmVsKTtcbiAgICBjb25zdCBwYXRoU3RyaW5nID0gYC8ke3BhdGhBcnJheS5qb2luKFwiL1wiKX1gO1xuXG4gICAgY29uc3QgZXhlY3V0ZUlkID0gcnVudGltZT8uZXhlY3V0ZUlkID8gYXdhaXQgcnVudGltZS5leGVjdXRlSWQob3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMpIDogX19jcmVhdGVJZCgpO1xuXG4gICAgY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKHJ1bnRpbWUsIHBhdGhTdHJpbmcsIGV4ZWN1dGVJZCk7XG4gICAgcnVudGltZS5ydW50aW1lLnJlcXVlc3Quc2V0KGV4ZWN1dGVJZCwgeyBsb2dnZXIgfSk7XG4gICAgY29uc3QgcmVzcG9uc2U6IE1pbGtpb0h0dHBSZXNwb25zZSA9IHtcbiAgICAgIGJvZHk6IFwiXCIsXG4gICAgICBzdGF0dXM6IDIwMCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzXCI6IHJ1bnRpbWUuY29ycz8uY29yc0FsbG93TWV0aG9kcyA/PyBcIipcIixcbiAgICAgICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5cIjogcnVudGltZS5jb3JzPy5jb3JzQWxsb3dPcmlnaW4gPz8gXCIqXCIsXG4gICAgICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVyc1wiOiBydW50aW1lLmNvcnM/LmNvcnNBbGxvd0hlYWRlcnMgPz8gXCIqXCIsXG4gICAgICAgIFwiQ2FjaGUtQ29udHJvbFwiOiBcIm5vLXN0b3JlXCIsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgbGV0IGZpbmFsZXM6IEFycmF5PCgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+PiA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGh0dHAgPSAoYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgaXAgPSBydW50aW1lLnJlYWxJcCA/IHJ1bnRpbWUucmVhbElwKG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzKSA6IFwiOjoxXCI7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBzdHJpbmc6IGF3YWl0IG9wdGlvbnMucmVxdWVzdC50ZXh0KCksXG4gICAgICAgICAgcGFyc2VkOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgaXAsXG4gICAgICAgICAgcGF0aDogeyBzdHJpbmc6IHBhdGhTdHJpbmcgYXMga2V5b2YgJHR5cGVzW1wiZ2VuZXJhdGVkXCJdW1wicm91dGVTY2hlbWFcIl0sIGFycmF5OiBwYXRoQXJyYXkgfSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgcmVxdWVzdDogb3B0aW9ucy5yZXF1ZXN0LFxuICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICB9IGFzIENvbnRleHRIdHRwO1xuICAgICAgfSkoKSkhO1xuXG4gICAgICBhd2FpdCBydW50aW1lLmVtaXQoXCJtaWxraW86aHR0cFJlcXVlc3RcIiwgeyBleGVjdXRlSWQsIGxvZ2dlciwgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsIGh0dHAgfSk7XG5cbiAgICAgIGlmICghcnVudGltZS5kZXZlbG9wICYmIChodHRwLnBhdGguc3RyaW5nIGFzIHN0cmluZykuc3RhcnRzV2l0aChcIi9fL1wiKSkge1xuICAgICAgICBhd2FpdCBydW50aW1lLmVtaXQoXCJtaWxraW86aHR0cE5vdEZvdW5kXCIsIHsgZXhlY3V0ZUlkLCBsb2dnZXIsIHBhdGg6IGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nLCBodHRwIH0pO1xuICAgICAgICB0aHJvdyByZWplY3QoXCJOT1RfRk9VTkRcIiwgeyBwYXRoOiBodHRwLnBhdGguc3RyaW5nIGFzIHN0cmluZyB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5nZXQoXCJBY2NlcHRcIik/LnN0YXJ0c1dpdGgoXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiKSkge1xuICAgICAgICAvLyBhY3Rpb25cbiAgICAgICAgbGV0IHJvdXRlU2NoZW1hID0gb3B0aW9ucy5yb3V0ZVNjaGVtYTtcbiAgICAgICAgaWYgKCFyb3V0ZVNjaGVtYSkge1xuICAgICAgICAgIHJvdXRlU2NoZW1hID0gdHJpZS5nZXQoaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcpO1xuICAgICAgICAgIGlmIChyb3V0ZVNjaGVtYSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcm91dGVTY2hlbWEgPSBnZW5lcmF0ZWQucm91dGVTY2hlbWE/LltodHRwLnBhdGguc3RyaW5nXTtcbiAgICAgICAgICAgIGlmIChyb3V0ZVNjaGVtYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHJ1bnRpbWUuZW1pdChcIm1pbGtpbzpodHRwTm90Rm91bmRcIiwgeyBleGVjdXRlSWQsIGxvZ2dlciwgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsIGh0dHAgfSk7XG4gICAgICAgICAgICAgIHRocm93IHJlamVjdChcIk5PVF9GT1VORFwiLCB7IHBhdGg6IGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiByb3V0ZVNjaGVtYS5tb2R1bGUgIT09IFwiZnVuY3Rpb25cIikgcm91dGVTY2hlbWEubW9kdWxlID0gYXdhaXQgcm91dGVTY2hlbWEubW9kdWxlO1xuICAgICAgICAgICAgZWxzZSByb3V0ZVNjaGVtYS5tb2R1bGUgPSBhd2FpdCByb3V0ZVNjaGVtYS5tb2R1bGUoKTtcbiAgICAgICAgICAgIHRyaWUuYWRkKGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nLCByb3V0ZVNjaGVtYSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJvdXRlU2NoZW1hLnR5cGUgIT09IFwiYWN0aW9uXCIpIHRocm93IHJlamVjdChcIlVOQUNDRVBUQUJMRVwiLCB7IGV4cGVjdGVkOiBcInN0cmVhbVwiLCBtZXNzYWdlOiBgTm90IGFjY2VwdGFibGUsIHRoZSBBY2NlcHQgaW4gdGhlIHJlcXVlc3QgaGVhZGVyIHNob3VsZCBiZSBcInRleHQvZXZlbnQtc3RyZWFtXCIuIElmIHlvdSBhcmUgdXNpbmcgdGhlIFwiQG1pbGtpby9zdGFyZ2F0ZVwiIHBhY2thZ2UsIHBsZWFzZSBhZGQgXFxgdHlwZTogXCJzdHJlYW1cIlxcYCB0byB0aGUgZXhlY3V0ZSBvcHRpb25zLmAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleGVjdXRlZCA9IGF3YWl0IGV4ZWN1dGVyLl9fZXhlY3V0ZShyb3V0ZVNjaGVtYSwge1xuICAgICAgICAgIGNyZWF0ZWRFeGVjdXRlSWQ6IGV4ZWN1dGVJZCxcbiAgICAgICAgICBjcmVhdGVkTG9nZ2VyOiBsb2dnZXIsXG4gICAgICAgICAgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsXG4gICAgICAgICAgaGVhZGVyczogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMgYXMgSGVhZGVycyxcbiAgICAgICAgICBtaXhpbkNvbnRleHQ6IHsgaHR0cCwgaGVhZGVyczogaHR0cC5yZXF1ZXN0LmhlYWRlcnMgfSxcbiAgICAgICAgICBwYXJhbXM6IGh0dHAucGFyYW1zLnN0cmluZyxcbiAgICAgICAgICBwYXJhbXNUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgZmluYWxlcyA9IGV4ZWN1dGVkLmZpbmFsZXM7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLmJvZHkgPT09IFwiXCIgJiYgZXhlY3V0ZWQucmVzdWx0cy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKGV4ZWN1dGVkLmVtcHR5UmVzdWx0KSB7XG4gICAgICAgICAgICByZXNwb25zZS5ib2R5ID0gYHtcImRhdGFcIjp7fSxcImV4ZWN1dGVJZFwiOlwiJHtleGVjdXRlSWR9XCIsXCJzdWNjZXNzXCI6dHJ1ZX1gO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXhlY3V0ZWQucmVzdWx0c1R5cGVTYWZldHkpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlLmJvZHkgPSBge1wiZGF0YVwiOiR7cm91dGVTY2hlbWEucmVzdWx0c1RvSlNPTihleGVjdXRlZC5yZXN1bHRzLnZhbHVlKX0sXCJleGVjdXRlSWRcIjpcIiR7ZXhlY3V0ZUlkfVwiLFwic3VjY2Vzc1wiOnRydWV9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UuYm9keSA9IGB7XCJkYXRhXCI6JHtUU09OLnN0cmluZ2lmeShleGVjdXRlZC5yZXN1bHRzLnZhbHVlKX0sXCJleGVjdXRlSWRcIjpcIiR7ZXhlY3V0ZUlkfVwiLFwic3VjY2Vzc1wiOnRydWV9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBydW50aW1lLmVtaXQoXCJtaWxraW86aHR0cFJlc3BvbnNlXCIsIHsgZXhlY3V0ZUlkLCBsb2dnZXIsIHBhdGg6IGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nLCBodHRwLCBoZWFkZXJzOiBodHRwLnJlcXVlc3QuaGVhZGVycywgY29udGV4dDogZXhlY3V0ZWQuY29udGV4dCB9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgZmluYWxlcykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBoYW5kbGVyKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIGluc2lkZSBvbkZpbmFsbHkuXCIsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBydW50aW1lLnJ1bnRpbWUucmVxdWVzdC5kZWxldGUoZXhlY3V0ZUlkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShyZXNwb25zZS5ib2R5LCByZXNwb25zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzdHJlYW1cbiAgICAgICAgbGV0IHJvdXRlU2NoZW1hID0gb3B0aW9ucy5yb3V0ZVNjaGVtYTtcbiAgICAgICAgaWYgKCFyb3V0ZVNjaGVtYSkge1xuICAgICAgICAgIHJvdXRlU2NoZW1hID0gdHJpZS5nZXQoaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcpO1xuICAgICAgICAgIGlmIChyb3V0ZVNjaGVtYSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcm91dGVTY2hlbWEgPSBnZW5lcmF0ZWQucm91dGVTY2hlbWE/LltodHRwLnBhdGguc3RyaW5nXTtcbiAgICAgICAgICAgIGlmIChyb3V0ZVNjaGVtYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHJ1bnRpbWUuZW1pdChcIm1pbGtpbzpodHRwTm90Rm91bmRcIiwgeyBleGVjdXRlSWQsIGxvZ2dlciwgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsIGh0dHAgfSk7XG4gICAgICAgICAgICAgIHRocm93IHJlamVjdChcIk5PVF9GT1VORFwiLCB7IHBhdGg6IGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiByb3V0ZVNjaGVtYS5tb2R1bGUgIT09IFwiZnVuY3Rpb25cIikgcm91dGVTY2hlbWEubW9kdWxlID0gYXdhaXQgcm91dGVTY2hlbWEubW9kdWxlO1xuICAgICAgICAgICAgZWxzZSByb3V0ZVNjaGVtYS5tb2R1bGUgPSBhd2FpdCByb3V0ZVNjaGVtYS5tb2R1bGUoKTtcbiAgICAgICAgICAgIHRyaWUuYWRkKGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nLCByb3V0ZVNjaGVtYSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyb3V0ZVNjaGVtYS50eXBlICE9PSBcInN0cmVhbVwiKSB0aHJvdyByZWplY3QoXCJVTkFDQ0VQVEFCTEVcIiwgeyBleHBlY3RlZDogXCJzdHJlYW1cIiwgbWVzc2FnZTogYE5vdCBhY2NlcHRhYmxlLCB0aGUgQWNjZXB0IGluIHRoZSByZXF1ZXN0IGhlYWRlciBzaG91bGQgYmUgXCJhcHBsaWNhdGlvbi9qc29uXCIuIElmIHlvdSBhcmUgdXNpbmcgdGhlIFwiQG1pbGtpby9zdGFyZ2F0ZVwiIHBhY2thZ2UsIHBsZWFzZSByZW1vdmUgXFxgdHlwZTogXCJzdHJlYW1cIlxcYCB0byB0aGUgZXhlY3V0ZSBvcHRpb25zLmAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoYW5kbGVDbG9zZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBydW50aW1lLnJ1bnRpbWUucmVxdWVzdC5kZWxldGUoZXhlY3V0ZUlkKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgZmluYWxlcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlcigpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgaW5zaWRlIG9uRmluYWxseS5cIiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBleGVjdXRlZCA9IGF3YWl0IGV4ZWN1dGVyLl9fZXhlY3V0ZShyb3V0ZVNjaGVtYSwge1xuICAgICAgICAgIGNyZWF0ZWRFeGVjdXRlSWQ6IGV4ZWN1dGVJZCxcbiAgICAgICAgICBjcmVhdGVkTG9nZ2VyOiBsb2dnZXIsXG4gICAgICAgICAgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsXG4gICAgICAgICAgaGVhZGVyczogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMgYXMgSGVhZGVycyxcbiAgICAgICAgICBtaXhpbkNvbnRleHQ6IHsgaHR0cCwgaGVhZGVyczogaHR0cC5yZXF1ZXN0LmhlYWRlcnMgfSxcbiAgICAgICAgICBwYXJhbXM6IGh0dHAucGFyYW1zLnN0cmluZyxcbiAgICAgICAgICBwYXJhbXNUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgZmluYWxlcyA9IGV4ZWN1dGVkLmZpbmFsZXM7XG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IGJ1blxuICAgICAgICBsZXQgc3RyZWFtOiBSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZTogYnVuXG4gICAgICAgIGxldCBjb250cm9sOiBSZWFkYWJsZVN0cmVhbURpcmVjdENvbnRyb2xsZXIgfCBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IGJ1blxuICAgICAgICBpZiAodHlwZW9mIEJ1biAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmU6IGJ1blxuICAgICAgICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICAgICAgICB0eXBlOiBcImRpcmVjdFwiLFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZTogYnVuXG4gICAgICAgICAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXI6IFJlYWRhYmxlU3RyZWFtRGlyZWN0Q29udHJvbGxlcikge1xuICAgICAgICAgICAgICBjb250cm9sID0gY29udHJvbGxlcjtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLndyaXRlKGBkYXRhOkAke0pTT04uc3RyaW5naWZ5KHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogdW5kZWZpbmVkLCBleGVjdXRlSWQgfSBzYXRpc2ZpZXMgTWlsa2lvUmVzcG9uc2VTdWNjZXNzPGFueT4pfVxcblxcbmApO1xuICAgICAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgdmFsdWUgb2YgZXhlY3V0ZWQucmVzdWx0cy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShbbnVsbCwgVFNPTi5lbmNvZGUodmFsdWUpXSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIud3JpdGUoYGRhdGE6JHtyZXN1bHR9XFxuXFxuYCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleGVjdXRlZC5yZXN1bHRzLnZhbHVlLnJldHVybih1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4Y2VwdGlvbiA9IGV4Y2VwdGlvbkhhbmRsZXIoZXhlY3V0ZUlkLCBsb2dnZXIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIHJlc3VsdFtleGNlcHRpb24uY29kZV0gPSBleGNlcHRpb24ucmVqZWN0O1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIud3JpdGUoYGRhdGE6JHtKU09OLnN0cmluZ2lmeShbVFNPTi5lbmNvZGUocmVzdWx0KSwgbnVsbF0pfVxcblxcbmApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKTtcbiAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ2xvc2UoKTtcbiAgICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ2xvc2UoKTtcbiAgICAgICAgICAgICAgY29udHJvbC5jbG9zZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIGFueSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gbm9kZS5qcyBvciBvdGhlcnNcbiAgICAgICAgICAvLyBAdHMtaWdub3JlOiBidW5cbiAgICAgICAgICBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZTogYnVuXG4gICAgICAgICAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgY29udHJvbCA9IGNvbnRyb2xsZXI7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGBkYXRhOkAke0pTT04uc3RyaW5naWZ5KHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogdW5kZWZpbmVkLCBleGVjdXRlSWQgfSBzYXRpc2ZpZXMgTWlsa2lvUmVzcG9uc2VTdWNjZXNzPGFueT4pfVxcblxcbmApO1xuICAgICAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgdmFsdWUgb2YgZXhlY3V0ZWQucmVzdWx0cy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShbbnVsbCwgVFNPTi5lbmNvZGUodmFsdWUpXSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShgZGF0YToke3Jlc3VsdH1cXG5cXG5gKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVkLnJlc3VsdHMudmFsdWUucmV0dXJuKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhjZXB0aW9uID0gZXhjZXB0aW9uSGFuZGxlcihleGVjdXRlSWQsIGxvZ2dlciwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgcmVzdWx0W2V4Y2VwdGlvbi5jb2RlXSA9IGV4Y2VwdGlvbi5yZWplY3Q7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGBkYXRhOiR7SlNPTi5zdHJpbmdpZnkoW1RTT04uZW5jb2RlKHJlc3VsdCksIG51bGxdKX1cXG5cXG5gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDbG9zZSgpO1xuICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7XG4gICAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhc3luYyBjYW5jZWwoKSB7XG4gICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNsb3NlKCk7XG4gICAgICAgICAgICAgIGNvbnRyb2wuY2xvc2UoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBhbnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzcG9uc2UuYm9keSA9IHN0cmVhbTtcbiAgICAgICAgcmVzcG9uc2UuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwidGV4dC9ldmVudC1zdHJlYW1cIjtcbiAgICAgICAgcmVzcG9uc2UuaGVhZGVyc1tcIkNhY2hlLUNvbnRyb2xcIl0gPSBcIm5vLWNhY2hlXCI7XG5cbiAgICAgICAgYXdhaXQgcnVudGltZS5lbWl0KFwibWlsa2lvOmh0dHBSZXNwb25zZVwiLCB7IGV4ZWN1dGVJZCwgbG9nZ2VyLCBwYXRoOiBodHRwLnBhdGguc3RyaW5nIGFzIHN0cmluZywgaHR0cCwgaGVhZGVyczogaHR0cC5yZXF1ZXN0LmhlYWRlcnMsIGNvbnRleHQ6IGV4ZWN1dGVkLmNvbnRleHQgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShyZXNwb25zZS5ib2R5LCByZXNwb25zZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHJlc3VsdHM6IFJlc3VsdHM8TWlsa2lvUmVzcG9uc2VSZWplY3Q+ID0ge1xuICAgICAgICB2YWx1ZTogZXhjZXB0aW9uSGFuZGxlcihleGVjdXRlSWQsIGxvZ2dlciwgZXJyb3IpLFxuICAgICAgfTtcbiAgICAgIGlmIChyZXN1bHRzLnZhbHVlICE9PSB1bmRlZmluZWQpIHJlc3BvbnNlLmJvZHkgPSBUU09OLnN0cmluZ2lmeShyZXN1bHRzLnZhbHVlKTtcblxuICAgICAgcnVudGltZS5ydW50aW1lLnJlcXVlc3QuZGVsZXRlKGV4ZWN1dGVJZCk7XG4gICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHJlc3BvbnNlLmJvZHksIHJlc3BvbnNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc3RyZWFtQ2xvc2VyczogTWFwPHN0cmluZywgeyBnZW5lcmF0b3I6IEFzeW5jR2VuZXJhdG9yOyBoYW5kbGVDbG9zZTogYW55IH0+ID0gbmV3IE1hcCgpO1xuICBjb25zdCBoYW5kbGVNZXNzYWdlID0gYXN5bmMgKFxuICAgIHBvcnQ6IHsgcG9zdE1lc3NhZ2UobWVzc2FnZTogYW55KTogdm9pZCB9LFxuICAgIG9wdGlvbnM6XG4gICAgICB8IHtcbiAgICAgICAgICBleGVjdXRlSWQ6IHN0cmluZztcbiAgICAgICAgICBwYXRoOiBzdHJpbmc7XG4gICAgICAgICAgcGFyYW1zPzogUmVjb3JkPGFueSwgYW55PjtcbiAgICAgICAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgICAgfVxuICAgICAgfCBzdHJpbmcsXG4gICkgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKG9wdGlvbnMgPT09IFwiUElOR1wiKSB7XG4gICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoXCJQT05HXCIpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuc3RhcnRzV2l0aChcIkNMT1NFX1NUUkVBTTpcIikpIHtcbiAgICAgICAgY29uc3QgZXhlY3V0ZUlkID0gb3B0aW9ucy5zcGxpdChcIkNMT1NFX1NUUkVBTTpcIilbMV07XG4gICAgICAgIGNvbnN0IHN0cmVhbUNsb3NlciA9IHN0cmVhbUNsb3NlcnMuZ2V0KGV4ZWN1dGVJZCk7XG4gICAgICAgIGlmIChzdHJlYW1DbG9zZXIpIHtcbiAgICAgICAgICBzdHJlYW1DbG9zZXIuZ2VuZXJhdG9yLnJldHVybih1bmRlZmluZWQpO1xuICAgICAgICAgIHN0cmVhbUNsb3Nlci5oYW5kbGVDbG9zZShcInN0cmVhbVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcm91dGVTY2hlbWEgPSB0cmllLmdldChvcHRpb25zLnBhdGgpO1xuICAgIGlmIChyb3V0ZVNjaGVtYSA9PT0gbnVsbCkge1xuICAgICAgcm91dGVTY2hlbWEgPSBnZW5lcmF0ZWQucm91dGVTY2hlbWE/LltvcHRpb25zLnBhdGhdO1xuICAgICAgaWYgKHJvdXRlU2NoZW1hID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgcmVqZWN0KFwiTk9UX0ZPVU5EXCIsIHsgcGF0aDogb3B0aW9ucy5wYXRoIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiByb3V0ZVNjaGVtYS5tb2R1bGUgIT09IFwiZnVuY3Rpb25cIikgcm91dGVTY2hlbWEubW9kdWxlID0gYXdhaXQgcm91dGVTY2hlbWEubW9kdWxlO1xuICAgICAgZWxzZSByb3V0ZVNjaGVtYS5tb2R1bGUgPSBhd2FpdCByb3V0ZVNjaGVtYS5tb2R1bGUoKTtcbiAgICAgIHRyaWUuYWRkKG9wdGlvbnMucGF0aCwgcm91dGVTY2hlbWEpO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICAgIGNvbnN0IHBhcmFtcyA9IG9wdGlvbnMucGFyYW1zID8/IHt9O1xuICAgIGNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcihydW50aW1lLCBvcHRpb25zLnBhdGgsIG9wdGlvbnMuZXhlY3V0ZUlkKTtcbiAgICBsZXQgZmluYWxlczogQXJyYXk8KCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4+ID0gW107XG5cbiAgICBjb25zdCBodHRwID0gbmV3IFByb3h5KFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGdldDogKHRhcmdldCwgcHJvcGVydHkpID0+IHtcbiAgICAgICAgICBpZiAocHJvcGVydHkgPT09IFwibm90Rm91bmRcIikgcmV0dXJuIHRydWU7XG4gICAgICAgICAgdGhyb3cgcmVqZWN0KFwiVU5BQ0NFUFRBQkxFXCIsIHsgZXhwZWN0ZWQ6IFwiY29udGV4dC5odHRwXCIsIG1lc3NhZ2U6IFwiVGhpcyByZXF1ZXN0IHdhcyBpbnZva2VkIHRocm91Z2ggdGhlIGV4ZWN1dGUgbWV0aG9kLiBTaW5jZSBubyBhY3R1YWwgcmVxdWVzdCB3YXMgZ2VuZXJhdGVkLCB0aGUgSFRUUCBtZXRob2RzIHVuZGVyIHRoZSBjb250ZXh0IGNhbm5vdCBiZSBhY2Nlc3NlZC5cIiB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiAoKSA9PiB7XG4gICAgICAgICAgdGhyb3cgcmVqZWN0KFwiVU5BQ0NFUFRBQkxFXCIsIHsgZXhwZWN0ZWQ6IFwiY29udGV4dC5odHRwXCIsIG1lc3NhZ2U6IFwiVGhpcyByZXF1ZXN0IHdhcyBpbnZva2VkIHRocm91Z2ggdGhlIGV4ZWN1dGUgbWV0aG9kLiBTaW5jZSBubyBhY3R1YWwgcmVxdWVzdCB3YXMgZ2VuZXJhdGVkLCB0aGUgSFRUUCBtZXRob2RzIHVuZGVyIHRoZSBjb250ZXh0IGNhbm5vdCBiZSBhY2Nlc3NlZC5cIiB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZUNsb3NlID0gYXN5bmMgKHR5cGU6IFwiYWN0aW9uXCIgfCBcInN0cmVhbVwiKSA9PiB7XG4gICAgICBpZiAodHlwZSA9PT0gXCJzdHJlYW1cIikgc3RyZWFtQ2xvc2Vycy5kZWxldGUob3B0aW9ucy5leGVjdXRlSWQpO1xuICAgICAgcnVudGltZS5ydW50aW1lLnJlcXVlc3QuZGVsZXRlKG9wdGlvbnMuZXhlY3V0ZUlkKTtcbiAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBmaW5hbGVzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgaGFuZGxlcigpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIGluc2lkZSBvbkZpbmFsbHkuXCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHJvdXRlU2NoZW1hLnR5cGUgPT09IFwiYWN0aW9uXCIpIHtcbiAgICAgICAgY29uc3QgZXhlY3V0ZWQgPSBhd2FpdCBleGVjdXRlci5fX2V4ZWN1dGUocm91dGVTY2hlbWEsIHtcbiAgICAgICAgICBjcmVhdGVkRXhlY3V0ZUlkOiBvcHRpb25zLmV4ZWN1dGVJZCxcbiAgICAgICAgICBjcmVhdGVkTG9nZ2VyOiBsb2dnZXIsXG4gICAgICAgICAgcGF0aDogb3B0aW9ucy5wYXRoLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgbWl4aW5Db250ZXh0OiB7IGh0dHA6IGh0dHAsIGhlYWRlcnMgfSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgcGFyYW1zVHlwZTogXCJyYXdcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGZpbmFsZXMgPSBleGVjdXRlZC5maW5hbGVzO1xuXG4gICAgICAgIGF3YWl0IGhhbmRsZUNsb3NlKFwiYWN0aW9uXCIpO1xuXG4gICAgICAgIGlmIChleGVjdXRlZC5lbXB0eVJlc3VsdCkge1xuICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgZXhlY3V0ZUlkOiBvcHRpb25zLmV4ZWN1dGVJZCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBleGVjdXRlSWQ6IG9wdGlvbnMuZXhlY3V0ZUlkLFxuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGRhdGE6IGV4ZWN1dGVkLnJlc3VsdHMudmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyb3V0ZVNjaGVtYS50eXBlID09PSBcInN0cmVhbVwiKSB7XG4gICAgICAgIGNvbnN0IGV4ZWN1dGVkID0gYXdhaXQgZXhlY3V0ZXIuX19leGVjdXRlKHJvdXRlU2NoZW1hLCB7XG4gICAgICAgICAgY3JlYXRlZEV4ZWN1dGVJZDogb3B0aW9ucy5leGVjdXRlSWQsXG4gICAgICAgICAgY3JlYXRlZExvZ2dlcjogbG9nZ2VyLFxuICAgICAgICAgIHBhdGg6IG9wdGlvbnMucGF0aCxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIG1peGluQ29udGV4dDogeyBodHRwOiBodHRwLCBoZWFkZXJzIH0sXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgIHBhcmFtc1R5cGU6IFwicmF3XCIsXG4gICAgICAgIH0pO1xuICAgICAgICBmaW5hbGVzID0gZXhlY3V0ZWQuZmluYWxlcztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoeyBzdWNjZXNzOiB0cnVlLCBkYXRhOiB1bmRlZmluZWQsIGV4ZWN1dGVJZDogb3B0aW9ucy5leGVjdXRlSWQsIGRvbmU6IGZhbHNlIH0pO1xuICAgICAgICAgIHN0cmVhbUNsb3NlcnMuc2V0KG9wdGlvbnMuZXhlY3V0ZUlkLCB7IGdlbmVyYXRvcjogZXhlY3V0ZWQucmVzdWx0cy52YWx1ZSwgaGFuZGxlQ2xvc2UgfSk7XG4gICAgICAgICAgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiBleGVjdXRlZC5yZXN1bHRzLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0geyBzdWNjZXNzOiB0cnVlLCBkYXRhOiBbbnVsbCwgdmFsdWVdLCBleGVjdXRlSWQ6IG9wdGlvbnMuZXhlY3V0ZUlkLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSh7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IHVuZGVmaW5lZCwgZXhlY3V0ZUlkOiBvcHRpb25zLmV4ZWN1dGVJZCwgZG9uZTogdHJ1ZSB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBleGNlcHRpb24gPSBleGNlcHRpb25IYW5kbGVyKG9wdGlvbnMuZXhlY3V0ZUlkLCBsb2dnZXIsIGVycm9yKTtcbiAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgICAgICAgIHJlc3VsdFtleGNlcHRpb24uY29kZV0gPSBleGNlcHRpb24ucmVqZWN0O1xuICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoeyBzdWNjZXNzOiBmYWxzZSwgZGF0YTogW1RTT04uZW5jb2RlKHJlc3VsdCksIG51bGxdLCBleGVjdXRlSWQ6IG9wdGlvbnMuZXhlY3V0ZUlkLCBkb25lOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGhhbmRsZUNsb3NlKFwic3RyZWFtXCIpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBleGNlcHRpb25IYW5kbGVyKG9wdGlvbnMuZXhlY3V0ZUlkLCBsb2dnZXIsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBwb3J0LFxuICAgIGZldGNoLFxuICAgIGhhbmRsZU1lc3NhZ2UsXG4gIH07XG59XG4iLAogICAgImltcG9ydCB7IFRTT04gfSBmcm9tIFwiQHNvdXRoZXJuLWF1cm9yYS90c29uXCI7XG5pbXBvcnQgdHlwZSB7IE1pbGtpb1Jlc3BvbnNlUmVqZWN0LCBMb2dnZXIgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSAkcmVqZWN0Q29kZSB7XG4gIEZBSUw6IHN0cmluZztcbiAgUkVRVUVTVF9GQUlMOiBhbnk7XG4gIE5PVF9ERVZFTE9QX01PREU6IHN0cmluZztcbiAgUkVRVUVTVF9USU1FT1VUOiB7IHRpbWVvdXQ6IG51bWJlcjsgbWVzc2FnZTogc3RyaW5nIH07XG4gIE5PVF9GT1VORDogeyBwYXRoOiBzdHJpbmcgfTtcbiAgUEFSQU1TX1RZUEVfSU5DT1JSRUNUOiB7IHBhdGg6IHN0cmluZzsgZXhwZWN0ZWQ6IHN0cmluZzsgdmFsdWU6IGFueTsgbWVzc2FnZTogc3RyaW5nIH0gfCBudWxsO1xuICBSRVNVTFRTX1RZUEVfSU5DT1JSRUNUOiB7IHBhdGg6IHN0cmluZzsgZXhwZWN0ZWQ6IHN0cmluZzsgdmFsdWU6IGFueTsgbWVzc2FnZTogc3RyaW5nIH0gfCBudWxsO1xuICBVTkFDQ0VQVEFCTEU6IHsgZXhwZWN0ZWQ6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH07XG4gIFBBUkFNU19UWVBFX05PVF9TVVBQT1JURUQ6IHsgZXhwZWN0ZWQ6IHN0cmluZyB9O1xuICBSRVNVTFRTX1RZUEVfTk9UX1NVUFBPUlRFRDogeyBleHBlY3RlZDogc3RyaW5nIH07XG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUjogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0PENvZGUgZXh0ZW5kcyBrZXlvZiAkcmVqZWN0Q29kZSwgUmVqZWN0RGF0YSBleHRlbmRzICRyZWplY3RDb2RlW0NvZGVdPihjb2RlOiBDb2RlLCBkYXRhOiBSZWplY3REYXRhKTogTWlsa2lvUmVqZWN0RXJyb3I8Q29kZSwgUmVqZWN0RGF0YT4ge1xuICBjb25zdCBlcnJvciA9IHsgJG1pbGtpb1JlamVjdDogdHJ1ZSwgY29kZSwgZGF0YSB9IGFzIE1pbGtpb1JlamVjdEVycm9yPENvZGUsIFJlamVjdERhdGE+O1xuICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnJvcik7XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IHR5cGUgTWlsa2lvUmVqZWN0RXJyb3I8Q29kZSBleHRlbmRzIGtleW9mICRyZWplY3RDb2RlID0ga2V5b2YgJHJlamVjdENvZGUsIFJlamVjdERhdGEgZXh0ZW5kcyAkcmVqZWN0Q29kZVtDb2RlXSA9ICRyZWplY3RDb2RlW0NvZGVdPiA9IHsgY29kZTogQ29kZTsgZGF0YTogUmVqZWN0RGF0YTsgc3RhY2s6IHN0cmluZzsgJG1pbGtpb1JlamVjdDogdHJ1ZSB9O1xuXG5leHBvcnQgZnVuY3Rpb24gZXhjZXB0aW9uSGFuZGxlcihleGVjdXRlSWQ6IHN0cmluZywgbG9nZ2VyOiBMb2dnZXIsIGVycm9yOiBNaWxraW9SZWplY3RFcnJvcjxhbnksIGFueT4gfCBhbnkpOiBNaWxraW9SZXNwb25zZVJlamVjdCB7XG4gIHRyeSB7XG4gICAgaWYgKFwidml0ZVNlcnZlclwiIGluIGdsb2JhbFRoaXMpIChnbG9iYWxUaGlzIGFzIGFueSkudml0ZVNlcnZlci5zc3JGaXhTdGFja3RyYWNlKGVycm9yKTsgLy8gZml4IHZpdGUgc3NyIHN0YWNrdHJhY2VcbiAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIFwidml0ZVNlcnZlclwiIGluIGdsb2JhbFRoaXMpIChnbG9iYWxUaGlzIGFzIGFueSkudml0ZVNlcnZlci5zc3JGaXhTdGFja3RyYWNlKGVycm9yKTtcbiAgY29uc3QgbmFtZSA9IGVycm9yPy5jb2RlID8/IGVycm9yPy5uYW1lID8/IGVycm9yPy5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyBcIlVubmFtZWQgRXhjZXB0aW9uXCI7XG5cbiAgaWYgKGVycm9yPy4kbWlsa2lvUmVqZWN0ID09PSB0cnVlICYmIGVycm9yPy5jb2RlID09PSBcIk5PVF9GT1VORFwiKSB7XG4gICAgbG9nZ2VyLmluZm8obmFtZSwgZXJyb3I/LmRhdGE/LnBhdGggPz8gXCJVbmtub3duIHBhdGhcIik7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YWNrID0gZXJyb3I/LiRtaWxraW9SZWplY3QgPyAoZXJyb3I/LnN0YWNrID8/IFwiXCIpLnNwbGl0KFwiXFxuXCIpLnNsaWNlKDIpLmpvaW4oXCJcXG5cIikgOiAoZXJyb3I/LnN0YWNrID8/IFwiXCIpO1xuICAgICAgbG9nZ2VyLmVycm9yKG5hbWUsIGBcXG4ke1RTT04uc3RyaW5naWZ5KGVycm9yPy5kYXRhKX1gLCBgXFxuJHtzdGFja31cXG5gKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICBsb2dnZXIuZXJyb3IobmFtZSwgYFxcbiR7ZXJyb3I/LnRvU3RyaW5nKCl9YCwgYFxcbiR7ZXJyb3I/LnN0YWNrfVxcbmApO1xuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHQ6IE1pbGtpb1Jlc3BvbnNlUmVqZWN0O1xuXG4gIGlmIChlcnJvcj8uJG1pbGtpb1JlamVjdCA9PT0gdHJ1ZSkgcmVzdWx0ID0geyBzdWNjZXNzOiBmYWxzZSwgY29kZTogZXJyb3IuY29kZSwgcmVqZWN0OiBlcnJvci5kYXRhLCBleGVjdXRlSWQgfTtcbiAgZWxzZSByZXN1bHQgPSB7IHN1Y2Nlc3M6IGZhbHNlLCBjb2RlOiBcIklOVEVSTkFMX1NFUlZFUl9FUlJPUlwiLCByZWplY3Q6IHVuZGVmaW5lZCwgZXhlY3V0ZUlkIH07XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFBTyxTQUFTLElBQTZCLENBQUMsU0FBMkI7QUFBQSxFQUN2RSxPQUFPLFFBQVE7QUFBQTs7QUNVVixTQUFTLFVBQTBDLENBQUMsT0FBK0I7QUFBQSxFQUN4RixPQUFPO0FBQUEsSUFDTCxNQUFNLE9BQU8sRUFBRSxhQUFhLGVBQWUsTUFBTTtBQUFBLEVBQ25EO0FBQUE7O0FDZEYsSUFBTSxJQUFJO0FBQUEsRUFDUixPQUFPO0FBQUEsSUFDTCxXQUFXO0FBQUEsTUFDVDtBQUFBLFFBQ0UsT0FBTyxDQUFDLE1BQU0sT0FBTyxLQUFLO0FBQUEsUUFDMUIsU0FBUyxDQUFDLE1BQU0sWUFBWSxFQUFFLFNBQVM7QUFBQSxNQUN6QztBQUFBLE1BQ0E7QUFBQSxRQUNFLE9BQU8sQ0FBQyxNQUFNLGFBQWE7QUFBQSxRQUMzQixTQUFTLENBQUMsTUFBTSxVQUFVLEVBQUUsWUFBWTtBQUFBLE1BQzFDO0FBQUEsTUFDQTtBQUFBLFFBQ0UsT0FBTyxDQUFDLE1BQU0sYUFBYTtBQUFBLFFBQzNCLFNBQVMsQ0FBQyxNQUFNLFNBQVMsRUFBRSxTQUFTO0FBQUEsTUFDdEM7QUFBQSxNQUNBO0FBQUEsUUFDRSxPQUFPLENBQUMsTUFBTSxhQUFhO0FBQUEsUUFDM0IsU0FBUyxDQUFDLE1BQU0sWUFBWSxFQUFFLFNBQVM7QUFBQSxNQUN6QztBQUFBLE1BQ0E7QUFBQSxRQUNFLE9BQU8sQ0FBQyxNQUFNLGFBQWE7QUFBQSxRQUMzQixTQUFTLENBQUMsTUFBTSxnQkFBZ0IsSUFBSSxZQUFZLEVBQUUsT0FBTyxDQUFDO0FBQUEsTUFD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LGtCQUFrQixRQUFRLE9BQU8sU0FBUyxhQUFhO0FBQUEsSUFDaEUsT0FBTyxLQUFLLE1BQU0sT0FBTyxNQUFNLFFBQVEsY0FBYztBQUFBLEVBQ3ZELEVBQU87QUFBQSxJQUNMLElBQUk7QUFBQSxNQUNGLE1BQU0sUUFBUSxPQUFPLGlCQUFpQixPQUFPLFNBQVMsSUFBSSxNQUFNO0FBQUEsQ0FBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUs7QUFBQSxDQUFJLElBQUssT0FBTyxTQUFTO0FBQUEsTUFDN0csT0FBTyxNQUFNLE1BQU07QUFBQSxFQUFLLEVBQUssVUFBVSxPQUFPLElBQUksS0FBSztBQUFBLEVBQUs7QUFBQSxDQUFTO0FBQUEsTUFDckUsT0FBTyxHQUFHO0FBQUEsTUFDVixPQUFPLE1BQU0sTUFBTTtBQUFBLEVBQUssT0FBTyxTQUFTLEtBQUs7QUFBQSxFQUFLLE9BQU87QUFBQSxDQUFTO0FBQUE7QUFBQTtBQUFBLEVBSXRFLElBQUk7QUFBQSxFQUVKLElBQUksT0FBTyxrQkFBa0I7QUFBQSxJQUFNLFNBQVMsRUFBRSxTQUFTLE9BQU8sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sVUFBVTtBQUFBLEVBQ3pHO0FBQUEsYUFBUyxFQUFFLFNBQVMsT0FBTyxNQUFNLHlCQUF5QixRQUFRLFdBQVcsVUFBVTtBQUFBLEVBRTVGLE9BQU87QUFBQTsiLAogICJkZWJ1Z0lkIjogIkM4NjQ2NDQ4RkEwNTJEMzU2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|
|
2574
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXHV0aWxzXFxwYXJ0LnRzIiwgIi4uXFx0eXBlLXNhZmV0eVxcaW5kZXgudHMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcQHNvdXRoZXJuLWF1cm9yYVxcdHNvblxcZGlzdFxcdHNvbi5qcyIsICIuLlxcY29uZmlnXFxpbmRleC50cyIsICIuLlxcdXRpbHNcXGhlYWRlcnMtdG8tanNvbi50cyIsICIuLlxcdXRpbHNcXG1lcmdlLWRlZXAudHMiLCAiLi5cXGV4ZWN1dGVcXGluZGV4LnRzIiwgIi4uXFxib290c3RyYXBcXGluZGV4LnRzIiwgIi4uXFxldmVudFxcaW5kZXgudHMiLCAiLi5cXGZsb3dcXGluZGV4LnRzIiwgIi4uXFxoYW5kbGVyXFxpbmRleC50cyIsICIuLlxcdXRpbHNcXGNyZWF0ZS1pZC50cyIsICIuLlxcZXhlY3V0ZVxcZXhlY3V0ZS1pZC1nZW5lcmF0b3IudHMiLCAiLi5cXHdvcmxkXFxpbmRleC50cyIsICIuLlxcY29tbWFuZFxcaW5kZXgudHMiLCAiLi5cXGFjdGlvblxcaW5kZXgudHMiLCAiLi5cXHN0cmVhbVxcaW5kZXgudHMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGNvbnN0YW50cy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcY29uc3RydWN0RnJvbS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcdG9EYXRlLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxfbGliXFxkZWZhdWx0T3B0aW9ucy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcc3RhcnRPZldlZWsuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXHN0YXJ0T2ZJU09XZWVrLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxnZXRJU09XZWVrWWVhci5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcX2xpYlxcZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcX2xpYlxcbm9ybWFsaXplRGF0ZXMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXHN0YXJ0T2ZEYXkuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcc3RhcnRPZklTT1dlZWtZZWFyLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxpc0RhdGUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGlzVmFsaWQuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXHN0YXJ0T2ZZZWFyLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxsb2NhbGVcXGVuLVVTXFxfbGliXFxmb3JtYXREaXN0YW5jZS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxfbGliXFxidWlsZEZvcm1hdExvbmdGbi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxlbi1VU1xcX2xpYlxcZm9ybWF0TG9uZy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxlbi1VU1xcX2xpYlxcZm9ybWF0UmVsYXRpdmUuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGxvY2FsZVxcX2xpYlxcYnVpbGRMb2NhbGl6ZUZuLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxsb2NhbGVcXGVuLVVTXFxfbGliXFxsb2NhbGl6ZS5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxfbGliXFxidWlsZE1hdGNoRm4uanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGxvY2FsZVxcX2xpYlxcYnVpbGRNYXRjaFBhdHRlcm5Gbi5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxlbi1VU1xcX2xpYlxcbWF0Y2guanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGxvY2FsZVxcZW4tVVMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGdldERheU9mWWVhci5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcZ2V0SVNPV2Vlay5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcZ2V0V2Vla1llYXIuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXHN0YXJ0T2ZXZWVrWWVhci5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcZ2V0V2Vlay5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcX2xpYlxcYWRkTGVhZGluZ1plcm9zLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxfbGliXFxmb3JtYXRcXGxpZ2h0Rm9ybWF0dGVycy5qcyIsICIuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcX2xpYlxcZm9ybWF0XFxmb3JtYXR0ZXJzLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxfbGliXFxmb3JtYXRcXGxvbmdGb3JtYXR0ZXJzLmpzIiwgIi4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxfbGliXFxwcm90ZWN0ZWRUb2tlbnMuanMiLCAiLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGZvcm1hdC5qcyIsICIuLlxcdXRpbHNcXHNlbmQtY29va2Jvb2stZXZlbnQudHMiLCAiLi5cXGxvZ2dlclxcaW5kZXgudHMiLCAiLi5cXHN0ZXBcXGluZGV4LnRzIiwgIi4uXFx1dGlsc1xcdHJpZS50cyIsICIuLlxcbGlzdGVuZXJcXGluZGV4LnRzIiwgIi4uXFxleGNlcHRpb25cXGluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImV4cG9ydCBmdW5jdGlvbiBwYXJ0PFQgZXh0ZW5kcyAoKSA9PiB1bmtub3duPihoYW5kbGVyOiBUKTogUmV0dXJuVHlwZTxUPiB7XHJcbiAgcmV0dXJuIGhhbmRsZXIoKSBhcyB1bmtub3duIGFzIFJldHVyblR5cGU8VD47XHJcbn1cclxuIiwKICAgICJleHBvcnQgdHlwZSBUeXBlU2FmZXR5PFZhbHVlIGV4dGVuZHMgUmVjb3JkPGFueSwgYW55Pj4gPSAodmFsdWU6IFZhbHVlKSA9PiBUeXBlU2FmZXR5VmFsdWU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVNhZmV0eVZhbHVlIHtcbiAgdHlwZTogPFR5cGUgZXh0ZW5kcyBSZWNvcmQ8YW55LCBhbnk+PigpID0+IFR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVNhZmV0eVR5cGU8VHlwZSBleHRlbmRzIFJlY29yZDxhbnksIGFueT4+IHtcbiAgJG1pbGtpb1R5cGU6IFwidHlwZS1zYWZldHlcIjtcbiAgdmFsdWU6IFR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlU2FmZXR5PFZhbHVlIGV4dGVuZHMgUmVjb3JkPGFueSwgYW55Pj4odmFsdWU6IFZhbHVlKTogVHlwZVNhZmV0eVZhbHVlIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAoKSA9PiAoeyAkbWlsa2lvVHlwZTogXCJ0eXBlLXNhZmV0eVwiLCB2YWx1ZSB9KSxcbiAgfSBhcyBhbnk7XG59XG4iLAogICAgImNvbnN0IGMgPSB7XG4gIHJ1bGVzOiB7XG4gICAgc3RyaW5naWZ5OiBbXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiAodCkgPT4gdHlwZW9mIHQgPT0gXCJiaWdpbnRcIixcbiAgICAgICAgaGFuZGxlcjogKHQpID0+IGB0IWJpZ2ludDoke3QudG9TdHJpbmcoKX1gXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtYXRjaDogKHQpID0+IHQgaW5zdGFuY2VvZiBEYXRlLFxuICAgICAgICBoYW5kbGVyOiAodCkgPT4gYHQhRGF0ZToke3QudG9JU09TdHJpbmcoKX1gXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtYXRjaDogKHQpID0+IHQgaW5zdGFuY2VvZiBVUkwsXG4gICAgICAgIGhhbmRsZXI6ICh0KSA9PiBgdCFVUkw6JHt0LnRvU3RyaW5nKCl9YFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6ICh0KSA9PiB0IGluc3RhbmNlb2YgUmVnRXhwLFxuICAgICAgICBoYW5kbGVyOiAodCkgPT4gYHQhUmVnRXhwOiR7dC50b1N0cmluZygpfWBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiAodCkgPT4gdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksXG4gICAgICAgIGhhbmRsZXI6ICh0KSA9PiBgdCFVaW50OEFycmF5OiR7bmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHQpfWBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiAodCkgPT4gdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyLFxuICAgICAgICBoYW5kbGVyOiAodCkgPT4gYHQhQXJyYXlCdWZmZXI6JHtuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUodCl9YFxuICAgICAgfVxuICAgIF0sXG4gICAgcGFyc2U6IFtcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6ICh0KSA9PiB0LnN0YXJ0c1dpdGgoXCJ0IWJpZ2ludDpcIiksXG4gICAgICAgIGhhbmRsZXI6ICh0KSA9PiBCaWdJbnQodC5zbGljZSg5KSlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiAodCkgPT4gdC5zdGFydHNXaXRoKFwidCFEYXRlOlwiKSxcbiAgICAgICAgaGFuZGxlcjogKHQpID0+IG5ldyBEYXRlKHQuc2xpY2UoNykpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtYXRjaDogKHQpID0+IHQuc3RhcnRzV2l0aChcInQhVVJMOlwiKSxcbiAgICAgICAgaGFuZGxlcjogKHQpID0+IG5ldyBVUkwodC5zbGljZSg2KSlcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1hdGNoOiAodCkgPT4gdC5zdGFydHNXaXRoKFwidCFSZWdFeHA6XCIpLFxuICAgICAgICBoYW5kbGVyOiAodCkgPT4gbmV3IFJlZ0V4cCh0LnNsaWNlKDkpKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6ICh0KSA9PiB0LnN0YXJ0c1dpdGgoXCJ0IVVpbnQ4QXJyYXk6XCIpLFxuICAgICAgICBoYW5kbGVyOiAodCkgPT4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQuc2xpY2UoMTMpKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWF0Y2g6ICh0KSA9PiB0LnN0YXJ0c1dpdGgoXCJ0IUFycmF5QnVmZmVyOlwiKSxcbiAgICAgICAgaGFuZGxlcjogKHQpID0+IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0LnNsaWNlKDE0KSkuYnVmZmVyXG4gICAgICB9XG4gICAgXVxuICB9LFxuICBzdHJpbmdpZnkodCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShjLmVuY29kZSh0KSk7XG4gIH0sXG4gIHBhcnNlKHQpIHtcbiAgICByZXR1cm4gYy5kZWNvZGUoSlNPTi5wYXJzZSh0KSk7XG4gIH0sXG4gIGVuY29kZSh0KSB7XG4gICAgZnVuY3Rpb24gbihlKSB7XG4gICAgICBpZiAoIWUgfHwgdHlwZW9mIGUgIT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgZSAhPSBcImJpZ2ludFwiKVxuICAgICAgICByZXR1cm4gZTtcbiAgICAgIGlmIChlKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICAgICAgY29uc3QgcyA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHNbaV0gPSBuKGVbaV0pO1xuICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2VcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgYy5ydWxlcy5zdHJpbmdpZnkpXG4gICAgICAgIGlmIChzLm1hdGNoKGUpKVxuICAgICAgICAgIHJldHVybiBzLmhhbmRsZXIoZSk7XG4gICAgICBjb25zdCByID0ge307XG4gICAgICBmb3IgKHZhciBhIGluIGUpXG4gICAgICAgIHJbYV0gPSBuKGVbYV0pO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuICAgIHJldHVybiBuKHQpO1xuICB9LFxuICBkZWNvZGUodCkge1xuICAgIGZ1bmN0aW9uIG4oZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpXG4gICAgICAgIHJldHVybiBlLm1hcChuKTtcbiAgICAgIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiICYmIGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgciA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGEgaW4gZSlcbiAgICAgICAgICBlLmhhc093blByb3BlcnR5KGEpICYmIChyW2FdID0gbihlW2FdKSk7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGZvciAoY29uc3QgciBvZiBjLnJ1bGVzLnBhcnNlKVxuICAgICAgICAgIGlmIChyLm1hdGNoKGUpID09PSAhMClcbiAgICAgICAgICAgIHJldHVybiByLmhhbmRsZXIoZSk7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGU7XG4gICAgfVxuICAgIHJldHVybiBuKHQpO1xuICB9XG59O1xuZXhwb3J0IHtcbiAgYyBhcyBUU09OXG59O1xuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gY29uZmlnPENvbmZpZ1QgZXh0ZW5kcyBDb25maWc+KGNvbmZpZzogQ29uZmlnVCk6IENvbmZpZ1Qge1xuICByZXR1cm4gY29uZmlnO1xufVxuXG5leHBvcnQgdHlwZSBDb25maWcgPSAobW9kZTogc3RyaW5nKSA9PiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ0Vudmlyb25tZW50czxUIGV4dGVuZHMgQ29uZmlnPiB7XG4gIFtrZXk6IHN0cmluZ106IChlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+IFBhcnRpYWw8QXdhaXRlZDxSZXR1cm5UeXBlPFQ+Pj4gfCBQcm9taXNlPFBhcnRpYWw8QXdhaXRlZDxSZXR1cm5UeXBlPFQ+Pj4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW52VG9TdHJpbmcodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlOiBzdHJpbmcpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWU7XG5cbiAgcmV0dXJuIGAke3ZhbHVlfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnZUb051bWJlcih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWU6IG51bWJlcikge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblxuICByZXR1cm4gTnVtYmVyLnBhcnNlSW50KHZhbHVlLCAxMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnZUb0Jvb2xlYW4odmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlOiBib29sZWFuKSB7XG4gIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHJldHVybiB0cnVlO1xuXG4gIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHZhbHVlID09PSBcIlwiKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHVuZGVmaW5lZCA9PT0gdmFsdWUpIHJldHVybiBkZWZhdWx0VmFsdWU7XG5cbiAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gaGVhZGVyc1RvSlNPTihoZWFkZXJzOiBIZWFkZXJzKSB7XG4gIGNvbnN0IGpzb246IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgKGhlYWRlcnMgYXMgYW55KS5lbnRyaWVzKCkpIHtcbiAgICBqc29uW2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4ganNvbjtcbn1cbiIsCiAgICAiZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogYW55KTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURlZXA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sIFUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+Pih0YXJnZXQ6IFQsIHNvdXJjZTogVSk6IFQge1xyXG4gIGNvbnN0IG1lcmdlZCA9IHsgLi4udGFyZ2V0IH07XHJcblxyXG4gIGZvciAoY29uc3Qga2V5IGluIHNvdXJjZSkge1xyXG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTtcclxuXHJcbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IHNvdXJjZVtrZXldO1xyXG4gICAgY29uc3QgdGFyZ2V0VmFsdWUgPSB0YXJnZXRba2V5IGFzIGtleW9mIFRdO1xyXG5cclxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpKSB7XHJcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KHRhcmdldFZhbHVlKSAmJiBpc1BsYWluT2JqZWN0KHNvdXJjZVZhbHVlKSkge1xyXG4gICAgICAgIG1lcmdlZFtrZXkgYXMga2V5b2YgVCAmIGtleW9mIFVdID0gbWVyZ2VEZWVwKHRhcmdldFZhbHVlLCBzb3VyY2VWYWx1ZSkgYXMgYW55O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAobWVyZ2VkIGFzIGFueSlba2V5XSA9IHNvdXJjZVZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1lcmdlZCBhcyBUICYgVTtcclxufVxyXG4iLAogICAgImltcG9ydCB0eXBlIHsgSVZhbGlkYXRpb24gfSBmcm9tIFwidHlwaWFcIjtcbmltcG9ydCB7IFRTT04gfSBmcm9tIFwiQHNvdXRoZXJuLWF1cm9yYS90c29uXCI7XG5pbXBvcnQgeyByZWplY3QgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcbmltcG9ydCB0eXBlIHsgJGNvbnRleHQsICRtZXRhLCBMb2dnZXIsIFJlc3VsdHMsIEdlbmVyYXRlZEluaXQgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcbmltcG9ydCB7IGhlYWRlcnNUb0pTT04gfSBmcm9tIFwiLi4vdXRpbHMvaGVhZGVycy10by1qc29uLnRzXCI7XG5pbXBvcnQgeyBtZXJnZURlZXAgfSBmcm9tIFwiLi4vdXRpbHMvbWVyZ2UtZGVlcC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbml0RXhlY3V0ZXIoZ2VuZXJhdGVkOiBHZW5lcmF0ZWRJbml0LCBydW50aW1lOiBhbnkpIHtcbiAgY29uc3QgX19leGVjdXRlID0gYXN5bmMgKFxuICAgIHJvdXRlU2NoZW1hOiBhbnksXG4gICAgb3B0aW9uczoge1xuICAgICAgY3JlYXRlZEV4ZWN1dGVJZDogc3RyaW5nO1xuICAgICAgY3JlYXRlZExvZ2dlcjogTG9nZ2VyO1xuICAgICAgcGF0aDogc3RyaW5nO1xuICAgICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IEhlYWRlcnM7XG4gICAgICBtaXhpbkNvbnRleHQ6IFJlY29yZDxhbnksIGFueT4gfCB1bmRlZmluZWQ7XG4gICAgfSAmIChcbiAgICAgIHwge1xuICAgICAgICAgIHBhcmFtczogUmVjb3JkPGFueSwgYW55PjtcbiAgICAgICAgICBwYXJhbXNUeXBlOiBcInJhd1wiO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICBwYXJhbXM6IHN0cmluZztcbiAgICAgICAgICBwYXJhbXNUeXBlOiBcInN0cmluZ1wiO1xuICAgICAgICB9XG4gICAgKSxcbiAgKTogUHJvbWlzZTx7IGV4ZWN1dGVJZDogc3RyaW5nOyBoZWFkZXJzOiBIZWFkZXJzOyBwYXJhbXM6IFJlY29yZDxhbnksIHVua25vd24+OyByZXN1bHRzOiBSZXN1bHRzPGFueT47IGNvbnRleHQ6ICRjb250ZXh0OyBtZXRhOiBSZWFkb25seTwkbWV0YT47IHR5cGU6IFwiYWN0aW9uXCIgfCBcInN0cmVhbVwiOyBlbXB0eVJlc3VsdDogYm9vbGVhbjsgcmVzdWx0c1R5cGVTYWZldHk6IGJvb2xlYW47IGZpbmFsZXM6IEFycmF5PCgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+PiB9PiA9PiB7XG4gICAgY29uc3QgZXhlY3V0ZUlkOiBzdHJpbmcgPSBvcHRpb25zLmNyZWF0ZWRFeGVjdXRlSWQ7XG4gICAgbGV0IGhlYWRlcnM6IEhlYWRlcnM7XG4gICAgaWYgKCEob3B0aW9ucy5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7XG4gICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuICAgIH1cbiAgICBpZiAoIShcInRvSlNPTlwiIGluIGhlYWRlcnMpKSAoaGVhZGVycyBhcyBhbnkpLnRvSlNPTiA9ICgpID0+IGhlYWRlcnNUb0pTT04oaGVhZGVycyk7XG5cbiAgICBjb25zdCBmaW5hbGVzOiBBcnJheTxhbnk+ID0gW107XG4gICAgY29uc3Qgb25GaW5hbGx5ID0gKGhhbmRsZXI6IGFueSkgPT4gZmluYWxlcy51bnNoaWZ0KGhhbmRsZXIpO1xuXG4gICAgbGV0IHBhcmFtczogUmVjb3JkPGFueSwgdW5rbm93bj47XG4gICAgaWYgKG9wdGlvbnMucGFyYW1zVHlwZSA9PT0gXCJyYXdcIikge1xuICAgICAgcGFyYW1zID0gb3B0aW9ucy5wYXJhbXM7XG4gICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gXCJ1bmRlZmluZWRcIikgcGFyYW1zID0ge307XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvcHRpb25zLnBhcmFtcyA9PT0gXCJcIikge1xuICAgICAgICBwYXJhbXMgPSB7fTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcGFyYW1zID0gVFNPTi5wYXJzZShvcHRpb25zLnBhcmFtcyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgcmVqZWN0KFwiUEFSQU1TX1RZUEVfTk9UX1NVUFBPUlRFRFwiLCB7IGV4cGVjdGVkOiBcImpzb25cIiB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gXCJ1bmRlZmluZWRcIikgcGFyYW1zID0ge307XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYW1zICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocGFyYW1zKSkgdGhyb3cgcmVqZWN0KFwiUEFSQU1TX1RZUEVfTk9UX1NVUFBPUlRFRFwiLCB7IGV4cGVjdGVkOiBcImpzb25cIiB9KTtcbiAgICBpZiAoXCIkbWlsa2lvR2VuZXJhdGVQYXJhbXNcIiBpbiBwYXJhbXMgJiYgcGFyYW1zLiRtaWxraW9HZW5lcmF0ZVBhcmFtcyA9PT0gXCJlbmFibGVcIikge1xuICAgICAgaWYgKCFydW50aW1lLmRldmVsb3ApIHRocm93IHJlamVjdChcIk5PVF9ERVZFTE9QX01PREVcIiwgXCJUaGlzIGZlYXR1cmUgbXVzdCBiZSBpbiBjb29rYm9vayB0byB1c2UuXCIpO1xuICAgICAgZGVsZXRlIHBhcmFtcy4kbWlsa2lvR2VuZXJhdGVQYXJhbXM7XG4gICAgICBsZXQgcGFyYW1zUmFuZCA9IHJvdXRlU2NoZW1hLnJhbmRvbVBhcmFtcygpO1xuICAgICAgaWYgKHBhcmFtc1JhbmQgPT09IHVuZGVmaW5lZCB8fCBwYXJhbXNSYW5kID09PSBudWxsKSBwYXJhbXNSYW5kID0ge307XG4gICAgICBwYXJhbXMgPSBtZXJnZURlZXAocGFyYW1zLCBwYXJhbXNSYW5kKTtcbiAgICAgIG9wdGlvbnMuY3JlYXRlZExvZ2dlci5kZWJ1ZyhcIuKcqCB0aGUgZ2VuZXJhdGVkIHBhcmFtczpcIiwgSlNPTi5zdHJpbmdpZnkocGFyYW1zKSk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5taXhpbkNvbnRleHQ/Lmh0dHA/Lm5vdEZvdW5kICYmIG9wdGlvbnMubWl4aW5Db250ZXh0Py5odHRwPy5wYXJhbXM/LnN0cmluZykgb3B0aW9ucy5taXhpbkNvbnRleHQuaHR0cC5wYXJhbXMucGFyc2VkID0gcGFyYW1zOyAvLyBsaXN0ZW4g44Gn44OR44O844K544GX44Gf44OR44Op44Oh44O844K/44KS5rih44GZXG4gICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgIC4uLihvcHRpb25zLm1peGluQ29udGV4dCA/IG9wdGlvbnMubWl4aW5Db250ZXh0IDoge30pLFxuICAgICAgZGV2ZWxvcDogcnVudGltZS5kZXZlbG9wLFxuICAgICAgcGF0aDogb3B0aW9ucy5wYXRoLFxuICAgICAgbG9nZ2VyOiBvcHRpb25zLmNyZWF0ZWRMb2dnZXIsXG4gICAgICBlbWl0OiBydW50aW1lLmVtaXQsXG4gICAgICBleGVjdXRlSWQ6IG9wdGlvbnMuY3JlYXRlZEV4ZWN1dGVJZCxcbiAgICAgIGNvbmZpZzogcnVudGltZS5ydW50aW1lLmNvbmZpZyxcbiAgICAgIGNhbGw6IChtb2R1bGU6IGFueSwgb3B0aW9uczogYW55KSA9PiBfX2NhbGwoY29udGV4dCwgbW9kdWxlLCBvcHRpb25zKSxcbiAgICAgIG9uRmluYWxseTogb25GaW5hbGx5LFxuICAgICAgXzogcnVudGltZSxcbiAgICB9IGFzIHVua25vd24gYXMgJGNvbnRleHQ7XG4gICAgY29uc3QgcmVzdWx0czogUmVzdWx0czxhbnk+ID0geyB2YWx1ZTogdW5kZWZpbmVkIH07XG5cbiAgICBjb25zdCBtb2R1bGUgPSByb3V0ZVNjaGVtYS5tb2R1bGU7XG4gICAgY29uc3QgbWV0YSA9IChtb2R1bGUuZGVmYXVsdD8ubWV0YSA/IG1vZHVsZS5kZWZhdWx0Py5tZXRhIDoge30pIGFzIHVua25vd24gYXMgUmVhZG9ubHk8JG1ldGE+O1xuXG4gICAgaWYgKG1ldGEudHlwZVNhZmV0eSA9PT0gdW5kZWZpbmVkIHx8IG1ldGEudHlwZVNhZmV0eSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHJvdXRlU2NoZW1hLnZhbGlkYXRlUGFyYW1zKHBhcmFtcykgYXMgSVZhbGlkYXRpb248YW55PjtcbiAgICAgIGlmICghdmFsaWRhdGlvbi5zdWNjZXNzKSB0aHJvdyByZWplY3QoXCJQQVJBTVNfVFlQRV9JTkNPUlJFQ1RcIiwgeyAuLi52YWxpZGF0aW9uLmVycm9yc1swXSwgbWVzc2FnZTogYFRoZSB2YWx1ZSAnJHt2YWxpZGF0aW9uLmVycm9yc1swXS5wYXRofScgaXMgJyR7dmFsaWRhdGlvbi5lcnJvcnNbMF0udmFsdWV9Jywgd2hpY2ggZG9lcyBub3QgbWVldCAnJHt2YWxpZGF0aW9uLmVycm9yc1swXS5leHBlY3RlZH0nIHJlcXVpcmVtZW50cy5gIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHJ1bnRpbWUuZW1pdChcIm1pbGtpbzpleGVjdXRlQmVmb3JlXCIsIHsgZXhlY3V0ZUlkOiBvcHRpb25zLmNyZWF0ZWRFeGVjdXRlSWQsIGxvZ2dlcjogb3B0aW9ucy5jcmVhdGVkTG9nZ2VyLCBwYXRoOiBvcHRpb25zLnBhdGgsIG1ldGEsIGNvbnRleHQgfSk7XG5cbiAgICByZXN1bHRzLnZhbHVlID0gYXdhaXQgbW9kdWxlLmRlZmF1bHQuaGFuZGxlcihjb250ZXh0LCBwYXJhbXMpO1xuXG4gICAgbGV0IHJlc3VsdHNUeXBlU2FmZXR5ID0gZmFsc2U7XG4gICAgaWYgKHJlc3VsdHM/LnZhbHVlPy4kbWlsa2lvVHlwZSA9PT0gXCJ0eXBlLXNhZmV0eVwiKSB7XG4gICAgICByZXN1bHRzVHlwZVNhZmV0eSA9IHRydWU7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uID0gcm91dGVTY2hlbWEudmFsaWRhdGVSZXN1bHRzKHJlc3VsdHMudmFsdWUudmFsdWUpIGFzIElWYWxpZGF0aW9uPGFueT47XG4gICAgICBpZiAoIXZhbGlkYXRpb24uc3VjY2VzcykgdGhyb3cgcmVqZWN0KFwiUkVTVUxUU19UWVBFX0lOQ09SUkVDVFwiLCB7IC4uLnZhbGlkYXRpb24uZXJyb3JzWzBdLCBtZXNzYWdlOiBgVGhlIHZhbHVlICcke3ZhbGlkYXRpb24uZXJyb3JzWzBdLnBhdGh9JyBpcyAnJHt2YWxpZGF0aW9uLmVycm9yc1swXS52YWx1ZX0nLCB3aGljaCBkb2VzIG5vdCBtZWV0ICcke3ZhbGlkYXRpb24uZXJyb3JzWzBdLmV4cGVjdGVkfScgcmVxdWlyZW1lbnRzLmAgfSk7XG4gICAgICByZXN1bHRzLnZhbHVlID0gcmVzdWx0cy52YWx1ZS52YWx1ZTtcbiAgICB9XG5cbiAgICBsZXQgZW1wdHlSZXN1bHQgPSBmYWxzZTtcbiAgICBpZiAocmVzdWx0cy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHJlc3VsdHMudmFsdWUgPT09IG51bGwgfHwgcmVzdWx0cy52YWx1ZSA9PT0gXCJcIikge1xuICAgICAgZW1wdHlSZXN1bHQgPSB0cnVlO1xuICAgICAgcmVzdWx0cy52YWx1ZSA9IHt9O1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRzLnZhbHVlKSkge1xuICAgICAgdGhyb3cgcmVqZWN0KFwiRkFJTFwiLCBcIlRoZSByZXR1cm4gdHlwZSBvZiB0aGUgaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCwgd2hpY2ggaXMgY3VycmVudGx5IGFuIGFycmF5LlwiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXN1bHRzLnZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyByZWplY3QoXCJGQUlMXCIsIFwiVGhlIHJldHVybiB0eXBlIG9mIHRoZSBoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0LCB3aGljaCBpcyBjdXJyZW50bHkgYSBwcmltaXRpdmUgdHlwZS5cIik7XG4gICAgfVxuXG4gICAgYXdhaXQgcnVudGltZS5lbWl0KFwibWlsa2lvOmV4ZWN1dGVBZnRlclwiLCB7IGV4ZWN1dGVJZDogb3B0aW9ucy5jcmVhdGVkRXhlY3V0ZUlkLCBsb2dnZXI6IG9wdGlvbnMuY3JlYXRlZExvZ2dlciwgcGF0aDogb3B0aW9ucy5wYXRoLCBtZXRhLCBjb250ZXh0LCByZXN1bHRzIH0pO1xuXG4gICAgcmV0dXJuIHsgZXhlY3V0ZUlkLCBoZWFkZXJzLCBwYXJhbXMsIHJlc3VsdHMsIGNvbnRleHQsIG1ldGEsIHR5cGU6IG1vZHVsZS4kbWlsa2lvVHlwZSwgZW1wdHlSZXN1bHQsIHJlc3VsdHNUeXBlU2FmZXR5LCBmaW5hbGVzIH07XG4gIH07XG5cbiAgY29uc3QgX19jYWxsID0gYXN5bmMgKGNvbnRleHQ6ICRjb250ZXh0LCBtb2R1bGU6IHsgZGVmYXVsdDogYW55IH0sIHBhcmFtcz86IGFueSk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgY29uc3QgbW9kdWxlQXdhaXRlZCA9IGF3YWl0IG1vZHVsZTtcbiAgICByZXR1cm4gYXdhaXQgbW9kdWxlQXdhaXRlZC5kZWZhdWx0LmhhbmRsZXIoY29udGV4dCwgcGFyYW1zKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIF9fY2FsbCxcbiAgICBfX2V4ZWN1dGUsXG4gIH07XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgTWlsa2lvV29ybGQgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBib290c3RyYXA8Qm9vdHN0cmFwSW5pdFQgZXh0ZW5kcyBCb290c3RyYXBJbml0Pihpbml0OiBCb290c3RyYXBJbml0VCk6IEJvb3RzdHJhcEluaXRUIHtcclxuICByZXR1cm4gaW5pdDtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQm9vdHN0cmFwSW5pdCA9ICh3b3JsZDogTWlsa2lvV29ybGQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xyXG4iLAogICAgImltcG9ydCB0eXBlIHsgJGNvbnRleHQsIENvbnRleHRIdHRwLCBSZXN1bHRzLCBMb2dnZXIsICRtZXRhIH0gZnJvbSBcIi4uL2luZGV4LnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgJGV2ZW50cyB7XG4gIFwibWlsa2lvOmh0dHBSZXF1ZXN0XCI6IHsgZXhlY3V0ZUlkOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgbG9nZ2VyOiBMb2dnZXI7IGh0dHA6IENvbnRleHRIdHRwPFJlY29yZDxzdHJpbmcsIGFueT4+IH07XG4gIFwibWlsa2lvOmh0dHBSZXNwb25zZVwiOiB7IGV4ZWN1dGVJZDogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGxvZ2dlcjogTG9nZ2VyOyBodHRwOiBDb250ZXh0SHR0cDxSZWNvcmQ8c3RyaW5nLCBhbnk+PjsgY29udGV4dDogJGNvbnRleHQgfTtcbiAgXCJtaWxraW86aHR0cE5vdEZvdW5kXCI6IHsgZXhlY3V0ZUlkOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgbG9nZ2VyOiBMb2dnZXI7IGh0dHA6IENvbnRleHRIdHRwPFJlY29yZDxzdHJpbmcsIGFueT4+IH07XG4gIFwibWlsa2lvOmV4ZWN1dGVCZWZvcmVcIjogeyBleGVjdXRlSWQ6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBsb2dnZXI6IExvZ2dlcjsgbWV0YTogJG1ldGE7IGNvbnRleHQ6ICRjb250ZXh0IH07XG4gIFwibWlsa2lvOmV4ZWN1dGVBZnRlclwiOiB7IGV4ZWN1dGVJZDogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGxvZ2dlcjogTG9nZ2VyOyBtZXRhOiAkbWV0YTsgY29udGV4dDogJGNvbnRleHQ7IHJlc3VsdHM6IFJlc3VsdHM8YW55PiB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbml0RXZlbnRNYW5hZ2VyKCkge1xuICBjb25zdCBoYW5kbGVycyA9IG5ldyBNYXA8KGV2ZW50OiBhbnkpID0+IHZvaWQsIHN0cmluZz4oKTtcbiAgY29uc3QgaW5kZXhlZCA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8KGV2ZW50OiBhbnkpID0+IHZvaWQ+PigpO1xuXG4gIGNvbnN0IGV2ZW50TWFuYWdlciA9IHtcbiAgICBvbjogPEtleSBleHRlbmRzIGtleW9mICRldmVudHMsIEhhbmRsZXIgZXh0ZW5kcyAoZXZlbnQ6ICRldmVudHNbS2V5XSkgPT4gdm9pZD4oa2V5OiBLZXksIGhhbmRsZXI6IEhhbmRsZXIpID0+IHtcbiAgICAgIGhhbmRsZXJzLnNldChoYW5kbGVyLCBrZXkgYXMgc3RyaW5nKTtcbiAgICAgIGlmIChpbmRleGVkLmhhcyhrZXkgYXMgc3RyaW5nKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgaW5kZXhlZC5zZXQoa2V5IGFzIHN0cmluZywgbmV3IFNldCgpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNldCA9IGluZGV4ZWQuZ2V0KGtleSBhcyBzdHJpbmcpITtcbiAgICAgIHNldC5hZGQoaGFuZGxlcik7XG4gICAgICBoYW5kbGVycy5zZXQoaGFuZGxlciwga2V5IGFzIHN0cmluZyk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGhhbmRsZXJzLmRlbGV0ZShoYW5kbGVyKTtcbiAgICAgICAgc2V0LmRlbGV0ZShoYW5kbGVyKTtcbiAgICAgIH07XG4gICAgfSxcbiAgICBvZmY6IDxLZXkgZXh0ZW5kcyBrZXlvZiAkZXZlbnRzLCBIYW5kbGVyIGV4dGVuZHMgKGV2ZW50OiAkZXZlbnRzW0tleV0pID0+IHZvaWQ+KGtleTogS2V5LCBoYW5kbGVyOiBIYW5kbGVyKSA9PiB7XG4gICAgICBjb25zdCBzZXQgPSBpbmRleGVkLmdldChrZXkgYXMgc3RyaW5nKTtcbiAgICAgIGlmICghc2V0KSByZXR1cm47XG4gICAgICBoYW5kbGVycy5kZWxldGUoaGFuZGxlcik7XG4gICAgICBzZXQuZGVsZXRlKGhhbmRsZXIpO1xuICAgIH0sXG4gICAgZW1pdDogYXN5bmMgPEtleSBleHRlbmRzIGtleW9mICRldmVudHMsIFZhbHVlIGV4dGVuZHMgJGV2ZW50c1tLZXldPihrZXk6IEtleSwgdmFsdWU6IFZhbHVlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBoID0gaW5kZXhlZC5nZXQoa2V5IGFzIHN0cmluZyk7XG4gICAgICBpZiAoaCkge1xuICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaCkge1xuICAgICAgICAgIGF3YWl0IGhhbmRsZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gZXZlbnRNYW5hZ2VyO1xufVxuIiwKICAgICJleHBvcnQgdHlwZSBNaWxraW9GbG93PFQsIFRSZXR1cm4gPSBhbnksIFROZXh0ID0gYW55PiA9IHtcclxuICBlbWl0OiAoZmxvdzogVCkgPT4gdm9pZDtcclxuICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOiAoKSA9PiBNaWxraW9GbG93PFQ+O1xyXG4gIG5leHQoLi4uW3ZhbHVlXTogW10gfCBbVE5leHRdKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxULCBUUmV0dXJuPj47XHJcbiAgcmV0dXJuKCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VCwgVFJldHVybj4+O1xyXG4gIHRocm93KGVycm9yOiBhbnkpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PFQsIFRSZXR1cm4+PjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGbG93PFQ+KCk6IE1pbGtpb0Zsb3c8VD4ge1xyXG4gIGxldCBzdGF0dXM6IFwicGVuZGluZ1wiIHwgXCJyZXNvbHZlZFwiIHwgXCJyZWplY3RlZFwiID0gXCJwZW5kaW5nXCI7XHJcbiAgY29uc3QgZmxvd3M6IEFycmF5PHtcclxuICAgIGJsYW5rOiBib29sZWFuO1xyXG4gICAgcHJvbWlzZTogUHJvbWlzZTxUPjtcclxuICAgIHJlc29sdmU6ICh2YWx1ZT86IFQgfCBQcm9taXNlTGlrZTxUPikgPT4gdm9pZDtcclxuICAgIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcclxuICB9PiA9IFtdO1xyXG5cclxuICBjb25zdCBpdGVyYXRvciA9IHtcclxuICAgIGVtaXQ6IChmbG93OiBUKSA9PiB7XHJcbiAgICAgIGlmIChmbG93cy5hdCgtMSk/LmJsYW5rID09PSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IGZsb3dzLmF0KC0xKSE7XHJcbiAgICAgICAgaXRlbS5ibGFuayA9IGZhbHNlO1xyXG4gICAgICAgIGl0ZW0ucmVzb2x2ZShmbG93KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcmVzb2x2ZXJzID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzPFQ+KCk7XHJcbiAgICAgICAgcmVzb2x2ZXJzLnJlc29sdmUoZmxvdyk7XHJcbiAgICAgICAgZmxvd3MucHVzaCh7IC4uLnJlc29sdmVycywgYmxhbms6IGZhbHNlIH0gYXMgYW55KTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIC4uLih7XHJcbiAgICAgIGFzeW5jIG5leHQoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxUPj4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMgIT09IFwicGVuZGluZ1wiKSByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbnVsbCB9O1xyXG4gICAgICAgIGlmIChmbG93cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGNvbnN0IHJlc29sdmVycyA9IFByb21pc2Uud2l0aFJlc29sdmVyczxUPigpO1xyXG4gICAgICAgICAgZmxvd3MucHVzaCh7IC4uLnJlc29sdmVycywgYmxhbms6IHRydWUgfSBhcyBhbnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmbG93ID0gZmxvd3MuYXQoMCkhO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZsb3cucHJvbWlzZTtcclxuICAgICAgICBmbG93cy5zaGlmdCgpO1xyXG4gICAgICAgIHJldHVybiB7IGRvbmU6IHN0YXR1cyAhPT0gXCJwZW5kaW5nXCIsIHZhbHVlOiByZXN1bHQgfTtcclxuICAgICAgfSxcclxuICAgICAgYXN5bmMgcmV0dXJuKCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcclxuICAgICAgICBzdGF0dXMgPSBcInJlc29sdmVkXCI7XHJcbiAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XHJcbiAgICAgICAgICBmbG93LmJsYW5rID0gZmFsc2U7XHJcbiAgICAgICAgICBmbG93LnJlc29sdmUodW5kZWZpbmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG51bGwgfTtcclxuICAgICAgfSxcclxuICAgICAgYXN5bmMgdGhyb3coZXJyOiBhbnkpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PHZvaWQ+PiB7XHJcbiAgICAgICAgc3RhdHVzID0gXCJyZWplY3RlZFwiO1xyXG4gICAgICAgIGlmIChmbG93cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGNvbnN0IHJlc29sdmVycyA9IFByb21pc2Uud2l0aFJlc29sdmVyczxUPigpO1xyXG4gICAgICAgICAgZmxvd3MucHVzaCh7IC4uLnJlc29sdmVycywgYmxhbms6IHRydWUgfSBhcyBhbnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcclxuICAgICAgICAgIGZsb3cuYmxhbmsgPSBmYWxzZTtcclxuICAgICAgICAgIGZsb3cucmVqZWN0KGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBudWxsIH07XHJcbiAgICAgIH0sXHJcbiAgICB9IHNhdGlzZmllcyBBc3luY0l0ZXJhdG9yPHVua25vd24+KSxcclxuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICByZXR1cm4gaXRlcmF0b3IgYXMgTWlsa2lvRmxvdzxUPjtcclxufVxyXG4iLAogICAgImltcG9ydCB0eXBlIHsgTWlsa2lvV29ybGQgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVyPEhhbmRsZXJJbml0VCBleHRlbmRzIEhhbmRsZXJJbml0Pihpbml0OiBIYW5kbGVySW5pdFQpOiBIYW5kbGVySW5pdFQge1xyXG4gIHJldHVybiBpbml0O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBIYW5kbGVySW5pdCA9ICh3b3JsZDogTWlsa2lvV29ybGQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xyXG4iLAogICAgInR5cGUgSWRHZW5lcmF0b3JPcHRpb25zID0ge1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIHRpbWVzdGFtcDogYm9vbGVhbjtcbiAgc2VxdWVudGlhbDogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGRlZmluZUlkR2VuZXJhdG9yKG9wdGlvbnM6IElkR2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMubGVuZ3RoKSBvcHRpb25zLmxlbmd0aCA9IDI0O1xuICBpZiAob3B0aW9ucy5sZW5ndGggPCAxKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxlbmd0aFwiKTtcbiAgaWYgKG9wdGlvbnMubGVuZ3RoID4gNjEpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGVuZ3RoXCIpO1xuICBpZiAob3B0aW9ucy50aW1lc3RhbXAgJiYgb3B0aW9ucy5sZW5ndGggPCA5KSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxlbmd0aFwiKTtcbiAgbGV0IGxhc3RUaW1lID0gMDtcbiAgbGV0IGxhc3REZWNpbWFsID0gMG47XG4gIHJldHVybiB7XG4gICAgY3JlYXRlSWQoKSB7XG4gICAgICBsZXQgcmFuZExlbmd0aCA9IG9wdGlvbnMubGVuZ3RoITtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBsZXQgaWQgPSBcIlwiO1xuICAgICAgaWYgKG9wdGlvbnMudGltZXN0YW1wKSB7XG4gICAgICAgIHJhbmRMZW5ndGggLT0gODtcbiAgICAgICAgaWQgPSBgJHtpZH0ke19fYmlnSW50VG9TdHJpbmcoQmlnSW50KG5vdykpLnBhZFN0YXJ0KDgsIFwiMFwiKX1gO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuc2VxdWVudGlhbCAmJiBsYXN0VGltZSA9PT0gbm93KSB7XG4gICAgICAgIGlkID0gYCR7aWR9JHtfX2JpZ0ludFRvU3RyaW5nKCsrbGFzdERlY2ltYWwpLnBhZFN0YXJ0KDEsIFwiMFwiKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFzdFRpbWUgPSBub3c7XG4gICAgICAgIGNvbnN0IG1pbiA9IDBuO1xuICAgICAgICBjb25zdCBtYXggPSBfX2dldE1heFZhbHVlKEJpZ0ludChyYW5kTGVuZ3RoKSk7XG4gICAgICAgIGxhc3REZWNpbWFsID0gX19zZWN1cmVSYW5kb21CaWdJbnQobWluLCBtYXgpO1xuICAgICAgICBpZCA9IGAke2lkfSR7X19iaWdJbnRUb1N0cmluZyhsYXN0RGVjaW1hbCkucGFkU3RhcnQocmFuZExlbmd0aCwgXCIwXCIpfWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfSxcbiAgICBnZXRJZFRpbWVzdGFtcChpZDogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy50aW1lc3RhbXAgPyBOdW1iZXIoX19zdHJpbmdUb0JpZ0ludChpZC5zbGljZSgwLCA4KS5yZXBsYWNlQWxsKFwiMFwiLCBcIlwiKSkpIDogMDtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBFTkNPRElORyA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblxuZnVuY3Rpb24gX19zZWN1cmVSYW5kb21CaWdJbnQobWluOiBiaWdpbnQsIG1heDogYmlnaW50KTogYmlnaW50IHtcbiAgaWYgKG1pbiA+PSBtYXgpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VcIik7XG5cbiAgY29uc3QgcmFuZ2UgPSBtYXggLSBtaW4gKyAxbjtcbiAgY29uc3QgYnl0ZUNvdW50ID0gTWF0aC5jZWlsKE51bWJlcihCaWdJbnQocmFuZ2UudG9TdHJpbmcoMikubGVuZ3RoKSkgLyA4KTtcbiAgY29uc3QgZW50cm9weUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZUNvdW50KTtcblxuICBsZXQgcmFuZG9tVmFsdWU6IGJpZ2ludDtcbiAgZG8ge1xuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZW50cm9weUJ5dGVzKTtcbiAgICByYW5kb21WYWx1ZSA9XG4gICAgICBCaWdJbnQoXG4gICAgICAgIGAweCR7QXJyYXkuZnJvbShlbnRyb3B5Qnl0ZXMpXG4gICAgICAgICAgLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKVxuICAgICAgICAgIC5qb2luKFwiXCIpfWAsXG4gICAgICApICUgcmFuZ2U7XG4gIH0gd2hpbGUgKHJhbmRvbVZhbHVlIDwgMG4pO1xuXG4gIHJldHVybiBtaW4gKyByYW5kb21WYWx1ZTtcbn1cblxuZnVuY3Rpb24gX19iaWdJbnRUb1N0cmluZyh2YWx1ZTogYmlnaW50KTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xuICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgbGV0IGN1cnJlbnQgPSB2YWx1ZTtcblxuICBpZiAoY3VycmVudCA9PT0gMG4pIHJldHVybiBFTkNPRElOR1swXTtcblxuICB3aGlsZSAoY3VycmVudCA+IDBuKSB7XG4gICAgY29uc3QgcmVtYWluZGVyID0gY3VycmVudCAlIGJhc2U7XG4gICAgcmVzdWx0ID0gRU5DT0RJTkdbTnVtYmVyKHJlbWFpbmRlcildICsgcmVzdWx0O1xuICAgIGN1cnJlbnQgPSBjdXJyZW50IC8gYmFzZTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBfX3N0cmluZ1RvQmlnSW50KHN0cjogc3RyaW5nKTogYmlnaW50IHtcbiAgY29uc3QgY2hhck1hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IEVOQ09ESU5HLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhck1hcFtFTkNPRElOR1tpXV0gPSBpO1xuICB9XG5cbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xuICBsZXQgcmVzdWx0ID0gMG47XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyID0gc3RyW2ldO1xuICAgIGlmICghKGNoYXIgaW4gY2hhck1hcCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFyYWN0ZXIgJyR7Y2hhcn0nIGluIGlucHV0IHN0cmluZ2ApO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IEJpZ0ludChjaGFyTWFwW2NoYXJdKTtcbiAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgdmFsdWU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBfX2dldE1heFZhbHVlKG46IGJpZ2ludCk6IGJpZ2ludCB7XG4gIHJldHVybiBCaWdJbnQoRU5DT0RJTkcubGVuZ3RoKSAqKiBuIC0gMW47XG59XG5cbmNvbnN0IGlkR2VuZXJhdG9yID0gZGVmaW5lSWRHZW5lcmF0b3IoeyBsZW5ndGg6IDI0LCB0aW1lc3RhbXA6IGZhbHNlLCBzZXF1ZW50aWFsOiBmYWxzZSB9KTtcblxuZXhwb3J0IGNvbnN0IF9fY3JlYXRlSWQgPSBpZEdlbmVyYXRvci5jcmVhdGVJZDtcbiIsCiAgICAiaW1wb3J0IHsgX19jcmVhdGVJZCB9IGZyb20gXCIuLi91dGlscy9jcmVhdGUtaWQudHNcIjtcblxuZXhwb3J0IHR5cGUgRXhlY3V0ZUlkR2VuZXJhdG9yID0gKGhlYWRlcnM/OiBIZWFkZXJzKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVEZWZhdWx0RXhlY3V0ZUlkR2VuZXJhdG9yKCkge1xuICByZXR1cm4gX19jcmVhdGVJZDtcbn1cbiIsCiAgICAiaW1wb3J0IHsgdHlwZSAkdHlwZXMsIF9faW5pdENvbW1hbmRlciwgX19pbml0TGlzdGVuZXIsIF9faW5pdEV4ZWN1dGVyLCBfX2luaXRFdmVudE1hbmFnZXIsIHR5cGUgRXhlY3V0ZUlkLCB0eXBlIExvZ2dlciwgdHlwZSBNaXhpbiwgdHlwZSBHZW5lcmF0ZWRJbml0LCB0eXBlIFBpbmcsIHR5cGUgTG9nZ2VyU3VibWl0dGluZ0hhbmRsZXIsIHR5cGUgTG9nZ2VySW5zZXJ0aW5nSGFuZGxlciB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xuaW1wb3J0IHsgZGVmaW5lRGVmYXVsdEV4ZWN1dGVJZEdlbmVyYXRvciB9IGZyb20gXCIuLi9leGVjdXRlL2V4ZWN1dGUtaWQtZ2VuZXJhdG9yLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlsa2lvSW5pdCB7XG4gIHBvcnQ6IG51bWJlcjtcbiAgZGV2ZWxvcDogYm9vbGVhbjtcbiAgY29va2Jvb2s6IHtcbiAgICBjb29rYm9va1BvcnQ6IG51bWJlcjtcbiAgfTtcbiAgY29ycz86IHtcbiAgICBjb3JzQWxsb3dNZXRob2RzPzogc3RyaW5nO1xuICAgIGNvcnNBbGxvd0hlYWRlcnM/OiBzdHJpbmc7XG4gICAgY29yc0FsbG93T3JpZ2luPzogc3RyaW5nO1xuICB9O1xuICBpZ25vcmVQYXRoTGV2ZWw/OiBudW1iZXI7XG4gIHJlYWxJcD86IChoZWFkZXJzOiBIZWFkZXJzKSA9PiBzdHJpbmc7XG4gIGV4ZWN1dGVJZD86IChoZWFkZXJzOiBIZWFkZXJzKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG4gIG9uTG9nZ2VyU3VibWl0dGluZz86IExvZ2dlclN1Ym1pdHRpbmdIYW5kbGVyO1xuICBvbkxvZ2dlckluc2VydGluZz86IExvZ2dlckluc2VydGluZ0hhbmRsZXI7XG4gIGJvb3RzdHJhcHM/OiBBcnJheTwod29ybGQ6IE1pbGtpb1dvcmxkKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZD47XG59XG5cbmV4cG9ydCB0eXBlIE1pbGtpb1J1bnRpbWVJbml0PFQgZXh0ZW5kcyBNaWxraW9Jbml0PiA9IE1peGluPFxuICBULFxuICB7XG4gICAgZXhlY3V0ZUlkOiAoaGVhZGVyczogSGVhZGVycykgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xuICAgIHJ1bnRpbWU6IHtcbiAgICAgIHJlcXVlc3Q6IE1hcDxFeGVjdXRlSWQsIHsgbG9nZ2VyOiBMb2dnZXIgfT47XG4gICAgICBjb25maWc6IEF3YWl0ZWQ8UmV0dXJuVHlwZTwkdHlwZXNbXCJnZW5lcmF0ZWRcIl1bXCJjb25maWdTY2hlbWFcIl0+PjtcbiAgICAgIGFwcDogYW55O1xuICAgIH07XG4gICAgb246IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgX19pbml0RXZlbnRNYW5hZ2VyPj5bXCJvblwiXTtcbiAgICBvZmY6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgX19pbml0RXZlbnRNYW5hZ2VyPj5bXCJvZmZcIl07XG4gICAgZW1pdDogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBfX2luaXRFdmVudE1hbmFnZXI+PltcImVtaXRcIl07XG4gIH1cbj47XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVXb3JsZDxNaWxraW9PcHRpb25zIGV4dGVuZHMgTWlsa2lvSW5pdD4oZ2VuZXJhdGVkOiBHZW5lcmF0ZWRJbml0LCBjb25maWdTY2hlbWE6IHsgZ2V0OiAoKSA9PiBQcm9taXNlPFJlY29yZDxhbnksIGFueT4+IH0sIG9wdGlvbnM6IE1pbGtpb09wdGlvbnMpOiBQcm9taXNlPE1pbGtpb1dvcmxkPE1pbGtpb09wdGlvbnM+PiB7XG4gIGNvbnN0IGV4ZWN1dGVJZCA9IG9wdGlvbnMuZXhlY3V0ZUlkID8/IGRlZmluZURlZmF1bHRFeGVjdXRlSWRHZW5lcmF0b3IoKTtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgY29uZmlnU2NoZW1hLmdldCgpO1xuXG4gIGNvbnN0IHJ1bnRpbWUgPSB7XG4gICAgcmVxdWVzdDogbmV3IE1hcCgpLFxuICAgIGNvbmZpZyxcbiAgfSBhcyBNaWxraW9SdW50aW1lSW5pdDxNaWxraW9PcHRpb25zPltcInJ1bnRpbWVcIl07XG5cbiAgY29uc3QgZXZlbnRNYW5hZ2VyID0gX19pbml0RXZlbnRNYW5hZ2VyKCk7XG5cbiAgY29uc3QgXzogTWlsa2lvUnVudGltZUluaXQ8TWlsa2lvT3B0aW9ucz4gPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBleGVjdXRlSWQsXG4gICAgcnVudGltZSxcbiAgICBvbjogZXZlbnRNYW5hZ2VyLm9uLFxuICAgIG9mZjogZXZlbnRNYW5hZ2VyLm9mZixcbiAgICBlbWl0OiBldmVudE1hbmFnZXIuZW1pdCxcbiAgfTtcblxuICBjb25zdCBleGVjdXRlciA9IF9faW5pdEV4ZWN1dGVyKGdlbmVyYXRlZCwgXyk7XG4gIGNvbnN0IGNvbW1hbmRlciA9IF9faW5pdENvbW1hbmRlcihnZW5lcmF0ZWQsIF8pO1xuICBjb25zdCBsaXN0ZW5lciA9IF9faW5pdExpc3RlbmVyKGdlbmVyYXRlZCwgXywgZXhlY3V0ZXIpO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIGFwcFxuICBjb25zdCB3b3JsZCA9IHtcbiAgICBfLFxuICAgIC8vIGV2ZW50IG1hbmFnZXJcbiAgICBvbjogZXZlbnRNYW5hZ2VyLm9uLFxuICAgIG9mZjogZXZlbnRNYW5hZ2VyLm9mZixcbiAgICBlbWl0OiBldmVudE1hbmFnZXIuZW1pdCxcbiAgICAvLyBjb21tYW5kZXJcbiAgICBjb21tYW5kZXIsXG4gICAgLy8gbGlzdGVuZXJcbiAgICBsaXN0ZW5lcixcbiAgICAvLyBmdW5jdGlvblxuICAgIGNvbmZpZyxcbiAgfTtcblxuICBydW50aW1lLmFwcCA9IHdvcmxkO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuYm9vdHN0cmFwcykpIHtcbiAgICBmb3IgKGNvbnN0IGJvb3RzdHJhcCBvZiBvcHRpb25zLmJvb3RzdHJhcHMpIHtcbiAgICAgIGF3YWl0IGJvb3RzdHJhcCh3b3JsZCBhcyBNaWxraW9Xb3JsZDxNaWxraW9PcHRpb25zPik7XG4gICAgfVxuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoZ2VuZXJhdGVkLmhhbmRsZXJTY2hlbWEubG9hZEhhbmRsZXJzKHdvcmxkKSk7XG5cbiAgcmV0dXJuIHdvcmxkIGFzIE1pbGtpb1dvcmxkPE1pbGtpb09wdGlvbnM+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1pbGtpb1dvcmxkPE1pbGtpb09wdGlvbnMgZXh0ZW5kcyBNaWxraW9Jbml0ID0gTWlsa2lvSW5pdD4ge1xuICBfOiBNaWxraW9SdW50aW1lSW5pdDxNaWxraW9PcHRpb25zPjtcbiAgLy8gZXZlbnQgbWFuYWdlclxuICBvbjogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBfX2luaXRFdmVudE1hbmFnZXI+PltcIm9uXCJdO1xuICBvZmY6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgX19pbml0RXZlbnRNYW5hZ2VyPj5bXCJvZmZcIl07XG4gIGVtaXQ6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgX19pbml0RXZlbnRNYW5hZ2VyPj5bXCJlbWl0XCJdO1xuICBwaW5nOiAob3B0aW9ucz86IHsgdGltZW91dD86IG51bWJlciB9KSA9PiBQcm9taXNlPFBpbmc+O1xuICAvLyBjb21tYW5kZXJcbiAgY29tbWFuZGVyOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIF9faW5pdENvbW1hbmRlcj4+O1xuICAvLyBsaXN0ZW5lclxuICBsaXN0ZW5lcjogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBfX2luaXRMaXN0ZW5lcj4+O1xuICBjb25maWc6IFJlYWRvbmx5PEF3YWl0ZWQ8UmV0dXJuVHlwZTwkdHlwZXNbXCJjb25maWdTY2hlbWFcIl1bXCJnZXRcIl0+Pj47XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgR2VuZXJhdGVkSW5pdCB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZDxDb21tYW5kSW5pdFQgZXh0ZW5kcyBDb21tYW5kSW5pdD4oaW5pdDogQ29tbWFuZEluaXRUKTogQ29tbWFuZDxDb21tYW5kSW5pdFQ+IHtcbiAgY29uc3QgY29tbWFuZCA9IGluaXQgYXMgdW5rbm93biBhcyBDb21tYW5kPENvbW1hbmRJbml0VD47XG4gIGNvbW1hbmQuJG1pbGtpb1R5cGUgPSBcImNvbW1hbmRcIjtcbiAgcmV0dXJuIGNvbW1hbmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEluaXQge1xuICBoYW5kbGVyOiAoY29tbWFuZHM6IEFycmF5PHN0cmluZz4sIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZDxDb21tYW5kSW5pdFQgZXh0ZW5kcyBDb21tYW5kSW5pdD4ge1xuICAkbWlsa2lvVHlwZTogXCJjb21tYW5kXCI7XG4gIGhhbmRsZXI6IENvbW1hbmRJbml0VFtcImhhbmRsZXJcIl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2luaXRDb21tYW5kZXIoZ2VuZXJhdGVkOiBHZW5lcmF0ZWRJbml0LCBydW50aW1lOiBhbnkpIHtcbiAgY29uc3QgY29tbWFuZGVyID0gYXN5bmMgKGFyZ3Y6IEFycmF5PHN0cmluZz4sIG9wdGlvbnM/OiB7IG9uTm90Rm91bmQ/OiAoKSA9PiBhbnkgfSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIHBhdGg6IFwiaW5kZXhcIixcbiAgICAgIGNvbW1hbmRzOiBbXSBhcyBBcnJheTxzdHJpbmc+LFxuICAgICAgb3B0aW9uczoge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdHJ1ZT4sXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IHYgb2YgYXJndi5zbGljZSgzKSkge1xuICAgICAgaWYgKHYuc3RhcnRzV2l0aChcIi0tXCIpICYmIHYuaW5jbHVkZXMoXCI9XCIpKSB7XG4gICAgICAgIGNvbnN0IHZTcGxpdGVkID0gdi5zcGxpdChcIj1cIik7XG4gICAgICAgIHBhcmFtcy5vcHRpb25zW3ZTcGxpdGVkWzBdLnNsaWNlKDIpXSA9IHZTcGxpdGVkLnNsaWNlKDEsIHZTcGxpdGVkLmxlbmd0aCkuam9pbihcIj1cIik7XG4gICAgICB9IGVsc2UgaWYgKHYuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICAgIHBhcmFtcy5vcHRpb25zW3Yuc2xpY2UoMildID0gXCIxXCI7XG4gICAgICB9IGVsc2UgaWYgKHYuc3RhcnRzV2l0aChcIi1cIikgJiYgdi5pbmNsdWRlcyhcIj1cIikpIHtcbiAgICAgICAgY29uc3QgdlNwbGl0ZWQgPSB2LnNwbGl0KFwiPVwiKTtcbiAgICAgICAgcGFyYW1zLm9wdGlvbnNbdlNwbGl0ZWRbMF0uc2xpY2UoMSldID0gdlNwbGl0ZWQuc2xpY2UoMSwgdlNwbGl0ZWQubGVuZ3RoKS5qb2luKFwiPVwiKTtcbiAgICAgIH0gZWxzZSBpZiAodi5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICBwYXJhbXMub3B0aW9uc1t2LnNsaWNlKDEpXSA9IFwiMVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLmNvbW1hbmRzLnB1c2godik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhcmd2Lmxlbmd0aCA9PT0gMikgcGFyYW1zLnBhdGggPSBcImluZGV4XCI7XG4gICAgZWxzZSBwYXJhbXMucGF0aCA9IGAke2FyZ3ZbMl0gPz8gXCJpbmRleFwifWA7XG5cbiAgICBpZiAoIShwYXJhbXMucGF0aCBpbiBnZW5lcmF0ZWQuY29tbWFuZFNjaGVtYS5jb21tYW5kcykpIHtcbiAgICAgIGlmIChvcHRpb25zPy5vbk5vdEZvdW5kKSByZXR1cm4gYXdhaXQgb3B0aW9ucy5vbk5vdEZvdW5kKCk7XG4gICAgICBjb25zb2xlLmxvZyhgXFx4MUJbNDRtIFV3VSBcXHgxQlswbSBcXHgxQlsybUNvbW1hbmQgbm90IGZvdW5kOlxceDFCWzBtIFxceDFCWzMybSR7cGFyYW1zLnBhdGh9XFx4MUJbMG1gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IGdlbmVyYXRlZC5jb21tYW5kU2NoZW1hLmNvbW1hbmRzW3BhcmFtcy5wYXRoXS5tb2R1bGUuaGFuZGxlcihwYXJhbXMuY29tbWFuZHMsIHBhcmFtcy5vcHRpb25zKTtcbiAgfTtcblxuICByZXR1cm4gY29tbWFuZGVyO1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7ICRjb250ZXh0LCAkbWV0YSB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYWN0aW9uPEFjdGlvbkluaXRUIGV4dGVuZHMgQWN0aW9uSW5pdD4oaW5pdDogQWN0aW9uSW5pdFQpOiBBY3Rpb248QWN0aW9uSW5pdFQ+IHtcbiAgY29uc3QgYWN0aW9uID0gaW5pdCBhcyB1bmtub3duIGFzIEFjdGlvbjxBY3Rpb25Jbml0VD47XG4gIGFjdGlvbi4kbWlsa2lvVHlwZSA9IFwiYWN0aW9uXCI7XG4gIGlmIChhY3Rpb24ubWV0YSA9PT0gdW5kZWZpbmVkKSBhY3Rpb24ubWV0YSA9IHt9O1xuICByZXR1cm4gYWN0aW9uO1xufVxuXG5leHBvcnQgdHlwZSBBY3Rpb25Jbml0ID0ge1xuICBtZXRhPzogJG1ldGE7XG4gIGhhbmRsZXI6IChjb250ZXh0OiAkY29udGV4dCwgcGFyYW1zOiBhbnkpID0+IFByb21pc2U8dW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBBY3Rpb248QWN0aW9uSW5pdFQgZXh0ZW5kcyBBY3Rpb25Jbml0PiA9IHtcbiAgJG1pbGtpb1R5cGU6IFwiYWN0aW9uXCI7XG4gIG1ldGE6IEFjdGlvbkluaXRUW1wibWV0YVwiXSBleHRlbmRzIHVuZGVmaW5lZCA/IHt9IDogQWN0aW9uSW5pdFRbXCJtZXRhXCJdO1xuICBoYW5kbGVyOiBBY3Rpb25Jbml0VFtcImhhbmRsZXJcIl07XG59O1xuIiwKICAgICJpbXBvcnQgdHlwZSB7ICRjb250ZXh0LCAkbWV0YSB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtPFN0cmVhbUluaXRUIGV4dGVuZHMgU3RyZWFtSW5pdD4oaW5pdDogU3RyZWFtSW5pdFQpOiBTdHJlYW08U3RyZWFtSW5pdFQ+IHtcbiAgY29uc3Qgc3RyZWFtID0gaW5pdCBhcyB1bmtub3duIGFzIFN0cmVhbTxTdHJlYW1Jbml0VD47XG4gIHN0cmVhbS4kbWlsa2lvVHlwZSA9IFwic3RyZWFtXCI7XG4gIGlmIChzdHJlYW0ubWV0YSA9PT0gdW5kZWZpbmVkKSBzdHJlYW0ubWV0YSA9IHt9O1xuICByZXR1cm4gc3RyZWFtO1xufVxuXG5leHBvcnQgdHlwZSBTdHJlYW1Jbml0ID0ge1xuICBtZXRhPzogJG1ldGE7XG4gIGhhbmRsZXI6IChjb250ZXh0OiAkY29udGV4dCwgcGFyYW1zOiBhbnkpID0+IEFzeW5jR2VuZXJhdG9yPHVua25vd24+O1xufTtcblxuZXhwb3J0IHR5cGUgU3RyZWFtPFN0cmVhbUluaXRUIGV4dGVuZHMgU3RyZWFtSW5pdD4gPSB7XG4gICRtaWxraW9UeXBlOiBcInN0cmVhbVwiO1xuICBtZXRhOiBTdHJlYW1Jbml0VFtcIm1ldGFcIl0gZXh0ZW5kcyB1bmRlZmluZWQgPyB7fSA6IFN0cmVhbUluaXRUW1wibWV0YVwiXTtcbiAgaGFuZGxlcjogU3RyZWFtSW5pdFRbXCJoYW5kbGVyXCJdO1xufTtcbiIsCiAgICAiLyoqXG4gKiBAbW9kdWxlIGNvbnN0YW50c1xuICogQHN1bW1hcnkgVXNlZnVsIGNvbnN0YW50c1xuICogQGRlc2NyaXB0aW9uXG4gKiBDb2xsZWN0aW9uIG9mIHVzZWZ1bCBkYXRlIGNvbnN0YW50cy5cbiAqXG4gKiBUaGUgY29uc3RhbnRzIGNvdWxkIGJlIGltcG9ydGVkIGZyb20gYGRhdGUtZm5zL2NvbnN0YW50c2A6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG1heFRpbWUsIG1pblRpbWUgfSBmcm9tIFwiLi9jb25zdGFudHMvZGF0ZS1mbnMvY29uc3RhbnRzXCI7XG4gKlxuICogZnVuY3Rpb24gaXNBbGxvd2VkVGltZSh0aW1lKSB7XG4gKiAgIHJldHVybiB0aW1lIDw9IG1heFRpbWUgJiYgdGltZSA+PSBtaW5UaW1lO1xuICogfVxuICogYGBgXG4gKi9cblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIGRheXNJbldlZWtcbiAqIEBzdW1tYXJ5IERheXMgaW4gMSB3ZWVrLlxuICovXG5leHBvcnQgY29uc3QgZGF5c0luV2VlayA9IDc7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBkYXlzSW5ZZWFyXG4gKiBAc3VtbWFyeSBEYXlzIGluIDEgeWVhci5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEhvdyBtYW55IGRheXMgaW4gYSB5ZWFyLlxuICpcbiAqIE9uZSB5ZWFycyBlcXVhbHMgMzY1LjI0MjUgZGF5cyBhY2NvcmRpbmcgdG8gdGhlIGZvcm11bGE6XG4gKlxuICogPiBMZWFwIHllYXIgb2NjdXJzIGV2ZXJ5IDQgeWVhcnMsIGV4Y2VwdCBmb3IgeWVhcnMgdGhhdCBhcmUgZGl2aXNpYmxlIGJ5IDEwMCBhbmQgbm90IGRpdmlzaWJsZSBieSA0MDAuXG4gKiA+IDEgbWVhbiB5ZWFyID0gKDM2NSsxLzQtMS8xMDArMS80MDApIGRheXMgPSAzNjUuMjQyNSBkYXlzXG4gKi9cbmV4cG9ydCBjb25zdCBkYXlzSW5ZZWFyID0gMzY1LjI0MjU7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtYXhUaW1lXG4gKiBAc3VtbWFyeSBNYXhpbXVtIGFsbG93ZWQgdGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgbWF4VGltZSB9IGZyb20gXCIuL2NvbnN0YW50cy9kYXRlLWZucy9jb25zdGFudHNcIjtcbiAqXG4gKiBjb25zdCBpc1ZhbGlkID0gODY0MDAwMDAwMDAwMDAwMSA8PSBtYXhUaW1lO1xuICogLy89PiBmYWxzZVxuICpcbiAqIG5ldyBEYXRlKDg2NDAwMDAwMDAwMDAwMDEpO1xuICogLy89PiBJbnZhbGlkIERhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IG1heFRpbWUgPSBNYXRoLnBvdygxMCwgOCkgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWluVGltZVxuICogQHN1bW1hcnkgTWluaW11bSBhbGxvd2VkIHRpbWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IG1pblRpbWUgfSBmcm9tIFwiLi9jb25zdGFudHMvZGF0ZS1mbnMvY29uc3RhbnRzXCI7XG4gKlxuICogY29uc3QgaXNWYWxpZCA9IC04NjQwMDAwMDAwMDAwMDAxID49IG1pblRpbWU7XG4gKiAvLz0+IGZhbHNlXG4gKlxuICogbmV3IERhdGUoLTg2NDAwMDAwMDAwMDAwMDEpXG4gKiAvLz0+IEludmFsaWQgRGF0ZVxuICovXG5leHBvcnQgY29uc3QgbWluVGltZSA9IC1tYXhUaW1lO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5XZWVrXG4gKiBAc3VtbWFyeSBNaWxsaXNlY29uZHMgaW4gMSB3ZWVrLlxuICovXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzSW5XZWVrID0gNjA0ODAwMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5EYXlcbiAqIEBzdW1tYXJ5IE1pbGxpc2Vjb25kcyBpbiAxIGRheS5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kc0luRGF5ID0gODY0MDAwMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJbk1pbnV0ZVxuICogQHN1bW1hcnkgTWlsbGlzZWNvbmRzIGluIDEgbWludXRlXG4gKi9cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZHNJbk1pbnV0ZSA9IDYwMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5Ib3VyXG4gKiBAc3VtbWFyeSBNaWxsaXNlY29uZHMgaW4gMSBob3VyXG4gKi9cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZHNJbkhvdXIgPSAzNjAwMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5TZWNvbmRcbiAqIEBzdW1tYXJ5IE1pbGxpc2Vjb25kcyBpbiAxIHNlY29uZFxuICovXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzSW5TZWNvbmQgPSAxMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWludXRlc0luWWVhclxuICogQHN1bW1hcnkgTWludXRlcyBpbiAxIHllYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBtaW51dGVzSW5ZZWFyID0gNTI1NjAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWludXRlc0luTW9udGhcbiAqIEBzdW1tYXJ5IE1pbnV0ZXMgaW4gMSBtb250aC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbnV0ZXNJbk1vbnRoID0gNDMyMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaW51dGVzSW5EYXlcbiAqIEBzdW1tYXJ5IE1pbnV0ZXMgaW4gMSBkYXkuXG4gKi9cbmV4cG9ydCBjb25zdCBtaW51dGVzSW5EYXkgPSAxNDQwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWludXRlc0luSG91clxuICogQHN1bW1hcnkgTWludXRlcyBpbiAxIGhvdXIuXG4gKi9cbmV4cG9ydCBjb25zdCBtaW51dGVzSW5Ib3VyID0gNjA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtb250aHNJblF1YXJ0ZXJcbiAqIEBzdW1tYXJ5IE1vbnRocyBpbiAxIHF1YXJ0ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBtb250aHNJblF1YXJ0ZXIgPSAzO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbW9udGhzSW5ZZWFyXG4gKiBAc3VtbWFyeSBNb250aHMgaW4gMSB5ZWFyLlxuICovXG5leHBvcnQgY29uc3QgbW9udGhzSW5ZZWFyID0gMTI7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBxdWFydGVyc0luWWVhclxuICogQHN1bW1hcnkgUXVhcnRlcnMgaW4gMSB5ZWFyXG4gKi9cbmV4cG9ydCBjb25zdCBxdWFydGVyc0luWWVhciA9IDQ7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5Ib3VyXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgaG91ci5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJbkhvdXIgPSAzNjAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luTWludXRlXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgbWludXRlLlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luTWludXRlID0gNjA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5EYXlcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSBkYXkuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5EYXkgPSBzZWNvbmRzSW5Ib3VyICogMjQ7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5XZWVrXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgd2Vlay5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJbldlZWsgPSBzZWNvbmRzSW5EYXkgKiA3O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luWWVhclxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIHllYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5ZZWFyID0gc2Vjb25kc0luRGF5ICogZGF5c0luWWVhcjtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJbk1vbnRoXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgbW9udGhcbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJbk1vbnRoID0gc2Vjb25kc0luWWVhciAvIDEyO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luUXVhcnRlclxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIHF1YXJ0ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5RdWFydGVyID0gc2Vjb25kc0luTW9udGggKiAzO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgY29uc3RydWN0RnJvbVN5bWJvbFxuICogQHN1bW1hcnkgU3ltYm9sIGVuYWJsaW5nIERhdGUgZXh0ZW5zaW9ucyB0byBpbmhlcml0IHByb3BlcnRpZXMgZnJvbSB0aGUgcmVmZXJlbmNlIGRhdGUuXG4gKlxuICogVGhlIHN5bWJvbCBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgYGNvbnN0cnVjdEZyb21gIGZ1bmN0aW9uIHRvIGNvbnN0cnVjdCBhIGRhdGVcbiAqIHVzaW5nIGEgcmVmZXJlbmNlIGRhdGUgYW5kIGEgdmFsdWUuIEl0IGFsbG93cyB0byB0cmFuc2ZlciBleHRyYSBwcm9wZXJ0aWVzXG4gKiBmcm9tIHRoZSByZWZlcmVuY2UgZGF0ZSB0byB0aGUgbmV3IGRhdGUuIEl0J3MgdXNlZnVsIGZvciBleHRlbnNpb25zIGxpa2VcbiAqIFtgVFpEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3R6KSB0aGF0IGFjY2VwdCBhIHRpbWUgem9uZSBhc1xuICogYSBjb25zdHJ1Y3RvciBhcmd1bWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdEZyb21TeW1ib2wgPSBTeW1ib2wuZm9yKFwiY29uc3RydWN0RGF0ZUZyb21cIik7XG4iLAogICAgImltcG9ydCB7IGNvbnN0cnVjdEZyb21TeW1ib2wgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBjb25zdHJ1Y3RGcm9tXG4gKiBAY2F0ZWdvcnkgR2VuZXJpYyBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb25zdHJ1Y3RzIGEgZGF0ZSB1c2luZyB0aGUgcmVmZXJlbmNlIGRhdGUgYW5kIHRoZSB2YWx1ZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIGZ1bmN0aW9uIGNvbnN0cnVjdHMgYSBuZXcgZGF0ZSB1c2luZyB0aGUgY29uc3RydWN0b3IgZnJvbSB0aGUgcmVmZXJlbmNlXG4gKiBkYXRlIGFuZCB0aGUgZ2l2ZW4gdmFsdWUuIEl0IGhlbHBzIHRvIGJ1aWxkIGdlbmVyaWMgZnVuY3Rpb25zIHRoYXQgYWNjZXB0XG4gKiBkYXRlIGV4dGVuc2lvbnMuXG4gKlxuICogSXQgZGVmYXVsdHMgdG8gYERhdGVgIGlmIHRoZSBwYXNzZWQgcmVmZXJlbmNlIGRhdGUgaXMgYSBudW1iZXIgb3IgYSBzdHJpbmcuXG4gKlxuICogU3RhcnRpbmcgZnJvbSB2My43LjAsIGl0IGFsbG93cyB0byBjb25zdHJ1Y3QgYSBkYXRlIHVzaW5nIGBbU3ltYm9sLmZvcihcImNvbnN0cnVjdERhdGVGcm9tXCIpXWBcbiAqIGVuYWJsaW5nIHRvIHRyYW5zZmVyIGV4dHJhIHByb3BlcnRpZXMgZnJvbSB0aGUgcmVmZXJlbmNlIGRhdGUgdG8gdGhlIG5ldyBkYXRlLlxuICogSXQncyB1c2VmdWwgZm9yIGV4dGVuc2lvbnMgbGlrZSBbYFRaRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy90eilcbiAqIHRoYXQgYWNjZXB0IGEgdGltZSB6b25lIGFzIGEgY29uc3RydWN0b3IgYXJndW1lbnQuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgcmVmZXJlbmNlIGRhdGUgdG8gdGFrZSBjb25zdHJ1Y3RvciBmcm9tXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY3JlYXRlIHRoZSBkYXRlXG4gKlxuICogQHJldHVybnMgRGF0ZSBpbml0aWFsaXplZCB1c2luZyB0aGUgZ2l2ZW4gZGF0ZSBhbmQgdmFsdWVcbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20vZGF0ZS1mbnNcIjtcbiAqXG4gKiAvLyBBIGZ1bmN0aW9uIHRoYXQgY2xvbmVzIGEgZGF0ZSBwcmVzZXJ2aW5nIHRoZSBvcmlnaW5hbCB0eXBlXG4gKiBmdW5jdGlvbiBjbG9uZURhdGU8RGF0ZVR5cGUgZXh0ZW5kcyBEYXRlPihkYXRlOiBEYXRlVHlwZSk6IERhdGVUeXBlIHtcbiAqICAgcmV0dXJuIGNvbnN0cnVjdEZyb20oXG4gKiAgICAgZGF0ZSwgLy8gVXNlIGNvbnN0cnVjdG9yIGZyb20gdGhlIGdpdmVuIGRhdGVcbiAqICAgICBkYXRlLmdldFRpbWUoKSAvLyBVc2UgdGhlIGRhdGUgdmFsdWUgdG8gY3JlYXRlIGEgbmV3IGRhdGVcbiAqICAgKTtcbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdEZyb20oZGF0ZSwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBkYXRlID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBkYXRlKHZhbHVlKTtcblxuICBpZiAoZGF0ZSAmJiB0eXBlb2YgZGF0ZSA9PT0gXCJvYmplY3RcIiAmJiBjb25zdHJ1Y3RGcm9tU3ltYm9sIGluIGRhdGUpXG4gICAgcmV0dXJuIGRhdGVbY29uc3RydWN0RnJvbVN5bWJvbF0odmFsdWUpO1xuXG4gIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIG5ldyBkYXRlLmNvbnN0cnVjdG9yKHZhbHVlKTtcblxuICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGNvbnN0cnVjdEZyb207XG4iLAogICAgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgdG9EYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdHMgY2xvbmUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCBpdCBpcyB0cmVhdGVkIGFzIGEgdGltZXN0YW1wLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBub25lIG9mIHRoZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSW52YWxpZCBEYXRlLlxuICpcbiAqIFN0YXJ0aW5nIGZyb20gdjMuNy4wLCBpdCBjbG9uZXMgYSBkYXRlIHVzaW5nIGBbU3ltYm9sLmZvcihcImNvbnN0cnVjdERhdGVGcm9tXCIpXWBcbiAqIGVuYWJsaW5nIHRvIHRyYW5zZmVyIGV4dHJhIHByb3BlcnRpZXMgZnJvbSB0aGUgcmVmZXJlbmNlIGRhdGUgdG8gdGhlIG5ldyBkYXRlLlxuICogSXQncyB1c2VmdWwgZm9yIGV4dGVuc2lvbnMgbGlrZSBbYFRaRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy90eilcbiAqIHRoYXQgYWNjZXB0IGEgdGltZSB6b25lIGFzIGEgY29uc3RydWN0b3IgYXJndW1lbnQuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBhcmd1bWVudCAtIFRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2xvbmUgdGhlIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUobmV3IERhdGUoMjAxNCwgMSwgMTEsIDExLCAzMCwgMzApKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udmVydCB0aGUgdGltZXN0YW1wIHRvIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSB0b0RhdGUoMTM5MjA5ODQzMDAwMClcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0RhdGUoYXJndW1lbnQsIGNvbnRleHQpIHtcbiAgLy8gW1RPRE9dIEdldCByaWQgb2YgYHRvRGF0ZWAgb3IgYGNvbnN0cnVjdEZyb21gP1xuICByZXR1cm4gY29uc3RydWN0RnJvbShjb250ZXh0IHx8IGFyZ3VtZW50LCBhcmd1bWVudCk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgdG9EYXRlO1xuIiwKICAgICJsZXQgZGVmYXVsdE9wdGlvbnMgPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkge1xuICByZXR1cm4gZGVmYXVsdE9wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhuZXdPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9ucztcbn1cbiIsCiAgICAiaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi9fbGliL2RlZmF1bHRPcHRpb25zLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN0YXJ0T2ZXZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZldlZWtcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSB3ZWVrIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSB3ZWVrIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhIHdlZWtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGEgd2VlayBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IFN1biBBdWcgMzEgMjAxNCAwMDowMDowMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJZiB0aGUgd2VlayBzdGFydHMgb24gTW9uZGF5LCB0aGUgc3RhcnQgb2YgdGhlIHdlZWsgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApLCB7IHdlZWtTdGFydHNPbjogMSB9KVxuICogLy89PiBNb24gU2VwIDAxIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZXZWVrKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICBjb25zdCB3ZWVrU3RhcnRzT24gPVxuICAgIG9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uID8/XG4gICAgZGVmYXVsdE9wdGlvbnMubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICAwO1xuXG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgZGF5ID0gX2RhdGUuZ2V0RGF5KCk7XG4gIGNvbnN0IGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gNyA6IDApICsgZGF5IC0gd2Vla1N0YXJ0c09uO1xuXG4gIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpIC0gZGlmZik7XG4gIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZldlZWs7XG4iLAogICAgImltcG9ydCB7IHN0YXJ0T2ZXZWVrIH0gZnJvbSBcIi4vc3RhcnRPZldlZWsuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN0YXJ0T2ZJU09XZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZklTT1dlZWtcbiAqIEBjYXRlZ29yeSBJU08gV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYW4gSVNPIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhbiBJU08gd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYW4gSVNPIHdlZWsgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mSVNPV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBNb24gU2VwIDAxIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZJU09XZWVrKGRhdGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHN0YXJ0T2ZXZWVrKGRhdGUsIHsgLi4ub3B0aW9ucywgd2Vla1N0YXJ0c09uOiAxIH0pO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZJU09XZWVrO1xuIiwKICAgICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZklTT1dlZWsgfSBmcm9tIFwiLi9zdGFydE9mSVNPV2Vlay5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBnZXRJU09XZWVrWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldElTT1dlZWtZZWFyXG4gKiBAY2F0ZWdvcnkgSVNPIFdlZWstTnVtYmVyaW5nIFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUsXG4gKiB3aGljaCBhbHdheXMgc3RhcnRzIDMgZGF5cyBiZWZvcmUgdGhlIHllYXIncyBmaXJzdCBUaHVyc2RheS5cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICpcbiAqIEByZXR1cm5zIFRoZSBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCBJU08td2VlayBudW1iZXJpbmcgeWVhciBpcyAyIEphbnVhcnkgMjAwNT9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldElTT1dlZWtZZWFyKG5ldyBEYXRlKDIwMDUsIDAsIDIpKVxuICogLy89PiAyMDA0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IGNvbnN0cnVjdEZyb20oX2RhdGUsIDApO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgY29uc3Qgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZklTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG5cbiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IGNvbnN0cnVjdEZyb20oX2RhdGUsIDApO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldEZ1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICBjb25zdCBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTtcblxuICBpZiAoX2RhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoX2RhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZUaGlzWWVhci5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXRJU09XZWVrWWVhcjtcbiIsCiAgICAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4uL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEdvb2dsZSBDaHJvbWUgYXMgb2YgNjcuMC4zMzk2Ljg3IGludHJvZHVjZWQgdGltZXpvbmVzIHdpdGggb2Zmc2V0IHRoYXQgaW5jbHVkZXMgc2Vjb25kcy5cbiAqIFRoZXkgdXN1YWxseSBhcHBlYXIgZm9yIGRhdGVzIHRoYXQgZGVub3RlIHRpbWUgYmVmb3JlIHRoZSB0aW1lem9uZXMgd2VyZSBpbnRyb2R1Y2VkXG4gKiAoZS5nLiBmb3IgJ0V1cm9wZS9QcmFndWUnIHRpbWV6b25lIHRoZSBvZmZzZXQgaXMgR01UKzAwOjU3OjQ0IGJlZm9yZSAxIE9jdG9iZXIgMTg5MVxuICogYW5kIEdNVCswMTowMDowMCBhZnRlciB0aGF0IGRhdGUpXG4gKlxuICogRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIHRoZSBvZmZzZXQgaW4gbWludXRlcyBhbmQgd291bGQgcmV0dXJuIDU3IGZvciB0aGUgZXhhbXBsZSBhYm92ZSxcbiAqIHdoaWNoIHdvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGNhbGN1bGF0aW9ucy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWV6b25lIG9mZnNldCBpbiBtaWxsaXNlY29uZHMgdGhhdCB0YWtlcyBzZWNvbmRzIGluIGFjY291bnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSk7XG4gIGNvbnN0IHV0Y0RhdGUgPSBuZXcgRGF0ZShcbiAgICBEYXRlLlVUQyhcbiAgICAgIF9kYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICBfZGF0ZS5nZXRNb250aCgpLFxuICAgICAgX2RhdGUuZ2V0RGF0ZSgpLFxuICAgICAgX2RhdGUuZ2V0SG91cnMoKSxcbiAgICAgIF9kYXRlLmdldE1pbnV0ZXMoKSxcbiAgICAgIF9kYXRlLmdldFNlY29uZHMoKSxcbiAgICAgIF9kYXRlLmdldE1pbGxpc2Vjb25kcygpLFxuICAgICksXG4gICk7XG4gIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoX2RhdGUuZ2V0RnVsbFllYXIoKSk7XG4gIHJldHVybiArZGF0ZSAtICt1dGNEYXRlO1xufVxuIiwKICAgICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4uL2NvbnN0cnVjdEZyb20uanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZURhdGVzKGNvbnRleHQsIC4uLmRhdGVzKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZSA9IGNvbnN0cnVjdEZyb20uYmluZChcbiAgICBudWxsLFxuICAgIGNvbnRleHQgfHwgZGF0ZXMuZmluZCgoZGF0ZSkgPT4gdHlwZW9mIGRhdGUgPT09IFwib2JqZWN0XCIpLFxuICApO1xuICByZXR1cm4gZGF0ZXMubWFwKG5vcm1hbGl6ZSk7XG59XG4iLAogICAgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZkRheX0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZEYXlcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhIGRheSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgZGF5IGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgYSBkYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGEgZGF5IGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZkRheShuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBUdWUgU2VwIDAyIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZEYXkoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZkRheTtcbiIsCiAgICAiaW1wb3J0IHsgZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyB9IGZyb20gXCIuL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy5qc1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplRGF0ZXMgfSBmcm9tIFwiLi9fbGliL25vcm1hbGl6ZURhdGVzLmpzXCI7XG5pbXBvcnQgeyBtaWxsaXNlY29uZHNJbkRheSB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZkRheSB9IGZyb20gXCIuL3N0YXJ0T2ZEYXkuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5c30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5c1xuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBkYXlzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgZGF5cyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy4gVGhpcyBtZWFucyB0aGF0IHRoZSB0aW1lcyBhcmUgcmVtb3ZlZFxuICogZnJvbSB0aGUgZGF0ZXMgYW5kIHRoZW4gdGhlIGRpZmZlcmVuY2UgaW4gZGF5cyBpcyBjYWxjdWxhdGVkLlxuICpcbiAqIEBwYXJhbSBsYXRlckRhdGUgLSBUaGUgbGF0ZXIgZGF0ZVxuICogQHBhcmFtIGVhcmxpZXJEYXRlIC0gVGhlIGVhcmxpZXIgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGNhbGVuZGFyIGRheXNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSG93IG1hbnkgY2FsZW5kYXIgZGF5cyBhcmUgYmV0d2VlblxuICogLy8gMiBKdWx5IDIwMTEgMjM6MDA6MDAgYW5kIDIgSnVseSAyMDEyIDAwOjAwOjAwP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKFxuICogICBuZXcgRGF0ZSgyMDEyLCA2LCAyLCAwLCAwKSxcbiAqICAgbmV3IERhdGUoMjAxMSwgNiwgMiwgMjMsIDApXG4gKiApXG4gKiAvLz0+IDM2NlxuICogLy8gSG93IG1hbnkgY2FsZW5kYXIgZGF5cyBhcmUgYmV0d2VlblxuICogLy8gMiBKdWx5IDIwMTEgMjM6NTk6MDAgYW5kIDMgSnVseSAyMDExIDAwOjAxOjAwP1xuICogY29uc3QgcmVzdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAzLCAwLCAxKSxcbiAqICAgbmV3IERhdGUoMjAxMSwgNiwgMiwgMjMsIDU5KVxuICogKVxuICogLy89PiAxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKFxuICAgIG9wdGlvbnM/LmluLFxuICAgIGxhdGVyRGF0ZSxcbiAgICBlYXJsaWVyRGF0ZSxcbiAgKTtcblxuICBjb25zdCBsYXRlclN0YXJ0T2ZEYXkgPSBzdGFydE9mRGF5KGxhdGVyRGF0ZV8pO1xuICBjb25zdCBlYXJsaWVyU3RhcnRPZkRheSA9IHN0YXJ0T2ZEYXkoZWFybGllckRhdGVfKTtcblxuICBjb25zdCBsYXRlclRpbWVzdGFtcCA9XG4gICAgK2xhdGVyU3RhcnRPZkRheSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMobGF0ZXJTdGFydE9mRGF5KTtcbiAgY29uc3QgZWFybGllclRpbWVzdGFtcCA9XG4gICAgK2VhcmxpZXJTdGFydE9mRGF5IC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhlYXJsaWVyU3RhcnRPZkRheSk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgYmVjYXVzZSB0aGUgbnVtYmVyIG9mXG4gIC8vIG1pbGxpc2Vjb25kcyBpbiBhIGRheSBpcyBub3QgY29uc3RhbnQgKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2ZcbiAgLy8gdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KS5cbiAgcmV0dXJuIE1hdGgucm91bmQoKGxhdGVyVGltZXN0YW1wIC0gZWFybGllclRpbWVzdGFtcCkgLyBtaWxsaXNlY29uZHNJbkRheSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzO1xuIiwKICAgICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgZ2V0SVNPV2Vla1llYXIgfSBmcm9tIFwiLi9nZXRJU09XZWVrWWVhci5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZklTT1dlZWsgfSBmcm9tIFwiLi9zdGFydE9mSVNPV2Vlay5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZklTT1dlZWtZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZklTT1dlZWtZZWFyXG4gKiBAY2F0ZWdvcnkgSVNPIFdlZWstTnVtYmVyaW5nIFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhbiBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyLFxuICogd2hpY2ggYWx3YXlzIHN0YXJ0cyAzIGRheXMgYmVmb3JlIHRoZSB5ZWFyJ3MgZmlyc3QgVGh1cnNkYXkuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhbiBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgMiBKdWx5IDIwMDU6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mSVNPV2Vla1llYXIobmV3IERhdGUoMjAwNSwgNiwgMikpXG4gKiAvLz0+IE1vbiBKYW4gMDMgMjAwNSAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZklTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgeWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICBjb25zdCBmb3VydGhPZkphbnVhcnkgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApO1xuICBmb3VydGhPZkphbnVhcnkuc2V0RnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIHN0YXJ0T2ZJU09XZWVrKGZvdXJ0aE9mSmFudWFyeSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZklTT1dlZWtZZWFyO1xuIiwKICAgICIvKipcbiAqIEBuYW1lIGlzRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSBkYXRlP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiBEYXRlLiBUaGUgZnVuY3Rpb24gd29ya3MgZm9yIGRhdGVzIHRyYW5zZmVycmVkIGFjcm9zcyBpZnJhbWVzLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgZGF0ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKCkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZShOYU4pKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBzb21lIHZhbHVlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKCcyMDE0LTAyLTMxJylcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGFuIG9iamVjdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSh7fSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBEYXRlXVwiKVxuICApO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzRGF0ZTtcbiIsCiAgICAiaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSBcIi4vaXNEYXRlLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBpc1ZhbGlkXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiBkYXRlIHZhbGlkP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBmYWxzZSBpZiBhcmd1bWVudCBpcyBJbnZhbGlkIERhdGUgYW5kIHRydWUgb3RoZXJ3aXNlLlxuICogQXJndW1lbnQgaXMgY29udmVydGVkIHRvIERhdGUgdXNpbmcgYHRvRGF0ZWAuIFNlZSBbdG9EYXRlXShodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3RvRGF0ZSlcbiAqIEludmFsaWQgRGF0ZSBpcyBhIERhdGUsIHdob3NlIHRpbWUgdmFsdWUgaXMgTmFOLlxuICpcbiAqIFRpbWUgdmFsdWUgb2YgRGF0ZTogaHR0cDovL2VzNS5naXRodWIuaW8vI3gxNS45LjEuMVxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF0ZSBpcyB2YWxpZFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKDIwMTQsIDEsIDMxKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIHZhbHVlLCBjb252ZXJ0aWJsZSBpbnRvIGEgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQoMTM5MzgwNDgwMDAwMClcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgdGhlIGludmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoJycpKVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZChkYXRlKSB7XG4gIHJldHVybiAhKCghaXNEYXRlKGRhdGUpICYmIHR5cGVvZiBkYXRlICE9PSBcIm51bWJlclwiKSB8fCBpc05hTigrdG9EYXRlKGRhdGUpKSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNWYWxpZDtcbiIsCiAgICAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdGFydE9mWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZZZWFyXG4gKiBAY2F0ZWdvcnkgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGEgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSB5ZWFyIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZlllYXIobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwMCkpXG4gKiAvLz0+IFdlZCBKYW4gMDEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZlllYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGRhdGVfLnNldEZ1bGxZZWFyKGRhdGVfLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICBkYXRlXy5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRhdGVfO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZZZWFyO1xuIiwKICAgICJjb25zdCBmb3JtYXREaXN0YW5jZUxvY2FsZSA9IHtcbiAgbGVzc1RoYW5YU2Vjb25kczoge1xuICAgIG9uZTogXCJsZXNzIHRoYW4gYSBzZWNvbmRcIixcbiAgICBvdGhlcjogXCJsZXNzIHRoYW4ge3tjb3VudH19IHNlY29uZHNcIixcbiAgfSxcblxuICB4U2Vjb25kczoge1xuICAgIG9uZTogXCIxIHNlY29uZFwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSBzZWNvbmRzXCIsXG4gIH0sXG5cbiAgaGFsZkFNaW51dGU6IFwiaGFsZiBhIG1pbnV0ZVwiLFxuXG4gIGxlc3NUaGFuWE1pbnV0ZXM6IHtcbiAgICBvbmU6IFwibGVzcyB0aGFuIGEgbWludXRlXCIsXG4gICAgb3RoZXI6IFwibGVzcyB0aGFuIHt7Y291bnR9fSBtaW51dGVzXCIsXG4gIH0sXG5cbiAgeE1pbnV0ZXM6IHtcbiAgICBvbmU6IFwiMSBtaW51dGVcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gbWludXRlc1wiLFxuICB9LFxuXG4gIGFib3V0WEhvdXJzOiB7XG4gICAgb25lOiBcImFib3V0IDEgaG91clwiLFxuICAgIG90aGVyOiBcImFib3V0IHt7Y291bnR9fSBob3Vyc1wiLFxuICB9LFxuXG4gIHhIb3Vyczoge1xuICAgIG9uZTogXCIxIGhvdXJcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gaG91cnNcIixcbiAgfSxcblxuICB4RGF5czoge1xuICAgIG9uZTogXCIxIGRheVwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSBkYXlzXCIsXG4gIH0sXG5cbiAgYWJvdXRYV2Vla3M6IHtcbiAgICBvbmU6IFwiYWJvdXQgMSB3ZWVrXCIsXG4gICAgb3RoZXI6IFwiYWJvdXQge3tjb3VudH19IHdlZWtzXCIsXG4gIH0sXG5cbiAgeFdlZWtzOiB7XG4gICAgb25lOiBcIjEgd2Vla1wiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSB3ZWVrc1wiLFxuICB9LFxuXG4gIGFib3V0WE1vbnRoczoge1xuICAgIG9uZTogXCJhYm91dCAxIG1vbnRoXCIsXG4gICAgb3RoZXI6IFwiYWJvdXQge3tjb3VudH19IG1vbnRoc1wiLFxuICB9LFxuXG4gIHhNb250aHM6IHtcbiAgICBvbmU6IFwiMSBtb250aFwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSBtb250aHNcIixcbiAgfSxcblxuICBhYm91dFhZZWFyczoge1xuICAgIG9uZTogXCJhYm91dCAxIHllYXJcIixcbiAgICBvdGhlcjogXCJhYm91dCB7e2NvdW50fX0geWVhcnNcIixcbiAgfSxcblxuICB4WWVhcnM6IHtcbiAgICBvbmU6IFwiMSB5ZWFyXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IHllYXJzXCIsXG4gIH0sXG5cbiAgb3ZlclhZZWFyczoge1xuICAgIG9uZTogXCJvdmVyIDEgeWVhclwiLFxuICAgIG90aGVyOiBcIm92ZXIge3tjb3VudH19IHllYXJzXCIsXG4gIH0sXG5cbiAgYWxtb3N0WFllYXJzOiB7XG4gICAgb25lOiBcImFsbW9zdCAxIHllYXJcIixcbiAgICBvdGhlcjogXCJhbG1vc3Qge3tjb3VudH19IHllYXJzXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RGlzdGFuY2UgPSAodG9rZW4sIGNvdW50LCBvcHRpb25zKSA9PiB7XG4gIGxldCByZXN1bHQ7XG5cbiAgY29uc3QgdG9rZW5WYWx1ZSA9IGZvcm1hdERpc3RhbmNlTG9jYWxlW3Rva2VuXTtcbiAgaWYgKHR5cGVvZiB0b2tlblZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZTtcbiAgfSBlbHNlIGlmIChjb3VudCA9PT0gMSkge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZShcInt7Y291bnR9fVwiLCBjb3VudC50b1N0cmluZygpKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zPy5hZGRTdWZmaXgpIHtcbiAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHtcbiAgICAgIHJldHVybiBcImluIFwiICsgcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgXCIgYWdvXCI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBidWlsZEZvcm1hdExvbmdGbihhcmdzKSB7XG4gIHJldHVybiAob3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgLy8gVE9ETzogUmVtb3ZlIFN0cmluZygpXG4gICAgY29uc3Qgd2lkdGggPSBvcHRpb25zLndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgY29uc3QgZm9ybWF0ID0gYXJncy5mb3JtYXRzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHNbYXJncy5kZWZhdWx0V2lkdGhdO1xuICAgIHJldHVybiBmb3JtYXQ7XG4gIH07XG59XG4iLAogICAgImltcG9ydCB7IGJ1aWxkRm9ybWF0TG9uZ0ZuIH0gZnJvbSBcIi4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4uanNcIjtcblxuY29uc3QgZGF0ZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwiRUVFRSwgTU1NTSBkbywgeVwiLFxuICBsb25nOiBcIk1NTU0gZG8sIHlcIixcbiAgbWVkaXVtOiBcIk1NTSBkLCB5XCIsXG4gIHNob3J0OiBcIk1NL2RkL3l5eXlcIixcbn07XG5cbmNvbnN0IHRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiBcImg6bW06c3MgYSB6enp6XCIsXG4gIGxvbmc6IFwiaDptbTpzcyBhIHpcIixcbiAgbWVkaXVtOiBcImg6bW06c3MgYVwiLFxuICBzaG9ydDogXCJoOm1tIGFcIixcbn07XG5cbmNvbnN0IGRhdGVUaW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIGxvbmc6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBtZWRpdW06IFwie3tkYXRlfX0sIHt7dGltZX19XCIsXG4gIHNob3J0OiBcInt7ZGF0ZX19LCB7e3RpbWV9fVwiLFxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdExvbmcgPSB7XG4gIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6IFwiZnVsbFwiLFxuICB9KSxcblxuICB0aW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogdGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiBcImZ1bGxcIixcbiAgfSksXG5cbiAgZGF0ZVRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiBkYXRlVGltZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiBcImZ1bGxcIixcbiAgfSksXG59O1xuIiwKICAgICJjb25zdCBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHtcbiAgbGFzdFdlZWs6IFwiJ2xhc3QnIGVlZWUgJ2F0JyBwXCIsXG4gIHllc3RlcmRheTogXCIneWVzdGVyZGF5IGF0JyBwXCIsXG4gIHRvZGF5OiBcIid0b2RheSBhdCcgcFwiLFxuICB0b21vcnJvdzogXCIndG9tb3Jyb3cgYXQnIHBcIixcbiAgbmV4dFdlZWs6IFwiZWVlZSAnYXQnIHBcIixcbiAgb3RoZXI6IFwiUFwiLFxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFJlbGF0aXZlID0gKHRva2VuLCBfZGF0ZSwgX2Jhc2VEYXRlLCBfb3B0aW9ucykgPT5cbiAgZm9ybWF0UmVsYXRpdmVMb2NhbGVbdG9rZW5dO1xuIiwKICAgICIvKipcbiAqIFRoZSBsb2NhbGl6ZSBmdW5jdGlvbiBhcmd1bWVudCBjYWxsYmFjayB3aGljaCBhbGxvd3MgdG8gY29udmVydCByYXcgdmFsdWUgdG9cbiAqIHRoZSBhY3R1YWwgdHlwZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY29udmVydFxuICpcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgdmFsdWVcbiAqL1xuXG4vKipcbiAqIFRoZSBtYXAgb2YgbG9jYWxpemVkIHZhbHVlcyBmb3IgZWFjaCB3aWR0aC5cbiAqL1xuXG4vKipcbiAqIFRoZSBpbmRleCB0eXBlIG9mIHRoZSBsb2NhbGUgdW5pdCB2YWx1ZS4gSXQgdHlwZXMgY29udmVyc2lvbiBvZiB1bml0cyBvZlxuICogdmFsdWVzIHRoYXQgZG9uJ3Qgc3RhcnQgYXQgMCAoaS5lLiBxdWFydGVycykuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgdW5pdCB2YWx1ZSB0byB0aGUgdHVwbGUgb2YgdmFsdWVzLlxuICovXG5cbi8qKlxuICogVGhlIHR1cGxlIG9mIGxvY2FsaXplZCBlcmEgdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIEJDLFxuICogdGhlIHNlY29uZCBlbGVtZW50IHJlcHJlc2VudHMgQUQuXG4gKi9cblxuLyoqXG4gKiBUaGUgdHVwbGUgb2YgbG9jYWxpemVkIHF1YXJ0ZXIgdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIFExLlxuICovXG5cbi8qKlxuICogVGhlIHR1cGxlIG9mIGxvY2FsaXplZCBkYXkgdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIFN1bmRheS5cbiAqL1xuXG4vKipcbiAqIFRoZSB0dXBsZSBvZiBsb2NhbGl6ZWQgbW9udGggdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIEphbnVhcnkuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gb3B0aW9ucz8uY29udGV4dCA/IFN0cmluZyhvcHRpb25zLmNvbnRleHQpIDogXCJzdGFuZGFsb25lXCI7XG5cbiAgICBsZXQgdmFsdWVzQXJyYXk7XG4gICAgaWYgKGNvbnRleHQgPT09IFwiZm9ybWF0dGluZ1wiICYmIGFyZ3MuZm9ybWF0dGluZ1ZhbHVlcykge1xuICAgICAgY29uc3QgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgY29uc3Qgd2lkdGggPSBvcHRpb25zPy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcblxuICAgICAgdmFsdWVzQXJyYXkgPVxuICAgICAgICBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucz8ud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcblxuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLnZhbHVlc1t3aWR0aF0gfHwgYXJncy52YWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sgPyBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufVxuIiwKICAgICJpbXBvcnQgeyBidWlsZExvY2FsaXplRm4gfSBmcm9tIFwiLi4vLi4vX2xpYi9idWlsZExvY2FsaXplRm4uanNcIjtcblxuY29uc3QgZXJhVmFsdWVzID0ge1xuICBuYXJyb3c6IFtcIkJcIiwgXCJBXCJdLFxuICBhYmJyZXZpYXRlZDogW1wiQkNcIiwgXCJBRFwiXSxcbiAgd2lkZTogW1wiQmVmb3JlIENocmlzdFwiLCBcIkFubm8gRG9taW5pXCJdLFxufTtcblxuY29uc3QgcXVhcnRlclZhbHVlcyA9IHtcbiAgbmFycm93OiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCJdLFxuICBhYmJyZXZpYXRlZDogW1wiUTFcIiwgXCJRMlwiLCBcIlEzXCIsIFwiUTRcIl0sXG4gIHdpZGU6IFtcIjFzdCBxdWFydGVyXCIsIFwiMm5kIHF1YXJ0ZXJcIiwgXCIzcmQgcXVhcnRlclwiLCBcIjR0aCBxdWFydGVyXCJdLFxufTtcblxuLy8gTm90ZTogaW4gRW5nbGlzaCwgdGhlIG5hbWVzIG9mIGRheXMgb2YgdGhlIHdlZWsgYW5kIG1vbnRocyBhcmUgY2FwaXRhbGl6ZWQuXG4vLyBJZiB5b3UgYXJlIG1ha2luZyBhIG5ldyBsb2NhbGUgYmFzZWQgb24gdGhpcyBvbmUsIGNoZWNrIGlmIHRoZSBzYW1lIGlzIHRydWUgZm9yIHRoZSBsYW5ndWFnZSB5b3UncmUgd29ya2luZyBvbi5cbi8vIEdlbmVyYWxseSwgZm9ybWF0dGVkIGRhdGVzIHNob3VsZCBsb29rIGxpa2UgdGhleSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIHNlbnRlbmNlLFxuLy8gZS5nLiBpbiBTcGFuaXNoIGxhbmd1YWdlIHRoZSB3ZWVrZGF5cyBhbmQgbW9udGhzIHNob3VsZCBiZSBpbiB0aGUgbG93ZXJjYXNlLlxuY29uc3QgbW9udGhWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1wiSlwiLCBcIkZcIiwgXCJNXCIsIFwiQVwiLCBcIk1cIiwgXCJKXCIsIFwiSlwiLCBcIkFcIiwgXCJTXCIsIFwiT1wiLCBcIk5cIiwgXCJEXCJdLFxuICBhYmJyZXZpYXRlZDogW1xuICAgIFwiSmFuXCIsXG4gICAgXCJGZWJcIixcbiAgICBcIk1hclwiLFxuICAgIFwiQXByXCIsXG4gICAgXCJNYXlcIixcbiAgICBcIkp1blwiLFxuICAgIFwiSnVsXCIsXG4gICAgXCJBdWdcIixcbiAgICBcIlNlcFwiLFxuICAgIFwiT2N0XCIsXG4gICAgXCJOb3ZcIixcbiAgICBcIkRlY1wiLFxuICBdLFxuXG4gIHdpZGU6IFtcbiAgICBcIkphbnVhcnlcIixcbiAgICBcIkZlYnJ1YXJ5XCIsXG4gICAgXCJNYXJjaFwiLFxuICAgIFwiQXByaWxcIixcbiAgICBcIk1heVwiLFxuICAgIFwiSnVuZVwiLFxuICAgIFwiSnVseVwiLFxuICAgIFwiQXVndXN0XCIsXG4gICAgXCJTZXB0ZW1iZXJcIixcbiAgICBcIk9jdG9iZXJcIixcbiAgICBcIk5vdmVtYmVyXCIsXG4gICAgXCJEZWNlbWJlclwiLFxuICBdLFxufTtcblxuY29uc3QgZGF5VmFsdWVzID0ge1xuICBuYXJyb3c6IFtcIlNcIiwgXCJNXCIsIFwiVFwiLCBcIldcIiwgXCJUXCIsIFwiRlwiLCBcIlNcIl0sXG4gIHNob3J0OiBbXCJTdVwiLCBcIk1vXCIsIFwiVHVcIiwgXCJXZVwiLCBcIlRoXCIsIFwiRnJcIiwgXCJTYVwiXSxcbiAgYWJicmV2aWF0ZWQ6IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXSxcbiAgd2lkZTogW1xuICAgIFwiU3VuZGF5XCIsXG4gICAgXCJNb25kYXlcIixcbiAgICBcIlR1ZXNkYXlcIixcbiAgICBcIldlZG5lc2RheVwiLFxuICAgIFwiVGh1cnNkYXlcIixcbiAgICBcIkZyaWRheVwiLFxuICAgIFwiU2F0dXJkYXlcIixcbiAgXSxcbn07XG5cbmNvbnN0IGRheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06IFwiYVwiLFxuICAgIHBtOiBcInBcIixcbiAgICBtaWRuaWdodDogXCJtaVwiLFxuICAgIG5vb246IFwiblwiLFxuICAgIG1vcm5pbmc6IFwibW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJhZnRlcm5vb25cIixcbiAgICBldmVuaW5nOiBcImV2ZW5pbmdcIixcbiAgICBuaWdodDogXCJuaWdodFwiLFxuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiBcIkFNXCIsXG4gICAgcG06IFwiUE1cIixcbiAgICBtaWRuaWdodDogXCJtaWRuaWdodFwiLFxuICAgIG5vb246IFwibm9vblwiLFxuICAgIG1vcm5pbmc6IFwibW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJhZnRlcm5vb25cIixcbiAgICBldmVuaW5nOiBcImV2ZW5pbmdcIixcbiAgICBuaWdodDogXCJuaWdodFwiLFxuICB9LFxuICB3aWRlOiB7XG4gICAgYW06IFwiYS5tLlwiLFxuICAgIHBtOiBcInAubS5cIixcbiAgICBtaWRuaWdodDogXCJtaWRuaWdodFwiLFxuICAgIG5vb246IFwibm9vblwiLFxuICAgIG1vcm5pbmc6IFwibW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJhZnRlcm5vb25cIixcbiAgICBldmVuaW5nOiBcImV2ZW5pbmdcIixcbiAgICBuaWdodDogXCJuaWdodFwiLFxuICB9LFxufTtcblxuY29uc3QgZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyA9IHtcbiAgbmFycm93OiB7XG4gICAgYW06IFwiYVwiLFxuICAgIHBtOiBcInBcIixcbiAgICBtaWRuaWdodDogXCJtaVwiLFxuICAgIG5vb246IFwiblwiLFxuICAgIG1vcm5pbmc6IFwiaW4gdGhlIG1vcm5pbmdcIixcbiAgICBhZnRlcm5vb246IFwiaW4gdGhlIGFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiaW4gdGhlIGV2ZW5pbmdcIixcbiAgICBuaWdodDogXCJhdCBuaWdodFwiLFxuICB9LFxuICBhYmJyZXZpYXRlZDoge1xuICAgIGFtOiBcIkFNXCIsXG4gICAgcG06IFwiUE1cIixcbiAgICBtaWRuaWdodDogXCJtaWRuaWdodFwiLFxuICAgIG5vb246IFwibm9vblwiLFxuICAgIG1vcm5pbmc6IFwiaW4gdGhlIG1vcm5pbmdcIixcbiAgICBhZnRlcm5vb246IFwiaW4gdGhlIGFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiaW4gdGhlIGV2ZW5pbmdcIixcbiAgICBuaWdodDogXCJhdCBuaWdodFwiLFxuICB9LFxuICB3aWRlOiB7XG4gICAgYW06IFwiYS5tLlwiLFxuICAgIHBtOiBcInAubS5cIixcbiAgICBtaWRuaWdodDogXCJtaWRuaWdodFwiLFxuICAgIG5vb246IFwibm9vblwiLFxuICAgIG1vcm5pbmc6IFwiaW4gdGhlIG1vcm5pbmdcIixcbiAgICBhZnRlcm5vb246IFwiaW4gdGhlIGFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiaW4gdGhlIGV2ZW5pbmdcIixcbiAgICBuaWdodDogXCJhdCBuaWdodFwiLFxuICB9LFxufTtcblxuY29uc3Qgb3JkaW5hbE51bWJlciA9IChkaXJ0eU51bWJlciwgX29wdGlvbnMpID0+IHtcbiAgY29uc3QgbnVtYmVyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTtcblxuICAvLyBJZiBvcmRpbmFsIG51bWJlcnMgZGVwZW5kIG9uIGNvbnRleHQsIGZvciBleGFtcGxlLFxuICAvLyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCBncmFtbWF0aWNhbCBnZW5kZXJzLFxuICAvLyB1c2UgYG9wdGlvbnMudW5pdGAuXG4gIC8vXG4gIC8vIGB1bml0YCBjYW4gYmUgJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RhdGUnLCAnZGF5T2ZZZWFyJyxcbiAgLy8gJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLlxuXG4gIGNvbnN0IHJlbTEwMCA9IG51bWJlciAlIDEwMDtcbiAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7XG4gICAgc3dpdGNoIChyZW0xMDAgJSAxMCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgXCJzdFwiO1xuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgXCJuZFwiO1xuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gbnVtYmVyICsgXCJyZFwiO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyICsgXCJ0aFwiO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvY2FsaXplID0ge1xuICBvcmRpbmFsTnVtYmVyLFxuXG4gIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGVyYVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICB9KSxcblxuICBxdWFydGVyOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogcXVhcnRlclZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICAgIGFyZ3VtZW50Q2FsbGJhY2s6IChxdWFydGVyKSA9PiBxdWFydGVyIC0gMSxcbiAgfSksXG5cbiAgbW9udGg6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBtb250aFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICB9KSxcblxuICBkYXk6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiBcIndpZGVcIixcbiAgfSksXG5cbiAgZGF5UGVyaW9kOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gICAgZm9ybWF0dGluZ1ZhbHVlczogZm9ybWF0dGluZ0RheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0Rm9ybWF0dGluZ1dpZHRoOiBcIndpZGVcIixcbiAgfSksXG59O1xuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIChzdHJpbmcsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucy53aWR0aDtcblxuICAgIGNvbnN0IG1hdGNoUGF0dGVybiA9XG4gICAgICAod2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSkgfHxcbiAgICAgIGFyZ3MubWF0Y2hQYXR0ZXJuc1thcmdzLmRlZmF1bHRNYXRjaFdpZHRoXTtcbiAgICBjb25zdCBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChtYXRjaFBhdHRlcm4pO1xuXG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcblxuICAgIGNvbnN0IHBhcnNlUGF0dGVybnMgPVxuICAgICAgKHdpZHRoICYmIGFyZ3MucGFyc2VQYXR0ZXJuc1t3aWR0aF0pIHx8XG4gICAgICBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07XG5cbiAgICBjb25zdCBrZXkgPSBBcnJheS5pc0FycmF5KHBhcnNlUGF0dGVybnMpXG4gICAgICA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCAocGF0dGVybikgPT4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpKVxuICAgICAgOiAvLyBbVE9ET10gLS0gSSBjaGFsbGVuZ2UgeW91IHRvIGZpeCB0aGUgdHlwZVxuICAgICAgICBmaW5kS2V5KHBhcnNlUGF0dGVybnMsIChwYXR0ZXJuKSA9PiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZykpO1xuXG4gICAgbGV0IHZhbHVlO1xuXG4gICAgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2soa2V5KSA6IGtleTtcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFja1xuICAgICAgPyAvLyBbVE9ET10gLS0gSSBjaGFsbGVuZ2UgeW91IHRvIGZpeCB0aGUgdHlwZVxuICAgICAgICBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpXG4gICAgICA6IHZhbHVlO1xuXG4gICAgY29uc3QgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG5cbiAgICByZXR1cm4geyB2YWx1ZSwgcmVzdCB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xuICAgIGlmIChcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiZcbiAgICAgIHByZWRpY2F0ZShvYmplY3Rba2V5XSlcbiAgICApIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlKSB7XG4gIGZvciAobGV0IGtleSA9IDA7IGtleSA8IGFycmF5Lmxlbmd0aDsga2V5KyspIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2tleV0pKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gYnVpbGRNYXRjaFBhdHRlcm5GbihhcmdzKSB7XG4gIHJldHVybiAoc3RyaW5nLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLm1hdGNoUGF0dGVybik7XG4gICAgaWYgKCFtYXRjaFJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuXG4gICAgY29uc3QgcGFyc2VSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5wYXJzZVBhdHRlcm4pO1xuICAgIGlmICghcGFyc2VSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIGxldCB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFja1xuICAgICAgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pXG4gICAgICA6IHBhcnNlUmVzdWx0WzBdO1xuXG4gICAgLy8gW1RPRE9dIEkgY2hhbGxlbmdlIHlvdSB0byBmaXggdGhlIHR5cGVcbiAgICB2YWx1ZSA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/IG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgIGNvbnN0IHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuXG4gICAgcmV0dXJuIHsgdmFsdWUsIHJlc3QgfTtcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IHsgYnVpbGRNYXRjaEZuIH0gZnJvbSBcIi4uLy4uL19saWIvYnVpbGRNYXRjaEZuLmpzXCI7XG5pbXBvcnQgeyBidWlsZE1hdGNoUGF0dGVybkZuIH0gZnJvbSBcIi4uLy4uL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi5qc1wiO1xuXG5jb25zdCBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXFxkKykodGh8c3R8bmR8cmQpPy9pO1xuY29uc3QgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9cXGQrL2k7XG5cbmNvbnN0IG1hdGNoRXJhUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYnxhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oYlxcLj9cXHM/Y1xcLj98YlxcLj9cXHM/Y1xcLj9cXHM/ZVxcLj98YVxcLj9cXHM/ZFxcLj98Y1xcLj9cXHM/ZVxcLj8pL2ksXG4gIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaSxcbn07XG5jb25zdCBwYXJzZUVyYVBhdHRlcm5zID0ge1xuICBhbnk6IFsvXmIvaSwgL14oYXxjKS9pXSxcbn07XG5cbmNvbnN0IG1hdGNoUXVhcnRlclBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eWzEyMzRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXnFbMTIzNF0vaSxcbiAgd2lkZTogL15bMTIzNF0odGh8c3R8bmR8cmQpPyBxdWFydGVyL2ksXG59O1xuY29uc3QgcGFyc2VRdWFydGVyUGF0dGVybnMgPSB7XG4gIGFueTogWy8xL2ksIC8yL2ksIC8zL2ksIC80L2ldLFxufTtcblxuY29uc3QgbWF0Y2hNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW2pmbWFzb25kXS9pLFxuICBhYmJyZXZpYXRlZDogL14oamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpL2ksXG4gIHdpZGU6IC9eKGphbnVhcnl8ZmVicnVhcnl8bWFyY2h8YXByaWx8bWF5fGp1bmV8anVseXxhdWd1c3R8c2VwdGVtYmVyfG9jdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksXG59O1xuY29uc3QgcGFyc2VNb250aFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFtcbiAgICAvXmovaSxcbiAgICAvXmYvaSxcbiAgICAvXm0vaSxcbiAgICAvXmEvaSxcbiAgICAvXm0vaSxcbiAgICAvXmovaSxcbiAgICAvXmovaSxcbiAgICAvXmEvaSxcbiAgICAvXnMvaSxcbiAgICAvXm8vaSxcbiAgICAvXm4vaSxcbiAgICAvXmQvaSxcbiAgXSxcblxuICBhbnk6IFtcbiAgICAvXmphL2ksXG4gICAgL15mL2ksXG4gICAgL15tYXIvaSxcbiAgICAvXmFwL2ksXG4gICAgL15tYXkvaSxcbiAgICAvXmp1bi9pLFxuICAgIC9eanVsL2ksXG4gICAgL15hdS9pLFxuICAgIC9ecy9pLFxuICAgIC9eby9pLFxuICAgIC9ebi9pLFxuICAgIC9eZC9pLFxuICBdLFxufTtcblxuY29uc3QgbWF0Y2hEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltzbXR3Zl0vaSxcbiAgc2hvcnQ6IC9eKHN1fG1vfHR1fHdlfHRofGZyfHNhKS9pLFxuICBhYmJyZXZpYXRlZDogL14oc3VufG1vbnx0dWV8d2VkfHRodXxmcml8c2F0KS9pLFxuICB3aWRlOiAvXihzdW5kYXl8bW9uZGF5fHR1ZXNkYXl8d2VkbmVzZGF5fHRodXJzZGF5fGZyaWRheXxzYXR1cmRheSkvaSxcbn07XG5jb25zdCBwYXJzZURheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IFsvXnMvaSwgL15tL2ksIC9edC9pLCAvXncvaSwgL150L2ksIC9eZi9pLCAvXnMvaV0sXG4gIGFueTogWy9ec3UvaSwgL15tL2ksIC9edHUvaSwgL153L2ksIC9edGgvaSwgL15mL2ksIC9ec2EvaV0sXG59O1xuXG5jb25zdCBtYXRjaERheVBlcmlvZFBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGF8cHxtaXxufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSxcbiAgYW55OiAvXihbYXBdXFwuP1xccz9tXFwuP3xtaWRuaWdodHxub29ufChpbiB0aGV8YXQpIChtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0KSkvaSxcbn07XG5jb25zdCBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0ge1xuICBhbnk6IHtcbiAgICBhbTogL15hL2ksXG4gICAgcG06IC9ecC9pLFxuICAgIG1pZG5pZ2h0OiAvXm1pL2ksXG4gICAgbm9vbjogL15uby9pLFxuICAgIG1vcm5pbmc6IC9tb3JuaW5nL2ksXG4gICAgYWZ0ZXJub29uOiAvYWZ0ZXJub29uL2ksXG4gICAgZXZlbmluZzogL2V2ZW5pbmcvaSxcbiAgICBuaWdodDogL25pZ2h0L2ksXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgbWF0Y2ggPSB7XG4gIG9yZGluYWxOdW1iZXI6IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oe1xuICAgIG1hdGNoUGF0dGVybjogbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICBwYXJzZVBhdHRlcm46IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgdmFsdWVDYWxsYmFjazogKHZhbHVlKSA9PiBwYXJzZUludCh2YWx1ZSwgMTApLFxuICB9KSxcblxuICBlcmE6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJ3aWRlXCIsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VFcmFQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgfSksXG5cbiAgcXVhcnRlcjogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJ3aWRlXCIsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gICAgdmFsdWVDYWxsYmFjazogKGluZGV4KSA9PiBpbmRleCArIDEsXG4gIH0pLFxuXG4gIG1vbnRoOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJ3aWRlXCIsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICB9KSxcblxuICBkYXk6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJ3aWRlXCIsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgfSksXG5cbiAgZGF5UGVyaW9kOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwiYW55XCIsXG4gICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgfSksXG59O1xuIiwKICAgICJpbXBvcnQgeyBmb3JtYXREaXN0YW5jZSB9IGZyb20gXCIuL2VuLVVTL19saWIvZm9ybWF0RGlzdGFuY2UuanNcIjtcbmltcG9ydCB7IGZvcm1hdExvbmcgfSBmcm9tIFwiLi9lbi1VUy9fbGliL2Zvcm1hdExvbmcuanNcIjtcbmltcG9ydCB7IGZvcm1hdFJlbGF0aXZlIH0gZnJvbSBcIi4vZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS5qc1wiO1xuaW1wb3J0IHsgbG9jYWxpemUgfSBmcm9tIFwiLi9lbi1VUy9fbGliL2xvY2FsaXplLmpzXCI7XG5pbXBvcnQgeyBtYXRjaCB9IGZyb20gXCIuL2VuLVVTL19saWIvbWF0Y2guanNcIjtcblxuLyoqXG4gKiBAY2F0ZWdvcnkgTG9jYWxlc1xuICogQHN1bW1hcnkgRW5nbGlzaCBsb2NhbGUgKFVuaXRlZCBTdGF0ZXMpLlxuICogQGxhbmd1YWdlIEVuZ2xpc2hcbiAqIEBpc28tNjM5LTIgZW5nXG4gKiBAYXV0aG9yIFNhc2hhIEtvc3MgW0Brb3Nzbm9jb3JwXShodHRwczovL2dpdGh1Yi5jb20va29zc25vY29ycClcbiAqIEBhdXRob3IgTGVzaGEgS29zcyBbQGxlc2hha29zc10oaHR0cHM6Ly9naXRodWIuY29tL2xlc2hha29zcylcbiAqL1xuZXhwb3J0IGNvbnN0IGVuVVMgPSB7XG4gIGNvZGU6IFwiZW4tVVNcIixcbiAgZm9ybWF0RGlzdGFuY2U6IGZvcm1hdERpc3RhbmNlLFxuICBmb3JtYXRMb25nOiBmb3JtYXRMb25nLFxuICBmb3JtYXRSZWxhdGl2ZTogZm9ybWF0UmVsYXRpdmUsXG4gIGxvY2FsaXplOiBsb2NhbGl6ZSxcbiAgbWF0Y2g6IG1hdGNoLFxuICBvcHRpb25zOiB7XG4gICAgd2Vla1N0YXJ0c09uOiAwIC8qIFN1bmRheSAqLyxcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDEsXG4gIH0sXG59O1xuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGVuVVM7XG4iLAogICAgImltcG9ydCB7IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cy5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZlllYXIgfSBmcm9tIFwiLi9zdGFydE9mWWVhci5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBnZXREYXlPZlllYXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBnZXREYXlPZlllYXJcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBkYXkgb2YgdGhlIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIGRheSBvZiB0aGUgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGRheSBvZiB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIGRheSBvZiB0aGUgeWVhciBpcyAyIEp1bHkgMjAxND9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldERheU9mWWVhcihuZXcgRGF0ZSgyMDE0LCA2LCAyKSlcbiAqIC8vPT4gMTgzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlPZlllYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoX2RhdGUsIHN0YXJ0T2ZZZWFyKF9kYXRlKSk7XG4gIGNvbnN0IGRheU9mWWVhciA9IGRpZmYgKyAxO1xuICByZXR1cm4gZGF5T2ZZZWFyO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldERheU9mWWVhcjtcbiIsCiAgICAiaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5XZWVrIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mSVNPV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZJU09XZWVrLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mSVNPV2Vla1llYXIgfSBmcm9tIFwiLi9zdGFydE9mSVNPV2Vla1llYXIuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0SVNPV2Vla30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldElTT1dlZWtcbiAqIEBjYXRlZ29yeSBJU08gV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIElTTyB3ZWVrIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBJU08gd2VlayBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBJU08gd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG9mIHRoZSBJU08td2VlayBudW1iZXJpbmcgeWVhciBpcyAyIEphbnVhcnkgMjAwNT9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldElTT1dlZWsobmV3IERhdGUoMjAwNSwgMCwgMikpXG4gKiAvLz0+IDUzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJU09XZWVrKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCBkaWZmID0gK3N0YXJ0T2ZJU09XZWVrKF9kYXRlKSAtICtzdGFydE9mSVNPV2Vla1llYXIoX2RhdGUpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2Ygd2Vla3MgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciBiZWNhdXNlIHRoZSBudW1iZXIgb2ZcbiAgLy8gbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnQgKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2ZcbiAgLy8gdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KS5cbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2VlaykgKyAxO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldElTT1dlZWs7XG4iLAogICAgImltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZXZWVrIH0gZnJvbSBcIi4vc3RhcnRPZldlZWsuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0V2Vla1llYXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBnZXRXZWVrWWVhclxuICogQGNhdGVnb3J5IFdlZWstTnVtYmVyaW5nIFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIGV4YWN0IGNhbGN1bGF0aW9uIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZlxuICogYG9wdGlvbnMud2Vla1N0YXJ0c09uYCAod2hpY2ggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWspXG4gKiBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAod2hpY2ggaXMgdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpcyBhbHdheXMgaW5cbiAqIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyKVxuICpcbiAqIFdlZWsgbnVtYmVyaW5nOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWVrI1RoZV9JU09fd2Vla19kYXRlX3N5c3RlbVxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDI2IERlY2VtYmVyIDIwMDQgd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5ncz9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldFdlZWtZZWFyKG5ldyBEYXRlKDIwMDQsIDExLCAyNikpXG4gKiAvLz0+IDIwMDVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggd2VlayBudW1iZXJpbmcgeWVhciBpcyAyNiBEZWNlbWJlciAyMDA0IGlmIHdlZWsgc3RhcnRzIG9uIFNhdHVyZGF5P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2Vla1llYXIobmV3IERhdGUoMjAwNCwgMTEsIDI2KSwgeyB3ZWVrU3RhcnRzT246IDYgfSlcbiAqIC8vPT4gMjAwNFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDI2IERlY2VtYmVyIDIwMDQgaWYgdGhlIGZpcnN0IHdlZWsgY29udGFpbnMgNCBKYW51YXJ5P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2Vla1llYXIobmV3IERhdGUoMjAwNCwgMTEsIDI2KSwgeyBmaXJzdFdlZWtDb250YWluc0RhdGU6IDQgfSlcbiAqIC8vPT4gMjAwNFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vla1llYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID1cbiAgICBvcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgMTtcblxuICBjb25zdCBmaXJzdFdlZWtPZk5leHRZZWFyID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRGdWxsWWVhcih5ZWFyICsgMSwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgY29uc3Qgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgb3B0aW9ucyk7XG5cbiAgY29uc3QgZmlyc3RXZWVrT2ZUaGlzWWVhciA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0RnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgY29uc3Qgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG5cbiAgaWYgKCtfZGF0ZSA+PSArc3RhcnRPZk5leHRZZWFyKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKCtfZGF0ZSA+PSArc3RhcnRPZlRoaXNZZWFyKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0V2Vla1llYXI7XG4iLAogICAgImltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IGdldFdlZWtZZWFyIH0gZnJvbSBcIi4vZ2V0V2Vla1llYXIuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZXZWVrIH0gZnJvbSBcIi4vc3RhcnRPZldlZWsuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN0YXJ0T2ZXZWVrWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZXZWVrWWVhclxuICogQGNhdGVnb3J5IFdlZWstTnVtYmVyaW5nIFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiBUaGUgZXhhY3QgY2FsY3VsYXRpb24gZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mXG4gKiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gICh3aGljaCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlaylcbiAqIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgICh3aGljaCBpcyB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzIGFsd2F5cyBpblxuICogdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIpXG4gKlxuICogV2VlayBudW1iZXJpbmc6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlZWsjVGhlX0lTT193ZWVrX2RhdGVfc3lzdGVtXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGFuIGEgd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgMiBKdWx5IDIwMDUgd2l0aCBkZWZhdWx0IHNldHRpbmdzOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZldlZWtZZWFyKG5ldyBEYXRlKDIwMDUsIDYsIDIpKVxuICogLy89PiBTdW4gRGVjIDI2IDIwMDQgMDA6MDA6MDBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGEgd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgMiBKdWx5IDIwMDVcbiAqIC8vIGlmIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHdlZWtcbiAqIC8vIGFuZCA0IEphbnVhcnkgaXMgYWx3YXlzIGluIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZldlZWtZZWFyKG5ldyBEYXRlKDIwMDUsIDYsIDIpLCB7XG4gKiAgIHdlZWtTdGFydHNPbjogMSxcbiAqICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiA0XG4gKiB9KVxuICogLy89PiBNb24gSmFuIDAzIDIwMDUgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZXZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID1cbiAgICBvcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgMTtcblxuICBjb25zdCB5ZWFyID0gZ2V0V2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7XG4gIGNvbnN0IGZpcnN0V2VlayA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7XG4gIGZpcnN0V2Vlay5zZXRGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWsuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIGNvbnN0IF9kYXRlID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrLCBvcHRpb25zKTtcbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZXZWVrWWVhcjtcbiIsCiAgICAiaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5XZWVrIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZXZWVrLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mV2Vla1llYXIgfSBmcm9tIFwiLi9zdGFydE9mV2Vla1llYXIuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0V2Vla30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldFdlZWtcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbG9jYWwgd2VlayBpbmRleCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbG9jYWwgd2VlayBpbmRleCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSBleGFjdCBjYWxjdWxhdGlvbiBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2ZcbiAqIGBvcHRpb25zLndlZWtTdGFydHNPbmAgKHdoaWNoIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrKVxuICogYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKHdoaWNoIGlzIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXMgYWx3YXlzIGluXG4gKiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhcilcbiAqXG4gKiBXZWVrIG51bWJlcmluZzogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2VlayNUaGVfSVNPX3dlZWtfZGF0ZV9zeXN0ZW1cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG9mIHRoZSBsb2NhbCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDIgSmFudWFyeSAyMDA1IHdpdGggZGVmYXVsdCBvcHRpb25zP1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2VlayhuZXcgRGF0ZSgyMDA1LCAwLCAyKSlcbiAqIC8vPT4gMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG9mIHRoZSBsb2NhbCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDIgSmFudWFyeSAyMDA1LFxuICogLy8gaWYgTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssXG4gKiAvLyBhbmQgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIgYWx3YXlzIGNvbnRhaW5zIDQgSmFudWFyeT9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldFdlZWsobmV3IERhdGUoMjAwNSwgMCwgMiksIHtcbiAqICAgd2Vla1N0YXJ0c09uOiAxLFxuICogICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDRcbiAqIH0pXG4gKiAvLz0+IDUzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWVrKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCBkaWZmID0gK3N0YXJ0T2ZXZWVrKF9kYXRlLCBvcHRpb25zKSAtICtzdGFydE9mV2Vla1llYXIoX2RhdGUsIG9wdGlvbnMpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2Ygd2Vla3MgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciBiZWNhdXNlIHRoZSBudW1iZXIgb2ZcbiAgLy8gbWlsbGlzZWNvbmRzIGluIGEgd2VlayBpcyBub3QgY29uc3RhbnQgKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2ZcbiAgLy8gdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KS5cbiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2VlaykgKyAxO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldFdlZWs7XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBhZGRMZWFkaW5nWmVyb3MobnVtYmVyLCB0YXJnZXRMZW5ndGgpIHtcbiAgY29uc3Qgc2lnbiA9IG51bWJlciA8IDAgPyBcIi1cIiA6IFwiXCI7XG4gIGNvbnN0IG91dHB1dCA9IE1hdGguYWJzKG51bWJlcikudG9TdHJpbmcoKS5wYWRTdGFydCh0YXJnZXRMZW5ndGgsIFwiMFwiKTtcbiAgcmV0dXJuIHNpZ24gKyBvdXRwdXQ7XG59XG4iLAogICAgImltcG9ydCB7IGFkZExlYWRpbmdaZXJvcyB9IGZyb20gXCIuLi9hZGRMZWFkaW5nWmVyb3MuanNcIjtcblxuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKi9cblxuZXhwb3J0IGNvbnN0IGxpZ2h0Rm9ybWF0dGVycyA9IHtcbiAgLy8gWWVhclxuICB5KGRhdGUsIHRva2VuKSB7XG4gICAgLy8gRnJvbSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LTMxL3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0Zvcm1hdF90b2tlbnNcbiAgICAvLyB8IFllYXIgICAgIHwgICAgIHkgfCB5eSB8ICAgeXl5IHwgIHl5eXkgfCB5eXl5eSB8XG4gICAgLy8gfC0tLS0tLS0tLS18LS0tLS0tLXwtLS0tfC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfFxuICAgIC8vIHwgQUQgMSAgICAgfCAgICAgMSB8IDAxIHwgICAwMDEgfCAgMDAwMSB8IDAwMDAxIHxcbiAgICAvLyB8IEFEIDEyICAgIHwgICAgMTIgfCAxMiB8ICAgMDEyIHwgIDAwMTIgfCAwMDAxMiB8XG4gICAgLy8gfCBBRCAxMjMgICB8ICAgMTIzIHwgMjMgfCAgIDEyMyB8ICAwMTIzIHwgMDAxMjMgfFxuICAgIC8vIHwgQUQgMTIzNCAgfCAgMTIzNCB8IDM0IHwgIDEyMzQgfCAgMTIzNCB8IDAxMjM0IHxcbiAgICAvLyB8IEFEIDEyMzQ1IHwgMTIzNDUgfCA0NSB8IDEyMzQ1IHwgMTIzNDUgfCAxMjM0NSB8XG5cbiAgICBjb25zdCBzaWduZWRZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgY29uc3QgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModG9rZW4gPT09IFwieXlcIiA/IHllYXIgJSAxMDAgOiB5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIE1vbnRoXG4gIE0oZGF0ZSwgdG9rZW4pIHtcbiAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICByZXR1cm4gdG9rZW4gPT09IFwiTVwiID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgfSxcblxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0RGF0ZSgpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIEFNIG9yIFBNXG4gIGEoZGF0ZSwgdG9rZW4pIHtcbiAgICBjb25zdCBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXRlLmdldEhvdXJzKCkgLyAxMiA+PSAxID8gXCJwbVwiIDogXCJhbVwiO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcImFcIjpcbiAgICAgIGNhc2UgXCJhYVwiOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgICBjYXNlIFwiYWFhXCI6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgICBjYXNlIFwiYWFhYWFcIjpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZVswXTtcbiAgICAgIGNhc2UgXCJhYWFhXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlID09PSBcImFtXCIgPyBcImEubS5cIiA6IFwicC5tLlwiO1xuICAgIH1cbiAgfSxcblxuICAvLyBIb3VyIFsxLTEyXVxuICBoKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldEhvdXJzKCkgJSAxMiB8fCAxMiwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBIb3VyIFswLTIzXVxuICBIKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldEhvdXJzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gTWludXRlXG4gIG0oZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0TWludXRlcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIFNlY29uZFxuICBzKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldFNlY29uZHMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUyhkYXRlLCB0b2tlbikge1xuICAgIGNvbnN0IG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCk7XG4gICAgY29uc3QgZnJhY3Rpb25hbFNlY29uZHMgPSBNYXRoLnRydW5jKFxuICAgICAgbWlsbGlzZWNvbmRzICogTWF0aC5wb3coMTAsIG51bWJlck9mRGlnaXRzIC0gMyksXG4gICAgKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGZyYWN0aW9uYWxTZWNvbmRzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxufTtcbiIsCiAgICAiaW1wb3J0IHsgZ2V0RGF5T2ZZZWFyIH0gZnJvbSBcIi4uLy4uL2dldERheU9mWWVhci5qc1wiO1xuaW1wb3J0IHsgZ2V0SVNPV2VlayB9IGZyb20gXCIuLi8uLi9nZXRJU09XZWVrLmpzXCI7XG5pbXBvcnQgeyBnZXRJU09XZWVrWWVhciB9IGZyb20gXCIuLi8uLi9nZXRJU09XZWVrWWVhci5qc1wiO1xuaW1wb3J0IHsgZ2V0V2VlayB9IGZyb20gXCIuLi8uLi9nZXRXZWVrLmpzXCI7XG5pbXBvcnQgeyBnZXRXZWVrWWVhciB9IGZyb20gXCIuLi8uLi9nZXRXZWVrWWVhci5qc1wiO1xuXG5pbXBvcnQgeyBhZGRMZWFkaW5nWmVyb3MgfSBmcm9tIFwiLi4vYWRkTGVhZGluZ1plcm9zLmpzXCI7XG5pbXBvcnQgeyBsaWdodEZvcm1hdHRlcnMgfSBmcm9tIFwiLi9saWdodEZvcm1hdHRlcnMuanNcIjtcblxuY29uc3QgZGF5UGVyaW9kRW51bSA9IHtcbiAgYW06IFwiYW1cIixcbiAgcG06IFwicG1cIixcbiAgbWlkbmlnaHQ6IFwibWlkbmlnaHRcIixcbiAgbm9vbjogXCJub29uXCIsXG4gIG1vcm5pbmc6IFwibW9ybmluZ1wiLFxuICBhZnRlcm5vb246IFwiYWZ0ZXJub29uXCIsXG4gIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICBuaWdodDogXCJuaWdodFwiLFxufTtcblxuLypcbiAqIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgIGEgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEEqIHwgTWlsbGlzZWNvbmRzIGluIGRheSAgICAgICAgICAgIHxcbiAqIHwgIGIgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgIHwgIEIgIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgIHxcbiAqIHwgIGMgIHwgU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWsgIHwgIEMqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHxcbiAqIHwgIGQgIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgIHwgIEQgIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGUgIHwgTG9jYWwgZGF5IG9mIHdlZWsgICAgICAgICAgICAgIHwgIEUgIHwgRGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGYgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIEYqIHwgRGF5IG9mIHdlZWsgaW4gbW9udGggICAgICAgICAgIHxcbiAqIHwgIGcqIHwgTW9kaWZpZWQgSnVsaWFuIGRheSAgICAgICAgICAgIHwgIEcgIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGggIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgIHwgIEggIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGkhIHwgSVNPIGRheSBvZiB3ZWVrICAgICAgICAgICAgICAgIHwgIEkhIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgIHxcbiAqIHwgIGoqIHwgTG9jYWxpemVkIGhvdXIgdy8gZGF5IHBlcmlvZCAgIHwgIEoqIHwgTG9jYWxpemVkIGhvdXIgdy9vIGRheSBwZXJpb2QgIHxcbiAqIHwgIGsgIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgIHwgIEsgIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIGwqIHwgKGRlcHJlY2F0ZWQpICAgICAgICAgICAgICAgICAgIHwgIEwgIHwgU3RhbmQtYWxvbmUgbW9udGggICAgICAgICAgICAgIHxcbiAqIHwgIG0gIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE0gIHwgTW9udGggICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIE4gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIG8hIHwgT3JkaW5hbCBudW1iZXIgbW9kaWZpZXIgICAgICAgIHwgIE8gIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHAhIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgIHwgIFAhIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgIHxcbiAqIHwgIHEgIHwgU3RhbmQtYWxvbmUgcXVhcnRlciAgICAgICAgICAgIHwgIFEgIHwgUXVhcnRlciAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHIqIHwgUmVsYXRlZCBHcmVnb3JpYW4geWVhciAgICAgICAgIHwgIFIhIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgIHxcbiAqIHwgIHMgIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFMgIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgIHxcbiAqIHwgIHQhIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgIHwgIFQhIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgIHxcbiAqIHwgIHUgIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgIHwgIFUqIHwgQ3ljbGljIHllYXIgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHYqIHwgVGltZXpvbmUgKGdlbmVyaWMgbm9uLWxvY2F0LikgIHwgIFYqIHwgVGltZXpvbmUgKGxvY2F0aW9uKSAgICAgICAgICAgIHxcbiAqIHwgIHcgIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgIHwgIFcqIHwgV2VlayBvZiBtb250aCAgICAgICAgICAgICAgICAgIHxcbiAqIHwgIHggIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgIHwgIFggIHwgVGltZXpvbmUgKElTTy04NjAxKSAgICAgICAgICAgIHxcbiAqIHwgIHkgIHwgWWVhciAoYWJzKSAgICAgICAgICAgICAgICAgICAgIHwgIFkgIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgIHxcbiAqIHwgIHogIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pIHwgIFoqIHwgVGltZXpvbmUgKGFsaWFzZXMpICAgICAgICAgICAgIHxcbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgYnV0IHJlc2VydmVkIGJ5IFVuaWNvZGUgc3RhbmRhcmQuXG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgISBhcmUgbm9uLXN0YW5kYXJkLCBidXQgaW1wbGVtZW50ZWQgYnkgZGF0ZS1mbnM6XG4gKiAtIGBvYCBtb2RpZmllcyB0aGUgcHJldmlvdXMgdG9rZW4gdG8gdHVybiBpdCBpbnRvIGFuIG9yZGluYWwgKHNlZSBgZm9ybWF0YCBkb2NzKVxuICogLSBgaWAgaXMgSVNPIGRheSBvZiB3ZWVrLiBGb3IgYGlgIGFuZCBgaWlgIGlzIHJldHVybnMgbnVtZXJpYyBJU08gd2VlayBkYXlzLFxuICogICBpLmUuIDcgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gKiAtIGBJYCBpcyBJU08gd2VlayBvZiB5ZWFyLCBhcyBvcHBvc2VkIHRvIGB3YCB3aGljaCBpcyBsb2NhbCB3ZWVrIG9mIHllYXIuXG4gKiAtIGBSYCBpcyBJU08gd2Vlay1udW1iZXJpbmcgeWVhciwgYXMgb3Bwb3NlZCB0byBgWWAgd2hpY2ggaXMgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhci5cbiAqICAgYFJgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgSWAgYW5kIGBpYFxuICogICBmb3IgdW5pdmVyc2FsIElTTyB3ZWVrLW51bWJlcmluZyBkYXRlLCB3aGVyZWFzXG4gKiAgIGBZYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHdgIGFuZCBgZWBcbiAqICAgZm9yIHdlZWstbnVtYmVyaW5nIGRhdGUgc3BlY2lmaWMgdG8gdGhlIGxvY2FsZS5cbiAqIC0gYFBgIGlzIGxvbmcgbG9jYWxpemVkIGRhdGUgZm9ybWF0XG4gKiAtIGBwYCBpcyBsb25nIGxvY2FsaXplZCB0aW1lIGZvcm1hdFxuICovXG5cbmV4cG9ydCBjb25zdCBmb3JtYXR0ZXJzID0ge1xuICAvLyBFcmFcbiAgRzogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGVyYSA9IGRhdGUuZ2V0RnVsbFllYXIoKSA+IDAgPyAxIDogMDtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBBRCwgQkNcbiAgICAgIGNhc2UgXCJHXCI6XG4gICAgICBjYXNlIFwiR0dcIjpcbiAgICAgIGNhc2UgXCJHR0dcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHsgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIiB9KTtcbiAgICAgIC8vIEEsIEJcbiAgICAgIGNhc2UgXCJHR0dHR1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwgeyB3aWR0aDogXCJuYXJyb3dcIiB9KTtcbiAgICAgIC8vIEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0XG4gICAgICBjYXNlIFwiR0dHR1wiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHsgd2lkdGg6IFwid2lkZVwiIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBZZWFyXG4gIHk6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gXCJ5b1wiKSB7XG4gICAgICBjb25zdCBzaWduZWRZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICAgIGNvbnN0IHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHllYXIsIHsgdW5pdDogXCJ5ZWFyXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy55KGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFk6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBzaWduZWRXZWVrWWVhciA9IGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgY29uc3Qgd2Vla1llYXIgPSBzaWduZWRXZWVrWWVhciA+IDAgPyBzaWduZWRXZWVrWWVhciA6IDEgLSBzaWduZWRXZWVrWWVhcjtcblxuICAgIC8vIFR3byBkaWdpdCB5ZWFyXG4gICAgaWYgKHRva2VuID09PSBcIllZXCIpIHtcbiAgICAgIGNvbnN0IHR3b0RpZ2l0WWVhciA9IHdlZWtZZWFyICUgMTAwO1xuICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0d29EaWdpdFllYXIsIDIpO1xuICAgIH1cblxuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSBcIllvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7IHVuaXQ6IFwieWVhclwiIH0pO1xuICAgIH1cblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gIFI6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbikge1xuICAgIGNvbnN0IGlzb1dlZWtZZWFyID0gZ2V0SVNPV2Vla1llYXIoZGF0ZSk7XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBFeHRlbmRlZCB5ZWFyLiBUaGlzIGlzIGEgc2luZ2xlIG51bWJlciBkZXNpZ25hdGluZyB0aGUgeWVhciBvZiB0aGlzIGNhbGVuZGFyIHN5c3RlbS5cbiAgLy8gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIGxvY2FsaXplcnMgYXJlIEIuQy4geWVhcnM6XG4gIC8vIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gIC8vIHwtLS0tLS18LS0tLS18LS0tLS18XG4gIC8vIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gIC8vIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gIC8vIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gIC8vIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAgLy8gd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkLlxuICB1OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4pIHtcbiAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBRdWFydGVyXG4gIFE6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldE1vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgXCJRXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSBcIlFRXCI6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgXCJRb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7IHVuaXQ6IFwicXVhcnRlclwiIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgXCJRUVFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlIFwiUVFRUVFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlIFwiUVFRUVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFN0YW5kLWFsb25lIHF1YXJ0ZXJcbiAgcTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0TW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSBcInFcIjpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlIFwicXFcIjpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSBcInFvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHsgdW5pdDogXCJxdWFydGVyXCIgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSBcInFxcVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgXCJxcXFxcVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgXCJxcXFxXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gTW9udGhcbiAgTTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJNXCI6XG4gICAgICBjYXNlIFwiTU1cIjpcbiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5NKGRhdGUsIHRva2VuKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgXCJNb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHsgdW5pdDogXCJtb250aFwiIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlIFwiTU1NXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlIFwiTU1NTU1cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgXCJNTU1NXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHsgd2lkdGg6IFwid2lkZVwiLCBjb250ZXh0OiBcImZvcm1hdHRpbmdcIiB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gU3RhbmQtYWxvbmUgbW9udGhcbiAgTDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgXCJMXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcobW9udGggKyAxKTtcbiAgICAgIC8vIDAxLCAwMiwgLi4uLCAxMlxuICAgICAgY2FzZSBcIkxMXCI6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDEydGhcbiAgICAgIGNhc2UgXCJMb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihtb250aCArIDEsIHsgdW5pdDogXCJtb250aFwiIH0pO1xuICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjXG4gICAgICBjYXNlIFwiTExMXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gSiwgRiwgLi4uLCBEXG4gICAgICBjYXNlIFwiTExMTExcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXJcbiAgICAgIGNhc2UgXCJMTExMXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHsgd2lkdGg6IFwid2lkZVwiLCBjb250ZXh0OiBcInN0YW5kYWxvbmVcIiB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gTG9jYWwgd2VlayBvZiB5ZWFyXG4gIHc6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB3ZWVrID0gZ2V0V2VlayhkYXRlLCBvcHRpb25zKTtcblxuICAgIGlmICh0b2tlbiA9PT0gXCJ3b1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrLCB7IHVuaXQ6IFwid2Vla1wiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBJU08gd2VlayBvZiB5ZWFyXG4gIEk6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBpc29XZWVrID0gZ2V0SVNPV2VlayhkYXRlKTtcblxuICAgIGlmICh0b2tlbiA9PT0gXCJJb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29XZWVrLCB7IHVuaXQ6IFwid2Vla1wiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBEYXkgb2YgdGhlIG1vbnRoXG4gIGQ6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09IFwiZG9cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXREYXRlKCksIHsgdW5pdDogXCJkYXRlXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5kKGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBEYXkgb2YgeWVhclxuICBEOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgZGF5T2ZZZWFyID0gZ2V0RGF5T2ZZZWFyKGRhdGUpO1xuXG4gICAgaWYgKHRva2VuID09PSBcIkRvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRheU9mWWVhciwgeyB1bml0OiBcImRheU9mWWVhclwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF5T2ZZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIERheSBvZiB3ZWVrXG4gIEU6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSBcIkVcIjpcbiAgICAgIGNhc2UgXCJFRVwiOlxuICAgICAgY2FzZSBcIkVFRVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSBcIkVFRUVFXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgXCJFRUVFRUVcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgXCJFRUVFXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIExvY2FsIGRheSBvZiB3ZWVrXG4gIGU6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpO1xuICAgIGNvbnN0IGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChOdGggZGF5IG9mIHdlZWsgd2l0aCBjdXJyZW50IGxvY2FsZSBvciB3ZWVrU3RhcnRzT24pXG4gICAgICBjYXNlIFwiZVwiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgXCJlZVwiOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSBcImVvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7IHVuaXQ6IFwiZGF5XCIgfSk7XG4gICAgICBjYXNlIFwiZWVlXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlIFwiZWVlZWVcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSBcImVlZWVlZVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcInNob3J0XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSBcImVlZWVcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWtcbiAgYzogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgY29uc3QgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKHNhbWUgYXMgaW4gYGVgKVxuICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlIFwiY2NcIjpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAuLi4sIDd0aFxuICAgICAgY2FzZSBcImNvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGxvY2FsRGF5T2ZXZWVrLCB7IHVuaXQ6IFwiZGF5XCIgfSk7XG4gICAgICBjYXNlIFwiY2NjXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlIFwiY2NjY2NcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSBcImNjY2NjY1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcInNob3J0XCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSBcImNjY2NcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gSVNPIGRheSBvZiB3ZWVrXG4gIGk6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpO1xuICAgIGNvbnN0IGlzb0RheU9mV2VlayA9IGRheU9mV2VlayA9PT0gMCA/IDcgOiBkYXlPZldlZWs7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMlxuICAgICAgY2FzZSBcImlcIjpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhpc29EYXlPZldlZWspO1xuICAgICAgLy8gMDJcbiAgICAgIGNhc2UgXCJpaVwiOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb0RheU9mV2VlaywgdG9rZW4ubGVuZ3RoKTtcbiAgICAgIC8vIDJuZFxuICAgICAgY2FzZSBcImlvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb0RheU9mV2VlaywgeyB1bml0OiBcImRheVwiIH0pO1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlIFwiaWlpXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlIFwiaWlpaWlcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSBcImlpaWlpaVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcInNob3J0XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSBcImlpaWlcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gQU0gb3IgUE1cbiAgYTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIGNvbnN0IGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/IFwicG1cIiA6IFwiYW1cIjtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJhXCI6XG4gICAgICBjYXNlIFwiYWFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJhYWFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplXG4gICAgICAgICAgLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSBcImFhYWFhXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImFhYWFcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gQU0sIFBNLCBtaWRuaWdodCwgbm9vblxuICBiOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgbGV0IGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPT09IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA9PT0gMCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5taWRuaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gXCJwbVwiIDogXCJhbVwiO1xuICAgIH1cblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJiXCI6XG4gICAgICBjYXNlIFwiYmJcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJiYmJcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplXG4gICAgICAgICAgLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgY2FzZSBcImJiYmJiXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImJiYmJcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gaW4gdGhlIG1vcm5pbmcsIGluIHRoZSBhZnRlcm5vb24sIGluIHRoZSBldmVuaW5nLCBhdCBuaWdodFxuICBCOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgbGV0IGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICBpZiAoaG91cnMgPj0gMTcpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uZXZlbmluZztcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDEyKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmFmdGVybm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDQpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubW9ybmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5uaWdodDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwiQlwiOlxuICAgICAgY2FzZSBcIkJCXCI6XG4gICAgICBjYXNlIFwiQkJCXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiQkJCQkJcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiQkJCQlwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBIb3VyIFsxLTEyXVxuICBoOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSBcImhvXCIpIHtcbiAgICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyO1xuICAgICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDEyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHsgdW5pdDogXCJob3VyXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5oKGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBIb3VyIFswLTIzXVxuICBIOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSBcIkhvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0SG91cnMoKSwgeyB1bml0OiBcImhvdXJcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLkgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIEhvdXIgWzAtMTFdXG4gIEs6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyO1xuXG4gICAgaWYgKHRva2VuID09PSBcIktvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7IHVuaXQ6IFwiaG91clwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gSG91ciBbMS0yNF1cbiAgazogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMjQ7XG5cbiAgICBpZiAodG9rZW4gPT09IFwia29cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHsgdW5pdDogXCJob3VyXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBNaW51dGVcbiAgbTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gXCJtb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldE1pbnV0ZXMoKSwgeyB1bml0OiBcIm1pbnV0ZVwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMubShkYXRlLCB0b2tlbik7XG4gIH0sXG5cbiAgLy8gU2Vjb25kXG4gIHM6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09IFwic29cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRTZWNvbmRzKCksIHsgdW5pdDogXCJzZWNvbmRcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBhbHdheXMgYCdaJ2ApXG4gIFg6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cbiAgICBpZiAodGltZXpvbmVPZmZzZXQgPT09IDApIHtcbiAgICAgIHJldHVybiBcIlpcIjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYYFxuICAgICAgY2FzZSBcIlhYWFhcIjpcbiAgICAgIGNhc2UgXCJYWFwiOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgY2FzZSBcIlhYWFhYXCI6XG4gICAgICBjYXNlIFwiWFhYXCI6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBgJyswMDowMCdgIG9yIGVxdWl2YWxlbnQpXG4gIHg6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4YFxuICAgICAgY2FzZSBcInh4eHhcIjpcbiAgICAgIGNhc2UgXCJ4eFwiOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHh4YFxuICAgICAgY2FzZSBcInh4eHh4XCI6XG4gICAgICBjYXNlIFwieHh4XCI6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRpbWV6b25lIChHTVQpXG4gIE86IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSBcIk9cIjpcbiAgICAgIGNhc2UgXCJPT1wiOlxuICAgICAgY2FzZSBcIk9PT1wiOlxuICAgICAgICByZXR1cm4gXCJHTVRcIiArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsIFwiOlwiKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgXCJPT09PXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJHTVRcIiArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXRpb24pXG4gIHo6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBTaG9ydFxuICAgICAgY2FzZSBcInpcIjpcbiAgICAgIGNhc2UgXCJ6elwiOlxuICAgICAgY2FzZSBcInp6elwiOlxuICAgICAgICByZXR1cm4gXCJHTVRcIiArIGZvcm1hdFRpbWV6b25lU2hvcnQodGltZXpvbmVPZmZzZXQsIFwiOlwiKTtcbiAgICAgIC8vIExvbmdcbiAgICAgIGNhc2UgXCJ6enp6XCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJHTVRcIiArIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgfVxuICB9LFxuXG4gIC8vIFNlY29uZHMgdGltZXN0YW1wXG4gIHQ6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gTWF0aC50cnVuYygrZGF0ZSAvIDEwMDApO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModGltZXN0YW1wLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIE1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAgVDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKCtkYXRlLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxufTtcblxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVTaG9ydChvZmZzZXQsIGRlbGltaXRlciA9IFwiXCIpIHtcbiAgY29uc3Qgc2lnbiA9IG9mZnNldCA+IDAgPyBcIi1cIiA6IFwiK1wiO1xuICBjb25zdCBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICBjb25zdCBob3VycyA9IE1hdGgudHJ1bmMoYWJzT2Zmc2V0IC8gNjApO1xuICBjb25zdCBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7XG4gIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpO1xuICB9XG4gIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKSArIGRlbGltaXRlciArIGFkZExlYWRpbmdaZXJvcyhtaW51dGVzLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKG9mZnNldCwgZGVsaW1pdGVyKSB7XG4gIGlmIChvZmZzZXQgJSA2MCA9PT0gMCkge1xuICAgIGNvbnN0IHNpZ24gPSBvZmZzZXQgPiAwID8gXCItXCIgOiBcIitcIjtcbiAgICByZXR1cm4gc2lnbiArIGFkZExlYWRpbmdaZXJvcyhNYXRoLmFicyhvZmZzZXQpIC8gNjAsIDIpO1xuICB9XG4gIHJldHVybiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRlbGltaXRlcik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGVsaW1pdGVyID0gXCJcIikge1xuICBjb25zdCBzaWduID0gb2Zmc2V0ID4gMCA/IFwiLVwiIDogXCIrXCI7XG4gIGNvbnN0IGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIGNvbnN0IGhvdXJzID0gYWRkTGVhZGluZ1plcm9zKE1hdGgudHJ1bmMoYWJzT2Zmc2V0IC8gNjApLCAyKTtcbiAgY29uc3QgbWludXRlcyA9IGFkZExlYWRpbmdaZXJvcyhhYnNPZmZzZXQgJSA2MCwgMik7XG4gIHJldHVybiBzaWduICsgaG91cnMgKyBkZWxpbWl0ZXIgKyBtaW51dGVzO1xufVxuIiwKICAgICJjb25zdCBkYXRlTG9uZ0Zvcm1hdHRlciA9IChwYXR0ZXJuLCBmb3JtYXRMb25nKSA9PiB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgXCJQXCI6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHsgd2lkdGg6IFwic2hvcnRcIiB9KTtcbiAgICBjYXNlIFwiUFBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoeyB3aWR0aDogXCJtZWRpdW1cIiB9KTtcbiAgICBjYXNlIFwiUFBQXCI6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHsgd2lkdGg6IFwibG9uZ1wiIH0pO1xuICAgIGNhc2UgXCJQUFBQXCI6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoeyB3aWR0aDogXCJmdWxsXCIgfSk7XG4gIH1cbn07XG5cbmNvbnN0IHRpbWVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcpID0+IHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSBcInBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoeyB3aWR0aDogXCJzaG9ydFwiIH0pO1xuICAgIGNhc2UgXCJwcFwiOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7IHdpZHRoOiBcIm1lZGl1bVwiIH0pO1xuICAgIGNhc2UgXCJwcHBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoeyB3aWR0aDogXCJsb25nXCIgfSk7XG4gICAgY2FzZSBcInBwcHBcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7IHdpZHRoOiBcImZ1bGxcIiB9KTtcbiAgfVxufTtcblxuY29uc3QgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcpID0+IHtcbiAgY29uc3QgbWF0Y2hSZXN1bHQgPSBwYXR0ZXJuLm1hdGNoKC8oUCspKHArKT8vKSB8fCBbXTtcbiAgY29uc3QgZGF0ZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsxXTtcbiAgY29uc3QgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcblxuICBpZiAoIXRpbWVQYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpO1xuICB9XG5cbiAgbGV0IGRhdGVUaW1lRm9ybWF0O1xuXG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlIFwiUFwiOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHsgd2lkdGg6IFwic2hvcnRcIiB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJQUFwiOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHsgd2lkdGg6IFwibWVkaXVtXCIgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiUFBQXCI6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoeyB3aWR0aDogXCJsb25nXCIgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiUFBQUFwiOlxuICAgIGRlZmF1bHQ6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoeyB3aWR0aDogXCJmdWxsXCIgfSk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBkYXRlVGltZUZvcm1hdFxuICAgIC5yZXBsYWNlKFwie3tkYXRlfX1cIiwgZGF0ZUxvbmdGb3JtYXR0ZXIoZGF0ZVBhdHRlcm4sIGZvcm1hdExvbmcpKVxuICAgIC5yZXBsYWNlKFwie3t0aW1lfX1cIiwgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBsb25nRm9ybWF0dGVycyA9IHtcbiAgcDogdGltZUxvbmdGb3JtYXR0ZXIsXG4gIFA6IGRhdGVUaW1lTG9uZ0Zvcm1hdHRlcixcbn07XG4iLAogICAgImNvbnN0IGRheU9mWWVhclRva2VuUkUgPSAvXkQrJC87XG5jb25zdCB3ZWVrWWVhclRva2VuUkUgPSAvXlkrJC87XG5cbmNvbnN0IHRocm93VG9rZW5zID0gW1wiRFwiLCBcIkREXCIsIFwiWVlcIiwgXCJZWVlZXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gZGF5T2ZZZWFyVG9rZW5SRS50ZXN0KHRva2VuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikge1xuICByZXR1cm4gd2Vla1llYXJUb2tlblJFLnRlc3QodG9rZW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBjb25zdCBfbWVzc2FnZSA9IG1lc3NhZ2UodG9rZW4sIGZvcm1hdCwgaW5wdXQpO1xuICBjb25zb2xlLndhcm4oX21lc3NhZ2UpO1xuICBpZiAodGhyb3dUb2tlbnMuaW5jbHVkZXModG9rZW4pKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihfbWVzc2FnZSk7XG59XG5cbmZ1bmN0aW9uIG1lc3NhZ2UodG9rZW4sIGZvcm1hdCwgaW5wdXQpIHtcbiAgY29uc3Qgc3ViamVjdCA9IHRva2VuWzBdID09PSBcIllcIiA/IFwieWVhcnNcIiA6IFwiZGF5cyBvZiB0aGUgbW9udGhcIjtcbiAgcmV0dXJuIGBVc2UgXFxgJHt0b2tlbi50b0xvd2VyQ2FzZSgpfVxcYCBpbnN0ZWFkIG9mIFxcYCR7dG9rZW59XFxgIChpbiBcXGAke2Zvcm1hdH1cXGApIGZvciBmb3JtYXR0aW5nICR7c3ViamVjdH0gdG8gdGhlIGlucHV0IFxcYCR7aW5wdXR9XFxgOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRgO1xufVxuIiwKICAgICJpbXBvcnQgeyBkZWZhdWx0TG9jYWxlIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0TG9jYWxlLmpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMuanNcIjtcbmltcG9ydCB7IGZvcm1hdHRlcnMgfSBmcm9tIFwiLi9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzLmpzXCI7XG5pbXBvcnQgeyBsb25nRm9ybWF0dGVycyB9IGZyb20gXCIuL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzLmpzXCI7XG5pbXBvcnQge1xuICBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuLFxuICBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4sXG4gIHdhcm5PclRocm93UHJvdGVjdGVkRXJyb3IsXG59IGZyb20gXCIuL19saWIvcHJvdGVjdGVkVG9rZW5zLmpzXCI7XG5pbXBvcnQgeyBpc1ZhbGlkIH0gZnJvbSBcIi4vaXNWYWxpZC5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8vIFJleHBvcnRzIG9mIGludGVybmFsIGZvciBsaWJyYXJpZXMgdG8gdXNlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM2MzgjaXNzdWVjb21tZW50LTE4NzcwODI4NzRcbmV4cG9ydCB7IGZvcm1hdHRlcnMsIGxvbmdGb3JtYXR0ZXJzIH07XG5cbi8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xuY29uc3QgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9XG4gIC9beVlRcU1Md0lkRGVjaWhIS2ttc11vfChcXHcpXFwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcblxuLy8gVGhpcyBSZWdFeHAgY2F0Y2hlcyBzeW1ib2xzIGVzY2FwZWQgYnkgcXVvdGVzLCBhbmQgYWxzb1xuLy8gc2VxdWVuY2VzIG9mIHN5bWJvbHMgUCwgcCwgYW5kIHRoZSBjb21iaW5hdGlvbnMgbGlrZSBgUFBQUFBQUHBwcHBwYFxuY29uc3QgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcblxuY29uc3QgZXNjYXBlZFN0cmluZ1JlZ0V4cCA9IC9eJyhbXl0qPyknPyQvO1xuY29uc3QgZG91YmxlUXVvdGVSZWdFeHAgPSAvJycvZztcbmNvbnN0IHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuZXhwb3J0IHsgZm9ybWF0IGFzIGZvcm1hdERhdGUgfTtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGZvcm1hdH0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGZvcm1hdFxuICogQGFsaWFzIGZvcm1hdERhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiDimqDvuI8gUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl0oaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcilcbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJdKGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXIpKS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIGZvcm1hdCAtIFRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nXG4gKlxuICogQHRocm93cyBgZGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBsb2NhbGl6ZWAgcHJvcGVydHlcbiAqIEB0aHJvd3MgYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3MgdXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3MgZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxMSBGZWJydWFyeSAyMDE0IGluIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDEsIDExKSwgJ01NL2RkL3l5eXknKVxuICogLy89PiAnMDIvMTEvMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDIgSnVseSAyMDE0IGluIEVzcGVyYW50bzpcbiAqIGltcG9ydCB7IGVvTG9jYWxlIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlL2VvJ1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIpLCBcImRvICdkZScgTU1NTSB5eXl5XCIsIHtcbiAqICAgbG9jYWxlOiBlb0xvY2FsZVxuICogfSlcbiAqIC8vPT4gJzItYSBkZSBqdWxpbyAyMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFc2NhcGUgc3RyaW5nIGJ5IHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzOlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE1KSwgXCJoICdvJydjbG9jaydcIilcbiAqIC8vPT4gXCIzIG8nY2xvY2tcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KGRhdGUsIGZvcm1hdFN0ciwgb3B0aW9ucykge1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9ucy5sb2NhbGUgPz8gZGVmYXVsdExvY2FsZTtcblxuICBjb25zdCBmaXJzdFdlZWtDb250YWluc0RhdGUgPVxuICAgIG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICAxO1xuXG4gIGNvbnN0IHdlZWtTdGFydHNPbiA9XG4gICAgb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIDA7XG5cbiAgY29uc3Qgb3JpZ2luYWxEYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcblxuICBpZiAoIWlzVmFsaWQob3JpZ2luYWxEYXRlKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB0aW1lIHZhbHVlXCIpO1xuICB9XG5cbiAgbGV0IHBhcnRzID0gZm9ybWF0U3RyXG4gICAgLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKVxuICAgIC5tYXAoKHN1YnN0cmluZykgPT4ge1xuICAgICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09IFwicFwiIHx8IGZpcnN0Q2hhcmFjdGVyID09PSBcIlBcIikge1xuICAgICAgICBjb25zdCBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdO1xuICAgICAgICByZXR1cm4gbG9uZ0Zvcm1hdHRlcihzdWJzdHJpbmcsIGxvY2FsZS5mb3JtYXRMb25nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWJzdHJpbmc7XG4gICAgfSlcbiAgICAuam9pbihcIlwiKVxuICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKVxuICAgIC5tYXAoKHN1YnN0cmluZykgPT4ge1xuICAgICAgLy8gUmVwbGFjZSB0d28gc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgd2l0aCBvbmUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlclxuICAgICAgaWYgKHN1YnN0cmluZyA9PT0gXCInJ1wiKSB7XG4gICAgICAgIHJldHVybiB7IGlzVG9rZW46IGZhbHNlLCB2YWx1ZTogXCInXCIgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07XG4gICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09IFwiJ1wiKSB7XG4gICAgICAgIHJldHVybiB7IGlzVG9rZW46IGZhbHNlLCB2YWx1ZTogY2xlYW5Fc2NhcGVkU3RyaW5nKHN1YnN0cmluZykgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdKSB7XG4gICAgICAgIHJldHVybiB7IGlzVG9rZW46IHRydWUsIHZhbHVlOiBzdWJzdHJpbmcgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcbiAgICAgICAgICBcIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgXCIgK1xuICAgICAgICAgICAgZmlyc3RDaGFyYWN0ZXIgK1xuICAgICAgICAgICAgXCJgXCIsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGlzVG9rZW46IGZhbHNlLCB2YWx1ZTogc3Vic3RyaW5nIH07XG4gICAgfSk7XG5cbiAgLy8gaW52b2tlIGxvY2FsaXplIHByZXByb2Nlc3NvciAob25seSBmb3IgZnJlbmNoIGxvY2FsZXMgYXQgdGhlIG1vbWVudClcbiAgaWYgKGxvY2FsZS5sb2NhbGl6ZS5wcmVwcm9jZXNzb3IpIHtcbiAgICBwYXJ0cyA9IGxvY2FsZS5sb2NhbGl6ZS5wcmVwcm9jZXNzb3Iob3JpZ2luYWxEYXRlLCBwYXJ0cyk7XG4gIH1cblxuICBjb25zdCBmb3JtYXR0ZXJPcHRpb25zID0ge1xuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSxcbiAgICB3ZWVrU3RhcnRzT24sXG4gICAgbG9jYWxlLFxuICB9O1xuXG4gIHJldHVybiBwYXJ0c1xuICAgIC5tYXAoKHBhcnQpID0+IHtcbiAgICAgIGlmICghcGFydC5pc1Rva2VuKSByZXR1cm4gcGFydC52YWx1ZTtcblxuICAgICAgY29uc3QgdG9rZW4gPSBwYXJ0LnZhbHVlO1xuXG4gICAgICBpZiAoXG4gICAgICAgICghb3B0aW9ucz8udXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zICYmXG4gICAgICAgICAgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSkgfHxcbiAgICAgICAgKCFvcHRpb25zPy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zICYmXG4gICAgICAgICAgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikpXG4gICAgICApIHtcbiAgICAgICAgd2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0U3RyLCBTdHJpbmcoZGF0ZSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzW3Rva2VuWzBdXTtcbiAgICAgIHJldHVybiBmb3JtYXR0ZXIob3JpZ2luYWxEYXRlLCB0b2tlbiwgbG9jYWxlLmxvY2FsaXplLCBmb3JtYXR0ZXJPcHRpb25zKTtcbiAgICB9KVxuICAgIC5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBjbGVhbkVzY2FwZWRTdHJpbmcoaW5wdXQpIHtcbiAgY29uc3QgbWF0Y2hlZCA9IGlucHV0Lm1hdGNoKGVzY2FwZWRTdHJpbmdSZWdFeHApO1xuXG4gIGlmICghbWF0Y2hlZCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAsIFwiJ1wiKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBmb3JtYXQ7XG4iLAogICAgImltcG9ydCB0eXBlIHsgTG9nLCBNaWxraW9Jbml0LCBNaWxraW9SdW50aW1lSW5pdCB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xuaW1wb3J0IHsgVFNPTiB9IGZyb20gXCJAc291dGhlcm4tYXVyb3JhL3Rzb25cIjtcblxuaW50ZXJmYWNlIENvb2tib29rRXZlbnQge1xuICB0eXBlOiBcIm1pbGtpb0Bsb2dnZXJcIjtcbiAgbG9nOiBMb2c7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kQ29va2Jvb2tFdmVudChydW50aW1lOiBNaWxraW9SdW50aW1lSW5pdDxNaWxraW9Jbml0PiwgZXZlbnQ6IENvb2tib29rRXZlbnQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwOi8vbG9jYWxob3N0OiR7cnVudGltZS5jb29rYm9vay5jb29rYm9va1BvcnR9LyRhY3Rpb25gLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgICBib2R5OiBUU09OLnN0cmluZ2lmeShldmVudCksXG4gICAgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc29sZS5sb2coXCJbQ09PS0JPT0tdXCIsIGF3YWl0IHJlc3BvbnNlLnRleHQoKSk7XG4gICAgICBjb25zb2xlLmxvZyhcIltDT09LQk9PS11cIiwgXCJJcyBDb29rYm9vayBjbG9zZWQ/IFRoZXJlIGlzIGFuIGFibm9ybWFsaXR5IGluIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggQ29va2Jvb2suXCIpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhcIltDT09LQk9PS11cIiwgZXJyb3IpO1xuICAgIGNvbnNvbGUubG9nKFwiW0NPT0tCT09LXVwiLCBcIklzIENvb2tib29rIGNsb3NlZD8gVGhlcmUgaXMgYW4gYWJub3JtYWxpdHkgaW4gdGhlIGNvbW11bmljYXRpb24gd2l0aCBDb29rYm9vay5cIik7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcImRhdGUtZm5zXCI7XG5pbXBvcnQgdHlwZSB7ICRjb250ZXh0LCBNaWxraW9Jbml0LCBNaWxraW9SdW50aW1lSW5pdCB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xuaW1wb3J0IHsgc2VuZENvb2tib29rRXZlbnQgfSBmcm9tIFwiLi4vdXRpbHMvc2VuZC1jb29rYm9vay1ldmVudC50c1wiO1xuXG5leHBvcnQgdHlwZSBMb2cgPSBbXCIoZGVidWcpXCIgfCBcIihpbmZvKVwiIHwgXCIod2FybilcIiB8IFwiKGVycm9yKVwiIHwgXCIocmVxdWVzdClcIiB8IFwiKHJlc3BvbnNlKVwiLCBzdHJpbmcgLyogZXhlY3V0ZUlkICovLCBzdHJpbmcsIHN0cmluZywgc3RyaW5nLCAuLi5BcnJheTx1bmtub3duPl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyIHtcbiAgXzoge1xuICAgIGxvZ3M6IEFycmF5PExvZz47XG4gICAgdGFnczogTWFwPHN0cmluZywgdW5rbm93bj47XG4gICAgc3VibWl0OiAoY29udGV4dDogJGNvbnRleHQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICB9O1xuICBzZXRUYWc6IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHZvaWQ7XG4gIHNldExvZzogKC4uLmxvZzogTG9nKSA9PiB2b2lkO1xuICBkZWJ1ZzogKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IExvZztcbiAgaW5mbzogKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IExvZztcbiAgd2FybjogKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IExvZztcbiAgZXJyb3I6IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBMb2c7XG4gIHJlcXVlc3Q6IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBMb2c7XG4gIHJlc3BvbnNlOiAoZGVzY3JpcHRpb246IHN0cmluZywgLi4ucGFyYW1zOiBBcnJheTx1bmtub3duPikgPT4gTG9nO1xufVxuXG5leHBvcnQgdHlwZSBMb2dnZXJJbnNlcnRpbmdIYW5kbGVyID0gKGxvZzogTG9nKSA9PiBib29sZWFuO1xuXG5leHBvcnQgdHlwZSBMb2dnZXJTdWJtaXR0aW5nSGFuZGxlciA9IChjb250ZXh0OiAkY29udGV4dCwgbG9nczogQXJyYXk8TG9nPiwgdGFnczogTWFwPHN0cmluZywgdW5rbm93bj4pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9nZ2VyPE1pbGtpb1J1bnRpbWUgZXh0ZW5kcyBNaWxraW9SdW50aW1lSW5pdDxNaWxraW9SdW50aW1lSW5pdDxNaWxraW9Jbml0Pj4gPSBNaWxraW9SdW50aW1lSW5pdDxNaWxraW9Jbml0Pj4ocnVudGltZTogTWlsa2lvUnVudGltZSwgcGF0aDogc3RyaW5nLCBleGVjdXRlSWQ6IHN0cmluZyk6IExvZ2dlciB7XG4gIGNvbnN0IGxvZ2dlciA9IHt9IGFzIExvZ2dlcjtcblxuICBsb2dnZXIuXyA9IHtcbiAgICBsb2dzOiBbXSxcbiAgICB0YWdzOiBuZXcgTWFwKCksXG4gICAgc3VibWl0OiAoY29udGV4dDogJGNvbnRleHQpID0+IHtcbiAgICAgIGlmICghcnVudGltZS5vbkxvZ2dlclN1Ym1pdHRpbmcpIHJldHVybjtcbiAgICAgIHJldHVybiBydW50aW1lLm9uTG9nZ2VyU3VibWl0dGluZyhjb250ZXh0LCBsb2dnZXIuXy5sb2dzLCBsb2dnZXIuXy50YWdzKTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IF9fdGFnUHVzaCA9IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkID0+IHtcbiAgICBsb2dnZXIuXy50YWdzLnNldChrZXksIHZhbHVlKTtcbiAgfTtcbiAgY29uc3QgX19sb2dQdXNoID0gKGxvZzogTG9nKTogTG9nID0+IHtcbiAgICBjb25zdCBpbnNlcnRpbmcgPSBydW50aW1lLm9uTG9nZ2VySW5zZXJ0aW5nXG4gICAgICA/IHJ1bnRpbWUub25Mb2dnZXJJbnNlcnRpbmdcbiAgICAgIDogKGxvZzogTG9nKSA9PiB7XG4gICAgICAgICAgbG9nID0gWy4uLmxvZ107XG4gICAgICAgICAgbG9nWzBdID0gYFxcbiR7bG9nWzBdfWAgYXMgYW55O1xuICAgICAgICAgIGNvbnNvbGUubG9nKC4uLmxvZyk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG5cbiAgICBpZiAoIWluc2VydGluZyhsb2cpKSByZXR1cm4gbG9nO1xuXG4gICAgbG9nZ2VyLl8ubG9ncy5wdXNoKFsuLi5sb2ddKTtcblxuICAgIGlmIChydW50aW1lLmRldmVsb3ApIHtcbiAgICAgIHZvaWQgc2VuZENvb2tib29rRXZlbnQocnVudGltZSwge1xuICAgICAgICB0eXBlOiBcIm1pbGtpb0Bsb2dnZXJcIixcbiAgICAgICAgbG9nLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvZztcbiAgfTtcblxuICBsb2dnZXIuc2V0VGFnID0gKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gX190YWdQdXNoKGtleSwgdmFsdWUpO1xuICBsb2dnZXIuc2V0TG9nID0gKC4uLmxvZzogTG9nKSA9PiBfX2xvZ1B1c2gobG9nKTtcblxuICBjb25zdCBnZXROb3cgPSAoKSA9PiBgJHtmb3JtYXQobmV3IERhdGUoKSwgXCIoeXl5eS1NTS1kZCBoaDptbTpzcylcIil9YDtcblxuICBsb2dnZXIuZGVidWcgPSAoZGVzY3JpcHRpb246IHN0cmluZywgLi4ucGFyYW1zOiBBcnJheTx1bmtub3duPikgPT4gX19sb2dQdXNoKFtcIihkZWJ1ZylcIiwgcGF0aCwgZXhlY3V0ZUlkLCBnZXROb3coKSwgYFxcbiR7ZGVzY3JpcHRpb259YCwgLi4ucGFyYW1zXSk7XG4gIGxvZ2dlci5pbmZvID0gKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IF9fbG9nUHVzaChbXCIoaW5mbylcIiwgcGF0aCwgZXhlY3V0ZUlkLCBnZXROb3coKSwgYFxcbiR7ZGVzY3JpcHRpb259YCwgLi4ucGFyYW1zXSk7XG4gIGxvZ2dlci53YXJuID0gKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IF9fbG9nUHVzaChbXCIod2FybilcIiwgcGF0aCwgZXhlY3V0ZUlkLCBnZXROb3coKSwgYFxcbiR7ZGVzY3JpcHRpb259YCwgLi4ucGFyYW1zXSk7XG4gIGxvZ2dlci5lcnJvciA9IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBfX2xvZ1B1c2goW1wiKGVycm9yKVwiLCBwYXRoLCBleGVjdXRlSWQsIGdldE5vdygpLCBgXFxuJHtkZXNjcmlwdGlvbn1gLCAuLi5wYXJhbXNdKTtcbiAgbG9nZ2VyLnJlcXVlc3QgPSAoZGVzY3JpcHRpb246IHN0cmluZywgLi4ucGFyYW1zOiBBcnJheTx1bmtub3duPikgPT4gX19sb2dQdXNoKFtcIihyZXF1ZXN0KVwiLCBwYXRoLCBleGVjdXRlSWQsIGdldE5vdygpLCBgXFxuJHtkZXNjcmlwdGlvbn1gLCAuLi5wYXJhbXNdKTtcbiAgbG9nZ2VyLnJlc3BvbnNlID0gKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IF9fbG9nUHVzaChbXCIocmVzcG9uc2UpXCIsIHBhdGgsIGV4ZWN1dGVJZCwgZ2V0Tm93KCksIGBcXG4ke2Rlc2NyaXB0aW9ufWAsIC4uLnBhcmFtc10pO1xuXG4gIHJldHVybiBsb2dnZXI7XG59XG4iLAogICAgImV4cG9ydCBpbnRlcmZhY2UgU3RlcHM8U3RhZ2VUIGV4dGVuZHMgUmVjb3JkPGFueSwgYW55Pj4ge1xuICBzdGVwOiBTdGVwRnVuY3Rpb248U3RhZ2VUPjtcbiAgcnVuOiAoKSA9PiBQcm9taXNlPFJlbW92ZV88U3RhZ2VUPj47XG59XG5cbnR5cGUgUmVtb3ZlXzxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVCBhcyBLIGV4dGVuZHMgYF8ke3N0cmluZ31gID8gbmV2ZXIgOiBLXTogVFtLXTtcbn07XG5cbnR5cGUgVG9FbXB0eU9iamVjdDxUPiA9IFQgZXh0ZW5kcyB1bmRlZmluZWQgfCBudWxsIHwgbmV2ZXIgPyB7fSA6IFQgZXh0ZW5kcyBvYmplY3QgPyBUIDoge307XG5cbmV4cG9ydCB0eXBlIFN0ZXBGdW5jdGlvbjxTdGFnZVQgZXh0ZW5kcyBSZWNvcmQ8YW55LCBhbnk+PiA9IDxIYW5kbGVyVCBleHRlbmRzIChzdGFnZTogUmVhZG9ubHk8U3RhZ2VUPikgPT4gUmVjb3JkPGFueSwgYW55PiB8IFByb21pc2U8UmVjb3JkPGFueSwgYW55Pj4+KGhhbmRsZXI6IEhhbmRsZXJUKSA9PiBTdGVwczxBd2FpdGVkPFN0YWdlVD4gJiBUb0VtcHR5T2JqZWN0PEF3YWl0ZWQ8UmV0dXJuVHlwZTxIYW5kbGVyVD4+Pj47XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGVwKCk6IFN0ZXBzPHt9PiB7XG4gIGNvbnN0IHN0ZXBDb250cm9sbGVyID0ge1xuICAgICRtaWxraW9UeXBlOiBcInN0ZXBcIixcbiAgICBfc3RlcHM6IFtdIGFzIEFycmF5PChzdGFnZTogYW55KSA9PiBQcm9taXNlPGFueT4+LFxuICAgIHN0ZXAoaGFuZGxlcjogKHN0YWdlOiBhbnkpID0+IFByb21pc2U8YW55Pikge1xuICAgICAgc3RlcENvbnRyb2xsZXIuX3N0ZXBzLnB1c2goaGFuZGxlcik7XG4gICAgICByZXR1cm4gc3RlcENvbnRyb2xsZXI7XG4gICAgfSxcbiAgICBhc3luYyBydW4oKSB7XG4gICAgICBsZXQgc3RhZ2UgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qgc3RlcCBvZiBzdGVwQ29udHJvbGxlci5fc3RlcHMpIHtcbiAgICAgICAgc3RhZ2UgPSB7IC4uLnN0YWdlLCAuLi4oYXdhaXQgc3RlcChzdGFnZSkpIH07XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxhbnksIGFueT4gPSB7fTtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHN0YWdlKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKHN0YWdlIGFzIGFueSlba2V5XTtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChcIl9cIikpIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gIH07XG4gIHJldHVybiBzdGVwQ29udHJvbGxlciBhcyBhbnkgYXMgU3RlcHM8e30+O1xufVxuIiwKICAgICJleHBvcnQgY2xhc3MgVHJpZTxUPiB7XHJcbiAgcHJpdmF0ZSByb290OiBUcmllTm9kZTxUPjtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLnJvb3QgPSBuZXcgVHJpZU5vZGUoKTtcclxuICB9XHJcblxyXG4gIGFkZChwYXRoOiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGhcclxuICAgICAgLnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpXHJcbiAgICAgIC5zcGxpdChcIi9cIilcclxuICAgICAgLmZpbHRlcigocCkgPT4gcCAhPT0gXCJcIik7XHJcbiAgICBsZXQgY3VycmVudE5vZGUgPSB0aGlzLnJvb3Q7XHJcbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGN1cnJlbnROb2RlLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xyXG4gICAgICBpZiAoIWN1cnJlbnROb2RlLmNoaWxkcmVuLmhhcyhwYXJ0KSkge1xyXG4gICAgICAgIGN1cnJlbnROb2RlLmNoaWxkcmVuLnNldChwYXJ0LCBuZXcgVHJpZU5vZGUoKSk7XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5jaGlsZHJlbi5nZXQocGFydCkhO1xyXG4gICAgfVxyXG4gICAgY3VycmVudE5vZGUudmFsdWUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldChwYXRoOiBzdHJpbmcpOiBUIHwgbnVsbCB7XHJcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGhcclxuICAgICAgLnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpXHJcbiAgICAgIC5zcGxpdChcIi9cIilcclxuICAgICAgLmZpbHRlcigocCkgPT4gcCAhPT0gXCJcIik7XHJcbiAgICBsZXQgY3VycmVudE5vZGUgPSB0aGlzLnJvb3Q7XHJcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcclxuICAgICAgaWYgKCFjdXJyZW50Tm9kZS5jaGlsZHJlbi5oYXMocGFydCkpIHJldHVybiBudWxsO1xyXG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmNoaWxkcmVuLmdldChwYXJ0KSE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VycmVudE5vZGUudmFsdWU7XHJcbiAgfVxyXG5cclxuICBoYXMocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGhcclxuICAgICAgLnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpXHJcbiAgICAgIC5zcGxpdChcIi9cIilcclxuICAgICAgLmZpbHRlcigocCkgPT4gcCAhPT0gXCJcIik7XHJcbiAgICBsZXQgY3VycmVudE5vZGUgPSB0aGlzLnJvb3Q7XHJcbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAwKSByZXR1cm4gY3VycmVudE5vZGUudmFsdWUgIT09IG51bGw7XHJcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcclxuICAgICAgaWYgKCFjdXJyZW50Tm9kZS5jaGlsZHJlbi5oYXMocGFydCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgZWxzZSBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmNoaWxkcmVuLmdldChwYXJ0KSE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VycmVudE5vZGUudmFsdWUgIT09IG51bGw7XHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBUcmllTm9kZTxUPiB7XHJcbiAgY2hpbGRyZW46IE1hcDxzdHJpbmcsIFRyaWVOb2RlPFQ+PjtcclxuICB2YWx1ZTogVCB8IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5jaGlsZHJlbiA9IG5ldyBNYXAoKTtcclxuICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gIH1cclxufVxyXG4iLAogICAgImltcG9ydCB7IFRTT04gfSBmcm9tIFwiQHNvdXRoZXJuLWF1cm9yYS90c29uXCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIGV4Y2VwdGlvbkhhbmRsZXIsIHJlamVjdCB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xuaW1wb3J0IHR5cGUgeyBNaXhpbiwgR2VuZXJhdGVkSW5pdCwgJHR5cGVzLCBDb250ZXh0SHR0cCwgTWlsa2lvUmVzcG9uc2VSZWplY3QsIFJlc3VsdHMsIE1pbGtpb1Jlc3BvbnNlU3VjY2VzcyB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xuaW1wb3J0IHR5cGUgeyBfX2luaXRFeGVjdXRlciB9IGZyb20gXCIuLi9leGVjdXRlL2luZGV4LnRzXCI7XG5pbXBvcnQgeyBfX2NyZWF0ZUlkIH0gZnJvbSBcIi4uL3V0aWxzL2NyZWF0ZS1pZC50c1wiO1xuaW1wb3J0IHsgVHJpZSB9IGZyb20gXCIuLi91dGlscy90cmllLnRzXCI7XG5cbmV4cG9ydCB0eXBlIE1pbGtpb0h0dHBSZXF1ZXN0ID0gUmVxdWVzdDtcblxuZXhwb3J0IHR5cGUgTWlsa2lvSHR0cFJlc3BvbnNlID0gTWl4aW48XG4gIFJlc3BvbnNlSW5pdCxcbiAge1xuICAgIC8vIGJvZHk6IHN0cmluZyB8IEJsb2IgfCBGb3JtRGF0YSB8IFVSTFNlYXJjaFBhcmFtcyB8IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+O1xuICAgIGJvZHk6IGFueTtcbiAgICBzdGF0dXM6IG51bWJlcjtcbiAgICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9XG4+O1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbml0TGlzdGVuZXIoZ2VuZXJhdGVkOiBHZW5lcmF0ZWRJbml0LCBydW50aW1lOiBhbnksIGV4ZWN1dGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBfX2luaXRFeGVjdXRlcj4pIHtcbiAgY29uc3QgcG9ydCA9IHJ1bnRpbWUucG9ydDtcbiAgY29uc3QgdHJpZSA9IG5ldyBUcmllPGFueT4oKTtcbiAgY29uc3QgZmV0Y2ggPSBhc3luYyAob3B0aW9uczoge1xuICAgIHJlcXVlc3Q6IE1pbGtpb0h0dHBSZXF1ZXN0O1xuICAgIGVudk1vZGU/OiBzdHJpbmc7XG4gICAgZW52PzogUmVjb3JkPGFueSwgYW55PjtcbiAgICByb3V0ZVNjaGVtYT86IGFueTtcbiAgfSk6IFByb21pc2U8UmVzcG9uc2U+ID0+IHtcbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0Lm1ldGhvZCA9PT0gXCJPUFRJT05TXCIpIHtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UodW5kZWZpbmVkLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIjogcnVudGltZS5jb3JzPy5jb3JzQWxsb3dNZXRob2RzID8/IFwiKlwiLFxuICAgICAgICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCI6IHJ1bnRpbWUuY29ycz8uY29yc0FsbG93T3JpZ2luID8/IFwiKlwiLFxuICAgICAgICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVyc1wiOiBydW50aW1lLmNvcnM/LmNvcnNBbGxvd0hlYWRlcnMgPz8gXCIqXCIsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0LnVybC5lbmRzV2l0aChcIi9nZW5lcmF0ZV8yMDRcIikpIHtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge1xuICAgICAgICBzdGF0dXM6IDIwNCxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFNlcnZlcjogXCJtaWxraW9cIixcbiAgICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIjogcnVudGltZS5jb3JzPy5jb3JzQWxsb3dNZXRob2RzID8/IFwiKlwiLFxuICAgICAgICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCI6IHJ1bnRpbWUuY29ycz8uY29yc0FsbG93T3JpZ2luID8/IFwiKlwiLFxuICAgICAgICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVyc1wiOiBydW50aW1lLmNvcnM/LmNvcnNBbGxvd0hlYWRlcnMgPz8gXCIqXCIsXG4gICAgICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwibm8tc3RvcmVcIixcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBgdGV4dC9wbGFpbjsgdGltZT0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwob3B0aW9ucy5yZXF1ZXN0LnVybCk7XG4gICAgbGV0IHBhdGhBcnJheSA9IHVybC5wYXRobmFtZS5zdWJzdHJpbmcoMSkuc3BsaXQoXCIvXCIpO1xuICAgIGlmIChydW50aW1lLmlnbm9yZVBhdGhMZXZlbCAhPT0gdW5kZWZpbmVkICYmIHJ1bnRpbWUuaWdub3JlUGF0aExldmVsICE9PSAwKSBwYXRoQXJyYXkgPSBwYXRoQXJyYXkuc2xpY2UocnVudGltZS5pZ25vcmVQYXRoTGV2ZWwpO1xuICAgIGNvbnN0IHBhdGhTdHJpbmcgPSBgLyR7cGF0aEFycmF5LmpvaW4oXCIvXCIpfWA7XG5cbiAgICBjb25zdCBleGVjdXRlSWQgPSBydW50aW1lPy5leGVjdXRlSWQgPyBhd2FpdCBydW50aW1lLmV4ZWN1dGVJZChvcHRpb25zLnJlcXVlc3QuaGVhZGVycykgOiBfX2NyZWF0ZUlkKCk7XG5cbiAgICBjb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIocnVudGltZSwgcGF0aFN0cmluZywgZXhlY3V0ZUlkKTtcbiAgICBydW50aW1lLnJ1bnRpbWUucmVxdWVzdC5zZXQoZXhlY3V0ZUlkLCB7IGxvZ2dlciB9KTtcbiAgICBjb25zdCByZXNwb25zZTogTWlsa2lvSHR0cFJlc3BvbnNlID0ge1xuICAgICAgYm9keTogXCJcIixcbiAgICAgIHN0YXR1czogMjAwLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIjogcnVudGltZS5jb3JzPy5jb3JzQWxsb3dNZXRob2RzID8/IFwiKlwiLFxuICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiOiBydW50aW1lLmNvcnM/LmNvcnNBbGxvd09yaWdpbiA/PyBcIipcIixcbiAgICAgICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzXCI6IHJ1bnRpbWUuY29ycz8uY29yc0FsbG93SGVhZGVycyA/PyBcIipcIixcbiAgICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwibm8tc3RvcmVcIixcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBsZXQgZmluYWxlczogQXJyYXk8KCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4+ID0gW107XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgaHR0cCA9IChhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBpcCA9IHJ1bnRpbWUucmVhbElwID8gcnVudGltZS5yZWFsSXAob3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMpIDogXCI6OjFcIjtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIHN0cmluZzogYXdhaXQgb3B0aW9ucy5yZXF1ZXN0LnRleHQoKSxcbiAgICAgICAgICBwYXJzZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBpcCxcbiAgICAgICAgICBwYXRoOiB7IHN0cmluZzogcGF0aFN0cmluZyBhcyBrZXlvZiAkdHlwZXNbXCJnZW5lcmF0ZWRcIl1bXCJyb3V0ZVNjaGVtYVwiXSwgYXJyYXk6IHBhdGhBcnJheSB9LFxuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICByZXF1ZXN0OiBvcHRpb25zLnJlcXVlc3QsXG4gICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgIH0gYXMgQ29udGV4dEh0dHA7XG4gICAgICB9KSgpKSE7XG5cbiAgICAgIGF3YWl0IHJ1bnRpbWUuZW1pdChcIm1pbGtpbzpodHRwUmVxdWVzdFwiLCB7IGV4ZWN1dGVJZCwgbG9nZ2VyLCBwYXRoOiBodHRwLnBhdGguc3RyaW5nIGFzIHN0cmluZywgaHR0cCB9KTtcblxuICAgICAgaWYgKCFydW50aW1lLmRldmVsb3AgJiYgKGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nKS5zdGFydHNXaXRoKFwiL18vXCIpKSB7XG4gICAgICAgIGF3YWl0IHJ1bnRpbWUuZW1pdChcIm1pbGtpbzpodHRwTm90Rm91bmRcIiwgeyBleGVjdXRlSWQsIGxvZ2dlciwgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsIGh0dHAgfSk7XG4gICAgICAgIHRocm93IHJlamVjdChcIk5PVF9GT1VORFwiLCB7IHBhdGg6IGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLmdldChcIkFjY2VwdFwiKT8uc3RhcnRzV2l0aChcInRleHQvZXZlbnQtc3RyZWFtXCIpKSB7XG4gICAgICAgIC8vIGFjdGlvblxuICAgICAgICBsZXQgcm91dGVTY2hlbWEgPSBvcHRpb25zLnJvdXRlU2NoZW1hO1xuICAgICAgICBpZiAoIXJvdXRlU2NoZW1hKSB7XG4gICAgICAgICAgcm91dGVTY2hlbWEgPSB0cmllLmdldChodHRwLnBhdGguc3RyaW5nIGFzIHN0cmluZyk7XG4gICAgICAgICAgaWYgKHJvdXRlU2NoZW1hID09PSBudWxsKSB7XG4gICAgICAgICAgICByb3V0ZVNjaGVtYSA9IGdlbmVyYXRlZC5yb3V0ZVNjaGVtYT8uW2h0dHAucGF0aC5zdHJpbmddO1xuICAgICAgICAgICAgaWYgKHJvdXRlU2NoZW1hID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgYXdhaXQgcnVudGltZS5lbWl0KFwibWlsa2lvOmh0dHBOb3RGb3VuZFwiLCB7IGV4ZWN1dGVJZCwgbG9nZ2VyLCBwYXRoOiBodHRwLnBhdGguc3RyaW5nIGFzIHN0cmluZywgaHR0cCB9KTtcbiAgICAgICAgICAgICAgdGhyb3cgcmVqZWN0KFwiTk9UX0ZPVU5EXCIsIHsgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJvdXRlU2NoZW1hLm1vZHVsZSAhPT0gXCJmdW5jdGlvblwiKSByb3V0ZVNjaGVtYS5tb2R1bGUgPSBhd2FpdCByb3V0ZVNjaGVtYS5tb2R1bGU7XG4gICAgICAgICAgICBlbHNlIHJvdXRlU2NoZW1hLm1vZHVsZSA9IGF3YWl0IHJvdXRlU2NoZW1hLm1vZHVsZSgpO1xuICAgICAgICAgICAgdHJpZS5hZGQoaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsIHJvdXRlU2NoZW1hKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocm91dGVTY2hlbWEudHlwZSAhPT0gXCJhY3Rpb25cIikgdGhyb3cgcmVqZWN0KFwiVU5BQ0NFUFRBQkxFXCIsIHsgZXhwZWN0ZWQ6IFwic3RyZWFtXCIsIG1lc3NhZ2U6IGBOb3QgYWNjZXB0YWJsZSwgdGhlIEFjY2VwdCBpbiB0aGUgcmVxdWVzdCBoZWFkZXIgc2hvdWxkIGJlIFwidGV4dC9ldmVudC1zdHJlYW1cIi4gSWYgeW91IGFyZSB1c2luZyB0aGUgXCJAbWlsa2lvL3N0YXJnYXRlXCIgcGFja2FnZSwgcGxlYXNlIGFkZCBcXGB0eXBlOiBcInN0cmVhbVwiXFxgIHRvIHRoZSBleGVjdXRlIG9wdGlvbnMuYCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4ZWN1dGVkID0gYXdhaXQgZXhlY3V0ZXIuX19leGVjdXRlKHJvdXRlU2NoZW1hLCB7XG4gICAgICAgICAgY3JlYXRlZEV4ZWN1dGVJZDogZXhlY3V0ZUlkLFxuICAgICAgICAgIGNyZWF0ZWRMb2dnZXI6IGxvZ2dlcixcbiAgICAgICAgICBwYXRoOiBodHRwLnBhdGguc3RyaW5nIGFzIHN0cmluZyxcbiAgICAgICAgICBoZWFkZXJzOiBvcHRpb25zLnJlcXVlc3QuaGVhZGVycyBhcyBIZWFkZXJzLFxuICAgICAgICAgIG1peGluQ29udGV4dDogeyBodHRwLCBoZWFkZXJzOiBodHRwLnJlcXVlc3QuaGVhZGVycyB9LFxuICAgICAgICAgIHBhcmFtczogaHR0cC5wYXJhbXMuc3RyaW5nLFxuICAgICAgICAgIHBhcmFtc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBmaW5hbGVzID0gZXhlY3V0ZWQuZmluYWxlcztcblxuICAgICAgICBpZiAocmVzcG9uc2UuYm9keSA9PT0gXCJcIiAmJiBleGVjdXRlZC5yZXN1bHRzLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoZXhlY3V0ZWQuZW1wdHlSZXN1bHQpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlLmJvZHkgPSBge1wiZGF0YVwiOnt9LFwiZXhlY3V0ZUlkXCI6XCIke2V4ZWN1dGVJZH1cIixcInN1Y2Nlc3NcIjp0cnVlfWA7XG4gICAgICAgICAgfSBlbHNlIGlmIChleGVjdXRlZC5yZXN1bHRzVHlwZVNhZmV0eSkge1xuICAgICAgICAgICAgcmVzcG9uc2UuYm9keSA9IGB7XCJkYXRhXCI6JHtyb3V0ZVNjaGVtYS5yZXN1bHRzVG9KU09OKGV4ZWN1dGVkLnJlc3VsdHMudmFsdWUpfSxcImV4ZWN1dGVJZFwiOlwiJHtleGVjdXRlSWR9XCIsXCJzdWNjZXNzXCI6dHJ1ZX1gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZS5ib2R5ID0gYHtcImRhdGFcIjoke1RTT04uc3RyaW5naWZ5KGV4ZWN1dGVkLnJlc3VsdHMudmFsdWUpfSxcImV4ZWN1dGVJZFwiOlwiJHtleGVjdXRlSWR9XCIsXCJzdWNjZXNzXCI6dHJ1ZX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJ1bnRpbWUuZW1pdChcIm1pbGtpbzpodHRwUmVzcG9uc2VcIiwgeyBleGVjdXRlSWQsIGxvZ2dlciwgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsIGh0dHAsIGhlYWRlcnM6IGh0dHAucmVxdWVzdC5oZWFkZXJzLCBjb250ZXh0OiBleGVjdXRlZC5jb250ZXh0IH0pO1xuXG4gICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBmaW5hbGVzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGhhbmRsZXIoKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgaW5zaWRlIG9uRmluYWxseS5cIiwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bnRpbWUucnVudGltZS5yZXF1ZXN0LmRlbGV0ZShleGVjdXRlSWQpO1xuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHJlc3BvbnNlLmJvZHksIHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHN0cmVhbVxuICAgICAgICBsZXQgcm91dGVTY2hlbWEgPSBvcHRpb25zLnJvdXRlU2NoZW1hO1xuICAgICAgICBpZiAoIXJvdXRlU2NoZW1hKSB7XG4gICAgICAgICAgcm91dGVTY2hlbWEgPSB0cmllLmdldChodHRwLnBhdGguc3RyaW5nIGFzIHN0cmluZyk7XG4gICAgICAgICAgaWYgKHJvdXRlU2NoZW1hID09PSBudWxsKSB7XG4gICAgICAgICAgICByb3V0ZVNjaGVtYSA9IGdlbmVyYXRlZC5yb3V0ZVNjaGVtYT8uW2h0dHAucGF0aC5zdHJpbmddO1xuICAgICAgICAgICAgaWYgKHJvdXRlU2NoZW1hID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgYXdhaXQgcnVudGltZS5lbWl0KFwibWlsa2lvOmh0dHBOb3RGb3VuZFwiLCB7IGV4ZWN1dGVJZCwgbG9nZ2VyLCBwYXRoOiBodHRwLnBhdGguc3RyaW5nIGFzIHN0cmluZywgaHR0cCB9KTtcbiAgICAgICAgICAgICAgdGhyb3cgcmVqZWN0KFwiTk9UX0ZPVU5EXCIsIHsgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJvdXRlU2NoZW1hLm1vZHVsZSAhPT0gXCJmdW5jdGlvblwiKSByb3V0ZVNjaGVtYS5tb2R1bGUgPSBhd2FpdCByb3V0ZVNjaGVtYS5tb2R1bGU7XG4gICAgICAgICAgICBlbHNlIHJvdXRlU2NoZW1hLm1vZHVsZSA9IGF3YWl0IHJvdXRlU2NoZW1hLm1vZHVsZSgpO1xuICAgICAgICAgICAgdHJpZS5hZGQoaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsIHJvdXRlU2NoZW1hKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJvdXRlU2NoZW1hLnR5cGUgIT09IFwic3RyZWFtXCIpIHRocm93IHJlamVjdChcIlVOQUNDRVBUQUJMRVwiLCB7IGV4cGVjdGVkOiBcInN0cmVhbVwiLCBtZXNzYWdlOiBgTm90IGFjY2VwdGFibGUsIHRoZSBBY2NlcHQgaW4gdGhlIHJlcXVlc3QgaGVhZGVyIHNob3VsZCBiZSBcImFwcGxpY2F0aW9uL2pzb25cIi4gSWYgeW91IGFyZSB1c2luZyB0aGUgXCJAbWlsa2lvL3N0YXJnYXRlXCIgcGFja2FnZSwgcGxlYXNlIHJlbW92ZSBcXGB0eXBlOiBcInN0cmVhbVwiXFxgIHRvIHRoZSBleGVjdXRlIG9wdGlvbnMuYCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhbmRsZUNsb3NlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHJ1bnRpbWUucnVudGltZS5yZXF1ZXN0LmRlbGV0ZShleGVjdXRlSWQpO1xuICAgICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBmaW5hbGVzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJBbiBlcnJvciBvY2N1cnJlZCBpbnNpZGUgb25GaW5hbGx5LlwiLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGV4ZWN1dGVkID0gYXdhaXQgZXhlY3V0ZXIuX19leGVjdXRlKHJvdXRlU2NoZW1hLCB7XG4gICAgICAgICAgY3JlYXRlZEV4ZWN1dGVJZDogZXhlY3V0ZUlkLFxuICAgICAgICAgIGNyZWF0ZWRMb2dnZXI6IGxvZ2dlcixcbiAgICAgICAgICBwYXRoOiBodHRwLnBhdGguc3RyaW5nIGFzIHN0cmluZyxcbiAgICAgICAgICBoZWFkZXJzOiBvcHRpb25zLnJlcXVlc3QuaGVhZGVycyBhcyBIZWFkZXJzLFxuICAgICAgICAgIG1peGluQ29udGV4dDogeyBodHRwLCBoZWFkZXJzOiBodHRwLnJlcXVlc3QuaGVhZGVycyB9LFxuICAgICAgICAgIHBhcmFtczogaHR0cC5wYXJhbXMuc3RyaW5nLFxuICAgICAgICAgIHBhcmFtc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBmaW5hbGVzID0gZXhlY3V0ZWQuZmluYWxlcztcbiAgICAgICAgLy8gQHRzLWlnbm9yZTogYnVuXG4gICAgICAgIGxldCBzdHJlYW06IFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAvLyBAdHMtaWdub3JlOiBidW5cbiAgICAgICAgbGV0IGNvbnRyb2w6IFJlYWRhYmxlU3RyZWFtRGlyZWN0Q29udHJvbGxlciB8IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI7XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZTogYnVuXG4gICAgICAgIGlmICh0eXBlb2YgQnVuICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZTogYnVuXG4gICAgICAgICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgICAgICAgIHR5cGU6IFwiZGlyZWN0XCIsXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlOiBidW5cbiAgICAgICAgICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcjogUmVhZGFibGVTdHJlYW1EaXJlY3RDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgIGNvbnRyb2wgPSBjb250cm9sbGVyO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIud3JpdGUoYGRhdGE6QCR7SlNPTi5zdHJpbmdpZnkoeyBzdWNjZXNzOiB0cnVlLCBkYXRhOiB1bmRlZmluZWQsIGV4ZWN1dGVJZCB9IHNhdGlzZmllcyBNaWxraW9SZXNwb25zZVN1Y2Nlc3M8YW55Pil9XFxuXFxuYCk7XG4gICAgICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiBleGVjdXRlZC5yZXN1bHRzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KFtudWxsLCBUU09OLmVuY29kZSh2YWx1ZSldKTtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci53cml0ZShgZGF0YToke3Jlc3VsdH1cXG5cXG5gKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVkLnJlc3VsdHMudmFsdWUucmV0dXJuKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhjZXB0aW9uID0gZXhjZXB0aW9uSGFuZGxlcihleGVjdXRlSWQsIGxvZ2dlciwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgcmVzdWx0W2V4Y2VwdGlvbi5jb2RlXSA9IGV4Y2VwdGlvbi5yZWplY3Q7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlci53cml0ZShgZGF0YToke0pTT04uc3RyaW5naWZ5KFtUU09OLmVuY29kZShyZXN1bHQpLCBudWxsXSl9XFxuXFxuYCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkpO1xuICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDbG9zZSgpO1xuICAgICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDbG9zZSgpO1xuICAgICAgICAgICAgICBjb250cm9sLmNsb3NlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgYW55KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBub2RlLmpzIG9yIG90aGVyc1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmU6IGJ1blxuICAgICAgICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlOiBidW5cbiAgICAgICAgICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICBjb250cm9sID0gY29udHJvbGxlcjtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoYGRhdGE6QCR7SlNPTi5zdHJpbmdpZnkoeyBzdWNjZXNzOiB0cnVlLCBkYXRhOiB1bmRlZmluZWQsIGV4ZWN1dGVJZCB9IHNhdGlzZmllcyBNaWxraW9SZXNwb25zZVN1Y2Nlc3M8YW55Pil9XFxuXFxuYCk7XG4gICAgICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiBleGVjdXRlZC5yZXN1bHRzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KFtudWxsLCBUU09OLmVuY29kZSh2YWx1ZSldKTtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGBkYXRhOiR7cmVzdWx0fVxcblxcbmApO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQucmVzdWx0cy52YWx1ZS5yZXR1cm4odW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGNlcHRpb24gPSBleGNlcHRpb25IYW5kbGVyKGV4ZWN1dGVJZCwgbG9nZ2VyLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICByZXN1bHRbZXhjZXB0aW9uLmNvZGVdID0gZXhjZXB0aW9uLnJlamVjdDtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoYGRhdGE6JHtKU09OLnN0cmluZ2lmeShbVFNPTi5lbmNvZGUocmVzdWx0KSwgbnVsbF0pfVxcblxcbmApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNsb3NlKCk7XG4gICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKTtcbiAgICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ2xvc2UoKTtcbiAgICAgICAgICAgICAgY29udHJvbC5jbG9zZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIGFueSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXNwb25zZS5ib2R5ID0gc3RyZWFtO1xuICAgICAgICByZXNwb25zZS5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiO1xuICAgICAgICByZXNwb25zZS5oZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IFwibm8tY2FjaGVcIjtcblxuICAgICAgICBhd2FpdCBydW50aW1lLmVtaXQoXCJtaWxraW86aHR0cFJlc3BvbnNlXCIsIHsgZXhlY3V0ZUlkLCBsb2dnZXIsIHBhdGg6IGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nLCBodHRwLCBoZWFkZXJzOiBodHRwLnJlcXVlc3QuaGVhZGVycywgY29udGV4dDogZXhlY3V0ZWQuY29udGV4dCB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHJlc3BvbnNlLmJvZHksIHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgcmVzdWx0czogUmVzdWx0czxNaWxraW9SZXNwb25zZVJlamVjdD4gPSB7XG4gICAgICAgIHZhbHVlOiBleGNlcHRpb25IYW5kbGVyKGV4ZWN1dGVJZCwgbG9nZ2VyLCBlcnJvciksXG4gICAgICB9O1xuICAgICAgaWYgKHJlc3VsdHMudmFsdWUgIT09IHVuZGVmaW5lZCkgcmVzcG9uc2UuYm9keSA9IFRTT04uc3RyaW5naWZ5KHJlc3VsdHMudmFsdWUpO1xuXG4gICAgICBydW50aW1lLnJ1bnRpbWUucmVxdWVzdC5kZWxldGUoZXhlY3V0ZUlkKTtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UocmVzcG9uc2UuYm9keSwgcmVzcG9uc2UpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzdHJlYW1DbG9zZXJzOiBNYXA8c3RyaW5nLCB7IGdlbmVyYXRvcjogQXN5bmNHZW5lcmF0b3I7IGhhbmRsZUNsb3NlOiBhbnkgfT4gPSBuZXcgTWFwKCk7XG4gIGNvbnN0IGhhbmRsZU1lc3NhZ2UgPSBhc3luYyAoXG4gICAgcG9ydDogeyBwb3N0TWVzc2FnZShtZXNzYWdlOiBhbnkpOiB2b2lkIH0sXG4gICAgb3B0aW9uczpcbiAgICAgIHwge1xuICAgICAgICAgIGV4ZWN1dGVJZDogc3RyaW5nO1xuICAgICAgICAgIHBhdGg6IHN0cmluZztcbiAgICAgICAgICBwYXJhbXM/OiBSZWNvcmQ8YW55LCBhbnk+O1xuICAgICAgICAgIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgICB9XG4gICAgICB8IHN0cmluZyxcbiAgKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAob3B0aW9ucyA9PT0gXCJQSU5HXCIpIHtcbiAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShcIlBPTkdcIik7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5zdGFydHNXaXRoKFwiQ0xPU0VfU1RSRUFNOlwiKSkge1xuICAgICAgICBjb25zdCBleGVjdXRlSWQgPSBvcHRpb25zLnNwbGl0KFwiQ0xPU0VfU1RSRUFNOlwiKVsxXTtcbiAgICAgICAgY29uc3Qgc3RyZWFtQ2xvc2VyID0gc3RyZWFtQ2xvc2Vycy5nZXQoZXhlY3V0ZUlkKTtcbiAgICAgICAgaWYgKHN0cmVhbUNsb3Nlcikge1xuICAgICAgICAgIHN0cmVhbUNsb3Nlci5nZW5lcmF0b3IucmV0dXJuKHVuZGVmaW5lZCk7XG4gICAgICAgICAgc3RyZWFtQ2xvc2VyLmhhbmRsZUNsb3NlKFwic3RyZWFtXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByb3V0ZVNjaGVtYSA9IHRyaWUuZ2V0KG9wdGlvbnMucGF0aCk7XG4gICAgaWYgKHJvdXRlU2NoZW1hID09PSBudWxsKSB7XG4gICAgICByb3V0ZVNjaGVtYSA9IGdlbmVyYXRlZC5yb3V0ZVNjaGVtYT8uW29wdGlvbnMucGF0aF07XG4gICAgICBpZiAocm91dGVTY2hlbWEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyByZWplY3QoXCJOT1RfRk9VTkRcIiwgeyBwYXRoOiBvcHRpb25zLnBhdGggfSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHJvdXRlU2NoZW1hLm1vZHVsZSAhPT0gXCJmdW5jdGlvblwiKSByb3V0ZVNjaGVtYS5tb2R1bGUgPSBhd2FpdCByb3V0ZVNjaGVtYS5tb2R1bGU7XG4gICAgICBlbHNlIHJvdXRlU2NoZW1hLm1vZHVsZSA9IGF3YWl0IHJvdXRlU2NoZW1hLm1vZHVsZSgpO1xuICAgICAgdHJpZS5hZGQob3B0aW9ucy5wYXRoLCByb3V0ZVNjaGVtYSk7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgY29uc3QgcGFyYW1zID0gb3B0aW9ucy5wYXJhbXMgPz8ge307XG4gICAgY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKHJ1bnRpbWUsIG9wdGlvbnMucGF0aCwgb3B0aW9ucy5leGVjdXRlSWQpO1xuICAgIGxldCBmaW5hbGVzOiBBcnJheTwoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPj4gPSBbXTtcblxuICAgIGNvbnN0IGh0dHAgPSBuZXcgUHJveHkoXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZ2V0OiAodGFyZ2V0LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PT0gXCJub3RGb3VuZFwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB0aHJvdyByZWplY3QoXCJVTkFDQ0VQVEFCTEVcIiwgeyBleHBlY3RlZDogXCJjb250ZXh0Lmh0dHBcIiwgbWVzc2FnZTogXCJUaGlzIHJlcXVlc3Qgd2FzIGludm9rZWQgdGhyb3VnaCB0aGUgZXhlY3V0ZSBtZXRob2QuIFNpbmNlIG5vIGFjdHVhbCByZXF1ZXN0IHdhcyBnZW5lcmF0ZWQsIHRoZSBIVFRQIG1ldGhvZHMgdW5kZXIgdGhlIGNvbnRleHQgY2Fubm90IGJlIGFjY2Vzc2VkLlwiIH0pO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6ICgpID0+IHtcbiAgICAgICAgICB0aHJvdyByZWplY3QoXCJVTkFDQ0VQVEFCTEVcIiwgeyBleHBlY3RlZDogXCJjb250ZXh0Lmh0dHBcIiwgbWVzc2FnZTogXCJUaGlzIHJlcXVlc3Qgd2FzIGludm9rZWQgdGhyb3VnaCB0aGUgZXhlY3V0ZSBtZXRob2QuIFNpbmNlIG5vIGFjdHVhbCByZXF1ZXN0IHdhcyBnZW5lcmF0ZWQsIHRoZSBIVFRQIG1ldGhvZHMgdW5kZXIgdGhlIGNvbnRleHQgY2Fubm90IGJlIGFjY2Vzc2VkLlwiIH0pO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgaGFuZGxlQ2xvc2UgPSBhc3luYyAodHlwZTogXCJhY3Rpb25cIiB8IFwic3RyZWFtXCIpID0+IHtcbiAgICAgIGlmICh0eXBlID09PSBcInN0cmVhbVwiKSBzdHJlYW1DbG9zZXJzLmRlbGV0ZShvcHRpb25zLmV4ZWN1dGVJZCk7XG4gICAgICBydW50aW1lLnJ1bnRpbWUucmVxdWVzdC5kZWxldGUob3B0aW9ucy5leGVjdXRlSWQpO1xuICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGZpbmFsZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBoYW5kbGVyKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgaW5zaWRlIG9uRmluYWxseS5cIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAocm91dGVTY2hlbWEudHlwZSA9PT0gXCJhY3Rpb25cIikge1xuICAgICAgICBjb25zdCBleGVjdXRlZCA9IGF3YWl0IGV4ZWN1dGVyLl9fZXhlY3V0ZShyb3V0ZVNjaGVtYSwge1xuICAgICAgICAgIGNyZWF0ZWRFeGVjdXRlSWQ6IG9wdGlvbnMuZXhlY3V0ZUlkLFxuICAgICAgICAgIGNyZWF0ZWRMb2dnZXI6IGxvZ2dlcixcbiAgICAgICAgICBwYXRoOiBvcHRpb25zLnBhdGgsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBtaXhpbkNvbnRleHQ6IHsgaHR0cDogaHR0cCwgaGVhZGVycyB9LFxuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICBwYXJhbXNUeXBlOiBcInJhd1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgZmluYWxlcyA9IGV4ZWN1dGVkLmZpbmFsZXM7XG5cbiAgICAgICAgYXdhaXQgaGFuZGxlQ2xvc2UoXCJhY3Rpb25cIik7XG5cbiAgICAgICAgaWYgKGV4ZWN1dGVkLmVtcHR5UmVzdWx0KSB7XG4gICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBleGVjdXRlSWQ6IG9wdGlvbnMuZXhlY3V0ZUlkLFxuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIGV4ZWN1dGVJZDogb3B0aW9ucy5leGVjdXRlSWQsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZGF0YTogZXhlY3V0ZWQucmVzdWx0cy52YWx1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJvdXRlU2NoZW1hLnR5cGUgPT09IFwic3RyZWFtXCIpIHtcbiAgICAgICAgY29uc3QgZXhlY3V0ZWQgPSBhd2FpdCBleGVjdXRlci5fX2V4ZWN1dGUocm91dGVTY2hlbWEsIHtcbiAgICAgICAgICBjcmVhdGVkRXhlY3V0ZUlkOiBvcHRpb25zLmV4ZWN1dGVJZCxcbiAgICAgICAgICBjcmVhdGVkTG9nZ2VyOiBsb2dnZXIsXG4gICAgICAgICAgcGF0aDogb3B0aW9ucy5wYXRoLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgbWl4aW5Db250ZXh0OiB7IGh0dHA6IGh0dHAsIGhlYWRlcnMgfSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgcGFyYW1zVHlwZTogXCJyYXdcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGZpbmFsZXMgPSBleGVjdXRlZC5maW5hbGVzO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSh7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IHVuZGVmaW5lZCwgZXhlY3V0ZUlkOiBvcHRpb25zLmV4ZWN1dGVJZCwgZG9uZTogZmFsc2UgfSk7XG4gICAgICAgICAgc3RyZWFtQ2xvc2Vycy5zZXQob3B0aW9ucy5leGVjdXRlSWQsIHsgZ2VuZXJhdG9yOiBleGVjdXRlZC5yZXN1bHRzLnZhbHVlLCBoYW5kbGVDbG9zZSB9KTtcbiAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbHVlIG9mIGV4ZWN1dGVkLnJlc3VsdHMudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IFtudWxsLCB2YWx1ZV0sIGV4ZWN1dGVJZDogb3B0aW9ucy5leGVjdXRlSWQsIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogdW5kZWZpbmVkLCBleGVjdXRlSWQ6IG9wdGlvbnMuZXhlY3V0ZUlkLCBkb25lOiB0cnVlIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IGV4Y2VwdGlvbiA9IGV4Y2VwdGlvbkhhbmRsZXIob3B0aW9ucy5leGVjdXRlSWQsIGxvZ2dlciwgZXJyb3IpO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgICAgICAgcmVzdWx0W2V4Y2VwdGlvbi5jb2RlXSA9IGV4Y2VwdGlvbi5yZWplY3Q7XG4gICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSh7IHN1Y2Nlc3M6IGZhbHNlLCBkYXRhOiBbVFNPTi5lbmNvZGUocmVzdWx0KSwgbnVsbF0sIGV4ZWN1dGVJZDogb3B0aW9ucy5leGVjdXRlSWQsIGRvbmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgaGFuZGxlQ2xvc2UoXCJzdHJlYW1cIik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGV4Y2VwdGlvbkhhbmRsZXIob3B0aW9ucy5leGVjdXRlSWQsIGxvZ2dlciwgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHBvcnQsXG4gICAgZmV0Y2gsXG4gICAgaGFuZGxlTWVzc2FnZSxcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IHsgVFNPTiB9IGZyb20gXCJAc291dGhlcm4tYXVyb3JhL3Rzb25cIjtcbmltcG9ydCB0eXBlIHsgTWlsa2lvUmVzcG9uc2VSZWplY3QsIExvZ2dlciB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlICRyZWplY3RDb2RlIHtcbiAgRkFJTDogc3RyaW5nO1xuICBSRVFVRVNUX0ZBSUw6IGFueTtcbiAgTk9UX0RFVkVMT1BfTU9ERTogc3RyaW5nO1xuICBSRVFVRVNUX1RJTUVPVVQ6IHsgdGltZW91dDogbnVtYmVyOyBtZXNzYWdlOiBzdHJpbmcgfTtcbiAgTk9UX0ZPVU5EOiB7IHBhdGg6IHN0cmluZyB9O1xuICBQQVJBTVNfVFlQRV9JTkNPUlJFQ1Q6IHsgcGF0aDogc3RyaW5nOyBleHBlY3RlZDogc3RyaW5nOyB2YWx1ZTogYW55OyBtZXNzYWdlOiBzdHJpbmcgfSB8IG51bGw7XG4gIFJFU1VMVFNfVFlQRV9JTkNPUlJFQ1Q6IHsgcGF0aDogc3RyaW5nOyBleHBlY3RlZDogc3RyaW5nOyB2YWx1ZTogYW55OyBtZXNzYWdlOiBzdHJpbmcgfSB8IG51bGw7XG4gIFVOQUNDRVBUQUJMRTogeyBleHBlY3RlZDogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfTtcbiAgUEFSQU1TX1RZUEVfTk9UX1NVUFBPUlRFRDogeyBleHBlY3RlZDogc3RyaW5nIH07XG4gIFJFU1VMVFNfVFlQRV9OT1RfU1VQUE9SVEVEOiB7IGV4cGVjdGVkOiBzdHJpbmcgfTtcbiAgSU5URVJOQUxfU0VSVkVSX0VSUk9SOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWplY3Q8Q29kZSBleHRlbmRzIGtleW9mICRyZWplY3RDb2RlLCBSZWplY3REYXRhIGV4dGVuZHMgJHJlamVjdENvZGVbQ29kZV0+KGNvZGU6IENvZGUsIGRhdGE6IFJlamVjdERhdGEpOiBNaWxraW9SZWplY3RFcnJvcjxDb2RlLCBSZWplY3REYXRhPiB7XG4gIGNvbnN0IGVycm9yID0geyAkbWlsa2lvUmVqZWN0OiB0cnVlLCBjb2RlLCBkYXRhIH0gYXMgTWlsa2lvUmVqZWN0RXJyb3I8Q29kZSwgUmVqZWN0RGF0YT47XG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVycm9yKTtcbiAgcmV0dXJuIGVycm9yO1xufVxuXG5leHBvcnQgdHlwZSBNaWxraW9SZWplY3RFcnJvcjxDb2RlIGV4dGVuZHMga2V5b2YgJHJlamVjdENvZGUgPSBrZXlvZiAkcmVqZWN0Q29kZSwgUmVqZWN0RGF0YSBleHRlbmRzICRyZWplY3RDb2RlW0NvZGVdID0gJHJlamVjdENvZGVbQ29kZV0+ID0geyBjb2RlOiBDb2RlOyBkYXRhOiBSZWplY3REYXRhOyBzdGFjazogc3RyaW5nOyAkbWlsa2lvUmVqZWN0OiB0cnVlIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBleGNlcHRpb25IYW5kbGVyKGV4ZWN1dGVJZDogc3RyaW5nLCBsb2dnZXI6IExvZ2dlciwgZXJyb3I6IE1pbGtpb1JlamVjdEVycm9yPGFueSwgYW55PiB8IGFueSk6IE1pbGtpb1Jlc3BvbnNlUmVqZWN0IHtcbiAgdHJ5IHtcbiAgICBpZiAoXCJ2aXRlU2VydmVyXCIgaW4gZ2xvYmFsVGhpcykgKGdsb2JhbFRoaXMgYXMgYW55KS52aXRlU2VydmVyLnNzckZpeFN0YWNrdHJhY2UoZXJyb3IpOyAvLyBmaXggdml0ZSBzc3Igc3RhY2t0cmFjZVxuICB9IGNhdGNoIChlcnJvcikge31cbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgXCJ2aXRlU2VydmVyXCIgaW4gZ2xvYmFsVGhpcykgKGdsb2JhbFRoaXMgYXMgYW55KS52aXRlU2VydmVyLnNzckZpeFN0YWNrdHJhY2UoZXJyb3IpO1xuICBjb25zdCBuYW1lID0gZXJyb3I/LmNvZGUgPz8gZXJyb3I/Lm5hbWUgPz8gZXJyb3I/LmNvbnN0cnVjdG9yPy5uYW1lID8/IFwiVW5uYW1lZCBFeGNlcHRpb25cIjtcblxuICBpZiAoZXJyb3I/LiRtaWxraW9SZWplY3QgPT09IHRydWUgJiYgZXJyb3I/LmNvZGUgPT09IFwiTk9UX0ZPVU5EXCIpIHtcbiAgICBsb2dnZXIuaW5mbyhuYW1lLCBlcnJvcj8uZGF0YT8ucGF0aCA/PyBcIlVua25vd24gcGF0aFwiKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhY2sgPSBlcnJvcj8uJG1pbGtpb1JlamVjdCA/IChlcnJvcj8uc3RhY2sgPz8gXCJcIikuc3BsaXQoXCJcXG5cIikuc2xpY2UoMikuam9pbihcIlxcblwiKSA6IChlcnJvcj8uc3RhY2sgPz8gXCJcIik7XG4gICAgICBsb2dnZXIuZXJyb3IobmFtZSwgYFxcbiR7VFNPTi5zdHJpbmdpZnkoZXJyb3I/LmRhdGEpfWAsIGBcXG4ke3N0YWNrfVxcbmApO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIGxvZ2dlci5lcnJvcihuYW1lLCBgXFxuJHtlcnJvcj8udG9TdHJpbmcoKX1gLCBgXFxuJHtlcnJvcj8uc3RhY2t9XFxuYCk7XG4gICAgfVxuICB9XG5cbiAgbGV0IHJlc3VsdDogTWlsa2lvUmVzcG9uc2VSZWplY3Q7XG5cbiAgaWYgKGVycm9yPy4kbWlsa2lvUmVqZWN0ID09PSB0cnVlKSByZXN1bHQgPSB7IHN1Y2Nlc3M6IGZhbHNlLCBjb2RlOiBlcnJvci5jb2RlLCByZWplY3Q6IGVycm9yLmRhdGEsIGV4ZWN1dGVJZCB9O1xuICBlbHNlIHJlc3VsdCA9IHsgc3VjY2VzczogZmFsc2UsIGNvZGU6IFwiSU5URVJOQUxfU0VSVkVSX0VSUk9SXCIsIHJlamVjdDogdW5kZWZpbmVkLCBleGVjdXRlSWQgfTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjtBQUFPLFNBQVMsSUFBNkIsQ0FBQyxTQUEyQjtBQUFBLEVBQ3ZFLE9BQU8sUUFBUTtBQUFBOztBQ1VWLFNBQVMsVUFBMEMsQ0FBQyxPQUErQjtBQUFBLEVBQ3hGLE9BQU87QUFBQSxJQUNMLE1BQU0sT0FBTyxFQUFFLGFBQWEsZUFBZSxNQUFNO0FBQUEsRUFDbkQ7QUFBQTs7QUNkRixJQUFNLElBQUk7QUFBQSxFQUNSLE9BQU87QUFBQSxJQUNMLFdBQVc7QUFBQSxNQUNUO0FBQUEsUUFDRSxPQUFPLENBQUMsTUFBTSxPQUFPLEtBQUs7QUFBQSxRQUMxQixTQUFTLENBQUMsTUFBTSxZQUFZLEVBQUUsU0FBUztBQUFBLE1BQ3pDO0FBQUEsTUFDQTtBQUFBLFFBQ0UsT0FBTyxDQUFDLE1BQU0sYUFBYTtBQUFBLFFBQzNCLFNBQVMsQ0FBQyxNQUFNLFVBQVUsRUFBRSxZQUFZO0FBQUEsTUFDMUM7QUFBQSxNQUNBO0FBQUEsUUFDRSxPQUFPLENBQUMsTUFBTSxhQUFhO0FBQUEsUUFDM0IsU0FBUyxDQUFDLE1BQU0sU0FBUyxFQUFFLFNBQVM7QUFBQSxNQUN0QztBQUFBLE1BQ0E7QUFBQSxRQUNFLE9BQU8sQ0FBQyxNQUFNLGFBQWE7QUFBQSxRQUMzQixTQUFTLENBQUMsTUFBTSxZQUFZLEVBQUUsU0FBUztBQUFBLE1BQ3pDO0FBQUEsTUFDQTtBQUFBLFFBQ0UsT0FBTyxDQUFDLE1BQU0sYUFBYTtBQUFBLFFBQzNCLFNBQVMsQ0FBQyxNQUFNLGdCQUFnQixJQUFJLFlBQVksRUFBRSxPQUFPLENBQUM7QUFBQSxN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QU8sa0JBQWtCLFFBQVEsT0FBTyxTQUFTLGFBQWE7QUFBQSxJQUNoRSxPQUFPLEtBQUssTUFBTSxPQUFPLE1BQU0sUUFBUSxjQUFjO0FBQUEsRUFDdkQsRUFBTztBQUFBLElBQ0wsSUFBSTtBQUFBLE1BQ0YsTUFBTSxRQUFRLE9BQU8saUJBQWlCLE9BQU8sU0FBUyxJQUFJLE1BQU07QUFBQSxDQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSztBQUFBLENBQUksSUFBSyxPQUFPLFNBQVM7QUFBQSxNQUM3RyxPQUFPLE1BQU0sTUFBTTtBQUFBLEVBQUssRUFBSyxVQUFVLE9BQU8sSUFBSSxLQUFLO0FBQUEsRUFBSztBQUFBLENBQVM7QUFBQSxNQUNyRSxPQUFPLEdBQUc7QUFBQSxNQUNWLE9BQU8sTUFBTSxNQUFNO0FBQUEsRUFBSyxPQUFPLFNBQVMsS0FBSztBQUFBLEVBQUssT0FBTztBQUFBLENBQVM7QUFBQTtBQUFBO0FBQUEsRUFJdEUsSUFBSTtBQUFBLEVBRUosSUFBSSxPQUFPLGtCQUFrQjtBQUFBLElBQU0sU0FBUyxFQUFFLFNBQVMsT0FBTyxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxVQUFVO0FBQUEsRUFDekc7QUFBQSxhQUFTLEVBQUUsU0FBUyxPQUFPLE1BQU0seUJBQXlCLFFBQVEsV0FBVyxVQUFVO0FBQUEsRUFFNUYsT0FBTztBQUFBOyIsCiAgImRlYnVnSWQiOiAiQzg2NDY0NDhGQTA1MkQzNTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|